Exchanging alarm states with modbus

Hello,

I am currently working on a data monitoring for inverters, and I am trying to handle alarms from the inverter. But it doesn't seem quite clear how it works. On my inverter, there are 3 registers called "Alarm x" (x going from 1 to 3) and they each have their own register address. This makes it obvious that some alarm are stored in these registers. But how do I proceed to retrieve a change in the alarm state when i need to poll the specific register. I couldn't just poll these address every second because that would just overload my communication?
I poll my inverter every 10 minutes for data on the production, but if an alarm comes on, i will then need to wait 10 minutes untill I know about it? Do you have any tips on how to proceed?

Thanks in advance for your help!
 
Hello,

I am currently working on a data monitoring for inverters, and I am trying to handle alarms from the inverter. But it doesn't seem quite clear how it works. On my inverter, there are 3 registers called "Alarm x" (x going from 1 to 3) and they each have their own register address. This makes it obvious that some alarm are stored in these registers. But how do I proceed to retrieve a change in the alarm state when i need to poll the specific register. I couldn't just poll these address every second because that would just overload my communication?
I poll my inverter every 10 minutes for data on the production, but if an alarm comes on, i will then need to wait 10 minutes untill I know about it? Do you have any tips on how to proceed?

Thanks in advance for your help!
Hello..
Can you tell us what Is OEM type model of the inverter.

They should be kind of parameters to be settled.. Surely.. But we need more datas to give you answer..
 
Hello..
Can you tell us what Is OEM type model of the inverter.

They should be kind of parameters to be settled.. Surely.. But we need more datas to give you answer..
Well there are multiple models and manufacturers that I work with. Most of them seem to have the same way of functionning. But for example i work with a Huawei SUN2000 22KTL. 3 register that I was talking about are:
- 32008
- 32009
- 32010
which contain the "alarm" registers.
 
You have identified an inherent weakness of the Modbus protocol.

Modbus is a master/client-slave/server protocol and a slave/server is silent unless spoken to.

Inverter/drives are typically a Modbus slave/server, so the slave/server has no means of alerting the master of an alarm until it is polled for data in an alarm register.

So, yes, you have to poll the alarm registers as often as the master/client needs to be aware of the alarm status.
 
ridge poller slave103aholding [ start=32009, length=1, refresh=10000, type="holding" ]{

Thing data Alarm_2bit0 [ readStart="32009.0", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit1 [ readStart="32009.1", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit2 [ readStart="32009.2", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit3 [ readStart="32009.3", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit4 [ readStart="32009.4", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit5 [ readStart="32009.5", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit6 [ readStart="32009.6", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit7 [ readStart="32009.7", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit8 [ readStart="32009.8", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit9 [ readStart="32009.9", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit10 [ readStart="32009.10", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit11 [ readStart="32009.11", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit12 [ readStart="32009.12", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit13 [ readStart="32009.13", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit14 [ readStart="32009.14", readValueType="bit",updateUnchangedValuesEveryMillis="5000000" ]
Thing data Alarm_2bit15 [ readStart="32009.15", r
 
The 3x alarms registers are well explained/described on this document!

Do not hesitate to share your feedback!
Hey thanks for sharing the document, I have indeed created a little config file listing all the alarm codes and their meaning. As I work with python scripts, the speed isn't very high and getting the alarm states can be a real hustle! In fact I poll the inverter constantly and look for a change in the values of alarm 1/2/3. If there is a change I can look up the meaning. I could in fact try and create like you suggested, a request for each bit, but it seems very time consuming for the modbus communication.
Thanks for the suggestion and help!
 
Hey thanks for sharing the document, I have indeed created a little config file listing all the alarm codes and their meaning. As I work with python scripts, the speed isn't very high and getting the alarm states can be a real hustle! In fact I poll the inverter constantly and look for a change in the values of alarm 1/2/3. If there is a change I can look up the meaning. I could in fact try and create like you suggested, a request for each bit, but it seems very time consuming for the modbus communication.
Thanks for the suggestion and help!
Hey Thanks for your inputs !

I strongly suggest you to have a search on a Huawei Sun2000 users forum ..I have seen a very interesting one ...discussing on the same thema that you have...

Will share the link here soonly...

Any time!

James
 
Can the original poster provide a feedback thx
Hey!
There isn't much that i could do better. My script are now polling the inverters constantly and as the forum suggested, every bit in the 16 bit registers 32008, 32009, 32010 have a different alarm meaning. So, I decided to poll the whole value inside the register and check if the value "as a whole" changed. If the value did change, that means one bit changed state. This is where the verification is done. I don't understand the use in polling each bit one by one... asking for the whole value as a 16 bit number is way faster.
 
Top