Operátorok és utasítások
Az előző részben megtanulhatta, hogy az egyes kifejezések kiértékelésre kerülnek. Ez azt jelenti, hogy minden kifejezés megkapja az eredményt, és a fordító kicseréli a kifejezést az eredménnyel. De mi van akkor, ha azt akarja, hogy a PLC (fordító) ne kiértékeljen valamit, hanem csináljon valamit?
Erre a megoldás az utasítások használata.
Hozzárendelési utasítás és operátorok
A strukturált szövegben számos utasítás áll rendelkezésre. Mindegyik cselekvést vagy feltételt képvisel. Az akcióktól kezdve a strukturált szöveg legalapvetőbb állítása a hozzárendelési utasítás. Az állításokat a PLCOpen által kifejlesztett IEC szabvány is leírja, és az első, amelyet felsorolnak, a hozzárendelési utasítás.
Így néz ki egy ilyen utasítás:
Mit mond ez az állítás a fordítónak?
Azt, hogy vegye fel a B változó értékét, és az A változóba ezt helyezze el.
A PLC értéket rendel egy változóhoz. Íme egy még egyszerűbb példa:
Ez az utasítás felveszi a 10 értéket, és beleteszi az A változóba. Másképp megfogalmazva az A változóhoz a 10 értéket rendeli a fordító.
Mivel az A értéke most már tíz, egy újabb állítást tehetünk egy kifejezés megadásával:
Mikor ez a sor lefordul, akkor az A + 2 kifejezés értéke 12- őt ad eredményül. Ez után az A + 2 kifejezés helyettesítésre kerül ezzel az értékkel, és végül így látja majd a fordító:
Ezek után nincs más hátra, mint a 12 érték elhelyezése a B változóban.
Az utolsó dolog az, hogy a: = szimbólumot hozzárendelési operátornak hívjuk. Igen, olyan operátor, mint a kifejezésekben használt operátorok. Gyakran ezt a két típusú operátort tévesztik egymással és rosszul használják.
Gyakori hiba az egyenlőség operátor (=) használata a hozzárendelés operátor (: =) helyett. Annak ellenére, hogy hasonlítanak egymásra, óriási különbség van. Vegyük ezt a két példát:
Az első sor egy kifejezés. Mivel ez egy kifejezés, az operátort fogjuk használni a sor kiértékeléséhez. Az egyenlőség operátort a következőképpen értékeli ki a fordító:
Ha a jobb és a bal oldal egyenlő, akkor a kifejezés az IGAZ vagy az 1 értéket veszi fel. Ha nem, akkor a HAMIS vagy a 0 értéket fogja felvenni.
Néhány más operátorral együtt az egyenlőség operátor relációs operátor. Valamennyi relációs operátor TRUE vagy FALSE értéket fog adni.
A második sorban egy utasítás szerepel. Ezúttal az operátor kiértékelés helyett művelet végzésre használják. A hozzárendelés a művelet, és itt A értékének megadjuk a B értékét.
Mindezek után mindig azonosíthat egy állítást úgy, hogy megkeresi a pontosvesszőt. A pontosvesszővel adjuk meg, hogy a fordító mikor éri el egy utasítás végét.
A hozzárendelési utasításokban mindenféle kifejezés megtalálható, az egyszerű értékektől kezdve a számokon át a változókig és a függvényekig. Az összes kifejezést először kiértékeli a fordító, majd az értékelés eredményét felhasználja a hozzárendelési utasításban.
Feltételes utasítás
A hozzárendelési utasítás meglehetősen egyszerű volt: a jobb oldal értékét tárolja az eszköz a bal oldalon. A PLC program egy leírt logika, ezért az eszköznek döntéseket kell hoznia. Ezért használunk PLC-t vagy bármely más vezérlőt, hogy az aktuális állapotok alapján dönteni és cselekedni tudjon.
Egyszerűsítve: A PLC megvizsgálja az összes bemenet állapotát, és a PLC programja segítségével dönti el, hogy milyen kimeneteket állítson aktív állapotba.
Ahhoz, hogy a PLC programja döntéseket hozzon feltételes utasításra van szükség.
A feltételes utasítások kétféle módon történhetnek strukturált szövegben: IF és CASE utasításokkal.
IF utasítás
Az IF utasítások döntések feltételekkel. Annak ellenére hogy könnyű megérteni, még mindig tudni kell a megfelelő szintaxist a program megírásához.
Van egy speciális szerkezet az IF utasításokhoz. Ez azt jelenti, hogy egy előre meghatározott módon kell megírni hogy a fordító megértse. Mivel ugyanúgy, ahogyan a pontosvesszőket használják az utasítások befejezéséhez, vannak speciális kulcsszavak is az IF utasítás elkészítéséhez.
Így néz ki egy IF utasítás ST nyelven:
Egyes fejlesztői környezetek igénylik az END_IF kulcsszó utáni utasítás záró pontosvesszőt, van olyan amelyik nem. A Codesys fejlesztői környezetek, köztük az e!COCKPIT se igényli a pontosvessző beírását.
Észrevehető, hogy az IF utasítások szintaxisa nagyon hasonlít az egyszerű angol nyelvre. Az első sor két kulcsszót tartalmaz: IF és THEN. Ez a két kulcsszó között található a feltétel, amely egy bool értékű logikai kifejezés.
Logikai és numerikus kifejezések
A kifejezéseket két csoportra lehet osztani attól függően, hogy mit eredményeznek.
A logikai kifejezések BOOL típusú értéket, TRUE vagy FALSE értéket adnak.
Íme egy példa logikai kifejezésre:
Ennek a kifejezésnek kiértékelése IGAZ eredményt ad. A logikai kifejezés így is kinézhet:
Ezúttal a logikai kifejezés FALSE értékű lesz, mivel az 1 nem nagyobb, mint a 2.
A numerikus kifejezések egész számot vagy lebegőpontos számot adnak eredményül.
Egy numerikus kifejezés olyan egyszerű lehet, mint ez:
Ez a kifejezés a lebegőpontos 33.0 számot fogja eredményül adni, ezért numerikus kifejezés.
A BOOL kifejezéseket az IF utasításokban feltételként használják.
HA a logikai kifejezés értéke TRUE, AKKOR a következő utasításokat kell végrehajtás. (IF it is true, THEN do it.)
A PLC csak akkor hajtja végre az utasításokat a THEN kulcsszó után, ha a kifejezés értéke IGAZ. Ezt a következő példa szemlélteti:
A 3. sor csak akkor kerül végrehajtásra, ha A értéke 0. Ebben az esetben ez megtörténik. Az A változóhoz 0 értéket rendelünk egy utasításban közvetlenül az IF utasítás előtt.
A fenti példában egy változó értékétől függően döntöttünk. Bár ez meglehetősen egyszerű döntés volt, ezt már lefordíthatjuk valódi PLC programozásra.
Tegyük fel, hogy olyan programot szeretne készíteni, amely PLC kimenetet állít be a bemenet állapotától függően. Egy egyszerű IF utasítással ezt megteheti strukturált szövegben:
Bár ez a példa csak egy nagyobb program része (az INPUT1 változó egy bemenetet, az OUTPUT1 pedig egy kimenetet képvisel), ez szemlélteti, hogyan lehet meghozni a PLC kimenetre vonatkozó döntést. Az OUTPUT1 változó csak akkor lesz IGAZ, ha az INPUT1 változó IGAZ.
Mivel mind az INPUT1, mind az OUTPUT1 változó BOOL típusú, a utasítás első sora így is kinézhet:
Ha csak a „INPUT1” kifejezést írja le, akkor az IGAZ értékű lesz, ha a változó IGAZ.
ELSE és ELSE IF
Mostanra látott egy egyszerű IF utasítást, ahol az utasításokat csak akkor hajtják végre, ha egy kifejezés TRUE. Ha ez a kifejezés FALSE értékűnek minősül, akkor az utasításokat egyszerűen nem hajtjuk végre.
De mi van akkor, ha a PLC programjához több feltétel szükséges?
Természetesen ezt megírhatja több különálló IF utasításként, de a strukturált szövegnek több lehetősége van az IF utasításokra.
Csakúgy, mint a legtöbb programozási nyelv, ugyanabban az IF utasításban több feltételhez is használhatja az ELSIF és az ELSE kulcsszavakat.
Az ELSIF és az ELSE egyaránt opcionálisak az IF utasításokban, de a szintaxis így néz ki:
Ha az 1. sor logikai kifejezése FALSE, az alábbi utasításokat egyszerűen nem hajtjuk végre. Ehelyett a fordító ellenőrzi a logikai kifejezést az ELSIF kulcsszó után.
Itt ugyanúgy működik, mint az IF kulcsszóval: Ha a kulcsszó utáni logikai kifejezés igaz, akkor a következő utasítások kerülnek végrehajtásra.
Végre az ELSE kulcsszó. Alapértelmezett beállításként működik az IF utasításához. Ha az összes IF és ELSIF logikai kifejezést FALSE-ra értékelődik, akkor az ELSE kulcsszó utáni utasítások végrehajtásra kerülnek.
CASE állítások
A strukturált szövegben történő döntéshozatal második módja a CASE utasítás.
Lényegében a CASE és az IF utasítások megegyeznek, de a CASE utasítások numerikus kifejezéseket használnak logikai kifejezések helyett. A CASE utasításoknak is van egy kissé eltérő szintaxisa, ami alkalmassá teszi bizonyos célokra.
Így néz ki a CASE utasítások szintaxisa a strukturált szövegben:
A CASE utasításokban csak 1 kifejezés van. Alapértelmezett beállításként a CASE utasítások ELSE kulcsszót is tartalmaznak. A kulcsszó utáni utasításokat csak akkor hajtják végre, ha az eredmények (vagy esetek) egyike sem felel meg a numerikus kifejezés eredményének.
Íme egy nagyon egyszerű példa:
Bár ez egy nagyon egyszerű példa (a változónak fix értéke van), megmutatja, hogyan lehet döntést hozni egy numerikus kifejezés eredményétől függően. Ebben a példában a numerikus kifejezés egyszerűen csak a változó értéke, 3. A kifejezés értéke egész vagy tört szám is lehet.
Ismétlődő hurkok, ciklusok
A strukturált szöveg valószínűleg az egyik legerősebb szolgáltatása az a képesség, hogy ciklusokat lehet vele alkalmazni, amelyek megismétlik a kódsorokat.
A PLC- vel kapcsolatban a programozási hurkok sokféle célra felhasználhatók. Lehet, hogy van olyan függvénye vagy utasítássorozata, amelyet bizonyos számú alkalommal szeretné hogy végrehajtsa az eszköz.
A Strukturált szövegben 3 különböző típusú ismétlődő hurok található:
FOR
WHILE
REPEAT
Az összes huroktípusban közös, hogy feltételük van a ciklus megismétlésére vagy leállítására. A FOR és WHILE ciklusban szereplő feltétel eldönti, hogy a ciklusnak meg kell-e ismételnie vagy sem. De a REPEAT hurok eset a feltétel UNTIL feltétel, és eldönti, hogy a ciklusnak le kell-e állnia vagy sem. A FOR és a WHILE elöl tesztelő ciklusuk, a REPEAT pedig hátul tesztelő. Ez azt jelenti, hogy az elöl tesztelő ciklusok az aktuális ciklus megkezdése előtt vizsgálja meg a futási feltételt, míg a hátul tesztelő az aktuális ciklus lefutása után.
FOR ciklus
Az első ciklus a FOR ciklus, és arra szolgál, hogy meghatározott számú alkalommal megismételje a benne foglalt utasításokat. A FOR ciklusnak van néhány más kulcsszava. TO, BY, DO és END_FOR.
Ez a strukturált szöveg FOR ciklusainak szintaxisa:
Első látásra az első sor kissé bonyolultnak tűnik, de nem akkor, ha darabokra osztja:
FOR
Kulcsszó, amely elindítja a FOR ciklus utasítást.
számláló := kezdeti_érték
Ezzel a hozzárendelési művelettel állíthatja be azt a kezdeti értéket, amelytől számolni szeretne. A számláló a változó neve, a kezdeti_érték pedig az az érték, amelytől kezdeni szeretné a számolást.
TO
A kulcsszó az érték előtt, amelyig számolni kell.
végső_érték
Ez az az érték, amelyig számolni kell. Írjon ide 100-at, és a hurok 100-ig fog számolni.
BY
Kulcsszó egyedi lépték használatához. Nem kötelező megadni, a hiányában a lépték mindig 1.
lépték
Amennyivel az értékét növelni szeretné a számlálónak a ciklus minden futásakor. Ha a növekményt 10-re, a számlálást 100-ra állítja, akkor a hurok tízszer fog lefutni.
DO
<utasítás>;
END_FOR;
Ez az utolsó rész. A DO és END_FOR kulcsszó között azok az utasítások szerepelnek, amelyeket minden ciklus futtatásakor végre kell hajtani. Ezeket az utasításokat annyiszor hajtjuk végre, ahányszor a ciklus megismétlődik.
Végül használhat egy IF utasítást az EXIT kulcsszóval a számolás előtti ciklus leállításához. Felvehet egy logikai feltételt, hogy a TRUE érték leállítsa a ciklust.
WHILE ciklus
A WHILE ciklus kissé eltér a FOR ciklustól, mert arra használják, hogy megismételjenek állításokat amíg egyes feltételek IGAZAK. A WHILE ciklus mindaddig ismétlődik, amíg egy logikai kifejezés IGAZ értéket ad.
A WHILE hurkok szintaxisa:
A WHILE és a DO kulcsszavak között található a logikai kifejezés. Ha ez a logikai kifejezés TRUE értéket ad, akkor az összes utasítás a END_WHILE kulcsszóig végrehajtásra kerül.
A END_WHILE elérésekor a logikai kifejezést újra kiértékeli az eszköz. Ez újra és újra megtörténik, amíg a kifejezés igaz. Ahhoz, hogy a hurok egy ponton megálljon, meg kell változtatnia egy értéket a logikai kifejezésnek HAMIS- ra.
Íme egy példa a WHILE ciklusra a strukturált szövegben:
Ha megnézi a harmadik sort láthatja, hogy a hurok végül hogyan fog megszűnni. A logikai kifejezés a számláló változót használja és ellenőrzi, hogy értéke kisebb vagy egyenlő-e 10-zel. Mivel a számláló értéke 0-ra van állítva közvetlenül a WHILE ciklus előtt, a logikai kifejezés IGAZ lesz a belépés pillanatában.
A 3. sorban ennek a megváltoztatása történik. Ez az első utasítás a WHILE ciklusban, és a többi utasítással együtt minden alkalommal végrehajtásra kerül, amikor a ciklus megismétlődik. A harmadik sorban a számláló változó értéke 1-gyel nő. Mondhatjuk, hogy az inkrementális érték 1.
A fenti példában a ciklus 10-szer megismétlődik. Amikor a számlálás értéke eléri a 10 értéket, a logikai kifejezés FALSE értékre módosul (mert a 10 nem kevesebb, mint 10), és a ciklus leáll.
Használhatja az EXIT kulcsszót is a WHILE ciklusban, hogy abbahagyja a ciklus ismétlését, mielőtt a logikai kifejezés FALSE lenne. A szintaxis egy IF utasítás, benne az EXIT kulcsszóval. Helyezze bárhová a DO és az END_WHILE kulcsszavak közé.
REPEAT ciklus
A strukturált szöveg utolsó ciklusa a REPEA. A WHILE ciklussal ellentétesen működik: ez a hurok nem fog ismétlődni, ha a logikai kifejezés IGAZ.
Az ST-ben a REPEAT hurkok szintaxisa a következőképpen néz ki:
Megfigyelhető itt, hogy mivel az ilyen típusú ciklusokban található logikai kifejezés az utasítások után van, ezért az utasításokat mindig legalább egyszer végrehajtják. Ez akkor hasznos, ha azt szeretné, hogy egy művelet egyszer megtörténjen, majd feltételekkel eldöntse, hogy meg kell-e ismétlődnie.
Ahogy a WHILE ciklusoknál, az lefutás során meg kell változtatnia egy értéket a logikai kifejezésben, hogy a hurok ne ismétlődjön. Ez történhet egy változó értékének növelésével (a számláláshoz), vagy megtehető egy feltételes utasítással, mint egy IF utasítás a cikluson belül. Ennél a ciklusnál is alkalmazható az EXIT megszakító utasítás.
Összegzés
A cikkek elolvasásával betekintést nyerhetett az ST programozási nyelv használatába. Természetesen ezt nem lehet rövid idő alatt tökéletesen elsajátítani, ezért sok óra gyakorlást javaslok. Ennek a tudásnak a birtokában képes lesz az összes WAGO PLC hatékony programozására.