Modbus device wiring

Hi all,
I come across wiring issue related to modbus. I have PRO380-Mod energy meeter which is capable of measuring 3 phases and other various aspects of energy consumption for reasonable price. Communication interface is based on modbus, however manufacturer did not implement “full modbus specification”:

When connecting the meter through a serial converter (RS485) for testing, please be aware that because of not implementing the complete Modbus infrastructure, there will be a need to put an additional resistor (120 ohms/0.25 watts) across the terminals (22 & 23) on the meter side.

I tried to place 100 ohms resistor, however I see that RX diode on serial adapter does not blink. It does blink few times when I plug USB cable into it, but when I attempt to start modbus scanner it doesn’t show any activity.

From this place I would like to ask you what are your experiences with devices such above which requires extra resistors to communicate. I bought a dedicated cable for modbus communication which does have 120 ohm resistance (I’ve heard that cat5 cable requires different resistors). Will whole thing work with 120 ohm resistor? Have you ever tried to use potentiometers to adjust modbus lanes?

Cheers,
Lukasz

Don’t know about the PRO380, but using a SAIA PCD ALE3D5FD10C2A00 requires also a resistor to make it an end point of the bus. Could it be that the required resistor is dependend on the cable length and around 100 to 300 ohms? Maybe you could try a 300 ohms one. There should not be any risk of damages with a 300 ohms one.
In my personal installation there is a cat5e cable with 7 meters and a 220 ohms resistor on the SAIA energy meter. On the modbus are only two clients with the mentioned cable. No issues since 2 years.
The installation is very similar to the one described here:
https://www.schlocke.de/bessere-eigenstrom-nutzung/
Maybe you’ll find some input there.

Thanks for feedback. I ordered last week 120 ohm resistors from near by online store to see if this will enable communication. Neither 100 nor 300 ohm resistor worked before with ethernet (cat5) cable for me. Your resistor seems to be within this range.

Will check new resistors and post update here.

Best regards,
Lukasz

What you are discussing is not really related to MODBUS as such, but rather to the use of RS485 as a serial communication channel (in this case for MODBUS RTU communication).

Furthermore, the 120 Ohm is a nominal value choosen for the specifications as discussed here:

This impedance is denoted in ohms and typically ranges from 100Ω to 150Ω for twisted-pair cables. The writers of the RS-485 standard choose 120Ω as the nominal characteristic impedance; therefore, to match this impedance the termination resistors also have a default value of 120Ω.

https://e2e.ti.com/blogs_/b/analogwire/archive/2016/07/28/rs-485-basics-when-termination-is-necessary-and-how-to-do-it-properly

So, it is not really dependent on the lenght of the cable but rather the “type” of cable-

Anyway, in addition to getting your termination resistor right, you also need to make usre that you have a device in your RS485 network that “drive the lines”, i.e. some kind of active component that will “inject” power.

You have not stated what type of adpater you are using, but it could be that you need another type.

I started with ET-485 module to bridge modbus-rtu to modbus-tcp, however I couldn’t get communication between power meeter and bridge. Britge itself can act as master and it does have built in terminator.
Because communication didn’t work I bought RS485 coverter based on FT232 with built it 120 ohm terminator to debug communication with PC before running into troubles with network layers. I managed to get data over modbus from ET-485 using my converter so I know that data exchange between these two elements works as expected.

I can try to wire ET-485 to supply current to lanes and then see if PRO380-Mod is acting properly with my usb dongle.

Cheers,
Lukasz

Issue turned out to be really silly and I am embarassed to say you what I did wrong. Modbus register list from PRO380 manufacturer contains register addresses in hex form. I was entering it all the time as they would be decimal.
It come to me that I was reading data wrong when I started to trace everything over usb. I started from scratch today night with commix using raw hex input as suggested in meeter documentation to see if low level communication works. I had to do it because ineprometering software was constantly timing out and giving no answers.

Suddently with hex inputs I got RX blinking. There is one additional detail, which is not expressed in documentation - but I think I’ve found in chipkin docs describing their modbus gateway logic - when requested registrar is missing meeter simply does not return any answer letting request to time out instead of returning exception. Combination of these two factors - wrong registry addresses and no answers from device lead me to false perception that cabling is wrong. It turns out that it works with 120 ohm resistors.

Thank you very much for valuable inputs and advices on tracing this painful issue!

Thanks for the final info. Do you know if it makes a difference using 100, 120, 300 ohms as termination impedance? (I would assume not)

I didnt try old resistors because when recommended ones didnt work I started digging in other places. I guess bigger resistors would work just fine with cat5 cable.

The resistor values are not critical. For just a few metres of cabling run and a modest baud rate like 9600, you will usually get away with using no resistors at all. Particularly just to try things out and get lights twinkling.

For higher line baud rate and for longer cable runs, the resistors get more important. The correct setup is a 120R terminator at each end of the complete run.
But as already said, many adaptors already incorporate a built in 120R terminator. One reason why you can often get away with apparently “none”.

I’ve had just as much trouble with biasing, where larger value resistors are connected to supply volts and ground to hold the wire pair at a voltage representing an idle line. Rather than just floating randomly.
Again, adaptors should include this biasing automatically, but I wouldn’t entirely count on it.

I think you made the PRO380 working for openHAB. Can you please send the openHAB configuration. Please also let us know with which converter board and resistors you made the connection working.

Thank you very much!

I used a basic RS485/usb adapter. It went fine without a terminator resistor. Same thing for meter - if you have short cable its gonna work without resistors. Once I confirmed that device works I switched to ethernet adapter (ET485).

For configuration I have to get it from my computer. I will share it using separate post.

My meter is from 2017 so its quite old. I noticed that new docs from Inepro have more “screens” which are unavailable on my devices. I asked manufacturer is it possible to update firmware - it is not.
Additional note - their software is dedicated to be used with optic head which you can purchase separatelly.

Thanks for the info. It would be great if you could share your configuration. Which brand is your ET485 ethernet adapter, I’m thinking about the Elfin EE11 adapter.

It is Novatek Electro, it was cheapest stuff I’ve found back then. It did cost fraction of the typical industrial equipment.

Anyhow - the inepro modbus protocol implementation is quite annoying. You can try calling read requests over 255 possible modbus slave ids to find slave id. Yet my device wouldn’t answer if register didn’t match.

Here is list of registers PRO380 Registers. I’ve extracted it from this: http://www.promac.com.pl/wp-content/uploads/2018/01/PRO380-Modbus-registers-V1.18.pdf

I marked registers with colors if they can be scan using continuous read. Most of phase related readings is possible to get with single poll.
My configuration is here: openHAB configuration for ineprometering PRO380-mod three phase meter. · GitHub.

What do you mean that slave id is annoying. I think you are using slave id 1.

Bridge modbus:tcp:pro380 [ host=“192.168.2.13”, port=502, id=1 ]

I will start with a RS485 USB adapter. I think this should then be the correct configuration.

Bridge modbus:serial:pro380 [port="/dev/ttyUSB0", id=1, baud=9600, stopBits=“1.0”, parity=“none”, dataBits=8, encoding=“rtu”]

Yes, I do use slave with id 1. However making this configuration did cost me a lot of tinkering since device version I got did not answer with any message if register didn’t match. Modbus spec have very few error codes but pro380 never returned to me any of these.

My tip - try reading registers one by one and then try grouping them together. If you make a read request spanning from one range to another you will get timeout.

How long is your modbus cable? Do you think a 2m cable will work without resistor at the meter? With the mounted cover of the PRO380 I think it is almost impossible to add an additional resistor. The distance between the modbus wire and the screw is already pretty less anyway.

My cable is about 2m length. The USB adapter I used have terminating resistor. I did test if resistor on the meter side does any difference and it did not.
I am not an RS485 expert, but my case shows that short distance can live without terminator. I believe @george.erhan could give more insight in that area as finding proper resistor for RS485 termination at some point of time was an art. :wink: