I just read a forum topic about expressions and got the question when should you use an expression and when a gateway script. I have for example an operator screen in my project that has to show certain information that contains tags and strings. I made it with the use of expression but find it a bit slow when tag values change.
The information that is displayed by the operator screen is made as follows:
if ({Root Container.Label.Prompt} = 2,"<html>Huidige dosering:"+" "+ {Root Container.Label.MateriaalNaam}+
"<BR>Setpunt is" +" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+
"<BR>Actual is"+" "+ {Root Container.Label.actual} + {Root Container.Label.engunit}+
"<BR>Tolerantie - / + :" +" "+ {Root Container.Label.tolMin}+"/"+{Root Container.Label.tolPlus}+{Root Container.Label.engunit},
if ({Root Container.Label.Prompt} = 3, "<html>Recept totaal is groter dan de maximale inhoud van de tank."+
"<BR>Maximale inhoud is"+" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+
"<BR>Recept grote is"+" "+ {Root Container.Label.actual} + {Root Container.Label.engunit},
if ({Root Container.Label.Prompt} = 4, "<html>Tank is momenteel vervuild."+
"<BR>Deze moet eerst gereinigd worden en dit moet bevestigd worden"+
"<BR>voordat we teruggaan naar standby.",
if ({Root Container.Label.Prompt} =5, "<html>Tappunt is momenteel vervuild."+
"<BR>Deze moet eerst gereinigd worden en dit moet bevestigd worden"+
"<BR>voordat we teruggaan naar standby.",
if ({Root Container.Label.Prompt} =6, "<html>Recept in tappunt bunker komt niet overeen"+
"<BR>met receptnummer in voordeegtank.",
if ({Root Container.Label.Prompt} =7, "<html>Temperatuur is niet gehaald binnen de ingestelde tijd!"+
"<BR>Setpunt is"+" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+
"<BR>Process waarde is"+" "+{Root Container.Label.actual}+ {Root Container.Label.engunit},
if ({Root Container.Label.Prompt} =8, "<html>Voeg schoonmaak componenten toe!"+
"<BR>Druk hierna op bevestigen",
if ({Root Container.Label.Prompt} =9, "<html>RunID:"+" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+
" "+"BatchID:"+" "+{Root Container.Label.actual}+ {Root Container.Label.engunit}+
" "+"Productnummer:"+" "+{[Test SCADA Ignition]Action/Action0/hmi/materialCode}+ {Root Container.Label.engunit}+
"<BR>Productnaam:"+
"<BR>Reden : ",
if ({Root Container.Label.Prompt} =10, "<html>RunID:"+" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+
"<BR>Productnummer:"+" "+{[Test SCADA Ignition]Action/Action0/hmi/materialCode}+ {Root Container.Label.engunit}+
"<BR>Productnaam: ",
if ({Root Container.Label.Prompt} =11, "<html>Plaats een lege kuip onder het tappunt en bevestig dit erna.",
if ({Root Container.Label.Prompt} =12, "<html>Batch is gereed verwijder kuip onder tappunt en"+
"<BR>plaats deze in een menger bevestig dit erna!",
if ({Root Container.Label.Prompt} =13, "<html>Is het deksel van de aanmaaktank goed gesloten?"+
"<BR>Draai deze stevig vast en bevestig dit!",
if ({Root Container.Label.Prompt} =14, "<html>Wil je de weegbunker in de koelcel meespoelen?"+
"<BR>Dit betekent dat het resterende voordeeg eruit wordt getapt!",
if ({Root Container.Label.Prompt} =15, "<html>Voeg" +" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+" "+ "van<BR>"+
{Root Container.Label.MateriaalNaam}+" "+ "toe.",
if ({Root Container.Label.Prompt} =16, "<html>Plaats een lege bak op de weegschaal en bevestig dit",
if ({Root Container.Label.Prompt} =17, "<html>Voeg"+" "+{Root Container.Label.setpoint}+ {Root Container.Label.engunit}+"van"+
"toe."+
"<BR>Gedoseerd :"+" "+{Root Container.Label.actual}+ {Root Container.Label.engunit},
if ({Root Container.Label.Prompt} =18, "<html>Leeg de bak met componenten in de kuip.",
if ({Root Container.Label.Prompt} =19, "<html>Leeg de bak met componenten in de aanmaaktank."+
"<BR>Bevestig dit hierna.",
if ({Root Container.Label.Prompt} =20, "<html>Plaats lege kuip/bak onder de afvoer van de AMT."+
"<BR>Bevestig dit! Hierna zal de aanmaaktank beginnen met lossen!",
if ({Root Container.Label.Prompt} =21, "<html>Gevraagde materiaalcode komt niet overeen met aanwezig product."+
"<BR>Voordeegbunker :"+" "+{Root Container.Label.actual}+ "/Gevraagd :"+" "+{Root Container.Label.setpoint},
if ({Root Container.Label.Prompt} =22, "<html>Plaats bak onder stofafzuiging en laat het deksel zakken."+
"<BR>Deze melding verdwijnt automatisch.",
if ({Root Container.Label.Prompt} =23, "<html>Stofafzuiging is niet ingeschakeld of heeft storing."+
"<BR>Klik op bevestigen om door te gaan zonder stofafzuiging.",
if ({Root Container.Label.Prompt} =24, "<html>Controleer gist voorraad!"+
"<BR>Melder ziet geen product!"+
"<BR>Deze melding verdwijnt automatisch.",
if ({Root Container.Label.Prompt} =25, "<html>Geen voordeeg gereed voor productie!",
if ({Root Container.Label.Prompt} =26, "<html>Sluit 1 zijde van de slang aan op het tappunt bij"+
"<BR>de voordeeg uitvoer en de andere kant op het riool."+
"<BR>Bevestig dit als het aangesloten is!",
if ({Root Container.Label.Prompt} =27, "<html>Seal lekkage bij dispergeerpomp gedetecteerd!"+
"<BR>Controleer seal spoeling!",
if ({Root Container.Label.Prompt} =28, "<html>laagniveau sensor laag."+
"<BR>Nogmaals wankelen of leegmelden?",
if ({Root Container.Label.Prompt} =29, "<html>Lossen naar afvalbak is actief!"+
"<BR>Druk de drukknop bij de bak in om de klep te openen."+
"<BR>Let op! Zolang als deze melding hier actief is"+
"<BR>kan het riool niet gebruikt worden!",
if ({Root Container.Label.Prompt} =30, "<html>Bevestig het schoonmaak koppelstuk"+
"<BR>om de menger te reinigen",
if ({Root Container.Label.Prompt} =59, "<html>Plaats een slang van gistaansluiting naar riool en bevestig dit.",
if ({Root Container.Label.Prompt} =60, "<html>Verwijder de slang tussen gistaansluiting en riool en bevestig dit."+
"<BR>Let op! Na bevestigen draait het carrousel automatisch.",
if ({Root Container.Label.Prompt} =200, "<html>Deeg temperatuur is te laag."+
"<BR>Gewenste temperatuur :"+{Root Container.Label.setpoint} +"°C"+
"<BR>Actuele temperatuur :"+ {Root Container.Label.actual} +"°C",
if ({Root Container.Label.Prompt} =207, "<html>Carrousel kan niet veilig draaien door"+ {Root Container.Label.L4_ID_Unit}+
"<BR>Controleer dat de tangen open staan.",
if ({Root Container.Label.Prompt} =205, "<html>Kuip in hefkieper bevat laatste batch van recept"+"<BR>Graag bevestigen dat hefkieper is schoongemaakt.",
if ({Root Container.Label.Prompt} =183, "<html>Het caroussel kan niet veilig draaien doordat de kop of klemming van kneder 1 niet veilig open staat. Controleer de positiesensoren van kneder 1.","")))))))))))))))))))))))))))))))))))
The prompt parameter here is different based on the tag value of 'operatorIndex'
I made it in such a way that the operatorindex is passed into a tag path of the prompt tag. the prompt tags are different in the name based on a value like so:
[Test SCADA Ignition]Action/Action1/hmi/prompt
this is one of the prompt tag tag paths. There are more of these tags but with a different number then 1. It also could point to:
[Test SCADA Ignition]Action/Action4/hmi/prompt
So I made it like this:
But now my question. Is it better to make this in a gateway script so that my project stays quicker or is it not that bad to leave it like this.
Like I said at the beginning, If operatorIndex changes it changes the prompt value and the text that it displays, but there is a delay for like a second or two.
Is it better to make gateway scripts overall instead of expressions? and what are great examples of when you use a gateway script and when an expression.