Fairly new to ignition, so for a lot of things, I've figured out one of the many ways to achieve what I'm looking to do, but I have no idea if my methods are within the "best practices" or if they're ill-advised. Looking for some clarity, reasoning, and possible alternate methods for the following topics.
Background: I'm creating ignition projects that provide system overviews for conveyor systems. This primarily consists of multiple screens with conveyor layout shown with colored indication for conveyor status (idle, running forward, faulted, etc.), conveyor HOA status (Auto, Manual, Off), photoeye and other sensor status (blocked, clear, jammed, etc.). Conveyors and devices can be clicked to call popups for more detailed information as well as Manual controls of conveyors and devices. We use UDTs in the PLC for most things shown on the HMI (motor udt, photoeye udt, etc.) which contain tags for the statuses, manual control buttons, descriptions, etc. Example below
- My first question is in regards to tag creation in ignition. Instead of just browsing my PLC and pulling in the tags that I need and having them organized in folders in the ignition tag browser, I've made a UDT in ignition for each device in the PLC and I just instantiate that with the multi-instance wizard. Each having a parameter for PLCName (for if the system has multiple PLCs) and a parameter for the device's PLC tag name. Then, within the UDT definition, I use these parameters to build an OPC path and append the additional member tag designation and use that as the OPC item path for each piece of data I need to use in ignition. Example below:
My PLC UDTs have nested UDT members as well along with my ignition tags (e.g. I have an operator controls UDT that holds all HOA status and user control tags; my motor and solenoid and other controllable device UDTs have a member of type operator controls UDT.
With these nested UDTs, my tags get pretty large (although all the tags are used at one point or another whether it's on popups or for alarming purposes).
I think the way I'm doing this is fine except I seem to be overloading my OPC connection, which could be for multiple reasons and I'll touch on it more later.
One important note on the UDTs is that my tags for HMI pushbutton input are in a leased tag group that updates at 250ms when leased in order to get a quicker response time for button presses so the HMI doesn't feel laggy. More on this later.
- My Templates/views are another spot where I'm not sure if I'm going about things the proper way. My first projects were in vision and now I'm on my first perspective project. I have templates/views for each of my devices so I can just instantiate them (like a global object in FTView). The way I'm currently passing in data (which I believe may be ill-advised) is I created parameters of the UDT type o that device (e.g. photoeye template has parameter of type photoeye UDT). This is for ease of development to be able to drag and drop tags to create devices on the layout screens. I also have some popup views that I have UDT type parameters. I did run into issues doing this on the popup, so I made every popup have an input parameter of type xyzUDT and then have a custom property also of type xyzUDT. All of my UDTs include a member that holds the path to that tag, so the custom property UDT just has an indirect binding to the tag path member of the parameter UDT. Example below:
I'm afraid this passing of a whole UDT as a parameter to my layout device objects might be what is causing my overload. My visible piece of conveyor only really needs the status and HOA status to display properly. All the other tags in the UDT are really only useful once the popup is called. So, I think because every single conveyor and device on screen is leasing every tag in the UDT (most of which don't need leased until their popup is called), it's causing my overload issue, but I'm not sure of the best way to prevent that without a major overhaul to my templates/views.
Here is my current device connection status showing an overload of the 250ms group although I really shouldn't need anything leased that fast unless I'm on a popup or the main page with some buttons (which I'm not currently, I'm only viewing the page shown in my first picture).
Any and all input on any of these topics is greatly appreciated. Like I said, I'm learning a lot about ignition having done 2 vision projects and now my first perspective project, but I still need a lot of help to know when best practices. I don't know a ton about OPC servers, so keys to optimizing the connection would be very helpful. We're looking to put together a standard on our PLC side to allow easy development on the ignition side, so I'm trying not to get too far into that before figuring out the best approach.
Thanks