communication port
LRC verification code
COM1After receiving the command message from the master station, the slave station expects a normal response message to be sent to the master station. However, sometimes the PLC does not respond or responds incorrectly after receiving the command message from the master station. The following will describe the situation where the PLC does not respond to the master station equipment or responds incorrectly.
COM2Assuming the number of node states in the request message is n (decimal), the quotient of n/8 is M, and the remainder is N.
ESLow byte dataEX2/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 bps | 110~921,000 bps | 110~115200 bps | |
| 数据位长度 | 7~8 位 | |||
| 奇偶校验位 | 奇校验/偶校验/无校验 | |||
| 停止数据位长度 | 1~2 数据位 | |||
| 通讯参数设置寄存器 | D1036 | D1120 | D1109 | |
| 通讯格式保持 | M1138 | M1120 | M1136 | |
| ASCII 模式 | 主站/从站都有效 | 从站有效 | ||
| RTU 模式 | 主站/从站都有效 | 从站有效 | ||
| ASCII /RTU 模式切换 | M1139 | M1143 | M1320 | |
| 从站通讯地址设定缓存器 | D1121 | D1255 | ||
| 读写数据长度 (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 1 | LRC 校验码由 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 进制 | 30H | 31H | 32H | 33H | 34H | 35H | 36H | 37H |
| ASCII 码 | “8“ | “9“ | “A“ | “B“ | “C“ | “D“ | “E“ | “F“ |
| 16 进制 | 38H | 39H | 41H | 42H | 43H | 44H | 45H | 46H |
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 命令码及数据
数据字符的格式取决于命令码,有效的命令码的描述如下表所示:
| 可操作装置 | ||
| 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/Off | S, Y, M, T, C |
| 06 (06 H) | 预设单独寄存器的值 | T, C, D |
| 15 (0F H) | 强制多个节点状态 On/Off | S, 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 |
| 从站地址 | 01 | 30 31 |
| 命令码 | 03 | 30 33 |
| 起始数据地址高字节 | 06 | 30 36 |
| 起始数据地址低字节 | 14 | 31 34 |
| 接点个数高字节 | 00 | 30 30 |
| 接点个数低字节 | 08 | 30 38 |
| LRC 校验码 | DA | 44 41 |
| 结束字符 | CR LF | 0D 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 |
| 从站地址 | 01 | 30 31 |
| 命令码 | 03 | 30 33 |
| 字段名 | ASCII 码 | 16 进制 |
| 字节数 | 10 | 31 30 |
| 高字节(T20) | 00 | 30 30 |
| 低字节(T20) | 01 | 30 31 |
| 高字节(T21) | 00 | 30 30 |
| 低字节(T21) | 02 | 30 32 |
| 高字节(T22) | 00 | 30 30 |
| 低字节(T22) | 03 | 30 33 |
| 高字节(T23) | 00 | 30 30 |
| 低字节(T23) | 04 | 30 34 |
| 高字节(T24) | 00 | 30 30 |
| 低字节(T24) | 05 | 30 35 |
| 高字节(T25) | 00 | 30 30 |
| 低字节(T25) | 06 | 30 36 |
| 高字节(T26) | 00 | 30 30 |
| 低字节(T26) | 07 | 30 37 |
| 高字节(T27) | 00 | 30 30 |
| 低字节(T27) | 08 | 30 38 |
| LRC 校验码 | C8 | 43 38 |
| 结束字符 | CR LF | 0D 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 |
| 从站地址 | 01 | 30 31 |
| 命令码 | 03 | 30 33 |
| 起始数据地址高字节 | 04 | 30 34 |
| 起始数据地址低字节 | 01 | 30 31 |
| 接点个数高字节 | 00 | 30 30 |
| 接点个数低字节 | 01 | 30 31 |
| LRC 校验码 | F6 | 46 36 |
| 结束字符 | CR LF | 0D 0A |
异常响应:
从站在收到主站的命令讯息后期望回应给主站一个正常的回应讯息, 但有时 PLC 在收到主站的命令 讯息后不回应或者回应错误原因,下面将描述 PLC 没有给主站设备回应或回应错误原因的情况。
1. 由于通讯错误, PLC 没有收到正确的命令讯息: 因此当 PLC 没有回应讯息时,主站设备须设置一 个通讯超时条件。
2. 没有通讯错误发生时, PLC 接收到一个有效的通讯讯息, 但 PLC 不能理解此讯息的意思, 所以 PLC 会给主站做异常回应。回应讯息的命令码的最高位会置位为 1 并且会返回一个异常码说明造成异常回 应的原因。
命令码为 01H 时的异常响应范例, 异常响应码为 02H
请求讯息:
| 字段名 | ASCII 码 | 十六进制 |
| 起始字符 | : | 3A |
| 30 31 | ||
| 从站地址 | 01 | |
| 命令码 | 01 | 30 31 |
| 起始数据地址高字节 | 04 | 30 34 |
| 起始数据地址低字节 | 00 | 30 30 |
| 接点个数高字节 (单位:位) | 00 | 30 30 |
| 接点个数低字节 (单位:位) | 10 | 31 30 |
| LRC 校验码 | EA | 45 41 |
| 结束字符 | CR LF | 0D 0A |
回应讯息
| 字段名 | ASCII 码 | 十六进制 |
| 起始字符 | : | 3A |
| 30 31 | ||
| 从站地址 | 01 | |
| 命令码 | 81 | 38 31 |
| 30 32 | ||
| 异常码 | 02 | |
| LRC 校验码 | 7C | 37 43 |
| 结束字符 | CR LF | 0D 0A |
| 异常码 | 含义 |
| 01 | 非法命令码: PLC 接收的命令信息中的命令码无效 |
| 02 | 非法的装置地址:接收的命令信息中的地址无效。 |
| 03 | 非法装置值: PLC 接收的命令信息中的数据内容无效。 |
| 07 | 1. 校验和错误● 检查校验和是否正确 |
| 异常码 | 含义 |
| 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 |
回应讯息:
| 数据(16 进制) | |
| 开始 | 保持无输入数据≥10 ms |
| 从站地址 | 01 |
| 命令码 | 81 |
| 异常码 | 02 |
| CRC 校验码低字节 | C1 |
| CRC 校验高字节 | 91 |
| 结束 | 保持无输入数据≥10 ms |
PLC装置地址
| 范围 | 有效范围 | MODBUS地址 | 装置通讯地址 | ||
| ES2/EX2 | SS2 | SA2/SX2 | |||
| S | 000~255 | 000~1023 | 000~1023 | 000001~000256 | 0000~00FF |
| S | 256~511 | 000257~000512 | 0100~01FF | ||
| S | 512~767 | 000513~000768 | 0200~02FF | ||
| S | 768~1023 | 000769~001024 | 0300~03FF | ||
| X | 000~377 (Octal) | 000~377 | 000~377 | 101025~101280 | 0400~04FF |
| Y | 000~377 (Octal) | 000~377 | 000~377 | 001281~001536 | 0500~05FF |
| T | 000~255 bit | 000~255 | 000~255 | 001537~001792 | 0600~06FF |
| 000~255 word | 000~255 | 000~255 | 401537~401792 | 0600~06FF | |
| M | 000~255 | 0000~4095 | 0000~4095 | 002049~003584 | 0800~08FF |
| M | 256~511 | 0900~09FF | |||
| M | 512~767 | 0A00~0AFF | |||
| M | 768~1023 | 0B00~0BFF | |||
| M | 1024~1279 | 0C00~0CFF | |||
| M | 1280~1535 | 0D00~0DFF | |||
| M | 1536~1791 | 045057~047616 | B000~B0FF | ||
| M | 1792~2047 | B100~B1FF | |||
| M | 2048~2303 | B200~B2FF | |||
| M | 2304~2559 | B300~B3FF | |||
| M | 2560~2815 | B400~B4FF | |||
| M | 2816~3071 | B500~B5FF | |||
| M | 3072~3327 | B600~B6FF | |||
| M | 3328~3583 | B700~B7FF | |||
| M | 3584~3839 | B800~B8FF | |||
| M | 3840~4095 | B900~B9FF | |||
| C | 000~199 (16-bit) | 000~199 | 000~199 | 003585~003784 | 0E00~0EC7 |
| 000~199 | 000~199 | 403585~403784 | 0E00~0EC7 | ||
| 200~255 (32-bit) | 200~255 | 200~255 | 003785~003840 | 0EC8~0EFF | |
| 200~255 | 200~255 | 401793~401903(奇数位址有效) | 0700~076F |
| 装置 | 范围 | 有效范围 | MODBUS地址 | 装置通讯地址 | ||
| ES2/EX2 | SS2 | SA2/SX2 | ||||
| D | 000~255 | 0000~9999 | 0000~4999 | 0000~9999 | 404097~405376 | 1000~10FF |
| D | 256~511 | 1100~11FF | ||||
| D | 512~767 | 1200~12FF | ||||
| D | 768~1023 | 1300~13FF | ||||
| D | 1024~1279 | 1400~14FF | ||||
| D | 1280~1535 | 405377~408192 | 1500~15FF | |||
| D | 1536~1791 | 1600~16FF | ||||
| D | 1792~2047 | 1700~17FF | ||||
| D | 2048~2303 | 1800~18FF | ||||
| D | 2304~2559 | 1900~19FF | ||||
| D | 2560~2815 | 1A00~1AFF | ||||
| D | 2816~3071 | 1B00~1BFF | ||||
| D | 3072~3327 | 1C00~1CFF | ||||
| D | 3328~3583 | 1D00~1DFF | ||||
| D | 3584~3839 | 1E00~1EFF | ||||
| D | 3840~4095 | 1F00~1FFF | ||||
| D | 4096~4351 | 436865~440960 | 9000~90FF | |||
| D | 4352~4607 | 9100~91FF | ||||
| D | 4608~4863 | 9200~92FF | ||||
| D | 4864~5119 | 9300~93FF | ||||
| D | 5120~5375 | 无 | 9400~94FF | |||
| D | 5376~5631 | 9500~95FF | ||||
| D | 5632~5887 | 9600~96FF | ||||
| D | 5888~6143 | 9700~97FF | ||||
| D | 6144~6399 | 9800~98FF | ||||
| D | 6400~6655 | 9900~99FF | ||||
| D | 6656~6911 | 9A00~9AFF | ||||
| D | 6912~7167 | 9B00~9BFF | ||||
| D | 7168~7423 | 9C00~9CFF | ||||
| D | 7424~7679 | 9D00~9DFF | ||||
| D | 7680~7935 | 9E00~9EFF | ||||
| D | 7936~8191 | 9F00~9FFF | ||||
| D | 8192~8447 | 440961~442768 | A000~A0FF | |||
| D | 8448~8703 | A100~A1FF | ||||
| D | 8704~8959 | A200~A2FF | ||||
| D | 8960~9215 | A300~A3FF | ||||
| D | 9216~9471 | A400~A4FF | ||||
| D | 9472~9727 | A500~A5FF | ||||
| D | 9728~9983 | A600~A6FF | ||||
| D | 9984~9999 | A700~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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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”
回应讯息:
| ASCII 码 | |
| 起始字符 | : |
| 从站地址 | 01 |
| 命令码 | 02 |
| 字节个数 | 05 |
| Y024~Y033 节点状态 | CD |
| Y034~Y043 节点状态 | 6B |
| Y044~Y053 节点状态 | B2 |
| Y054~Y063 节点状态 | 0E |
| Y064~Y070 节点状态 | 1B |
| LRC 校验码 | E5 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (Hex) |
4.5.3 命令码: 03,读出寄存器内容值
命令码 03 可读寄存器: T, C, D
范例::读取从站地址为 1 的 PLC 的 T20~T27 的内容值。
PC一PLC: “: 01 03 06 14 00 08 DA CR LF”
传送讯息:
| ASCII 码 | |
| 起始字符 | : |
| 从站地址 | 01 |
| 命令码 | 03 |
| 数据地址高字节 | 06 |
| 起始数据地址高字节 | 14 |
| 读取数据个数高字节 | 00 |
| 读取数据个数低字节(数据个数以字为单位) | 08 |
| LRC 校验码 | DA |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (Hex) |
PLC一PC “: 01 05 05 00 FF 00 F6 CR LF”
回应信息:
| 字段名 | ASCII 码 |
| 起始字符 | : |
| 从站地址 | 01 |
| 命令码 | 05 |
| 节点地址高字节 | 05 |
| 节点地址低字节 | 00 |
| 强制数据高字节 | FF |
| 强制数据低字节 | 00 |
| LRC 校验码 | F6 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (Hex) |
PLC一PC “: 01 06 06 00 12 34 AD CR LF”
回应信息:
| 字段名 | ASCII 码 |
| 起始字符 | : |
| 从站地址 | 01 |
| 命令码 | 06 |
| 寄存器地址高字节 | 06 |
| 寄存器地址低字节 | 00 |
| 预设数据值高字节 | 12 |
| 预设数据值低字节 | 34 |
| LRC 校验码 | AD |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (Hex) |
PLC一PC: “: 01 0F 05 00 00 0A E1 CR LF”
回应信息:
| 字段名 | ASCII 码 |
| 起始字符 | : |
| 从站地址 | 01 |
| 命令码 | 0F |
| 起始数据地址高字节 | 05 |
| 起始数据地址低字节 | 00 |
| 预设数据值高字节 | 00 |
| 预设数据值低字节 | 0A |
| LRC 校验码 | E1 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (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 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (Hex) |
PLC一PC: “: 01 10 06 00 00 02 E7 CR LF”
回应信息:
| 字段名 | ASCII 码 |
| 起始字符 | : |
| 从站地址 | 01 |
| 命令码 | 10 |
| 起始数据地址高字节 | 06 |
| 起始数据地址低字节 | 00 |
| 寄存器数目高字节 | 00 |
| 寄存器数目低字节 | 02 |
| LRC 校验码 | E7 |
| 结束字符 1 | 0D (Hex) |
| 结束字符 0 | 0A (Hex) |
Leave a Reply