学习Modbus的第三天
具体功能码

一般用RTU模式进行开发,接下来实现一个示例:读取设备地址为3的从设备B的线圈状态寄存器,线圈地址为19到55(37个地址)
主站发送的请求包格式为--"设备地址+功能码+寄存器起始地址(高位+低位)+寄存器数量(高位+低位)+CRC校验位"
设备地址为0X03,功能码为0X01,寄存器的起始地址为0X13(19的16进制),寄存器数量为0X25(37的16进制)
而从站的响应包格式为--"设备地址+功能码+数据长度+数据+CRC校验位"
假设从站的数据为

这样响应包的设备地址为0X03,功能码为0X01,数据长度为5个字节(0X05),然后根据图片得到19~26位是1100 1010,但高位在前,所以是0101 0011--0X53,其余一样
接下来就是主站从站的调试设计:


从站设计好了大概就是这样的

然后主站也是和从站一样设计好,设计好了会自动连接(不要忘记打开VSPD),效果图是这样的

然后我们点击主站工具栏的communication,可以看到主站实时对从站发送的请求包,以及从站发送给主站的响应包

可以看到和我们设计的发送包一样--03 01 00 13 00 25 F6(校验位不用管)
响应包也是一样的--03 01 05(数据长度) 53 6B 01 F4 1B +两个字节的校验
这只是一个示例,对于其他的功能码的调试也是差不多,只不过格式上有些差别
浙公网安备 33010602011771号