从Modbus-TCP中读取不同的元素

时间:2016-04-05 14:27:40

标签: c# modbus modbus-tcp

我正在试图弄清楚如何从modbus设备(Powerscout 24)中读取不同元素的不同值。手册here表示

  

解决元素

     

PowerScout 24有八个元素。每个使用Modbus和BACnet   在PS24上指定元素的不同方法。在Modbus模式下,   十进制网络开关设置计量元素的基址   “A.”计量元素“B”到“H”将始终具有Modbus   地址比之前的元素高一个。例如,如果   旋转地址开关设置为001然后计量元件“A”   寄存器值将在Modbus地址001,元素“B”访问   寄存器将在Modbus地址002,元素“C”at处访问   地址003,等等。

根据我的理解,如果我想读取元素A(或从器件1)上寄存器4012的值,我会在4012读取保持寄存器。

如果我想阅读元素B,寄存器将是4013?但是怎么可能,4013用于不同的值 - 位移PF系统。 (检查第65页的顶部)

我已尝试使用此库EasyModbusTCP

ModbusClient modbusClient = new ModbusClient("192.168.1.250", 502);    //Ip-Address and Port of Modbus-TCP-Server
modbusClient.Connect();                                                    
int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(4000,1);
//Read 10 Holding Registers from Server, starting with Address 1

我已经对此进行了测试,它的工作原理是它只能读取元素A(从属1)的寄存器。我还没弄清楚如何读取其他元素的寄存器。

我检查了库的其他部分(RTU - 从串口读取),这定义了一个要读取的从站,但是我需要通过TCP读取设备而不是串行,所以我不能这样实现它。

任何人都可以解释我如何通过TCP读取不同的元素吗?

1 个答案:

答案 0 :(得分:0)

所以我找到了解读特定元素(Slaves)的解决方案。从easy modbustcp中,您可以更改modbus客户端的UnitIdentifier。

modbusClient.UnitIdentifier = 3;

这将使对modbus客户端的任何读取从第3个元素读取。