Reading accumulated energy from ABB energymeter

Hi

Iv'e been trying to read the accumulated values from an ABB B24 212-100 energy meter via modbus.

The voltages and other small values reads just fine, but the accumulated values are stored across 4 registers, so a 64-bit value(?).
I can get citect to read them one by one as integers and then get the same result as in a modbus-poll program, but I can´t get citect to read out the correct accumulated value.

I of course have read the manual, which can be found here: https://new.abb.com/products/2CMA100180R1000/active-energy-class-1-or-b-for-mid-meters-reactive-energy-class-2

And from that Iv'e extracted the addresses in hex, converted to decimal, and offset them. Seems like reading them with an offset of +2 gives the same result as modbus-poll programs at least.

So in summary, reading a 4 register long accumulator, how do I do it? Using datatype ULONG or LONG doesn't help. Also tried the ini-parameters for bitswapping and such.

Regards

Anders

Parents
  • Thanks Eric! Had a look at it, and also googled on how to combine INTs to a 64bit value.

    Found this as an example:
    "You must read the register in 4 x 16 Bit Pieces
    Then apply the following formula to the values you receive in these 4 registers
    (A*281474976710656+B*4294967296+C*65536+D)/1000"

    And doing the math it works out.
    Although citect doesn't like the big numbers, but when reading all four INTs the first two are zero anyways, so i skipped them.
    And if i fill up both last INTs the sum would equal to over 200years of accumulation in this application..
    So by that i figured that addressing the two last INTs as an ULONG I got the right value without any calculations, and in 200 years, this isn't my problem. :)

    Did have to set LongDataType = 1.
Reply
  • Thanks Eric! Had a look at it, and also googled on how to combine INTs to a 64bit value.

    Found this as an example:
    "You must read the register in 4 x 16 Bit Pieces
    Then apply the following formula to the values you receive in these 4 registers
    (A*281474976710656+B*4294967296+C*65536+D)/1000"

    And doing the math it works out.
    Although citect doesn't like the big numbers, but when reading all four INTs the first two are zero anyways, so i skipped them.
    And if i fill up both last INTs the sum would equal to over 200years of accumulation in this application..
    So by that i figured that addressing the two last INTs as an ULONG I got the right value without any calculations, and in 200 years, this isn't my problem. :)

    Did have to set LongDataType = 1.
Children
No Data