I know that S&F can be propogated to reference tags. But what about expression tags? Especially cases where your expression might consists of multiple MQTT Edge tags?
I quickly checked the documentation and saw MQTT Engine Tag Latching. Is that the main way to solve this?
Just to summarize with an example:
If I have two edge tags (tagA and tagB) and in the cloud I have an expression tagC, where the expression is tagA+ tagB.
If a the edge site is off for days or weeks and it comes back on and history gets forwarded from the edge, I would like my expression tagC to also backfill its history.
This is not possible today. Expression tags are evaluated on a periodic basis. Due to the speed at which MQTT store and forward occurs, most events will be missed by the expression tag. In addition, store and forward ensures order across any given single tag. But, it does not ensure flushing across Sparkplug Edge Nodes and Devices is synchronized. So, even tag latching will not help resolve this issue.
Thanks for the speedy reply. What you are saying makes a lot of sense.
1 - If my expression tag only looks at 1 edge tag I assume tag latching can help?
2 - Do you know of any creative ways clients have gotten around this limitation? Even if it means building their own module, external functions/processes?
Yes - this will work as for any given tag, all tag change events will arrive in order and processing can be controlled via latching to allow any necessary processes to run on the Engine side.
I don’t. It’s a complex problem, as it would require synchronization across potentially many distributed systems. It is something we could solve at least in part, but it would take a lot of time and likely potentially very significantly impact overall performance. There would be other pitfalls though. What if one Edge Node went offline but the others did not and some calculation required sync between a tag on the offline Edge Node and another that is online? Things get complicated quickly…
Is it possible for the calculation you require to be done at the Edge? Or, is it possible for you to retroactively look up history on the Engine side and do calculations based on data in the Ignition historian once it has all arrived?
Yeah I get you, would not make sense to try and manage changes across tags that can arrive in diffirent intervals. I am replacing a custom built system with Ignition and MQTT. One thing I like about the custom system is that it has the capability to create calculated tags. Works the same as an expression tag i.t.o realtime value. But when you query its history it calculates it on the fly. So it does not inherintly have its own history. So if one of the tags is missing that is used to calculate the calculated tag you will simply get the wrong history until that child tag backfills eventually.
I want to figure out a way to do that in ignition but I think that would require my development of a module or middleware between Ignition and the historian. But that is not really your concern since that is more in the domain of Ignition itself