I’m evaluating Ignition as an alternative to our current HMI software. Everything looks excellent, but I can’t seem to figure out the cleanest way to provide multiple language support for alarms. The alarm status table stuff is fine, but the messages themselves is where I’m stuck.
It appears to me that the best place to put a message is in the Display Path field because it shows up nicely in the native Alarm Status display object as well as the Alarm Status Table. However, there is no obvious way to make use of the Translations manager to facilitate changing the text in this field.
I see in another string of posts, that the intent is not to put user type data through the translation manager because we developers are responsible for the messages in the first place. OK. But, exporting the tags into XML does not give an easy format to hand over to the translators. They would have to sift through the file and translate 1 line out of every 8-10 lines. It also doesn’t allow for dynamic switching while on-site. (For instance, the customer machine is set up for Greek, but I don’t speak their language, so I can’t read the alarm messages while trying to help them troubleshoot)
I see that the Display Path can be set to an expression, so I would like to know what the easiest way to make use of it…
- A case statement would be very difficult to maintain because I would have to add the proper condition and translation for every alarm for every language.
- I could possibly tie the text string to a PLC register and use an indirect reference or program the PLC to copy the proper message set to the HMI-read registers. That’s possible, but it uses space in the PLC for no reason other than the HMI can’t handle it.
- The third possibility I see is to put the alarm messages into the SQL database and pull the proper description either directly from an alarm table or a stored procedure.
- I just found the function translate(stringKey). Could it be as simple as calling this function with an argument like “A001” and it returns a nice, full description? Where does the function get its translated text from?