- 24 min
Introduction
Version 7.1 is a Service Pack for the major 7.0 release. It uses .Net 8 and includes several new features, performance enhancements, and bug fixes. We look closer at what’s new and what you may have missed, including a new modern Config Tool, Multi-platform support, new Data Sources, and Consumers!
SPEAKERS:

Transcript
00:10
Rikus
Good afternoon, everyone. I’m going to chat to you a bit about Flow and get into the new things that we’ve implemented since version 7. I think there’s a few people that are not aware about all the new features and all the new technologies. So I’m going to get into just the basic platform that Flow can run on. So Flow is compatible with Docker, it’s compatible with Linux, and it can run on the Windows ecosystem. So fully cross platform and it uses Net8 to do so. Just some basic information. So what I’ve got here today for you guys is a simple demo and just some background for those of you who are not familiar. But Flow, basically you’ve got a model view, you’ve got a deployment configurator, you’ve got. You can configure your templates here.
01:02
Rikus
This is where you would configure your calendars, your shifts, attributes, some enumerations and some other cool stuff. In terms of messaging, you would send out messaging in this section. So you would configure your notification service over here. And this is for your data sources and your charts. So this is just a basic rundown of the product so that you are. Are not completely lost when I get into things. I think first off, when you start with a new Flow project, the first thing that you would want to do is connect to your data sources. So we can do that simply by configuring a SQL data source in this case. And this is just looking at an MES database sitting on the same machine and I can test it to see if the connection is valid and I’m able to communicate.
02:06
Rikus
But this data isn’t really readable. It gives me the table structure that nobody, except for maybe a few DBAs, can actually utilize. So what we can do is we can actually provide a definition file to the same data source. And I’ve got it configured under just a different one, just for demonstration purposes. But I can configure a definition file and with that definition file I’ll be able to. Sorry, sometimes does this. Okay, again, perks of live demos. So it’s. Let me just reconnect the Flow system. So it’s supposed to give you a tag view similar to what you would see in the model view. And in here I have a few tags configured. I’m going to have to restart Flow and I’m going to jump into timebase while that’s loading. This VM is extremely slow, so just bear with me.
03:23
Rikus
Okay, let’s rather jump into timebase whilst we are Waiting for Flow to open. So I’ve got timebase running on this machine and at the moment, because it’s in a beta state, you’ll have to run these manually. There will be a nice configurator and a bit of an admin tool for you guys to utilize when the full release comes out. With timebase as well, there’s full documentation on how to get your data from your Historian to wherever you want. So it’s done through a REST API and you’ll see there’s a lot of documentation and we utilize swagger to allow you to test and play around with. But let’s get into the data source again. With timebase running, I should be able to browse the timebase Historian. We just make this a little bit larger.
04:27
Rikus
So what it’s supposed to look like is it’s supposed to give you a namespace. So in this case I’ve got the time based Historian running and it’s simulating data for four fillers, five fillers actually. So I’ll be able to utilize that a bit later. But in terms of the MES system, after applying a definition file, it will also give me the same type of namespace. And here I’ve got an SKU and a work order number that I’m going to utilize. So let’s start by building a small model that you guys can see how that would look like. So I want to build a filler and start logging and add some operational context. So that operational context would be the running state of the filler. But also we’re going to log the total volume produced.
05:21
Rikus
So let’s start by bringing in this SKU and work order number to the tags. So let me. It’s on tag, so I’m going to create those. So there’s my SKU and my work order and if I open the tag. And the concept of tags is a bit different to the concept of measures. So what a tag is actually just a container for configuration that we know what we need to do in order to fetch the data from the data source. We’re not replicating the data into flow. The data still lives in the data source. We just know based on this configuration where to go and fetch it. And you can see there we have a work, in this case an SKU coming through and there is the number. Okay.
06:07
Rikus
What we then need is we’re going to do this between multiple data sources in order to get the most out of our data. Previously in Flow, we did not have this capability. You could not mix data Sources. When you want to retrieve data from one data source, it had to be all the data had to be in that specific data source. Now, tags gave us the ability to mix and match data sources however we want, and that is done through tag calculations. In this case, we’re not going to go into too much on that. We’re just going to create more tags for first the finished state and we’re going to call this state and we’re going to do one for the product, which is quite essential. Okay. No typos. Okay. And I’m going to bring in the total flow.
07:07
Rikus
So I’ve got a little bit of a temperature that I’m going to utilize a bit later and I just want to confirm my naming schema. So here’s the flow that I’m going to bring in and this flow rate I’m going to actually aggregate to an hourly value and it will be of a counter retrieval for the event. I need to generate some event data so that I can use this event as context for this measure that I just created so that I can understand how much I’ve created for a specific run of that filler. So what I’m going to do is I’m going to say, listen, I’m going to start this event when my state tag reaches a value of 10, because that is the starting value. And I’m going to stop this event when it reaches a value of 0.
08:04
Rikus
Additionally, I’m going to add three model attributes. The one is going to be called SKU for the SKU number and I’m going to add one that’s called work order for the work order number and I’m going to create one that’s called product for my filler product. Okay. And then I’m just going to take these tags and I’m going to drag them in so that we know where to go and fetch the information. And for the product I’m going to assign an enumeration. Now, this enumeration is defined here, but it doesn’t contain any values yet. Now, enumerations can be linked to static values or you can have them linked up to lookup tables.
08:56
Rikus
For instance, a SQL data source, I can have all my enumeration values in a SQL table and I can write a query using a data source to pull that information at the process time into the flow engine and it will assign the correct values. So I’m going to create, I’m just going to create five products and I’m not going to give them any special names because it’s difficult to type with one hand and it’s just going to be product 1, 2, 3, 4 and 5. So now I know that I’m going to assign use that integer value and then assign it a string value based on the enumeration lookup that it will be doing. So let’s deploy this event and then just wait for the data to come through.
09:45
Rikus
But in the meantime, I’m going to, just to save a bit of time, I’m going to add this event as context on this measure that I created. And I am keen on seeing the sku, the product and the work order numbers coming through on this specific measure as additional context for this production run. So let’s see if we have data and you can see there are my events and then I’m going to deploy this measure and let it start processing. The issue with this approach is that typically this is not how you would scale an operation. Scaling an operation means building templates.
10:33
Rikus
And with templates you can standardize on how you would want your data structures to look, how the data needs to be cleansed, how it needs to be processed, and maybe what I want to do with that data after I’m done processing, maybe sending that out into my UNs, sending it to an ignition system, potentially back into canary to be stored and so forth. So what I’m going to do is I’m actually going to link this filler that I just created to the template that I created previously. And just to show you that I’m not doing anything funny, it’s an exact replica of what I’ve got on the left. So let’s start by just linking the events and the metrics and also the folder. And I’m going to update this one and it should just pull and link everything up to the template.
11:32
Rikus
So once that’s done, I’m going to instantiate four more fillers because I’ve got five fillers and I want to make it as simple as possible. So in this case I’m gonna just drag the filler template to the model side and it’s gonna bring up the screen. Now, what this is essentially a bulk instantiation configurator. So I want to instantiate four more fillers and that’s gonna be filler two to filler five. And my equipment name in this case is if I want to format it in that specific format and the same with the filler number, but I’m only going to pad it with zeros and then you can see this is what it’s going to look like after the instantiation into this Multiple Sources folder. So I’m just going to click continue and it will create four more templates for me. There we go.
12:33
Rikus
And I’m just going to deploy all of them. So if you were wondering how my naming convention just works, I make use of concept in flow that we use that we name model attributes. And you can use model attributes in configuration on the template side to determine and dictate what the naming standard should be on the model side, if that makes sense. I can also use model attributes as a means of retrieving the relevant information. So as you can see, I’m using the model attribute in the actual tag to determine where it needs to go and fetch data. So this is all replaced during runtime. So I can change the model attribute at any time if I made a mistake and it will just work during the runtime when it executes in the data engine.
13:26
Rikus
So now you’re going to ask me, well, what does that information look like? It’s busy backfilling. Sorry. As I said, this is a bit of a slow vm, but as you can see, there’s my event context I’ve only added on the template side. It seems I’ve only added the product as context in my measure and not all three of the. That’s why there’s a discrepancy here. But yeah, not all three of them. So let’s now say I want to have my total production between all five of my fillers. So previously in Flow, it was a bit of a frustration. You would say, listen, I’m going to take all of these values and I’m just going to drag them in one by one, go and find them in the tree view somewhere.
14:25
Rikus
And I would need to write a little bit of an expression to get all the values to sum up nice. And I would then have to deploy. This is a bit of a frustration, especially when you’ve got very large sites like a mine. You’ve got multiple mines, for instance, in a specific region and all of them use the same template. And you want to get all of that information and get an A value at the end of the day that I can potentially give to my management team, to my team that sits at an enterprise level, so that I can show this is the total production for this region for this specific mine. The same is true for any other industry. But just as an example. So I can deploy this and it will just sum those two up.
15:11
Rikus
But a new feature in Flow is something we call relative calculations. So what relative calculations do is they actually scan your model and determine, based on a preset filter that you determine what measures should I be summing, averaging, maybe do some other advanced calculations on. And that is simple enough to do. And we’re going to do this nice and live. We’re going to do it using a measured collection. So in the measure collection, I need to define. Listen, I want to sum the flow value. So I’m going to first look at the value where the measure name equals flow. And I want to also put an additional filter because I might have more than one measure named flow to say, well, it needs to end. The metric needs to end with production tags because we only care about the production side.
16:13
Rikus
So let me just type that out, production tags and I can then do a bit of a refresh and see, listen, here are all the measures that should be. So I’m just going to remove this additional one that got created and let’s just refresh that. And you can see they are all five of my templates. And in the calculation side I can just define and say, well, take all of the measures in that specific collection, take their values and just sum them. I mean, that’s as simple as that. However, maybe you are doing something, maybe you’re doing an average. And one of the fillers or one of the pieces of equipment only got commissioned at a later date. So it will affect averages, it will affect efficiencies. And you might not want that specific piece of equipment in my calculation.
17:18
Rikus
So what we have to fix this is we have something that’s called a commissioned date. And let’s say the commission dates of that specific piece of equipment is the first of this month. So I’m going to set that and I’m going to go back to this calculation and say, well, listen, let’s refresh this collection. And did I set it or not? I did. Okay, I might need to refresh it just by closing it and opening it again. And I’m gonna validate this again. And now you’ll see that I’ve got my two dates. So the first four fillers for the first date range and the five fillers for the second date range. So it will sum all of these up for moving from. And if you’re unfamiliar with flow and you don’t understand the dates.
18:38
Rikus
So how this works is it will use this group of measures from 1 January this year moving forward until it reaches 1 October, and then it will use the next set of measures for this. And we can define multiple measure collections just by defining new calculations and defining new dates for them as well. So it’s as simple as doing that, making life a lot easier, especially when you’re doing large projects and you want to do it as efficient as possible. We have customers with 60 of a specific piece of equipment. So imagine having to drag 60 measures into a calculation can be extremely time consuming. So I’m just going to deploy this and that is relative calculations.
19:30
Rikus
Also a nice thing that we can do is I’m just going to create a quick report is a lot of customers struggle with building out reports for the same reason. As you might have a lot of sites, you might have a lot of information. And I can utilize templates in the same way on reports to get information quickly and easily displayed on a form. So I’m just going to create a simple time based chart or time based table in this case for the hourly and using that and my template, I can quickly drag in my template that I created and let’s make this period just for values for two days. And if I open it will automatically populate hopefully the values for all five of my fillers. But this isn’t really useful.
20:35
Rikus
Again, we can come back to the model attributes and we can say listen for the name or the title instead of using filler 001 production doesn’t really make any sense. Let use filler and we’re gonna put in our model attribute and it’s as simple as dragging that model attribute that’s called filler number into here. And we’re just going to say flow and when I refresh my report, it should have a nice readable value now. And that’s how you could easily roll out and standardise templates. You can easily build your reporting structure in flow and it makes it very scalable, especially for large implementations. Okay, that is what I have for you for today. I don’t know if there’s any questions that anyone would like to ask on either time base or flow specifically regarding what I’ve shown or any other questions. Okay, nothing perfect.
21:56
Rikus
Just if you guys have anything that you want to ask potentially just reach out to me after the events. I’ll be glad to be happy to take you through potentially more complex implementations. There is a nice demo running outside as well. If you guys want to play around with it and if you’ve got any more questions, please feel free to ask. Thanks.