Hello there, kind developer! This post will be kinda long, so you might want to refill that coffee.
First, a little about my background so you have an idea what my knowledge level is:
I’ve been a controls engineer for about 30 years. In that time I’ve programmed mostly Allen Bradley ladder logic stuff. My most recent experience is all in automotive manufacturing, at the plant level providing support to skill trades on Control Logix and Fanuc robots. In these roles, I’m mostly using whatever code the vendors and corporate developed and troubleshooting and improving that ‘as installed’ code. I do have some light VB.NET and web development in my past, mostly as a hobby.
I recently started a new job where I have to, among other things, develop a SCADA/MES system for my company’s foray into automation. We currently have 2 machines installed, both with a Control Logix/Fanuc architecture that I need to get this SCADA system working with ASAP. I chose Ignition based on what I’ve read online to be that SCADA system. My reasoning was that I can get it working for free before I pay for anything, I can only pay for what I need as I scale up, and it looked pretty easy to work with… Fast forward to actually trying to get something going and I realize that I’m a bit out of my depth. I went through the University. Then started reading around the forum, and not really finding the answers definitively, I decided to reach out and expose my ignorance to you fine people.
My initial approach to the SCADA is to make it similar to ones I’ve used in the past. By used I mean as a user. I never had access to the backend. Anyway, I was figuring I’d do a dashboard in perspective with nav buttons on the left side to select plants(Only one at the moment) and a main window with an overview of all the machines on the floor. (Again, only two at the moment) This overview would be something simple, and exactly the same for each machine. So I made a view with 4 labels in it for machine name, status(auto,manual, blocked,staved and running), faults, and part name. My goal would be then to have the first three navigate you to a more detailed list, think like a fault history screen on a PanelView application, and the last one take you to a history of the parts that have been run, with maybe cycle time and some other OEE stuff. Not there yet, but I have to get there eventually. Anyway, I digress. So I slapped some labels on to a view and realize pretty quickly my first problem: I can’t make an Ignition tag that can look at multiple other tags to get a value. I’m thinking in my head like using a DINT in ControlLogix that has a value based on what bits of that DINT were on. Anyway, forum search forum search and I find a way to do that. YAY me! I can read! So the status thing works now. I also search around the forums to find a way to pass a custom property to give me the tag providers name so that I can actually use this template. YAY again, I’m on a roll! Then I get to the fault label and quickly hit a brick wall. All the faults in the PLC are A) in DINTS and B)Defined by station. So you have like Cell.Faults[0] - [9], Servo1.Faults[0], etc. OK! I’ll just make ignition tags for the relevant DINTS and…
Wait, I can’t see the bits in the DINTS! Forum read, Forum read, Forum read… I can’t see the bits. From what I can gather from the forum, I have to make a tag for each bit. Well that sucks. And how does logging work? There isn’t anything polling these tags even if I create them. Maybe I have to configure EACH TAG to log then? And what about the description? How do I get this export of the faults that I made from the Panelview program into ignition so I don’t have to type all this stuff in?
BOOM. Head explodes. Close the computer. Come back tomorrow. Breath…
So here I am, hoping someone will pity me enough to help me out with this. A big long list of questions is going to take someone a long time to answer, and I don’t want to monopolize your time, nice person who wants to help. So I’ll start with maybe just a couple and hope for the best.
-
The deal with getting my faults into Ignition and logged into the database so I can use them for reports and tables on my detail page. I’m thinking that I could write a value change script on the DINT value(Not that I know how to write a script in here) Something along the lines of a FOR loop maybe that has an index that can then do a getbit(?) query on each bit in the DINT and maybe return which bit is active? But then I’d have to have a way to A) store these descriptions that I have in this CSV and look them up based on which DINT and which BIT was returned. Then I’m wondering what happens if I have more than one BIT on? I need to log all the active bits to the database with the relevant description, but for my label on the overview screen maybe I only want to return one bit so I can display that fault message(again, gotta get that description from somewhere) and make that label display the first fault it finds.
-
Do I have to manually create each bit in Ignition to log my faults? Is that the easiest way? Any way to import that CSV I exported from the PanelView to create the tags? I probably have to make a standard tag map in the PLC so I can use a standard tag path for each instance of the template. No way to map this in Ignition?
Anyway, enough for now. I’ve taken enough of your time. Thanks for reading if you got to the bottom. And thank you even more if you’re willing to help!
Mike