FST FEC
krátký úvod do programování v jazyce STL
OBSAH:
1 PŘEDMLUVA 1
2 VSTUPY (INPUTS) 1
2.1 Co lze se vstupy? 3
3 VÝSTUPY (OUTPUTS) 4
3.1 Co lze s výstupy? 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? 23
17 PARALELNÍ CHOD PROGRAMŮ (MULTITASKING) 24
17.1 Příklad paralelního chodu programů 24
18 PODPROGRAMY 28
19 BINÁRNÍ SOUSTAVA 29
20 JAK ZADÁVAT OPERANDY? 31
21 TCP/IP 31
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
1
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í:
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
2
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).
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
3
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
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
4
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
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
5
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.0zapne výstup O0.0,
nebo vypínat:
RESET O0.0vypne výstup O0.0.
Pokud potřebujeme, můžeme se na ně ovšem také ptát:
IF O0.0je dotaz na zapnutý výstup O0.0,
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
6
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 V0TO OW0znamená: 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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
7
Přeskočme několik kapitol, ukažme si příklad:
STEP start
IF tnastav I0.5 tlacitko nastaveni casuTHEN JMP TO nastavIF tstart I0.0 tlacitko start
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF chapad_1 I0.1 chapadlo uchopilo
THEN SET rameno O0.1 rameno podavace
.
.
.
STEP nastav
IF tnastav I0.5 tlacitko nastaveni casu
THEN LOAD trimr IW2 slovo trimruTO pcas TP1 predv. casu pro chap.
IF N tnastav I0.5 tlacitko nastaveni casu
THEN JMP TO start
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:
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
8
STEP nastav
IF tnastav I0.5 tlacitko nastaveni casu
THEN LOAD trimr IW2 slovo trimru* V10TO pcas TP1 predv. casu pro chap.
IF N tnastav I0.5 tlacitko nastaveni casu
THEN JMP TO start
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 bezOTHRW je povinná.
A hned jeden příklad:
IF I0.0 zde je podmínka
THEN SET 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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
9
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 tstartTHEN SET chapadloOTHRW 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:
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
10
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ů).
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
11
Příklad:
STEP start
IF tstart I0.0 tlacitko start
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF chapad_1 I0.1 chapadlo uchopilo
THEN SET rameno O0.1 rameno podavace
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 tstart I0.0 tlacitko start
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF chapad_1 I0.1 chapadlo uchopilo
THEN SET rameno O0.1 rameno podavace
RESET k_stop O0.2 kontrolka stop (cervena)
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
12
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 tstart I0.0 tlacitko start
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF chapad_1 I0.1 chapadlo uchopilo
THEN SET rameno O0.1 rameno podavace
RESET k_stop O0.2 kontrolka stop (cervena)
JMP TO konec
.
.
.
.
STEP konec
IF ramen_1 I0.2 rameno se otocilo
THEN RESET chapadlo O0.0 ventil pro sep. chapadla
.
.
což znamená, že po uchopení a otočení ramene se chapadlo opět uvolní.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
13
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 I0.3 tlacitko nouzovy stopTHEN JMP TO nouz_stIF tstart I0.0 tlacitko start
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF N tnouzst I0.3 tlacitko nouzovy stopTHEN JMP TO nouz_stIF chapad_1 I0.1 chapadlo uchopilo
THEN SET rameno O0.1 rameno podavace
RESET k_stop O0.2 kontrolka stop (cervena)
JMP TO konec
.
.
.
.
STEP konec
IF N tnouzst I0.3 tlacitko nouzovy stopTHEN JMP TO nouz_stIF ramen_1 I0.2 rameno se otocilo
THEN RESET chapadlo O0.0 ventil pro sep. chapadla
.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
14
.
.
.
STEP nouz_st
IF NOPTHEN 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 ramen_1 I0.2 rameno se otocilo
THEN RESET chapadlo O0.0 ventil pro sep. chapadla
OTHRW 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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
15
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 tstart I0.0 tlacitko start
AND N tstop I0.4 tlacitko stop
THEN 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 tstart I0.0 tlacitko start
OR tstop I0.4 tlacitko stop
THEN 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).
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
16
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
THEN SET cas T1 casovac pro sep. chapadla
STEP ceka
IF N cas T1 casovac pro sep. chapadla
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF chapad_1 I0.1 chapadlo uchopilo
THEN SET rameno O0.1 rameno podavace
RESET k_stop O0.2 kontrolka stop (cervena)
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
17
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
STEP konec
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
THEN NOP
STEP dale
.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
18
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
STEP konec
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
THEN NOP
STEP dale
.
.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
19
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 on-
line), 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 tstart I0.0 tlacitko start
THEN LOAD V100
TO pcas TP1 predv. casu pro chapadlo
SET cas T1 casovac pro sep. chapadla
STEP ceka
IF N cas T1 casovac pro sep. chapadla
THEN SET chapadlo O0.0 ventil pro sep. chapadla
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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
20
13 Porovnávání čísel (<, >, =), použití závorek
STEP start
IF tstart I0.0 tlacitko start
THEN LOAD V100
TO pcas TP1 predv. casu pro chapadlo
SET cas T1 casovac pro sep. chapadla
STEP ceka
IF ( slovcas TW1 aktualni hod. cas.chap
< V50 )THEN 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).
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
21
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 NOP
THEN LOAD V20
TO pcitac CP0 predv. citace
SET citac C0 citac
STEP cyklus
IF N citac C0 citac
THEN JMP TO konec
IF citac C0 citac
AND chapad_0 I0.2 chapadlo povolilo
THEN SET chapadlo O0.0 ventil pro sep. chapadla
STEP pokrac
IF chapad_1 I0.1 chapadlo uchopilo
THEN RESET chapadlo O0.0 ventil pro sep. chapadla
INC citac C0 citac
JMP TO cyklus
STEP konec
.
.
.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
22
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 tstart I0.0 tlacitko start
THEN LOAD hodnota R10 zadani predv.cas.chap.
TO pcas TP1 predv. casu pro chapadlo
SET cas T1 casovac pro sep. chapadla
STEP ceka
IF ( slovcas TW1 akt. hod. cas. chapadla
< V50 )
THEN 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ů
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
23
(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 F0.0
THEN 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ů.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
24
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 F0.3 start podprogramu 3
THEN JMP TO zacatek
OTHRW SET status3 F1.3 status podpgm. 3 – bezi
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
25
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 F0.3 start podprogramu 3
JMP TO zacatek
Hlavní, organizační program bude vypadat následovně:
STEP init
IF NOP
THEN 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
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
26
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
.
.
STEP bezi
IF status1 F1.1 status podpgm. 1 – bezi
AND status2 F1.2 status podpgm. 2 – bezi
AND status3 F1.3 status podpgm. 3 – bezi
.
.
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
.
.
THEN SET stul O0.5 motor stolu
.
.
následuje zastavení stolu apod.
.
.
.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
27
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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
28
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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
29
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 0kolik veze jeden
každý128 64 32 16 8 4 2 1
tj. 27 26 25 24 23 22 21 20
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 O0.7 O0.6 O0.5 O0.4 O0.3 O0.2 O0.1 O0.0Kolik znamená
jeden každý128 64 32 16 8 4 2 1
tj. 27 26 25 24 23 22 21 20
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 O0.7 O0.6 O0.5 O0.4 O0.3 O0.2 O0.1 O0.0Kolik znamená
jeden každý128 64 32 16 8 4 2 1
tj. 27 26 25 24 23 22 21 20
Součet (obsah
bajtu) je 17vypnut vypnut vypnut 16 vypnut vypnut vypnut 1
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
30
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.0Kolik znamená
jeden každý128 64 32 16 8 4 2 1
tj. 27 26 25 24 23 22 21 20
Součet (obsah
bajtu) je 168128 bez
signálu
32 bez
signálu
8 bez
signálu
bez
signálu
bez
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á
jeden každý
32768 16384 8192 4096 2048 1024 512 256
Tj. 215 214 213 212 211 210 29 28
Příznak F13.7 F13.6 F13.5 F13.4 F13.3 F13.2 F13.1 F13.0
Kolik znamená
jeden každý
128 64 32 16 8 4 2 1
tj. 27 26 25 24 23 22 21 20
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
31
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
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
32
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.
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
33
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 číslo popisIP_TABLE CFM 0 Vytvoří tabulku IP adresEASY_S CFM 1 Odešle blok operandů do jiného automatuEASY_R CFM 2 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
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
34
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
FST FECkrátký úvod do programování v jazyce STL, verze 1-3/98
35
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