• modbusRTU通信简单实现(使用NModbus4通信库)


    本文实现ModbusRTU通信,使用的是NModbus4通信库,使用 Modbus Slave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。与之成套存在的另一个软件--Modbus Poll,则是模拟Modbus协议主机的上位机软件。

     一、了解并使用Modbus Slave和Configure Virtual Serial Port Driver软件

    modbus Slave最少也要下载有Configure Virtual Serial Port Driver软件配套才能正常模拟从机和上机通信。

    1.打开Configure Virtual Serial Port Driver并添加虚拟com端口,一次添加两个COM端口,

    一次可以添加两个端口,我添加了com1和com2两个端口。

    在电脑设备管理器->端口中查看是否新加了两个端口:

    带有Virtual Serial Portd的就是模拟的COM端口

     2.了解并使用Modbus Slave软件进行从机数据模拟

    点击Setup配置请求信息(设置串口基本参数)

    3.Modbus Slave串口参数配置详情

     

     4.Modbus Slave连接并创建数据

    点击Conntion配置连接信息,这里我知道使用RTU通信方式就好了,其他使用默认参数。

     

    点击ok我们就连接模拟串口成功了 

    双击寄存器值列表就可以向指定寄存器写入值了 

    二、控制台项目通过NModbus4通信

    1.创建控制台项目,并添加NModbus4和System.IO.Ports两个包

    2.创建  SerialPort实例通信端口设置为COM1端口,SerialPort类是专用来做串口通信的

    1. 打开串口连接 向COM1端口发出请求
    2. SerialPort serialPort = new SerialPort("COM1");
    3. //设置串口基本参数
    4. serialPort.BaudRate = 9600;
    5. serialPort.DataBits = 8;
    6. serialPort.StopBits=StopBits.One;
    7. serialPort.Parity = Parity.None;
    8. serialPort.Open();

    3.进行寄存器读取ReadHoldingRegisters 代表03功能码,读取输出寄存器

    1. // 创建 Modbus RTU 客户端实例
    2. ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
    3. // 设置从设备地址
    4. ushort startAddress = 0; // 起始地址为0
    5. ushort numberOfCoils = 10; // 要读取的线圈数量为10
    6. //ReadHoldingRegisters 就是03功能码读取方式,1代表的是机子名,010代表读取的范围
    7. //发起请求
    8. ushort[] values= master.ReadHoldingRegisters(1, startAddress, numberOfCoils);
    9. Console.WriteLine("读取0到10寄存器的数据打印");
    10. //数据处理
    11. for (int i = 0; i < values.Length; i++)
    12. {
    13. Console.WriteLine(values[i]);
    14. }

     4.写单个输出寄存器WriteSingleRegister代表功能码06

    1. // 设置从设备地址和要写入的寄存器地址及值
    2. ushort slaveAddress = 1; // 从设备地址
    3. ushort startAddress = 0; // 起始地址
    4. ushort valueToWrite = 123; // 要写入的寄存器值
    5. // 将值写入从设备的寄存器中
    6. master.WriteSingleRegister(slaveAddress, startAddress, valueToWrite);

    上述:就是我通过NModbus4通信库实现读取输出寄存器写入输出寄存器。

    总结用NModbus4库与Modbus RTU从设备进行通信操作如下:

    1. 打开串口连接:使用SerialPort类打开与Modbus RTU从设备的串口连接。需要设置串口参数,如波特率、数据位、校验位和停止位等。
    2. 创建Modbus RTU客户端实例:使用ModbusSerialMaster类的CreateRtu方法创建一个Modbus RTU客户端实例,该实例将用于与从设备进行通信。
    3. 设置从设备地址:通过设置slaveAddress属性来指定要与之通信的从设备的地址。
    4. 读取输入线圈:使用ReadCoils方法读取从设备的输入线圈的状态。需要指定从设备地址和起始地址以及要读取的线圈数量。
    5. 读取输出寄存器:使用ReadHoldingRegisters方法读取从设备的输出寄存器的值。需要指定从设备地址和起始地址以及要读取的寄存器数量。
    6. 读取输入寄存器:使用ReadInputRegisters方法读取从设备的输入寄存器的值。需要指定从设备地址和起始地址以及要读取的寄存器数量。
    7. 写单个输出线圈:使用WriteSingleCoil方法将单个输出线圈的状态写入从设备。需要指定从设备地址和要写入的线圈地址以及线圈状态。
    8. 写单个输出寄存器:使用WriteSingleRegister方法将单个输出寄存器的值写入从设备。需要指定从设备地址和要写入的寄存器地址以及要写入的值。
    9. 写多个输出线圈:使用WriteMultipleCoils方法将多个输出线圈的状态写入从设备。需要指定从设备地址和起始地址以及要写入的线圈状态数组。
    10. 写多个输出寄存器:使用WriteMultipleRegisters方法将多个输出寄存器的值写入从设备。需要指定从设备地址和起始地址以及要写入的寄存器值数组。

    以上步骤演示了如何在C#中使用NModbus4库与Modbus RTU从设备进行通信,并读取或写入从设备的不同数据类型。根据实际需求,可以选择使用不同的方法来读取或写入Modbus RTU从设备的数据。

     

  • 相关阅读:
    Java HashCode哈希值的基础概述
    STM32WB55开发(3)----断开蓝牙连接
    践行国策,男性生育力保护与修复新启航
    Kafka3.0.0版本——消费者(消费者组初始化流程图解)
    口碑超好的挂耳式耳机盘点,这几款蓝牙耳机值得一看!
    创建钉钉审批流实例
    计算机毕业设计Java旅游攻略开发系统(源码+mysql数据库+系统+lw文档)
    python基础语法 - 函数
    opencv 暴力特征匹配+FLANN特征匹配
    linux 下 top命令显示的是内存是堆内存吗?
  • 原文地址:https://blog.csdn.net/dawfwafaew/article/details/134467930