Modbus Communication between EATON Power Meter and Accuenergy Data Acquisition Server

Primed1

Member
Join Date
Mar 2021
Location
Victoria
Posts
4
Hi All,

I am using an Accuenergy Data Acquisition Server (https://www.accuenergy.com/products/aculink-810-data-acquisition-gateway-server/) to log data from a number of power meters. Each of the power meters communicates with the Accuenergy via Modbus RTU. I am having trouble getting the Accuenergy to poll data from an EATON IQ100 meter. A snapshot of the Modus Map for the EATON Meter is below. These are the three parameters that I am trying to poll.

attachment.php


I am new to Modbus (I'm an electrician) and I think I might be setting up the Modbus template wrong. In setting up the template the Acculink logger. The UI requires the following:

attachment.php


For Function, I select "Read_Holding REGISTERS" As I believe the power meter Modbus map uses Holding Registers only. I then enter 0383 as the starting address and in "Count", I enter 6. The UI then asks for the following:

attachment.php


To read "Watts, 3-Ph total" I enter the address 0383 and in multiplier the number 1. Does this seem correct so far? Unfortunately, I can't seem to make it work... I have also attached the full Modbus map for the EATON meter in case I am missing something.

Capture11.JPG 1617746145685.png Capture12.JPG
 

Attachments

  • IQ_100_Series_Modbus_Map.pdf
    141.8 KB · Views: 5
I would have entered data just like you have done.

An assumption is that for the 'count' that 'block elements' means the number of 16 bit Modbus Holding registers being requested, which for all 3 meter variables would be a quantity of six 16 bit Modbus registers for 32 bit floating point values; and not 8 bit bytes.

I've found that Start addresses requesting hex values are always zero-based, as is this map, where the hex values are decimal values minus one (or decimal is hex plus one).

Steve, I've never seen a master use the leading numeral (4) for memory area identification (Holding Register) when using zero based hex addresses; the leading numeral is always used with one-based decimal register values.

I could not find a statement in the map that the map is a Holding register map. The meter values are read-only, which is characteristic of Input Registers; Holding Register can be read-only or read/write depending on implementation; Input registers are read-only by the Modbus Standard definition.

It might be worth trying 'read input register' as the function code command, although I don't have a high confidence that it make a difference and work, but when you're stuck . . . . I suspect that the values are Holding since there are other registers or blocks of registers that are writeable.

Is this Modbus RTU over RS-485?

Have you checked that the serial settings on both ends are identical? Baud rate, parity, stop bit?

Is the RS-485 2 wire or 4 wire?

RS-485 drivers should connect (+) to (+), (-) to (-) or A to A, B to B, but some vendors label the drivers backwards which won't damage a driver, but it will never communicate being hooked up backwards. When all the other stuff is kosher but it still communicate, try swapping the driver lines on one end only to see if the labeling is backwards.

How do you know that you addressing the correct slave. The master has to address a particular slave using its slave node ID number, from 1 through 247. What is the slave's ID and is the master using that slave node ID?

If this bench top testing, skip the termination resistor which should go and the ends of a 485 network until it tests OK and you're ready to install in the field.

Are the blinkie LEDs that blink when you tell the master to poll the slave?

How does the master 'fail'? Is there an error generated?
 
Last edited:
I did think maybe my holding register assumption might be incorrect. I will try setting as input registers. It will also try 40383 or 400383 for the address? Rather than entering 0383.

I am able to communicate with the power meter if I connect it directly to a laptop and run the ICC Modbus master tool. So I don't think there is anything wrong with the serial link. I just can't get the Accuenergy Data Acquisition Server to talk to the meter. It's definitely something with the Accuenergy that is not correct.

I have tried disconnecting all the other meters and just leaving the Eaton Power meter connected (so there is only one slave). That still didn't work. I should definitely be addressing the correct slave.

The Accuenergy UI asks for the following parameters when setting up the Modbus RTU device. I have set the parameters as follows:

Protocol: RTU

Port: RS485

Modbus ID: 2

Baud Rate: 9600

Data Bit: 8

Parity: None

Stop Bit: One

Request Timeout: 500ms
 
Is the Slave node ID 2 the default for the meter, or did you change to 2?


If you changed it from other number to the number 2, did you cycle the power to the meter after the change?

Most devices will not recognize a serial setting configuration change until after the next power cycle.
 
Is the Accuenergy Data Acquisition Server software operating the same laptop with the same serial port as the laptop that runs the ICC Modbus master tool that talks to the meter?

Or does the ICC tool run on a different laptop, different serial port?
 
Last edited:
Is the modbus address not the 900 (400900) rather than the 0383?

Actually, further down the manual on page 7 there are some 12 bit RTU readings showing your required readings as 40008 - 40010
 
Last edited:
Is the modbus address not the 900 (400900) rather than the 0383?
Yes, the 900 register is the same as (4)0900 [5 digit addressing] or (4)[/QUOTE]00900 [6 digit addressing]. But the master is asking for zero based hexadecimal addressing, not one-based decimal addressing.
Actually, further down the manual on page 7 there are some 12 bit RTU readings showing your required readings as 40008 - 40010
Those RTU values are integers, not floating point and they up high in the map, as confirmed by the corresponding hex addresses.

The page 7 RTU value 40001 could also be written (4)40001 as a 6 digit register.

The page 7 RTU value is not (4)0001 (5 digit addressing); it is (4)40001 in 6 digit addressing.

This is confirmed by page 7 showing (4)40001's corresponding hexadecimal address as 9C40.

An address of (4)0001 would have a corresponding hexadecimal address of 0000.

The leading numeral (4), indicating a Holding Register, is never used with zero-based hex addressing; it is always used with one-based decimal registers.
 
Hi All,

I needed some time to play with this. Sorry for the late response. The serial settings - 9600 baud and 8-N-1 settings - are the identical on BOTH ends. There are no issues with serial link. As I suspected this is an addressing issue in the Acculink. I have made some progress and have been able to read some data from the meter. To poll "Watts, 3-Ph total" I enter the starting address as 9FC3. This was some advice given on another forum.

At least now I can seem to communicate with the Acculink.
 

Similar Topics

Good day Programmers I have a RSTi-EP CPE100 Standalone Controller from Emerson as well as a STXMBE001 (MODBUS TCP/IP) as a Modbus communication...
Replies
0
Views
639
Hey Guys, I am struggling to read data from a "JUMO" make controller using modbus RTU with MLX1400. The communication between the devices has...
Replies
18
Views
5,082
we use M580 which have an Modbus RTU port correct if iam wrong now should i have to read input data from ab micrologix through read var block and...
Replies
0
Views
1,862
To execute MODWR and MODRD instruction of Delta PLC, I need address of register in VLT 2800 but I cannot figure out. Can any body help me? I want...
Replies
7
Views
7,062
Hi, I've been struggling with this for the past two weeks now. As part of a bigger school project, I've been tasked with setting up several...
Replies
0
Views
3,797
Back
Top Bottom