Modbus TCP是在采用TCP协议的基础上,对应用层的数据进行了一层协议封装。并且这个Modbus和通过走串口的Modbus协议稍微有点不同,没有Address和Checksum,增加了Header。因为TCP本身会进行校验,保证了数据的准确性。对于Modbus TCP,如果是server的话,默认的端口是502。这个端口当然也可以修改和设置。
关于Modbus TCP详细的协议介绍可以参考这个英文文档。Introduction of ModbusTCP
Modbus TCP可以使用MThings进行调试。MThings下载地址
接下来是调试的过程(以写线圈为例):
先启动TCP Server。
root@myir:~# ./ethServer
Ethernet Router Constructor
Eth_APP::Eth_APP
ETHERNET ROUTER is alive
localIPAddress: 192.168.18.141
ethBase::entry start config..
Eth_APP::Config
ethBase::entry stop config..
Connection::setup mConnType: 0
Connection::setupTcpServer
ETHERNET ROUTER readyEvents:0
MThings作为TCP Client。
启动链接以后,发现我们的server建立了网络链接。
Connection::acceptTcpServerClient
ETHERNET ROUTER readyEvents:0
ETHERNET ROUTER readyEvents:1
这是我的写设置:
下面是我收到的数据:
TCP message received
0 1 0 0 0 6 1 5 0 100 255 0
TCP message received end
收到消息之后,要进行回复该消息。否则,会显示写失败。
对于写线圈状态,server回复的消息和收到的消息是相同的。所以将原消息发给client就可以了。