如何访问5xxxx Modbus地址

时间:2011-05-25 11:59:59

标签: c# modbus

我正在尝试使用nmodbus访问Socomec Diris A40上的50526等地址。与我看到的从3或4开始的其他示例不同,这些地址都以5. 50544,50550,50556开头,但是还有更多的内容。

据我所知,第一个数字代表Modbus功能,实际上并不是指实际地址,即30000个地址使用功能04,40000地址功能03(?)。我已经看到第一个数字被省略,其余数字用作地址。如果我用我的50000地址尝试这个,我会取得一些成功,但不是所有的值,结果似乎不正确。 MODPOLL返回与我的代码相同的结果。

我真的可以使用一些帮助!如果有人可以告诉我如何访问这些5xxxx寄存器,我将非常感激。

方法代码:

    public static void ModbusSerialRtuMasterReadRegisters()
    {
        using (SerialPort port = new SerialPort("COM1"))
        {
            // configure serial port

            port.BaudRate = 9600;
            port.DataBits = 8;
            port.Parity = Parity.None;
            port.StopBits = StopBits.One;

            try
            {
                port.Open();
                Console.WriteLine("port " + port.PortName + " open: " + port.IsOpen + "\n");
            }
            catch(Exception ex)
            {
                Console.WriteLine("Unable to open port: " + ex);
            }

            // create modbus master
            IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

            byte slaveId = 1;
            ushort startAddress = 1;
            ushort numRegisters = 5;
            ushort[] registers = new ushort[numRegisters];;

            // read registers
            try
            {
                registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
                for (int i = 0; i < numRegisters; i++)
                    Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);
            }
            catch (Modbus.SlaveException se)
            {
                Console.WriteLine("Could not find register... \n \n" + se);
            }

            try
            {
                port.Close();
                Console.WriteLine("\nport " + port.PortName + " open: " + port.IsOpen + "\n");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to close port: " + ex);
            }
        }

2 个答案:

答案 0 :(得分:2)

尝试从5xxxx地址中减去40001或40000(地址以1或0开头)。

答案 1 :(得分:0)

具有5xxxx地址的寄存器正在保存寄存器。 (40001至5xxxx范围) 因此,要查找Modbus寄存器地址,应从40001中减去其地址。 例如50512 - 40001 = 10511(290F H)

祝你好运