Jste zde

Programovací režimy pro PLC dle IEC 61131-3 (CoDeSys)

Programovat PLC lze mnoha různými způsoby. Každý je pak výhodnější pro jiný druh aplikace. Základní programovací režimy standardizuje norma IEC 61131-3, která je spíše známá pod názvem vývojového prostředí CoDeSys. A právě souhrn těchto programovacích režimů si dnes popíšeme.

Pod označením standardu IEC 61131-3 se skrývá definice programovacích režimů (jazyků) pro programovatelné automaty (PLC). Tento soubor je v praxi spíše známý pod označením CoDeSys, což je zkratka pro Controlled Development System. To je univerzální vývojové prostředí pro aplikační programy řídicích systémů PLC vytvořené společností 3S-Smart Software Solutions GmbH právě podle standardu IEC 61131-3, bez ohledu na použitý hardware. Díky němu je tak možno vytvářet jednotné datové a programové struktury a způsoby ovládání nezávisle na výrobci a typu PLC, protože „napasování“ na daný hardware probíhá až poté při překladu.

K dispozici jsou následující programovací režimy / jazyky:

  • IL - Instruction List (posloupnost instrukcí)
  • ST - Structured Text (vyšší programovací jazyk - obdoba Pascalu)
  • LD - Ladder Diagram (kontaktní plán / liniové či reléové schéma)
  • SFC - Sequential Function Chart (vývojové schéma)
  • FBD - Function Block Diagram (schéma funkčních bloků)
  • CFC - Continuous Function Chart (volně propojované bloky)

A právě v tomto článku bych chtěl pro začínající programátory PLC uvést krátký přehled, jak se jednotlivé jazyky vzájemně liší ve vývojovém prostředí CoDeSys, jaký je jejich způsob programování a pro jaké aplikace se ten který více hodí.

IL - Instruction List (Posloupnost instrukcí)

Zápis programu označovaný jako „Instruction List“ je nejzákladnější možný popis programu a více méně se podobá programování mikrokontrolérů v asembleru (ASM). Program se zde skládá z posloupnosti jednoduchých operací tvořených základními instrukcemi (např. MOV pro přesun dat mezi registry, ADD pro sečtení dvou hodnot apod.) a operandy reprezentujícími jednotlivé registry a paměťová místa. Tento způsob programování se vyznačuje dokonalým přehledem a nadvládou programátora nad konstrukcí a strukturou programu. Umožňuje tak co nejvíce optimalizovat program jak na jeho velikost, i rychlost vykonávání, protože lze jej vytvořit bez všech zbytečných přesunů dat, odskoků a volání.

Na druhou stranu i z výše uvedeného je patrné, že se nehodí pro programování složitých aplikací, protože zde se již tento zápis stává dost nepřehledným. Nemluvím již o nutnosti znát velké množství příkazů a i vytváření zápisu je zde poměrně zdlouhavé. Osobně při programování PLC tento zápis využívám spíše pro kontrolu či vytváření krátkých částí programů (volaných podprogramů), které mají být velmi efektivní nebo od nich potřebuji, aby přesně prováděly nějakou operaci, která sice není složitá, ale důležitá (např. přeřazování či dekódování řetězců ASCII znaků například v podobě ASCII příkazů zasílaných po RS-232).

+ Přesná definice chování programu
+ Paměťově i na rychlost zpracování úsporný program

- Nutnost znát nebo se alespoň dobře orientovat v příkazech a registrech
- Mnoho psaní
- Horší přehlednost programu a orientace v něm

Vhodný pro: psaní krátkých vysoce optimalizovaných částí programu

 

LD - Ladder Diagram (liniové nebo reléové schéma)

Tomuto zápisu jsem dlouhou dobu nějak nemohl přijít na chuť, ale nakonec například kvůli PLC Fatek, kde není nic jiného k dispozici (mimo režim IL), jsem si ho i docela oblíbil. U většiny PLC, i u těch, které nepoužívají CoDeSys, je toto základní programovací prostředek a spolu s IL režimem také nejrozšířenější. Prakticky jde o grafické znázornění výše uvedeného režimu IL, kde bitové operace jsou znázorněny jako posloupnost vzájemně propojených ovládacích a výstupních kontaktů relé a složitější příkazy a funkce typu čítač, časovač, přesun dat či aritmetické operace jsou vkládány v podobě „obdélníčků“ s vývody.

Historicky LD zápis programu vychází z dob reléové logiky, kdy místo procesorů či mikrokontrolérů nebo integrovaných logických obvodů typu NAND, NOR či XOR, se využívala soustava vzájemně propojených relátek. S jejich pomocí lze snadno realizovat logické funkce AND (sériové propojení kontaktů typu NO) a OR (paralelní připojení kontaktů NO) či NAND a NOR (to samé, ale kontakty typu NC). A právě pomocí reléových schémat se snadno tyto logické soustavy „zapisovaly“. Protože jsem osobně již vyrostl na hraní si s integrovanými křemíkovými logickými obvody TTL a CMOS, nikdy mi tzv. liniové schéma (jak se teď raději nazývá) moc k srdci nepřirostlo a raději mám režim FBD či CFC (viz níže). Svojí strukturou je pak prakticky ideální pro rychlé a přehledné zpracování velkého množství logických (spínaných vstupů a výstupů) a jejich čítání a časování. Též je vhodný pro jednoduché vyhodnocení hodnot analogových signálů.

Hlavní výhodou tohoto zápisu je však jasně definovaná posloupnost programu a tedy i velká přehlednost, která však někdy bývá na úkor kompaktnosti. U větších a složitějších programů či při masivnějším nasazení funkcí typu přesunu dat (např. funkce MOV apod.) pak může délka zápisu dost rychle narůstat až se zápis začne stávat nepřehledným. Vhodné je tak častější členění do podprogramů a masivní nasazení komentářů. Na druhou stranu u menších programů či menších částí velkého programu (podprogramů) s velkým zastoupením logických operací je LD režim výhodný.

+ Jasně definovaná posloupnost zápisu, kterou nelze porušit
+ Přehlednost zápisu (zvláště u menších programů)
+ Velmi rychlé programování logických operací s funkcemi čítání a časování
+ Ideální pro zpracování velkého počtu logických signálů (vstupů a výstupů)

- Méně vhodný pro aritmetické operace a práce s daty (ASCII znaky / řetězci)
- S rostoucí složitostí programu rychle narůstá jeho délka
- Hůře pochopitelný pro „klasické programátory“

Vhodný pro: realizaci logických řídicích sekcí a sekvencí programu a zpracování vstupních a výstupních signálů

 

CFC - Continuous Function Chart (Volně propojované bloky)

Zápis programu v programovacím režimu CFC je naopak ideální pro toho, kdo vyznává skládání programu z jednotlivých „krabiček“ vzájemně propojených přes vývody. Tedy něco pro elektrokonstruktéry, kteří jsou zvyklí vytvářet klasická schémata zapojení součástek. Zde je právě prostě jen plocha, na kterou se postupně vkládají a propojují jednotlivé funkce v podobě „součástek“ s danými vlastnostmi.

V prostředí CoDeSys prostě máme k dispozici volnou plochu, kam se volně vkládají jednotlivé bloky („krabičky“) reprezentující jednotlivé funkce ať již logické, aritmetické, časování, čítání apod. Jednotlivé bloky se pak propojují čárou reprezentující vodiče po nichž se šíří signály. Tento zápis je z mého pohledu ideální pro části programu (podprogramy) zpracovávající současně analogové i logické signály. Při správném rozvržení plochy může být menší program velmi dobře přehledný zvláště z pohledu sledování „toku“ signálu od vstupu k výstupu. To je výhodné pro přehledné naprogramování zpětnovazebních regulačních algoritmů. Na druhou stranu při složitých „zapojení“, kdy se plocha již dost zaplní, se výhoda přehlednosti ztrácí a může přecházet i v chaos. Tento zápis dále není vhodný pro intenzivnější práci s daty v paměti (databáze), ASCII znaky nebo pro realizaci datové komunikace.

+ Volné uspořádání programu dle potřeby programátora
+ Zápis připomíná hardwarové schéma zapojení součástek
+ Snadná realizace jednoduchého zpracování analogových signálů
+ Přehledný průchod signálu strukturou programu při zpracování
+ Přehledná realizace zpětných vazeb

- Pro složitější programy se zápis stává nepřehledný
- Méně vhodný pro zpracování velkého množství logických signálů (vstupů / výstupů)
- Nevhodný pro realizaci manipulace s většími bloky dat a ASCII řetězci
- Nevhodný pro realizaci datové komunikaci

Vhodný pro: části programu zpracovávající analogově-digitální signály

 

FBD - Function Block Diagram (Schéma funkčních bloků)

Zápis programu PLC v tzv. funkčních blocích (FBD), je v případě programovacího prostředí CoDeSys takovou kombinací liniového schéma s CFC režimu. V jiných programovacích softwarech různých výrobců PLC (těch nestandardizovaných) však můžete pod zkratkou FBD najít i výše uvedený režim CFC.

Stejně jako v CFC se i v FBD posloupnost programu vyjadřuje soustavou za sebou propojených bloků, které realizují různé funkce, a však zde již není volná programovací plocha, ale vše je organizováno do řádků (linií) podobně jako v LD režimu. Prakticky se dá říct, že FBD režim v prostředí CoDeSys je v podstatě LD režim, kde se u logických operací místo sériově-paralelního zapojování symbolů kontaktů relé využívá klasických značek hradel AND, OR apod. Osobně bych řekl, že tento zápis je vhodný pro toho, kdo potřebuje vlastnosti liniového schéma, tedy přehlednost a pevně dané členění programu, ale nevyhovuje mu „reléový“ zápis logických operací.

+ Definované grafické členění programu do řádků
+ Logické operace v podobě hradel
+ Přehledný zápis programu
+ Ideální pro zpracování velkého počtu logických signálů (vstupů / výstupů)

- Méně vhodný pro složitější zpracování analogových signálů
- Nevhodný pro hromadnou manipulaci s velkým množstvím dat a ASCII znaky (řetězci)
- Nevhodný pro programování složitých algoritmů (vzorců)

Vhodný pro: realizaci logických řídicích sekcí programu a zpracování vstupních a výstupních signálů

 

SFC - Sequential Function Chart (Vývojový diagram)

Programovací režim SFC je graficky orientovaný zápis pro snadné definování chování programu, tedy jeho běh a reakce na různé rozhodovací situace. Prakticky umožňuje definovat chování programu prostřednictvím všeobecně známého vývojového schéma, tedy větvení programu na základě splnění rozhodovacích podmínek.

Tento režim je ideální pro definování posloupnosti volání jednotlivých částí programu (podprogramů) napsaných některým z výše uvedených programovacích režimů na základě hodnot stavových proměnných. Také se s ním dobře realizuje sekvenční logika.

+ Velmi přehledný zápis chování programu
+ Přehledné definování a ošetření různých stavů programu
+ Ideální pro realizaci sekvenční logiky
+ Vhodný pro jednoduchou práci s ASCII řetězci

- Nevhodný pro přímou realizaci zpracování analogových signálů
- Nevhodný pro zpracování velkého počtu logických signálů
- Nevhodný pro programování složitých algoritmů

Vhodný pro: vytváření páteřní hlavní větve programu, odkud se volají podprogramy.

 

ST - Structured Text (Strukturovaný text)

Programovací režim ST je ideální pro klasické programátory mikroprocesorů, protože jeho zápis je tvořený posloupností symbolických instrukcí, kde jedna instrukce reprezentuje v „IL“ zápisu celou posloupnost základních instrukcí. Jde tedy o programovací jazyk vyšší úrovně, podobně jako například Pascal či C. Svojí strukturou (syntaxí) se také Pascalu velice podobá.

Tento zápis je ideální pro práci s daty, řetězci a databázemi a pro naprogramování složitých výpočetních algoritmů. Je tak vhodný pro náročné zpracování analogových signálů, jako například pro realizaci digitálních filtrů, linearizaci signálů a složité řídicí algoritmy nebo pro práci s textovými řetězci.

Výhodou je snadné a rychlé naprogramování i složitých aritmetických vzorců a relativně snadná manipulace a práce s bloky dat a databázemi (snadná realizace vícenásobných podmínkových smyček s indexací paměťových míst). Nevýhodou je horší přehlednost logických operací a „toku“ signálu strukturou programu. Také je nutné znát příkazy a syntaxi zápisu.

+ Snadné programování složitých aritmetických operací a vzorců
+ Ideální pro složité zpracování analogových signálů
+ Ideální pro práci s velkými bloky dat a databázemi
+ Vhodný pro práci z textovými řetězci
+ Vhodný pro realizaci / zpracování datové komunikace

- Je nutné znát příkazy a přesnou syntaxi zápisu
- Horší přehlednost zápisu logických operací
- Méně vhodný pro přehledné zpracování velkého množství logických signálů (vstupů / výstupů)

Vhodný pro: klasické programátory, realizaci složitých algoritmů a práci s daty a řetězci

 

Závěrem...

Nabídka programovacích režimů v CoDeSysu je tedy veliká. Je jasné, že každému vývojáři vyhovuje něco jiného a samozřejmě i celé složité programy lze vytvořit jen například v LD, FBD, CFC či ST. Osobně jsem například vytvořil celý řídicí software průběžné průmyslové váhy jak liniovém diagramu (LD), tak i ve funkčních blocích režimu FBD / CFC. A pokaždé to šlo. Na druhou stranu možnost v CoDeSysu jednotlivé režimy kombinovat, může v mnoha případech software zjednodušit a optimalizovat.

Vytvořil na základě informací z programu CoDeSys pro PLC ABB: Antonín Vojáček

DOWNLOAD & Odkazy

  • Stránky společnosti 3S-Smart Software Solutions GmbH, výrobce vývojového programu CoDeSys - www.3s-software.com
  •  
  • Další články o PLC (ABB, Siemens, OMRON, Fatek, Crouzet, IDEC a dalších) najdete na stránkách serveru automatizace.HW.cz v sekci plc-automaty 
Hodnocení článku: