基于ModbusRTU通过以太网串口转换模块的通讯(五)

背景:

  在最近项目中有几台只支持串口ModbusRTU协议的设备需要接入我们集成系统以太网中,根据需求我们采用了串口转换模块从设备->串口转换模块->汇聚交换机->服务器;通过设备读取/写入寄存器进行数据交换。

  1.连接

  通过厂家给的模块工具进行连接配置,注意转化协议选择

 

  2.通讯协议

  以下为整理后的关键通讯协议

  寄存器读取:

 

 寄存器写入:

 

 3.代码实现

以下为通讯模块关键代码,其他数据发送及接收采用Socket通讯参考前几章内容这里不再复述;

读取指令

 1 private byte[] GetReadCommand(int startIndex, int len)
 2         {
 3             byte[] command = new byte[12];
 4        
 5             //校验信息
 6             command[0] = 0x00;
 7             command[1] = 0x01; 
 8             //协议标识符
 9             command[2] = 0x00;
10             command[3] = 0x00;
11             //数据长度
12             command[4] = 0x00;
13             command[5] = 0x06;
14             //设备地址 
15             command[6] = Const.设备编号;
16             //功能码
17             command[7] = Const.读取功能码;
18             //寄存器起始地址
19             command[8] = (byte)(startIndex >> 8);
20             command[9] = (byte)(startIndex & 0xFF);
21             // 寄存器读取个数
22 
23             if (len % 2 > 0) len += 1;//补1
24 
25             command[10] = (byte)((len / 2) >> 8);
26             command[11] = (byte)((len / 2) & 0xFF);
27 
28             return command;
29         }
View Code

写入指令

 1 private byte[] GetWriteCommand(int startIndex,byte[] bytes)
 2         {
 3             byte[] command = new byte[10];
 4             //校验信息
 5             command[0] = 0x00;
 6             command[1] = 0x01;
 7             //协议标识符
 8             command[2] = 0x00;
 9             command[3] = 0x00;
10             //数据长度
11             command[4] = 0x00;
12             command[5] = 0x06;
13             //设备地址 
14             command[6] = Const.设备编号;
15             //功能码
16             command[7] = Const.写入功能码;
17             //寄存器起始地址
18             command[8] = (byte)(startIndex >> 8);
19             command[9] = (byte)(startIndex & 0xFF);
20 
21             command = command.Concat(bytes).ToArray();
22 
23             return command;
24         }
View Code

4.测试

 

 通过采集数据值经过公式换算最终得出需要的值

 

posted @ 2022-06-27 13:25  豆腐柠檬  阅读(265)  评论(0编辑  收藏  举报