我们先准备个PLC和通信上。
我们需要一款支持Modbus RTU通信的PLC和一根USB转串口线。
然后电脑这边准备一个工具软件。
1 我们确认下PLC的串口参数。
PLC当前的串口,支持了Modbus协议。
串口参数是115200波特率,数据位为8,停止位为1,无校验。
2 打开Modbus Poll工具。
设置参数也是115200,8,1,无即可。
3 选择寄存器变量。
点击图中按钮,即可选择要读写的寄存器。
Slave ID 是从站设备的ID。设置为1,和PLC对应上。
Function: 也就是功能码。0X寄存器对应的功能就是01为read.
Address: 要读的寄存器地址。设置为0,也就是从0开始读,刚好对应PLC上面的输出点。
Quantity: 寄存器个数。设置10,我们先读10个。
Sacn Rate: 扫描周期。默认1000ms。也就是每1000ms读一次。
其它参数不关心,默认,然后点OK。
然后就显示都通信上了。
我们试着拿偶数地址都设置为1看一下。
对里面的值双击,会出来设置值界面。因为是单独写,可以默认使用05功能码。
可以看到PLC里相应的输出点,也被置1了。
这就是很基本的一个Modbus RTU通信的demo。
如果你认为到此就结束了,那可能你猜对了。
我们上手学Modbus 协议,没必要搞那么复杂。一天收获一点点,慢慢消化Modbus 协议。
先学会怎么使用的,再进一步了解协议。
好了,如果前面的内容已经消化的,我们可以继续往下了。如果还没有消化的,那下面的内容,建议你先收藏,改天再继续看。
在刚才的实验中,我们看到通过电脑的Modbus Poll对PLC进行读写操作了。
难道我们不想知道,他们是怎么起使用的么。
Modbus Poll 有一个功能,可以显示发送和接收的报文,对于我们学习Modbus 协议非常有帮助。
我们找到Display->Communication选项,就可以看到发送和接收的报文了。
Tx:072-01 01 00 00 00 0A BC 0D
Rx:073-01 01 02 55 01 47 6C
我们复制一个报文。
对于刚入门的,不管是使用者,还是开发者,建议还是找个支持Modbus 的设备以及工具,比如Modbus Poll,进行通信测试,看一下Modbus的报文是什么样的,看一下读写的情况。
因为遇到有些入门者,自己上来就拿个串口工具,给单片机或者PLC发送数据,发现对方怎么都不回。除了串口参数要设置正常之外,要确保你的报文是正确的Modbus 协议才可以哦。
比如读0X寄存器,读10个,报文为01 01 00 00 00 0A BC 0D
前面的报文01 01 00 00 00 0A 估计很多人都会了。
然后用工具或者在线计算CRC,要么计算出来是错误的,要么计算正常了,却拼成这样的报文 01 01 00 00 00 0A 0D BC。CRC的字节反了。
怎么发,PLC就是不回复。
这是很多新手,入门者常犯的错误。
所以不要小看一个简单的Modbus, 要怎么把它用好,还不是件简单的事。
有时候,你的设备和对方设备进行通信,就是有问题,你都说不清楚是你设备的问题还是对方设备的问题,就容易产生不必要的误会和工作了。
Modbus Poll还提供了不同功能码的读写测试。