a beckhoff típusú plc rendszer...

103
A BECKHOFF típusú PLC használata. Miskolci Egyetem 2017. dr. Gyuricza István

Upload: dangkhanh

Post on 07-Jul-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

A BECKHOFF típusú PLC használata.

Miskolci Egyetem

2017.

dr. Gyuricza István

1. A PLC rendszer általános áttekintése.

A BECKHOFF cég által kifejlesztett TwinCAT fantázianevű PLC család egy WINDOWSoperációs rendszerre alapozott termék. A PLC folyamatcsatoló elemei (digitális be éskimenetek, valamint egyéb moduljai) nagysebességű soros buszon keresztül kapcsolódnakegy WINDOWS operációs rendszert tartalmazó központi egységhez.

Az egyik alternatíva, hogy ez a központi egység egy ipari kivitelű PC, amely WINDOWS NT,2000, vagy XP operációs rendszert tartalmaz. A TwinCAT fejlesztő rendszer ekkor aWINDOWS operációs rendszerbe beiktatja azt a négy taszkot (párhuzamosan futóprogramegységet), ami a folyamatirányítási (PLC), folyamat (megjelenítési) vizualizálási, éskommunikációs feladatok ellátásához szükségesek. Ezek a taszkok még akkor is képesekfeladatuk ellátására, ha a WINDOWS rendszer a kezelők számára összeomlott.

A másik alternatíva, hogy nem egy PC-ben képezzük le a PLC funkciókat, hanem egy rackfiókba épített mikroprocesszoros (PLC kártya) biztosítja ezt. Ezen kártya kialakítású PLCprocesszora az ipari célra kifejlesztett WINDOWS CE, vagy a WINDOWS XP beágyazottoperációs rendszer alatt működik. Ebben az esetben a TwinCAT programmal kifejlesztettPLC alkalmazásokat le kell tölteni a PLC-be, és ez a berendezés csak a program futtatásáraalkalmas.

Az elmondottakat illusztrálja az alábbi ábra.

A jobb alsó ábrarészlet az mutatja, hogy az I/O modulok csatakoznak a TwinCATprogramrendszert tartalmazó PC-hez, ami a PLC funkciók ellátását is szolgálja, aprogramfejlesztésen túl. A bal alsó ábra részlet azt mutatja, hogy az I/O egységek mellettmegtalálható maga a PLC funkciót ellátó modul is. Ekkor a TwinCAT program (valamint ahozzá tartozó PC) a programfejlesztést, és beüzemelést (ill. a folyamatvizualizálást) szolgálja.A TwinCAT rendszer a technológia adatait a hálózaton keresztül szokványos WINDOWSeljárásokkal elérhetjük és így akár további felügyeleti feladatokat ellátó programokat,alkalmazásokat használhatunk.

Az I/O modulok valamilyen terepi buszon keresztül csatlakoznak a PLC rendszerhez. Azalábbi ábra azt szemlélteti, hogy milyen buszokon keresztül csatlakoztathatjuk amoduljainkat.

2

Az I/O modulok választéka mind a kétállapotú, mind az analóg jelek fogadására, és kiadásáraszolgáló kártyákat egyaránt tartalmazza.

A PLC paraméterei közül érdemes kiemelni, hogy maga a PLC vagy egy WINDOWSoperációs rendszert tartalmazó (ipari) PC, vagy egy WINDOWS CE operációs rendszerttartalmazó egység, vagy a Beckhoff Fieldbus Controllers (BCxxxx, BXxxxx, IL230x-Cxxx)modul. A memória maximum 2 GByte, míg a program ciklusideje 50 μs értéktől nagyobb(tipikusan 1 ms). Egy 2.8 GHz órajel frekvenciájú PENTIUM4 processzort tartalmazó egység1 μs idő alatt mintegy 1000 PLC utasítást hajt végre.

Ez a hardver teljesítmény napjainkban a PLC-k világában a nagy teljesítményű berendezésekközé tartozik. Nem is annyira a PLC, hanem az NC, és CNC feladatok ellátása, a mozgatásipozicionálási, interpolációs feladatok ellátása igényli ezt a nagy teljesítményt. A nagyteljesítmény a megbízhatóságban, és az élettartamban is megjelenik (fordított arányban).Napjainkban a klasszikus PLC-k élenjáró típusainál a két meghibásodás között eltelt átlagosidő (MTBF) néhány évtized (pl. a MODICON QUANTUM esetén 44 év). Nyilván ilyenadatokat, egy mozgó alkatrészeket (pl. hűtőventillátorok, diszk stb.) is tartalmazó berendezésnem tud produkálni, de ez nem feltétlenül a legfontosabb paraméter bizonyosalkalmazásoknál.

A PLC programok fejlesztése a TwinCAT PLC Control programmal történik. A fejlesztőprogram az IEC 61131-3 szabvány szerinti programnyelvek használatát engedélyezi. Azalkalmazható programnyelvek:

IL Utasítás lista (Instruction List) LD Létra diagramm (Ladder Diagramm) FBD/CFC Funkció blokk (Function Block Diagramm) SFC Sorrendi funkció blokk (Sequential Function Chart) ST Strukturált szöveg (Structured Text)

Ez a fejlesztő eszköz a megírt program beüzemelésére szolgáló funkciókkal is rendelkezik.

A PLC konfigurációjának, és a végrehajtásának legfontosabb paramétereit a TwinCat SytemManager nevű programkomponenssel

2. Az IEC 61131-3 szabvány. A PLC-k programozása.

3

A TwinCAT az IEC 61131-3 szabványra alapozva került kifejlesztésre. Ez a szabvány akorszerű PLC-k alkalmazásával kapcsolatos szabályokat tartalmazza. A fejezet megkísérliösszefoglalni a 240 oldalas szabvány legfontosabb megállapításait.

Az IEC 61131-3 szabvány szerint egy alkalmazás strukturálisan az alábbi programegységeket(POU = PROGRAM ORGANIZATION UNIT) tartalmazhatja.

Funkció (FUN) Funkció blokk (FB) Program (PROG)

A hierarchia legmagasabb helyén a program helyezkedik el, amely a végrehajtás soránmeghívhatja a funkciókat, és funkcióblokkokat is.

A funkció és a funkció blokk közötti alapvető különbség, hogy a funkció minden esetben azaktuális bemenetek értékétől függő kimeneti értéket produkál, és a funkcióhoz rendelt statikusparaméterei nincsenek. Egy funkció (FUN) például, visszaadhatja két egész számottartalmazó bemenete közül a kisebbik értéket. A funkció blokk (FB) tartalmazhat afunkcióhoz rendelt statikus (a funkcióblokkhoz tartozó saját) paramétereket. A funkciók, ésfunkció blokkok a gyakran ismétlődő feladatok megoldására szolgáló program részletekettartalmazzák. A fenti programegységek hívási lehetőségeinek hierarchiáját az alábbi ábramutatja.

A szabvány rögzíti, hogy mely alapfunkciókat kell gyárilag biztosítani bármely PLCfejlesztőrendszerében (lásd később).

Egy programrész (POU) logikailag két részre bontható. A programrészhez tartozó adatok,változók, és a program kód.

2.1 A program változók, és deklarálásuk.

A programegység (POU) által használt változókat a programegység kezdetén deklarálni kell.Ennek formájára az alábbi részlet mutat példát.

4

A fenti példa a változók deklarálásának egy tipikus példája. A VAR_INPUT csoport aprogramrész (POU) belépő adatait tartalmazza. Ez jelen esetben egyetlen BOOL típusúlogikai változó. A programegység (POU) kilépő változói a VAR_OUTPUT csoport belülkerül definiálásra. Ez jelen esetben egyetlen lebegőpontos (REAL) változó. A programegységlokális adatai egy egész (int), egy szöveg (string) konstans, és egy kétállapotú fizikai bemenet,amelyek teleppel védett memóriahelyen kerülnek letárolásra. Mint látható a változó nevetkövetően egy : karakter található, majd a változó típusa, és egy ; terminálja a deklarációt.

Ha szisztematikusan nézzük a lehetséges változók deklarációjának lehetőségeit, akkor azalábbi csoportosítást adhatjuk.

Elnevezés LeírásVAR Programegységen (POU) belüli változóVAR_INPUT Belépési érték, ami a POU-n belül nem módosíthatóVAR_OUTPUT A POU által szolgáltatott kilépési értékVAR_IN_OUT Belépési érték, ami módosításra kerül a POU-ben VAR_EXTERNAL Egy másik programegységben definiált globális változó, ami

módosítható a POU-ben.VAR_GLOBAL Globális változóVAR_ACCESS Kommunikációs csatornán keresztül elérhető adat definiálásaVAR_TEMP Átmenetileg tárolt változók FB éss FUN programegységek számára.VAR_CONFIG Konfigurációs adatokRETAIN Teleppel védett adatok megjelöléséhezNON_RETAIN Teleppel nem védett adatok megjelöléséhezCONSTANT Konstans, állandó értékAT Hely (be, kimenet) hozzárendelés

A fenti deklarációs lehetőségek egy részére az alábbi részlet mutat példát.

5

A különböző típusú adatcsoportok programegységeken belüli deklarálási lehetőségeit azalábbi táblázat foglalja össze.

Mint látható a funkciók (FUN) nem adhat vissza adatokat, így OUTPUT típusú változókatezen programegységekben nem lehet definiálni. Globális (más programegységekből iselérhető) adatokat (GLOBAL, ACCESS) csak a PROGRAM blokkban lehet definiálni.

Egy-egy deklarációs csoporton belül többféle változó típus definiálására van lehetőség. Aváltozók lehetséges típusát az alábbi táblázat mutatja, ahol N a változó hosszát (bitben)mutatja.

Tipus Leírás NBOOL Igaz/hamis 1SINT Rövid egész 8INT Egész 16

DINT Dupla egész 32LINT Hosszú egész 64

USINT Rövid előjel nélküli egész 8UINT Előjel nélküli egész 16

UDINT Előjel nélküli dupla egész 32ULINT Előjel nélküli hosszú egész 64REAL Valós változó 32

LREAL Hosszú valós egész 64TIME Eltelt idő (pl. T#14ms)DATE Dátum (pl. 2007-12-11)

TIME_OF_DAY (TOD) A napon belüli idő (pl TOD#15:26:48.23)DATE_AND_TIME (DT) Dátum és idő (pl. DT#2007-06-12-15:36:24.34)

STRING Szöveg változó 8*karakterek számaBYTE Byte (8 bit) 8WORD Szó (16 bit) 16

DWORD Dupla szó (32 bit) 32LWORD Hosszú szó (64 bit) 64

WSTRING Változó hosszú szó 16*szavak száma

A TYPE … END_TYPE kulcsszavak között további (felhasználó, vagy gyártó által)származtatott adattípusokat definiálhatunk. Például a TYPE ANALOG_ADAT : INT ;END_TYPE deklaráció az ANALOG_ADAT nevű változóhoz INT típust rendel.

Deklarálhatunk egyedi, és csoportváltozókat.

Az egyedi változók deklarálásakor egy változóhoz az előbbi táblázat valamelyik típusátrendelhetjük (pl. Var: SINT;). A változó neve és típusa közé : karakter illesztendő, és aváltozó típusát követően a ; karakter zárja a deklarációt. Külön beszélnünk kell arról, havalamely be, vagy kimenthez (memóriacímhez) rendelünk egy változót. Ennek az a formája,hogy egy % karaktert követő előtagokkal nevezzük meg a változó helyét. Ezen előtagoklehetséges karakterei az alábbiak.

6

I bemenet Q kimenet M memória X bites változó B byte (8 bit) változó W szó (16 bit) változó D dupla szó (32 bit) változó L hosszú szó (64 bit) változó

A fenti jelölésekkel pl. a %IX7.1 változó egy kétállapotú fizikai bemenetet jelöl (7. cím 1.csatorna). A %QW26 például egy D/A konverter (kimeneti 16 bitjét) azonosíthatja.

Több (csoport) változó definiálására két alternatíva áll rendelkezésünkre:

Tömb-deklarálás. Az ugyanazon típusú változókból képezett tömb definiálására vanlehetőségünk. Az alábbi példa azt mutatja, hogy egy 16 elemet tartalmazó INT tömböthogyan definiálhatunk, ami feltételezésünk szerint 16 analóg csatorna adatit fogjatartalmazni.

TYPE ANALOG_ADAT : INT ; END_TYPEANALOG_ADATOK : ARRAY[1..16] OF ANALOG_ADAT;

A leírás alapján az látszik, hogy egy 16 elemű tömb definiálására az ARRAY [1..16]OF kulcsszavak utalnak. A tömb egy (a példában 6.) elemére azANALOG_ADATOK[6] formában hivatkozhatunk.

Struktúra-deklarálás. A különböző típusú, de logikailag összetartozó adatokat célszerűegy adat struktúrába szervezni. Egy analóg csatornára jellemző adatok lehetnekpéldául az alábbiak:

TYPE ANALOG_CSATORNA:STRUCT

NEV: STRING[32]; (* csatorna név *)DIM: STRING[16]; (* dimenzió *)ADMIN: INT; (* minimumhoz tartozó A/D adat *)ADMAX: INT; (* maximumhoz tartozó A/D adat *)MIN: REAL; (* méréshatár minimum *)MAX:REAL; (* méréshatár maximum *)

END_STRUCTEND_TYPE

A struktúra egy elemére, például az

ANALOG_CSATORNA : ACSAT ;

deklarációt követően az ACSAT.MIN változónévvel hivatkozhatunk.

7

2.2 A programozás.

A program egységek (POU) kód részét a IEC 61131-3 szabvány alapján az alábbiprogramnyelvek valamelyikén hozhatjuk létre.

Létradiagram (LD) Funkció blokk diagram (FBD) Utasítás lista (IL) Strukturált szöveg (ST)

A különböző programozási lehetőségek illusztrálására szolgál az alábbi ábra.

Az egyszerűbb, klasszikus vezérlési feladatok megoldásánál talán a leghatékonyabb alétradiagram, vagy a funkcióblokk diagram nyelv alkalmazása. A két nyelv közötti választásta programozó személyének sajátosságai motiválhatják. A klasszikustó eltérő vezérlésifeladatok megoldása során hatékonyabb (szemléletesebb) lehet a szöveges programnyelvek(IL, ST) alkalmazása.

A szabvány lehetővé teszi egy kiegészítő, sorrendi leírónyelv diagram (SFC) nyelvhasználatát, ami a PLC program programkomponenseinek végrehajtási struktúráját írja le.

2.2.1 Az SFC leírónyelv.

Az SFC nyelvben egy-egy program egységet egy lépésnek tekinthetünk. A nyelv célja, hogy aprogramegységek végrehajtásának struktúráját (sorrendiségét) a céljaink szerint definiálni

8

tudjuk. A gyakorlatban csaknem kizárólagosan grafikus szimbólumokkal írjuk le avégrehajtási sorrendet. A lépések végrehajtása során az alábbi jelöléseket alkalmazhatjuk.

A Step nevű lépés egy kezdeti (inicializáló) lépést, míg az S2 nevű lépés egy normálprogramegységet jelöl. A szimbólumon belül a lépés neve szerepel. Két lépés egymást követősorrendi végrehajtását az alábbi

ábrarészlet mutatja. Az S1 végrehajtását követően akkor hajtódik végre az S2 lépés, ha az fjelű (BOOL) feltétel igaz (TRUE). A következő ábra két programlépés alternatívvégrehajtását jelöli.

Az S1 végrehajtását követően az S2 hajtódik végre, ha az f feltétel igaz. Ha ez a feltétel nemteljesül, akkor az S3 fog végrehajtódni, ha a g feltételváltozó igaz.

Az egyidejű (konkurens) végrehajtásra mutat példát a következő ábra.

9

Itt az S1 végrehajtását követően S2 és S3 egyidejűleg (konkurens módon) hajtódik végre.

A fenti ábrarészlet arra mutat példát, hogy az S2 és S3 mindkét lépés befejezését követőenhajtódik végre az S1 nevű lépés.

Az SFC struktúra leírás alkalmas program lépések átugrásának előírására is.

Abban az esetben, ha az a jelű feltétel igaz, akkor S1 után S2 lépés fog végrehajtódni, majd ab feltétel teljesülése után hajtódik végre az S3. Ha az a feltétel nem teljesül, míg a c feltételigaz, akkor S1 után az S3 hajtódik végre, azaz az S2 átlépésre kerül.

10

Programegységek ciklikus végrehajtását is előírhatjuk SFC nyelven.

Az S2 lépés mindaddig ismétlődik, amíg a b feltétel hamis, és a c feltétel igaz. Ha a b feltételigazzá válik, akkor az S3 lépés fog végrehajtódni.

2.2.2 Az utasításlistás programnyelv (IL).

Az IL programnyelv opcionálisan négy elemet tartalmazhat:

Címkét, amit pontosvessző zár le Utasítást Operanduszt Megjegyzés mezőt

A program szerkezetére jellemző pl. az alábbi programrészlet

START: LD %IX1.2 (* nyomógomb állapotának betöltése *)AND %M3.2 (* engedélyezési feltétellel ÉS kapcsolat *)ST %QX5.4 (* működtető jel kiadása *)

A műveletek végrehajtását úgy kell elképzelni, hogy egy akkumlátor regiszter, és azutasításban szereplő operandusz között értelmeződik a kapcsolat, és az eredmény azakkumlátor regiszterben képződik. A kifejezések zárójelezhetők, azaz például az

AND(LD %IX3.2OR %IX3.3

)

utasítássor az akkumlátor értékét ÉS kapcsolatba hozza a két változó VAGY kapcsolatánakeredményével.

A PLC fejlesztőtől a szabvány az alábbi (IL) utasításokat követeli meg.

11

Utasításkód

Módosító Leírás

LD N Az operandus értékét (LD), vagy annak negáltját (LDN) tölti azakkumlátorba

ST N Az akkumlátor (ST), vagy annak negáltját (STN) viszi az operandusáltal megadott helyre.

S Beírja a címzett RS tárolót, ha az akkumlátor tartalma TRUER Törli a címzett RS tárolót, ha az akkumlátor tartalma TRUEAND N, ( Logikai ÉS kapcsolatba hozza az akkumlátort az operandus értékével

(AND), vagy annak negáltjával (ANDN).OR N, ( Logikai VAGY kapcsolatba hozza az akkumlátort az operandus

értékével (OR), vagy annak negáltjával (ORN).XOR N, ( Logikai KIZÁRÓ VAGY kapcsolatba hozza az akkumlátort az

operandus értékével (XOR), vagy annak negáltjával (XORN).NOT Az akkumlátor tartalmának negálásaADD ( Az operanduss értékének (aritmetikai) hozzáadása az akkumlátorhozSUB ( Az operandus értékének (aritmetikai) kivonása az akkumlátorbólMUL ( Az akkumlátor megszorzása (aritmetikai) az operandussalDIV ( Az akkumlátor osztása (aritmetikai) az operandussalMOD ( Az akkumlátor osztása (aritmetikai) az operandussal, és az osztás

maradékának a képzéseGT ( Logikai 1 értéket szolgáltat, ha az operandus (aritmetikai) értéke

nagyobb mint az (aritmetikai) akkumlátor értéke.GE ( Logikai 1 értéket szolgáltat, ha az operandus (aritmetikai) értéke

nagyobb, vagy egyenlő mint az (aritmetikai) akkumlátor értéke.EQ ( Logikai 1 értéket szolgáltat, ha az operandus (aritmetikai) értéke

egyenlő az (aritmetikai) akkumlátor értékével.NE ( Logikai 1 értéket szolgáltat, ha az operandus (aritmetikai) értéke nem

egyenlő az (aritmetikai) akkumlátor értékével.LT ( Logikai 1 értéket szolgáltat, ha az operandus (aritmetikai) értéke

kisebb mint az (aritmetikai) akkumlátor értéke.LE ( Logikai 1 értéket szolgáltat, ha az operandus (aritmetikai) értéke

kisebb, vagy egyenlő mint az (aritmetikai) akkumlátor értéke.JMP C, N Ugrás az operandusként szereplő címkére (JMP), vagy ugrás a

címkére, ha az akkumlátor tartalma 1 (JMPC), vagy ugrás a címkére,ha az akkumlátor tartalma 0 (JMPN).

CAL C, N Az operandusként szereplő funkcióblokk hívása (CAL), vagy afunkcióblokk hívása, ha az akkumlátor tartalma 1 (CALC), vagy afunkcióblokk hívása, ha az akkumlátor tartalma 0 (CALN).

RET C,N Visszalépés a hívott funkcióból, funkcióblokkból, vagy programból(RET). A RETC akkor eredményez visszalépést, ha az akkumlátor 1értékű, míg a RETN akkor, ha az akkumlátor 0.

) Záró zárójel

A funkció és a funkcióblokkok hívására az IL nyelven a következő részlet mutat példát:

12

A példa azt mutatja, hogy a funkció (FUN) esetében nem szerepelhet formális paraméterlista,míg a funkcióblokk (FB) hívása esetében formális paraméterlistával kell meghívnunk ablokkot. Nem szükségszerű, hogy valamennyi paraméter értékét a definiálás szerintisorrendben megadjuk. Mind az átadott paraméterek száma és sorrendjében szabadságunk vanaz alábbiak szerint.

Egy funkció blokk nemcsak egy formális paraméterlista megadásával hívható, hanem afunkcióblokk paramétereit egy struktúrán keresztül is cserélhetjük. Az ábrán egy fel-leszámláló grafikus (FBD) szimbólumát láthatjuk.

A Counter_UD funkcióblokknak 5 bemenet van, é s három kimenete. Ezen funkcióblokk bementi és kimeneti paramétereit az alábbi eljárással adhatjuk meg, ill. menthetjük ki.

Végezetül nézzünk egy példát IL programnyelven írt funkcióra. A válto

13

2.2.3 Strukturált szöveg (ST) programnyelv.

Az ST nyelv, gyakorlatilag Pascal, vagy C nyelvhez hasonló magas szintű programnyelvnektekinthető. Lényeges egyszerűbben, és áttekinthetőbb formában lehet egy feladatot megoldaniaz ST nyelv alkalmazásával, mint az IL utasításlistás programmal.

A kifejezések formája az ST nyelven például az

A+B-C*ABS(D)

formában írhatók. A műveletek végrehajtásának a sorrendjét a műveletek precedenciája, és azazonos precedenciaszintű műbeleteknél a balról jobbra haladó kiértékelés szabja meg, mint azmás programnyelveknél is szokásos. Ha az A, B, C, D változók 1, 2, 3, 4 értékűek, akkor azeredmény -9 lesz ebben a példában.

A nyelv alkalmazása során az alábbi műveleti utasításokat használhatjuk (a felsoroláscsökkenő precedencia sorrendben készült).

Precedencia Megnevezés Jelölés1 Funkció hívása (végrehajtása) Funkciónév (paraméter lista)2 Negáció -

Komplemens képzése NOT3 Hatványozás **4 Szorzás *

Osztás /Osztási maradék MOD

5 Összeadás +Kivonás -

6 Összehasonlítás <, >, <=, >=7 Egyenlőség =

Egyenlőtlenség <>8 Logikai ÉS &

Logikai ÉS AND9 Logikai kizáró vagy XOR10 Logikai VAGY OR

A műveleteken felül egyéb utasításokat is alkalmazhatunk a programjainkban.

14

Értékadó utasítás. Például az A := C; CV := CV+1; C := SIN(X); utasításokmindegyike a kifejezések bal oldalán szereplő változónak ad új értéket.

Funkcióblokk hívása, és a visszatérési érték felhasználása. Erre példát az alábbi sorokmutatnak.

CMD_TMR(IN := %IX5.0, PT := T#300ms);A := CMD_TMR.Q;

RETURN. A RETURN; utasítás a programegységből való kilépést fogjaeredményezni.

Feltételes programvégrehajtást eredményező IF utasítás. Példa az IF utasításhasználatára.

IF devTimer.Q THENdevTimer ( IN := FALSE, PT := devSpeed );engine := NOT engine;IF engine = FALSE THEN

steps := steps + 1;END_IF

ELSEdevTimer ( IN := TRUE, PT := devSpeed );

END_IF

A példából azt láthatjuk, hogy ha az IF utasításban szereplő feltétel TRUE (igaz),akkor a THEN kulcsszót követő utasítások hajtódnak végre, ha pedig a feltétel nemteljesül (FALSE), akkor az ELSE kulcsszót követő utasítások fognak végrehajtódni.Az ELSE kulcsszó használata opcionális, nem kötelező, mint az a példából is látszik.Az IF utasításhoz kapcsolódó utasításokat az END_IF kulcsszó határolja (terminálja).

A CASE utasítás.

ERTEK := BCD_TO_INT(PEREMKEREKES_KAPCSOLO_ERTEK);CASE ERTEK OF

1,5: DISPLAY := VILAGIT;2: DISPLAY := INVERZ;3,4: DISPLAY := VILLOG;ELSE :

DISPLAY := SOTET;END_CASE

A fenti programrészlet azt mutatja, hogy az ERTEK jelű változó értékétől függően aDISPLAY jelű változó más, és más értéket (VILAGIT, SOPTET stb.) kap.

A FOR ciklusszervező utasítása.

15

A programrészlet azt mutatja, hogy az I értéke 1,3,5 stb. (kettővel növekvő) értékeketvesz fel egymás után, és azt ellenőrizzük, hogy a WORDS jelű szövegtömb ugyanezenelemei tartalmazzák-e a KEY szövegrészletet. Ha igen akkor az EXIT (a ciklusbelsejéből való kiugrás) utasítás fog végrehajtódni. Az ismétlődő utasítás sorozat végétaz END_FOR kifejezés jelzi. Azaz a fenti FOR ciklus után J értéke azon számértékkelazonos, amelyik tömbelemen a KEY szócska szerepel (1,3,5,…), vagy ha nemszerepel a KEY szó, akkor J=101 értékű lesz. Amennyiben a BY 2 kulcsszó nemszerepelne, akkor alapfeltételezés szerint (default) I értéke egyesével változik.

A ciklusok szervezése a WHILE utasítással is lehetséges. Az előző pontban leírtfeladat a

formában is megoldható, és J értéke azonos lesz a FOR ciklusnál szereplő J értékével. Látható, hogy a WHILE ciklus végét az END_WHILE kulcsszó mutatja.

A ciklus szervezés következő lehetősége a REPEAT utasítás felhasználása. Akorábban már ismertetett feladatot a

formában is megoldhatjuk. A REPEAT kulcsszót követő utasítássorozat mindaddigismétlődik, míg az UNTIL kifejezésben szereplő feltétel nem teljesül. Jelen esetbenvagy J=101 értékűvé nem válik, vagy a WORDS tömb soron következő eleme KEYtartalmú szócska.

A FOR, WHILE, REPEAT ciklusok törzséből való kiugrást az EXIT utasításhasználata teszi lehetővé.

A ; jel az üres (termináló) utasítást jelenti.

A következő részlet egy ST nyelven megírt funkcióblokkot mutat illusztrációként.

16

Az ábra felső részén a változók definiálása látszik. A funkcióblokkhoz egyetlen lokális (i)változó tartozik, míg a többi változó értelemszerűen globális definiálású (és ez itt nemlátszik). A blokk egy logikai TRUE értéket ad vissza, ha az alkalmazás legfeljebbMAX_NBR_WINDOWS számú (az aktív, vagy üzenetet küldő) ablakai közül van olyan,aminek a státusza eltér az UI_MESSAGE_ERASE, vagy UI_MESSAGE_ONLY,UI_MESSAGE_STRING állapot értéktől. Ha egyetlen ilyen ablak sincs, akkor afunkcióblokk FALSE értékkel tér vissza.

Az ST programnyelv alkalmazása akkor javasolt, ha egy viszonylag bonyolult vezérlési,irányítási feladatot kell megoldani, és ez grafikus (LD, FBD) programnyelven gyakorlatilagreménytelen, az IL listás nyelv pedig túlságosan áttekinthetetlen programot eredményezne. Azáltalunt áttanulmányozott berendezés működtető program részei kizárólag ST nyelven írtutasítás sorokat tartalmaztak, és esély sem volt arra, hogy ezeket más programnyelvenhatékonyan meg lehetett volna oldani. Az ST nyelven írt programok azt a veszélyt hordozzák,hogy programozói hiba miatt egy-egy programegység (POU) hibásan fog működni, példáulvégtelen ciklus alakul ki, egy feltétel hibás megfogalmazása miatt. Ezért ezeket aprogramrészeket különös gondossággal kell ellenőrizni, tesztelni.

2.2.4 Létradiagramos (LD) programnyelv.

Az LD programnyelv leginkább a vezérlések áramút tervéhez hasonlítható, és a relés logikaitervezésekor követett gondolkodásmódot örökíti át a PLC programozás világába. Egy energiavezetéktől, ha az energia az alkalmazott kontaktusokon, funkcióblokkokon keresztül eljut egytekercshez, akkor a tekercs (a kimenet) gerjesztett logikai 1 állapotba kerül. Ha azenergiafolyam valamely elem (kontaktus, funkcióblokk) állapota miatt megszakad, akkor akimenet nem gerjesztődik, logikai 0 állapotba kerül.

17

Az LD programok

Vízszintes, és függőleges energiavezetékeket Kontaktusokat Tekercseket Funkciókat, és funkcióblokkokat

tartalmaznak. A szabvány szerint az alábbi alapelemek alkalmazhatók.

--| |-- záró kontaktus. Ha a kontaktushoz rendelt logikai változó 1 értékű, akkorátengedi az energiát, ellenkező esetben szakítja.

--| / |-- bontó kontaktus. Ha a kontaktushoz rendelt logikai változó 0 értékű, akkorátengedi az energiát, ellenkező esetben szakítja.

--| P |--Pozitív él. Ha a kontaktushoz rendelt logikai változó 0 értékről 1 értékre nő,akkor átengedi az energiát ezen mintavételezés idejére, ellenkező esetben szakítja azt.

--| N |--Negatív él. Ha a kontaktushoz rendelt logikai változó 1 értékről 0 értékrecsökken, akkor átengedi az energiát ezen mintavételezés idejére, ellenkező esetbenszakítja azt.

--( )-- Tekercs. Amennyiben a tekercs energiát kap, akkor a tekercshez rendelt logikaiváltozó 1 értéket kap, ellenkező esetben a változó 0 értékű lesz. A tekercs baloldalának (1 vagy 0) állapota átmásolódik a tekercs jobb oldalán lévő csatlakozópontra is.

--( / )--Negált működtetésű tekercs. Amennyiben a tekercs energiát kap, akkor atekercshez rendelt logikai változó 0 értéket kap, ellenkező esetben a változó 1 értékűlesz. A tekercs bal oldalának (1 vagy 0) állapota átmásolódik a tekercs jobb oldalánlévő csatlakozó pontra is.

--(S)-- RS tároló beírás. Ha energia kapcsolódik a tekercsre, akkor a címzett RS tárolóbeírásra kerül. A tekercs bal oldalának (1 vagy 0) állapota átmásolódik a tekercs jobboldalán lévő csatlakozó pontra is.

--(R)-- RS tároló törlés. Ha energia kapcsolódik a tekercsre, akkor a címzett RS tárolótörlésre kerül. A tekercs bal oldalának (1 vagy 0) állapota átmásolódik a tekercs jobboldalán lévő csatlakozó pontra is.

--(P)-- Ha a tekercsre kapcsolt jel 0-ról 1-re változik, akkor a címzett logikai jel egyvégrehajtási ciklusra 1 értékbe íródik. A tekercs bal oldalának (1 vagy 0) állapotaátmásolódik a tekercs jobb oldalán lévő csatlakozó pontra is.

--(N)-- Ha a tekercsre kapcsolt jel 1-ről 0-ra változik, akkor a címzett logikai jel egyvégrehajtási ciklusra 1 értékbe íródik. A tekercs bal oldalának (1 vagy 0) állapotaátmásolódik a tekercs jobb oldalán lévő csatlakozó pontra is.

--- | Vízszintes, és függőleges vezetékszakasz.

18

A funkcióblokkokat téglalapok jelölik, amelyekbe a funkcióra jellemző szövegek, abementek, és kimenetek vannak feltüntetve.

A funkcióblokkos programozásra az alábbi ábra mutat példát.

A képernyőn egy funkcióblokk LD programja látható, ami négy NETWORK-ból áll. Az elsőnetwork a funkció hívásakor a deviceDown logikai változót 1-be, míg a deviveUp változót 0-ba írja, amelyek egy-egy RS tároló kimenetei. A második network MOVE funkcióblokkja a2000 ms értéket írja egy időzítő időzítési értékeként. A harmadik network az időzítő bementiváltozóját teszi logikai 1 értékbe. Végezetül a negyedik network egy bekapcsolási időzítőtmutat. Az EN jelű bemenetek a funkcióblokk működésének engedélyező bemenetét jelöli.

A leírás azt akarja bemutatni, hogy a networkok egymás után növekvő sorszámok szerinthajtódnak végre (értékelődnek ki).

2.2.5 Funkcióblokkos (FBD) programnyelv.

A funkcióblokkos FBD programozás a logikai kapukkal, és funkcióblokkokkal valófeladatleírást jelenti. Inkább az egyén szubjektív látásmódjától függ, hogy az LD, vagy azFBD programnyelv használatát preferálja.

19

Az FBD nyelv a VAGY (OR), az ÉS (AND), és a NEM (NOT) kapcsolat leírását szolgálóblokkokat tartalmazza. Ezen túl a könyvtárak funkcióblokkjait használhatjuk a programfejlesztésénél.

Az alábbi ábra egy példát mutat az FBD nyelv használatára:

A példa azt mutatja, hogy az ido jelű bekapcsolás késleltetőt a be1, és be2 jelek ÉSkapcsolatával indítjuk. A ki3 kimenet pedig a be1, és ki3 negált változók NOR kapcsolatakéntállítódik elő.

2.2.6 A szabványos funkcióblokkok.

A szabvány rögzíti, hogy milyen funkcióblokkokat kell tartalmaznia egy PLCfejlesztőrendszerének. A funkciók csoportosítása az alábbi.

Flipflopok Él detektálás Számlálók Időzítők

A táblázat a csoporton belüli elemek elnevezését, bemeneteit és kimeneteit tartalmazza.

20

A jelölések magyarázata az alábbi.

2.2.7 A szabványos funkcióhívások.

A szabvány az alábbi funkciócsoportokat, és funkciókat definiálja. A táblázatokbanfeltüntetésre kerül a funkció neve, be és kimenő paramétereinek típusa, a funkció rövidleírása, valamint a funkció felülbírálhatósága, és kiterjeszthetősége (lásd alább). Az adattípusok megnevezésekor az ANY valamennyi adattípust (pl. BOOL, INT, SINT stb.), azANY_INT pedig valamennyi INT típust (INT, DINT, SINT) jelenti. Értelemszerűen ugyaneza logika igaz az ANY_REAL stb. változó típusokra is.

Adat típus konvertáló függvények

21

Numerikus függvények

Aritmetikai függvények

Bit sorozatokkal való műveletek

22

Kiválasztás, és összehasonlítás

Stringek kezelése

Idő és dátum kezelése

23

Felsorolás típusok kezelése

A funkciókban szereplő jelölések összefoglalása az alábbi.

A funkcióknál szereplő „overloaded„ (felülbírálható) igen jelölés azt mutatja, hogy a funkciókülönböző típusú adatokra egyaránt alkalmazható, mint azt az alábbi ábra mutatja.

Az összeadás (ADD) normál (INT), dupla pontos (DINT), és rövid (SINT) egész számokraegyaránt alkalmazható.

A funkcióknál szereplő „extensible” (kiterjeszthető) igen jelölés azt mutatja, hogy abemenetek száma tetszőlegesen bővíthető, mint a következő ábra mutatja.

24

3. A TwinCAT PLC Control programkomponens

Ez a program szolgál a PLC program fejlesztésére, és a kifejlesztett program működésénekellenőrzésére (nyomkövetésére).

A programfejlesztés lépéseit kövessük végig egy egyszerű példa kapcsán. A PLC egyetlenkimenete 2 s ciklusidővel villogtasson egy lámpát akkor, ha a start jelű bemenetén egykapcsolót bekapcsolunk (a bemenet logikai 1 állapotban van). Szándékosan ilyen egyserűfeladatot akarunk megoldani, hogy ne a programozás részleteinek a nehézségeivel, hanem arendszer alkalmazásának a lépéseivel ismerkedjünk. Ugyanazt az egyszerű feladatot többfajtaprogramnyelv alkalmazásával, néha több funkcióblokkra lebontva oldjuk meg, hogy alehetőségek világossá váljanak.

A program indítását követően a File menüpontra kattintást követően a következőbejelentkezési felület jelenik meg a PC képernyőjén.

25

Válasszuk ki, hogy egy új PLC projektet (alkalmazást) kívánunk fejleszteni. Az alkalmazásfejlesztésével kapcsolatos első párbeszédablak arra vonatkozik, hogy a fejlesztendő programmilyen típusú PLC-n fog futni.

Itt kell megneveznünk, hogy vagy egy PC-n, vagy egy rack (modul) kialakítású központiegységen fog a futni a PLC programunk.A következő párbeszédablakban azt kell megadnunk, hogy a fejlesztendő program egységnekmilyen a jellege, és milyen programnyelven kívánjuk fejleszteni a programunkat.

26

A programfejlesztés az IEC 61131-3 szabvány valamennyi programnyelvén lehetséges.

Egy-egy alkalmazásnak egy MAIN nevű programot kell tartalmaznia. Ez a programszegmens, ami néhány ms ciklusidővel újra és újra végrehajtódik, és ez tekinthető azalkalmazás főprogramjának. Ez a főprogram funkció újabb programot, funkció blokkokat(FB), vagy funkciókat (FUN) tartalmazó programegységeket hívhat meg. A programokciklusidejét a TwinCAT System Manager programkomponensében írhatjuk elő. Ennek aciklusidőnek a szükséges nagysága a működtetett technológia jellegétől függ. A PLCreakcióideje az említett ciklusidő kétszerese. Azaz egy lassúbb berendezés esetén akár a 10ms ciklusidő (20 ms reakcióidő), de egy gyors technológiánál ez a ciklusidő gyakorlatilagelfogadhatatlan.

A funkció nem tartalmaz statikus paramétereket, hanem az aktuálisan átadott paraméterekalapján kiszámítja a funkcióhoz rendelt algoritmus szerinti értéket, és ezt visszaadja a hívóprogramnak. A funkciókkal, és funkcióblokkokkal bővíthetjük a PLC gyári funkcióit aleggyakrabban előforduló feladatok ellátására szolgáló saját programrészekkel.

A régebbi PLC-k általában csak egyetlen programszegmenset (a MAIN) kezelték, azazvalamennyi utasítás ebben az egy programszegmensben helyezkedett el. Egyszerűbb esetbenez a technika valóban megfelel, de egy bonyolultabb vezérlés esetén célszerűbb a feladatmegoldását szolgáló programot több részre bontani (szegmentálni). Erre a célra szolgálnak afelhasználó által írt funkcióblokkok, ill. funkciók esetleg programok. A szegmentáláshoz akárújabb programokat is hívhatunk a főprogramból. Ez alapvetően annyiban különbözik afunkcióblokkoktól, hogy a fizikai be kimenetek kezelése a programon belül megtörténik, míga funkcióblokkok hívásakor ez nem következik be.

Most ugyanazt a feladatot (a lámpa villogtatását) különböző programnyelveken oldjuk meg.

3.1 A feladat megoldása LD programnyelven.

Az LD (vagy az FBD) programnyelv talán a leginkább megszokott a PLC-k programozásánál,ha klasszikus vezérlési feladatokat kell megoldani. A mérnöki szemlélethez közelebb áll, minta szöveges (ST, IL) programnyelvek, és a program nyomkövetése, a programhibák okánakfelderítése is egyszerűbb, mint szöveges programnyelvekben.

27

Egyetlen MAIN szegmens alkossa a programunkat az egyszerűség kedvéért, tehát az előzőábra párbeszédablakában az OK gombra kattintva megjelenik előttünk a MAIN programadatrészének definiálására, valamint ettől elválasztva a LAD szimbólumok rajzolásáraszolgáló hely.

A rajzfelületre húzzuk rá (vagy válasszuk ki) a megfelelő kapcsolási szimbólumokat, és ígyrajzoljuk meg az elképzelt LD programot. Ügyeljünk arra, hogy egy NETWORK, csak egytekercset tartalmazhat (speciális esetben, ha párhuzamosan több kimenetet működtetünk,akkor több tekercset is rajzolhatunk.) Ha egy rajzszimbólumot (pl. kontaktust), akkor afejlesztő rendszer azt várja, hogy adjuk meg a szimbólumhoz tartozó változó nevét.Amennyiben egy olyan szimbólumnevet adunk meg ami (pl. start) még nem szerepel aváltozók listájában, akkor automatikusan megjelenik egy párbeszédablak a változódefiniálására.

A példában a start nevű bites változót egy adott címre (%IX1.0) képezzük le, ahova a PLC-ből a változó értékét ki tudjuk majd olvasni. Azokat a változókat, amelyek a PLC be vagykimenetein is megjelennek, legyenek azok kétállapotú (pl. BOOL ami egy fizikai bemenethezkapcsolódik), vagy akár szavas (pl. INT, egy A/D konverter számértéke) azokat erre acímterületre kell definiálni. Azokat a változókat, amelyek nem kapcsolódnak a PLC be vagy

28

kimeneti moduljaihoz (nem a PLC modulokkal való táviratozási kapcsolatban kapnakértéket), azoknál értelemszerűen a cím (Addres) mezőt üresen kell hagyni.

A definíció során megadhatjuk, hogy a változó melyik csoportba tartozik. A Class ablakbanjelölhető meg, hogy a POU (program egység) bemeneti, kimeneti, vagy belső lokálisváltozójáról van-e szó.

A változó típusaként az alábbi csoportokból választhatunk.

Az ábrán megjelenített típusok az IEC 61131-3 szabvány adat típusai. Az adat típusokkiválasztása során további csoportok típusdefiníciói közül is választhatunk.

Amennyibe a TYPE definíciós paranccsal más elnevezésű típusokat hozunk létre(mint felhasználók), akkor ebből a csoportból is rendelhetünk változó típust azobjektumunkhoz.

A szabvány standard funkcióblokkjaihoz rendelt adatstruktúrák csoportjábólrendelhetjük a változóhoz a számunkra megfelelőt (pl. TON).

Az általunk írt funkcióblokkjaihoz rendelt adatstruktúrák csoportjából rendelhetjük aváltozóhoz a számunkra megfelelőt.

A RETAIN és PERSISTENT kijelölésekkel előírhatjuk, hogy a változó értéke megőrződjön.A RETAIN kijelölés a program leállításakor érvényes értéket foga újrainduláskor betölteni aváltozókba, míg a PERSISTENT jelölés minden futási ciklusban a változó értékének mentésétfogja eredményezni. A CONSTANT jelölés egy olyan objektumot eredményez, aminek azértéke a futás során nem módosítható.

29

A változókhoz egy megjegyzés (comment) szöveget rendelhetünk, ami nagymértékbensegítheti a változó szerepének a megértését.

Amikor egy változót definiálunk (kitöltjük a párbeszédablak általunk megkívánt paramétereit,és az OK funkcióval lezárjuk a párbeszédablakot), akkor ez a változó meg fog jelenni a

A változókat olyan formában is definiálhatjuk, hogy az egeret elmozgatjuk a változókdefinícióit tartalmazó ablakra, majd megnyomjuk az egér jobb oldali tűzgombját, aminekhatására az alábbi menü jelenik meg.

Erről a menü listáról az „Auto Declare” menü pontot választva a korábbi deklarációspárbeszédablak jelenik meg.

Lépésenként tehát felépíthetjük az alábbi programvázlatot.

30

A grafikus szimbólumok (kontaktusok, időzítők) kirajzolása után a fejlesztő rendszerkérdőjelekkel jelzi, hogy a jelölt helyeken adjuk meg a változók, vagy egyéb konstansoknevét (konstans esetén értékét). Tehát az első NETWORK első záró kontaktusánakelhelyezését követően a start változónevet kell begépelnünk, és ha az még nem szerepel,akkor azt a korábban leírt formában deklarálni kell. Az elemek és funkcióblokkokkiválasztásához (elhelyezéséhez) célszerű ugyancsak az egér jobb oldali tűzgombjátmegnyomni (vagy az Insert menü pontot aktivizálni), aminek hatására a következő menübőlválaszthatjuk ki a kívánt szerkesztési funkciót.

31

Mint látható a példánál valamennyi változó a MAIN szegmens lokális változójaként vandefiniálva, mert nincs más program egység (POU), aminek ugyancsak látnia kellene egyesváltozókat. A több POU számára közös változókat globális minősítésűnek kell definiálni. Magának a programnak a működése a következő. Alapállapotban mind a vilagosletelt, mind asotetletelt változók értéke 0. Amikor a start bemenetre 1 értéket adunk elindul a felsőbekapcsolás késleltető, és 2 s múlva a vilagosletelt értéke 1 lesz. Ez elindítja az alsóbekapcsolás késleltetőt. Újabb 2 s múlva ezen időzítő sotetletelt kimenete 1 értékre vált, ésezen érték azonnal törli a felső időzítőt (az IN bemeneten megszűnik az energia), és így avilagosletelt tekercs is 0 értékű lesz. Ez a 0 érték a második időzítő (és a sotetletelt tekercs)törlését fogja kiváltani, és ezzel előröl kezdődik a ciklus A villogolampa fizikai kimenetakkor fogja a lámpát működtetni, ha a start fizikai bemenet 1 állapotban van (be vankapcsolva a rá csatlakozó kapcsoló), és a vilagosletelt időzítő kimenete ugyancsak 1.

3.2 A feladat megoldása ST programnyelven.Az előző fejezetben LAD nyelven megoldottuk a lámpa villogtatását. Most ugyanezt afeladatot ST programnyelven oldjuk meg. Hajszálpontosan ugyanazokat a függvényeket,kapcsolatokat írjuk le ST programnyelven, mint azt korábban a létradiagramos nyelven tettük.

32

A programhoz tartozó változók egy kivételével azonosak az LD programnál felsoroltakkal. Abe jelű BOOL segédváltozó csak itt az ST nyelvű programnál szerepel, és mint a programutasításaiból látható a start és a sotetletelt negáltjának ÉS kapcsolatát tartalmazza. Ez aváltozó adja a tvilagos (TON típusú struktúra) IN bemenetének értékét. A második sor astandard bekapcsolás késleltető funkcióblokk hívását tartalmazza. A TON funkcióblokknakátadandó paraméterek nevét és szerepét, az IEC 61131-3 szabvány ismertetése tartalmazza.Az időzítő aktuális Q kimenete a tvilagos adatstruktúra tvilagos.Q elemén keresztül érhető el.A negyedik sor a tsotet jelű bekapcsolási időzítő hívását mutatja. Belátható, hogy a példábanszereplő sotetletelt, vilagosletelt BOOL segédváltozók alkalmazása itt szükségtelen, hiszenaz időzítők Q struktúra elemén keresztül közvetlenül szerepeltethetnénk más kifejezésekbenugyanezen változók értékét. Itt az LD programmal való kompatibilitás miatt szerepeltejükezeket a változókat. Maga a program úgy működik, hogy a hat utasítássor egymás utánvégrehajtódik, majd ezt követően ismét az első sorral kezdődően fog végrehajtódni a program(mintegy végtelenszer ciklikusan ismételve ezt a hat utasítássort).

A program változók deklarálásánál a korábban már leírt utat követhetjük. Ha a változó nevétbegépeljük a programunkba, és a változó még nincs definiálva, akkor megjelenik adefiniálásra szolgáló párbeszédablak. A másik lehetőség, hogy az adat deklarációs ablakrészremozgunk az egérrel, és a jobb oldali egérgomb megnyomásakor megjelenő menüből az „AutoDeclare” menüpontot választjuk a párbeszédablak megjelenítéséhez, mint azt az LDprogramnyelven való programíráskor is elmondtuk.

A program utasításainak az írásakor, ha megnyomjuk ugyancsak az egér jobb gombját, és amegjelenő menüből az „Input Assistant” menü pontot választjuk akkor megjelenik az alábbipárbeszédablak.

33

Látható, hogy a párbeszédablak bal oldalán kijelölhetünk egy csoportot, és a jobb oldalonmegjelenő választék egy elemét emelhetjük át a programunkba. Gyakorlatilag mind aváltozók bármelyike, valamint bármelyik utasítás, vagy funkció elérhető ezen apárbeszédablakon keresztül. Nem kötelező a támogatás igénybevétele, de kétségtelenüleseteként előnyös a használata egy-egy programsornál (pl. elfelejtettük egy globális változópontos nevét).

3.3 Az SFC alkalmazása a feladat megoldásánál.

Az SFC nyelv a program végrehajtásánál jelenthet nagy segítséget. Azon túl, hogy aszekvenciális (sorrendi) vezérlések lépéseinek leírására, átláthatóságának javítására egyhatékony módszer, a hardver teljesítmény jobb felhasználását (kisebb ciklusidőket) isbiztosíthatja.

Ennek igazolására vigyük végig az alábbi gondolat kísérletet. Egy berendezés egy kapcsolóállapotától függően vagy kézi, vagy automatikus üzemben működtethető. Amennyiben aprogram végrehajtását (!) nem szegmentálnánk az SFC nyelv alkalmazásával, akkor mindenvégrehajtási ciklusban mind az automatikus, mind a kézi működtetés programlépéseit ki kellértékelni. Ha figyelembe vesszük, hogy csak vagy az egyik, vagy a másik üzemmódlehetséges, úgy az SFC nyelven az alábbi alternatív programvégrehajtást írhatjuk elő.

34

Ilyenkor az alternatív ágak egyike kerül csak értelmezésre a kézi/automatikus kapcsolóállapotától függően, tehát a program ciklusideje a kevesebb kiértékelt utasítás miattlényegesen (esetleg a felére) csökkenthető. Ha program végrehajtását (nem csak a programszerkezetét!) tovább bontjuk még további hatékonyságjavulást érhetünk el.

A korábban ismertetett, és az LD ill. ST nyelven megírt feladatnál az SFC nyelvalkalmazásához valamiféle programszegmentálást kellene definiálni. Bontsuk a feladatot kétprogramlépésre.

1. A tvilagos jelű időzítés leteltére való várakozás2. A tsotet jelű időzítés leteltére való várakozás.

A gondolatmenet alapján a két programlépéshez rendeljünk egy-egy programszegmenset(egy-egy funkcióblokkot). Ezen kívül a program tartalmazza a MAIN program szegmensetami a végrehajtás leírását tartalmazza.

A három programegység már indokolttá teszi, hogy a közösen használt változókat a globálisváltozók közé soroljuk. Ennek az a menete, hogy az alsó sor bal oldalán lévő ikonok közül ajobb oldali erőforrások (Resurces) fülre kattintunk (a fülek balról jobbra az alábbimegjelenítéseket eredményezik: program egységek, adatok, vizualizáció, erőforrások).

Ekkor a megjelenő választékból a globális adatok pontot választjuk, és az ablakba mozgatjukaz egeret, és a jobb oldali egérgomb megnyomásakor megjelenő menüből az „Auto Declare”menüpontot választjuk a párbeszédablak megjelenítéséhez.

35

Ezen a párbeszédablakban a korábban leírtak szerint deklarálhatjuk a globális változókat.Esetünkben a példához kapcsolódóan a következő globális adatok kerültek definiálásra.

Ezen változók mindegyike bármelyik programegységből elérhető. A tvilagos, és tsotet TONstruktúrák a két időzítőhöz rendelődnek. A tsotet_IN, és tvilagos_IN BOOL változók azidőzítők bementére (indítására) kapcsolódó jeleket jelöli. A start és villogolampa a fizikai beés kimeneteket azonosítja.

Logikailag az SFC program ismertetésével kellene folytatni a magyarázatot, de a ténylegesprogramírási sorrend ettől eltér. A tényleges programírási sorrend:

Belépés a TwinCAT fejlesztőrendszerbe, és a programegységek (POU) kertének(nincsenek sem adat definíciók, sem programutasítások) létrehozása. Első lépésben aMAIN (SFC nyelvű) programot hozzuk létre.

36

A képernyő bal oldali része fölé mozgatva az egeret, és megnyomva a jobb oldaliegérgombot az alábbi menülista Add Object parancsával létrehozzuk az idozites1funkcióblokk keretét ST programnyelven (az új POU létrehozása a Project menülistaObject menüpontjában is kiadható (Add)).

Hasonló módon hozzuk létre az idozites2 funkcióblokk keretét STprogramnyelven

Definiáljuk a korábban leírt módon a globális változókat. Megírjuk ST programnyelven az idozites1, majd az idozites2 funkcióblokkokat. Elkészítjük a MAIN programszegmens SFC programját.

Most térjünk el ettől a tényleges sorrendtől, és kezdjük az ismertetést az SFC nyelvű MAINszegmens (program) leírásával.

A leírtak szerint két lépésből fog állni a programunk. A programlépéseket az inicializálóblokk után kell elhelyezni egymást követően. Egy lépésblokk elhelyezésének az a menete,hogy elmozgunk az egérrel a beilleszteni kívánt hely lépésfeltételének környezetébe, majd abal oldali egérgomb megnyomásával kijelölődik maga a lépésfeltétel. A jobb oldali gombmegnyomásával megjelenik egy menü, és ebből kiválaszthatjuk, hogy hova szeretnénkelhelyezni a új lépés blokkot, valamint a lépésfeltételt.

37

A programunkban két programlépést helyezünk el egymást követően (STEP1, és STEP2). Alépésfeltételek vagy egyszerűen felülírhatók egy logikai változó nevével, vagy egy, alépésfeltételt előállító programrész megírásával. Az ismertetett módon az alábbiprogramvázlat került megrajzolásra.

38

A STEP2 programlépés az idozites1 funkcióblokk hívását (a tvilagos jelű időzítő indítását)tartalmazza. Ez a programlépés akkor hajtható végre, ha start bemenet logikai 1 értékű, azazez lesz a lépésfeltétel. A STEP3 programlépés az idozites2 funkcióblokk hívását (a tsotet jelűidőzítő indítását) tartalmazza, és ennek végrehajtása akkor aktuális, ha a már elindított időzítő(tvilagos) ideje már letelt. Az Init kezdőlépésre való visszaugrás akkor történhet meg, ha amásodik időzítő (tsotet) ideje letelt.

Az Init lépésblokk esetünkben a változók meginicializálását (alaphelyzetbe hozását) szolgálja.A lépéshez tartozó programutasítások a lépés rajzszimbólumán az egér bal oldali gombjáravaló dupla kattintással jeleníthető meg.

A villogolampa fizikai kimenetet töröljük, hogy a lámpa sötét legyen, és a két időzítőbementi változójának is 0 (FALSE) értéket adunk, hogy az időzítők az első meghíváskortörlődjenek.

A STEP2 lépés akkor fog végrehajtódni, ha a start jel 1 értékű lesz. A lépés az alábbiprogramutasításokat tartalmazza.

39

Az első sor az idozites1 (az ido1 egy idozites1 funkcióblokkhoz rendelt adatstruktúra)funkcióblokk meghívását tartalmazza. Ez a funkcióblokk mindössze egy TON bekapcsoláskésleltető hívását tartalmazza.

Ezen funkcióblokk első hívásakor a bementre kapcsolt tvilagos_IN indító jel (az Init lépésbenvaló inicializálás miatt) 0 értékű, azaz az időzítő törlődik. A funkcióblokkból kilépve ez a jel1 értéket kap. Így a második, valamint a további hívásokkor viszont ez a bement már 1 értékűlesz, és a tvilagos időzítő működik. A villogolampa kimenet 0 értéket kap, a lámpa sötét lesz.2 s múlva a tvilagos.Q lépésfeltétel 1 értékű lesz, és így a következőkben a STEP3 lépés fogvégrehajtódni.

A STEP3 lépéshez tartozó utasítások az alábbiak.

Az első sor az idozites2 (az ido2 egy idozites2 funkcióblokkhoz rendelt adatstruktúra)funkcióblokk meghívását tartalmazza. Ez a funkcióblokk mindössze egy TON bekapcsoláskésleltető hívását tartalmazza.

40

Az előzőekben leírtakhoz hasonlóan az első futáskor a bementre kapcsolt tsotet_IN indító jel(az Init lépésben való inicializálás miatt) 0 értékű, azaz az időzítő törlődik. A funkcióblokkbólkilépve ez a jel 1 értéket kap. Így a második, valamint a további hívásokkor viszont ez abement már 1 értékű lesz, és a tsotet időzítő működik. A villogolampa kimenet 1 értéket kapés a lámpa világos lesz. 2 s múlva a tvilagos.Q lépésfeltétel 1 értékű lesz, és így avisszalépünk az Inic kezdőlépésre, kezdődik a ciklus újra.

3.4 A projekt (program) fordítása

A kifejlesztett program a Project menülista Build, vagy Rebuild all menüpontjaival fordíthatóle. Ha a program fordítása előtt nem adjuk meg a PLC konfigurációját a TwinCAT SystemManager programban, akkor a fordítás egy figyelmeztető hibaüzenet ad, és a keletkezettprogram nem használható. A fordítás előtt tehát mindenképpen el kell készíteni a PLCkonfigurációjának a megadását a TwinCAT System Manager program futtatásával.Normál esetben a program fordításának hiba nélkül kell megtörténnie. Ezért most nézzük mega TwinCAT System Manager program működését, feladatait.

4. A TwinCAT System Manager programkomponens.

A fejlesztő rendszer egyik alapvető feladata, hogy támogassa a PLC rendszer konkrétkialakításának megadását. Ezt a funkciót a TwinCAT System Manager programkomponensvalósítja meg.

A példa kedvéért egy kísérleti, minimális kiépítésű PLC kialakítását tételezzük fel. Akialakítás legfontosabb adatai:

A PLC program a PC Windows operációs rendszere alatt kerül futtatásra. A PC egy FC 2001 típusú fénykábeles PCI csatolókártyát tartalmaz, aminek a feladata

a kommunikációs kapcsolat biztosítása a PLC be és kimeneti kártyái között. Egy BK2000 típusú buszcsatoló kártya (fénykábeles rendszer) Egy KL 2134 típusú 4 darab digitális kimeneti csatorna (24 V, 0.5 A) Egy KL 1114 típusú 4 digitális bemeneti csatorna (24 V) Egy KL 9010 busz lezáró modul.

41

A program indítását követően az alábbi képernyő jelenik meg.

Nézzük végig azokat a lépéseket amelyeket meg kell tennünk, hogy a PLC programunkfuttathatóvá váljon.

4.1 Az I/O konfiguráció megadása.

Első lépésben definiáljuk az I/O konfigurációját. Mozogjunk el az I/O Devices szimbolumraaz egérrel, majd nyomjuk meg a jobb oldali egérgombot. A megjelenő menülistából válasszukki az Append Device menüpontot, és aktivizáljuk ezt.

Ekkor megjelennek azok a PC kártya típusok, amelyek a kommunikációs kapcsolatmegvalósítására alkalmazhatók.

42

Nekünk ebből a listából a bejelölt típust kell kiválasztanunk, mert ez van behelyezve agépünkbe Amennyiben az OK gombbal elfogadjuk a kártya kijelölését, úgy megjelenik akiválasztott FC 2001 PCI kártya részletesebb leírása. Ezen két lapon láthatjuk az adatokat. AGeneral fül adatai inkább informálisak most számunkra. Viszont az FC 200x fülre kattintva azegérrel, egy igen fontos és pontosításra váró adat jelenik meg.

43

A PCI busz paraméterei nem állítódnak be automatikusan, hanem itt kell aktivizálni a Search..funkciót. Ennek hatására a program kikeresi, és megjeleníti a PC-be bedugott kártya PCIazonosítóit, amit el kell fogadnunk. Ha az itt szereplő PCI azonosítók nem a ténylegesállapotnak megfelelők, akkor a PC és a Beckhoff buszcsatoló között a táviratozási kapcsolatnem működik, hibaüzenet jelenik meg.

Miután megadtuk a PC-ben lévő kártya adatait, a BK 2000 busz csatolót kell definiálnunkjelen esetben. Mozogjunk az egérrel a Device1 szimbólumra, és a jobb oldali egér gombbaljelenítsük meg a menülistát.

Válasszuk az Append Box menüpontot. A megjelenített választékból válasszuk ki az általunkalkalmazott BK 2000 típusú buszcsatolót.

44

A kiválasztott típust az OK gomb megnyomásával fogadhatjuk el. A következő lépés a BK2000 buszcsatoló K buszára csatlakoztatott bemeneti és kimeneti egységek felsorolása. Ezmegint csak úgy történhet, hogy elmozgunk a Box1 szimbólumra, és a jobb oldaliegérgombbal megnyitjuk a következő menülistát.

45

Aktivizálnunk kell az Append Terminal menüpontot minden egyes be illetve kimenetiegységre. Az egységek definiálási sorrendje azonos kell, hogy legyen a K buszra felfűzéssorrendjével. Esetünkben a BK 2000 egység mellet a KL 2134 kimeneti, majd azt követően (abuszlezáró mellett) a KL 1114 bementi modul van elhelyezve.

A definiálás végén az alábbi eszközöket tartalmazó képet kapunk.

46

Az I/O konfigurálás lezáró aktusa a Mapping (leképezés) információk előállítása. Ennek aleképezésnek az a célja, hogy a PC által lekérdezendő be és kimenteket számátmeghatározzuk, és legyen egy olyan összerendelő táblázat, hogy a PLC program egy beilletve kimeneti változóját melyik fizikai modul, melyik fizikai csatornájához rendeljük hozzá.

Ennek a leképezésnek az előállításához a PLC Configuration szimbólumnál hozzá kellfűzni a PLC tpy kiterjesztésű állományát. Ez az állomány az ismertetett lépéseksorrendjében még nem létezik. Ezt a tpy kiterjesztésű projekt állományt a TwinCATPLC Control program hozza létre a projekt Build, vagy Rebuild All parancsára akkor,ha már a PLC konfigurációra vonatkozó tsm kiterjesztésű állomány is létezik. Ez azállomány most állt elő (azzal a szépséghibával, hogy még nincs meg a PC és PLCtáviratozási objektumok kölcsönös leképezése). Ezért mentsük el a Save as paranccsal akonfiguráció egy jelentős részét tartalmazó állományt a projekt többi állományávalazonos néven, azonos alkönyvtárba. Ha ezt követően a TwinCAT PLC Controlprogrammal újrafordítjuk a programunkat most már figyelmeztető hibaüzenet nélkülkell lefordulni a programnak.

47

Ha a fordítás sikeres és létrejött a tpy kiterjesztésű projekt állomány, akkor ismét lépjünk be aTwinCAT System Manager programba, és ezt a projekt állomány fűzzük hozzá az eddigikonfigurációs állományhoz. A PLC Configuration szimbólumára kell mozognunk az egérrel,majd a jobb egér gombbal megjeleník a menülista.

Az Append PLC project parancsot aktivizálva jelöljük ki a projekt állományt. A villogtat.tpyPLC projekt állomány hozzáfűzése után kinyithatjuk az táviratozásban szereplő változóklistáját.

48

Látható, hogy a MAIN programszegmens start, és a villogolampa be illetve kimeneteszerepel az adatcserében. Ezekhez a PLC változókhoz kell hozzárendelni az általunk elképzeltfizikai bementet (legyen az 1. csatorna), és kimenetet (legyen az 1. csatorna). A változó, és afizikai csatorna összerendelése úgy történhet, hogy elmozgunk a kívánt változóra, majd azegér gombra kattintva megjelenik a változó leírása. A Linked to… parancsgombmegnyomásával megjelenik a fizikai csatornák választéka, és az általunk megkívánt csatornátrendelhetjük a változóhoz.

49

Ezt az eljárás valamennyi be és kimenetre el kell végezni. Az összerendeléseket követőenmost már valóban létrehozható a Mapping állomány. Ez az Actions menüpont GenerateMappings parancsával kerül létrehozásra.

A leképezés állomány az alábbi ábrán látható részlete azt mutatja, hogy a PC-ben a %QX2.0címre definiált villogolampa bit a PC 3-ik memória bájtján van, és ez a BK2000 –ben akiolvasott adatok tárhelyének 0.-ik bájtján található.

50

Ha a fordított irányú adatforgalmat (a BK 2000 olvasását) nézzük úgy azt látjuk, hogy a PCIX1.0 start bemeneti változója a PC 2. bájtjára van leképezve, és ezt a BK2000 0. bájtjárólolvassa be a táviratozó program.

51

A leképezést követően mentsük el a konfigurációs állomány végső verzióját. A TwinCATPLC Control programmal ismét fordítsuk le a programunkat is, hogy az is a konfigurációsleírás utolsó verzióját tartalmazza. Ezt követően már a programunk futtatásával, éstesztelésével kezdhetünk foglalkozni.

5. A program futtatása, hibakeresése, tesztelése.

A kifejlesztett programot első lépésben célszerű szimulációs üzemmódban (a technológianélkül) egy alaptesztnek alávetni, hogy a működés durva rendellenességeit kiszűrjük.

Amikor ez a beüzemelési fázis már megtörtént, sorra kerülhet a technológia működtetésévellefolytatott tesztekre is. Ekkor a PLC funkciók már ténylegesen a technológiára alapozvahajtódnak végre.

Amikor úgy tűnik, hogy elkészült a PLC projektünk végleges változata, akkor a TwinCatrendszert, és a PLC programot automatikusan akarjuk futtatni.

5.1 A program futtatása szimulációs üzemmódban.

A szimulációs üzemmódhoz nincs szükség semmilyen hardver eszközre (FC2001, BK 2000stb.), csupán a TwinCAT szoftver rendszerre.

Első lépésben el kell indítani a TwinCAT rendszert. Ennek egyik lehetséges módja, hogy azikonon keresztül kiadjuk a rendszer start parancsot.

52

A rendszer indítását követően belépünk a TwinCAT PLC Control programba, és azalkalmazás (projekt) betöltését követően belépünk az Online menüpontba.

A Choose Run-Time System paranccsal kijelöljük, hogy a maximálisan lehetséges négy PLCprogram melyikét kívánjuk szimulációs környezetben tesztelni.

53

Jelenleg egyetlen PLC program választható, így csak ennek a szimulált futtatására vanlehetőség.

A kiválasztást követően a Login paranccsal a TwinCAT PLC Control programot logikailagösszekapcsoljuk a TwinCAT rendszer programjával (ataszkjával). Ismét az Online menütaktivizálva el kell indítanunk a PLC program futtatását a Run parancs kiadásával.

54

Amennyiben a PLC a PC-ben van leképezve, úgy a tényleges PLC programja fog futni, csak abe és kimenetek távirati úton való cseréje (a busz csatolón keresztül) nincs bekapcsolva. Haegy rack típusú PLC van akkor a menüben a Simulation Mode bekapcsolhatóvá válik, és be iskell kapcsolni, mert ekkor a PLC programjának futtatását a normál esetben a külső (PLC)processzor végzi, és át kell venni ezt a funkciót a PC-nek szimulációs üzemben.

Szimulációs üzemmódban a technológiától érkező adatok nincsenek, ezeket a Write, Forceparancsokon keresztül tudjuk beállítani. A Run parancs kiadását követően a képernyőn mármegjelenik a működés követésére, hibafelderítésre is alkalmas program kép.

A program nyomkövetésének részletesebb leírását később fogjuk tárgyalni.

5.2 A program normál futtatása.

Amikor a programunkat már a technológiai környezetben akarjuk tesztelni, akkor abemenetek és kimenetek kezelése is szükséges, azaz a táviratozást a PC és a buszcsatolóközött már üzemeltetni kell.

Első lépésként el kell indítanunk a TwinCAT System Manager programot, és be kell tölteni aprojecthez tartozó konfigurációs állományt. Ezt követően az Actions menüpont ActivateConfiguration parancsát kell kiadni.

55

A parancs hatására a kezeléshez szükséges konfiguráció betöltődik a rendszer kitüntetettterületére (\TwinCAT\Boot alkönyvtár CurrentConfig.xml nevű állománya). Az aktiválásután a következő menüponttal (Set/Reset TwinCAT to Run Mode …) a TwinCATrendszer indítása, vagy újraindítása szükséges.

Következő lépésben a a TwinCAT PLC Control programban az Online menüpontban ismét aLogin, majd a PLC indítására szolgáló Run parancsot kell kiadni.

Ekkor a fizikai be és kimenetek kezelése már megtörténik, de a Force paranccsalfelülbírálhatjuk ezek tartalmát.

5.3 A PLC program automatikus indításának beállítása.

Amennyiben úgy döntünk, hogy egy PLC program fejlesztése befejeződött akkor általában aztszeretnénk, hogy PLC program a rendszer (PC) bekapcsolásakor automatikusan elinduljon.

Ennek az a menete, hogy a normál módban elindított program működése közben a TwinCATPLC Control program Online menüpontjában ki kell adnunk a

56

Create Bootproject parancsát. A parancs hatására a PLC automatikus indításához szükségesállományok a \TwinCAT\Boot alkönyvtárba elmentődnek.

Jelenleg az 1-es jelű PLC program került elmentésre. Ahhoz, hogy a PC indításakor mind aTwinCAT rendszer, mind a PLC elinduljon, azt még elő kell írni.

57

A Properties parancs hatására megjelenő ablakokban az automatikus indítást mind arendszerre, mind a PLC-re előírhatjuk.

A System ablakon belül a rendszer Auto Boot módját engedélyezhetjük, vagy tilthatjuk. Arendszerhez tartozó három szerver program (taszk) az engedélyezés esetén automatikusanelindul. A PLC ablakban a PLC automatikus indítását engedélyezhetjük, ill. tilthatjuk.

58

Az ábrán a PLC program automatikus indítását engedélyezhetjük, vagy tilthatjuk. Ezeket aparancsokat a TwinCAT System Manager programjának System Configuration és PLCConfiguration ikonján keresztül is be tudjuk állítani.

5.4 A PLC taszk ciklusidejének a beállítása.

A TwinCAT rendszer taszkjai beépülnek a Windows operációs rendszerének egyébprogramjai közé. Ezeknek a taszkoknak szigorú ütemezés szerint, valós időben ( real-time)kell futnia. Az alábbi ábra a TwinCAT taszk futásának időbeli ütemezését mutatja.

59

Az ábrán azt láthatjuk, hogy alapidőnek 1 ms van beállítva ami azt jelenti, hogy ilyenidőközönként történhet újraütemezés. Előírásunk szerint a TwinCAT taszknak 2 msciklikussággal kell futnia. Még beállításiadat, hogy a CPU felhasználását a TwinCAT taszkszámára 50%-ban limitáltuk (azaz 0.5 ms).

Balról jobbra haladva azt látjuk, hogy 2 ms időközönként (a ciklusidő) a következő szituációkalakulhatnak ki a tasz futásával kapcsolatban:

1. Beolvassuk a fizikai bementeket (piros szín), értelmezzük a PLC program utasításait(fekete), kiadjuk a fizikai kimeneteket (szürke). Ez az első ciklusban a limitidőn (0.5ms) belül lezajlik, és a Windows egyéb taszkjai kerülnek végrehajtásra.

2. A program a 0.5 limitidőn belül nem fejeződik be, ezért a futása megszakad, és aWindows egyéb taszkjai fognak futni. A TwinCAT taszk a következő átütemezésiidőpillanatban (3. ms) folytatja futását, majd befejezi limitidőn belül a működését ésismét a Windows egyéb programjai hajtódnak végre.

3. A taszk ismét limitidőn belül fejezi be a működését.

A mechanizmus alapján azt mondhatjuk, hogy a PLC egy bementi változásra (pl. a vész stopmegnyomása) a legrosszabb esetben a ciklusidő (a magyarázatnál 2 ms) kétszerese alatt fogreagálni, a kimeneten beavatkozni (a példánál 4 ms). A reagálás szükséges gyorsaságát atechnológia szabja meg. Egy normál folyamatnál sokszor a több 10 ms ciklusidők iselfogadhatok, és alkalmazhatók. A BOSCH által használt berendezésekhez 4 ms ciklusidőkapcsolódik, a technológia gyorsasága miatt. A ciklusidő, a CPU sebessége, a CPU időmegosztási limitje együtt korlátozza a végrehajtható program nagyságát. Egy nagyonbonyolult (terjedelmes) program igen gyakran nem biztos, hogy végrehajtható.

A TwinCAT rendszer nem csupán egy, hanem több taszk kapcsolódik. A rendelkezésre állóidőszelethez (CPU használathoz) ezek a taszkok a prioritásuk sorrendjében férnek hozzá. Azalábbi ábra a prioritás szerepét mutatja egy magasabb, és egy alacsonyabb prioritású taszkesetére.

60

A real-time rendszerekre jellemző képet látjuk, amíg a magas prioritású taszk nem fejezi be aműködését, addig az alacsonyabb prioritású taszk nem jut szóhoz. A Windows rendszerben akisebb prioritási szám jelenti a magasabb prioritást.

Ezeket a fontos, a rendszer működését alapjaiban érintő adatok egy részét TwinCAT PLCControl program erőforrások ablakán belül, a Task configuration szimbólumra állással lehetbeállítani.

61

A négy lehetséges taszk egymás közötti prioritási szintjét, és a ciklusidőt tudjuk ezen afelületen beállítani. Ha szükséges a taszk nevét, és fajtáját (típusát) állíthatjuk még be apárbeszédablakban.

Az alapidőt, és a CPU használat limit idejét a TwinCAT System Manager programbanállíthatjuk be, és ugyanitt változtathatjuk meg a taszkok (abszolút) prioritását.

62

5.5 A program hibakeresése, tesztelése.

Amikor egy működő (futó) PLC program mellet Online üzemmódban használjuk a TwinCATPLC Control programot, akkor a fejlesztő rendszerben követhetjük, valamint befolyásolhatjuka PLC programunk működését hiba felderítési, vagy tesztelési céllal.

A PLC program fejlesztés stádiumában eleve a TwinCAT PLC Control program alattszimuláljuk, vagy töltjük le, és indítjuk el a programunkat. Ekkor természetes folytatásként aképernyőn megjelenik a futás követésére alkalmas kép.

Amennyiben a TwinCAT Control program indításakor már fut a PLC-ben egy korábbanelindított program, úgy az Online menülista Login parancsát követően (ha TwinCAT PLCControl programban a futó projekt be van töltve), akkor ugyanúgy megjelenik a programműködésének követéséra alkalmas kép, mint az előző esetben.

5.5.1 A grafikus (LD, FBD) nyelven megírt programok hibakeresése.

A grafikus nyelveken (LD, vagy FBD) megírt programok működését értelemszerűen grafikus formában láthatjuk. A szín megváltozásával kerül megjelenítésre, hogy egy vezetékszakaszon,kontaktuson, tekercsen keresztül az energia átkerül, avagy nem. Ezen a túl a változók aktuális értéke is kiíratásra kerül.

63

Az ábrán a kék szín jelöli a logikai 1 állapotot, az energia meglétét, míg a fekete szín a 0(energiamentes) állapotot jelöli.

Az állapotok változásának vizuális képe, valamint a változók aktuális értékének a figyelésealapján némi gyakorlattal követhetjük a programunk működését, és a programozás esetlegeshibáit is felismerhetjük.

A programteszteléshez igen fontos segítséget nyújt, hogy a változókba a számunkra kívánatosértékeket írhatjuk (write), vagy kényszerítjük (force). A két eljárás között az a különbség,hogy írás esetén az általink megadott értéket (vagy értékeket) az írás érvényesítésekor beírjukaz adott változókba (vagy változókba) egyszer, és utána hagyjuk, hogy ezen változók tartalmamár a program működésének megfelelően változzon. A kényszerítés esetén a kijelölt változóktartalma a program működésétől függetlenül az általunk definiált értékek lesznek a kényszerérvényesítését követően. Mindkét eljárás, mind BOOL, mind egyéb (pl. INT, REAL stb.)változóra alkalmazható. Ezt a szolgáltatást a legegyszerűbben olyan módon vehetjük igénybe,hogy az egérrel elmozdulunk a kívánt változó deklarációs sorába, és az egér bal oldalibillentyűjére duplán kattintva megjelenik a változó lehetséges új értéke BOOL változónál,vagy egy ablak a nem BOOL változó új értékének megadására.

64

A fenti ábrán azt látjuk, hogy a start (fizikai) bemenő változó a jelenlegi állapot szerintFALSE, de mi azt jelöljük, hogy a program majd TRUE értéket vegyen figyelembe, ha életbeléptetjük az új értéket (írás, vagy kényszerítés funkció). Egy kimenetre a (vilagosletelt)ugyancsak a TRUE értéket jelöltünk ki. Azt, hogy a start bemenetet 1 értékbe tesszük, méglehet, ennél az egyszerű példánál is némi magyarázatot adni, de a kimenet 1 állapotba hozásaegy logikátlan lépés, csak azt mutatja, hogy a kimenet értéke is írható, és kényszeríthetőbármely állapotba. Ha valamelyik változónál ismét duplán kattintunk az egér bal oldaligombjával, akkor a FALSE logikai jelet készítenénk elő új értékként. A következő duplakattintás az előkészítés törlését eredményezné. Azaz logikai (BOOLE) változóknál ez a háromállapot fog változni.

Amennyiben a tvilagos bekapcsolás késleltető időzítési értékét (PT) is változtatni akarnánk,akkor ugyancsak duplán kell rákattintani a kérdéses változóra az egér bal gombjával.

Ezen idő típusú változó új értékét ebben a párbeszédablakban adhatjuk meg.

Miután valamennyi változó általunk kívánt értékét beállítottuk, az értékek érvényesítésénekmódjára tehát kétfajta eljárást választhatunk. Az Online menülista

65

Write Value menüpontja az előkészített változók írását, míg a Force Values menüpont azelőkészített értékek kényszerítését fogja eredményezni.

A kényszerítés megszüntetése a Release Force menüpont hívásával lehetséges.

A preparált adatok értékét megjeleníthetjük, vagy ezek érvényre juttatását, megszüntetését iselrendelhetjük a Write/Force Dialog párbeszédablakban.

66

Az FBD programnyelven írt programok működése hasonló elvek alapján történik. Apéldafeladatot nem dolgoztuk ki sem FBD, sem IL programnyelven. Ha most igen gyorsanpótolni akarnánk ezt a hiányt, akkor az alábbi menüpont aktivizálásával az LD nyelvűprogram egy újrafordítást követően FBD (vagy IL) programnyelvre átkonvertálható.

67

A konvertálásnál most jelöljük meg az FBD programnyelvet.

A konvertálás után a programot letöltve, és elindítva az alábbi formában láthatjuk a program működését.

68

5.5.2 Szöveges (ST, IL) programnyelven írt programok hibakeresése.

A szövegese programnyelven írt programok működéskövetése gyakorlatilag ne tér el a normál(nem PLC) programok nyomkövetésénél megszokott technikától.

A program nyomkövetéséhez az alábbi szolgáltatások állnak rendelkezésre.

A programunk végrehajtásánál tetszőleges utasításokra töréspontot helyezhetünk, vagyszüntethetünk meg

A program lépésenkénti (utasításonkénti) végrehajtását kezdeményezhetjük A változók értékének a manipulálása az előző fejezetben leírt formában biztosított.

Az ST nyelven megírt programunkat, ha futtatjuk, úgy a működését az alábbi képernyőnkövethetjük.

69

A változók aktuális értékét egyrészt a deklarációs ablakban láthatjuk, másrészt az utasításablak jobb oldali részén az adott utasítássor bal és jobb oldalán szereplő változók aktuálisértéke folyamatosan frissítve megjelenik.

Az adatok írása, vagy kényszerítése a korábban leírtakkal teljesen azonos módon lehetséges.

Demonstrációként a program harmadik utasítássorába helyezzünk el egy töréspontot, az egérutasítássorára való mozgatásával, kijelölésével, majd az F9 funkcióbillentyű megnyomásával(vagy az Online menülista, Toggle Breakpoint menüpont). A program futása ezen a pontonmegszakad, és lehetőség van a következő futtatási alternatívák valamelyikének alkalmazására.

Az F5 funkciógomb (vagy az Online menülista Run menüpont) megnyomásával aprogram folyamatosan fut, és akkor fog a működés leállni, ha ismét a töréspontra fut aprogram.

Az F10 funkcióbillentyű megnyomásával (vagy az Online menülista Step Overmenüpont) egyetlen programlépés hajtódik végre. Ekkor egy funkcióhívás egyetlenlépésnek tekinthető (nem lépünk be a funkció blokkba).

Az F8 funkcióbillentyű megnyomásával (vagy az Online menülista Step In menüpont)egyetlen programlépés hajtódik végre. Ekkor a funkcióhíváskor belépünk afunkcióblokk belsejébe, és ott fojtathatjuk a program működésének követését.

A töréspont az ismételt kijelöléssel meg is szüntethető.

Az ábrán két programlépés után látható a program képe..

70

Az IL utasításlistás nyelven megírt programok működésének követése teljesen hasonlóformában történik. Ha a programunkat gépileg (a korábban említett módon az LD alkalmazás)átkonvertáljuk, és elindítjuk, akkor az előző képernyőszerkezetet fogjuk újra látni. A változókbeírása, kényszerítése, a töréspont beiktatása, eltávolítása, a lépésenkénti végrehajtás módjaugyanaz, mint azt korábban leírtuk.

71

5.5.3 Az SFC programnyelven írt programok hibakeresése.

Az SFC nyelvű programok futtatásával az alábbi kép jelenik meg.

72

Ezen a képen a kék szín jelzi, hogy éppen melyik POU (programegység) végrehajtásatörténik. A korábban elmondottaktól eltérően a lépésfeltétel változók nem írhatók, ésnem kényszeríthetők. Amennyiben valamelyik lépésre mozgunk az egérrel, és duplánrákattintunk a bal oldali egérgombra, akkor az adott lépés programja a programnyelvének(grafikus, szöveges) megfelelő formában kínálja a lépés működésének követését.

73

6. A gyártóberendezés programjának vizsgálata.

6.1 A program általános jellemzése, hiba ok keresése.

A gyártóberendezés programja kizárólag ST programnyelven került kidolgozásra, amiközelebb esik egy normál programhoz, mintsem a klasszikus PLC programnyelvekhez (LD,FBD). Ez a kijelentés semmiféle kritikai tartalmat nem hordoz, mert egy ilyen bonyolultságúvezérlési feladatot ilyen színvonalon, grafikus programnyelven megoldani reménytelenvállalkozás. A grafikus programnyelvek azért preferáltak a PLC technikában, mert azegyszerű utasításszerkezet (az ugró és ciklusszervező utasítások alkalmazásának hiánya miatt)a programok „lefagyása” nem szokott előfordulni, minden körülmények között megtörténik –az esetleg hibás – beavatkozás a folyamatba.

Az ST programnyelv alkalmazása magával vonja, hogy a létező összes programozási hibát ellehet követni. Végtelen ciklusokat szervezhetünk a FOR, WHILE, REPEAT utasításokszervezése során. Tömböket túlcímezhetünk a programunk futása során (pl. egy 10 eleműtömb 12-ik elemébe kísérelünk meg adatot írni). Egy-egy részfolyamat megengedettidőértékének (time-out) helytelen megválasztása miatt utasítások csoportja kerülhet átlépésre,és emiatt feltételek nem fognak teljesülni, így esetleges a beavatkozások egy része is elmarad.Sajnos egy több ezer soros programban a hibákat felismerni, amelyek egy része nemszisztematikus, hanem csak bizonyos feltételek együttes teljesülése során következik be igennehéz feladat.

74

A programok tesztelése során az azokat a hibákat, amelyek néhány percen, esetleg órákonbelül ismételten fellépnek, általában elhárítják. Azok a hibaforrások maradnak meg általábana programjainkban, amelyek előfordulása több napos ciklussal ismétlődik. Azokat a hibákat alegnehezebb felderíteni, amelyek ismétlődése még ennél is ritkább (igen kis valószínűséggelkövetkezik be.

A hiba ok felderítés során első lépés annak vizsgálata, hogy a folyamatvizualizáló rendszervajon generált-e az eseménynaplóban a kérdéses hibára vonatkozó üzenetet. Amennyiben ahiba előfordulására (pl. érzékelő meghibásodása, time-out túllépés stb.) a program tervezőjeszámított, akkor találunk erre vonatkozó bejegyzést, és viszonylag biztos alapokrólindulhatunk el a hiba ok megszüntetése érdekében.

Sajnos nincs olyan rendszer, ami minden elképzelhető hiba okáról eseménybejegyzéstkészítene. Ezért, ha az eseményüzenetek nem tartalmaznak még csak utalást sem a hibalehetséges kiváltó okáról, akkor második lépésben kezdjünk gyanakodni a TwinCAT rendszerműködési környezetére. A TwinCAT LogView szolgáltatásának elindításával láthatjuk, hogymagának a TwinCAT rendszernek a működése során nem keletkezett-e olyan bejegyzés amikiinduló alapot jelenthetne számunkra. Belépve a LogView programba a következő képjelenik meg.

Mint látható három csoportra tagolva láthatjuk a bejegyzéseket. Számunkra bármelyikcsoportban szereplő bejegyzés hasznos kiinduló információval szolgálhat, akár csak olyanszinten is, hogy milyen környezeti történéshez kapcsolódik a hiba fellépése. Még ha nem istaláljuk meg ekkor a konkrét hiba okot, de ha már ötödször mindig ugyanazon környezeti

75

változást érzékeljük a hiba időpontjában, akkor a gyanúnk ennek a hatásnak a komolyabbvizsgálatát is kezdeményezheti.

Bármelyik konkrét bejegyzésre (duplán) rákattintva az egérrel a bejegyzés részletesebb leírásaválik láthatóvá.

Amennyiben a rendszerünk eddigi ismertetett szolgáltatásai nem adnak támpontot a hibaokára, akkor kénytelenek vagyunk intuitív módon a PLC program nyomkövetésével rájönnierre. A sikeres munka alapfeltétele, a technológiai lépések sorozatának, a végrehajtásifeltételeknek a minél teljesebb körű ismerete.

Amennyiben a hiba tartósa fennáll indítsuk el a TwinCAT PLC Controll fejlesztőprogramot,és lépjünk be (Login) az a Online üzemmódba. Ekkor a program futásának korábban leírtműködéskövetése lehetővé válik. Elsőször ne helyezzünk el töréspontot, és ezzel nebefolyásoljuk a program végrehajtásának időzítési viszonyait. Passzívan figyeljük a programfutását.

A programunk alapvető (kiinduló) szegmense mindig a MAIN program, ami ciklikusan(néhány ms ciklusidővel) ismétlődik, és ez aktivizálja a további program egységeket (POU).Próbáljunk meg teóriát felállítani, hogy melyik programszegmens (POU), melyik programrészlet futása során van hiba. A MAIN szegmensből indulva a hívási lánc lépéseit követvelépdeljünk el a kérdéses szegmensre, passzívan szemlélve a változók alakulását, vagy azt,hogy egyáltalán tapasztalunk-e bármilyen a futásra jellemző változást. A leginkább a gyanúsprogramszegmensen belül szemlélődjünk. A változók alakulásából kíséreljünk meg

76

következetni a hiba okára (érzékelő hiba, időzítési hiba, stb.). Ha úgy érezzük, hogy látjuk ahibát okozó program környezetet, és szükségesnek tűnik a gyanú beigazolásához, akkor atöréspont alkalmazásával, majd a lépésenkénti végrehajtással egy az emberi gondolkodásszámára is elfogadható sebességgel hajtsuk végre az utasításokat, és ekkor valószínűlegrájövünk a hiba okára. Ne felejtsük el, hogy a lépésenkénti végrehajtással alapvetőenmegváltozattuk a program időzítési viszonyait, és ez esetleg nemhogy a tisztázás, hanem atéves következtetések levonására fog inspirálni.

Ahhoz, hogy esélyünk legyen a hiba ok intuitív felismerésére, a PLC program szerkezetét isalaposan ismerni kell. Ezért nézzük meg, hogy milyen szerkezetűek a gyártó berendezésekPLC programja.

6.2 A gyártósorok PLC programjainak a szerkezete.

A programszerkezet tanulmányozását kezdjük a változók megismerésével, hiszen ezen adatokfelhasználásával működnek a programegységek. Csak ezt követően térjünk át aprogramegységek tanulmányozására.

6.2.1 Az adatok (struktúrák, és felsorolások) szerkezetének definiálása.

A TwinCAT PLC Control programban az adatok ablakban láthatjuk az adatok (struktúrák,felsorolások) definiálását, hiszen ezekre, a típusokra a későbbi változódeklarációkbanhivatkozni fogunk.

77

A képernyőn egy a gyártmány adatok struktúráját definiáló részletet láthatjuk. A következőképen egy felsorolás jellegű adatsor definiálását láthatjuk.

6.2.2 A globális adatok.

Az erőforrások ablakban az alkalmazás legfontosabb globális (az alkalmazásprogramegységei számára egyaránt használható) adatcsoportjait láthatjuk. A program tervezőia globális adatokat csoportokba (állományokba) sorolták.

A kiépítést (konfigurációt) leíró globális adatok (Global_Config_ jelöléssel). A Global_GFB_Machine a globális funkcióblokkok deklarációját tartalmazza A Global_GM_ XXX jelölésű, a globális memória adatait tartalmazó állományok (az

XXX elnevezésű berendezésre) A Global_GCM_ XXX jelölésű, az eszközök közötti kommunikációt jellemző

adatokat tartalmazza (az XXX elnevezésű berendezésre) A Global_GRM_ XXX a programegységek be és (vagy) kimeneti adatdefinícióit

tartalmazza (az XXX elnevezésű berendezésre) A Global_ControlPanelMemory az alkalmazás kezelői felületéhez kapcsolódó

adatdeklarációkat tartalmazza. A Global_IO a fizikai be, és kimenetek azonosítóit tartalmazó állomány

78

A képen a géphez (berendezéshez) kapcsolódó konfiguráció leírást láthatjuk.

Mi lehet vajon a programtervező szándéka, hogy ennyi konstanst definiál, és ezeketszerepelteti a PLC programban, nem pedig a számértékeket (ami talán egyszerűbbé tenné aprogram működésének követését). Az ok valószínűleg az, hogy ugyanez a program máskiépítésű berendezések működtetésére is szolgál. A konkrét típusokra való programapplikáció részben ezen adatoknak (konstansoknak) a megváltoztatásával végezhető el.Természetesen ez a kapcsolódó berendezésekre is igaz, hiszen másfajta környezetbe is lehetugyanazt a berendezést telepíteni, azaz azok konfigurációja, kiépítettsége hasonlóan adhatómeg.

A berendezésekre, folyamatokra, definiálásra kerülnek azok a globális változók, amelyek többprogramszegmens számára is elérhetők. Vegyük szemügyre az alábbi példát.

79

A változók nevének képzésekor a program tervezői egy nagyon aprólékosan megtervezettlogikát alkalmaztak arra vonatkozóan, hogy ha ránézünk egy változó névére, akkor tudjuk,hogy nagyjából milyen típusú változóval állunk szembe. A G a globális adatra utaló jel, míg aG-t követő néhány karakter az adat szerepére, és a hozzá tartozó berendezésre utaló rövidítés.Az IO, értelemszerűen a be és kimenetekre, az IN, OUT elnevezések a programegység bevalamint kimeneti változóira utalnak. A globális adatoknál az adatok szerepére az alábbijelekkel utalnak. A GM a berendezés globális (memória) adatait, a GCM a globáliskommunikációs adatokat (memóriát), míg a GRM a (POU) globális be és kimeneti adatait(memóriát) azonosítja. A további néhány karakter még mindig a csak a változó típusára utalójelölések. Például a bo jelöli a BOOL típusú változót, míg a boa a BOOL változókból képezetttömb (ARRAY) jelölésére szolgál. Ennek analógiájára már szinte azonnal kitalálhatjuk, hogyaz str a struktúra, míg az stra a struktúra tömb azonosítására szolgáló jelölések. A változótípusára az IEC 61131-3 szabvány lehetséges változó típus deklarációjának első, vagy néhányelső karaktere szolgál. Nézzük meg néhány összerendelés rövidítéseit (változó típusa, majd arövidítése sorrendben).

INT i UINT ui DINT di UDINT udi WORD w DWORD dw BOOL bo BYTE by, vagy b REAL re

80

LREAL lr STRING s STREUKTUR str ENUM e Timer FB t, vagy ton Tömb jele a

Csak ezt követően kerül megadásra a változó tényleges neve (pl. AcknowledgeError).

A programegységek (POU) neveinek megadásakor a bevezető karaktersorok esetén az alábbiszabályok érvényesek:

Funkció blokk fb_ Fukció fu_ Program pr_ Globális funkció gfb

Azaz pl. a gfb bevezető karaktersor a globális funkció blokkra utaló jelölést jelenti.

A berendezés globális szimbólumai a StandardGlobal alkönyvtárban találhatók. Az egyikállomány konstansokat (a program futása során nem változtatható adatokat) tartalmaz.

A kiragadott részlet éppen a hibákhoz rendelt kódokat tartalmazza. Ezek a kódok, afelhasználói adatbázis egy-egy szövegéhez kapcsolódnak, és a hiba esetén ez a (magyar,

81

német, angol stb. nyelvfüggő) szöveg jelenik meg. A másik állomány a program működésesorán használt globális változókat tartalmazza.

Különösen nagy figyelmet kell fordítani a fizikai be és kimenetek szimbólumait tartalmazóállományra. Kizárólag ebben az állományban kerültek definiálásra a fizikai be és kimentekhezkapcsolódó szimbólumok.

82

Ezek a globális szimbólumok az bemenet esetén az I_, míg kimenetnél az O_ jelölésekkelkezdődnek. Magának a neveknek a tanulmányozása megmutatja, hogy milyen érzékelők, ésegyéb bemenetek befolyásolják a program futását, valamint azt, hogy milyen beavatkozásoktörténnek.

6.2.3 A program egységek (POU) szerkezete.

Amennyiben meghívjuk az erőforrások ablak Task funkcióját, akkor láthatóvá válik alegnagyobb programegységek (taszkok) szerkezete.

83

Mint az ábrán látható négy taszk alkotja a teljes programrendszert, ami egyben a TwinCATrendszerben futtatható taszkok maximális számával azonos. Ha megnézzük, akkor láthatóváválik, hogy mind a négy taszk ciklikusan fut 4, 4, 5 és 100 ms ciklusidővel (felülről lefelésorrendben). A taszkok felülről lefelé csökkenő prioritási sorrendben kerültek megjelenítésre.A taszkok futása a korábbi fejezetben leírt konkurens módon kerül végrehajtásra.

A legmagasabb prioritású taszk a Standard PLC funkciót megvalósító MAIN programegység.Ez a programegység 4 ms időközönként ciklikusan működik, és a berendezés működtetése afeladata.

A Com_Task a pr_Com programot jelenti. Ez a program is 4 ms ciklusidővel, újra és újrafutásra kerül, de prioritása alacsonyabb, mint a MAIN szegmensnek, így a MAIN élvezelsőbbséget a konkurens (párhuzamos) futás során. A pr_Com program taot tanulmányozvaazt láthatjuk (lásd POU ablak pr_Com program) egy soros vonalon keresztül (9600 Baud, 8adatbit, NOPARITY, 1 stop bit) egy vonalkód leolvasó három kérdéscsomagra adott válaszaitletárolja egy globális (GM_straDMCBuffer) területre, a feldolgozó program számára.

A VMDT taszk 5 ms ciklusidővel ismétlődik, és a prioritása az előző (kommunikációs)taszktól alacsonyabb prioritású. A pr_vMDT programszegmens egyetlen funkcióhívás, akapcsolódó berendezés adat (struktúrájának) a lekérdezése.

A 100 ms ciklusidővel ismétlődő pr_UIMainScreen program a legalacsonyabb prioritású. Akezelői kép megjelenítéséhez szükséges inicializálásokat, és frissítéseket végzi ez a taszk.

Az elvek megértéséhez vegyük szemügyre a MAIN programszegmens működését.

84

Mint látható a MAIN szegmens első néhány sorában egyéb programok meghívása történik. Aprogramok és a későbbiekben meghívandó (ezen a képen még nem látható) funkcióblokkokciklikusan 4 ms ciklusidővel újra és újra meghívásra kerülnek. Egy-egy programegységnektöbbféle végrehajtási fázist (lépést) kell megvalósítani (pl. adatok inicializálása, üzenetre valóvárakozás stb.). Vegyük szemügyre az első sorban látszó pr_EvaluteUIComDataprogramszegmensen belül, hogyan valósul meg ez a lépések szerinti tagolódás.

85

Látható, hogy a változók deklarációs részében mindössze két lehetséges lépés van definiálva.Az egyik lépés a kezelői felületről érkező új adatra való várakozás, a másik lépés pedig az újadat lekezelése. A program első futásakor az aktuális lépés wStep változójába 0, az új adatravaló várakozás üzemmód állítódik be (inicializálás). A program minden egyes futásakor, azelső sorban lévő CASE utasítás wStep változójának tartalma határozza meg, hogy mi lesz aprogram belépés helye. Mindaddig az stp_WAITING_FOR_NEW_DATA: a belépés helye,míg a sort követő programlépésben (IF), az új pozíció vételére utaló (BOOL) változó FALSEértékű. Ha ez a változó TRUE (van új vett pozíció), akkor a wStep egy újstp_EVALUATE_NEW_DATA értékkel töltődik fel, és a program következő hívásakor ezenstp_EVALUATE_NEW_DATA: belépési ponton fogunk belépni.

A belépési pontot követő programrészlet a következő módon alakul.

stp_EVALUATE_NEW_DATA :(*=================================================

clear receive variables(*===============================================*)sActString := ''; (* ui String *)iActSmalint_Selection := 0; (* ui Smalint or Selection *)diActInteger := 0; (* ui Integer *)lrActDouble := 0; (* ui Double *)lrActPosition := 0; (* ui Axis position *)iActAxisNbr := 0; (* ui axis nbr *)lrActDistance := 0; (* ui Distance *)iActDistanceCount := 0; (* ui Distance count *)

(*=====================================================

write values into receive variables(*====================================================*)

86

CASE Module_Positions.wPositionType OF 1: MEMCPY (ADR(sActString),ADR(Module_Positions.baValue),SIZEOF(sActString));2: MEMCPY (ADR(iActSmalint_Selection), ADR(Module_Positions.baValue),

SIZEOF(iActSmalint_Selection));3: MEMCPY (ADR(diActInteger),ADR(Module_Positions.baValue), SIZEOF(diActInteger));4: MEMCPY (ADR(lrActDouble),ADR(Module_Positions.baValue), SIZEOF(lrActDouble));5: MEMCPY (ADR(lrActPosition),ADR(Module_Positions.baValue), SIZEOF(lrActPosition));

MEMCPY(ADR(iActAxisNBr),ADR(Module_Positions.baValue[9]), SIZEOF(iActAxisNbr));6: MEMCPY (ADR(lrActDistance),ADR(Module_Positions.baValue), SIZEOF(lrActDistance));

MEMCPY(ADR(iActAxisNBr),ADR(Module_Positions.baValue[9]), SIZEOF(iActAxisNBr));MEMCPY(ADR(iActDistanceCount),ADR(Module_Positions.baValue[11]),SIZEOF(iActDistanceCount));

END_CASE(*====================================

write receive variables to Global Config GCM(*===============================================*)CASE Module_Positions.wStation OF

STATION_WT_TRANSPORT:fu_WtTransportEvaluateUIComData(

in_wPosition :=Module_Positions.wPosition,in_sActString :=sActString,in_iActSmalint_Selection := iActSmalint_Selection,in_diActInteger := diActInteger,in_lrActDouble := lrActDouble,in_lrActPosition := lrActPosition,

);……END_CASE

Module_Positions.boNewPositionReceived := FALSE;wStep := stp_WAITING_FOR_NEW_DATA ;

END_CASE (* wStep *)

Azt láthatjuk, hogy ezen a belépési ponton a változók átvétele, és a kapott adatoktól függőfunkciók meghívása látható. Az elv szempontjából lényeges programsorok az utolsó előtti kétsor. A lépés sorszámot tartalmazó wStep változóba ismét az új adatra való várakozásnakmegfelelő kódot írják, valamint a várakozás-lépésben vizsgált változót FALSE értékreállítják. Ezzel ismét az első lépéstől kezdődik ennek a programnak a végrehajtása.

Egy-egy programegység nem csak két, hanem ettől lényegesen több lépésből is állhat. Azalábbi részlet a MAIN szegmensből meghívott pr_CheckFuse (biztosíték ellenőrző) programegy részletét mutatja.

87

A változódeklarációs részben 15 azonos funkcióblokk egy-egy példányát deklaráljuk. Aprogramrészben a funkcióblokkoknak az egyes példányait, egymást követően meghívjuk amegfelelő belépő paraméterekkel. A képernyőn csak egyetlen példány hívása látható, detovábbi példányok hívásaival folytatódik a programlista. Valamennyi hívás ugyanazonfb_HandleErrorMessage funkcióblokk egy-egy példányát hívja. Nézzük meg ennek afunkcióblokknak a szerkezetét. A változók deklarálásának ablakában a alábbi

FUNCTION_BLOCK fb_HandleErrorMessageVAR CONSTANT(*=========================================================================================

step constants(*=========================================================================================*)

stp_INIT : WORD := 0;stp_WAIT_FOR_ERROR : WORD := 10;stp_SEND_ERROR : WORD := 100;stp_WAIT_ERROR_ACTIVE : WORD := 110;stp_RECEIVE_ERROR : WORD := 120;

(*=========================================================================================

specific constants(*=========================================================================================*)

tDELAY_ERROR_ACTIVE : TIME := T#3s;tMIN_ERROR_ACTIVE_TIME : TIME := T#1s;

END_VARVAR_INPUT(*=========================================================================================

input variables(*=========================================================================================*)

in_boActive : BOOL;in_wModule : WORD;

88

in_wStation : WORD;in_wPart : WORD;in_wErrorLangnbr : WORD;in_bErrorQuitOption : BYTE;in_waErrorButtonText : ARRAY[1..4] OF WORD;in_baErrorSuppData : ARRAY[1..8] OF BYTE;in_saErrorSuppString : ARRAY[1..2] OF STRING(9);

END_VARVAR_OUTPUT(*=========================================================================================

output variables(*=========================================================================================*)

out_boActive : BOOL;out_wQuit : WORD;

END_VARVAR(*=========================================================================================

error variables(*=========================================================================================*)

wErrorActualNbr : WORD;wStep : WORD;

(*=========================================================================================

local standard variables(*=========================================================================================*)

(*=========================================================================================

standard instances of function blocks(*=========================================================================================*)

fbReceiveError : ui_ReceiveError;

(*=========================================================================================

specific instances of function blocks(*=========================================================================================*)

fbDelay : TON;END_VAR

A deklaráció első néhány sorában láthatjuk, hogy öt belépési pontja (öt lépése) van ennek afunkcióblokknak. A wStep változó amikor létrehozunk egy funkcióblokkot, akkor az értéke 0lesz, azaz az stp_INIT inicializáló lépésnek megfelelő belépési pontra fogunk lépni.

89

A funkcióblokk stp_INIT belépési pontján beállítják a stp_WAIT_FOR_ERROR értéket awStep változóba, és ezzel ki is lépünk a funkcióblokkból (egyéb inicializálási tevékenységnincs). Mindaddig a stp_WAIT_FOR_ERROR belépési ponton fogunk belépni afunkcióblokk hívásakor, amíg a belépési változó wStep értékét át nem állítjuk. Erre akkorkerül sor, ha a bemeneti in_boActive változóval indított időzítés (bekapcsolás késleltető) akimenetén logikai 1-et értéket szolgáltat (3 s múlva). Azaz a biztosíték állapotát mutató pl.I_10112D1_FUSE_F11_Ok bementnek legalább 3 s ideig folyamatosan FALSE, 0 értékűnekkell lennie, mert ekkor kerül átállításra a wStep érétke a stp_SEND_ERROR értékre, ami ahiba feldolgozás következő lépésének értékét jelenti. Ezzel egyidejűleg az időzítőt töröljük abemenetére kapcsolt FALSE értékkel meghívva.

A program további részében azt láthatjuk, ahogy az egyes részfeladatok megoldását követőenlépésenként haladunk tovább, és itt az utolsó lépést követően ismét astp_WAIT_FOR_ERROR lépésre fogunk visszaugrani.

Visszatérve a MAIN szegmens működésére, a pr_CheckFuse program után a teljesen hasonlóelvek alapján működő, a motorok hőmérsékletének, és a terminálok 24 V-os feszültségénekellenőrzésére szolgáló programok kerülnek meghívásra.

A MAIN szegmens pr_RelateInPuts programja ciklikusan minden meghívásakor (4 ms) afizikai bemenetek állapotától függően előállítja azokat a globális változókat, amelyek ezenbemenetek értékéből képződnek, és a működtetést befolyásolják. Az alábbi ábra a programelső néhány sorát mutatja.

90

A következő ábra még mindig ennek a programnak egy további részletét mutatja, ahol az iskiderül, hogy bizonyos esetekben az érzékelő hiánya miatt a bemenet értékeként a működtetőkimenet állapota olvasódik vissza.

91

Amennyiben az ebben rejlő veszélyt meg kellene világítani, akkor ezt egy egyszerű példávaltehetnénk. Ha egy PLC valamelyik kimenetének 1 értékével működtetünk egy motort, akkoraz nyilván nem közvetlenül történik, hanem a PLC egy mágnes kapcsolót fog működtetni. Amotor csak akkor fog működni, ha a mágnes kapcsoló ténylegesen rákapcsolja a motorra afeszültséget. Általában ez így is van, ha gerjesztjük a mágnes kapcsolót. Azonban ha a motortúlterhelése miatt a bimetálos hővédelem működik, akkor hiába adunk feszültséget a PLCkimenetén a mágnes kapcsolóra, mégsem működik a motor. Ezért a PLC kimenetéből nemszokás a motor állapotára közvetlenül következtetni, mert ez akár balesetek okaként isszerepelhet. Minimum a mágnes kapcsoló egy segédkontaktusát szokás a motorműködésjelzéseként felhasználni, de egyes esetekben a forgásérzékelő alkalmazása semindokolatlan. Személy szerint az ismeretek hiánya miatt nem tudom értékelni, hogy aleírásban szereplő berendezések vonatkozásában mennyire hozható analógiába a feltételezés amotor példában leírtakkal.

A MAIN szegmens (a 280-ik program sorban) meghívja a pr_RelateInPuts programot. Enneka programnak az első néhány sorát láthatjuk az alábbi ábrán.

92

Ez a program a bemeneti változók értéke alapján, a logikai kapcsolatoknak megfelelőenképezett globális (kimeneti) változók értékéből, a fizikai kimenetek konkrét (FALSE,TRUE)értékét állítja elő.

Mit csinál a MAIN programunk az utoljára említett két programrész hívása közöttiprogramsorokban? Egyrészt átemeli a kezelői felületen megadott adatokat, üzemmódbeállításokat, és ezekből, valamint a bemenő adatokból képezi a kimeneteket a beírt utasításoklogikája szerint.

A MAIN szegmens végrehajtása során az üzemmódtól függően a CASE utasítások többbelépési pontján folytatódhat a végrehajtás.

93

Az üzemmódtól függő lépések az állomás működtetésének leírására szolgáló állomásvezérlőstruktúra tartalmának módosítását jelenti.Ez a struktúra a Data ablakban lévő definíciók között található, és az alábbi szerkezetű. TYPE StationControl_Type :STRUCT

strData : StationData;boInitialized : BOOL := FALSE;boClearStation : BOOL := FALSE;

END_STRUCTEND_TYPE

A struktúrán belüli állomás adtok struktúra ugyanezen helyről kiemelve, az alábbi szerkezetetmutatja.

TYPE StationData :STRUCT

(* Data for and from station *)Cmd : COMMANDS := sc_NO_COMMAND;Result : RESULTS := sr_NO_RESULT;Position : ARRAY [1..6] OF LREAL;Offset : ARRAY [1..3] OF LREAL;SuppData : ARRAY [1..10] OF WORD;baPatternData : ARRAY [1..120] OF BYTE;

END_STRUCTEND_TYPE

Mint látható ezekbe a struktúrákba adatokat írhatunk, ami akár egy vezérlési lépésként isfelfogható. A StationData struktúra Cmd eleme a struktúrába beírt parancs jellegét

94

tartalmazza. Az alábbi (a Data ablakban megjeleníthető) listából választható parancsmódokállíthatók.

TYPE Commands : (

sc_NO_COMMAND,sc_INIT_AUTOMODE,sc_START_AUTOMODE,sc_END_AUTOMODE ,sc_INIT_PASS_MODE,sc_START_PASS_MODE,sc_END_PASS_MODE,sc_INIT_TESTMODE,sc_START_TESTMODE,sc_END_TESTMODE,sc_INIT_TEACHMODE,sc_START_TEACHMODE,sc_END_TEACHMODE,sc_CLEAR_TEACHMODE,sc_START_HOMING,sc_DRIVE_TO_POSITION,sc_DO_TEACH_FUNCTION,sc_FUNCTION,sc_END_FUNCTION,sc_PROCESS_PATTERNLINE,sc_CHECK_STATION

);END_TYPE

Ezen struktúra kiértékelését, és végrehajtását követően, az eredményről a végrehajtást végzőfunkcióblokk a Result elemben adja meg a választ. Ezek lehetséges értéke.

TYPE Results :( sr_NO_RESULT,

sr_OK,sr_NOK,sr_WAIT,sr_WAIT_OR_RUN_OUT

);END_TYPE

A végrehajtáshoz kapcsolódó egyéb paramétereket a struktúra többi elemében adhatjuk meg.A program szerkezete azt sugallja, hogy a vezérlési feladat e struktúrában valómegfogalmazását, tanuló üzemmódban lépésenként adhatjuk meg. A MAIN szegmens ez arészlete látható az alábbi ábrán.

95

A tanuló üzemmódban megadott értékek, a parancs jellege beíródik az ismertetett struktúraelemeibe.

96

Az aktuális parancs struktúrák a fenti programrészleten átíródnak, majd a 274-ik sorban aműködtetést vezérlő funkcióblokk hívódik meg.

Ennek a funkcióblokknak egy részlete az alábbi ábrán látható:

97

Mint látható, itt is egy szekvenciális (sorrendi) végrehajtás kerül előírásra, Azstp_INIT_STATION lépés befejezésekor a következő stp_START_STATION lépésvégrehajtása kerül előírásra.

Ezen lépés programsorai az alábbi ábrán láthatók.

98

A parancstömb következő eleme fog kiolvasódni, és attól függően, hogy ezen rekordbanmilyen parancskód van más, és más lépéssorszámot írunk a wStep változóba, azaz akövetkező futáskor ezen címkénél fogunk belépni ebbe a funkcióba. Például, ha a wStepváltózóba a stp_START_HOMING parancskódot írjuk, akkor a következő ciklusban az ábránlátható programhelynél fogjuk folytatni a végrehajtást.

99

Vegyük észre, hogy a fbStationHoming funkcióblokk hívásával az adott állomás adottmoduljára a funkciót végrehajtását elindítjuk. Ezt követően várunk ennek a funkciónak abefejezésére. Ha normál befejezés volt, akkor a boHomingDone változó TRUE, ellenkezőesetben FALSE értéket adunk. A végrehajtás utolsó lépésében a wStep értékének azstp_STATION_READY értéket adjuk, azaz a következő híváskor ezen a ponton fogunkbelépni a funkcióba.

100

Ebben a lépésben ismét az stp_START_STATION pontot fogjuk belépési pontnak megadni,azaz a következő futáskor a következő utasítás fog beolvasódni végrehajtásra.A CASE utasítás hatáskörén kívül minden futási cikluskor meghívódik azfb_StationCyclicProcess, ami tulajdonképpen a berendezés virtuális megfelelőjénektekinthető.

101

Ez a programrészlet állítja be azon globális változókat (GRM_IO_ kezdetű), amelyek későbba fizikai kimenet képzésében is részt vesznek.

Tehát, ha ezt a nem egyszerűen követhető programstruktúrát indokolni kellene, akkor azalábbi okokat lehetne felsorolni mellette. A vezérlési lépések gyakorlatilag egy struktúratömbben tárolódnak adatokként. Így a tanuló üzemmódban lehetőség van a vezérlési feladatösszeállítására anélkül, hogy a programon változtatni kellene.

Irodalom

1. IEC 61131-3 (2003) Programabble controllers. Part 3:Programming languages.

2. Karl Heiz John-Michael Tiegelkamp: IEC 61131-3 Programming Industrial Automation Systems.

3. Ajtonyi - Gyuricza: Programozható irányítóberendezések, hálózatok és rendszerek. Műszaki Kiadó 2007.

4. BECKHOFF Information System

Miskolc 2017. január 27.dr, Gyuricza István

102

1. A PLC rendszer általános áttekintése.....................................................................................22. Az IEC 61131-3 szabvány. A PLC-k programozása..............................................................3

2.1 A program változók, és deklarálásuk................................................................................42.2 A programozás..................................................................................................................8

2.2.1 Az SFC leírónyelv......................................................................................................82.2.2 Az utasításlistás programnyelv (IL).........................................................................112.2.3 Strukturált szöveg (ST) programnyelv.....................................................................142.2.4 Létradiagramos (LD) programnyelv........................................................................172.2.5 Funkcióblokkos (FBD) programnyelv.....................................................................192.2.6 A szabványos funkcióblokkok.................................................................................202.2.7 A szabványos funkcióhívások..................................................................................21

3. A TwinCAT PLC Control programkomponens....................................................................253.1 A feladat megoldása LD programnyelven......................................................................273.2 A feladat megoldása ST programnyelven.......................................................................323.3 Az SFC alkalmazása a feladat megoldásánál..................................................................343.4 A projekt (program) fordítása.........................................................................................41

4. A TwinCAT System Manager programkomponens.............................................................414.1 Az I/O konfiguráció megadása.......................................................................................42

5. A program futtatása, hibakeresése, tesztelése.......................................................................525.1 A program futtatása szimulációs üzemmódban..............................................................525.2 A program normál futtatása............................................................................................555.3 A PLC program automatikus indításának beállítása.......................................................565.4 A PLC taszk ciklusidejének a beállítása.........................................................................595.5 A program hibakeresése, tesztelése................................................................................63

5.5.1 A grafikus (LD, FBD) nyelven megírt programok hibakeresése.............................635.5.2 Szöveges (ST, IL) programnyelven írt programok hibakeresése.............................695.5.3 Az SFC programnyelven írt programok hibakeresése.............................................72

6. A gyártóberendezés programjának vizsgálata......................................................................746.1 A program általános jellemzése, hiba ok keresése..........................................................746.2 A gyártósorok PLC programjainak a szerkezete............................................................77

6.2.1 Az adatok (struktúrák, és felsorolások) szerkezetének definiálása..........................776.2.2 A globális adatok.....................................................................................................786.2.3 A program egységek (POU) szerkezete...................................................................83

103