Az üres képernyőtől az első, szimulációban futó programig — eszközleírás, eszközfa, taskok és a Force veszélye.
- 8.1 A telepítés és a licenckérdés
- 8.2 Eszközleírás telepítése
- 8.3 Miért nem elég a kábel?
- 8.4 Új projekt és az eszközfa
- 8.5 Programozható és paraméterezhető eszközök
- 8.6 A task-konfiguráció
- 8.7 A watchdog
- 8.8 Fordítás és a hibaüzenetek
- 8.9 Szimulációs mód
- 8.10 Online mód: monitorozás, Write és Force
- 8.11 A Force veszélye
- 8.12 A Util könyvtár — ami már készen van
- Összefoglalás
- Gyakorlatok
- Ellenőrző kérdések
- Tudáspróba
- A fejezet forrásai
Eddig papíron gondolkodtunk: jelekről, számábrázolásról, folyamatábráról, hardverről. Ebben a fejezetben megnyitjuk a fejlesztőkörnyezetet.
A jó hír, amivel érdemes kezdeni: a fejezet végére hardver nélkül is tudsz programot futtatni. A CODESYS szimulációs módja valódi vezérlő nélkül futtatja az alkalmazást — így a következő fejezetre már gyakorlott kézzel érkezel.
8.1 A telepítés és a licenckérdés
A CODESYS Development System a gyártó saját telepítőjével kerül a gépre. A környezetbe később
további összetevők (eszközleírások, könyvtárak, bővítmények) is telepíthetők; ehhez való a
Tools → CODESYS Installer… menüpont, amelynek [Install File] gombjával *.package
kiterjesztésű csomagok építhetők be.11
A CODESYS licencelése verziónként és eszközönként eltér, és időben is változik. A könyv ezért nem közöl licenctípusokat, árakat vagy időkorlátokat. A saját eszközödre vonatkozó feltételeket a gyártó aktuális tájékoztatójából és a vezérlő gyártójának dokumentációjából kell megnézni.
Ami a tanuláshoz fontos: a szimulációs módhoz nincs szükség vezérlőre, tehát a fejezet gyakorlatai elvégezhetők.
8.2 Eszközleírás telepítése
Ez az a lépés, amit a legtöbb kezdő kihagy — aztán csodálkozik, hogy a CC100 nem található a listában.
A gyártó által kiadott, gépi olvasású leírófájl, amely megmondja a fejlesztőkörnyezetnek, mit tud az eszköz: milyen be- és kimenetei vannak, milyen buszokat kezel, hogyan kell vele kommunikálni. Enélkül a mérnöki szoftver számára a legdrágább vezérlő is csak ismeretlen doboz.
A telepítés menüútja — és ezt két, egymástól független gyártó dokumentációja is ugyanígy adja meg:7 10
Toolsfül →Device Repository…→[Install…]gomb → az eszközleíró fájl kiválasztása →[Open]
Ezután „a CODESYS az eszközleírást az eszköztár megfelelő kategóriájába helyezi”; hiba esetén a hibaüzenetek „a párbeszédpanel alsó részén jelennek meg”.7
Honnan szerezd be a fájlt? Két útja van.10 11
| Út | Mikor jó? | Hogyan? |
|---|---|---|
| A) Egyedi eszközleíró fájl | egy konkrét eszközhöz, offline gépre is | a gyártó honlapján keresd meg a terméket; „a termékoldal alsó részén a »Downloads« > »Device Files«” alatt tölthető le10 |
| B) Gyártói csomag | ha a teljes eszköz- és könyvtárkészletre szükség van | töltsd le a „WAGO CODESYS Download Server” csomagot a WAGO Download Centerből, majd CODESYS-ben Tools → [CODESYS Installer…] → [Install File]; „a *.package fájl minden összetevője telepítésre kerül”11 |
A B) út után a hiányzó eszközleírások automatikusan letölthetők, és a gyártó könyvtárai is elérhetővé válnak.11
A CC100 eszközleíró fájljának pontos nevét és kiterjesztését a felhasznált gyártói dokumentumok nem nevezik meg. A könyv ezért a menüutat és a beszerzés helyét írja le — a konkrét fájlnév a letöltéskor derül ki.
8.3 Miért nem elég a kábel?
Érdemes egy pillanatra megállni ennél a fogalomnál, mert mindenhol visszatér:
| Rendszer | A leíró neve | (fejezet) |
|---|---|---|
| CODESYS | device description | 8. |
| PROFIBUS | GSD | 19. |
| PROFINET | GSDML | 19. |
| EtherCAT | ESI | 19. |
Mind ugyanazt csinálják: a gyártó elektronikus adatlapját adják a mérnöki szoftvernek. És ahogy a PROFINET dokumentációja kimondja, ennek van egy nagyon gyakorlati haszna is: a leíró fájlok „lehetővé teszik egy rendszer megtervezését anélkül, hogy a felhasznált eszközöknek fizikailag jelen kellene lenniük”.9
Vagyis megtervezheted a projektet, mielőtt a szekrény megérkezne.
8.4 Új projekt és az eszközfa
A projekt létrehozása után a bal oldali eszközfa lesz a fő tájékozódási pontod. Ez a nézet „a céleszköz szerint szervezi az alkalmazásokat”, és benne „látható a PLC-hardver és a buszrendszerek, konfigurálható a hardverkommunikáció, és hozzárendelhetők az alkalmazások”.8
A fa szintjei:8
- gyökér: a projekt nevét viselő csomópont;
- eszközobjektumok: a vezérlő, a buszrendszerek, az I/O-modulok;
- PLC Logic: programozható eszköz alatt automatikusan jön létre;
- Application: az alkalmazás(ok) a PLC Logic alatt;
- task-konfiguráció és a programozási objektumok (POU-k, globális változólisták, felhasználói adattípusok).
8.5 Programozható és paraméterezhető eszközök
A CODESYS kétféle eszközt különböztet meg:8
| Típus | Mit tud? |
|---|---|
| Programozható | alkalmazás helyezhető rá, és automatikusan kap PLC Logic csomópontot |
| Paraméterezhető | nem futtat alkalmazást; csak az eszközszerkesztőn keresztül konfigurálható |
Ez a különbség magyarázza meg, miért nem lehet minden eszközbe programot tölteni: egy buszcsatoló vagy egy I/O-modul paraméterezhető, nem programozható.
8.6 A task-konfiguráció
A 2. fejezetből tudod, hogy a PLC ciklikusan fut. A task az a beállítás, amely megmondja, mi, milyen gyakran és milyen sorrendben fusson.
8.6.1 Task-típusok
| Típus | Mikor fut? |
|---|---|
| Cyclic | „a task feldolgozása ciklikusan történik” — beállítható intervallummal1 |
| Event | egy eseményváltozó felfutó élére1 |
| External | célrendszer-függő eseményekre1 |
| Freewheeling | „a task feldolgozása automatikusan újraindul folyamatos ciklusban”1 |
| Status | az eseményváltozó állapotára indul, és addig fut, amíg a változó hamissá nem válik1 |
A task szerkesztője az eszközfában a task-objektumra kattintva nyílik meg, és az intervallum
IEC 61131-3 időliterálként adható meg — a dokumentált példa: t#300ms.2
8.6.2 Prioritás — a fordított logika
„Lehetséges értékek: 0..31, ahol a 0 a legmagasabb prioritás.”1
A kisebb szám a fontosabb. A 0-s prioritású task megelőzi a 10-est. Ha ösztönösen a „nagyobb szám = fontosabb” logikára gondolsz, pont fordítva állítod be az egész rendszert.
Hogyan ütemez a rendszer? Egy CPU-magon:1
- eltérő prioritásoknál: „a taskok a prioritásuk szerinti sorrendben futnak le”;
- azonos prioritásoknál: „a taskok egymás után futnak, körbeforgó időszeletelés (round-robin) módszerrel”.
„A task ütemezése függ a CPU-architektúrától (egymagos vagy többmagos) és a használt operációs rendszertől.”1 Vagyis a fenti szabályok az egymagos esetre pontosak; többmagos rendszeren a viselkedés eltérhet. Ha a pontos időzítés kritikus, azt mérni kell, nem feltételezni.
8.7 A watchdog
Mi történik, ha a program egy ciklusban túl sokáig dolgozik? Erre való a watchdog („figyelőkutya”).
A task konfigurációjában három beállítás tartozik hozzá:1
| Mező | Jelentése |
|---|---|
| Activate | „a watchdog aktív. Ha a task túllépi a watchdog beállított idejét, akkor a task hibaállapottal (kivétellel) megáll” |
| Time | „watchdog-idő. A Sensitivity-vel együtt határozza meg a task watchdogját” |
| Sensitivity | „szám. A watchdog-idővel együtt határozza meg a task watchdogját” |
A tényleges kioldás feltétele: az aktuális ciklus ideje hosszabb, mint (Time × Sensitivity); a forrás megkülönbözteti az egymást követő és az egyszeri túllépés esetét.1
Kioldáskor „a task hibaállapottal megáll. Az az alkalmazás, amelynek a taskjában a hiba történt, és annak gyermekalkalmazásai is leállnak.”1
Ez nem naplóbejegyzés, hanem üzemleállás. Ezért nem szabad a watchdog-időt „biztos, ami biztos” alapon nagyon rövidre állítani — de kikapcsolni sem szabad, mert akkor egy végtelen ciklus észrevétlenül fagyasztja meg a vezérlőt.
8.8 Fordítás és a hibaüzenetek
A fordítás (Build) előtt érdemes tudni, mi a különbség a kétféle üzenet között:
| Üzenettípus | Mit jelent? |
|---|---|
| Hiba (error) | a fordítás nem sikerült; nincs mit letölteni |
| Figyelmeztetés (warning) | lefordult, de valami gyanús: nem használt változó, implicit típuskonverzió, elérhetetlen kód |
Egy „nem használt változó” figyelmeztetés gyakran elgépelt nevet takar: két hasonló nevű változót hoztál létre, és a program a rossz egyiket használja. A figyelmeztetés az egyetlen jel, ami erre felhívja a figyelmed.
8.9 Szimulációs mód
„Használd a szimulációs módot a program teszteléséhez és hibakereséséhez, ha nincs fizikai céleszközöd. Ebben a módban az alkalmazás egy szimulált eszközön indul el.”4
Bekapcsolás: Online → Simulation, vagy az eszközfában a PLC-re jobb gombbal kattintva a
helyi menüből.4
Előfeltétel:4 „a programod nem tartalmaz hibát (fordítási hibaüzenetet vagy fordítási hibát), és nem vagy bejelentkezve”.
Kilépés: „jelentkezz ki a PLC-ből, és fejezd be a szimulációs módot”.4
A szimuláció a program logikáját futtatja. Amit a felhasznált forrás nem részletez, az az, hogy pontosan mi nem működik benne — például a valós I/O, a hálózati kommunikáció vagy a Modbus-forgalom.
A könyv ezért óvatosan fogalmaz: a szimuláció a logika tesztelésére való, nem a hardveres viselkedésére. A pontos korlátokat a saját eszközödön kell megtapasztalnod — ez a 9. fejezet egyik gyakorlata lesz.
8.10 Online mód: monitorozás, Write és Force
Bejelentkezve a fejlesztőkörnyezet élőben mutatja a változók értékét. Két módja van annak, hogy bele is nyúlj.
Write Values (Ctrl+F7) |
Force Values (F7) |
|
|---|---|---|
| Hatás | „egyszer beállítja a változót az előkészített értékre”3 | „tartósan beállítja az előkészített értéket”3 |
| Mikor érvényesül | egyszer | „a task-ciklus elején és végén”3 |
| A program felülírhatja? | igen — „az értéket a program bármikor újra felülírhatja”3 | nem, amíg a force tart |
| Jelzés a felületen | nincs külön jelölés | a változó force-ikonnal megjelölve |
A force feloldása három módon lehetséges:3 az Unforce All Values paranccsal; a
force elvételével a Prepare Value párbeszédpanelen; vagy kijelentkezéssel — ilyenkor a
rendszer rákérdez, hogy minden változónál feloldja-e.
A súgó külön hangsúlyozza, hogy a force függetlenül érvényesül attól, hogy a változót használja-e egyáltalán a task.3
8.11 A Force veszélye
A Force valós berendezésen kikapcsolja a program logikáját az adott változóra nézve. Ha a
hibakeresés után elmarad az Unforce All Values, a gép továbbra is a kényszerített
értékkel működik — miközben a program mást gondol, és a képernyőn minden rendben lévőnek
látszik.
Kötelező ellenőrzőlista a hibakeresés végén:
Unforce All Values;- a force-ikonok eltűnésének ellenőrzése;
- a kimenetek tényleges állapotának visszaellenőrzése a berendezésen.
Ugyanide tartozik egy másik, kevésbé ismert csapda. Töréspontnál a program megáll — de a súgó szó szerint figyelmeztet:5
„A »debug task« által hívott I/O-k nem frissülnek a töréspontnál történő megállás során, még akkor sem, ha a PLC-beállításokban bejelölöd a Refresh I/Os in Stop jelölőnégyzetet.”
Ha a program megáll egy törésponton, a kimenetek az utolsó állapotukban maradhatnak: a motor forog tovább, a szelep nyitva marad. Töréspontos hibakeresést valós berendezésen csak biztonságos állapotban, a mozgó részek lefékezése után szabad végezni.
(A megállási viselkedés forrása a gyártói súgó; a munkavédelmi következtetés a könyv saját, indokolt tanácsa.)
Töréspontokról röviden, amit már most tudnod érdemes:5
- a CODESYS minden IEC-szerkesztőben támogat töréspontot;
- megálláskor az állapotsorban piros kiemeléssel a
HALT ON BPfelirat jelenik meg; - parancsok:
Debug → Toggle Breakpoint,Debug → New Breakpoint; F9 (töréspont ki/be), F5 (folytatás); - feltételes töréspont: logikai feltétel vagy találatszám adható meg (például minden 5. áthaladásnál álljon meg);
- adat-töréspont: „a program végrehajtása adat-töréspontnál akkor áll meg, amikor egy adott változó vagy memóriacím értéke megváltozik” — de csak a CODESYS Control Win alatt.
A gyártói súgó kifejezetten kimondja: „adat-töréspontok csak a CODESYS Control Win esetén lehetségesek”.5 A CC100 nem ez, tehát ezt a hibakeresési eszközt csak a szimulációban vagy Windows-runtime-on tudod használni.
8.12 A Util könyvtár — ami már készen van
Mielőtt bármit magad írnál meg, érdemes megnézni a Util könyvtárat.6 Néhány csoport belőle:
- BCD-átváltás:
BCD_TO_BYTE,BCD_TO_WORD,BCD_TO_DWORD,BCD_TO_INT, és a fordított irány (BYTE_TO_BCDés társai); - Gray-kód átváltás mindkét irányban;
- analóg jelfelügyelet: hiszterézis, határérték-riasztás;
- szabályozók: PD és PID;
- bit- és bájtműveletek, hexadecimális/ASCII átváltás, BASE64;
- függvénymanipulátorok: rampa, karakterisztikagörbe;
- matematika: derivált, integrál, lineáris transzformáció, statisztika;
- jelgenerátorok: villogás, frekvenciamérés;
- időkezelés: UTC és helyi idő, időkapcsoló-funkciók.
A 4. fejezetben említett WORD_BCD_TO_INT nem a CODESYS neve — az egy másik gyártó
IEC-megvalósításából származik. A CODESYS-ben a fenti, BCD_TO_… / …_TO_BCD névkonvenció
érvényes. Ez jó példa arra, hogy a szabvány a nyelvet egységesíti, a könyvtárak nevei
viszont gyártónként eltérhetnek.
Összefoglalás
- A munkafolyamat: eszközleírás telepítése → projekt és eszköz → task-konfiguráció → POU-k → fordítás → szimuláció → letöltés.
- Az eszközleírás a gyártó elektronikus adatlapja. Telepítése:
Tools → Device Repository → Install. Beszerzése a termékoldal „Downloads → Device Files” szakaszából, vagy a gyártó*.packagecsomagjából aTools → CODESYS Installer…úton. - Az eszközfa szintjei: projekt → eszköz → PLC Logic → Application → task-konfiguráció és POU-k. A PLC Logic csomópont programozható eszköz alatt automatikusan jön létre.
- Task-típusok: Cyclic, Event, External, Freewheeling, Status. A prioritás 0–31, és a 0 a legmagasabb. Egy magon: eltérő prioritásnál sorrend szerint, azonosnál round-robin — de az ütemezés architektúra- és operációsrendszer-függő.
- A watchdog akkor old ki, ha a ciklusidő nagyobb, mint Time × Sensitivity. Ilyenkor a task kivétellel megáll, és vele az alkalmazás is.
- A szimulációs mód fizikai eszköz nélkül futtatja az alkalmazást — a logika tesztelésére.
- Write = egyszeri beírás, a program felülírhatja. Force = tartós kényszerítés minden
ciklus elején és végén. A hibakeresés utolsó lépése mindig az
Unforce All Values. - Töréspontnál a kimenetek nem frissülnek — valós gépen csak biztonságos állapotban használd. Az adat-töréspont csak CODESYS Control Win alatt működik.
Gyakorlatok
Keresd meg a CC100 (751-9301) termékoldalát a gyártó honlapján, és az oldal alsó részén a
„Downloads → Device Files” szakaszban keresd meg az eszközleíró fájlt. Telepítsd a
Tools → Device Repository → Install úton. Írd fel, milyen néven és kiterjesztéssel
találtad meg a fájlt, és melyik kategóriába került az eszköztárban.
Hozz létre új projektet a CC100-zal, és rajzold le papíron a keletkező eszközfát, minden szinttel. Jelöld meg, melyik csomópont jött létre automatikusan, és melyiket hoztad létre te. Keresd meg, hol van a task-konfiguráció.
Egy ciklikus task intervalluma t#20ms, a watchdog Time mezőjében t#50ms, a
Sensitivity értéke 3. Hány ezredmásodperces ciklusidőnél old ki a watchdog? Ha a program
átlagos futásideje 12 ms, de néha felmegy 160 ms-ra, mi történik? Fogalmazd meg, mi lenne a
helyes reakció: a watchdog-idő növelése, vagy a program átalakítása — és miért.
Írj egy egyszerű PLC_PRG programot, amely egy BOOL bemenetre egy számlálót növel
(a 18. fejezet élfigyelésével). Fordítsd le, indítsd el szimulációs módban, és a
Write Values paranccsal működtesd a bemenetet. Figyeld a számláló értékét.
Ugyanabban a szimulált programban tegyél Force-ot a számláló változójára egy tetszőleges
értékkel. Figyeld meg, hogy a program nem tudja megváltoztatni. Ezután oldd fel az
Unforce All Values paranccsal, és ellenőrizd, hogy a számlálás folytatódik. Írd le egy
mondatban, mi történt volna, ha ezt egy valódi gépen felejtetted volna bent.
Ellenőrző kérdések
- Mi az eszközleírás, és mi történik, ha nincs telepítve?
- Milyen menüúton telepíted az eszközleírást, és honnan szerzed be a fájlt?
- Sorold fel az eszközfa szintjeit! Melyik jön létre automatikusan?
- Mi a különbség a programozható és a paraméterezhető eszköz között?
- Nevezd meg az öt task-típust, és mondd meg, melyik mikor fut!
- Mekkora a prioritások tartománya, és melyik a legmagasabb?
- Mi történik két azonos prioritású taskkal egy CPU-magon?
- Mi a watchdog kioldási feltétele, és mi a következménye?
- Mire való a szimulációs mód, és mi az előfeltétele?
- Mi a különbség a Write Values és a Force Values között?
- Hogyan oldható fel a force, és miért kötelező ez a hibakeresés végén?
- Miért veszélyes a töréspont valós berendezésen?
- Melyik hibakeresési eszköz nem használható a CC100-on, és miért?
Tudáspróba
Válaszd ki az egyetlen helyes választ!
1. Az eszközleírás telepítésének menüútja:
a) Tools → Device Repository → Install
b) File → Import Device
c) Online → Add Device
d) Build → Device
2. A PLC Logic csomópont: a) kézzel kell létrehozni; b) programozható eszköz alatt automatikusan jön létre; c) csak buszrendszereknél jelenik meg; d) a task-konfiguráció része.
3. A task-prioritások tartománya: a) 1–16, ahol a 16 a legmagasabb b) 0–31, ahol a 31 a legmagasabb c) 0–31, ahol a 0 a legmagasabb d) 0–255, ahol a 0 a legmagasabb
4. Azonos prioritású taskok egy CPU-magon: a) egyszerre futnak; b) hibát okoznak; c) véletlenszerű sorrendben futnak; d) körbeforgó időszeletelés (round-robin) szerint futnak.
5. A watchdog akkor old ki, ha a ciklusidő nagyobb, mint: a) Time × Sensitivity b) Sensitivity c) Time d) Time + Sensitivity
6. Watchdog-kioldáskor: a) a rendszer csak naplóz; b) a task kivétellel megáll, és leáll az alkalmazás is; c) a task újraindul; d) a prioritás automatikusan nő.
7. A szimulációs mód előfeltétele: a) csatlakoztatott vezérlő; b) érvényes licenc a vezérlőre; c) hibátlan fordítás és kijelentkezett állapot; d) aktív hálózati kapcsolat.
8. A Force Values az értéket:
a) egyszer írja be;
b) csak szimulációban működik;
c) csak fordításkor érvényesíti;
d) a task-ciklus elején és végén írja vissza.
9. A töréspontnál történő megállás során a debug task I/O-i: a) nem frissülnek, még a „Refresh I/Os in Stop” bejelölésével sem; b) frissülnek; c) csak a bemenetek frissülnek; d) csak a kimenetek frissülnek.
10. Az adat-töréspont (data breakpoint): a) minden CODESYS-vezérlőn működik; b) csak a CODESYS Control Win alatt lehetséges; c) csak szimulációban működik; d) csak IL nyelven használható.
A megoldókulcs a B függelékben található.
A fejezet forrásai
-
CODESYS Online Help: Task Configuration – reference (V3.5.22.0). CODESYS GmbH. (2026-07-29, kiegészítve: 2026-07-31) A prioritás, a task-típusok, az ütemezés és a watchdog mezőinek forrása. ↩↩↩↩↩↩↩↩↩↩↩
-
CODESYS Online Help: Configuring a Task (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩
-
CODESYS Online Help: Forcing Values (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩↩↩↩↩↩
-
CODESYS Online Help: Testing in Simulation Mode (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩↩↩↩
-
CODESYS Online Help: Using Breakpoints (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩↩↩
-
CODESYS Util Library Documentation (v3.5.22.0). CODESYS GmbH. (2026-07-29) ↩
-
CODESYS Online Help: Installing Devices (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩↩
-
CODESYS Online Help: Device Tree and Device Editor (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩↩↩
-
PROFINET System Description – Technology and Application (2018. november). PROFIBUS Nutzerorganisation e.V. / PI. (2026-07-29) Az eszközleíró fájlok szerepéről. ↩
-
Installing WAGO Device Descriptions separately. WAGO TechDocs. (2026-07-31) ↩↩↩
-
Integrating Available WAGO Device Descriptions and Libraries into CODESYS. WAGO TechDocs. (2026-07-31) ↩↩↩↩