• 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             }
  • 相关阅读:
    视频相关一些基础概念解析
    git
    mysql数据库查找类型不匹配
    matlab转python
    神经网络(二)
    python图片处理(三)
    python图片处理(二)
    python图片处理(一)
    python图片处理和matlab图片处理的区别
    MapReduce原理与设计思想
  • 原文地址:https://www.cnblogs.com/leoxjy/p/9532624.html
Copyright © 2020-2023  润新知