网上的讲 的modbus 协议,说的天花乱坠。 说什么的都有。
什么功能代码,什么线圈寄存器。 这里就我自己调试的时候的例子,简单说明一下,希望能够帮助那些困惑的人。?
我这里是使用工控机串口,(工控机里面有485,具体设置好以后,工控机就可以输出485信号了)。
modbus 有一个软件,叫modbusSim . 他可以测试modbus基本通信。?
打开之后,设置对方地址,设置好起始地址,和长度之后。 点击连接按钮,就可以读到对方的某地址上的数了。(如果读不到,那就是自己设置问题,如果没设置错,那就是对方的程序不对,不管你是mcu也好,或者是PLC也好)
?
工控机怎么都无法和modbus通信上,具体可先用modbusSim 这个软件,来设置一下。设置好后,如果软件里面有数据流,则表明对方的modbus是没问题的。
问题出在自己的上位机这里。?
此时可以用串口监控软件,来打开串口,监控modbusSim这个软件,具体发出的数据流。 按照这个软件发的数据流,上位机来发就可以了。
?
这里讲解一个报文,通过这个报文,就能了解modbus他是这么工作的。
发送方发送下面数据流如下:
0A 03 00 00 00 64 45 5A
0A : 表示站号, 就是对方的地址(这个地址可以是任意值,?
03: 一个字节,表示功能码。 (表示读PLC寄存器)
00 00 : 表示地址, 两个字节。 从00 00 开始的地址读数据
00 64: 表示长度,两个字节。00 64 表示十进制的100 。 ?
45 5A:表示 按照CRC16算出的校验字节
上面的意思是, 从0地址,读取字节。读100个字。 100个字就是200个字节。?
?
接收方回复数据流,如下:
0A 03 C8 02 00 00 。。。。CRC1 CRC2
0A 03 是发送方发出去的前两个字节 (0A 03 00 00 00 64 45 5A 报文的前两个字节)
C8 一个字节。 他的值是200 。 表示C8开始,后面有200个字节的数据。
02 00 。。。。。 ?一共200个字节
CRC1 CRC2 : 两个字节 表示校验值。?
?
总结,modbus 就是一问一回答的方式两个人在对话, 一方发送数据,另外一方回复。?
不管你是网口也好,485也好。只要一个人发起对话,另外一个人回数据就可以。
?
具体的如果其他功能,就可以不用03这个功能码。 可以用其他的功能码。?
?