MODBUS Libraries

Hi all,

I've been using Industruino implementing Modbus RTU in a couple of projects. Everythings work fine. But now I'm trying to use Modbus in a new application and I have not succeded until now.

I guess that the problem could be the offset of the registers in the slave, but is not possible for me to check it. I us the SimpleModbusMaster Library, wich has no error management. I found another library simplemodbusng that has the error management, but that it doesn´t allow me to change Serial to Serial1. I've tryied to edit this second library to include Srialport selection, but everything was a mess (I'm not a programmer) and the scketch is not compiling.

 

The question: do you know any library that include error managment for RTU and support Serial1 choice?

I'm specially interested in wrong adress, wrong id and wrong data type.

 

Thanks a lot in advance.

Joaquín Murillo
Joaquín Murillo
17
| 0 0 0
Asked on 6/14/19, 5:26 PM
0
vote
305 Views

Finally I could manage to modify the library to store the frame[x] values in the register matrix that, when an error is returned, contain the type of error (together with more information). So I could ensure that the modbus Id I was using was ok. 

Now my problem is different. In this project I read the modbus registers of a Fronius PV Inverter in order to manage the excess energy for Off-grid PV installations. This is something that I've been doing for a long time and everything is ok. Now I want to implement another device, which is a Fronius Energy Meter in a specific point of the electricity installation (this is the device I had problems with), in order to have more details of the energy flow. This Fronius Meter is fully compatible with the Fronius Inverter when the inverter is the Master (I have installed some of these systems and they communicate via Modbus RTU with no problem). But in my case both, Fronius Meter and Fronius Inverter must be slaves and Industruino the Master. 

To convert the paremeter of the inverter I use the "union Pun {float ModbusFloat; uint32_t ModbusInt;}; "+"union Pun pun;"+    "pun.ModbusInt = ((uint32_t)regs[0] << 16) | regs[1];Power = pun.ModbusFloat;" method, and everything is great. But doing the same with the Fronius Meter is not working (For instance, for real Power = 1470 W I get reg[0] =2 and reg[1]=1676, whic is a calculated P<0.01 W). I'm not sure if the problem could be that the registers from the Smart Meter could be signed integer while the registers from the Inverter are unsigned integer... not sure.

The rest of thigs are great. With Industruino and Blynk I have now a real nice device, even with a (private by now) skill for Alexa. It's great Industruino and all its capacities.

Joaquín Murillo
Joaquín Murillo
17
| 0 0 0
Answered on 6/18/19, 5:27 PM
0
vote

thanks for the feedback. we have some examples for modbus register conversion at https://industruino.com/blog/our-news-1/post/modbus-tips-for-industruino-26

Tom
on 6/19/19, 11:07 PM

Hi again, Tom,

 

I tried that method with a 1286 Industruino under 1.6.5 IDE and everything was ok. But when testing in my other industruinos with 1.8.5 IDE release I had compilation issues. I solved it by doing the next thing:

 

Before setup:

union Pot {long ModbusL; uint16_t Modbusi[2];}; 

 

In loop:

    union Pot pot;

    PotenciaConsumida = 0;

    pot.Modbusi[0] = regs[1];

    pot.Modbusi[1] = regs[0];

    PotenciaConsumida = (pot.ModbusL)/100;

 

 

Maybe you could test it and update your post about Modbus tips.

 

 

Best regards

 

 

Joaquín Murillo

Telf.: (+34) 661456149

jmurillo@krentec.com

www.krentec.com

 

From: Tom <tomtobback@gmail.com>
Sent: jueves, 20 de junio de 2019 1:07
To: Joaquín Murillo <jmurillo@krentec.com>
Subject: Re: MODBUS Libraries (786)

 

thanks for the feedback. we have some examples for modbus register conversion at https://industruino.com/blog/our-news-1/post/modbus-tips-for-industruino-26

--
Tom
Sent by Industruino using Odoo about Forum Post MODBUS Libraries (786)

Joaquín Murillo
on 6/20/19, 11:05 AM

Hi, indeed that is a rather simple library as the name suggests, but there are ways to diagnose errors by checking the attributes of the packet struct. Have a look at SimpleModbusMaster.h to see the attributes, maybe that already helps to find .

connection, retries, failed_requests, exception_errors

This should enable you to at least find out if you are using the correct Slave ID.

For slave registers, if you are using function READ_HOLDING_REGISTERS and the slave doc says e.g. register 40101 then that should be register 100 in the SimpleModbusMaster modbus_construct (common offset is 40001 as far as i understand)

Tom
Tom
5450
| 0 0 1
Answered on 6/15/19, 2:15 AM
0
vote

Finally I could manage to modify the library to store the frame[x] values in the register matrix that, when an error is returned, contain the type of error (together with more information). So I could ensure that the modbus Id I was using was ok. Now my problem is different. In this project I read the modbus registers of a Fronius PV Inverter in order to manage the excess energy for Off-grid PV installations. This is something that I've been doing for a long time and everything is ok. Now I want to implement another device, which is a Fronius Energy Meter in a specific point of the electricity installation (this is the device I had problems with), in order to have more details of the energy flow. This Fronius Meter is fully compatible with the Fronius Inverter when the inverter is the Master (I have installed some of these systems and they communicate via Modbus RTU with no problem). But in my case both, Fronius Meter and Fronius Inverter must be slaves and Industruino the Master. To convert the paremeter of the inverter I use the "union Pun {float ModbusFloat; uint32_t ModbusInt;}; "+"union Pun pun;"+ "pun.ModbusInt = ((uint32_t)regs[0]

Joaquín Murillo
on 6/19/19, 3:30 PM

Your answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

Ask a Question

Keep Informed

About This Forum

This community is for professionals and enthusiasts of our products and services.

Read Guidelines

Question tools

56 follower(s)

Stats

Asked: 6/14/19, 5:26 PM
Seen: 305 times
Last updated: 6/18/19, 5:27 PM