IoTClient开发4 - ModBusTcp协议服务端模拟
阅读目录
数据【读取-响应报文】(分两次获取)
第一次获取前八个字节(Map报文头):19 B2 00 00 00 05 02 03 02 00 20
- 19 B2 检验验证信息(复制的客户端发的,配件检验)
- 00 00 代表是基于tcp/ip协议的modbus(复制的客户端发的)
- 00 05 为当前位置到最后的长度
- 02 表示站号地址(复制的客户端发的)
- 03 为功能码(复制的客户端发的)
第二次获取的报文:02 00 20
- 02 字节个数
- 00 20 响应的数据
数据【写入-请求报文】:19 B2 00 00 00 09 02 10 00 04 00 01 02 00 20
- 19 B2 是客户端发的检验信息,随意定义。
- 00 00 代表是基于tcp/ip协议的modbus
- 00 09 从本字节下一个到最后
- 02 站号
- 10 功能码(转十进制就是16)
- 00 04 寄存器地址
- 00 01 寄存器的长度(寄存器个数)
- 02 写字节的个数
- 00 20 要写入的值(转十进制为32)
数据【写入-响应报文】:19 B2 00 00 00 06 02 10 00 04 00 01
和请求报文的区别
- 没有了请求报文的数据值
- 00 09 变成了00 06 因为报文长度变了
- 其他的报文意义和请求报文一致
实现
//启动服务 public void Start() { //1 创建Socket对象 var socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //2 绑定ip和端口 IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 502); socketServer.Bind(ipEndPoint);