Close this search box.
By Laura Strydom
16 October 2020

How-To: Create Assets From Your Current Plc Standards In Ignition


Table of Contents


Ten. This is literally our first Friday change maker series that we have launched. So you notice that obviously you would have received an email introducing the concept of what we’re trying to achieve with these Friday tech sessions. And really it is an invite to our asis that’s registered with us at element eight. Just to go a little bit into a little bit more technical, deep dive into some topics, the product stack that we have and that will include, obviously, not just the Ignition SCADA platform, that will include the Canary Time series in story and as well as the flow information platform. So obviously this week you’ll notice in your emails that you got is the one that we’re going to talk a little bit about ignition. 

And what I’m going to cover today is really to take existing standards that you potentially might already have developed in your plcs that you might already been utilizing in projects potentially with other SCADA platforms. I just want to show you guys how you can take that existing structure that’s already created in your plcs. How do I actually get it into ignition? How do I utilize the design concepts in ignition to make it simple and easy for myself to obviously then also go and mass instantiate all of these different assets depending on what the structure is inside of the PLC of all my different control modules that I’ve already might have developed. We’re aiming to do this in about an hour or so. We’ll see how it goes for this first one that we’re doing today. And we’re trying to do this every by week. 

So every second week we will cover a new topic. So you’ll notice in your email registration, we’ve already planned out what we’re going to cover in the next coming two sessions as well. So make sure that you book for those sessions as well as we go through these sessions. So I hope everybody is comfortable, everybody got their lunch already in front of them, and then we can kick off here into a little bit of a technical deep dive on the topic that we’ve got for today. All right, just a little bit of an agenda. What we’re going to cover, obviously. First of all, to get data into the SCADA platform, we need to obviously connect to some devices. 

Now, the example that I’ve got is I’ve got a Siemens S seven 1500 Plc, and there’s actually two ways that we can communicate with that device. Obviously, that little Plc has an OPC UA server on board. So I’ll show you guys how to connect to it via the OPC UA connection. But we’ll also look a little bit into the standard built in drivers that ignition offers. And we’ll actually connect to the Siemens with the built in kind of TCP driver that’s available for the Siemens suite. Before we go gun ho and just create a whole bunch of tags and structures and start instantiating devices, et cetera. There’s one concept that we need to just have a little bit of an understanding around and that’s the concept of tag groups and the different polling options that we have for these different tag groups. 

So if you want to poll your tags at every 2nd 2 seconds, if you’ve got critical data, you might want to increase that to scan a little bit faster. Or if you’ve got data that you don’t need to poll at such a frequent rate, you can obviously create a tag group with a different polling cycle. There’s about three or four different modes that we can ask ignition how to pull data from our devices, but I’ll show you guys that as well. And then obviously we will go into creating data types, we’ll go into creating a UD, they call it a UDT, a user defined type. I’ll show you guys how to utilize the structure that’s now already in your PLc to create this UDT and how to create placeholders so that we can mass instantiate these different control modules inside of our SCADA option. 

We’ll show that how do we instance these tags or create these instances? And then if we do have a gap, I’ll also just show you guys how to create a graphic on top of your now completed UDT just to display the value on potentially a perspective on HTML five page from that perspective. So that’s what we’re going to cover in the session here. And I think let’s get started, right? So what I’m going to do is I’m going to go to my VM. So there’s my VM currently it’s got the gateway open. So the gateway is obviously the place where I will go and do all my device connections, set up my different tag groups, et cetera. So this is the central point where I get started to actually put in a connection. 

I think from us as engineers, we always want to do that first, right? You want to unbox that Plc, you want to download it and you want to connect to it. So let’s do that quickly. So what I’m going to do is I’m going to do, as I explained, those two connections to get connectivity to that Siemens plc. So under the config section in my designer here. If I scroll down a little bit, there’s two options and sometimes I even get confused the first time to which one to click. But you’ll notice that there’s an option to create an OPC client connection as well as under the UA section there’s a section to go and create a device connection. Now just to explain that a little bit is in essence the ignition gateway platform is an UA server. 

And when you actually create device connections to it, you actually go and create a driver that natively talks to, in this case the Siemens plc. And it will actually relate the tags back as an UA server. So when you browse the tags in your ScaDA solution, it will actually be as if you are browsing an UA server. Now obviously if we look at the device connectivity here and if I go and create a new device to connect to a new PlC type, there’s a bunch of drivers for kind of the most common drivers out there. So obviously we can connect to the Alan Bradley’s of the world. There’s a DMP three driver, a Modbus RTU and a Modbus TCP driver as well. There is Omaron drivers to connect to the Omaron PLcs. And then we get to the Siemens guys. 

So I’ve got a little s seven 1500. So I’m going to go and select that to create that driver connection for me. Hit the next button at the bottom here. I can give it a name. So I’m just going to say this is my s seven 1500. I can give it a description if I want and all I need to do is type in the IP address of this device and that’s pretty much all I need to do. Not really depending on if you’ve changed the layout potentially of your PLc, then obviously if you click on the advanced properties then you can go and change your rack number. If your cpu sits on a different rack and you can also change the slot number by default. Obviously it’s set to the default settings as you would have unboxed this Plc. 

So technically all I have to do is type in the IP address, hit the create new device section and that will go and create a connection to my device. Almost got a heart attack there, but it went to connected and we’ve got connection to my Plc. All right, so technically this is now connected. I’m using the internal drivers and it will now relate it as OPC UA server when I browse it inside of my ScADA environment. All right, so that’s the first way to do it and that’s by using the built in device connections that I get with the inductive platform. Obviously as I explained, I can also go and create OPC client connections so I can go and connect the ignition SCADA platform to already existing OPC servers out there. Now these could be OPCDI servers, it could be OPC UA as well. 

So in this case, what I’m going to do is I’m going to go and create a new OPC UA connection. And this UA connection is now actually going to go and connect to that little OPC server that’s running on top of the Siemens a seven 1500 plc. Just as we can also connect to the legacy kind of DA components. Just to show you guys that. But obviously in this example I will be connecting to my OPC UA server. So I’m going to hit the next button here. Very simple as well. All I need to do is enter the endpoint. Now for OPC UA. It also always kind of starts with OPC TCP and then the IP address of the device. You notice it’s the same IP address as the IP address I’ve entered into the normal standard driver connection. 

And at the end is obviously just the port on which the UA server has been started up for me to go and connect and select endpoints. So I’m going to go and add that in. What that will do is it’ll obviously go and determine and see if there is an UA endpoint on the address. If there’s multiple endpoints, it will list them there and you can select which endpoint you want to connect to. In this case, there’s one UA endpoint for the project that I’ve downloaded to this PlC and I’m going to go and select that endpoint from that perspective, hit the next button. 

Currently I don’t have security set up on the UA connection, but obviously if we did had a security policy, we can go and enable that to obviously enter in my credentials and select what type of encryption is required on this OPC UA connection. Luckily for me, plain and simple for today. So I’m just going to leave that at the default policy. Hit the next button and hit finish. I can give it a name. Now in this case, this is my OPC UA connection. I could have given a description, but that is all I really have to do and it will now start to connect to the OPC UA server. Great. So now I’ve just showed you guys how to use the website, the gateway website, to do your device connections physically to the device or to the UA server. All right, so I’m done. 

I’ve got connection. I’m happily connected to my plcs. All right, now, before we go and connect to my Scada solution, we need to just understand a little bit of how would ignition pull the data out of the PLC. And we explained a little bit that ignition’s got the concept of what we call tag groups. Now, you’ll notice in my configuration section here in the gateway, there’s a tag section here. And I’ve got the capability to create different tag groups, depending if it’s real time tags or if it is historical tags that I want to now historize in my historian. So let’s look at the real time tags by default. When you go and install ignition, it will give you a default tag provider. 

And if you create a project that will be the one that all your tags will probably live in, is in this default solution. But you can go and create a new real time tag provider. It can either be a standard tag provider for this current ignition gateway, or if you want to get tags from potentially another gateway, it will be a remote tag provider. But in our case, it will be a standard tag provider. Hit the next button. In this case, this could be my slow polling tags. So I want to go and add all my tags that slow polling into this particular tag group. So I’m just going to go and create that slow polling tag provider. Right? 

So now I’ve just segregated two physical groups of locations where I can add tags, and they will have different polling mechanisms to get the data out of the PLCs, pretty much. So that’s just an important concept to understand because when we go into our project or into our designer, we will select to which one of these two tag providers we will go and add our tags. And obviously we can go and change the settings for these into our designers as well. All right, a little bit of housekeeping. How do you know everything is connected? How do you know what’s my throughput of tags? How many tags are being subscribed? All of those nice things that we want to do. From a fault finding perspective, there’s two ways. I can go and click on the status option here immediately. 

It will show me how many OPC connections is available, how many devices is connected. So I’ve got one OPC connection here that’s faulted. I can go and click on that and it will show me there’s the one that I’ve just created on top of the UA server that is running. But obviously there is a fault on this particular one. And you can go and rectify that fault. If you click on the subscriptions tab here, it will show you who’s subscribed. What is the current tag rate? How many tags are busy polling this device? Obviously currently I’ve got nothing because I haven’t added any tags to this driver. But we’ll revisit this a little bit later when we actually have some tags that’s polling on this device. You can see exactly the same kind of information for the standard drivers. 

So if I go and click on devices, you’ll notice there is the standard driver. I can click on the details of that and it actually gives me quite a nice little graph indication here of how many requests did I do the last second? How many tags is currently being pulled? What is the throughput of all your tag changes? So you can see if your scan rate is potentially too high for the amount of tags that you’ve got in this group. So quite a nice little designer or engineering tool here to go and visualize and see what is your current tags and what is the behavior of your tags. 

So you use that as a little bit of a housekeeping kind of task to just see how your tags are behaving and how much load is that putting all your tags is putting on your system as well. Cool. So I’ve got device connectivity, I know where to go and look if I’ve got issues. Let’s go and potentially add some tags inside of the system. Now, I’ve already downloaded the designer to go and create an application. But just for a recap, if you have access to this gateway, click on the home section here and anybody can go and download the designer to go and create the applications. And as many people can download it, as many concurrent people can design on the same project. There’s no kind of limitation on the amount of designers that we can open and create projects with. 

I’ve already done that. So I’m just going to minimize my gateway here and I’m going to go and launch my designer here. And the designer we can now use to obviously go and create new projects or just open up a project that we’ve already created and we need to make changes with. I’ve already created a project, so I’m just going to go and open one of my projects that I’ve already created and I’m going to go and add my devices that’s sitting inside of my plc into that. So I’m just going to quickly log in here. As you can see, I’ve got four projects here. I’m just going to open up this top one that I’m busy with and I’m going to use that as a base to go and change and add my PLC control module that I’ve got right. 

So there we go. This is the designer, this is the way that I’ve opened it the last time. But you can go and obviously go to the view option here and just reset the panels. So this is typically what you will see when you load the designer for the first time. And you’ll notice at the bottom here we’ve got our tag browser component and currently there’s some tags in there. And I’m going to actually go and add to these tags depending on the control modules that I want to build out from my PLC. Right. Now remember, I’ve created those two tag groups, the one for the slow polling and the one for the default one that comes with the gateway. 

When you create it the first time, you’ll notice that there is a little icon here at the top that says edit your tag groups. So if I click on that, this is now where I get my tag groups and this is now where I can go and change the mode and the rate of how fast these device groups must poll at. Now currently you’ll notice that I’ve got a mode and it’s set to direct and the rate is 1000 milliseconds. So what that means in effect is every second I will go and pull four new tags out of my control system. I can go and drop this down and I can go and have what we called a driven mode. Now when I select a driven mode, you’ll notice that there’s two options here. 

There’s a rate and then there’s a lease or a driven rate. So how does this work? So technically I can say whenever I can have a rate of, let’s say 10 seconds. So it will go and poll every 10 seconds when I have a certain condition which we call the driving expression. And this can be expression that you can write with different tags to look at a different kind of expression to be true. But if this expression is true, go and poll at my faster rate. All right, so that’s a way that we can go and can define how fast must I poll my tags depending on different conditions? Potentially in my scalar solution, quite a nice feature there to control how fast you’re pulling your tags. And then the last mode that we have is what we call least. 

Now, least mode is only when the tags are shown on windows. Potentially it will then go and pull at a faster rate versus if it’s not being showed or not being utilized currently or not open in anyone’s vision component or skater component, then we will go and poll it at potentially a slower rate. So that’s to handle poll it when it’s in use faster versus polling it a little bit slower when it’s not actually in used at all. Now you might ask, does that influence, obviously historical tags? So does that mode influence? If I’m not having the screen open, will the historical data also be pulling slow? And you’ll notice that historical components or historical tags also have their own tag group. And again, for the historical components, you can go and effectively configure your own driving force for the mode. 

So that is independent of one another from seeing it versus what is actually seen or historized in the historian. So that’s just something to be aware of. Nine times out of ten, we’ll probably leave it at the default settings. But the capability is there for you to go and define how often you want to go and lease tags, pretty much from the PLC and how fast you want to pull them. I’m not going to play with these, I’m just going to leave that alone. All right, let’s browse our Siemens Plc. So I’ve got an option here where I can go and browse my OPC servers. And what that will do is it will open up what we call this OPC browser component here at the side. 

Now a few things that you will notice here is it will list all the UA connections that I’ve got configured currently in my gateway. So there’s the UA server connection to the actual Plc itself, and then it’s also showing you ignition’s built in OPC UA server. So remember, if I’m utilizing the built in drivers from inductive, it will be listed underneath that internal UA server. So there I’ve got my PLC and I can see if it’s connected or not, right? Utilizing the default built in drivers obviously will not browse the namespace of that PLC if it doesn’t support it. So potentially with Alan Bradley’s, they can probably be browsed. In the case of the Siemens ones, it’s not browsable if you use the native drive, and that’s obviously a driver specific thing. 

But that’s why I like the UA component is if I expand the UA component, you’ll notice that it already shows me my device set, that I’ve got the project that’s loaded in the PlC. And there you go, there’s all my data block instances that’s currently loaded in that PlC. If I expand that, you’ll notice that it will pull out all the components or all the control modules that’s in my PLC and it will list it there for me to actually go and select. So there you go. I’ve got a whole bunch of control modules all the way from level switches, motors. So this is an actual project that I’ve got in my PLC. At the bottom here I’ve got a few waitometers, so pretty much analog input device. 

If I expand that, it will go and show me all the components, all the structured tags that’s been created for this control module. So in the Siemens device, we’ve created a structured tag structure and there’s all the different structured tags. And obviously underneath each and every one of these structured tags is the individual bits and pieces. So if you just as an example, look at status, if I stand status, there’s the actual value that’s been displayed. If I expand my alarms, that’s all my alarm bits and bobs that’s been configured in this control module inside of the PLC. If I expand config there’s all the configuration settings for this alarm as well. So it’s quite a nice and big and hefty control module that we’ve got here. All right, so typically this is what you will look at, right? 

So you will potentially already have this standard inside of your plcs. And by utilizing this, we can browse those standards and see what that actual standard is from a control module perspective. All right, now, a few things I would like to create, not necessarily exactly the same copy, but I would like to mimic this structure inside of my ignition scada. So when I go and mass instantiate all of these instances, it will automatically bind to the address, it will get the values and it will must just work, right? So how do we do that? Now, one way that you can do it is if I’m going to go and create a new folder here in my tag tree, obviously these folders for the demo here, I’m just creating a little folder here for my text section that I’m having here. 

But you can go and mimic kind of a plant layout in an area with these folders. I’m just going to have a very flat structure with the tag dictionary or the tag structure that I’ve got here. And technically I can take this tag out of my PlC and I can just drag it in here and it will go and create that tag. And if I expand a little bit, there’s the value, right? So I’ve just added one tag into my structure. So you can still go and manually add tags by hand into the solution. And I can now use that value on screens and inside of scripts, et cetera. But we want to be a little bit more smarter. We want to mass populate this thing. 

So what I’m going to actually do is I’m going to first create what we call in the ignition world is a UDT or a data type. Right now a data type is pretty much mimicking the structure of this control module by creating quite a complex kind of way of having all of these different bits where the addresses are. Do I need to enable alarming on them? Do I need to enable historization on them? So all the properties, all the engineering units, everything that lives with that control module, I will go and define inside of this data type. All right, so I’m going to expand it. I’ve got a few already created, but I’m going to go and create a new data type. And this will be for my analog input CM or control module. 

So I’m going to call it analog input or just AI. And this will be my analog input module and I’m going to hit the apply button and I’ve got a blank data type. Now because these tags is structured tags in the Siemens Plc, unfortunately it will not go and add all of these different levels when I drag it. So I’ve done this before. If I potentially just take CM as a control module and drag it on top of my data type here, it’s going to ask me, do I want to add this structured tag to my data type? And I can say, yes, please add it to the type. Don’t create an individual tag. I want to build up my type, but that will only go and obviously create this first level, right? 

So it’s not going to go and add all of these different components that I have inside of here. So let’s just delete that tag. I just wanted to show you guys that it will not do it to automatically generate that structure for you as well. All right. Now what I can do though is I can kind of mimic this structure, right? So I can go and add a folder in my data type and I can say this is my status folder, I can add another folder in here and this could be my warning folder structure. I can also go and add another folder in here for my different modes that it’s in. Obviously I need to go and configure the alarms on side of my ScaDA platform so that will be the alarms. 

And I can go and kind of configure and mimic this kind of structure that I’ve got going inside of my Plc there. All right, now what I can do is I can hit the apply button, say, okay, and now I can go and browse the structure here, select all of these tags that’s in my status component, expand my data type to show me my status folder in my data type, and just drag them in there and say, please add to this data type and it will now add those tags in there for me. All right, so let’s do the others quickly. I’m going to do exactly the same for mode. I’m going to just add those two in there, and I’m going to remember to add it to the actual type itself and not create individual tags of these devices. 

All right, add that to the warning. And also the last one is the alarms. Now, the alarms already have another config level inside of here, so I’m just going to go and expand that as well. Select all of these guys, deselect the structured tag from that component. Sorry. Cool. And drag all of those tags into my alarm folder and add it to the type. All right, so there I’ve got quite a nice heavy structure or control module mimicked inside of my ignition platform. So there’s all my alarm bits, there’s all my modes, there’s the status, so I can see the value, and then there’s all the warning bits that I need to have and add. 

Now, one thing that you will notice, and I’m not saying that this is 100% the correct way of doing this, but you can notice that inside of a data structure, you can actually add another structure. So potentially, if your status structure that you’ve got in your control module is shared between other control modules, potentially you could have created a UDT or structure for that status and then utilize that wherever you need to repurpose or reuse it inside of other control modules. As an example, in my case, these statuses are very specific to analog inputs, so there’s no need for me to create a separate UDT for that. So that’s why I’m utilizing the folder structure inside of this UDT to kind of generate and create that. All right? So I hope that kind of makes sense from that perspective. 

All right, now one trick though. I’ve dragged raw tags from a specific instance that’s living in my PlC, and I’ve used that to build out this UDT, right? So if I look at my status value that I’ve created and dragged, you’ll notice that it already has an OPC item path and that OPC item path is now already connected to an actual input in my PlC. Obviously I don’t want that. I don’t want to go and manually now every time I create a new instance of this data type, go and have to go and change all of these addresses. I would like this system to be able to go and automatically address them for me. All right, so what I need to do is I need to be able to parameterize my tag name. 

And depending on certain rules and certain components, I want the system to be able to build up that tag name automatically. So when I create a new analog input control module, it should just work and bind to my PLC automatically. All right, so how do we do that? On my UDT I’ve got the capability to add parameters. All right? And if we look at our instance in the Plc, there’s a certain rule that these things have. So DM underscore we 70. So DM in my case is an area we is the different type of analog instrument that I’m using. And then 70 is the actual number or the unique number of this particular instrument. So I need to be able to parameterize all of that and it should combine and bolt me that reference and automatically do that on the PLC side. 

All right, so let’s add those parameters. I’m going to add a few parameters to my structure here. The first parameter that I’m going to add is my area code. So I’m going to go and create a parameter for area and by default I’m going to leave it to be DM. All right, I’m going to add another parameter. This parameter will be my different types of analog input control modules. And by default that’s going to be my we device. And then the last one is the actual number. I’m just going to go and shorten that to num. And by default or the first one that I’ve got there is 70 from a default perspective. All right, now it commits and I’ve got my three parameters. 

All I have to do now is I need to go and replace these parameters inside of my OPC item path. So let’s do that for the value quickly here. So I’m going to select the value. I’m going to go and edit this path. Remember this path has been automatically populated when I dragged it onto this UDT. I’m going to hit on the edit button. And obviously now I need to be able to replace DM with my area parameter. So I’m going to do exactly that. I’m going to go and replace that with my area placeholder. Second part we, I need to replace that with the type, I’m going to replace that with the type parameter. And then I’ve got an interesting one I’ve got as the number of this device. 

I don’t know if you noticed that when I created this number property and I typed in, it reverted to 70. So currently that property is just the number 70. But what I can do is I can add some formatting to this number. All right? So I can say, you know what, I would like to have at least to pad it with the zero. And the way that I do that is to specify the format. And in this case I’m formatting it by having three digits. So obviously it’s going to go and pad that 70 with another zero in this case. So it will go and address it correctly. 

And it also actually tells you that in this little handy hint that it’s got at the top here that it will actually go and pad and be able to cater for different numbering format that we have. Cool, hit commit. And there we go. Now I’ve got a parameterized item path. So when I instantiate this, it will go and automatically replace those parameters depending on what you set them when you create the instance. All right, so we’ve got about 25 minutes left on the call. So what I’m going to do is I’m going to quickly go and manually change all of these guys and hopefully when it’s done the call will be ended. No, okay. Obviously not. I don’t have time to go through all of these things. You can imagine it’s going to take me quite a time. 

But you might think, jeez, do I really have to go through each and every one of these items and change each and every one of these item paths to now have my parameterized structure? Luckily not. There is a little bit of a quicker way that we can achieve this and I’ll show you guys that now. So just hit the apply there. Hit. Okay. And I’ve got that one structure changed. Okay. What I can do though is to help me with this is to export the structure so I can right click on this structure here and I can go and say, please go and export this UDT that I’ve got. And you’ll notice that you can select, you either want to export it as a JSoN or as an XML blob. 

And in this case, what I’m going to do is I’m just going to go and export it as JSOn and I’m just going to overwrite the one that I’ve already got there. So hit the save button. It’s going to overwrite it and it’s now exported this UDT as a JSON blob on my desktop. All right, so let’s go and have a look at that. Open up my desktop folder here and there. I’ve got my little AI JSON blob that I’ve just exported. I’ve got a little text editor here called atom. So I’m just going to open up that JSON structure inside of my little atom program here so you guys can see what the structure looks like. Now as sis, we want to have and do this kind of process as quick as possible, right? 

So potentially if you have an I O list and you have already documentation or tools that generates your documentation and potentially your PLC standard, you can actually extend that to actually already populate you. These JSON blurbs depending on your structures and your bits that you need inside of your PLC and just import them back into the ignition solution and you already have your UDT structure already. All right, now you’ll notice a few things in the JSON. Yes, the value component that I’ve changed manually and there’s the three parameters that I’ve changed. So area, the type, the number, et cetera. But one important thing that you’ll notice is that it changed the binding type of this OPC item path as a bind type that is utilizing the parameters you’ll notice at a normal one that I have not yet changed. 

It’s just the actual OPC item path straight out. So there’s no component there that specifies I need to use my parameters to actually bind to this. All right, so obviously we need to do a little bit of copy paste magic here. So what we need to do is we need to take the first part here. So we need to replace that little component there. All right? And I need to replace that component with this structure that I’ve got at the top here. So I’m going to copy that and I’m going to paste it in the buffer here and I’m going to say replace. All right, so now it’s going to replace all my normal opcs with the fact that I need to use parameters. So it’s adding that parameter binding there. 

And obviously it also changed the parameters that I need to use in my item path. You’ll notice though that I’m missing just a closure of this object inside of the JSON structure. So what I also need to do is I need to replace this double colon and the comma there. So I’m going to copy that, put that in there, and I’m just going to replace that with this structure that I have here to just complete that object. All right, paste that in, replace all, and there we go. I’ve just copied and replaced everything. Now to utilize my parameters, I’m going to go and save this file again. And what I’m going to do inside of my designer is I’m going to go and re import that file. So I’m going to go and import tags. I’m going to go and browse for that JSon. 

And here’s a few things that you can now go and select from a little bit of a policeman perspective. Right. So what do you want to do if it sees the same tag or the same UDT structure? Do you want to abort the import process? Do you want to overwrite your UDT? Do you want to rename it? Do you want to ignore the changes that you’re going to go and import, or do you want to merge any changes that’s already there? So I’m just going to go and do an overwrite at this point just to overwrite all the tags that I’ve already there to utilize that. So I’m going to do that. And if my copy and paste magic worked, it’s done, hopefully. 

So if I open up the structure now and I look at all these things, they are all changed to utilize my parameters. Great. So my copy paste magic worked. I didn’t have to do that all manually and now I can actually go and instantiate this structure that we’ve got going in. All right, so I hope that showed you guys by utilizing a little bit of JSON magic and Excel skills. We as sis, we love Excel. It’s our best tool to generate tag lists that you can actually go and build out these structures automatically as well from that perspective. Cool. All right, let’s instantiate this device. So I’m going to go into my tech folder. I’m going to right click. I’m going to say give me a new tag of type AI. I’m going to say apply hit. Okay. 

And if I’m lucky, I’ve got values. There we go. Why do I have values? Because the default settings that I’ve set for my parameters was already there to go and bind to DM 70 and of type we. So it’s exactly the same tag that you see there that I’ve dragged on manually earlier in the session. It’s just automatically generated the path to that, to the new device. So if I go and change this, I’m just going to open up my read write command there. If I change this number to 71, it’ll go and bind to 71 and you’ll notice it is a complete different number. All right, so by utilizing my parameters, I can now go and physically bind to whatever control module there is inside of my solution. 

And you guys can see how quickly I can go and configure that and just change these area numbers and types and it will automatically sort out the connection to my OPC connection that I’ve got inside of there. All right, I hope that makes sense. I hope that showed the capability of doing it that way. Obviously I’m utilizing the UA connection. What I could have done is if you guys are familiar with the Siemens structure, I could have also connected to the actual dvs themselves. So just to show you guys that if I go back to my devices, there is the actual Siemens device that I’m now connecting through the actual native driver from inductive. I’m going to just drag this is connected bit in here as well. So just to see that I actually have a connection to my Plc. So there we go. 

I’ve got a connection to my Plc. And let’s change this to actually read a DB. So this is actually going to be exactly the same tag. So it’s going to be W 70. And instead of reading this diagnostic tag, I can go and read the actual DB in the Siemens Plc. So that DB is DB one nine four and important. It’s a comma, not a dot. I’ve made that mistake a few times today. Real N 68. So if I do that, hit apply, change the type, obviously not from, it’s not a boolean anymore. Now it is a float. There we go. It apply say okay, and there we go, we 70. Reading now from the normal DBS is exactly the same as the value that I’m getting from the OPC UA server. All right, now let’s go back into a little bit of diagnostics. 

So let’s see how that’s updated. So I’m going to go back to my gateway, going to go to the status page here, going to go to my devices, look at the details of my s seven device. And there you go. There you can see I’ve got one tag. I can see what the throughput is of that tag. I can see how much load is that one tag putting on my system. Obviously it’s not a lot because I only have one tag currently scheduled. And if I look at my OPC UA connections and look at my Siemens device there, I can see how many tags is actually now subscribed to this one connection that I’ve got. So you can see that I’ve got 43 tags obviously going through the OPC UA connection to my Plc to get the values from that perspective. Cool. 

Obviously that’s not a very nice name. So I can go and rename this structure here. And this will now be DM underscore, we can say, okay, cool. So I’ve got one device, you’ll notice in my control modules here, I’ve got quite a few more. So I’ve got all the way from 70 to 79. I could have also go and mass populated that. So I can go in here and say, you know what, instead of creating one tag one by one, by selecting the actual CM that I need to go and select, I could have used the multi instance wither to go and mass populate these tags as well. So how does this work is I want to go and mass populate all instances of my control module based on that AI module I’ve just created. 

So I’m going to go and select my AI type. I’m going to give it a base tag name. So in this case it will just be dmwe zero. The tag pattern that I want is I want to go and create tags from. I think you can do this, 70 to 79. I’m going to leave the patterns here by default. So it should do that. And obviously the number I want to change the number must also change from 71 to 79. Now you can hit the preview button here. It will just show you what it’s going to do. So that’s going to be your tags. It’s going to leave the area blank. It’s going to change the number to that which looks right. It’s going to change the type. 

I think I might need to just specify the area must be DM and the type must be we. I’m not actually obviously going to change it. So let’s see. There we go. So that’s what it’s actually going to do. So it’s going to create all of these tags or instances. It’s going to keep DM as DM. It’s going to change the number though to increment as the control modules in my Plc. And it’s going to keep the type as a we. Let me just do this nice and correct and capitalize that as well. Hit the ok button and there we go. All ten of those devices. If I didn’t screw everything up, it should connect and create and get all the OPC values from these devices as well. If my parameters got populated correctly. 

But that just to show you guys how easy and quick you can go and create these devices in a mass way. There we go. So there’s the value for that one, there’s the value for the nine. So all of them is now created. Technically, I should see a massive spike in the amount of tags that I’m polling. So if I refresh here and I look at this OPC UA connection, I’ve got now 421 tags created inside of my ignition platform by just using that multi instant wizard to drive and help me through that process. Cool. I hope that makes sense. I hope that makes sense how to either utilize the standard dB kind of structure inside of a Siemens plc, or to utilize the UA structure to build that. 

Obviously you could have used the exact same principle to create a structure for your normal dbs as we showed here. And then obviously you will have parameters potentially just for your offsets of your DB numbers and your reels, just to mass populate that as well. But you could have definitely created the same kind of concept exactly like I have done here on the AI. I could have done exactly the same principle looking at my dbs as well. All right, so now that I’m happy with my structure, I’m happy with my control module and there is a few things that I’ve missed. Obviously I would need to be able to historize a few of these things inside of my control module. I also need to be able to alarm on a few of these things. 

So if I open up my module here, obviously I want to be able to historize the value potentially of this analog input. So at the bottom here, I can go and enable historization on this and I can select in which DB do I want to go and historize it from a history provider hit apply and that will now change that to start historizing all of my tags. On the alarming side, obviously I would like to alarm on some of these bits that I’m getting back from the PLC. So if I’m potentially in a high alarm or in a low alarm, I would like to be able to easterize that. So I can go and add easterization on this as well, or alarm capability on that to get that going. Just to show you guys, I’m missing a few bits here. But let’s do this. 

If my high is enabled, I can go and add alarms on top of that. So I can go and add an alarm to now utilize the built in alarm capability of ignition to show that in an alarm kind of screen. And in this case what I would like to do is it’s a bit. So I want to know if this alarm is not equal, but it will be a bit way that we’re going to go and select that. So there is an option here where you can look at a bit state. So I want to know if the bit state on bit position zero is true. If it’s true, then I know I’ve got an alarm. The nice thing is I can add as many of these different alarm states to one single one of these values inside of my structure as well. 

Hit the commit, hit the apply and I have that alarm now configured. If I go and look at my structure here now and I just do a little bit of a refresh on this tag tree, expand that, expand my status. Notice that next to my value component, it now has what we call a little trait. So you’ll see there’s a little time frame here that just shows that it’s now being historized. So the nice thing is, because I’ve changed it on the UDT side, each and every one of these instances that I’ve created now has that capability that they’re all historized. And if I look at that alarm mode of that Boolean, you’ll notice that guy’s got the alarming enabled to now actually show an alarm whenever that is configured inside of when that condition is correct. 

To actually show that on side of my browser. Cool. So changes you make on your UDT obviously will propagate and it’s quite fast and it will propagate that all the way through to all of the instances that’s been instantiated from that. Obviously we want to see this potentially on a screen or on a graphic. I know we’ve got not a lot of time left, but what I’ll quickly do is just create one quick view that we can go and potentially create a little icon of my control module here. So this is perspective. So perspective is one of the visualization clients that we have in the inductive suite. And it will build HTML five rendered components and then obviously just use your browser as potentially a client to see these graphics and components. 

So we can utilize this to build our ScaDA mimics for our plants. But it will all be loaded and visualized inside of my browser. So what I’m going to do here quickly is just create a new view. This will now be my AI control module so CM icon and I can specify what type of view I want to create here. Do I want it actually to have a URL that I can browse to? If this is just the icon then potentially not you’re not willing to be able to browse to just your icons but you can go and obviously for complete mimics enable that and you’ll have a URL that you can browse to your actual completed mimic create the view in there. 

Now you have a blank canvas where you can drag stuff on top and you’ll have a little bit of a component section here at the side where I can now go and add a whole bunch of different components onto this view. So obviously I’ve got analog component here so I’m just going to use the standard built in moving analog indicator that they ship with the product. I’m going to add that to my view here. So very simple kind of situational awareness looking analog control and there’s some properties on this that I can now obviously bind to my structure. So what is the actual current value? What is the set point? What is the minimum max? What is your desired high and low, what is your high alarm set point currently set at? What is your low alarm set point? 

So all of these things can be bind to my different control modules. So just as an example if I click on the bind icon there I can go and browse for all my tags that I’ve configured and I can go and expand my tags. Expand tech there’s that one instance expand status and obviously hard code and hard link it to that and that will now show me my actual process value and you’ll see it will go update as that value changes. Obviously we don’t want to do it this way. Obviously we want also do we have the capability to kind of generate this on the fly? When you drop it down it should be able to automatically connect to all the little bits of pieces to show you the values. 

And the way that we do that in the graphic side is on your root graphic, on your view that you’ve created you have the capability to add different parameters. Now this is HTML five. It’s a little bit of a different kind of environment. If I click on that you can go and create a value key pair for that. For this I would obviously like to say where do you have to go and look for your tag inside of your tag structure. So what I’m going to go is create a parameter here that says what is your tag path? Where do I have to go and look for you? And the default one, what we can do here is let’s add the default tag path to one of my devices. So it will be, sorry, I’m just moving stuff around here. 

So that will be my default structure. I’ve got a tag obviously called DM underscore we 70. So that’s kind of default what my tag path is going to be. And now instead of hard coding the connection to the actual tag itself, you’ll notice that we can select in this tag browsing or tag binding not to go direct, but to go through what we call an indirect tag path. Now, I already made a mistake. You’ll notice that my tag path did not include the tech folder, so I’m just going to copy that out as well. But what I’m going to do is I’m going to say, no, I would love you to be an indirect tag path. This whole complete first section here, please go and look for that in my parameters, right. 

So that reference will be replaced by whatever parameter I’ve configured on my view. So on my view I’ve got the parameters section there and obviously there’s that tag path parameter that I’ve created. So whatever is in tag path, it’s going to go and replace inside of there. All right. And immediately you’ll notice it says there’s a configuration in the error because obviously my tag path is incorrect. Hit the apply button there. Hit. Okay, I’ve got a bad binding on this. So if I go on my icon here and I just go and fix this tag path, it should bind to the correct tag and be able to show me the values. So let’s do that. Hit the paste button there. Hit. Ok. And there we go. It’s fixed, it’s connected, it dynamically updated. 

So wherever you put this down on your mimic, all you need to do is reference the correct tag path. It’s not necessarily the way that I’m doing it. Here is just an example of how you can do it, how you can create these structures automatically. It’s not probably going to be always the 100% correct way, but I just want to show you guys how I would do that to very quickly help me to generate my standards inside of ignition that I potentially already have or standards that you are potentially creating inside of the ignition system. So I hope that was insightful. I hope you guys have some lunch left. It’s not cold. You were eating while I were talking. So let’s quickly finalize you up here for the last 3 minutes that we’ve got left. 

All right, so I’m going to go back to my presentation. So thanks a lot, guys, for that. I hope it was insightful. This is the first one we’ve done. I would love to get your feedback. If you guys have topics that you can maybe suggest as well. We would love to hear your topic suggestions for potential next sessions. We already configured or sent out mailers for the next two that we’re going to have. So the next one that you would have been able to register for is the Canary one for the Canary Time series historian. 

And what I’m going to do there is I’m going to actually take this demo that I’ve just done and I’m going to show you guys how easy it is now to take your control module and how do you go and historize all of those bits and pieces into a time series historian like the Canary historian. And I want to show you guys two methods that we can do it in that scenario as well. There’s some great native capability and native integration between the products. So as we expect, you should be able just to tick a button and that tag should appear in your historian and it should historize. And I’m going to show you that in our next session that we have. That next session is on the 7 August. Please register for that one as well then before we end up with. 

We almost done with our offices. So they’re almost done. They’re busy fitting out our training room. We are starting to populate our training schedule on our website. So please. It’s probably not going to be live today as yet with the training schedule, but please have a look at it next week. Element eight co za our training schedules are on there. We’re aiming to have our first ignition call training session the week of the 17th to the 29 August. For our partners, it is free. For end users. We do offer the training as a cost. Obviously that will be done through our partners as well. But from our partner perspective, it is free. The first one will be the core training that we’re going to do. 

Obviously, guys, we are a little bit sensitive around Covid the restrictions that we have, so we cannot pack our training room to full capacity at this point. We must adhere to social distancing, et cetera. So it will probably not be a full room of 15 people. It will be probably just for now, limited to about seven. Just to make sure that we keep safe and that we adhere to those rules, but feel free. If you want to register for that, you can contact that. It will be in our offices in four ways here in Johannesburg. All right. With that, I say thank you very much. It’s on top of the hour. I hope you guys have a great rest of your Friday. Thank you, everybody. Bye.