Я пытаюсь получить доступ к адресам, таким как 50526 на Socomec Diris A40, используя nmodbus.В отличие от других примеров, которые я видел, которые начинаются с 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);
}
}