使用NModBus库实现Modbus Master的示例代码

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

使用NModBus库实现Modbus Master的示例代码缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
using System;
using System.Net.Sockets;
using Modbus.Data;
using Modbus.Device;

namespace ModbusMasterExample
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = new TcpClient("localhost", 502); // connect到Modbus TCP服务器
            ModbusIpMaster master = ModbusIpMaster.CreateIp(client); // 创建Modbus Master

            ushort startAddress = 0;
            ushort numRegisters = 10;

            // Read coil status
            bool[] coils = master.ReadCoils(1, startAddress, numRegisters);
            Console.WriteLine("Coils: " + String.Join(", ", coils));

            // Read discrete inputs状态
            bool[] inputs = master.ReadInputs(2, startAddress, numRegisters);
            Console.WriteLine("Inputs: " + String.Join(", ", inputs));

            // Read and hold register
            ushort[] holdingRegisters = master.ReadHoldingRegisters(3, startAddress, numRegisters);
            Console.WriteLine("Holding Registers: " + String.Join(", ", holdingRegisters));

            // Read input register
            ushort[] inputRegisters = master.ReadInputRegisters(4, startAddress, numRegisters);
            Console.WriteLine("Input Registers: " + String.Join(", ", inputRegisters));
        }
    }
}

实例2:

private static void Main(string[] args)
        {
            try
            {
                ModbusSerialRtuMasterWriteRegisters();
                ModbusTcpMasterReadInputs();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
 
        /// <summary>
        /// Simple Modbus serial RTU master write holding registers example.
        /// </summary>
        public static void ModbusSerialRtuMasterWriteRegisters()
        {
            using (SerialPort port = new SerialPort("COM3"))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();
 
                var factory = new ModbusFactory();
                IModbusMaster master = factory.CreateRtuMaster(port);
 
                byte slaveId = 1;
                ushort startAddress = 100;
                ushort[] registers = new ushort[] { 1, 2, 3 };
 
                // write three registers
                master.WriteMultipleRegisters(slaveId, startAddress, registers);
            }
        }
 
        /// <summary>
        ///     Simple Modbus TCP master read inputs example.
        /// </summary>
        public static void ModbusTcpMasterReadInputs()
        {
            using (TcpClient client = new TcpClient("127.0.0.1", 502))
            {
                var factory = new ModbusFactory();
                IModbusMaster master = factory.CreateMaster(client);
 
                // read five input values
                ushort startAddress = 100;
                ushort numInputs = 5;
                bool[] inputs = master.ReadInputs(0, startAddress, numInputs);
 
                for (int i = 0; i < numInputs; i++)
                {
                    Console.WriteLine($"Input {(startAddress + i)}={(inputs[i] ? 1 : 0)}");
                }
            }
 
            // output:
            // Input 100=0
            // Input 101=0
            // Input 102=0
            // Input 103=0
            // Input 104=0
        }

上述示例代码创建了一个Modbus TCP客户端,然后使用Modbus Master对象实现了Read coil status、离散input state、保持register和输入register的Function。当然,实际使用时需要根据实际情况进行修改。

NModbus库在本页面Download

技术术语(共 4 个)—— 点击展开
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus编程开发 字数 2295 字 · 阅读约 6 分钟 更新 2023-02-12 永久链接 https://www.modbus.cn/11738.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注