zoukankan      html  css  js  c++  java
  • C# Modbus 数据读取 使用NModBus4库

    ModBus通讯协议

        

    方法名

    作用

    所需参数

    返回值

    对应功能码

    ReadCoils

    读取DO的状态

    从站地址(8位)

    byte slaveAddress

    起始地址(16位)

     

    ushort startAddress

    读取数量(16位)

    ushort numberOfPoints

    bool[]

    01

    ReadInputs

    读取DI的状态

    从站地址(8位)

    byte slaveAddress

    起始地址(16位)

     

    ushort startAddress

    读取数量(16位)

    ushort numberOfPoints

    bool[]

    02

    ReadHoldingRegisters

    读取AO的值

    从站地址(8位)

    byte slaveAddress

    起始地址(16位) 

    ushort startAddress

    读取数量(16位)

    ushort numberOfPoints

    ushort[]

    03

    ReadInputRegisters

    读取AI的值

    从站地址(8 位)

    byte slaveAddress

    起始地址(16位)

     

    ushort startAddress

    读取数量(16位)

    ushort numberOfPoints

    ushort[]

    04

    WriteSingleCoil

    写入值到DO

    从站地址(8位)

    byte slaveAddress

    线圈地址(16位)

    ushort coilAddress

    写入值(布尔型)

    bool value

    无返回值

    05

    WriteSingleRegister

    写入值到AO

    从站地址(8位)

    byte slaveAddress

    寄存器地址(16位)

    ushort registerAddress

    写入值(16位)

    ushort value

    无返回值

    06

    WriteMultipleCoils

    写多线圈寄存器

    从站地址(8位)

    byte slaveAddress

    起始地址(16位)

    ushort startAddress

    写入值(布尔型数组)

    bool[] data

    无返回值

    15

    WriteMultipleRegisters

    写多个保持寄存器

    从站地址(8位)

    byte slaveAddress

     

    起始地址(16位)

    ushort startAddress,

    寄存器值(16位整型数组)

    ushort[] data

    无返回值

    16

    ReadWriteMultipleRegisters

    读写多个保持寄存器

    从站地址(8位)

    byte slaveAddress

    读起始地址(16位)

    ushort startReadAddress

     

    读取数量(16位)

    ushort numberOfPointsToRead,

    写入起始地址(16位)

    ushort startWriteAddress,

    写入值(16位整型数组)

    ushort[] writeData

    ushort[]

    23

    Modbus Slave

            这个是安装包ModbusSlaveSetup64Bit     注册码:5455415451475662

            

     

            

    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             }
  • 相关阅读:
    Quick QEMU
    Linux 常用命令速查
    Linux 安装篇
    Vivaldi解决flash插件问题
    VNC 安装 (适用Redhat 9.0 和 CentOS 7.0+)
    Git使用笔记 (github为例)
    poj3045 Cow Acrobats(二分最大化最小值)
    poj3104 Drying(二分最大化最小值 好题)
    poj3468 A Simple Problem with Integers(线段树区间更新)
    poj1852 Ants(思维)
  • 原文地址:https://www.cnblogs.com/leoxjy/p/9532624.html
Copyright © 2011-2022 走看看