通讯口

ES2/EX2/SA2/SX2 系列主机最多有 3 个通讯口(COM1~COM3), SS2 系列主机有 2 个通讯口(COM1, COM2)。支持台达人机界面(HMI) “DELTA Q-link” 通讯格式, 可加快 HMI 画面更新速度。

COM1 : RS-232 通讯口,可做主站或从站。为主要的程序编辑通讯口。

COM2 :  RS-485 通讯口, 可做主站或从站。

ES2/EX2/SA2 COM3 :  RS-485 通讯口,可做主站或从站。

SX2 COM3: USB 通讯口, 可做从站。

COM1~COM3 通讯口可用于 Modbus ASCII 或 RTU 模式通讯.

通讯结构:

通讯口通讯参数RS-232(COM1)RS-485(COM2)RS-485(COM3)USB(COM3)
波特率110~115200 bps110~921,000 bps110~115200 bps
数据位长度7~8 位
奇偶校验位奇校验/偶校验/无校验
停止数据位长度1~2 数据位
通讯参数设置寄存器D1036D1120D1109
通讯格式保持M1138M1120M1136
ASCII 模式主站/从站都有效从站有效
RTU 模式主站/从站都有效从站有效
ASCII /RTU 模式切换M1139M1143M1320
从站通讯地址设定缓存器D1121D1255
读写数据长度 (ASCII 模式)100 个寄存器
读写数据长度 (RTU 模式)100 个寄存器

通讯口的默认通讯格式

L     Modbus ASCII 模式

L     7 个数据位

L     1 个停止位

L     奇校验位 (EVEN)

L     9600bps 波特率

4.2    ASCII 模式通讯协议

通讯数据结构

9600 (波特率), 7 (数据位), Even (奇偶校验位) 1 (起始位), 1 (停止位)

字段名组成说明
起始字符STX起始字符为:’,冒号的 ASCII 码为 3AH
从站地址ADR 1通讯地址由两个 ASCII 码组成
ADR 0
命令码CMD 1命令码由两个 ASCII 码组成
CMD 0
  数据DATA (0)  数据内容由 2n 个 ASCII 码组成, ns205。
DATA (1)
……… .
DATA (n-1)
LRC 校验码LRC CHK 1LRC 校验码由 2 个 ASCII 码组成
LRC CHK 0
结束字符END1结束字符由 2 个 ASCII 码组成END1 = CR (0DH) ,END0 = LF (0AH)
END0

16 进制与 ASCII 码对应关系如下表所示:

ASCII 码“0““1““2““3““4““5““6““7“
16 进制30H31H32H33H34H35H36H37H
ASCII 码“8““9““A““B““C““D““E““F“
16 进制38H39H41H42H43H44H45H46H

4.2.1  ADR (通讯地址)

有效的通讯地址范围为 0~254。当通讯地址为 0 时表示对所有 PLC 广播, 收到广播消息的 PLC 不会 对广播消息做回应。当 PLC 地址不为 0 时, PLC 会回应正常讯息给主站设备。

例如,通讯地址为 16  (十进制) 的 PLC 的地址的 ASCII 码表示方法如下所示(十进制数 16 的十六 进制为 10)。

(ADR 1, ADR 0)=’1’,’0’s’1’=31H, ‘0’ = 30H

4.2.2  命令码及数据

数据字符的格式取决于命令码,有效的命令码的描述如下表所示:

台达PLC进行MODBUS通讯协议说明插图1命令码(Hex)台达PLC进行MODBUS通讯协议说明插图3含义可操作装置
01 (01 H)读节点状态(不可读输入节点状态)S, Y, M, T, C
02 (02 H)读节点状态(可读输入节点状态)S, X, Y, M,T, C
03 (03 H)读寄存器的内容值T, C, D
05 (04 H)强制单独节点状态 On/OffS, Y, M, T, C
06 (06 H)预设单独寄存器的值T, C, D
15 (0F H)强制多个节点状态 On/OffS, Y, M, T, C
16 (10 H)预设多个寄存器的值T, C, D
17 (11 H)报告从站地址None
23 (17 H)PLC LINK 在一个轮询时间内同时 执行读写功能None

例如: 读取 PLC 通讯地址 01, 地址 H0614~H61B (寄存器 T20~T27)  的连续 8 个字符组的数据。0614 (十六进制) 为 PLC 内部 T20 的地址。

PC一PLC:

“: 01 03 06 14 00 08 DA CR LF”

请求讯息:

字段名ASCII 码16 进制
起始字符:3A
从站地址0130 31
命令码0330 33
起始数据地址高字节0630 36
起始数据地址低字节1431 34
接点个数高字节0030 30
接点个数低字节0830 38
LRC 校验码DA44 41
结束字符CR LF0D 0A

PLC一PC

“: 01 03 10 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 C8 CR LF”

回应讯息:

字段名ASCII 码16 进制
起始字符:3A
从站地址0130 31
命令码0330 33
字段名ASCII 码16 进制
字节数1031 30
高字节(T20)0030 30
低字节(T20)0130 31
高字节(T21)0030 30
低字节(T21)0230 32
高字节(T22)0030 30
低字节(T22)0330 33
高字节(T23)0030 30
低字节(T23)0430 34
高字节(T24)0030 30
低字节(T24)0530 35
高字节(T25)0030 30
低字节(T25)0630 36
高字节(T26)0030 30
低字节(T26)0730 37
高字节(T27)0030 30
低字节(T27)0830 38
LRC 校验码C843 38
结束字符CR LF0D 0A

4.2.3   LRC校验 (校验和)

LRC 校验码为从站地址至最后一个数据内容的 16 进制数叠加后的值的各位取反后再加 1 的值。如下 例所示,LRC 校验码的值为 F6(16 进制)。LRC 校验码的计算方法如下:01H+03H+04H+01H+00+01H = 0AH, 0A  (16 进制)各位取反后的结果再加 1 为 F6  (16 进制)。

字段名ASCII 码16 进制
起始字符:3A
从站地址0130 31
命令码0330 33
起始数据地址高字节0430 34
起始数据地址低字节0130 31
接点个数高字节0030 30
接点个数低字节0130 31
LRC 校验码F646 36
结束字符CR LF0D 0A

异常响应:

从站在收到主站的命令讯息后期望回应给主站一个正常的回应讯息, 但有时 PLC 在收到主站的命令 讯息后不回应或者回应错误原因,下面将描述 PLC 没有给主站设备回应或回应错误原因的情况。

1.  由于通讯错误, PLC 没有收到正确的命令讯息: 因此当 PLC 没有回应讯息时,主站设备须设置一 个通讯超时条件。

2. 没有通讯错误发生时, PLC 接收到一个有效的通讯讯息, 但 PLC 不能理解此讯息的意思, 所以 PLC 会给主站做异常回应。回应讯息的命令码的最高位会置位为 1 并且会返回一个异常码说明造成异常回 应的原因。

命令码为 01H 时的异常响应范例, 异常响应码为 02H

请求讯息:

字段名ASCII 码十六进制
起始字符:3A
30 31
从站地址01
命令码0130 31
起始数据地址高字节0430 34
起始数据地址低字节0030 30
接点个数高字节 (单位:位)0030 30
接点个数低字节 (单位:位)1031 30
LRC 校验码EA45 41
结束字符CR LF0D 0A

回应讯息

字段名ASCII 码十六进制
起始字符:3A
30 31
从站地址01
命令码8138 31
30 32
异常码02
LRC 校验码7C37 43
结束字符CR LF0D 0A
异常码含义
01非法命令码: PLC 接收的命令信息中的命令码无效
02非法的装置地址:接收的命令信息中的地址无效。
03非法装置值: PLC 接收的命令信息中的数据内容无效。
071.    校验和错误●     检查校验和是否正确
异常码含义
 2.    非法的命令讯息●     命令讯息太短●     命令讯息长度超出范围

4.3      RTU  模式通讯协议

通讯数据结构

9600 (波特率), 8 (数据位), Even (奇偶校验位) 1 (起始位), 1 (停止位)

开始保持无输入数据≥10 ms
从站地址从站地址:: 8 位二进制数地址
命令码命令码:: 8 位二进制数地址
数据 (n-1)数据内容n  × 8 位二进制数, n<=202
…… .
数据 0
CRC 校验和低字节CRC 校验和CRC 校验和由两个 8 位二进制数组成
CRC 校验和高字节
结束保持无输入数据≥10 ms

4.3.1  地址 (通讯地址)

有效的通讯地址范围为 0~254。当通讯地址为 0 时表示对所有 PLC 广播, 收到广播消息的 PLC 不会 对广播消息做回应。当 PLC 地址不为 0 时, PLC 会回应正常消息给主站设备。

例如, 当和通讯地址为 16 (十进制) 的 PLC 进行通讯时, 从站地址须设为 10 (16 进制), 十进制数 16 的十六进制为 10)。

4.3.2  命令码及数据

数据字符的格式取决于命令码, 有效的功能码的描述请参考 4.2.2 节。

范例: 读取 PLC 站号 01, 地址 H0614~H61B (T20~T27)的连续 8 个字符组的数据。读取从站设备 (通 讯地址为 1)的值。

PC一PLC

“ 01 03 06 14 00 08 04 80”

传送讯息:

字段名数据 (16 进制)
开始保持无输入数据≥10 ms
从站地址01
命令码03
数据起始地址06
字段名数据 (16 进制)
 14
数据个数(以字节为单位)00
08
CRC 校验和低字节04
CRC 校验和高字节80
结束保持无输入数据≥10 ms

PLC一PC

“ 01 03 10 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 72 98”

回应讯息:

字段名数据 (16 进制)
开始保持无输入数据≥10 ms
从站地址01
命令码03
数据个数(以字节为单位)10
数据高字节 (T20)00
数据低字节 (T20)01
数据高字节 (T21)00
数据低字节 (T21)02
数据高字节 (T22)00
数据低字节 (T22)03
数据高字节 (T23)00
数据低字节 (T23)04
数据高字节 (T24)00
数据低字节 (T24)05
数据高字节 (T25)00
数据低字节 (T25)06
数据高字节 (T26)00
数据低字节 (T26)07
数据高字节 (T27)00
数据低字节 (T27)08
CRC 校验和低字节72
CRC 校验和高字节98
结束保持无输入数据≥10 ms

4.3.3  CRC 校验 (校验和)

CRC 校验从”从站地址” 开始,至”最后一个数据内容”结束。CRC 校验计算方法如下: 步骤 1 : 载入一个内容值为 FFFF  (十六进制) 的 16 位寄存器(称为 CRC 寄存器)。

步骤 2 : 指令讯息中的第一个字节的 8 位数据与 CRC 寄存器低字节的 8 位数据进行异或运算,运算 结果存储于 CRC 寄存器内。

步骤 3: CRC 寄存器的内容值右移 1 位并将其最高位填入 0。

步骤 4:  检查 CRC 寄存器最低位的值,如果为 0 则重复步骤 3:如果为 1 , CRC 寄存器的内容与 A001  (十六进制)进行异或运算, 运算结果存储于 CRC 寄存器内。

步骤 5 : 重复步骤 3 及步骤 4,直到CRC 寄存器的内容被右移了8 位。此时, 指令讯息的第一个字节 已完成处理。

步骤 6 : 对指令讯息的下一个字节重复步骤 2 至步骤 5 的操作, 直到指令讯息的所有字节都被处理完 成。CRC 寄存器最后的内容就是 CRC 校验值。在指令讯息中传送 CRC 校验值时, 计算出的 CRC 校 验值高低字节须互换, 即 CRC 校验值低字节先被传送。

下面为用 C 语言求 CRC 校验值的计算范例

unsigned char* data     <// 指令讯息内容指针

unsigned char length   <// 指令讯息的长度

unsigned int crc_chk(unsigned char* data, unsigned char length)

{

int j;

unsigned int reg_crc=0Xffff;

while(length–)

{

reg_crc ^= *data++;

for (j=0;j<8;j++)

{

If (reg_crc & 0x01) reg_crc=(reg_crc>>1) ^ 0Xa001; /* LSB(b0)=1 */

else reg_crc=reg_crc >>1;

}

}

return reg_crc;       // the value that sent back to the CRC register finally

}

异常回应:

从站在收到主站的命令讯息后期望回应给主站一个正常的回应讯息, 但有时 PLC 在收到主站的命令 讯息后不回应或者回应错误原因,下面将描述 PLC 没有给主站设备回应或回应错误原因的情况。

1.  由于通讯错误, PLC 没有收到正确的命令讯息: 因此当 PLC 没有回应讯息时,主站设备须设置一 个通讯超时条件。

2. 没有通讯错误发生时, PLC 接收到一个有效的通讯讯息, 但 PLC 不能理解此讯息的意思, 所以 PLC 会给主站做异常回应。回应讯息的命令码的最高位会置位为 1 并且会返回一个异常码说明造成异常回 应的原因。

下面的例子为命令码为 01H 时的异常回应范例, 异常回应码为 02H。

传送讯息:

字段名数据 (16 进制)
开始保持无输入数据≥10 ms
从站地址01
命令码01
数据起始地址04
00
数据个数(以字节为单位)00
10
CRC 校验码低字节3C
CRC 校验码高字节F6
结束保持无输入数据≥10 ms

回应讯息:

台达PLC进行MODBUS通讯协议说明插图5字段名数据(16 进制)
开始保持无输入数据≥10 ms
从站地址01
命令码81
异常码02
CRC 校验码低字节C1
CRC 校验高字节91
结束保持无输入数据≥10 ms

台达PLC进行MODBUS通讯协议说明插图7PLC装置地址

台达PLC进行MODBUS通讯协议说明插图9装置范围有效范围MODBUS地址装置通讯地址
ES2/EX2SS2SA2/SX2
S000~255 000~1023 000~1023000001~0002560000~00FF
S256~511000257~0005120100~01FF
S512~767000513~0007680200~02FF
S768~1023000769~0010240300~03FF
X000~377 (Octal)000~377000~377101025~1012800400~04FF
Y000~377 (Octal)000~377000~377001281~0015360500~05FF
T000~255 bit000~255000~255001537~0017920600~06FF
000~255 word000~255000~255401537~4017920600~06FF
M000~255         0000~4095         0000~4095   002049~0035840800~08FF
M256~5110900~09FF
M512~7670A00~0AFF
M768~10230B00~0BFF
M1024~12790C00~0CFF
M1280~15350D00~0DFF
M1536~1791     045057~047616B000~B0FF
M1792~2047B100~B1FF
M2048~2303B200~B2FF
M2304~2559B300~B3FF
M2560~2815B400~B4FF
M2816~3071B500~B5FF
M3072~3327B600~B6FF
M3328~3583B700~B7FF
M3584~3839B800~B8FF
M3840~4095B900~B9FF
  C000~199 (16-bit)000~199000~199003585~0037840E00~0EC7
000~199000~199403585~4037840E00~0EC7
 200~255 (32-bit)200~255200~255003785~0038400EC8~0EFF
200~255200~255401793~401903(奇数位址有效)0700~076F
装置范围有效范围MODBUS地址装置通讯地址
ES2/EX2SS2SA2/SX2
D000~255                       0000~9999          0000~4999                       0000~9999  404097~4053761000~10FF
D256~5111100~11FF
D512~7671200~12FF
D768~10231300~13FF
D1024~12791400~14FF
D1280~1535      405377~4081921500~15FF
D1536~17911600~16FF
D1792~20471700~17FF
D2048~23031800~18FF
D2304~25591900~19FF
D2560~28151A00~1AFF
D2816~30711B00~1BFF
D3072~33271C00~1CFF
D3328~35831D00~1DFF
D3584~38391E00~1EFF
D3840~40951F00~1FFF
D4096~4351         436865~4409609000~90FF
D4352~46079100~91FF
D4608~48639200~92FF
D4864~51199300~93FF
D5120~5375           无9400~94FF
D5376~56319500~95FF
D5632~58879600~96FF
D5888~61439700~97FF
D6144~63999800~98FF
D6400~66559900~99FF
D6656~69119A00~9AFF
D6912~71679B00~9BFF
D7168~74239C00~9CFF
D7424~76799D00~9DFF
D7680~79359E00~9EFF
D7936~81919F00~9FFF
D8192~8447    440961~442768A000~A0FF
D8448~8703A100~A1FF
D8704~8959A200~A2FF
D8960~9215A300~A3FF
D9216~9471A400~A4FF
D9472~9727A500~A5FF
D9728~9983A600~A6FF
D9984~9999A700~A70F

4.5    命令码

4.5.1  命令码: 01, 读节点状态(不可读输入点状态)

数据个数最大值= 255  (10 进制) = FF  (16 进制)

范例:读取从站设备(通讯地址为 1)T20~T56 的节点状态。

PC一PLC: “:01 01 06 14 00 25 BF CR LF”

传送讯息:

字段名ASCII 码
起始字符:
从站地址01
命令码01
起始数据地址高字节06
起始数据地址低字节14
节点状态个数高字节00
节点状态个数低字节25
LRC 校验码BF
结束字符 10D (Hex)
结束字符 00A (Hex)

假设请求讯息中的节点状态个数为 n  (十进制), n/8 的商为 M,余数为 N.。

当 N=0 时, 回应讯息中的字节个数为 M;当 N≠0 时, 回应讯息中的字节个数为为 M+1. PLC一PC: “:01 01 05 CD 6B B2 0E 1B D6 CR LF”

回应讯息:

字段名ASCII 码
起始字符:
从站地址01
命令码01
字节个数05
T20~T27 节点状态CD
T35~T38 节点状态6B
T36~T43 节点状态B2
T44~T51 节点状态0E
T52~T56 节点状态1B
LRC 校验码E6
结束字符 10D (Hex)
结束字符 00A (Hex)

4.5.2  命令码: 02,读节点状态(可读输入节点状态)

范例:读取从站设备(通讯地址为 1) Y024~Y070 的节点状态。

PC一PLC “: 01 02 05 14 00 25 BF CR LF”

传送讯息:

字段名ASCII 码
起始字符:
从站地址01
命令码02
起始数据地址高字节05
起始数据地址低字节14
数据个数高字节00
数据个数低字节25
LRC 校验码BF
结束字符 10D (Hex)
结束字符 00A (Hex)

假设请求讯息中的节点状态个数为 n  (十进制), n/8 的商为 M,余数为 N.。

当 N=0 时, 回应讯息中的字节个数为 M;当 N≠0 时, 回应讯息中的字节个数为为 M+1. PLC一PC “: 01 01 05 CD 6B B2 0E 1B E5 CR LF”

回应讯息:

台达PLC进行MODBUS通讯协议说明插图5字段名ASCII 码
起始字符:
从站地址01
命令码02
字节个数05
Y024~Y033 节点状态CD
Y034~Y043 节点状态6B
Y044~Y053 节点状态B2
Y054~Y063 节点状态0E
Y064~Y070 节点状态1B
LRC 校验码E5
结束字符 10D (Hex)
结束字符 00A (Hex)

4.5.3  命令码: 03,读出寄存器内容值

命令码 03 可读寄存器: T, C, D

范例::读取从站地址为 1 的 PLC 的 T20~T27 的内容值。

PC一PLC: “: 01 03 06 14 00 08 DA CR LF”

传送讯息:

台达PLC进行MODBUS通讯协议说明插图5字段名ASCII 码
起始字符:
从站地址01
命令码03
数据地址高字节06
起始数据地址高字节14
读取数据个数高字节00
读取数据个数低字节(数据个数以字为单位)08
LRC 校验码DA
结束字符 10D (Hex)
结束字符 00A (Hex)

PLC一PC: “:01 03 10 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 B8 CR LF” 回应讯息:

字段名ASCII 码
起始字符3A
从站地址01
命令码03
字节个数10
数据高字节 (T20)00
数据低字节 (T20)01
数据高字节 (T21)00
数据低字节 (T21)02
数据高字节 (T22)00
数据低字节 (T22)03
数据高字节 (T23)00
数据低字节 (T23)04
数据高字节 (T24)00
数据低字节 (T24)05
数据高字节 (T25)00
数据低字节 (T25)06
数据高字节 (T26)00
数据低字节 (T26)07
字段名ASCII 码
数据高字节 (T27)00
数据低字节 (T27)08
LRC 校验码C8
结束字符 10D (Hex)
结束字符 00A (Hex)

4.5.4  命令码: 05, 强制单独节点状态

命令码为 05 时,强制数据 FF00  (16 进制)表示将节点强制为 On;  强制数据 0000  (16 进制)表示 将节点强制为 Off。其它的强制数据无效且不会对强制节点有影响。

范例:强制 Y0 节点为 On。

PC一PLC   “: 01 05 05 00 FF 00 F6 CR LF”

传送讯息:

字段名ASCII 码
起始字符:
从站地址01
命令码05
节点地址高字节05
节点地址低字节00
强制数据高字节FF
强制数据低字节00
LRC 校验码F6
结束字符 10D (Hex)
结束字符 00A (Hex)

PLC一PC   “: 01 05 05 00 FF 00 F6 CR LF”

回应信息:

字段名ASCII 码
起始字符:
从站地址01
命令码05
节点地址高字节05
节点地址低字节00
强制数据高字节FF
强制数据低字节00
LRC 校验码F6
结束字符 10D (Hex)
结束字符 00A (Hex)

4.5.5  命令码: 06, 预设单独寄存器的值

范例: :设置寄存器 T0 的值为 12 34  (16 进制), T0 的通讯地址为 0600  (16 进制)。 PC一PLC   “: 01 06 06 00 12 34 AD CR LF”

传送讯息:

字段名ASCII 码
起始字符:
从站地址01
命令码06
寄存器地址高字节06
寄存器地址低字节00
预设数据值高字节12
预设数据值低字节34
LRC 校验码AD
结束字符 10D (Hex)
结束字符 00A (Hex)

PLC一PC   “: 01 06 06 00 12 34 AD CR LF”

回应信息:

字段名ASCII 码
起始字符:
从站地址01
命令码06
寄存器地址高字节06
寄存器地址低字节00
预设数据值高字节12
预设数据值低字节34
LRC 校验码AD
结束字符 10D (Hex)
结束字符 00A (Hex)

4.5.6  命令码: 15, 强制多个节点

节点数目最大值 = 255

范例:设置节点 Y007…Y000 = 1100 1101, Y011…Y010 = 01.

PC一PLC: “: 01 0F 05 00 00 0A 02 CD 01 11 CR LF”

传送讯息:

字段名ASCII 码
起始字符3A
从站地址01
命令码0F
字段名ASCII 码
节点地址高字节05
节点地址低字节00
节点数目高字节00
节点数目低字节0A
字节数目02
强制数据高字节CD
强制数据低字节01
LRC 校验码11
结束字符 10D (Hex)
结束字符 00A (Hex)

PLC一PC: “: 01 0F 05 00 00 0A E1 CR LF”

回应信息:

字段名ASCII 码
起始字符:
从站地址01
命令码0F
起始数据地址高字节05
起始数据地址低字节00
预设数据值高字节00
预设数据值低字节0A
LRC 校验码E1
结束字符 10D (Hex)
结束字符 00A (Hex)

4.5.7  命令码: 16, 预设多个寄存器的值

范例:设置 T0  的值为 000A  (16 进制),设置 T1 的值为 0102  (16 进制)。

PC一PLC: “: 01 10 06 00 00 02 04 00 0A 01 02 D6 CR LF”

传送讯息:

字段名ASCII 码
起始字符:
从站地址01
命令码10
起始数据地址高字节06
起始数据地址低字节00
寄存器数目高字节00
寄存器数目低字节02
数据数目(以字节为单位)04
数据高字节00
数据低字节0A
数据高字节01
数据低字节02
LRC 校验码D6
结束字符 10D (Hex)
结束字符 00A (Hex)

PLC一PC: “: 01 10 06 00 00 02 E7 CR LF”

回应信息:

字段名ASCII 码
起始字符:
从站地址01
命令码10
起始数据地址高字节06
起始数据地址低字节00
寄存器数目高字节00
寄存器数目低字节02
LRC 校验码E7
结束字符 10D (Hex)
结束字符 00A (Hex)

相关新闻

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

邮箱

cloud@modbus.cn

QQ
QQ
微信
微信
分享本页
返回顶部