Modbus Communication Address For Hydrovar HVL 4.022 VFD

Hi,

We are using two Hydrovar VFDs (Model - HVL44.022-A0010) for a booster system. What I need is to give below pump status
1. Pump Run,
2. Stop,
3. Trip and
4. Actual (running) frequency to the BMS system. (We will not be doing the BMS part.)

But when I connect the vfd to pc via rs485 converter and check the inputs by modscan, it's showing that
"modbus exception response from slave device" and sometimes "MODBUS Message TIME-OUT"

I am new to this communication field. What is the issue here?

This is the modbus communication manual for the VFD
https://www.xylem.com/siteassets/brand/xylem/hydrovar/hvl_modbus_manual_rev.bed01_2018_en-us.pdf


Screenshot (13).pngScreenshot (12).png
 
An exception response means that the device is responding with an error code. However, the fact that the device is responding (even though it is an exception code) does mean that your communication settings (baud rate, parity, address, etc.) are correct.

You are probably accessing registers that do not exist on the unit. Review the register list in the Modbus documentation you linked. It appears the first register (for STOP/START) is register 49. Try entering 49 for the Address in ModScan and enter 1 for the Length. If that works, you can try increasing the Length to 3 (as the register list defines registers 49 - 51). If that works, you can move on trying to increase the length further, however, this may or may not work as the next defined register after 51 is 55 (i.e. registers 52 - 54 are not defined). Some Modbus slave devices allow reading undefined registers, while others will return an exception response if any undefined registers are included in the range of registers requested.
 
Also some manufacturers list the modbus addresses from 1 to nnn but registers start at 0, it's not the first time I've had to knock one off the register address they quoted to read the data. You may also have to swap the word order or the byte order or both depending on whether the device and software use big endian or little endian format. Often the bytes are correct for a single 16 bit register value but the words are reversed for a double word float value over two registers. So if the value doesn't make sense once you get it reading, try a word swap first.
 
In the Modbus manual pay attention to the datum type column. U defines unsigned integers, S defines signed integer, 16 are 16 bit, 32 are 32 bit, etc. In your second picture the Modbus Protocol Selections shows an option for Daniel/Enron, this is 32 bit. Standard is 16 bit. In the manual address 0x006B is a U32 (unsigned 32 bit) then the next address listed 0x006D. 0x006C is skipped in the manual because its the second 16 bit packet of the 32 bit 0x006B U32. 0x006B would need to be read as Daniel/Enron. In your first image you have a length of 100 addresses. You may be querying multiple data types (U16, S16, U32's) across that address length. If they are all function code 03 I would imagine you would get something even though some would be nonsense if they were intended to be read as 32 bit.

Also as @Subsea7 mentions there is sometime a need to offset the address. IE if you want to read holding register 49 sometimes you need to start reading holding register 48. Do this with a length of 1 to confirm your need address offset as a sanity check then expand to more registers. For example (not saying this is a Greek application) in the device you have the language set to Greek, when you read holding register 57 for a length of 1 do you get 24? Pick a single holding register to sanity check your connection then work out while paying attention to the datum type.
 
Top