在工业物联网中,很多设备都是采用Modbus TCP协议,比如和供电设备通信等。
Modbus TCP协议是基于TCP封装的一种协议,简单的说,Modbus TCP协议会管理一块Byte内存,如果外面客户端的请求是读请求,该请求会包括起始地址、寄存器数量。然后服务端返回对应的数据。
如果是写请求,那么请求中会包括起始地址和写寄存器数量以及数据。我们解析请求将数据更新到本地管理的Byte数组对应的位置即可。
此外,在实际场景下,我们自己需要开发一些小工具进行协议测试。那么,我们如何快速实现一个Modbus TCP服务端程序呢?这里,我们使用Netty框架快速搭建。
1、创建一块Byte数组
ModbusTCP协议是基于本地的Byte数组的,该数组主要用于存储Modbus TCP数据。
private static byte[] buffer = new byte[1024];
2、基于Netty搭建服务端
创建一个Server类,这里使用基于长度域的编解码器:LengthFieldBasedFrameDecoder。


3、实现业务处理逻辑MyHandler类
这里的业务处理逻辑在自定义的MyHandler类中。主要分为两种情况:读请求和写请求。如果是读请求 就返回对应的寄存器数据。如果是写请求就将数据读取下来更新到本地的Byte数组中。
读请求,功能码为0x04。写请求的功能码是0x10。



4、测试
为了方便调试,这里加上一个调试界面,方便观察寄存器(也就是Byte数组)的数据变化情况。

上面将Byte数组的第3个字节修改为3。同时,观察客户端,客户端的寄存器数据也更新了。

通过,实际测试,完全满足和相应的接口协议。自此,快速搭建一个Modbus TCP协议的服务器端就完成了。
文章转载自码农的修炼之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




