PLC programozási nyelvek Készítette: Csinger Nikolett, Lukács Péter, Sallai Gábor és Voura Dávid 1. Bevezetés A PLC-k fejlődése során több gyártó is próbálta megalkotni azt a programozási szabványt, amely versenytársai megoldásánál általuk kényelmesebbnek, könnyebbnek vélt. Ennek ellenére egyetlen nyelv sem lett szigorúan szabványosítva, viszont a fejlesztések eredményeként napjainkra számos PLC programozási nyelv alakult ki. Mivel nem sikerült találni egyetlen kitüntetett nyelvet sem, ezért a villamosmérnökök nemzetközi szervezete egy, a nyelveket összegyűjtő közös szabványt hozott létre, ez lett az IEEE 61131-3. A szabvány természetesen nem csak az egyes programnyelveket gyűjtötte össze és csoportosította, hanem azok jelöléseit és utasításait is összegyűjtötte. A szabvány szerint alapvetően két főbb csoportra oszthatjuk a programozási nyelveket - szöveges rendszerű és a - grafikus szimbólumokat alkalmazó. A továbbiakban ezek altípusairól lesz bővebben szó. 2. Szöveges rendszerű programozási nyelvek A szöveges rendszerű programozási nyelveknél két típust különböztethetünk meg, ezek a: - strukturált és az - utasításlistás. Az alapvető különbség a két nyelv között, hogy míg a strukturált egy magasabb szintű programnyelvhez hasonló szerkezetet használ, addig az utasításlistás inkább az alacsonyabb szintű programnyelvhez hasonlítható. 1
2.1 Strukturált programnyelv A strukturált szöveges programozási nyelv egy, a Pascal, illetve a C nyelvhez hasonló magas szintű nyelv a vezérlési és szabályozási funkciók programozásához. Ennek egy előnye, hogy hardver független nyelv, tehát az ST nyelven megírt program bármely berendezésen futtatható, amely rendelkezik a nyelv értelmezéséhez szükséges szoftverrel. Az ST főként a bájt, a szó, a duplaszó jellegű, bonyolult aritmetikai műveleteket és függvénykapcsolatokat igénylő feladatok megoldásánál előnyös a magas szintű nyelvű programozásban jártas felhasználók számára. Az ST nyelv értékadó, feltételes, vezérlési és ciklusszervező utasításokból áll. Az ST nyelvű programban a programsorok pontosvesszővel vannak egymástól elválasztva, a megjegyzéseket zárójelek között csillag karakterrel határolva vihetők be a programba. Az ST nyelv előnyei: A programozási feladatot igen tömör formában tartalmazza A szöveges változók kezelése révén a technológiai változók azonosítása egyszerű Átlátható, jól követhető felépítés Az ST nyelv hátrányai: Az ST nyelvről a végrehajtható kódot egy compiler állítja elő, amely hibalehetőséget rejt magában a nyelv által biztosított absztrakciók csak kellő gyakorlattal kezelhetők Fontos tudni, hogy ST nyelvű program esetén a teljes szöveges kód végrehajtódik ciklusonként. 2.1.1 Az ST program részei Elöljáróban néhány alapszabály ismertetése következik: A függvényhívás egy kifejezés, de a funkcióblokk hívás egy utasítás. A funkcióblokk hívások tehát nem engedélyezettek egy kifejezésen belül. Lehetnek az operátorokkal azonos függvények Amennyiben egy kifejezés több operátort tartalmaz, akkor a precedencia szabály lép életbe 2.1.2 Kifejezések A kifejezések egy változó értékének meghatározásához használatosak. Egy kifejezés tartalmazza az operandust és a hozzá kapcsolódó operátort. Az ST nyelvű programok utasításokból épülnek fel. Az utasítások kifejezéseket és kulcsszavakat tartalmaznak, a kifejezések pedig operandusokból és ST operátorokból állnak. Az operandusok lehetnek numerikus, alfanumerikus karakterek vagy idő adatok, függvényhívások vagy összetett kifejezések. 2
2.1.3 Operátorok és operandusok Az operátorok prioritását az alábbi ábrán látható táblázat foglalja össze. 1. ábra Operátorok prioritása Az operandusok lehetnek: numerikus, alfanumerikus karakterek és idő adatok (pl.: 15, xyz, t#5d-3h) változók (egy vagy több elemes, pl.: Var 1, Var [1,2,3] függvények visszatérési értékei pl.: FunName(Par1,Par2) összetett kifejezések 2.1.4 Utasítások Az értékadó utasítás a := operátor bal oldalán levő változóhoz hozzárendeli az operátor jobb oldalán levő kifejezés értékét. Pl.: a := 20; b[0] = d**2; 1:= 20/6; e = REAL_TO_INT; A bináris értékadás nem a létradiagramban megszokott logikai függvényként, hanem műveletként oldható meg. Ha az értékadás nem hajtódik végre, akkor a változó megőrzi addigi értékét, nem íródik felül. 3
Pl.: IF A THEN B:=1; END_IF; Funkcióblokk hívás Egy funkcióblokk hívása a nevével és a zárójelben felsorolt paraméterlistával történik. Általános formátuma: FunctionBlock ( FB név InputParameter1 := kifejezés1, InputParameter2 := kifejezés2, ); RETURN A RETURN utasítást használjuk, ha ki akarunk lépni egy függvényből, funkcióblokkból, vagy programból, mielőtt befejeződne. Így ez a függvény funkcióblokkon belül, a kódrészben használható. A program a RETURN végrehajtása után a funkcióblokk végén folytatódik. Fontos, hogy a függvény neve és a hozzá tartozó változók összerendelése megtörténjen, mielőtt a RETURN végrehajtódna. Feltételes utasítások A feltételes utasításokkal választani lehet a végrehajtandó műveletek között a kijelölt Boole műveletek értékétől függően. Két fajtája létezik, a két érték közötti választás ( IF THEN ELSE...), vagy a kifejezés értékétől függő több érték közötti választás(case). Az IF THEN és az IF THEN ELSE utasítások közvetlenül is követhetik egymást. A CASE utasításban a kifejezéseknek integer értékűnek kell lennie. IF THEN ELSE kifejezés általános felépítése: IF <Boole kifejezés> THEN <utasítások> ELSE <utasítások> END_IF 4
CASE.OF utasítás általános felépítése: CASE <Integer kifejezés> OF <1.érték> <1.utasítás> <2.érték> <2.utasítás> <3.érték> <3.utasítás> ELSE <utasítás> END_CASE Iterációs utasítások Az ST nyelvben három utasítás konstrukció szolgál az ismétlési ciklusok elvégzésére. Ezek a WHILE, REPEAT, FOR utasítások. A ciklusok két részből állnak, ciklusmagból és feltétel vizsgálatból. A ciklusmagban vannak az ismétlődően elvégzendő utasítások. WHILE DO struktúra A feltétel egy Boole kifejezés lehet. Ez a struktúra egy elöl tesztelő ciklusszervezésű, így előfordulhat, hogy a ciklusmag egyszer sem hajtódik végre. Általános alakja: WHILE <Boole kifejezés> DO <utasítások> END_WHILE REPEAT UNTIL struktúra A REPEAT UNTIL konstrukció megengedi egy vagy több utasítás végrehajtását, amíg a feltétel teljesül. A feltétel csak olyan kifejezés lehet, amelynek Boole típusú eredménye van. Ebben a konstrukcióban a ciklusmag legalább egyszer végrehajtódik, tehát hátul tesztelő ciklus. REPEAT UNTIL konstrukció általános felépítése: REPEAT <utasítások> UNTIL <Boole kifejezés> END_REPEAT 5
FOR TO BY DO utasítás: Az iterációs utasítások harmadik típusa az, amelynél az ismétlés értéke egy iterációs változó értékétől függ. Ez egy integer típusú változó (SINT, INT, DINT), amely az ismétléseket számolja. Az iterációs változó kezdeti, végső és inkrementáló értékének azonos típusú integer adattípusúnak kell lennie. Az iterációs változó értékét a ciklusmagon belül utasítással megváltoztatni tilos. FOR TO BY DO konstrukció általános alakja: FOR <iterációs változó kezdeti értéke> TO<végérték kifejezés> BY<inkrementáló kifejezés> DO<utasítások> END_FOR A FOR DO ciklus lépései: 1. Az iterációs változó inicializálása 2. Az iterációs változó végső értékének kiértékelése 3. A ciklusmag végrehajtása 4. Az iterációs változó növelése 5. Ugrás a második lépésre EXIT: Mindhárom iterációs megoldás lehetővé teszi a ciklusból való közvetlen kilépést az EXIT utasítással. Ilyenkor az iterációs ciklus végét jelző END utáni utasítás kerül végrehajtásra. Az EXIT utasítás csak a legbelső szinten hat. Pl.: j:=0; WHILE (j<10) DO i:=0; WHILE (i<10) DO IF (i=j) THEN EXIT; ELSE i:=i+1; END_IF; END_WHILE; j:=j+1; END_WHILE 6
2.2 Utasításlistás programnyelv Az utasításlistás programozási nyelv (IL = Instruction List) a PLC kialakulásával egyidős és szöveges rendszerű nyelvek közé tartozik. Alacsony szintű, és inkább gépi kódhoz közelinek mondható, parancsok (utasítások) sorozatából áll. A Siemens PLC-nél az utasításlista nem IL-ként, hanem STL-ként (Statement List) található meg, vagy németül AWL (Anweisungs-Liste) rövidítésnek felel meg. Általánosságban elmondható: A programozandó feladatokat lépésekre (Network) kell bontani és sorszámot adni, úgy, mint a létradiagrammos programozásnál. Sorrendi végrehajtással valósul meg a programfutás, azaz lépésről lépésre, kivételt csak az ugró utasítások jelentenek. A lépések eleje, a műveleti rész (operációs), meghatározza, hogy a CPU-nak milyen műveletet kell végeznie. Feltételeket adhatunk meg logikai kapcsolatokkal, leggyakrabban: ÉS, VAGY, NEM. Siemensnél az utasítás angol vagy német nevének rövidítése. A lépések második fele az operandusrész, megadja, hogy mivel kell a műveletet végrehajtani. Általában kimenet be- vagy kikapcsolása, idő vagy számláló indítása. A program végét jelezni kell a ciklikus ismétlődés érdekében. Akkumulátorok a processzor azon kijelölt regiszterei, amelyek a belső adatmozgatásokban és számítások elvégzésében vesznek részt. Az S7-300-ban két darab 32 bites akkumulátor található. A műveletek elvégzése után az eredmény mindig idekerül. Az adattípusa a művelettől és az operandusok adattípusától függ. Az IL-ben az akkumulátorhoz kapcsolódóan CR (Current Result) jelöléssel találkozhatunk. Az alábbi táblázatokban néhány IL és STL utasítás látható. 7
2. ábra IL utasítások 3. ábra STL utasítások Egyes utasítások működése befolyásolható úgynevezett módosító postfixekkel. Leggyakrabban a negálást használják, amelyet N-nel jelölnek, de beszélhetünk még egymásba ágyazásról, amit zárójelekkel lehet megvalósítani, illetve feltételes végrehajtásról is, aminek jele C, és ez csak akkor megy végbe, ha az akkumulátor értéke TRUE. Ezek a postfixek egymással kombinálhatók. Ugró utasítás során az akkumulátor-érték nem változik. Minden sor címkézhető és a program tetszőleges címkére ugorhat. Lehet előre, illetve hátra is ugrani (ez kerülendő, veszélyes!) Negálás 8
Egymásba ágyazás Fontos figyelni a művelet-precendeciára, azaz a műveletek elsőbbségi sorrendjére. Az utasításlistás nyelvben könnyen eltéveszthető! Pl.: A továbbiakban egy példaprogram látható, amely egy futófényt valósít meg négy lámpával, valamint időzítőkkel STL nyelven, létradiagrammal. 9
3. Grafikus szimbólumokat alkalmazó nyelvek A grafikus szimbólumokat alkalmazó nyelveket tekintve 3 típust különböztethetünk meg, ezek a: - létradiagramos, - funkcióblokkos, valamint a - sorrendi folyamatábrás. 10
3.1 Létradiagram A létradiagramos programozási nyelv az áramúttervből alakult ki, így a létradiagramok az áramúttervek szoftveres megfelelőinek tekinthetők. A relé jellegű programozási nyelv kidolgozásának igénye már a GM pályázatában is szerepelt, de széles körű elterjedését csak a grafikai lehetőségekkel ellátott fejlesztőrendszerek eredményezték. Szükségességét főként a relés hálózatok tervezéséhez értő szakemberek könnyebb átképzése indokolta, de a mai napig a legnépszerűbb programozási nyelv. Népszerűségét a könnyű követhetőség, a gyors hibadiagnosztikálásnak köszönheti. Mára a LAD messze túllépett a relé jellegű logikán, különösen a funkcióblokkok kezelése révén. Ennek ellenére villamos szemléletet igényel. Mivel a létradiagramos programozáshoz áramútterv ismerete is szükséges, ezért ennek ismertetése is fontos. 3.1.1 Áramútterv Az érintkezős vezérlések elvi rajzát általában áramutas rendszerben készítik. Ennek lényege, hogy a tápfeszültség párhuzamosan haladó két vezetéke közé rajzoljuk a működtető érintkezők és a működtetett készülékek soros vagy vegyes kapcsolású láncát, lehetőleg a működésüknek megfelelő sorrendben. Áramútrajz készítésének szabályai: A működtető áramkörök áramútját két függőleges egyenes vonal, az áramforrás két pólusa közötti vízszinteses egyenes mentén ábrázoljuk. A vízszintes vonalak, vagyis az áramutak kereszteződését kerülni kell Az áramutakat lehetőleg a működtető feszültségek szerint kell csoportosítani. A hatást kifejtő elem (mágneskapcsoló, relé tekercse, jelzőlámpa) egyik sarkát mindig közvetlenül kötjük be a jobb oldali függőleges egyenesbe, a földelt ágba földzárlat esetén így nem következik be hibás működés. Az építőelemeket mindig nyugalmi helyzetükben ábrázoljuk. 3.1.2 A létradiagramos programozás grafikus elemei A LAD elemei: vezetékek, csatlakozások, kontaktusok, tekercsek, függvények, funkcióblokkok. Az egy tekercshez tartozó hálózatrészt network-nek nevezik. Egy létrafokon belül a kontaktusok sorba vagy párhuzamosan kapcsolva hozzák létre a logikai kapcsolatot. Egy PLC fejlesztő szoftvere korlátozott számú soros és párhuzamos kapcsolatot eredményez. A létradiagramban kialakíthatók különböző logikai függvények. Néhány példa ezekre: 11
4. ábra Példák LAD logikai függvényekre 3.1.3 A létradiagram konstrukciója A létradiagram konstrukcióját az 5. ábra mutatja. 5. ábra Létra diagram konstrukciója 3.1.4 A létradiagramos programozás szabályai a létradiagramon a működtető és működtetett elemek szimbólumaiból álló áramutakat két függőleges vonal között vízszintes egyenes mentén ábrázoljuk a működtetett elem egyik sarkát mindig a jobb oldali függőleges egyenesbe kötjük be, ha van, egyébként szabadon hagyjuk. az összetartozó működtető és működtetett elemeket azonos betűjellel látjuk el. a létrafokok közötti vezetékek kereszteződését kerülni kell 12
az egyes áramutakat a sorrendi működés szerint ábrázoljuk a létradiagram egyes elemit feszültségmentes állapotban ábrázoljuk A létradiagram egyes elemeihez további adatok is írhatók a függvényblokkok és funkcióblokkok valamennyi funkciójáról gondoskodni kell. egy speciális funkció általában nem csatlakozhat közvetlenül a bal oldali referenciavezetékre, csak logikai feltételen keresztül. Ez alól kivétel a FB alkalmazás esete, amikor is legalább egy bemeneti Boole változónak kell a bal oldali sínre csatlakoznia A bal és jobb oldali vezetékre csak Boole típusú változó csatlakoztatható A létradiagramon visszacsatoló ágak is kialakíthatók A PLC ciklikus működésű. A programvégrehajtás fázisában a teljes kód feldolgozásra kerül. Minden egyes ciklusban a teljes létradiagram kiértékelésre kerül. Ezt szemlélteti a következő ábra: 6. ábra PLC ciklus 3.2 Funkcióblokkos program A funkcióblokkos programozást a szakirodalmakban és a programozó szoftverekben általában az FBD, mint Function Block Diagram rövidítéssel jelölik. A funkcióblokkokat szokás még szoftver IC-knek is nevezni. A nyelv alapját az képezi, hogy olyan blokkokat kapcsolunk egymáshoz, melyek előre megírt kis programokat tartalmaznak, így létrehozva a vezérlést. Egy-egy funkcióblokkban lehetőségünk van elhelyezni további funkcióblokkokat is. Ezek alapján az FBD felépítése leginkább a szubrutinok felépítéséhez hasonlítható. Az egyes blokkokat grafikusan általában téglalapokként ábrázolják. A bemenetek mindig a blokkok bal oldalán, a kimenetek pedig mindig a blokkok jobb oldalán helyezkednek el. Ebből adódóan a jelfolyam mindig a bal oldalról a jobb oldal felé halad. 13
Az alábbi ábrán a Siemens (1. és 2.) és Schneider (3.) cégek programozói felületén megjelenített AND blokkokat láthatjuk. 7. ábra AND funkcióblokkok ábrázolása Az egyes blokkoknak két főbb jellemzője van: - a bemeneti és kimeneti paraméterek, valamint belső változók adatai és az - az algoritmus, amely mindig végrehajtódik, amikor a funkcióblokk meghívásra és végrehajtásra kerül. Az algoritmus dolga, hogy feldolgozza az általunk megadott bemeneti paramétereket és a bemeneti változók adatait, majd ezek alapján előállítja a kimeneti jelet. A program felépítését illetően szinte teljesen megegyezik a létradiagramos megoldással. Az egyes blokkokat szintén huzalozással kell összekapcsolni és a kimenetek és bemenetek megadása is szinte ugyanaz. Ebből adódóan általában a létradiagram és a funkcióblokkos programok szoftveresen átkonvertálhatók egymásba. Az alábbi képen látható példákon három nyomógomb van megvalósítva, melyek közül, ha kettő aktív, a kimenet is aktív lesz, mind a három gomb lenyomása esetén viszont nem. Mint az a képeken is látható, a létradiagramos megvalósítás sokkal egyszerűbb, illetve átláthatóbb. 8. ábra Példa FBD példa megvalósításához 14
9. ábra FBD példa LAD megvalósítása 3.3 Sorrendi folyamatábra A PLC-k programozására használt egy másik programozási nyelv a sorrendi folyamatábra (Sequential Flow Chart SFC). Ez a Grafcet francia nemzeti szabvány továbbfejlesztése. A Grafcet leírási módszer a számítástechnikából jött folyamatábrák és a digitális technikából jött jelölés alapján épül fel. Ez azt jelenti, hogy a logikai eszközök jele négyzet vagy téglalap alakú, a kiértékelés fentről lefelé, illetve balról jobbra történik. Az 10. ábra az SFC i-edik sejtjét mutatja. 10. ábra Az SFC általános sejtje Az automatizálandó folyamatot grafikusan írjuk le, lépésenként. Minden lépéshez (Step) átmeneti feltételek (Translations) és akciók (Actions) tartoznak, melynek eredményeképpen a 15
következő lépésbe ugrik a folyamat, ha a feltétel teljesül, melyet az 11. ábra szemlétet. Minden feltételhez és akcióhoz egy külön alprogram társul. A folyamatábrán a sorrendi hálózat egy-egy belső állapotát, ebbe az állapotba kerülés feltételeit, és az állapothoz rendelt kimeneti eseményeket tüntetjük fel. Ez a módszer az 1 az n -ből típusú állapotkódolásból fejlődött ki. Általában a feltételeknél a bemenetet, míg az akcióknál a kimenetet programozzuk. A szintaktika itt is fontos! Az utolsó feltétel teljesülése után a programnak mindig vissza kell térnie a kezdőlépéshez, ezt a ciklusosságot is programoznunk kell. Ez a programozási nyelv lényegesen eltér a többitől, mivel ezt nem lehet közvetlenül a PLC-be letölteni. Ebből a nyelvből egy már az előzekben ismertetett programkódot generál a szoftver. 11. ábra Lépésekhez tartozó feltételek és akciók Az IEC szabvány szerint a folyamat előrehaladás során lehet ÉS eseményeket programozni, rajzolni. A program mindkét ágon folytatódik. Az ÉS jellegű elágazásokat kétvonalas átmenettel jelöljük, ez látható a 12. ábrán. 12. ábra "ÉS" elágazás jelölése 16
A 4. ábra több ÉS lépés közötti szinkronizált átmentet mutat több esetre. Az a) részen látható helyzetben nem lehet átmenet, mert míg az 5. és 6. lépés aktív (ezt a pont jelzi), addig a 4. lépés nem. Mivel ÉS elágazásról van szó, igy az átmenet tiltását jelenti mindez. Ilyenkor közömbös a (3) feltétel állapota (a+bc=0 vagy 1). 13. ábra Több lépés közötti "ÉS" elágazás A b) részen mind a 4., 5. és 6. lépés aktív, az átmenet elért, de (3) feltétel nem teljesül (a+bc=0), ezért nem léphető át az átmenet. A c) részen teljesül mind a 4., 5. és 6. lépés és a (3) feltétel is, így kötelező az átlépés. A d) rész az ábrán a c) utáni állapot bekövetkezését tükrözi. Az átlépés párhuzamosan megy végbe melynek eredménye, hogy: - a 7. és 8. lépés aktív, - a 4., 5., és 6. lépés inkatív, - a 7. és 8. lépés elérhető lesz. Lehet továbbá VAGY eseményeket programozni, rajzolni, ezeket egyvonalas átmenettel jelöljük (14. ábra). Ilyenkor csak az egyik ágon folytatódhat a továbbhaladás, ezt úgy lehet elérni, hogy az ágak belépésénél kizáró feltételeket adunk meg. Ezeknél az eseményeknél megadható, hogy a program először melyik feltételt vizsgálja meg. 14. ábra "VAGY" elágazás jelölése 17
Az SFC igényli a legkevesebb ismeretet egy program megvalósításához. Az SFC-s programok programozásához létradiagramos programozás keretében egy léptetőrelé funkciót vezettek be (stepplader STL). Az 15. ábrán az SFC és LAD közötti kapcsolat kerül szemléltetésre. 15. ábra Léptetőrelé a) funkció SFC-ben és realizálása LAD-ban b) Az ábrán az S600 lépés az X400 bemenettel ativálódik, majd az S601 lépéssel törlődik. Az S600 lépéshez az Y430 kimenet van rendelve. A törlési funkció nem kerül feltüntetésre, hasonlóan az SFC szimbólumhoz. Kérdések 1. Írja fel a PLC programnyelveket és azok csoportosítását! 2. Utasításlistás nyelvnél milyen szerepe van az akkumulátornak? 3. Melyik programnyelvvé alakítható át legegyszerűbben a funkcióblokkos programnyelv? 18