FST FEC krátký úvod do programování v jazyce STL
OBSAH: 1
PŘEDMLUVA
1
2
VSTUPY (INPUTS)
1
2.1
3 3.1
Co lze se vstupy?
VÝSTUPY (OUTPUTS) Co lze s výstupy?
3
4 5
4
TRIMR
6
5
PŘÍKAZY IF (JESTLIŽE), THEN (PAK), OTHRW (JINAK), SET (ZAPNI)8
6
PŘÍKAZ STEP (KROK)
10
7
PŘÍKAZ RESET (VYPNI)
11
8
PŘÍKAZ JMP TO (SKOČ NA)
12
9
PŘÍKAZ N (NENÍ PRAVDA, ŽE), PŘÍKAZ NOP (NO OPERATION)
13
10 PŘÍKAZY AND (LOGICKÉ „A“), OR (LOGICKÉ „NEBO“)
15
11 POUŽITÍ ČASOVAČE (TIMER)
15
11.1
Předvolba časovače (timer preselection - TP)
16
11.2
Aktuální hodnota časovače (timer word – TW)
16
11.3
Časovač (timer – T)
16
12 PŘÍKAZ LOAD TO (NAHRAJ DO)
19
13 POROVNÁVÁNÍ ČÍSEL (<, >, =), POUŽITÍ ZÁVOREK
20
14 POUŽITÍ ČÍTAČE (COUNTER)
20
14.1
Předvolba čítače (counter preselection - CP)
21
14.2
Aktuální hodnota čítače (counter word – CW)
21
15 REGISTRY
22
16 PŘÍZNAKY
22
16.1
K čemu se hodí příznaky?
17 PARALELNÍ CHOD PROGRAMŮ (MULTITASKING) 17.1
Příklad paralelního chodu programů
23
24 24
18 PODPROGRAMY
28
19 BINÁRNÍ SOUSTAVA
29
20 JAK ZADÁVAT OPERANDY?
31
21 TCP/IP
31
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
1 Předmluva Tento velmi zjednodušený úvod do programování v jazyce STL si neklade za cíl naučit vás vše, co lze s uvedenými prostředky dokázat; jeho úkolem by mělo být navedení programátora na vlastní cestu řešení a nastínění nejobvyklejších postupů při programování jednoduchých úloh. Pokud s takovou činností začínáte, je tento materiál určen právě vám. Nebudeme se ani příliš zabývat instalací FST, postupem navedení do programovacího prostředí, způsobem nahrávání dat a konfigurace systému FEC; k tomu slouží návod pod názvem „FST FEC pro shareware verzi, krátký návod k použití“. STL, statement list (seznam příkazů) je nejčastěji používaný programovací jazyk, který dovoluje plně využít všech vlastností systému FEC a jemu podobných. Všechny ostatní řídící systémy od firmy Festo využívají stejný jazyk, dokonce lze kopírovat bloky jednotlivých programů z jednoho systému do druhého a přeložit automaticky z jednoho jazyka do druhého (software je vždy k dispozici anglicky či německy). Tento materiál používá výrazy převzaté z anglické verze jazyka STL. Všechny výrazy uvedené kurzívou jsou identické s výrazy, se kterými se při skutečném programování setkáte. Programovat lze i v liniovém schématu (LDR), kdy se na obrazovce tvoří reléové schéma logiky. Pro uživatele zvyklé pracovat s reléovou logikou je to příjemný způsob; úvod do tohoto jazyka najdete opět ve výše uvedeném návodu.
2 Vstupy (inputs) Jako vstupy do systému označujeme signály, přicházející zvenku dovnitř, tedy například signály od čidel. Pokud mluvíme o tzv. binárních vstupech, jedná se o signály mající dvě základní úrovně: logickou 0 a logickou 1. Nejprve čidla spínací:
1
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Pracujeme-li například s běžnými čidly PNP, je rozepnutý stav indikován stavem „nezapojen“, stav sepnutý napětím blízkým napájecímu (vodič se signálem je připojen na napájení čidla; napětí na něm je tedy jen o málo menší, než je napájecí napětí čidla). Poněkud méně častá je práce s čidly NPN: rozepnutý stav je indikován napětím blízkým 0 V (vodič se signálem je „nezapojen“), stav sepnutý napětím 0V (vodič se signálem je uzemněn). A čidla rozpínací? Tady je vše opačně; výstup čidla PNP je v sepnutém stavu „nezapojen“, ve stavu rozepnutém připojen na napájecím napětí. Výstup čidla NPN pak ve stavu sepnutém „nezapojen“, ve stavu rozepnutém pak uzemněn. U našeho systému FEC se můžeme rozhodnout, zda používáme vstupy PNP nebo NPN. U vstupů PNP připojíme svorku označenou S0 na záporný pól napájení vstupů, pro vstupy NPN tuto svorku připojíme na kladný pól napájení. Vypadá to složitě, ale pro praxi většinou vystačíme s tímto: používáme čidlo PNP (nebo spínač, jazýčkové relé, apod., připojené na jedné straně na kladný pól napájení). Připojíme ho na vstup systému. Svorku S0 připojíme na záporný pól napájení. Pokud je nyní vstup pod signálem (např. indukční čidlo reaguje na přiblížení kovu), připomíná sepnutý vypínač – dává tedy napětí blízké napájecímu. Řídící systém reaguje jednoduše postavením vstupu do logické 1 (sepne a rozsvítí se příslušná LED dioda na čelním panelu FEC). Jakmile pomine důvod k sepnutí čidla, napětí klesne a vstup systému se vrátí do logické 0 (rozepne a LED zhasne). Zpátky k našemu FEC: jeho vstupy (inputs), jsou vždy označené nějakou adresou. Například vstup I0.0 je nultý vstup (nultý bit) z nultého slova (bajtu) vstupů. Patří tedy do nultého slova vstupů IW0 (input word 0).
2
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Takže bude-li náš FEC obsahovat vstupy s adresami 0.0 až 0.7, bude vstup I0.0 prvním z řady. Tato řada je vyvedena na svorky, bude tedy i prvním v řadě svorek. Tam budeme muset připojit vstup (= čidlo nebo spínač), který bude mít onu adresu I0.0. Proč „bude-li obsahovat?“ Protože u tohoto systému se rozhoduje v konfiguraci vstupů a výstupů (najdeme v menu FST jako I/O configuration), jakou adresu bude mít právě tento první vstup. Při konfiguraci jsme totiž dotázáni, jaké vstupní slovo (IW) chceme instalovat. Odpovíme-li, že IW0, začnou naše vstupy právě adresou I0.0. Protože FEC má více vstupů než 8, neskončí na adrese I0.7, ale bude automaticky pokračovat adresami I1.0 až I1.3. Proto při instalaci obsazujeme vlastně dvě vstupní slova, i když uvádíme jen jedno. Je tedy jasné, že uvedeme-li při instalaci FEC například vstupní slovo IW5, bude mít první vstup v řadě svorek adresu I5.0, další I5.1, atd., až k I5.7. Pak budeme pokračovat od I6.0 až k I6.3. Všimněte si též, že svorky S jsou dvě; můžeme tedy použít některé vstupy PNP a některé NPN, podle toho, kam připojíme příslušnou svorku, zda na kladný či záporný pól napájení. (při pohledu na čelní stranu FEC logicky vyplyne, že pro první osmici (bajt) vstupů je svorka S0, pro další čtveřici svorka S1)
2.1
Co lze se vstupy?
Předběhněme několik kapitol a podívejme se na možnosti, co lze všechno se vstupy v našem programu. Vstupy mají, jak již víme, dva stavy: logická 1 (signál přichází) a logická 0 (signál není k dispozici). Na takové signály se můžeme v našem programu ptát (testovat je): IF
I0.0
znamená dotaz, je-li napětí na vstupu I0.0. Naopak
3
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
IF
N
I0.0
znamená dotaz, je-li vstup I0.0 bez napětí. Tyto signály ovšem nemůžeme programem ovlivňovat - přichází zvenku, nemůžeme je tedy programem zapínat (SET) nebo vypínat (RESET). Dotazovat se můžeme ovšem i na celou osmici (bajt) vstupů najednou – stačí dotaz na obsah celého vstupního slova, tj. například podmínka: IF
IW0 =
V2
je splněna tehdy, je-li zapnut výstup I0.1 a všechny ostatní vypnuty. (jedná se o decimálně vyjádřené dvojkové číslo – bajt – viz kapitola Binární soustava). Výraz V2 je v jazyce FST číslo 2 (písmeno V znamená anglicky „value“ nebo-li hodnota, je povinně uvedeno před každým číslem a říká, že za ním uvedené číslo je skutečně číslo bez desetinné čárky – FST s jinými čísly nepracuje).
3 Výstupy (outputs) Jako výstupy jsou označovány signály jdoucí ze systému ven. Tady je situace v porovnání se vstupy poněkud jednodušší, neboť v případě FEC se jedná o kontakty výstupních relé, které mohou něco spínat. Jsou rozděleny do tří skupin, z nichž každá má jeden společný kontakt. To znamená, že první tři mohou připojovat jednu úroveň napětí (například 24 V DC), druhé tři jinou (třeba 48 V DC) a poslední dva také jinou. Tohle napětí je nutné přivést vždy na společnou svorku, která je jasně znázorněna opět přímo na čelní stěně FEC. Takže bude-li náš FEC obsahovat výstupy s adresami O0.0 až O0.7 a sepneme-li výstup O0.0 (tedy nultý výstup – bit v nultém slově – bajtu), sepne
4
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
relé, jehož kontakt je vyveden na první svorku v řadě (a rozsvítí se odpovídající LED dioda). Proč „bude-li obsahovat?“ Protože podobně jako u vstupů se u tohoto systému rozhoduje v konfiguraci vstupů a výstupů (najdeme v menu FST jako I/O configuration), jakou adresu bude mít právě tento první výstup. Při konfiguraci jsme totiž také dotázáni, jaké výstupní slovo (OW) chceme instalovat. Odpovíme-li, že OW0, začnou naše výstupy právě adresou O0.0. Je tedy jasné, že uvedeme-li při instalaci FEC například výstupní slovo OW5, bude mít první výstup v řadě svorek adresu O5.0, další O5.1, atd., až k O5.7.
3.1
Co lze s výstupy?
Podobně jako u vstupů předběhneme i u výstupů několik kapitol, abychom se podívali na to, co s nimi lze v našem programu. Výstupy mají také dva stavy: logická 1 a logická 0. Protože jsou ovšem na rozdíl od vstupů ovlivňovány programem, můžeme je zapínat: SET
O0.0
zapne výstup O0.0, nebo vypínat: RESET
O0.0
vypne výstup O0.0. Pokud potřebujeme, můžeme se na ně ovšem také ptát: IF
O0.0
je dotaz na zapnutý výstup O0.0,
5
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
IF
N
O0.0
znamená dotaz na vypnutý stav výstupu. To má význam například při používání časovačů způsobem, který je popsán v kapitole Použití časovačů. Také můžeme ovládat celou osmici výstupů najednou (bude se nám to hodit například při nouzovém stopu k vypnutí všech výstupů jedním příkazem) THEN
LOAD
TO
V0 OW0
znamená: nahraj nulu do slova výstupů číslo 0 (OW0). V tomto okamžiku se vypnou všechny výstupy od O0.0 do O0.7. Můžeme ovšem do tohoto slova nahrát i jiné číslo (opět se jedná o decimální vyjádření dvojkového čísla – viz kapitola Binární soustava).
4 Trimr Trimr je vlastně potenciometr, jehož si můžeme povšimnout též na čelní straně FEC. Je aktivní až po instalaci ve stejném místě FST, jako vstupy a výstupy, tedy I/O configuration. Tady totiž můžeme tento trimr instalovat tak, že mu přiřadíme nějaké vstupní slovo - IW (logicky musí být odlišné od slova, které jsme použili pro skutečné vstupy). Například: vstupy jsme instalovali na IW0 (už ale víme, že tím obsadíme nejen vstupy s adresami I0.0 až I0.7, ale i I1.0 až I1.3), takže nejbližší volná adresa je IW2. Pokud tedy trimr nainstalujeme na tuto adresu, bude se ve vstupním slově číslo 2 (bajt – IW2) odrážet poloha trimru (podle jeho polohy bude mít obsah tohoto slova - které je vlastně jako každé slovo číslem – hodnotu 1 až 63). Tato hodnota je velmi užitečná, neboť jejím prostřednictvím může obsluha stroje či zařízení zadávat jakousi hodnotu do systému, aniž by k tomu potřebovala počítač či systém doplněný displejem s klávesnicí. Lze tedy velmi levně a jednoduše nastavovat například čas prodlevy v technologii, atd.
6
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Přeskočme několik kapitol, ukažme si příklad: STEP start IF THEN
tnastav JMP TO
IF
I0.5 tlacitko nastaveni casu
nastav tstart
I0.0 tlacitko start
chapadlo
O0.0 ventil pro sep. chapadla
chapad_1
I0.1 chapadlo uchopilo
rameno
O0.1 rameno podavace
tnastav
I0.5 tlacitko nastaveni casu
LOAD
trimr
IW2 slovo trimru
TO
pcas
TP1 predv. casu pro chap.
IF
N
tnastav
I0.5 tlacitko nastaveni casu
THEN
JMP TO
start
THEN
SET
STEP pokrac IF THEN
SET
. . . STEP nastav IF THEN
V tomto příkladu lze při zapnutí napájení držet tlačítko tnastav, které způsobí skok na krok nastav. V tomto kroku se přepisuje slovo trimru nazvané trimr do předvolby času pro chapadlo pcas. Jakmile uvolníme tlačítko tnastav, je přepis přerušen a program se přesouvá opět na začátek, aby následně proběhl běžným způsobem. Pokud chceme, můžeme tuto otáčením trimru zadávanou hodnotu pro potřeby času například násobit číslem 10 (max. hodnota bude tedy 10 x 63 = 630, tj. 6,3 sekundy. Pak bude krok nastav vypadat takto:
7
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
STEP nastav IF
tnastav
I0.5 tlacitko nastaveni casu
LOAD
trimr
IW2 slovo trimru
*
V10
TO
pcas
TP1 predv. casu pro chap.
IF
N
tnastav
I0.5 tlacitko nastaveni casu
THEN
JMP TO
start
THEN
Všechny příkazy k tomuto příkladu najdete v příslušných kapitolách.
5 Příkazy IF (jestliže), THEN (pak), OTHRW (jinak), SET (zapni) Struktura programování v jazyce STL je jednoduchá – vždy se jedná o výraz „jestliže (IF) je splněna podmínka, potom (THEN) se něco vykoná, pokud není splněna (=jinak) (OTHRW), vykoná se něco jiného. Část výrazu bez OTHRW je povinná. A hned jeden příklad:
IF THEN
I0.0 SET
zde je podmínka
O0.0 zde je akce (výkonná část)
Znamená: jestliže je signál na vstupu I0.0, pak zapni (SET) výstup O0.0.
8
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Další příklad: IF
I0.0
zde je podmínka
THEN
SET
O0.0 je-li splněna, vykoná se tato výkonná část
OTHRW
SET
O0.1 není-li splněna, vykoná se tato výkonná část
znamená: jestliže je signál na vstupu I0.0, pak zapni (SET) výstup O0.0. Pokud není tento signál, zapni (SET) výstup O0.1. Jak vidíte, část OTHRW je nepovinná a záleží jen na vás, zda ji potřebujete či nikoliv. V software FST můžeme ovšem použít symbolické názvy (symbolic operands), dlouhé maximálně 8 znaků, takže náš příklad může vypadat takto: IF
tstart
THEN
SET
chapadlo
OTHRW
SET
rameno
Pokud si dovolíme použít tento symbolický název, donutí nás FST přiřadit mu absolutní operand (absolut operand), tedy ony I0.0, O0.0 a O0.1. Takže nakonec se v seznamu operandů (allocation list), který se doplňuje automaticky každým novým výrazem, objeví nejen povinný absolutní operand, ale také operand symbolický a pokud ho vložíme, také komentář, například:
9
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Absolutní operand
Symbolický operand
Komentář
I0.0
tstart
I0.0 tlacitko start
O0.0
chapadlo
O0.0 ventil pro sepnuti chapadla
O0.1
rameno
O0.1 rameno podavace
Pokud se rozhodneme používat symbolické názvy, budeme mít výhodu, že si program po sobě plynule přečteme. Další výhodou je snadná změna: pokud například připojíme tlačítko start na vstup I0.1, stačí ve výše uvedené tabulce změnit přiřazení výrazu „tstart“ jinému vstupu – I0.1. Není třeba kontrolovat, kde se všude tento vstup v našem programu či programech vyskytuje; on je zkrátka všude „tstart“. V komentáři se vyplatí uvádět nejen slovní popis operandu, ale také jeho absolutní název (tedy např. I0.0), neboť později uvidíme, že v některých režimech FST není jiná možnost, jak daný operand rychle lokalizovat, než podle komentáře. Náš příklad po doplnění všech náležitostí: IF
tstart
I0.0 tlacitko start
THEN
SET
chapadlo
O0.0 ventil pro sep. chapadla
OTHRW
SET
rameno
O0.1 rameno podavače
6 Příkaz STEP (krok) Celý program můžeme rozdělit do kroků (STEP) s mnemotechnickými názvy (opět do osmi znaků), které programování většiny technologií velmi zjednodušší (viz též kapitola Zadávání operandů).
10
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Příklad: STEP start IF THEN
SET
tstart
I0.0 tlacitko start
chapadlo
O0.0 ventil pro sep. chapadla
chapad_1
I0.1 chapadlo uchopilo
rameno
O0.1 rameno podavace
STEP pokrac IF THEN
SET
Pokud teď programátor čte svoje dílo, dozví se následující: Až stisknu tlačítko start, zapne se chapadlo. Až uchopí (koncový spínač na vstupu I0.1 – chapadlo uchopilo), zapne se pohyb ramene podavače. Už známe: IF (jestliže), THEN (potom), OTHRW (jinak), SET (zapni)
7 Příkaz RESET (vypni) STEP start IF THEN
tstart
I0.0 tlacitko start
chapadlo
O0.0 ventil pro sep. chapadla
chapad_1
I0.1 chapadlo uchopilo
SET
rameno
O0.1 rameno podavace
RESET
k_stop
O0.2 kontrolka stop (cervena)
SET
STEP pokrac IF THEN
11
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Po uchopení se nejen spustí rameno podavače, ale také zhasne kontrolka stop, která mohla být dřívější částí programu rozsvícena.
8 Příkaz JMP TO (skoč na) Tento příkaz dovolí skok na libovolný krok v programu, například: STEP start IF THEN
tstart
I0.0 tlacitko start
chapadlo
O0.0 ventil pro sep. chapadla
chapad_1
I0.1 chapadlo uchopilo
SET
rameno
O0.1 rameno podavace
RESET
k_stop
O0.2 kontrolka stop (cervena)
JMP TO
konec
SET
STEP pokrac IF THEN
. . . . STEP konec IF THEN
RESET
ramen_1
I0.2 rameno se otocilo
chapadlo
O0.0 ventil pro sep. chapadla
. . což znamená, že po uchopení a otočení ramene se chapadlo opět uvolní.
12
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
9 Příkaz N (není pravda, že), příkaz NOP (no operation) V každém kroku může být i více podmínek a akcí najednou. Například při přerušení signálu z tlačítka nouzový stop chceme program přemístit na krok nouz_st, kde se vše vypne. Na toto tlačítko ale musíme reagovat v každém kroku:
STEP start IF
N
tnouzst
THEN
JMP TO
nouz_st
IF
I0.3 tlacitko nouzovy stop
tstart
I0.0 tlacitko start
SET
chapadlo
O0.0 ventil pro sep. chapadla
IF
N
tnouzst
I0.3 tlacitko nouzovy stop
THEN
JMP TO
nouz_st
THEN STEP pokrac
IF
chapad_1
I0.1 chapadlo uchopilo
SET
rameno
O0.1 rameno podavace
RESET
k_stop
O0.2 kontrolka stop (cervena)
JMP TO
konec
IF
N
tnouzst
THEN
JMP TO
nouz_st
THEN
. . . . STEP konec
IF THEN
RESET
I0.3 tlacitko nouzovy stop
ramen_1
I0.2 rameno se otocilo
chapadlo
O0.0 ventil pro sep. chapadla
.
13
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
. . .
STEP nouz_st IF
NOP
THEN
RESET
chapadlo
O0.0 ventil pro sep. chapadla
RESET
rameno
O0.1rameno podavace
.
Zde si všimněte, že se ptáme na negativní stav tlačítka nouzový stop, tedy jestliže je přerušen signál od tohoto tlačítka, přesouvá se program na krok nouz_st. Ten zní: jestliže nic (NOP – no operation = prázdná operace), tak vypni chapadlo a vypni rameno. Pokud je v kroku více akcí a podmínek, program tento krok neopustí, dokud se nesplní poslední z nich (nebo pokud ho nepošleme pryč příkazem JMP TO). Takže podmínka, která je vždy splněna, může vypadat například takto: IF THEN OTHRW
RESET
ramen_1
I0.2 rameno se otocilo
chapadlo
O0.0 ventil pro sep. chapadla
NOP
Pokud je rameno otočeno, vypne se chapadlo. Pokud není (OTHRW = jinak), program pokračuje dál. Vidíte, že zařazení: OTHRW
NOP
Prakticky znamená příkaz k pokračování, i když není splněna podmínka po IF.
14
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
10 Příkazy AND (logické „A“), OR (logické „NEBO“) Podmínek pro každou akci může být víc; lze je spojovat do logických vazeb: IF THEN
tstart
I0.0 tlacitko start
AND N
tstop
I0.4 tlacitko stop
SET
chapadlo
O0.0 ventil pro sep. chapadla
Tedy: jestliže stiskneme tlačítko start a není v té době stisknuto tlačítko stop, chapadlo se sepne. IF THEN
tstart
I0.0 tlacitko start
OR
tstop
I0.4 tlacitko stop
SET
chapadlo
O0.0 ventil pro sep. chapadla
Tedy: jestliže stiskneme tlačítko start nebo tlačítko stop, chapadlo se sepne.
11 Použití časovače (timer) Každý časovač obsazuje tři operandy: časovač (T), předvolbu časovače (TP) a aktuální hodnotu času (TW).
15
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
11.1 Předvolba časovače (timer preselection - TP) je bajt, ve kterém je uloženo číslo, reprezentující předvolbu času v setinách sekundy. Například, je-li v TP1 uložena hodnota 100, je předvolen na 1 sekundu. Rozmezí hodnot v předvolbě je 0 až 65.535, tj. 655,35 s.
11.2 Aktuální hodnota časovače (timer word – TW) je bajt, ve kterém je momentální hodnota časovače; je tedy neustále v pohybu nebo je v něm nula. Například, je-li v TW0 hodnota 50, zbývá do konce běžícího času 0,5 s.
11.3 Časovač (timer – T) je bit, který vše uvádí do pohybu. Nabývá tedy pouze hodnot 0 a 1, podobně jako například binární výstup. Po jeho zapnutí se předvolba času přepíše do aktuální hodnoty a začne se odečítat. Po jejím odečtení do nuly se časovač sám vypne. Příklad: STEP start IF
tstart
I0.0 tlacitko start
SET
cas
T1 casovac pro sep. chapadla
IF
N
cas
T1 casovac pro sep. chapadla
THEN
SET
chapadlo
O0.0 ventil pro sep. chapadla
chapad_1
I0.1 chapadlo uchopilo
SET
rameno
O0.1 rameno podavace
RESET
k_stop
O0.2 kontrolka stop (cervena)
THEN STEP ceka
STEP pokrac IF THEN
16
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Tedy po stisku tlačítka start spustíme časovač. V dalším kroku si počkáme, až se sám vypne (= dojde do nuly) a zapneme chapadlo. Těchto časovačů má FEC 256, tedy od T0, TP0 a TW0 až po T255, TP255 a TW255. Praktická poznámka: Dejte si též pozor na následující problém: v jednom kroku programu odstartujeme tři děje a tři časovače. V dalším kroku počkáme, až se všechny tři splní, a teprve potom program pustíme dále. Zláká vás určitě jednoduché řešení: IF
NOP
THEN
SET
cas_bub
T2 casovac pro motor bubnu
SET
cas_zav
T3 casovac pro zavoru
SET
cas_klap
T4 casovac pro klapku
SET
buben
O0.4 motor bubnu
SET
zavora
O0.5 ventil zavory
SET
klapka
O0.6 ventil klapky
IF
N
cas_bub
T2 casovac pro motor bubnu
THEN
RESET
buben
O0.4 motor bubnu
IF
N
cas_zav
T3 casovac pro zavoru
THEN
RESET
zavora
O0.5 ventil zavory
IF
N
cas_klap
T4 casovac pro klapku
THEN
RESET
klapka
O0.6 ventil klapky
IF
N
cas_bub
T2 casovac pro motor bubnu
AND N
cas_zav
T3 casovac pro zavoru
AND N
cas_klap
T4 casovac pro klapku
STEP konec
THEN
NOP
STEP dale . 17
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
které je ale riskantní. Proč? Při průchodu tímto krokem může dojít z důvodu časového rizika k problému, neboť při dotazech na začátku kroku na jednotlivé časy pro vypínání výstupů ještě může některý z časovačů být aktivní (takže jeho výstup se nevypne), pak časovač doběhne a vypne se, program na konci kroku to zjistí a pokračuje dále, aniž by byly všechny děje ze začátku kroku ukončeny. A programátor nechápe, co se děje, vždyť je to vlastně správně! Správnější a spolehlivý způsob je využít možnost, kterou FST skýtá, a tou je dotaz na výstupy: IF
NOP
THEN
SET
cas_bub
T2 casovac pro motor bubnu
SET
cas_zav
T3 casovac pro zavoru
SET
cas_klap
T4 casovac pro klapku
SET
buben
O0.4 motor bubnu
SET
zavora
O0.5 ventil zavory
SET
klapka
O0.6 ventil klapky
IF
N
cas_bub
T2 casovac pro motor bubnu
THEN
RESET
buben
O0.4 motor bubnu
IF
N
cas_zav
T3 casovac pro zavoru
THEN
RESET
zavora
O0.5 ventil zavory
IF
N
cas_klap
T4 casovac pro klapku
THEN
RESET
klapka
O0.6 ventil klapky
IF
N
buben
O0.4 motor bubnu
AND N
zavora
O0.5 ventil zavory
AND N
klapka
O0.6 ventil klapky
STEP konec
THEN STEP dale . .
18
NOP
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
V tomto případě se totiž ptáme skutečně na proběhnutý děj, nikoliv jen na podmínky k němu vedoucí. Předvolbu časovače můžeme naplnit přímo z FST (například v režimu online), FEC si ji bude u prvních 128 časovačů (tedy TP0 až TP127) pamatovat i po vypnutí napájení, jsou totiž retentivní. Jiná možnost je plnit předvolby přímo v našem programu:
12 Příkaz LOAD TO (nahraj do) Tímto příkazem můžeme obsadit celý bajt, tedy nahrát do něj nějaké číslo nebo jiný bajt. Lze ho použít třeba pro plnění registrů, předvoleb časovačů, předvoleb čítačů, vypínání celé osmice výstupů najednou, atd. Ukážeme si příklad, jak naplnit předvolbu čítače: STEP start IF THEN
tstart
I0.0 tlacitko start
LOAD
V100
TO
pcas
TP1 predv. casu pro chapadlo
SET
cas
T1 casovac pro sep. chapadla
IF
N
cas
T1 casovac pro sep. chapadla
THEN
SET
chapadlo
O0.0 ventil pro sep. chapadla
STEP ceka
Tímto způsobem nahrajeme hodnotu V100 (value = hodnota) do předvolby časovače TP1. Je tedy patrné, že lze stejný časovač v různých místech programu použít pro jiná zpoždění. Můžeme se též v případě nutnosti ptát na velikost aktuální hodnoty časovače. Z důvodu rizika dotazu na přesnou hodnotu je lepší použít nerovnost. 19
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
13 Porovnávání čísel (<, >, =), použití závorek STEP start IF THEN
tstart
I0.0 tlacitko start
LOAD
V100
TO
pcas
TP1 predv. casu pro chapadlo
SET
cas
T1 casovac pro sep. chapadla
slovcas
TW1 aktualni hod. cas.chap
STEP ceka IF THEN
( <
V50
SET
chapadlo
) O0.0 ventil pro sep. chapadla
Krok ceka znamená: až bude aktuální hodnota času 1 menší než 50 setin sekundy, zapni chapadlo. Všimněte si použití závorek. Závorky lze používat pro logické vazby až do 7 úrovní (lze tedy otevřít až 7 závorek po sobě).
14 Použití čítače (counter) Práce s čítači je velmi podobná práci s časovači. Každý čítač obsazuje také tři operandy: čítač (C), předvolbu čítače (CP) a aktuální hodnotu čítače (CW).
20
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
14.1 Předvolba čítače (counter preselection - CP) je bajt, ve kterém je uloženo číslo, reprezentující předvolbu čítače. Rozmezí hodnot v předvolbě je 0 až 65.535. 14.2 Aktuální hodnota čítače (counter word – CW) je bajt, ve kterém je momentální hodnota čítače. Příklad: STEP start IF THEN
NOP LOAD
V20
TO
pcitac
CP0 predv. citace
SET
citac
C0 citac
IF
N
citac
C0 citac
THEN
JMP TO
konec
STEP cyklus
IF
citac
C0 citac
AND
chapad_0
I0.2 chapadlo povolilo
chapadlo
O0.0 ventil pro sep. chapadla
chapad_1
I0.1 chapadlo uchopilo
RESET
chapadlo
O0.0 ventil pro sep. chapadla
INC
citac
C0 citac
JMP TO
cyklus
THEN
SET
STEP pokrac IF THEN
STEP konec . . . 21
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Tedy nejprve se naplní předvolba, pak se časovač inicializuje (SET citac) a probíhá cyklus. Po uplynutí 20 cyklů se program přesune na krok konec. Příkaz INC zvyšuje obsah čítače o jedničku, příkaz DEC ho snižuje (při počítání od předvolené hodnoty směrem dolů).
15 Registry Registry jsou bajty, které obsahují nějaké číslo. Těchto registrů je ve FEC 256, tedy od R0 do R255, R0 až R127 jsou retentivní, jejich obsah zůstává zachován i po vypnutí FEC. Do registru lze uložit číslo od 0 do 65.535, toto číslo může reprezentovat například počet vyrobených kusů, apod. Ukážeme si jeho použití třeba pro hodnotu, kterou chceme nahrát do předvolby časovače: STEP start IF THEN
tstart
I0.0 tlacitko start
LOAD
hodnota
R10 zadani predv.cas.chap.
TO
pcas
TP1 predv. casu pro chapadlo
SET
cas
T1 casovac pro sep. chapadla
slovcas
TW1 akt. hod. cas. chapadla
STEP ceka IF THEN
( <
V50
SET
chapadlo
) O0.0 ventil pro sep. chapadla
16 Příznaky Příznaky (flags – F) jsou jednobitové paměti, které tedy mohou nabývat hodnoty logická 1 nebo logická 0. Vždy 16 příznaků tvoří slovo příznaků
22
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
(FW), tedy jeden bajt (v případě příznaků mluvíme o 16-ti bitovém bajtu – viz kapitola Binární soustava). Podobně jako u výstupů můžeme jednotlivé příznaky jak zapínat (SET), tak vypínat (RESET), můžeme se také na ně ptát: IF THEN
F0.0 SET
O0.0
znamená, že pokud je zapnut příznak F0.0, zapne se výstup O0.0. Příkaz: IF
N
F0.0
THEN
SET
O0.1
zase znamená, že pokud není zapnut příznak F0.0, zapne se výstup O0.1. I o příznacích platí, že lze pracovat s bajtem, tedy používat decimální vyjádření dvojkových čísel (viz kapitola Binární soustava). FEC obsahuje celkem 256 slov příznaků, tedy FW0 až FW255, z nichž první polovina (FW0 až FW127) je retentivní, takže jejich stav zůstává uchován i po vypnutí FEC.
16.1 K čemu se hodí příznaky? Lze je použít k jednoduchému „značkování“ chodu programu (kudy prošel) nebo třeba k předávání informace mezi jednotlivými částmi programu nebo programů. Viz například kapitola Paralelní chod programů.
23
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
17 Paralelní chod programů (multitasking) V systému FEC může být nahráno až 64 programů, které všechny mohou běžet současně. Po spuštění FEC se rozeběhne program číslo 0, který pak může pouštět ostatní (ty se navzájem mohou také spouštět nebo zastavovat). Stačí k tomu například příkaz: SET
P3
který znamená spusť program číslo 3. V praxi to znamená, že si můžeme naši úlohu obvykle rozdělit do několika dílčích, které se snadno naprogramují a odladí, a pak je pustíme najednou.
17.1 Příklad paralelního chodu programů Dejme poněkud zjednodušený, ale typický příklad: otočný stůl, který bude plnit řekněme nějaké kelímky: každá pozice stolu je jednoduchou úlohou (přisunutí kelímku, dávka náplně, víčko, razítko, vysunutí kelímku), takže pro každou použijeme jeden program. Celou úlohu bude řídit také jeden program, říkejme mu organizační. Jeho úkolem bude také otáčet stolem. Jak bude vypadat spolupráce mezi programy? Jedna z možností je použít příznaky, které nazveme startx a statusx Program pro každou pozici může mít tuto strukturu: STEP zacatek IF
N
start3
THEN
JMP TO
zacatek
OTHRW
SET
status3
24
F0.3 start podprogramu 3 F1.3 status podpgm. 3 – bezi
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
STEP start zde se odehraje technologie až do fáze, kdy lze otočit stolem (už nic nepřekáží, ale činnost pracoviště ještě úplně skončit nemusela) . . RESET
status3
F1.3 status podpgm. 3 – bezi
STEP xxx zde se odehraje zbytek technologie, aby bylo pracoviště znovu připraveno ke startu nového cyklu . . STEP konec IF
NOP RESET
start3
JMP TO
zacatek
F0.3 start podprogramu 3
Hlavní, organizační program bude vypadat následovně: STEP init IF THEN
NOP RESET
start1
F0.1 start podprogramu 1
RESET
start2
F0.2 start podprogramu 2
RESET
start3
F0.3 start podprogramu 3
RESET
status1
F1.1 status podpgm. 1 – bezi
RESET
status2
F1.2 status podpgm. 2 – bezi
RESET
status3
F1.3 status podpgm. 3 – bezi
SET
kelimky
P1 prisun kelimku
. .
. .
25
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
SET
plneni
P2 plneni materialem
SET
vicka
P3 vicka
. . STEP cyklus IF
NOP
THEN
SET
start1
F0.1 start podprogramu 1
SET
start2
F0.2 start podprogramu 2
SET
start3
F0.3 start podprogramu 3
status1
F1.1 status podpgm. 1 – bezi
AND
status2
F1.2 status podpgm. 2 – bezi
AND
status3
F1.3 status podpgm. 3 – bezi
. . STEP bezi IF
. . THEN
NOP
STEP stul IF
N
status1
F1.1 status podpgm. 1 – bezi
AND N
status2
F1.2 status podpgm. 2 – bezi
AND N
status3
F1.3 status podpgm. 3 – bezi
stul
O0.5 motor stolu
. . THEN
SET
. . následuje zastavení stolu apod. . . . 26
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
STEP znovu? IF
N
start1
F0.1 start podprogramu 1
AND N
start2
F0.2 start podprogramu 2
AND N
start3
F0.3 start podprogramu 3
. . THEN
JMP TO
cyklus
Teď komentář k tomu všemu: program pro pozici na otočném stole (říkejme mu podprogram, i když z pohledu systému FEC se jedná o stejně plnohodnotný program jako je hlavní, organizační) má na začátku krok s názvem zacatek, v něm čeká na zapnutí příznaku start3. Hlavní program na začátku cyklu (krok cyklus) zapne starty všech pozic (tedy také SET start3), takže podprogram se rozjede a odpoví zapnutím příznaku status3, podobně jako i ostatní podprogramy. Hlavní program přejede krok bezi (kontrola odpovědí všech odstartovaných podprogramů) a poté čeká, až bude moci otočit stolem (krok stul). Dočká se v okamžiku, kdy všechny podprogramy vypnou svoje statuty (v kroku, kde už nepřekáží otočení stolu, příkaz RESET status3) a otočí stolem. Během otáčení stolu se dokončí činnost všech podprogramů až do konce tak, aby mohly být znovu odstartovány. Najevo to dají vypnutím startux (tedy v naší ukázce v kroku konec dojde k RESET start3). Hlavní program poté, co zastavil stůl, zkontroluje (eventuelně i počká), až budou všechny činnosti dokončeny, a vrátí se na start nového cyklu (krok znovu?, skok JMP TO cyklus). Tato ukázka si neklade za cíl radit vám při tvorbě vaší úlohy, je to jen příklad, který by vám mohl pomoci při promýšlení toho, jak lze využít paralelní chod programů a komunikaci mezi nimi prostřednictvím příznaků. Samozřejmě, že podobnou funkci mohou mít i například registry, jejichž obsah je navzájem přepisován a testován oběma (nebo všemi) komunikujícími programy.
27
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
18 Podprogramy Ve FST můžeme používat též tzv. podprogramy. Jejich tvorba a struktura je shodná s programy, základní rozdíl je v tom, že podprogram už nemůže spouštět další podprogram. Při zakládání programu v editoru STL stačí uvést typ B (z německého Baustein) namísto P a rázem tvoříme podprogram. Takových podprogramů může být celkem 100 (od 0 do 99). Podprogram stačí ukončit příkazem PSE, který znamená konec podprogramu:
IF …… THEN … PSE Program, ve kterém chceme tento podprogram, řekněme třeba hned ten první (s označením B00) zavolat, bude vypadat například takto:
IF….. THEN
CMP0
Podprogram takto spuštěný se rozeběhne, po dojetí na výše uvedený příkaz PSE se zastaví a předá štafetu opět programu, který ho zavolal. Tento program čeká na toto „předání štafety“, aby mohl pokračovat.
28
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
19 Binární soustava Pracujeme-li s výrazy bit a bajt, bude dobré vysvětlit, co se tím míní. Představme si vláček s vagónky. Nultý poveze číslo 1 (nebo-li 20), první poveze 2 (21), druhý poveze 4 (22) a každý další vždy dvojnásobek toho, co předchozí. č.vagónku
7
6
5
4
3
2
1
0
kolik veze jeden
128
64
32
16
8
4
2
1
27
26
25
24
23
22
21
20
každý
tj.
Celý vlak veze tolik, kolik je na jednotlivých vagóncích, tj. maximálně 255. Celý vlak je jeden bajt, který se skládá z osmi bitů (vagónků). A teď si představme, že vlak je slovo výstupů a každý vagónek jeden jednotlivý výstup. Výstup Kolik znamená
O0.7
O0.6
O0.5
O0.4
O0.3
O0.2
O0.1
O0.0
128
64
32
16
8
4
2
1
27
26
25
24
23
22
21
20
jeden každý
tj.
Takže zapneme-li pouze výstup O0.0 a všechny ostatní jsou vypnuty, bude ve slově výstupů OW0 číslo 1. Zapneme-li ještě O0.4, bude ve slově výstupů OW0 číslo 17: Výstup Kolik znamená
O0.7
O0.6
O0.5
O0.4
O0.3
O0.2
O0.1
O0.0
128
64
32
16
8
4
2
1
27
26
25
24
23
22
21
20
jeden každý
tj. Součet (obsah bajtu) je
vypnut vypnut vypnut
16
vypnut vypnut vypnut
1
17
29
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Znamená to tedy, že zapnout výstupy O0.4 a O0.0 a vypnout všechny ostatní O0.x lze příkazem: LOAD
V17
TO
OW0
nebo-li: nahraj číslo 17 do slova výstupů OW0. Naprosto shodně vypadá situace u vstupů. V následující tabulce je například situace, kdy je signál na vstupech I0.3, I0.5 a I0.7. Obsah vstupního slova IW0 je v tomto případě tedy 168: Vstup
I0.7
I0.6
I0.5
I0.4
I0.3
I0.2
I0.1
I0.0
Kolik znamená
128
64
32
16
8
4
2
1
27
26
25
24
23
22
21
20
128
bez
32
bez
8
bez
bez
bez
signálu
signálu
signálu
jeden každý
tj. Součet (obsah bajtu) je 168
signálu
signálu
Stejným způsobem lze pracovat i s ostatními jednobitovými operandy, například příznaky. V jejich případě mluvíme o tzv. 16-ti bitovém bajtu, tabulka bude mít tedy následující podobu (například pro FW13): Příznak
F13.15
F13.14
F13.13
F13.12
F13.11
F13.10
F13.9
F13.8
Kolik znamená
32768
16384
8192
4096
2048
1024
512
256
215
214
213
212
211
210
29
28
jeden každý
Tj. Příznak
Kolik znamená
F13.7
F13.6
F13.5
F13.4
F13.3
F13.2
F13.1
F13.0
128
64
32
16
8
4
2
1
27
26
25
24
23
22
21
20
jeden každý
tj.
30
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
20 Jak zadávat operandy? Na závěr ještě jedna poznámka k zadávání operandů v programu FST. Jakmile napíšete nějaký výraz, který program dosud nezná, považuje ho za symbolický operand (tj. váš název nějakého operandu systému) a vyzve vás k doplnění ostatních údajů, absolutního operandu a komentáře. Pokud se vám povede napsat absolutní název operandu (například I0.0), jste vyzváni k doplnění symbolického názvu a komentáře. Jediný výraz z těchto tří, který je povinný, je absolutní název operandu. Pokud ale chceme využít možností, které nám program nabízí, měli bychom začít oním symbolickým operandem například tstart, po výzvě doplnit absolutní operand – I0.0 (vstup I0.0) a komentář – I0.0 tlacitko start. Výzva po stisku F1 zmizí a vše se uloží do seznamu operandů (allocation list), ve kterém můžeme přirozeně editovat. Editace je možná například přímo při programování po stisku F7 z hlavního menu a pak volby edit allocation list. Právě v tomto místě můžeme například elegantně změnit přiřazení vstupů – pokud všude používáme výraz tstart a pak se rozhodneme tlačítko připojit na jiný vstup (nebo ho tam někdo připojil za nás), stačí v této tabulce přepsat (po stisku F2 – změna) přiřazení, tj. místo I0.0 například I0.7. Rázem se ve všech programech vše změní, aniž bychom museli hledat, kde všude se onen původní vstup I0.0 vyskytuje.
21 TCP/IP S rozvojem moderních technologií se ukázalo jako velice výhodné vybavit automaty rozhraním pro komunikaci pomocí protokolu TCP/IP. Automat vybavený tímto rozhraním může sdílet informace nejen s mnoha dalšími automaty vybavenými tímto rozhraním, ale i jinými zařízeními vybavenými tímto rozhraním. V dnešní době se jedná o např. o některé typy displejů, ale i o osobní počítače a servery. TCP/IP je protokol univerzální, takže nejsme při
31
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
komunikaci omezeni vzdáleností, ale je možné v případě potřeby komunikovat i pomocí Internetu třeba z jednoho kontinentu na druhý. Nejprve je potřeba vložit do projektu TCP/IP driver. To se provede v Driver Configuration, zvolí se Insert Driver a vybere se TCP/IP driver. Objeví se následující okno, kde se nastaví některé důležité údaje:
Pro správnou funkci všech jednotek v síti, je nutné nastavit pouze hodnotu IP address. Tato adresa se skládá ze čtyř číslic od 0 do 999 a každý počítač nebo automat musí mít jiné číslo. V našem případě má 192.168.2.44 jiný má třeba 192.168.2.45. Nyní klepneme na tlačítko OK a máme nainstalován TCP/IP driver a můžeme využívat výhod počítačové sítě. Nyní si předvedeme jak odeslat informace do jiného automatu a vyžádat si informace z jiného automatu.
32
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Budeme potřebovat následující podprogramy a tak je vložíme do projektu pod uvedená čísla (viz. tabulka). Pravým tlačítkem myši klepneme ve stromu projektu na položku CFMs a zvolíme Import: Název IP_TABLE EASY_S EASY_R
číslo CFM 0 CFM 1 CFM 2
popis Vytvoří tabulku IP adres Odešle blok operandů do jiného automatu Vyžádá si blok operandů z jiného automatu
A nyní si předvedeme jak jednotlivé příkazy použít. Protože ve FST nepracujeme přímo s IP adresami, potřebujeme napřed do tzv. Tabulky IP adres zavést IP adresu automatu, s nímž budeme komunikovat. Budeme předpokládat, že jeho adresa je 192.168.2.45, je zapnutý a má nainstalován TCP/IP driver a je připojen do sítě. IF ... THEN
CMP 0 WITH
V1
-chceme zapsat do tabulky
WITH
V192
-1. část IP adresy
WITH
V168
-2. část IP adresy
WITH
V2
-3. část IP adresy
WITH
V45
-4. část IP adresy
33
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Tak nyní máme uloženu IP adresu a můžeme vyslat blok operandů do vzdáleného automatu: IF ... THEN
CMP 1 WITH
V1
- Index v tabulce IP adres
WITH
V1
- Druh operandu
WITH
V10
-Počet operandů (max. 256)
WITH
V33
-Číslo 1. operandu (zde FW33)
WITH
V44
-Číslo kde se uloží ve vzdáleném aut.
WITH
V11
-do FW11 uloží stav příp. chybu
Tento příkaz odešle na IP adresu s indexem 1 deset flagwordů od čísla FW33 pro FW42. Ve vzdáleném automatu se uloží do flagwordů od indexu FW44 dále. Výsledek operace uloží do FW11. Další možnosti parametrů: Druh operandu: - 1 = flagword, 2 = vstupy, 3 = výstupy, 4 = registry, 11 = Strings
34
FST FEC krátký úvod do programování v jazyce STL, verze 1-3/98
Poslední podstatnou funkcí je vyžádání bloku operandů ze vzdáleného automatu: IF ... THEN
CMP 1 WITH
V1
- Index v tabulce IP adres
WITH
V1
- Druh operandu
WITH
V10
-Počet operandů (max. 256)
WITH
V33
-Číslo 1. operandu (zde FW33)
WITH
V44
-Číslo operadu vzdáleného aut.
WITH
V11
-do FW11 uloží stav příp. chybu
Tento příkaz si vyžádá z IP adresy s indexem 1 deset flagwordů od FW44 po FW53 a uloží je v tomto automatu od čísla FW33 po FW42. Výsledek operace uloží do FW11. Další možnosti parametrů: Druh operandu: - 1 = flagword, 2 = vstupy, 3 = výstupy, 4 = registry, 11 = Strings
FESTO-CZ, 6/01
35