Hallo,
ich vesuche gerade von der Alfen per Modbus TCP die "Socket measurement registers" mit pymodbus auszulesen.
Dabei produziert
viele NaN-Werte:
Das Encoding habe ich dem Alfen Dokument
Modbus Slave TCP/IP
Implementation of Modbus Slave
TCP/IP for Alfen NG9xx platform
Author: T. Nederlof
Version: 2.3
30-10-2020
entnommen. Da einige Werte durchaus plausible Werte haben, nehme ich an, dass die Vorgehensweise nicht fundamental falsch ist.
Weiß jemand, ob das Encoding vielleicht falsch in dem Dokument angegeben ist oder seht Ihr die gleiche Ausgabe?
Danke und Gruß
Rainer
ich vesuche gerade von der Alfen per Modbus TCP die "Socket measurement registers" mit pymodbus auszulesen.
Dabei produziert
Code:
# A modbus message must not exceed 256 bytes. Since this limits messages to a # somewhat lower length then 128 (125 worked) due to header bytes. To be on the # safe side, split the transaction into two reads. second_read_length=16*4 first_read_length=126-second_read_length rr = self.modbus_client.read_holding_registers(300, count=first_read_length, # count: number of 16 bit values slave=1) decoder = pymodbus.payload.BinaryPayloadDecoder.fromRegisters(rr.registers, byteorder=pymodbus.constants.Endian.Big, wordorder=pymodbus.constants.Endian.Big) rr = self.modbus_client.read_holding_registers(300+first_read_length, count=second_read_length, # count: number of 16 bit values slave=1) decoder2 = pymodbus.payload.BinaryPayloadDecoder.fromRegisters(rr.registers, byteorder=pymodbus.constants.Endian.Big, wordorder=pymodbus.constants.Endian.Big) self.energy_measurements = { 'meter_state': decoder.decode_16bit_uint(), 'meter_last_value_timestamp': decoder.decode_64bit_uint(), 'meter_type': decoder.decode_16bit_uint(), 'V_L1_N': decoder.decode_32bit_float(), # unit: Volt 'V_L2_N': decoder.decode_32bit_float(), 'V_L3_N': decoder.decode_32bit_float(), 'V_L1_L2': decoder.decode_32bit_float(), 'V_L2_L3': decoder.decode_32bit_float(), 'V_l3_L1': decoder.decode_32bit_float(), 'I_N': decoder.decode_32bit_float(), 'I_L1': decoder.decode_32bit_float(), 'I_L2': decoder.decode_32bit_float(), 'I_L3': decoder.decode_32bit_float(), 'I_SUM': decoder.decode_32bit_float(), 'P_FACTOR_PH_L1': decoder.decode_32bit_float(), 'P_FACTOR_PH_L2': decoder.decode_32bit_float(), 'P_FACTOR_PH_L3': decoder.decode_32bit_float(), 'P_FACTOR_PH_SUM': decoder.decode_32bit_float(), 'FREQ': decoder.decode_32bit_float(), # unit: Hz 'REAL_P_PH_L1': decoder.decode_32bit_float(), 'REAL_P_PH_L2': decoder.decode_32bit_float(), 'REAL_P_PH_L3': decoder.decode_32bit_float(), 'REAL_P_SUM': decoder.decode_32bit_float(), 'APPARENT_P_PH_L1': decoder.decode_32bit_float(), 'APPARENT_P_PH_L2': decoder.decode_32bit_float(), 'APPARENT_P_PH_L3': decoder.decode_32bit_float(), 'APPARENT_P_SUM': decoder.decode_32bit_float(), 'REACTIVE_P_PH_L1': decoder.decode_32bit_float(), 'REACTIVE_P_PH_L2': decoder.decode_32bit_float(), 'REACTIVE_P_PH_L3': decoder.decode_32bit_float(), 'REACTIVE_P_SUM': decoder.decode_32bit_float(), # unit: Watt 'REAL_E_DELIVERED_L1': decoder2.decode_64bit_float(), 'REAL_E_DELIVERED_L2': decoder2.decode_64bit_float(), 'REAL_E_DELIVERED_L3': decoder2.decode_64bit_float(), 'REAL_E_DELIVERED_SUM': decoder2.decode_64bit_float(), 'REAL_E_CONSUMED_L1': decoder2.decode_64bit_float(), 'REAL_E_CONSUMED_L2': decoder2.decode_64bit_float(), 'REAL_E_CONSUMED_L3': decoder2.decode_64bit_float(), 'REAL_E_CONSUMED_SUM': decoder2.decode_64bit_float(), 'APPARENT_E_L1': decoder2.decode_64bit_float(), 'APPARENT_E_L2': decoder2.decode_64bit_float(), 'APPARENT_E_L3': decoder2.decode_64bit_float(), 'APPARENT_E_SUM': decoder2.decode_64bit_float(), 'REACTIVE_E_L1': decoder2.decode_64bit_float(), 'REACTIVE_E_L2': decoder2.decode_64bit_float(), 'REACTIVE_E_L3': decoder2.decode_64bit_float(), 'REACTIVE_E_SUM': decoder2.decode_64bit_float(), }
Code:
Energy measurements: { "meter_state": 3, "meter_last_value_timestamp": 171, "meter_type": 0, "V_L1_N": 231.12998962402344, "V_L2_N": 231.61000061035156, "V_L3_N": 233.89999389648438, "V_L1_L2": NaN, "V_L2_L3": NaN, "V_l3_L1": NaN, "I_N": NaN, "I_L1": 0.0, "I_L2": 0.0, "I_L3": 0.0, "I_SUM": NaN, "P_FACTOR_PH_L1": NaN, "P_FACTOR_PH_L2": NaN, "P_FACTOR_PH_L3": NaN, "P_FACTOR_PH_SUM": 0.0, "FREQ": 49.97500228881836, "REAL_P_PH_L1": NaN, "REAL_P_PH_L2": NaN, "REAL_P_PH_L3": NaN, "REAL_P_SUM": 0.0, "APPARENT_P_PH_L1": NaN, "APPARENT_P_PH_L2": NaN, "APPARENT_P_PH_L3": NaN, "APPARENT_P_SUM": NaN, "REACTIVE_P_PH_L1": NaN, "REACTIVE_P_PH_L2": NaN, "REACTIVE_P_PH_L3": NaN, "REACTIVE_P_SUM": NaN, "REAL_E_DELIVERED_L1": NaN, "REAL_E_DELIVERED_L2": NaN, "REAL_E_DELIVERED_L3": NaN, "REAL_E_DELIVERED_SUM": 2485612.0, "REAL_E_CONSUMED_L1": NaN, "REAL_E_CONSUMED_L2": NaN, "REAL_E_CONSUMED_L3": NaN, "REAL_E_CONSUMED_SUM": NaN, "APPARENT_E_L1": NaN, "APPARENT_E_L2": NaN, "APPARENT_E_L3": NaN, "APPARENT_E_SUM": NaN, "REACTIVE_E_L1": NaN, "REACTIVE_E_L2": NaN, "REACTIVE_E_L3": NaN, "REACTIVE_E_SUM": NaN }
Modbus Slave TCP/IP
Implementation of Modbus Slave
TCP/IP for Alfen NG9xx platform
Author: T. Nederlof
Version: 2.3
30-10-2020
entnommen. Da einige Werte durchaus plausible Werte haben, nehme ich an, dass die Vorgehensweise nicht fundamental falsch ist.
Weiß jemand, ob das Encoding vielleicht falsch in dem Dokument angegeben ist oder seht Ihr die gleiche Ausgabe?
Danke und Gruß
Rainer
Kommentar