RsLogix5000 – Matematické inštrukcie
17. September, 2014, Autor článku: Körösi Ladislav, Elektrotechnika
Ročník 7, číslo 9
Pridať príspevok
Mnohokrát je potrebné v aplikáciách PLC realizovať matematické výpočty nad rôznymi dátami. Na to slúžia matematické inštrukcie, ktoré okrem základných bitových inštrukcií (so stavmi TRUE, FALSE) vykonávajú komplexnejšie operácie nad dátovými typmi BYTE, SINT, INT, DINT a REAL. Jedným z dôvodov ich použitia je, že získané údaje z analógového vstupu nemusia byť v podobe akej to vyhovuje programátorovi a preto je potrebné upraviť rozsah merania. Okrem toho sa môžu používať na počítanie udalostí, výrobkov, času ako aj zložitých matematických výpočtov, ktoré sa využívajú v oblasti riadenia alebo predikcii správania procesov a iné. Cieľom článku je oboznámiť čitateľa so základnými matematickými inštrukciami softvéru RsLogix 5000 v jazyku rebríkových schém. Článok je pokračovaním článku „RsLogix5000 – Bitové inštrukcie“.
Inštrukcia ADD (ADD)
Inštrukcia ADD (obr. 1) slúži na sčítanie dvoch čísiel Source A a Source B. Výsledok sčítania je následne uložený do Dest (Destination). Dátové typy, ktoré môžu nadobúdať jednotlivé operandy inštrukcie sú SINT, INT, DINT a REAL. Ako parametre okrem tagov sa môžu použiť aj priamo zadané konštanty (viď číslica 1 na obr. 1). Inštrukcia sa vykoná vždy ak je platná podmienka na vstupe inštrukcie (bit EnableIn = TRUE). Ak sa inštrukcia vykonala, potom sa výstup inštrukcie (bit EnableOut) nastaví na TRUE. V opačnom prípade bude mať hodnotu FALSE. Príklad na obr. 1 realizuje inkrementovanie hodnoty tagu POCET o 1. V režime online, kedy je RsLogix 5000 pripojený k PLC sa pod premennými animujú aktuálne hodnoty tagov. V príklade nižšie je aktuálna hodnota tagu POCET rovná 0, pričom podmienka na vstupe inštrukcie ADD nie je platná.
Obr. 1 Príklad inštrukcie ADD v jazyku LD
V druhom príklade (obr. 2) je ukážka sčítania dvoch tagov rôznych dátových typov (DINT a REAL). Výsledok sa ukladá do tagu SUMA, ktorý je dátového typu DINT. Pri kombinácií dátového typu REAL s inými dátovými typmi je dôležité ako sa upraví výsledná hodnota. V hornej časti na obr. 2 sa realizuje súčet SUMA = POCET1 + POCET2 = 1 + 1,5 = 2 a nižšie SUMA = POCET1 + POCET2 = 1 + 1,6 = 3!
Obr. 2 Príklad inštrukcie ADD v jazyku LD s rôznymi dátovými typmi
Stavy, ktoré môže inštrukcia nadobúdať sú nasledovné:
- V stave PRESCAN je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka FALSE, potom je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka TRUE, potom sa vykoná operácia sčítania Destination = Source A + Source B a výstup EnableOut nastavený na TRUE.
- V stave POSTSCAN je výstup EnableOut nastavený na FALSE.
Inštrukcia SUB (SUB)
Inštrukcia SUB (Subtract – odčítanie) realizuje výpočet rozdielu dvoch čísiel Source A a Source B. Má rovnaké parametre, vstupy, výstupy ako ADD a vykonáva sa rovnako ako inštrukcia ADD. Stavy, ktoré môže inštrukcia nadobúdať sú rovnaké ako pre inštrukciu ADD. Rozdiel je len v operácii výpočtu:
- V stave PRESCAN je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka FALSE, potom je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka TRUE, potom sa vykoná operácia sčítania Destination = Source A – Source B a výstup EnableOut nastavený na TRUE.
- V stave POSTSCAN je výstup EnableOut nastavený na FALSE.
Na obr. 3 je ukážka výpočtu rozdielu dvoch tagov rôznych dátových typov (DINT a REAL) ako to bolo v príklade s inštrukciou ADD.. Výsledok sa ukladá do tagu ROZDIEL, ktorý je opäť dátového typu DINT.
Obr. 3 Príklad inštrukcie SUB v jazyku LD s rôznymi dátovými typmi
Príklad realizácie dekrementovania hodnoty tagu je na obr. 4. V hornom príklade je použitá inštrukcia SUB, ktorá dekrementuje hodnotu tagu vždy o 1, ak je platná podmienka na vstupe inštrukcie. V príklade nižšie je ekvivalentný program realizovaný inštrukciou ADD, ktorý pri platnej vstupnej podmienke pripočíta k tagu POCET hodnotu -1.
Obr. 4 Dekrementovanie hodnoty tagu inštrukciami ADD a SUB v jazyku LD
Inštrukcia MUL (MUL)
Inštrukcia MUL (Multiply – Násobenie) realizuje operáciu násobenia parametrov Source A a Source B. Má rovnaké parametre, vstupy, výstupy ako predošlé inštrukcie. Vykonáva sa vždy pri platnej podmienke na vstupe. Rozdiel medzi ADD, SUB a MUL je opäť len v operácii výpočtu:
- V stave PRESCAN je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka FALSE, potom je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka TRUE, potom sa vykoná operácia sčítania Destination = Source A * Source B a výstup EnableOut nastavený na TRUE.
- V stave POSTSCAN je výstup EnableOut nastavený na FALSE.
Obr. 5 Realizácia násobenia inštrukciou MUL v jazyku LD pre rôzne dátové typy
Inštrukcia DIV (DIV)
Inštrukcia DIV (Divide – Delenie) realizuje operáciu delenia parametrov Source A a Source B. Má rovnaké parametre, vstupy, výstupy ako predošlé inštrukcie. Vykonáva sa vždy pri platnej podmienke na vstupe. Rozdiel medzi je opäť v operácii výpočtu a konverzii dátových typov:
- V stave PRESCAN je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka FALSE, potom je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka TRUE, potom sa vykoná operácia sčítania Destination = Source A / Source B (obr. 6) a výstup EnableOut nastavený na TRUE.
- V stave POSTSCAN je výstup EnableOut nastavený na FALSE.
Obr. 6 Realizácia delenia inštrukciou DIV v jazyku LD pre rôzne dátové typy
Ak sú použité iné dátové typy ako DINT a REAL (t.j. SINT a INT), tak sú tieto pred a po vykonaní inštrukcie konvertované a to nasledovne:
- Ak jeden z operandov dátového typu REAL, potom zvyšné parametre dátového typu SINT, INT a DINT sú konvertované na REAL.
- Ak ani jeden z operandov nie je dátového typu REAL, potom parametre dátového typu SINT, INT sú konvertované na REAL.
- Po vykonaní operácie delenia sa Dest dátové typu DINT alebo REAL skonvertuje podľa potreby na SINT alebo INT (ak je Dest iného dátového typu ako REAL alebo DINT).
Ak Dest nie je dátového typu REAL, tak inštrukcia vykoná delenie nasledovne:
- Ak Source A a Source B nie sú dátového typu REAL, tak sa zvyšok po delení oreže. Ak sú všetky parametre dátového typu DINT a Source A = 5, Source B = 3, potom Dest = 1.
- Ak Source A alebo Source B sú dátového typu REAL, tak sa zvyšok po delení zaokrúhli. Ak je Source A dátového typu REAL, Source B dátového typu DINT a Dest je dátového typu DINT a majú hodnoty Souce A = 5.0, Souce B = 3, potom Dest = 2.
Inštrukcia „Compute“ (CPT)
Inštrukcia CPT (Compute – Výpočet) vykonáva aritmetické operácie zadané v parametri Expression a výsledok operácie ukladá do Dest (Obr. 7). Inštrukcia zjednodušuje zápis zložitých matematických výrazov, ktoré sa realizujú pomocou elementárnych inštrukcií (napr. ADD, SUB, DIV, …). Na druhej strane je jej vykonanie pamäťovo náročnejšie ako použitie elementárnych inštrukcií. Inštrukcia realizuje výpočet pri platnej vstupnej podmienke.
Postupnosť stavov pre inštrukciu CPT:
- V stave PRESCAN je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka FALSE, potom je výstup EnableOut nastavený na FALSE.
- Ak je stav rebríka TRUE, potom sa vykoná operácia zadaná v parametri Expression a výstup EnableOut bude nastavený na TRUE.
- V stave POSTSCAN je výstup EnableOut nastavený na FALSE.
Operácie zadané vo výraze Expression sa vykonávajú podľa preddefinovanej postupnosti (priority). Postupnosť sa dá zmeniť použitím zátvoriek v zadanom výraze. Operácie rovnakej priority sa vykonávajú zľava doprava.
Priorita | Operácia |
---|---|
1 | ( ) |
2 | ABS, ACS, ASN, ATN, COS, DEG, FRD, LN, LOG, RAD, SIN, SQR, TAN, TOD, TRN |
3 | ** |
4 | - (negácia), NOT |
5 | *, /, MOD |
6 | - (rozdiel), + |
7 | AND |
8 | XOR |
9 | OR |
Inštrukcie „Absolute Value“ (ABS), Square Root (SQR/SQRT), Negate (NEG), Absolute Value (ABS), Sine (SIN) a iné
Inštrukcie ABS, SQR, NEG, ABS, SIN a niektoré ďalšie majú jeden vstupný operand Source nad ktorým sa vykoná príslušná operácia a výsledok sa uloží do Dest (obr. 8). Výpočet prebehne pri platnej vstupnej podmienke. Inštrukcia ABS je výpočet absolútnej hodnoty, SQR počíta druhú odmocninu, NEG realizuje negáciu hodnoty parametra a SIN matematickú operáciu sínus.
Obr. 8 Príklady inštrukcii ABS a SQR
Príklad kombinácie inštrukcií
Pre porovnanie inštrukcie CPT s elementárnymi inštrukciami je na obr. 9 ekvivalentný príklad výpočtu obsahu kružnice π*R2. Výpočet realizovaný inštrukciou MUL používa pomocný tag temp, ktorý by mohol byť nahradený tagom VYSL.
Obr. 9 Výpočet obsahu kružnice
Záver
Počas práce s matematickými inštrukciami je dôležité vedieť, s akými údajovými typmi pracujeme. Vo väčšine prípadov nie je príliš vhodné priamo kombinovať rôzne dátové typy, aj keď to samotný softvér podporuje. Vhodnejším prístupom je najskôr transparentne konvertovať dané údajové typy na také, ktoré sú z hľadiska použitia pre danú operáciu vhodnejšie. Sada inštrukcií procesora poskytuje široké možnosti pre matematické výpočty, ktoré naviac efektívne dopĺňa inštrukcia CPT, pri použití ktorej je však potrebné dohliadnuť na správnu prioritu operácií.
Poďakovanie
Tento príspevok vznikol vďaka podpore Nadácie Tatra banky – E-Talent z Nadácie Tatra banky č.2013et030.
Literatúra
- http://literature.rockwellautomation.com/idc/groups/public/documents/webassets/browse_category.hcst
- Interné prednášky z predmetu Softvér riadiacich systémov na FEI STU Bratislava
Spoluautorom článku je Leo Mrafko, Ústav robotiky a kybernetiky, FEI STU, Ilkovičova 3, 812 19 Bratislava, Slovenská republika