C#编程之C# Modbus 数据读取 使用NModBus4库
小标 2018-09-17 来源 : 阅读 7778 评论 0

摘要:本文主要向大家介绍了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频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 6 不喜欢 | 12
看完这篇文章有何感觉?已经有18人表态,33%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:13167058313
小职老师的微信号:13167058313

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    ICP许可  沪B2-20190160

站长统计