First post here and very new to Ignition so go easy fellas.
What I am trying to achieve:
I have created over 320 BTD mappings in Logix Designer to collate boolean values containing machine statuses and store them within DINTs whose sole purpose is to provide indication for graphics within Perspective.
These mappings are spread across 6 routines; one for each manufacturing area. My goal is to prevent routines from scanning unless the data within them is being 'requested' by Ignition.
My plan is to have 6 tags within Ignition that can be set/unset based on whether their respective pages are being viewed. Is this doable and if so, can you please point me in the right direction.
There always seems to be more than one way to skin a cat in Ignition so if any of you have a more eloquent solution please do share. Another idea I had was creating 6 identical tag groups with different naming prefixes and using this to somehow trigger the same outcome.
What do you want to happen when you have six users, each looking at one of those areas? Does having all of them scanning kill your PLC? If that doesn't kill your PLC, why bother making their execution conditional?
Is there a reason the boolean values cannot be polled where they are? Share more information about your data structures.
If six users are viewing six different manufacturing zones then all six routines should be scanned. It isn't an issue regarding capacity or scan times, moreso trying to put something in place that feels like it would be best practice for this particular scenario. We will probably hit a limit on ethernet nodes before our standard capacity becomes a problem, and our MainTask scan/interval times are 3.6ms and 10ms respectively.
My approach here is simply: if it isn't being requested, why scan it in the first place?
As for the bool values, this is the situation:
Two separate INT datatypes using bits as bool values e.g. running, fault, etc, each only uses 4 bits of the 16bit INT.
6 unique boolean tags, so another 6 bits.
My thinking is that, combining all of these together within one DINT and then reading this within ignition will make comms much more efficient instead of pulling chunks of data from here and there.
edit: #7b: Consolidate scattered tag instances into arrays or nest them in structures. The fundamental unit of optimization when polling is the tag. Multiple items won’t be in consecutive memory locations, and therefore be retrievable together, unless they are part of the same tag. If you must, you can use aliases in the PLC to retain the prior logical structure, but access from Ignition via the consolidated tag(s).
Basically explains why I am consolidating these scattered tags into a DINT
Variable scan time based on user conditions is a recipe for disaster in real-time systems. Just scan unconditionally. Really. In particular, it will prevent some dumb-[expletive] in future from adding something to the PLC that will max it out in production.
Yes, this is true. It would be even better if you made all of these DINTs part of an array. Then Ignition could read them all in a single block.
If the data involved is already in UDTs, though, you might have better overall results from just grabbing all the source UDT data at a single pace.
(It doesn't sound like enough data to be a driver bottleneck.)
I think that I'll heed your advice here and avoid the idea entirely, thanks for your input.
Yes, this is true. It would be even better if you made all of these DINTs part of an array. Then Ignition could read them all in a single block.
I really like this. It means some monotonous repetition of some recently completed work but it lays the foundations well.
I am a maintenance engineer that, within the past two years, have started pushing more into controls and automation. I am learning something new every day and it's people like you that really benefit people like me, much appreciated.