网络上的modbus阐明都是 读放弃寄存器 之类很难懂的词汇,在这里做个简化阐明的笔记。modbus具体性能码及错误码参考 【其余】 局部的链接

plc 的寄存器分类:

开关量通道,用x、y示意,寄存器序号8进制计数,x0-x7,x10-x15为输出,只读。y0-y7,y10-y15为输入。内存变量记为m,寄存器序号十进制,比方m19。单变量长度为1位

模拟量通道,sd示意。内存模拟量记为d,寄存器序号十进制。单变量长度为2字节

罕用性能码

0x01: 读线圈寄存器---------- 批量读y0x02: 读离散输出寄存器----------  批量读x0x03: 读放弃寄存器---------- 批量读d0x04: 读输出寄存器---------- 读输出模拟量通道sd(未测试)0x05: 写单个线圈寄存器----------  写输入模拟量通道sd(未测试)0x06: 写单个放弃寄存器----------  单个写d0x0f:  写多个线圈寄存器----------  批量写输入模拟量通道sd(未测试)0x10: 写多个放弃寄存器---------- 批量写d

详解:

0x01 批量读y

发送:站号1字节-0x01,性能码1字节-0x01,起始地址2字节-0x00 0x00,数据长度2字节-0x00 0x10,crc2字节

返回:站号1字节-0x01,性能码1字节-0x01,数据字节计数1字节-0x02,数据2字节-0x20 0x00,crc2字节
解释:申请读y0起16个开关量状态,响应0x20 0x00,即y7-y0状态为0010 0000,y17-y10状态为0000 0000,只有y5是1(依据设施大小端不同留神程序)

0x02 批量读x
同0x01

0x03 批量读d
发送:站号1字节-0x01,性能码1字节-0x03,起始地址2字节-0x00 0x00,数据长度2字节-0x00 0x02,crc2字节

返回:站号1字节-0x01,性能码1字节-0x03,数据字节计数1字节-0x04,数据4字节-0x06 0xa4 0x0a 0x8c,crc2字节

解释:申请读d0起2个模拟量状态,响应0x06 0xa4 0x0a 0x8c,即d1为0x06 0xa4=1700,d2为2700

0x06 单个写d
发送:站号1字节-0x01,性能码1字节-0x06,起始地址2字节-0x00 0x07,数据2字节-0x0a 0xa0,crc2字节

返回:同发送
解释:申请写d7模拟量状态,响应雷同报文,写入 0x0a 0xa0

0x10 批量写d
发送:站号1字节-0x01,性能码1字节-0x10,起始地址2字节-0x00 0x07,数据长度2字节-0x00 0x02,数据字节数1字节-0x04,数据4字节-0xab 0xcd 0x98 0x76,crc2字节

返回:站号1字节-0x01,性能码1字节-0x10,起始地址2字节-0x00 0x07,操作数据长度2字节-0x00 0x02,crc2字节

解释:申请写d7起2个模拟量状态,响应批改的变量总数2。

其余:

crc16校验-nodejs https://blog.csdn.net/yaojinj...

性能码及错误码 https://www.cnblogs.com/fishp...