You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MODBUS RTU读取WAGO电力测量模块保持寄存器故障求助

问题:C# NModbus4 无法与WAGO三相电力测量模块通信

我正尝试开发GUI程序与WAGO三相电力测量模块(型号2857-570/024-005)通信,受公司限制无法使用PLC及CODESYS,故用C#结合NModbus4包编写程序,但读取保持寄存器时无法获得WAGO响应。

自研C#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO.Ports;

using Modbus.Data;
using Modbus.Device;
using Modbus.Utility;
using Modbus.Message;
using Modbus.IO; 
//using Modbus.Serial;

namespace MODBUS_RTU_Tester
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //Specify the COM port assigned to the RS-485 Adapter
            string comPort = "COM4"; //Replace with your desired COM port
            int baudRate = 19200; // Standard MODBUS baud rate
            Parity parity = Parity.Even; //Ensure it matches your devices configuration
            int dataBits = 8; //Standard for MODBUS
            StopBits stopBits = StopBits.One;
            Console.WriteLine("MODBUS RTU Tester");

            using (SerialPort port = new SerialPort(comPort))
            {
                port.BaudRate = baudRate;
                port.Parity = parity;
                port.DataBits = dataBits;
                port.StopBits = stopBits;
                port.ReadTimeout = 5000; //Timeout adjustments
                port.WriteTimeout = 5000;
                //port.Open(); //Open the port for communication

                try
                {
                    Console.WriteLine("Opening serial port...");
                    port.Open();
                    Console.WriteLine("Serial port opened successfully");

                    IModbusSerialMaster modbusMaster = ModbusSerialMaster.CreateRtu(port);


                    byte slaveAddress = 7; //WAGO module address
                    ushort startAddress = 0; //Register Address
                    ushort numberOfRegisters = 1; //Number of Registers
                    Console.WriteLine("Reading holding registers");
                    ushort[] registers;

                    try
                    {
                        //Read holding registers
                        registers = modbusMaster.ReadHoldingRegisters(slaveAddress, startAddress, numberOfRegisters);

                        Console.WriteLine("Register Values:");
                        for (int i = 0; i < registers.Length; i++)
                        {
                            Console.WriteLine($"Register {startAddress + i}: {registers[i]}");
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error reading registers: {ex.Message}");
                        return;
                    }


                    //Write to a single register
                    ushort registerToWrite = 0x0054;
                    ushort valueToWrite = 440;

                    try
                    {
                        modbusMaster.WriteSingleRegister(slaveAddress, registerToWrite, valueToWrite);
                        Console.WriteLine($"Wrote value {valueToWrite} to register {registerToWrite}");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error writing registers: {ex.Message}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error: {ex.Message}");
                }                
                finally
                {
                    Console.WriteLine("Closing serial port...");
                    if (port.IsOpen) port.Close();
                    Console.WriteLine("Serial port closed.");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }
            }
        }
    }
}

环境与排查情况

  • 硬件配置:使用MOXA UPort 1130 USB转串口适配器,配置为RS-485二线制,参数为19200波特率、偶校验、8数据位、1停止位,WAGO模块配置完全一致,连接符合手册要求。
  • 排查过程:最初用示波器确认PC发出的请求帧正确,但WAGO无响应;后续排查发现MOXA适配器故障,更换线缆后,用PowerShell的FieldTalk Modbus驱动可正常与模块通信,但自研的C#代码依然无法读取寄存器,请求协助排查问题。

内容的提问来源于stack exchange,提问作者aidanbarefoot2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:16:10