当前位置: 首页 > article >正文

如何通过NMudbus读取寄存器数据

 读取ModbusTCP数据

封装ModbusTcp类

public class ModbusTCP
    {
        private ModbusFactory modbusFactory;
        private IModbusMaster master;
        private TcpClient tcpClient;

        public string IPAdress { get; set; }
        public int Port { get; set; }

        public bool Connected
        {
            get => tcpClient.Connected;
        }

        public ModbusTCP(string ip, int port)
        {
            IPAdress = ip;
            Port = port;

            modbusFactory = new ModbusFactory();
            tcpClient = new TcpClient(IPAdress, Port);
            master = modbusFactory.CreateMaster(tcpClient);
            master.Transport.ReadTimeout = 5000;
            master.Transport.Retries = 10;
        }


        public bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort num)
        {
            return master.ReadCoils(slaveAddress, startAddress, num);
        }

        public bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort num)
        {
            return master.ReadInputs(slaveAddress, startAddress, num);
        }

        public ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort num)
        {
            return master.ReadHoldingRegisters(slaveAddress, startAddress, num);
        }

        public ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort num)
        {
            return master.ReadInputRegisters(slaveAddress, startAddress, num);
        }

        public void WriteSingleCoil(byte slaveAddress, ushort startAddress, bool value)
        {
            master.WriteSingleCoil(slaveAddress, startAddress, value);
        }

        public void WriteSingleRegister(byte slaveAddress, ushort startAddress, ushort value)
        {
            master.WriteSingleRegister(slaveAddress, startAddress, value);
        }

        public void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] value)
        {
            master.WriteMultipleCoils(slaveAddress, startAddress, value);
        }

        public void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] value)
        {
            master.WriteMultipleRegisters(slaveAddress, startAddress, value);
        }

    }

 读取保持寄存器

 1.引入DLL类库

2.一定要记得下载NModbus包 否则会导致引用DLL不全(因为自定义类库中引用了NModbus)

3.设计如下页面

using NModbus类库;

namespace 测试ModbusTCP类库
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            btnRead.Click += BtnRead_Click;
        }

        private void BtnRead_Click(object? sender, EventArgs e)
        {
            string ipAddress = "127.0.0.1";
            int port = 502;
            byte slaveId = 1;
            ModbusTCP modbusTCP = new ModbusTCP(ipAddress, port);
            ushort[] result = modbusTCP.ReadHoldingRegisters(slaveId, 0, 2);
            MessageBox.Show($"{result[0] << 16 | result[1]}");
        }

       
    }
}
4.读取模拟设备的数据


http://www.kler.cn/a/504085.html

相关文章:

  • Vue环境变量配置指南:如何在开发、生产和测试中设置环境变量
  • mysql 与Redis 数据强一致方案
  • Jenkins简单的安装运行
  • 线程间通信
  • 当生活低迷时,如何醒过走出迷境?
  • SQL从入门到实战-2
  • Scala语言的字符串处理
  • 【某大型互联网企业】软件测试面试经验分享(1 ~ 3年)
  • MySQL表的增删改查(基础)-下篇
  • 面试: 工作中常用的linux命令
  • OpenCV基础:矩阵的创建、检索与赋值
  • Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践
  • 在使用 GitLab API 时,如果只能获取少量的 Merge Request(MR)信息,而没有完整的数据
  • ubuntu 下生成 core dump
  • 2025制定一个高级java开发路线:分布式系统、多线程编程、高并发经验
  • SQL 详解数据库
  • Spring Boot中如何处理跨域请求(CORS)
  • 【Linux】Linux基础命令(二)
  • 《Openlayers零基础教程》第六课:地图控件
  • 《重生到现代之从零开始的数据结构生活》——单链表