I’m currently accessing the OPC server tags associated with an Allen-Bradley Logix Driver device and a Legacy Allen-Bradley CompactLogix device. However, the tagpaths associated with these devices all already have official variable names such as outlet_temp, outlet_amps, etc as opposed to names like I:0/1 or O:0/0 that can give an indication of where the wiring is located on certain ports in the PLC. I’m wondering if there’s any way to access the locations of the wiring to the ports associated with the PLC on Ignition that does not involve the tag path.
If you are referring to the documentation entries in the PLC code for those item addresses, then no, they aren’t exposed by Allen-Bradley’s Data Access protocol. In all but the newest firmware, they aren’t even saved in PLC memory. If you are referring to Logix Alias Tags, then they should show up in the base list of items at controller global scope.
I think that I’m referring to Logix Alias Tags. The device I imported looks like this in the OPC server:
How can I find the physical addresses that the tags are aliased to? I want to be able to label certain inputs directly on the PLC indicating their purpose(as in I:0/0 used for temp, I:1/3 used for pressure, etc.). I noticed that for the Allen-Bradley MicroLogix driver tags, the tags look like so:
Is that just a different model? The ideal scenario would be to find each of the direct/physical addresses(i think that’s the term) for all of the aliased tags, but I am not sure how to do so or if it’s possible from Ignition. It seems like some of this information is perhaps stored in the Local:1:I, etc. folders, but I’m still missing a big chunk of the tags.
The information linking alias tags to the actual address is viewable on the “Edit” tab of your Controller Tags view within RSLogix 5000. The information is also available in a CSV tag export.
I find overuse of alias tags to be the biggest evil encountered in the Logix ecosystem. It means the PLC coder failed to create tags and structures with intelligible names of their own. And its no excuse to use them for I/O points, as those must be buffered for reliable operation, and buffering into a structured tag is trivial. Sadly, the Logix tool that converts legacy processor code spits out thousands of aliases just to maintain the “look” of the original octal addresses. Rockwell really screwed up with this, as the resulting “aliases are good” mindset inhibits the full use the (awesome) Logix platform.
This is all I see in a CSV tag export assuming that I did it correctly.
I’m assuming that I have to pay to obtain any sort of software that uses RSLogix 5000 and that there is no other way to access the actual address within Ignition?
A CSV tag export from RSLogix, not Ignition. I assumed you had that. Sorry, but Ignition has no access to that information. You’re going to pay through the nose.
How reasonably confident can I be that RSLogix 5000 will be compatible with the Legacy Allen-Bradley CompactLogix and the Allen-Bradley Logix Driver devices on Ignition?
Also, you imply from your “import” comment that you are dragging your entire controller’s content from the OPC Browser to the Tag Browser. That’s really bad – it will absolutely crush your communications performance. Only drag and drop the OPC items you need, and give your folders and tags names in the Tag Browser that make them easy to work with.
They are orthogonal. Ignition is a SCADA package with OPC drivers. RSLogix5000 is the tool used to configure and program and deploy Logix processors. The other end of the link, so to speak. Among other things, a PLC coder defines what is visible to any OPC driver, including Ignition, with the tag names and security configuration they set up in the PLC.
No. One of the benefits of named tags in RSLogix 5000 is it decouples physical I/O from program logic; you can change the physical input/output point without it affecting the PLC logic or the HMI connection, assuming good coding practices were used (physical I/O mapped to named tags and logic + HMI reference only named tags).
I can think of two ways to display physical I/O points in Ignition, though I don’t particularly recommend either:
- Create a table linking tag names to physical I/O addresses and then look-up physical I/O addresses from that table for display. The table will need to be kept up-to-date with any wiring/name changes. This method would be reasonable if you document physical I/O in something like Excel to start with. I prefer wiring drawings and would not want to duplicate the information into a table as that would mean one more thing to update when changes are made which equals one more place for errors to be introduced.
- Name your tags in RSLogix 5000 to match physical I/O addresses. Please don’t do this! It removes much of the benefit of moving from RSLogix 500 to 5000.
For your first method, where/how are you getting the physical I/O addresses in Ignition? Additionally, how are you linking the tag names to physical I/O addresses?
Typing or more likely copy and paste. You’d look this up in RSLogix 5000 (you need the program) or based on wiring drawings or I/O list.
By putting them on the same row in the table. This is all manual work, which is one of the reasons I don’t recommend it. However, if you already keep an I/O list (rather than I/O drawings), it may not be too painful. A simplified version of what I might do if using the first method:
- Create a dataset tag
- Link dataset tag to a table
- Create two columns in dataset “TagPath”, and “Physical Address”
- Copy dataset to clipboard (from dataset editor in table), paste it into preferred text editor and add lines for every physical I/O point and associated Ignition tag path that you want to display. Then paste it back into the dataset. If you already have this information in an Excel I/O list, it would be easiest to format it appropriately there and use scripting to read the values in to your Ignition dataset.
- When you want to display a physical I/O point, look it up from your dataset tag via scripting (find row with tag path you’re looking for and return value in address column from that row).