|
Multitasking
Introducere
Aceasta functie organizeaza sectiunile de program prin utilizarea tehnicilor de programare modulare. Programul din PLC poate sa contina mai multe parti, fiecare parte fiind un program propriu-zis, cu functii diferite.
Avantajele multitasking-ului sunt: o structura arborescenta de programe mai clara si timpi de ciclu mai scurti.
Prin aceasta metoda este mai usor sa programezi diferite moduri de operare ale echipamentului si sa le apelezi oricand sa ruleze in paralel cu program ul principal.
Termeni asociati cu Multitasking
In Multitasking, se pot utiliza mai multe programe in proiect. Acestea pot rula in paralel cu program ul principal, cand sunt apelate si sunt numerotate cu P1, P2, etc.
Pe langa programe, se pot utiliza si module. Acestea sunt in general subrutine. Exista doua tipuri diferite de module:
CFM - Apelare modul functie
CMP - Apelare modul program
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Modul de program Modul functie
(Multitasking) (subrutina) (predefinite de Festo)
CFM - Apelare modul functie
Instructiunea Call Function Module (CFM) este utilizata pentru a cere executia unei rutine de program externe. Modulele functie pot fi considerate ca apelari de functii speciale.
Cand se apeleaza CFM, functia respectiva va fi activata si va rula in paralel cu program ul principal.
Aceste CFM sunt disponibile in programul FST, trebuie cautat in "Help" pentru a gasi modul de editare a CFM.
Pentru inserarea unui modul:
Click dreapta pe CFM in "Project Tree";
Click "Import";
Se deschide o cutie de dialog cu modulele predefinite;
Alege modulul dorit;
Click "OK';
Modulul ales va fi in proiect.
CMP - Apelare modul program
Instructiunea Call Module Program (CMP) este utilizata pentru a cere executia unei rutine de program exterioare. Modulele de program sunt considerate similare cu subrutinele.
Cand se apeleaza CMP, programul principal se opreste si va sta la un pas (STEP) si subprogramul va fi activat. Numai cand subprogramul este executat complet, se va sari inapoi la programul principal in punctul unde l-a parasit.
Apelarea modulelor
Pentru a apela modulele, se adauga "THEN CFM x" sau "THEN CMP x" unde "x" este numarul modulului.
De exemplu, creaza un program de palpaire "Blinking". Acesta poate fi fie CFM sau CMP.
THEN CFM 0 'Modul Blink
LOAD FU32
TO FW10
JMP TO Blink
Se poate apoi utiliza FW10 (cuvant de flag-uri 10) in program.
THEN SET P2 'Program de palpaire
STEP Start
IF FBlink1 '0.25s palpairi
THEN SET Lamp 'Lampa
OTHRW RESET Lamp 'Lampa
IF Start 'Buton Start
THEN SET P1 'Program Secvential
SET Lamp 'Lampa
sau
THEN SET P2 'Program de palpaire
STEP Start
THEN LOAD FBlink1 '0.25s palpairi
TO Lamp 'Lampa
IF Start 'Buton Start
THEN SET P1 'Program Secvential
SET Lamp 'Lampa
Apelarea programelor
Programul principal trebuie sa fie "Program 0", toate celelalte subprograme vor avea numele "Program 1, Program 2, etc".
In programul principal se pot apela mai multe module de program, prin setarea numelui programului, de exemplu SET P1, SET P2, etc. si cand vrei sa opresti programul, se reseteaza acesta RESET P1, RESET P2, etc.
Cand se apeleaza un subprogram, acesta ruleaza in paralel cu program ul principal.
Utilizarea Flag-urilor
Pana aici, in programe s-au utilizat numai intrarile si iesirile din FEC. Flag-urile sunt asa numitele memorii sau marcaje sau relee interne, etc.
Flag-urile sunt esentiale cand lucram cu multitask-ing si se doreste legarea mai multor programe diferite. Operandul absolut pentru flag este atribuit diferitelor echipamente pe care le utilizam.
De exemplu:
F0.0 . F0.15 pana la F999.0 . F999.15
Ar trebui utilizati operanzi simbolici care sa fie corelati cu sarcinile de comanda. De exemplu: "Start_Flag", "Stop_Flag", etc.
Utilizarea modulului de palpaire (Blink)
THEN CFM 0 'Modul Blink
LOAD FU32
TO FW10 'Cuvant de flag pentru moduri de iluminare
Intermitenta (palpaire)
JMP TO Blink
|
THEN SET P2 'program palpaire
STEP Start
IF FBlink2 'palpaire 0.5s
THEN SET oStart 'Lampa Start
OTHRW RESET oStart 'Lampa Start
IF iStart 'Buton Start
AND B1 'Ridicare cilindru
THEN SET P1 'Program Secvential
SET oStart 'Lampa Start
Cerinte pentru operatii de comanda initiale
Lista de alocare
|
Structura proiectului si a programelor
IF iStart 'Buton start
AND B1 'Cilindrul 1A retras
AND B3 'Cilindrul 2A retras
THEN SET P1 'Program secvential
STEP Stop
IF iStop 'ButonStop
THEN SET FCStop 'Ciclu Stop
IF
THEN RESET FCStop 'Ciclu Stop
JMP TO Start
IF B1 'Cilindru 1A retras
THEN SET Y1 'Solenoid pentru cilindrul 1A
STEP BPlus
IF B2 'Cilindru 1A extins
THEN SET Y2 'Solenoid pentru cilindrul 2A
STEP BMinus
IF B4 'Cilindru 2A extins
THEN RESET Y2 'Solenoid pentru cilindrul 2A
STEP AMinus
IF B3 'Cilindru 2A retras
THEN RESET Y1 'Solenoid pentru cilindrul 1A
STEP Check
IF FCStop 'Stop ciclu
THEN JMP TO End
IF AutoMan 'Comutator Automatic/Manual
THEN JMP TO Aplus
OTHRW NOP
STEP End
THEN NOP
Cerinte de operatii suplimentare de comanda
Lista de alocare
|
|
|
| ||
|
Structura proiectului si programelor
STEP Initial
THEN SET P2 'Program de palpaire
STEP Start
IF iEStop 'Buton de Emergency Stop
THEN JMP TO Emergency
IF FBlink1 'Palpaire 0.25s
THEN SET oStart 'Lampa Start
OTHRW RESET oStart 'Lampa Start
IF iStart 'Buton Start
AND B1 'Cilindrul 1A retras
AND B3 'Cilindrul 2A retras
THEN SET P1 'Program Secvential
RESET oStart 'Lampa Start
STEP Stop
F iEStop 'Buton Emergency Stop
THEN JMP TO Emergency
IF FBlink2 'Palpaire 0.5s
THEN SET oStop 'Lampa Stop
OTHRW RESET oStop 'Lampa Stop
IF iStop 'Buton Stop
THEN SET FCStop 'Stop Ciclu
IF N P1 'Program Secvential
THEN RESET FCStop 'Stop Ciclu
RESET oStop 'Lampa Stop
JMP TO Start
STEP Emergency
IF NOP
THEN RESET Y1 'Solenoid pentru cilindru 1A
RESET Y2 'Solenoid pentru cilindru 2A
RESET P1 'Program Secvential
RESET oStart 'Lampa Start
RESET oStop 'Lampa Stop
IF N iEStop 'Buton Emergency Stop
THEN NOP
STEP Reset
IF iEStop 'Buton Emergency Stop
THEN JMP TO Emergency
IF FBlink3 'Palpaire 1s
THEN SET oReset 'Lampa Reset
OTHRW RESET oReset 'Lampa Reset
IF iReset 'Buton Reset
THEN RESET oReset 'Lampa Reset
JMP TO Start
THEN CFM 0 'Modul de palpaire
LOAD FU32
TO FW10
JMP TO Blink