摘要:本文主要向大家介绍了C#编程之C# Modbus 数据读取 使用NModBus4库,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
本文主要向大家介绍了C#编程之C# Modbus 数据读取 使用NModBus4库,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
方法名 作用 所需参数 返回值 对应功能码
ReadCoils 读取DO的状态 从站地址(8位) bool[] 1
byte slaveAddress
起始地址(16位)
ushort startAddress
读取数量(16位)
ushort numberOfPoints
ReadInputs 读取DI的状态 从站地址(8位) bool[] 2
byte slaveAddress
起始地址(16位)
ushort startAddress
读取数量(16位)
ushort numberOfPoints
ReadHoldingRegisters 读取AO的值 从站地址(8位) ushort[] 3
byte slaveAddress
起始地址(16位)
ushort startAddress
读取数量(16位)
ushort numberOfPoints
ReadInputRegisters 读取AI的值 从站地址(8 位) ushort[] 4
byte slaveAddress
起始地址(16位)
ushort startAddress
读取数量(16位)
ushort numberOfPoints
WriteSingleCoil 写入值到DO 从站地址(8位) 无返回值 5
byte slaveAddress
线圈地址(16位)
ushort coilAddress
写入值(布尔型)
bool value
WriteSingleRegister 写入值到AO 从站地址(8位) 无返回值 6
byte slaveAddress
寄存器地址(16位)
ushort registerAddress
写入值(16位)
ushort value
WriteMultipleCoils 写多线圈寄存器 从站地址(8位) 无返回值 15
byte slaveAddress
起始地址(16位)
ushort startAddress
写入值(布尔型数组)
bool[] data
WriteMultipleRegisters 写多个保持寄存器 从站地址(8位) 无返回值 16
byte slaveAddress
起始地址(16位)
ushort startAddress,
寄存器值(16位整型数组)
ushort[] data
ReadWriteMultipleRegisters 读写多个保持寄存器 从站地址(8位) ushort[] 23
byte slaveAddress
读起始地址(16位)
ushort startReadAddress
读取数量(16位)
ushort numberOfPointsToRead,
写入起始地址(16位)
ushort startWriteAddress,
写入值(16位整型数组)
ushort[] writeData
modbus通讯协议NET库
这样的开源库很多,我这边用的库是github的开源实现类库:NModBus4,github地址:https://github.com/NModbus4/NModbus4
我用Modbus Slave模拟一个从机
设置数据
NModbus4的读取从机代码示例
1 IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
2 using (TcpClient client = new TcpClient(address.ToString(), 502))
3 {
4 client.SendTimeout = 1;
5 //client.op
6 ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
7 //master.op
8 // read five input values
9 ushort startAddress = 0;
10 ushort numInputs = 10;
11 bool[] inputs = master.ReadCoils(1, startAddress, numInputs);
12
13 for (int i = 0; i < numInputs; i++)
14 {
15 Console.WriteLine($"Input {(startAddress + i)}={(inputs[i] ? 1 : 0)}");
16 }
17
18 }
这边值得注意的是主机Read的方法第一个参数是slaveId 如果不加就startAddress And numInputs NModbus就会默认 slaveId是0 一直异常( d(╯﹏╰)b 痛苦经历~~)
以上数据是 刚才设置的DO 状态
在演示一个读取AI的值
代码没差多少就是方法ReadInputRegisters不一样 . 以下是示例代码
1 IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
2 using (TcpClient client = new TcpClient(address.ToString(), 502))
3 {
4 client.SendTimeout = 1;
5 //client.op
6 ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
7 //master.op
8 // read five input values
9 ushort startAddress = 0;
10 ushort numInputs = 10;
11 ushort[] inputs = master.ReadInputRegisters(2, startAddress, numInputs);
12
13 for (int i = 0; i < numInputs; i++)
14 {
15 Console.WriteLine($"Register {(startAddress + i)}={(inputs[i])}");
16 }
17
18 }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号
ICP许可 沪B2-20190160