Design Like a Pro Webinar Series: Part 2
Developing Dynamic HMI/SCADA Projects with Speed and Precision57 min video / 47 minute read
About this Webinar
Designing projects can take a long time and be filled with hours of tedious development tasks. Your workflow can be streamlined by using powerful time-saving tools.
Don: Good morning, everyone, and welcome to today's webinar part two: Developing Dynamic HMI/SCADA Projects with Speed and Precision. This is the second in our Design Like a Pro series. My name is Don Pearson. I'll serve as the moderator for today. I also serve as Chief Strategy Officer with Inductive Automation Software.
Don: Just a brief background in terms of where we came from as a company. We started in 2003. We really were pioneers in database-centric web-launched HMI and SCADA systems. We're in over 60 countries now, we're in a variety of industries. You can see a number of them just on your screen in front of you. Additionally last year, Inductive Automation was recognized by Oracle and the Automation World for Innovation. Oracle's Duke's Choice Award was awarded for innovative use of Java in the industrial software industry, and the Automation World Leader's Choice Award was awarded for innovation in SCADA information management. We're very, very committed to innovation and very pleased to have achieved those awards this year.
Don: Just a brief introduction to what is Ignition. It's a web-managed platform with web-launched clients, web-launched designer. And if you think about it, what can it do, HMI/SCADA/MES functionality, historian functionality using any SQL database, business applications, recipes and batch management functionality. Practically anything that you can imagine, it can do. What makes it special and why it might be important to you? It's sold by the server, which means unlimited free web-launched clients, free concurrent web-launched designers, free data points, database connections to any SQL database, free unlimited screens, free projects per server and free scalability OPC UA server and drivers. It's totally cross-platform, Windows 32 and 64 bit, Linux and OS X.
Don: The Design Like a Pro series, we actually hear it quite often from our customers about how they're using Ignition and they're doing very great creative projects with it. They're increasing productivity, getting great results in their organizations. And part of our mission is to offer the Ignition community the tools and support it needs to design great projects, and that's why we're offering this three-part series of webinars and whitepapers. And you can see, we did part one already that's laying the foundation for successful HMI/SCADA projects and now we're going into part two today.
Don: Just a little bit of review and reminder, those of you who are in the first one. In part one, in case you missed it, we covered the project planning phase, three major project development phases, questions you must ask to define your project, what makes up a solid project architecture, and how to create a plan of action. If you did miss it, you can go to the resources section of our website and you can watch part one, and there's also a downloadable paper that goes along with that.
Don: As we look at part two in this webinar, we'll be covering important time-saving tips so you can develop dynamic HMI/SCADA projects and do it with speed and with precision. Looking at it, what we see as the biggest challenges in developing a project is to avoid getting lost in endless and tedious development tasks. And here are some things that we'll cover today to help you develop projects more efficiently. Number one, the advantages of developing component templates and how to use them. Number two, what a user-defined type or UDT is, and why you should use them. Number three, the power of using component templates and UDTs together. And number four, what are parameterized windows and where to use them on your project. And if you haven't done so, you can go to the resources section of our website to download a companion whitepaper for this webinar and give you more information how to save time, and how to handle the frustrations with developing HMI/SCADA projects.
Don: I just wanna make a comment just about Ignition here. It is true that the information we'll cover in this series can easily be applied to your project and development process no matter what SCADA software you are using, important principles regardless, but Ignition is designed specifically to empower you to design great projects, to do it quickly at an environment that's really user-friendly. It's created to alleviate specific pain points that could impede the progress of your project and it's full featured HMI/SCADA/MES software. It's equipped with a full range of powerful time-saving development tools, some of which you'll see being used today. And really, I think if you get down to it, with unlimited tags, clients, connections, free concurrent designers, powerful object-oriented design environment, Ignition is a software that is designed to help you design great projects. The goal we have is to give you the power to stop wasting precious development time doing tedious repetitive tasks, so you can spend more time making your projects great.
Don: With that as a background, I wanna get us into today's presentation. First, I'll introduce Travis Cox. He's Director of Training and Support Services and he's been teaching our training courses since the very beginning. He's trained hundreds of people. So, Travis, could you just say something about your training courses and a little introduction of yourself?
Travis: Hello, everybody. Yeah, again, my name is Travis Cox, I am the Director of Training and Support Services and I've been with the company since the beginning. I have trained hundreds of people on the Ignition platform and we offer a variety of different training classes. One that it covers the core basics of Ignition, that's a five-day class. We also have a three-day advanced course. And we also have a course on our MES suite of modules for OEE and downtime. That's my little background there.
Don: Great. Thanks, Travis. And then, Kevin, I'm gonna introduce you and let you introduce yourself, and then you're gonna take over from here. But Kevin is our Lead Design Support Engineer in the Design Services Department. Design Services provides expert consulting for designing and implementing Ignition HMI/SCADA projects. So, Kevin, as you take over, just maybe introduce yourself a little bit and say just a bit about your team at Design Services and what you do.
Kevin: Sure. Thanks, Don. Our team over here at Design Services with Inductive Automation, we do quite a range of things but our main activity is just helping customers accomplish whatever they need to do with their projects. I won't go into too many details there but pretty much if someone has a problem or needs some help with one of their projects or wants some database design or project design, we help out with that. I'll get started here on some of the meat and potatoes of this presentation. We've got three major project development phases and this is kind of a review. And the way of review, there are three main phases in the development process of an HMI/SCADA project. Project phase one is planning and our last webinar went over that some. Proper planning is vital to your project because it lays the foundation for your project's success. That's really true. If you want to get some more information about this, you can go back to our last webinar. You can take a look at our first whitepaper on this subject. And it has a lot of good information in there. The second phase here, design is kind of what we're focusing on in this webinar and it's... The design phase is where all the pieces of the project are assembled. And it really makes a big difference for your speed and staying on budget with the project too, how well your design phase goes.
Kevin: Project phase three is startup. To finish a project, you must test and secure it so that it's a success from day one. That's gonna be the focus of the third webinar because it's really an important piece here too. So we've been using an example project, this is Widgets Unlimited and we're using Widgets Unlimited for all three of our webinars in our series here. Our sample project is from a manufacturing company and it makes widgets. [chuckle] And let's say Widgets Unlimited called us and wants to have Ignition help them make their manual process automated. So, we'll focus here a little bit more on the project phase two since that's what this webinar is about. There are four main steps in the design phase. Step one is setup. Before you can begin designing your project, you need to establish all necessary connections in your design environment. Step two is layout. Before you start on all the components of your project, it's important to design the project's overall framework and navigation scheme. Step three, templates. To design a project efficiently, it's important to create consistent templates and user-defined types to expedite development work. We'll be demoing a few of those in a few minutes here. And for development, the last step is to assemble and link together all components and screens that make up the project.
Kevin: And some of this is pretty straightforward and a little bit elementary but I will be showing you some tricks to save some time here. So, step one, we've got a setup. Before you can design anything you have to set up the design environment. In this webinar series, we'll be using Ignition. I've mentioned it a couple of times here, but this stuff really applies to just about any design software that you're using. You don't have to be using Ignition. Ignition has some features that give you a little bit of extra oomph that let you really design with a lot of speed. But some of the other HMI/SCADA software projects packages out there also have some of the same features and we obviously like our software and are going to promote it, but this is really universal stuff. So, continuing with step one here. In the last webinar, we covered information on how to set up the design environment in Ignition. You can download the last webinar if you need more information as I said earlier. Here are a few tips to keep in mind when setting up the design environment. It's a good idea to keep a connection checklist so that you have information for all the connections to your PLCs and databases. Tag organization. It makes a lot of sense to create a logical organization in your tag, either on your PLC or in your SCADA software or in both.
Kevin: And defining databases, it's a good idea to really set up a database schema if you're gonna be doing any more advanced database work. Step two here is layout. Using the project architecture we created in the planning phase, it's possible to lay out the basic framework of the project. We covered the navigation in our last webinar but here are some basic tips to create an effective navigation scheme. Consistency. You can keep the organization placement and display method for all the links in the same place on each page so users really have something to refer to and something to ground them as they go through the project, navigate through the different sections. Organization. Organize the screens of your navigation according to the importance and frequency of use in the project. So, the most used screens would probably go first. The set points and admin screens would probably be either in a drop-down menu or the last item there. Placement. Make sure project users are never lost. Put your project navigation in a location that's easy to use. You can put it on the left, you can put in on the top. We've got some demo projects that you can download that demonstrate that pretty well.
Kevin: And, display method. Whether you use text links, buttons or tabs, make sure to keep it subtle and consistent. And I'm gonna pass this over to Travis now who's going to talk a little bit about templates and show a few things here.
Travis: So we're gonna talk about the templates. Templates is the main area of discussion for this webinar, and basically, there are several different types of templates that you can create. And the main one is component templates. Another one, of course, is tag templates or UDTs that you can set up. But no matter what, there are two major advantages that make templates a powerful time-saver. Advantage number one is that using template saves time. You initially create a project because you can create the project once and use it over and over again. That's the main idea. Advantage number two is if you use templates in your project, it can make them much easier to change later on. If you make a change to the master template, it's reflected in all the instances throughout the whole project. So, the basic rule that we're gonna follow through this webinar is never do the same thing twice. When you have something that you're gonna reuse over and over again, then simply just make it a template in some arena for that. So, the first type of templates that we're going to make here are user-defined types, and so I'm gonna pass it back over here to Kevin for the user-defined types.
Kevin: Alright. I have the Ignition Designer open right here. As mentioned, we'll be showing this in Ignition, but this applies to just about any software that supports user-defined types, which is a small, small handful, but Ignition has support for this. If we click over to tags right here... Just to give you a little orientation, this is our tags browser by Ignition, and inside our tags browser, we've got some tags that are set up. We have this data type section that has user-defined types. So right now, we have a tank type. If we click over to our other tags, we have a few tanks, tank 101 through 105 for line one. I'll go ahead and demonstrate creating a new data type here. So I'll come over here, browse over to our device. We've got a control logic that's connected here. And then under "Global," I'll set up a motor and we can grab, say M1. And creating a new data type is as simple as dragging this over to the data types item, and then it prompts you. We hit "Create Type." Now we have a type there that we can call "motor," and it automatically has the right tags in there. One thing we'll do here is create a property and call this "motor number." Motor number will be used to indicate which motor number you're using with the instance of this type.
Kevin: And what I'm doing here is I'm switching the binding so that, for this tag path it uses Global, and then it's going to use M and then motor number. So that if our motor number's one, it'll be looking at M1; if our motor number is two, it'll be looking at M2. I'll go through and add these to the rest here. And then, I'll also add another property here called "Style" and we'll use Style a little bit later as Travis is demoing some of the template items. So now, we have our new motor type. And what do you do with motor type? Well, you create motors. So we'll tie this through. I'll put up a new folder here and then we'll split them up a little bit. But we'll call this "Motors," and inside "Motors," we will create new instances of our motor. And instead of just creating an individual one, we'll use this multi-instance Wizard, and it will create all four of our motors at once. So, call the tag "Motor," we'll give it one through four. And then under the motor number, we'll call it one through four there as well. And for demonstration purposes, we'll just give style one for the moment.
Kevin: Then we can hit preview. We see style stays one for all of them, motor one through four is created. I hit "Okay" and we have our four motors. So if we click in, we can see, here's the value, here's our amps on that one, and this is actually going through different tags. It all links through automatically. I'll create one more here, and this will be demonstrating something that's a little more advanced too, which, inside Ignition, you can actually have a UDT inside a UDT. So we'll call this VFD. Well, let me back up here for a second. I'll show you. We have a VFD data type inside our control logics. And the only difference between VFD data type and the other one is that it has an extra speed item here. So what we'll do is we'll create a VFD and then we will give that VFD a motor inside it. So "New Data Type Instance: Motor." So now we've got a VFD and we have another data type inside it that's a motor. I'll link that through. Then, we've got motor number here. So all we'll do here is we'll set up that same property and link that through, and then I will give it a speed item so that we have our extra tag here.
Kevin: So, I'll just drill down to grab one of them and then I'll link it through in the same way that I linked the other ones through. So, VFD speed, grab this, and change that out to motor number here. And just double check these and make sure they're set up. So, these are actually coming from M with the motor, which comes back into this and I can switch that out so that it actually comes from VFD, because that's our new tag path for these guys. So, I'll switch that in. For this guy, I'll switch it for this one. And this override is something that you can do with any property inside an embedded UDT. You can override any one of these items.
Kevin: I'll change this and that should handle everything here. What we can do now... So, we've got our motors there. I'll add another folder for VFDs. And then, inside the VFDs folder, we can go through that same wizard. So, we hit this "Multi-instance Wizard", go down to VFD, call it base name is VFD, so its VFD one through four. And then, we have our motor number here which is gonna be one through four, Style. We'll call this Style 2. And then, this is our motor number for the motor embedded data type there. So, do that, hit "Preview" it'll show that, but it's setting up the timings here. We hit "Okay" and now we have our VFDs. They link through to the speed and they link through to the rest of the tags. So, with this, I will hand this over to Travis who will take care of the next part of the demonstration.
Travis: Alright. So, we demonstrated there the UDTs and they are very, very powerful, these UDTs, because once you define that type once, you can go and make changes to it and you can add in tags and it'll propagate down to all the instances that you created. So, if I add a new tag to my motor, it'll automatically get added to all of my motor instances. If I were to add another tag to the motor that's inside the VFD, of course, they'll be added there as well. It propagates all the way down.
Travis: So, if I wanna set up alerting or do history, or something else on these tags later on, all I have to do is configure it back in one location on the data type. So, that's the main theme of this, is never do the same thing twice. Once you define it once, we can just go in and make a data type or a template out of it and you reuse it over and over again. That same thing applies to component template. When you are on a screen and say you're dealing with a tank. You put a tank on the window and you can figure it all the way you want. Then you realize when you go to copy and paste that you have to go in search, replace or change everything that's inside of that component. So, it's better to make a template out of that that you can reuse over and over again.
Travis: So, over here, in the top left, we have a template section of Ignition where we can create templates, and it's just really very simple. You create a new template and you give it whatever name you would like. So, we can call this motor, for example, and I can put stuff inside of that template. I'd say I'd go to some symbols. And let's go look for some motors or a motor here and I could drag a motor in there, and I can put an LED display in there. I can basically change the way I want this particular template to look. The idea is that if I were to use that template on a screen, if I go back here to a screen, if I come down to my motor, I drag it on to the window, I can drag as many of these things as I want onto it. Though I can use these things over and over again, if I make a change to it, I come back to the motor template, then add another LED display onto the window right below it, then of course, that would automatically propagate down to all of the places that I've used it. So commonly, your templates are going to work with the data types or they're gonna look at tags in the PLC.
Travis: So, we're gonna now show how we can hook that up to our UDT or just directly to a PLC value, if you'd like. Let me come back to my motor, my template, and I'll delete a couple of these things. So, here on my template, I can right click and go and add a custom property. This is basically a value that will be exposed to all of the places that I use it. So, let's say, I add one here and I call it "Motor UDT", and it could be any data type that you like. It could be one of the standard types or what's nice here is they can be actually tagged directly to one of your UDTs. So, I can use that motor or that VFD, or any one of these for that matter. Say, I use the motor. I can press "Okay" and I can see that down here on the template parameter. So, again, if I were to use this on the screen, the HMI instances here, they're both going to have that same template parameter that I can link to a tag. And so, if I already have motor tags, I can actually bind them or link them to those UDTs. So, it works really, really well together.
Travis: So, once I have that template parameter on the template here, I can link things inside of it to that parameter. They'll stay here as my motor and I want to make this change colors based on the motor's HOA. We could apply a little trick here to do a tint on top and where I can bind the paint of that particular component to our property here and flex our motor UDT, it's the HOA. If the value is zero, we can make it red and do some sort of transparency so I can see through it a little bit. I can apply a tint, essentially, on top of this image. Again, I'm gonna do the same technique on all of these. We'll do three different colors. Do the green again here and then the two, we'll do a nice little blink between yellow and orange. It's pretty common for that kind of style.
Travis: So, now, I have my number to color translation there and of course, my template, it's not really showing any status right now because it's not linked to anything, it's just sitting there in a generic fashion. So, now, I could drag down to, say, the LED display and I wanna put some amps right below it. My motor has amps as well, so I'm gonna put a little LED display and a label that shows my amps. So, then I can link my LED display to part of that UDT. So, again, I go expand my motor UDT, I have my amps property or values that I can link to and I'm gonna make my template a little bit smaller now 'cause I don't need that much real estate for it. So then I come back to my window, let's delete this, and I could, again, drag my motor onto the window, my template, and I could do it as many times as I want. So drag a couple of them on here. Then on the template parameters, those properties, I can link these to tags. So, I can link that to some of the tags that Kevin already created.
Travis: So, my motors, there's my motor one, two, three, etcetera. So, I go and press "Okay", and on that one and on the second one, I could link that to a tag which would be motor two. So, it is very easy to link these templates now to various UDTs. And so, if I link it to this single UDT, everything that's inside that UDT is accessible to my template. So, I can add new things to it, I can really configure this any way that I want. Now, some of the nice things that we can do with templates is... Again, I never want to, basically, make the same thing twice. Let's say that we have 10 different motors and five of them are one style and another five of them are a little bit different style, maybe an older model, maybe they look a little bit different. We can still have one template that takes care of all this and all these scenarios.
Travis: We come back to my template here. Then on my motor, my UDT, I can add a memory value, that's the style, and I can use a style that's part of my template. So, if I add something new to my UDT, of course, it's immediately accessible to all of my templates. So, here I can say, "Well, rather than maybe this style here, I'm gonna group this one together." Rather than this kind of image, I can say, "This image is visible if the motor UDT's style... " Let me go ahead and close this out, and come right back into it. Again, we come back up here to my image. It's gonna be invisible if the motor UDT, if it's style, that's the memory value, is equal to zero. So then, I can put another one on here. Let's go back to our symbol. Let's find another different type of motor. Let's say that we have this one right here, a little bit different style. I drag this one on my window and I'm gonna put it right at the top, make it a little bit smaller, do my same number to color translation on that one. So, I'll go and get to my HOA. If the value is zero, we do the red, same kind of idea as far as the number to color translation is concerned, and we'll blink with orange.
Travis: So, let me actually put that one right back on. I did that a little bit prematurely here. The idea is I can put two different types of images on this window. The second one will be visible if that motor UDT style, if that is equal to a one. So, now, I have this extra style memory tag on my UDT over here. Here's my style. If the value is zero, it's gonna be one type. If the value is one, it's gonna be a different type. So now on my window, let's say that this motor two over here is actually a different style. Well, I can come over to my UDT or my motor two tag, and there's my style, I can just simply change the value here to a one and now I'm looking at a different style. And so, again, if I want to make a change to that particular template, then of course it would augment to propagate down to my window. So, I never have to make the same thing twice, I can reuse these things over and over again.
Travis: Now furthermore with templates, we can put templates inside of templates just like we did, UDT is inside of UDTs, we can do the same idea. And that helps us because if I have a VFD motor, all I have is an extra speed. Well, I don't need to redo this motor again because I already have it. So, we, again, never remake the same thing twice. Let me make another temple here, I'll rename that to VFD and I could put the motor template just write it right into this VFD. And let's say that I just wanted to add right below it an LED display, that's gonna be the speed. So, again, on this one, I can add a custom property, that's gonna be my VFD, and that would be the data type that Kevin created called the VFD, and I can now essentially link all of this to the VFD. So, if my LED display here can be linked to my VFD UDT speed. The speed there was actually a string. Let's go ahead and make that not a string, let's make it an integer or float. I think it was a float.
Travis: So, again, I can link this to my VFD speed. So, let me go ahead and refresh my UDT. Try it one more time here. So, that is linked to my VFD's speed and I can link, of course, the other one to the motor that's in there. And the idea is now I have a UDT inside of a UDT. So, I can bring VFD on a window and I could link that to one of my VFD tags that I have. So, I can put UDTs inside of UDTs and I can put templates inside of templates to really save a lot of time. So, they really go hand in hand and I'm gonna turn it back over to Kevin to show you some of the time-saving techniques you can do with these components and UDTs.
Kevin: Yeah, I'm just gonna show one quick little trick here that lets you tie these together in a much more solid way. So, the developers over here decided that it would be a good idea to allow you to use this as a drop target. So, what that means I'll show you in just a second. So, I'm just going to select a drop target here and I'll switch over to the motor, and I'll set it up for the motor as well. And when we have this... And we've got a generic tank in here too, so might as well show it off with all three or with at least two of these guys.
Kevin: Okay. So, the tank's already set up as a drop target. So, if we go in here and grab our motors now, and these two are already connected but let's say we wanna go with motor three. It's a drop target. We can just drag it out here and it just pops up. Another one, it just pops up. Tanks are exactly the same way. Any other one that we've got set up here will work the same way too. So, for me, as a developer, this is a really, really cool feature because I don't have to worry about creating something on the screen, binding it, getting it all set up. I can just drag tons of things out here and then configure them, set them up, so they're all in line and move them around, and it's a real time-saver. So, the idea here is, again, to make things in one location and reuse them over and over again. It saves a lot of time.
Kevin: Now, one thing I wanna mention about this tank template that we created, it actually has a special property that was added to the template that's called label position. And again, it's one of the things where maybe I want the tank 109 to show up on the top or to the left, or to the right, or to the bottom. Some people would make separate templates for those because of where they place it on a window. Here, you can make one template, add a custom property to it that is like a label position and the value is zero for the top. If it's one, it could be to the bottom. If it's a value of two, it can be over to the left-hand side. If it's a value of three, it can be to the right-hand side. All we're doing is just basically making labels visible or not depending on that position. Kind of the same thing with the style of my motor but I actually, rather than putting out a property of the template, I made it a property of the UDT so that I can see the style when I expand the tag over in the tag database. So, I know exactly, if I'm looking at the motors, what file that we're referring to.
Kevin: There's a question here from, forgive me if I butcher your name but Gerald Butler, and the question is, "Is there a similar technique for changing the orientation of the object like you are doing with the style of the particular motor?" And the answer to that is yes. Similar to how we just did the label here, you can bind just about anything inside to just about any property that you want. And to give you an idea, if I go back to my tank, then up here, my top label is visible if that label position is equal to zero. If there's a bottom label that you see down here and there's a right label, if I make them all visible right now, you can see all the labels around that component and they're all visible on different values of that label position.
Kevin: So, the idea is you can certainly have one template and change orientation. The tank could be sideways in one way or it just depends on how you want to configure it, but you just have one template, one place to go and customize them later on. This is the major time-saving kind of stuff, whenever you put your information, one location, all you have to do to a modification later on is to go back into that one place. And this same thing applies for any sort of pop-up windows or parameterized windows where maybe I want to have a motor detail, a window that allows me to see more information about the motor, control the motor, see the same status and amps and possibly history and other things that we wanna put into that window. So, a lot of people would create multiple pop-up windows. Every pop-up window, that would be linked to a specific motor and they would copy, paste, search, replace. Another place that you definitely want to bring into one location.
Travis: So, I had this project. I have a pop-up window already created here or there's one that wasn't part of the skeleton project. I'm gonna modify it a little bit to make it work with my motor detail window. So, actually, I'm gonna call it, I'm gonna rename the window "Motor Detail". And... Good. Motor Detail. So, on the window here, the label at the top, I'm gonna call that "Motor Detail" and on the window, if I want to essentially pass parameters into a pop-up window, all I gotta do is add that custom parameter to the window itself. So, I come over here, add a custom parameter, I can call this parameter "MotorNum."
Travis: I can make an integer string, whatever I like. I'm also gonna add another one here that is the motor UDT and make data type a user-defined type, that is the motor value there. So, if I path in on the motor number a value of one, I can link to motor one here. So, I can basically bind my motor UDT to an indirect tag. So, based on whatever motor I path into the window, I can link to the appropriate tags. In my motors folder, there's motor one. We're just gonna replace the one with the actual value of the motor number that I pass in. So, if it's one, we're gonna be looking at motor one, all the values that are inside of that.
Travis: So, we can reuse, of course, that motor UDT. Why not? Put that on to the window here and I can link that motor UDT to the one that we just created so that it could be all set up. You could, furthermore, if you wanted to link it to an indirect tag, you can do the same sort of thing. But again, you'd wanna keep everything into one location. Okay. So then, furthermore, on this window, we have the motor information. We could put a button on here. Do you want to add more stuff to it? So, we could put an HOA button. Maybe you wanna control the actual motor. I can bind my control here to my motor UDTs HOA and make it bidirectional. I can also bind this to my motor UDTs HOA for the stats. Now I have this one pop-up window that I could reuse over and over again by passing a different value.
Travis: So, if we come back to this window here, maybe if I click on the image here at the top, it's gonna open that window. If I click on the template for that matter, it opens up that window. So, I come back to my template and on my objects that is grouped right here, I could put a mouse, click on it. So, when they click on it, it's going to open, let's say, the motor pop-up window with the motor detail here and I can pass the parameter. And the parameter I pass in is motor number. And the value, we can grab from the window and the actual motor UDT has meta information that is like tag name, tag path. I could put the number inside of it as a memory value, I can use something that's part of the UDT in order to figure out what I want to pass in to make it dynamic.
Travis: So, what I'm gonna do real quick is come to each of my motors, my motor UDT. I'm gonna add another memory tag here, that's the motor number that I can use, motorNum, make it integer so each one of my motors will have it. So, my motor number here can be a one. And motor number two can be a two, and sometimes it can come from the PLC. And so then, rather than, of course, using... Go back to my motor template. If I pass a value in, it can be part of that motor UDT, it's motorNum, path that right into the window and, of course, we'll see here. Oh, the idea is that we can use that to pass it into the window and simply, we can click on that to open up that pop-up window and we get provided more information about that particular motor. So, we're gonna pass this back over. That ends the demonstration portion for today. I wanna pass it over here to Don for some review.
Don: Okay, cool, thanks. So, you bring up the review slide and I will... I just want to say just a couple things in review and then we have Q&A. And while we're doing this, please feel free... I didn't mention at the beginning but some of you who obviously have been with us on many of our webinars, so you've taken advantage of the console Q&A screen. So, we're gonna go into the Q&A period. Please just type in your questions, we'll get to as many as we possibly can. We'll give ourselves about 10 or 15 minutes to do Q&A through the end here. And just in quick, quick review, obviously, you need to design efficiently to ensure project success. Time savers, like what you saw, component templates, UDTs and parameterized windows, they're really key to being able to develop your projects and develop them quickly.
Don: Ignition gives you the tools. As Kevin said, we may be slightly biased because we know Ignition can give you the tools to do it extremely rapidly, extremely efficiently, and that's what you need for project development time to be saved and to make your projects really turn out to be great. Please take advantage of our resources section of the website for more information because, as we said, the Design Like a Pro Series is... It has a third part coming up at the end of April. But the companion whitepapers and this particular presentation today will be available to you so you can review them or share them with others.
Don: In fact, Travis, can you just kick to the Q&A slide now? Go once more so I can announce the next one. I mentioned this but you can note this down if you want to, on April 24th, 9:00 AM, Pacific Time, we'll be doing part three for Design Like a Pro Series. Now we'll go back to the Q&A slide and it's over to you guys to give us the questions. I'll just start with a couple of overall general questions and then we'll dig into the ones that are ending up in the queue here. First, overall, just in terms of designing, how many people can design a project in Ignition at the same time? Kevin, you work with designers.
Kevin: Sure, yeah. With the Designer, you can actually have an unlimited number of people working on a project at the same time. So, if you have a design team of 10 people, all 10 people can be working on the same project, work on different windows inside that project together and then you can save and then update the project, and see everything that everyone else is working on.
Don: Good, thanks. Here's a question from Richard, "If you make a change to an instant, does it propagate back upward to other instances?"
Kevin: I think that was... Let's see, 925. That was probably when we were going over UDTs. Yeah. So, the UDT inside the UDT. If you switch out the different stuff inside that UDT, the motor UDT for example, into VFD, UDT will automatically change to include those new changes that you make on whatever UDT.
Don: Great, thanks. Travis, I think that you went over this but in Ignition, can template UDTs be nested in other templates or UDTs?
Travis: Absolutely. With the template like I've shown there, we could put a template inside a template. With UDTs, we could put UDTs inside of UDTs. But the UDTs actually have a little bit more flexibility than the templates in that it actually inherits it as well. You can create another UDT that derives from a previous one and you can add stuff onto it, you could put them inside of each other, you can nest them, you can override features of the new UDT. It makes it very flexible.
Don: Great, great. I'm gonna read this question. It's a bit long and I'll just let either one or both of you to comment on it. "If I'm changing the orientation of an object, it may be that the other elements of the object need to be reoriented as well. Example, I want the motor to be vertical since it is connected to an agitator in a tank. The agitator's peak can no longer be below the motor because the value will appear inside of the tank. The speed needs to move to the left or to the right of the vertical motor. I only wanna change the orientation in one place, not for each element of the object. And the basic question is, is this possible?"
Travis: It certainly is possible. Say, for example, the image, the motor image. It has properties for the angle, the rotation, and you could basically link that to an expression that if it's in one position, it's one angle, another position, another angle. And you can simply make things move around, you can have multiple and change the visibility, however you want to make that one template. But again, you wanna have one template for it, not multiple because that way, it makes it much easier to work with.
Don: Great, thanks. "Any way to copy and paste number to color translations?"
Don: Right now, there isn't a way. You can actually create a default number to color translation. You can specify that in the Designer so that we can... Every time you go into it, you have some default one rather than the black and white that we were showing. That way, you could start from that and always change it up a little bit. If you were to copy and paste the component, it automatically would come across. There is a way to expand that out into one location as well using a feature we have called Styles.
Travis: Great. Thanks, Travis. Next one is, "Is there a way to path the entire UDT directly as a parameter to pop-up windows? Why did you need to add a motor number property to the UDT to use in the binding path?" Question from Alex.
Travis: That's a good question, Alex. Right now, we are working on... Since this is a newer feature for Ignition we're working on, the ability to path in the actual UDT to the window and not do indirect tag reference like I showed in the demonstration.
Don: Great. So, as you can tell, I'm just reading these questions off the line and throwing them at you. So, any question you guys got, we're doing the best we can to answer them. "Is there a theoretical tag limit?" Mr. Liang asked that question.
Kevin: That depends on your hardware. There is no actual tag limit in terms of what's available but depending on how beefy your system is, that's gonna depend on how many tags you can actually run. Your update grade makes a difference if you're logging to a database, it makes a difference too.
Don: So, it says, "When will this version 7.4 with templates be completely released for use in production environments? I was using 7.3.4 and now I'm asking about templates and when they'd be available."
Travis: Right. So, what we were demonstrating today was our first lead candidate of 7.4 which had template UDTs. We'll probably have the final release, I'd say, within the next few weeks.
Don: Cool, thanks. This works very well with the Control Logics products which allow you to nest UDTs. So, this, I think, is just a comment that it works very well in that setting. Okay. Next question is, "How to automatically adjust the scale of a template when I use it? For example, your motor templates look different than they do in the used screen. When you change the size of the template, can you have the used components adjust automatically?"
Travis: So, we're actually working on that right now. What it does is if you change the size of the template, then it will shrink or expand the template on the screen because the screen size of that component will be a little bit different. We're working on maybe a way of having that propagate down automatically.
Don: Great, thanks. So, just overall, maybe you can repeat this, "A place to go to get more detailed instruction on how to use Ignition overall." And maybe, Travis, you could just mention more on the training updates or stuff at this time.
Travis: Sure, absolutely. There are several avenues to explore to get help. We have a really, really great user forum on our website that has a lot of activity and a lot of users that are registered for it. Just inductiveautomation.com/forum. You can ask questions and get answers by us, and of course, by your peers. That's free. We have email. You can email us at firstname.lastname@example.org. You can certainly give us a call. There's several different ways you can get answers, and we're gonna be continuing to have more webinars and there's always good things that will come out of those, and they'll be on the website. The recorded version will also be on the website shortly after.
Don: I just had to say, it's an overall commitment, not only this series here in terms of Design Like a Pro but also, just overall, we try and make everything we do available. We save archives, make it available to you and we're continuing to come out with whitepapers. And it's really based on your feedback of what you think would be valuable and where we can put our attention, both in terms of, obviously, software development and also in terms of the availability of what gets done on the forum, what gets done on our website. So, your feedback is welcome in that area. We're gonna try and get to a couple more questions before we finish off our hour. "What is your experience with the communication between the Ignition clients and Ignition service if it was not a local internet network and it was kilometers away from each other?" Do you wanna comment on that, Kevin?
Kevin: Sure. It works well in either case. Obviously, when it's a local network, you can get really quick response times. If you're miles away, if you're going over the internet, if you're going over VPN, the actual connection is going to be based on your connection speed, but Ignition does a really good job of scaling down. So, if you had a client that you knew was going to be running miles away from the server, kilometers away from the server, you could set up the tags that we're going to run on that client to update once every second or once every two seconds, or once every half second, and you can set up the number of tags that were actually sent to that client to be just a handful if you were having any performance issues. We find that, most of the time, people don't have performance issues and even if it's a distance away, the network connection can still handle most screens that people build without any modifications.
Don: Great. This is another question. "What kind of license do you provide?" I wanna mention that on the screen here that you have in front of you for our Q&A, we have Jim Meisler, Vannessa Garcia, Myron Hoertling, Shane Miller and Raman Rafagha, Melanie Moniz and Patricia Hoertling. These are our account executives and our business development folks. You're probably working with one or the other of them. We'll make sure that we follow up and get your question answered, but I mentioned unlimited tags, unlimited clients, license by the server, those are some things. Our pricing is also available on our website, so you can see whatever you wanna see from that, but we're happy to follow up the call and answer those questions very specifically for you.
Don: And Richard, thanks for your comment. He says, "I appreciate being able to view webinars on the website so I can go through them again and again." Certainly, we wanna continue to make that the case. So, with this one final question, if we don't get to all of these, we will follow up, "Can you create a colored table so all objects share the same colors? I wanna create a set of objects that will work on a black background but want them to change colors if the background changes to light gray." Any answer on that? Kevin, you wanna go ahead and answer?
Kevin: Sure, yeah. You could certainly store colors inside a database and then link items through or you can set it inside a data set and then link items through. We've done that on some projects where it'll actually be stored inside a database and then based on some parameter, it will pull in different color combinations, generate that color for the background or generate that color for the different items. It's all done through the property binding and a little bit of scripting in.
Don: Great, thanks. So, we're coming to the close of today's webinar. Not that you guys have to but I wanna give you a chance. Maybe, Kevin, any final advice to the end of part two of this thing? If you have it, fine, if not, that's okay too.
Kevin: Sure. Just get out there, have some fun with Ignition or whatever your SCADA software is, obviously. As I've said a few times before, I'm a big advocate of Ignition, I think it's great. But just get out there, play with it some, play with the new features and our forums are always open. We have a great support team over here and we're available, and we'd love to talk to you.
Don: Great. Thanks, Kevin. Travis, any final statements or comments beyond today's webinar.
Travis: Sure. I just wanna reiterate the whole point of this webinar here. The demonstrations, we wanted just a small demonstration to give you an idea of what the concepts are but the main thing is when you're developing your system, just sit down and try to think of all things that are in common and whenever you have things that are the same, you can generate templates, you can generate something in one location and go and reuse them over and over again. And if you were to do that at the beginning, I know people wanted to jump into it 'cause of time constraints and they want to just get right to it and get a product finish for their customers to start showing them stuff, that's all good but if you can really plan it out and write down on paper what's going on, it's going to help you save a lot of time later on when you come back to make modifications.
Don: Thanks, Travis. We've come to the conclusion of today's webinar. I do wanna say, just from the team here at Inductive Automation, that your feedback is welcome from today's webinar and as we go into the future and we really are committed for you to be successful. So, I hope that comes across in today's presentation. I'd also encourage you to schedule a demo and dig in a little bit more further with your specific questions, your specific situation, and let our team here give you an opportunity to really find out how we can be of value to you. So, with that, thank you so much for your participation today. Looking forward to seeing you in April with our part three of Design Like a Pro series. Have a great afternoon.