C#编程之C# Modbus 数据读取 使用NModBus4库

C#编程之C# Modbus 数据读取 使用NModBus4库

http://m.zhizuobiao.com/net/net-18091700173/

2018-09-17 来自 03142

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值