A 8. fejezet („A CODESYS 3.5 fejlesztőkörnyezet") gyakorlatainak részletes megoldásai és a tudáspróba megoldókulcsa. Előbb dolgozd ki magad, csak utána ellenőrizz!
Gyakorlatok — megoldások
8.1. feladat — Telepítsd az eszközleírást
Értékelési szempontok
A jó válasz megnevezi a fájl nevét és kiterjesztését (a WAGO eszközleírásai jellemzően
.devdesc.xml vagy tömörített .zip/csomag formában érkeznek), és megmondja, melyik
kategóriába került az eszköz a Device Repository fájában (PLC-k, illetve gyártó szerinti
csoport).
A feladat lényege nem a fájlnév, hanem az, hogy megtapasztald: a kábel önmagában kevés. A CODESYS addig nem tud mit kezdeni a vezérlővel, amíg nem ismeri a képességeit (8.3).
⚠ Gyakori hiba: a Device Repository-ba telepített leírás után a régi projektet
megnyitni, és csodálkozni, hogy nem látszik az eszköz. Új projektet kell nyitni, vagy az
eszközt cserélni (Update Device).
8.2. feladat — Építsd fel az eszközfát
Mintamegoldás
Device (CC100) ← te választottad ki ├── PLC Logic ← automatikusan jött létre │ └── Application ← automatikusan │ ├── Library Manager ← automatikusan │ ├── PLC_PRG (PRG) ← automatikusan (a projektvarázsló szerint) │ └── Task Configuration ← automatikusan │ └── MainTask ← automatikusan, benne a PLC_PRG hívása └── (I/O, buszcsatolók) ← eszközfüggő
A task-konfiguráció az Application alatt található; itt állítható a task típusa,
intervalluma, prioritása és a watchdog (8.6–8.7).
8.3. feladat — Számold ki a watchdog-időt
Megoldás
A kioldás feltétele a Time × Sensitivity szorzat:
50 ms × 3 = 150 ms
- 12 ms-os átlagos futásidő: semmi baj, bőven a korlát alatt.
- 160 ms-os kiugrás: a ciklus túllépi a 150 ms-ot, tehát a watchdog kiold, a task hibaállapottal (kivétellel) megáll — és vele az alkalmazás is. Ez üzemleállás, nem figyelmeztetés.
A helyes reakció a program átalakítása, nem a watchdog-idő növelése. Az indoklás:
- A watchdog tünetet jelez, nem okoz: egy 160 ms-os ciklus egy 20 ms-os taskban azt jelenti, hogy a program nyolcszorosan túllépi a saját ütemét — a vezérlés ezalatt nem reagál.
- A watchdog-idő felemelése elrejti a problémát, de a reakcióidő így is romlik: a gép a kiugrás alatt vak és süket marad.
- Keresni kell, mi okozza a csúcsot: hosszú ciklus (
FOR), lassú kommunikációs hívás, nagy adatmozgatás. A megoldás jellemzően a művelet több ciklusra szétosztása vagy alacsonyabb prioritású külön taskba tétele.
⚠ Gyakori hiba: a watchdog kikapcsolása. Akkor egy végtelen ciklus észrevétlenül fagyasztja meg a vezérlőt — ez rosszabb, mint a szabályozott leállás.
8.4. feladat — Írj és futtass szimulációban
Mintamegoldás
PROGRAM PLC_PRG VAR bGomb : BOOL; rtGomb : R_TRIG; iSzamlalo : INT; END_VAR rtGomb(CLK := bGomb); IF rtGomb.Q THEN iSzamlalo := iSzamlalo + 1; END_IF
A várt tapasztalat: a Write Values paranccsal TRUE-ra állított bGomb hatására a számláló
pontosan eggyel nő — akkor is, ha a változó több cikluson át igaz marad. Ez az élfigyelés
lényege (18.2).
⚠ Gyakori hiba: az R_TRIG példány elhagyása és közvetlenül az IF bGomb THEN
használata. Ekkor a számláló ciklusonként nő, azaz másodpercenként több százzal.
8.5. feladat — Tapasztald meg a Force-ot
Értékelési szempontok
A várt tapasztalat: a kényszerített változó értéke minden ciklusban visszaáll a
kényszerített értékre, a program írása ellenére. Az Unforce All Values után a számlálás
onnan folytatódik, ahová a kényszerítés állította.
A záró mondatnak ezt kell tartalmaznia: egy valódi gépen bent felejtett Force azt jelenti,
hogy a program egy része hatástalan — a gép „megmagyarázhatatlanul” viselkedik, és a
programban keresve soha nem találod meg, mert a kód helyes. Ezért kell a kényszerítést
dokumentálni, és a munka végén ellenőrizni (8.11, 23.6).
Tudáspróba — megoldókulcs
| # | Válasz | Indoklás | Szakasz |
|---|---|---|---|
| 1 | a | Eszközleírás telepítése: Tools → Device Repository → Install. |
8.2 |
| 2 | b | A PLC Logic csomópont programozható eszköz alatt automatikusan jön létre. | 8.4 |
| 3 | c | Prioritás 0–31, a 0 a legmagasabb. | 8.6.2 |
| 4 | d | Azonos prioritású taskok egy magon round-robin szerint futnak. | 8.6.2 |
| 5 | a | A watchdog akkor old ki, ha a ciklusidő nagyobb, mint Time × Sensitivity. | 8.7 |
| 6 | b | Kioldáskor a task kivétellel megáll, és az alkalmazás is leáll. | 8.7 |
| 7 | c | A szimuláció előfeltétele hibátlan fordítás és kijelentkezett állapot. | 8.9 |
| 8 | d | A Force Values az értéket a ciklus elején és végén is visszaírja. |
8.10 |
| 9 | a | Töréspontnál a debug task I/O-i nem frissülnek — a „Refresh I/Os in Stop” sem segít. | 8.11 |
| 10 | b | Az adat-töréspont csak a CODESYS Control Win alatt lehetséges. | 8.11 |