Adaptable Example
In the previous example, we hard-coded the distance between each of our assets when requesting a lag-corrected query.
This would mean the code wouldn't be able to adapt to changes, move between various different lines, or deal with flexible systems that adjust for specific products.
Using ARDI, it's also possible to load these distance values dynamically - although it is still limited to only working on simple forms of lag.
srv = ardiapi.Server('cupcake.ardi') #Get the 'Distance To End' property value for all assets down-stream from the oven... req = ardiapi.AQLQuery(srv) resp = req.Execute("'Oven' ASSET 'Sequence' RELATIONSHIP 'downi' RELATED 'Distance To End' PROPERTY VALUES") #Go through each asset and write its lag value to a dictionary distances = {} for value in resp['response'][0]['value']: distances[value['name']] = value['rawvalue'] #Same as the previous query, but replaces the fixed lag value with a dictionary lookup lcq = samplestream.LagCorrectedQuery(srv) lcq.RateLagQuery('Meters',"'Conveyor' ASSET 'Speed' PROPERTY VALUES") lcq.AddQuery("'Inspection Station' ASSET 'Brownness' PROPERTY VALUES") lcq.AddQuery("'Oven' ASSET 'Temperature' PROPERTY VALUES",lag=distances['Oven']) lcq.multiplier = 0.0166 lcq.shavems = True starttime = datetime.datetime.utcnow()-datetime.timedelta(seconds=60*60) endtime = datetime.datetime.utcnow() df = lcq.Execute(starttime,endtime,samples=3600)
This technique has several benefits..
Adapt to Line Changes
Sometimes, equipment gets moved. This isn't limited to portable hardware - even the 'fixed' components of a line can be moved after major system upgrades and overhauls.
In some cases, product lines are flexible, allowing changes between batches to cater for different products.
Being adaptable allows the system to deal with these changes, as long as they don't happen mid-range.
Adapt to Line and Site Differences
Loading the list of assets and their distances dynamically means you can apply the same logic to different process lines. Large manufacturers may have several similar systems producing different types of product - this way, you can use the one piece of code across each of those lines.
This also lets you drop your logic into different sites with minimal changes required.