当前位置: 代码网 > it编程>编程语言>Asp.net > C# 使用NModbus的实现示例

C# 使用NModbus的实现示例

2025年01月14日 Asp.net 我要评论
在工业自动化和控制系统中,modbus协议是一种广泛使用的通信协议。它是一种基于主从结构的串行通信协议,简单、可靠且易于实现。在c#中,可以使用nmodbus4库来执行modbus通信。本文将详细介绍

在工业自动化和控制系统中,modbus协议是一种广泛使用的通信协议。它是一种基于主从结构的串行通信协议,简单、可靠且易于实现。在c#中,可以使用nmodbus4库来执行modbus通信。本文将详细介绍如何使用nmodbus4库在c#中执行modbus读操作。

1.安装nmodbus4库

使用nuget包管理器安装:

在这里插入图片描述

2.创建momodbus连接

2.1modbusrtu通信

using system.io.ports;
using modbus.device;
using modbus;
using system;
using system.collections.generic;
using system.linq;
using system.net.sockets;
using system.net;
using system.runtime.remoting.contexts;
using system.collections;

namespace cmodbustest
{
    internal class program
    {
        private static serialport serialport;
        private static modbusserialmaster master;
        private static modbusipmaster masterip;
        private static tcpclient tcpclient;
        static void main(string[] args)
        {
            //
            string[] ports = serialport.getportnames();
            serialport = new serialport(ports[0], 9600, parity.none, 8, stopbits.one);
            serialport.open();
            master = modbusserialmaster.creatertu(serialport);
            master.transport.writetimeout = 2000;
            master.transport.readtimeout = 2000;
            master.transport.waittoretrymilliseconds = 500;
            master.transport.retries = 3;

            try
            {
                ushort[] data = master.readholdingregisters(1, 0, 2);
                list<byte> list = new list<byte>();
                foreach (var item in data)
                {
                    list.addrange(bitconverter.getbytes(item).reverse());
                }
                console.writeline(list.toarray());
            }
            catch (exception ex)
            {
                if (serialport != null || serialport.isopen)
                {
                    serialport.close();
                }
                master = null;
                throw new exception("【读取保持寄存器】失败:" + ex.message);
            }
        }
    }
}

代码解析:
配置串口连接:使用 serialport 类设置串口连接,包括端口号、波特率、校验位等。
创建 modbus rtu 客户端:通过 modbusserialmaster.creatertu() 创建 modbus rtu 客户端。
读取寄存器:通过 readholdingregisters 方法读取指定从站地址和寄存器范围的数据。
关闭串口连接:通信完成后,关闭串口。
常见 modbus rtu 操作:
读取数据:readcoils()、readdiscreteinputs()、readholdingregisters()、readinputregisters()。
写入数据:writesinglecoil()、writesingleregister()、writemultiplecoils()、writemultipleregisters()。

2.2modbustcp通信

using system.io.ports;
using modbus.device;
using modbus;
using system;
using system.collections.generic;
using system.linq;
using system.net.sockets;
using system.net;
using system.runtime.remoting.contexts;
using system.collections;

namespace cmodbustest
{
    internal class program
    {
        private static serialport serialport;
        private static modbusserialmaster master;
        private static modbusipmaster masterip;
        private static tcpclient tcpclient;
        static void main(string[] args)
        {
             // 1. 连接到 modbus 服务器(modbus tcp)
             tcpclient = new tcpclient();
             tcpclient.connect(ipaddress.parse("127.0.0.1"),502);

             // 2. 获取 modbus tcp 设备的协议客户端
             masterip = modbusipmaster.createip(tcpclient);
             masterip.transport.writetimeout = 2000;
             masterip.transport.readtimeout = 2000;
             masterip.transport.waittoretrymilliseconds = 500;
             masterip.transport.retries = 3;

             // 3. 读取从站设备的寄存器
             ushort startaddress = 0;  // 寄存器起始地址
             ushort numregisters = 10; // 读取 10 个寄存器
             try
             {
                 // 读取保持寄存器
                 ushort[] registers = masterip.readholdingregisters(startaddress, numregisters);

                // 输出结果
                console.writeline("读取到的寄存器值:");
                foreach (var register in registers)
                {
                   console.writeline(register);
                }
             }
             catch (exception ex)
             {
                   console.writeline($"读取错误: {ex.message}");
             }
        }
    }
}

代码解析:
连接到 modbus 服务器:使用 tcpclient 与 modbus 设备建立 tcp 连接。指定设备的 ip 地址和端口(默认为 502)。
创建 modbus 客户端:通过 modbustcpmaster.createip(client) 创建一个 modbus 客户端,支持读写数据。
读取保持寄存器:通过 readholdingregisters 方法从设备读取指定地址的多个寄存器的值。
关闭连接:通信完成后,关闭与设备的连接。
常用 modbus 操作:
读取寄存器:readholdingregisters()、readinputregisters()。
写入寄存器:writesingleregister()、writemultipleregisters()。

到此这篇关于c# 使用nmodbus的实现示例的文章就介绍到这了,更多相关c# 使用nmodbus内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com