Red Lion - Faceplates

ASF

Lifetime Supporting Member
Join Date
Jun 2012
Location
Australia
Posts
3,907
Hi all,


I've dabbled with Red Lion HMI's in the past but I'm now about to use one in a larger scale application for the first time. Hoping some of the Red Lion gurus can point me in the right direction on something...


One thing I like about FTView is the ability to create a generic faceplate for things like drive controls or valve controls. I can either do it using global objects, or just a popup which I call with a parameter file to pick the correct instance. For example, I have a valve UDT in the PLC, which has elements like Valve.OpenPB, Valve.ClosePB, and so on. My valve control global object/popup just has an Open PB addressed to #1.OpenPB, a Close PB addressed to #1.ClosePB, and so on. Then when I call the global object/popup, I point it to the particular valve UDT I'm interested in, and it automatically assigns the Open PB to Valve_I_Just_Called.OpenPB, the Close PB to Valve_I_Just_Called.ClosePB and so on. I only have to build one object/display, and I can use it for as many valves as I want.


I'm certain that Red Lion can do something similar to achieve the same end, but I'm just not sure what the most efficient "Red Lion" way of doing it is. Can anyone point me in the direction I should be looking, or give examples of how you've done it in the past?


Using Red Lion Graphite HMI with AB 5370 Compact Logix
 
Still a beginner here so can't say which is the most efficient:

"create a generic faceplate" - you can have as many screens as you like set as backgrounds for other screens. Create a Master Slide, then right click a screen and in the properties you set a 'Master Slide'. Haven't tried it but I can't think of a reason that the buttons couldn't be indirectly referenced depending on the foreground. Crimson screens don't have a number reference that you can access, but you can use code that changes a Tag value when a screen is displayed, so you get there in the end.

"or just a popup which I call with a parameter file" - there are various forms of PopUp, you would probably need to call it via a small piece of coding to pass parameters. What I mean by that is rather than create an 'Action' that calls the PopUp, I would have the 'Action' call a 'Program' that would pass the parameters and open the PopUp. If you need a PopUp that requires a response in a 'Program' you use a Modal version. Haven't used it yet but there is also a 'ShowMenu' PopUp.

This is one of my frustrations with RedLion and Crimson, it is packed with features but the Manuals give little clue as what it can do. You end up having to contact Support to solve something that many others must have had to solve.

The Program facility is sort of based on the 'C' language but with its own quirks, you can get a lot done with it.

If you want Recipes you will have to write your own code, or modify a sample that Support will send you or use mine once I have finished it :)

The standard Users security system lacks the facility to add Users runtime and if you give someone access to modify passwords they have access to all users. Again you can write your own or again use mine once I have finished it :)


On YouTube let the Wazoo be your guide, he at least tackles some of the slightly more complex stuff where RedLions videos tend to stick to the basics.
 
Last edited:
The closest thing you will probably find is widgets. It took me a long time to wrap my head around how they work, but now i use them a lot. I need to make a video explanation because just writing one out probably would be very lengthy and still may not be good enough.

Basically a widget is a form of indirection that allows you to use indirection for a group of objects. You can use what they call "folder binding" so that when you get your widget created, and use the same names as tags for your data within the widget, you can assign a folder that contains tags with those names and it will instantly assign the tags from the folder to the data within the widget.

Once you build a widget, it is still not a global object. A change to one widget will not affect the others. This is a godo thing and also a bad thing. On the bright side, it is really easy and fast to modify a widget and then delete all the other instances, duplicate the new one, re-assign the folder. That is unless there are more than about a dozen of them.

The only method I have used to successfully make what is in effect a global object is by using arrays with pointers. This doesn't always match up well with UDTs or other PLC data arrangements that may already exist. I recently attempted to use an array of UDTs, to make quick work of some things in Crimson, and that did not work. I do not believe Crimson supports arrays of UDTs, so I fell back to using Widgets to get my work done.
 
Once you build a widget, it is still not a global object. A change to one widget will not affect the others. This is a godo thing and also a bad thing. On the bright side, it is really easy and fast to modify a widget and then delete all the other instances, duplicate the new one, re-assign the folder. That is unless there are more than about a dozen of them.

This is a maddening feature of Crimson. I asked them about adding proper global objects several years ago and the response was that it was a feature that nobody wanted.
 
The closest thing you will probably find is widgets. It took me a long time to wrap my head around how they work, but now i use them a lot. I need to make a video explanation because just writing one out probably would be very lengthy and still may not be good enough.

Basically a widget is a form of indirection that allows you to use indirection for a group of objects. You can use what they call "folder binding" so that when you get your widget created, and use the same names as tags for your data within the widget, you can assign a folder that contains tags with those names and it will instantly assign the tags from the folder to the data within the widget.

Once you build a widget, it is still not a global object. A change to one widget will not affect the others. This is a godo thing and also a bad thing. On the bright side, it is really easy and fast to modify a widget and then delete all the other instances, duplicate the new one, re-assign the folder. That is unless there are more than about a dozen of them.

The only method I have used to successfully make what is in effect a global object is by using arrays with pointers. This doesn't always match up well with UDTs or other PLC data arrangements that may already exist. I recently attempted to use an array of UDTs, to make quick work of some things in Crimson, and that did not work. I do not believe Crimson supports arrays of UDTs, so I fell back to using Widgets to get my work done.


Thanks Okie, I'll have a look into widgets. If you do get around to making that video, that'd be awesome!
 
"Once you build a widget, it is still not a global object. A change to one widget will not affect the others. This is a [good] thing and also a bad thing. On the bright side, it is really easy and fast to modify a widget and then delete all the other instances, duplicate the new one, re-assign the folder. That is unless there are more than about a dozen of them."

That's a good point. I'll get them to bug that, and see if we can add a feature that lets you reload all instances of a widget from its definition file, or at least right-click and update it.
 
The ability to pass parameters to a display would be a massive help also. The inability to do that easily is kind of a dealbreaker for me at the moment.
 
The ability to pass parameters to a display would be a massive help also. The inability to do that easily is kind of a dealbreaker for me at the moment.

Do you mean to a display page? Or a popup? Or a faceplate / widget?
 
The ability to pass parameters to a display would be a massive help also. The inability to do that easily is kind of a dealbreaker for me at the moment.

Yes, I have found some workarounds by using array tags, but that can lead to other limitations, like all members of the array share a description, and if the tags are not orderly in the device to which they are linked you can't use them.

I recently wanted to create an "HOA" type of widget to stick on a pop-up page and re-use 22 times...ended up with 22 pop-up windows with 22 individual copies of the HOA and 22 bind widget operations, of which I got 21 right the first time...Oh, and there were another 16 pop-ups with a variation of that HOA (HOCA ... Hold, Off, Close, Auto) for valves...same thing...16 more pages...
 
Got it. So we could add a parameter list to a page, and then invoke it how? Using a modified GotoPage or ShowPopup function that took parameters? Need to think about how to handle what would almost certainly be a variadic function, or how to provide UI that wouldn't be beyond ugly...
 
Would it be possible to expose the properties of a widget to external manipulation?

I spent a little time looking for a way to dynamically change the tags that my HOA widget was pointed at, quickly realized it wasn't possible. I could not change the PLC code in order to use arrays. (I was dealing with 5 different SLC PLCs and a Wonderware SCADA already using existing semi-organized addresses so changing it was beyond my $cope).

Or, perhaps there could be a way to add variables to a page that could be linked to tags by reference. Then they could be "populated" by the calling program or object with a short bit of Crimson C code. The page would inherit the properties of those referenced tags so that you would automatically get the properties to pass through to the objects. I know, easy for me to conceive, probably quite a challenge under the hood...
 
The way Classic intouch does it would work easiest I think.

They use "Indirect" tags. Using scripting You assign the name of the tag with the data you want, to the indirect tag's .name field. The indirect tag is used in your faceplate or common screen. Until it gets re-assigned, it is linked to the source tag for both read and write.

So you assign the tags, then call the screen.
 
They use "Indirect" tags. Using scripting You assign the name of the tag with the data you want, to the indirect tag's .name field. The indirect tag is used in your faceplate or common screen. Until it gets re-assigned, it is linked to the source tag for both read and write.

Thanks for this. I'll have a look at that approach...
 

Similar Topics

I'm trying to use a Red Lion Cub counter (Cub5B00) as a counter and give the cub's counts to a Graphite G12 PLC/HMI to display. After about an...
Replies
1
Views
85
Hi everybody, I have about three Red Lion HMI's, the calibration on the screens seems correct but where I'm using the pop up keypad to enter...
Replies
1
Views
90
Hi folks, I'm trying to parse a binary string on a Red Lion DA30D using a Raw UDP/IP input port. I've done this before with ASCII strings so I do...
Replies
38
Views
877
I was wanting to see if anyone had any information on setting up a cub5 meter and getting the data to a Allen bradley PLC. I think i have the set...
Replies
0
Views
110
I am having issues getting a Red Lion HMI and Micro830 controller to communicate. I am using the cable here to connect the controller to the RS232...
Replies
0
Views
99
Back
Top Bottom