Ankündigung

Einklappen
Keine Ankündigung bisher.

Alfen Eve Single S-line (NG910) zeigt seltsames Modbus Verhalten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Alfen Eve Single S-line (NG910) zeigt seltsames Modbus Verhalten

    Hallo,

    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(),
                }​
    viele NaN-Werte:

    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
    }​
    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

    #2
    Wahrscheinlich ist das durch den satz im Alfen Dokument abgedeckt:
    • Whenever a register is reserved or not available, the register reply is filled with Not a Number (NaN), which is set to 0xFFFF for a 16 bit register.

    Kommentar

    Lädt...
    X