Průvodní zpráva k projektu

Transkript

Průvodní zpráva k projektu
SPŠ a VOŠ Písek, Karla Čapka 402, 397 01 Písek
Průvodní zpráva k projektu
0369P2005
Implementace informačních technologií
do výuky automatizační techniky
část II
Popis aplikačních programů
autoři: Ing. Miroslav Paul
Ing. Petr Šindelář
Ing. Michal Burger
V Písku dne 30.11.2005
A. Vzorové příklady na programování PLC
Př.1) ( SipvzProkektzktc650Ass)
Tlačítkem Start, které je připojené na vstup X1.0, nastavujte výstupy Y0:0 – Y0.4. Tlačítkem Stop, které je
připojené na vstup X1.1, uvedené výstupy nulujte. Program napište v assembleru.
P0
ld
set
set
set
set
set
ld
res
%x1.0
%y0.0
%y0.1
%y0.2
%y0.3
%y0.4
%x1.1
%y0
; načtení stavu tlačítka Start
; pokud Start = 1 ═> nastaví se výstup y0.0
;
;
;
;
; načtení stavu tlačítka Stop
; pokud Stop = 1 ═> vynulují se výstupy y0.0 – y0.7 ( y0)
E0
Př.2) ( SipvzProkektzktc650St)
Tlačítkem Start, které je připojené na vstup X1.0, nastavujte výstupy Y0:0 – Y0.5. Tlačítkem Stop, které je
připojené na vstup X1.1, uvedené výstupy nulujte. Program napište v jazyku Strukturovaný text.
(* Program ukazuje použití funkčního bloku RS ze standardní knihovny funkčních bloků Fb. Fb RS se chová
jako klopný obvod typu RS s prioritou vstupu RESET. Vstupy programovatelného automatu %X (alias),
na které jsou připojena tlačítka Start a Stop se ovládá logická hodnota na výstupech %Y, ke kterým jsou
připojeny LED1 - LED6. Funkci je možné v simulaci ověřit v "POU inspektoru" nebo pomocí Grapf
Makeru nebo přímo reálném provozu na PLC *)
PROGRAM nastaveni
VAR_INPUT
END_VAR
VAR
LD1 : RS;
LD2 : RS;
LD3 : RS;
LD4 : RS;
LD5 : RS;
LD6 : RS;
END_VAR
VAR_OUTPUT
END_VAR
LD1(S := Start, R1 := Stop, Q1 => LED1);
LD2(S := Start, R1 := Stop, Q1 => LED2);
LD3(S := Start, R1 := Stop, Q1 => LED3);
LD4(S := Start, R1 := Stop, Q1 => LED4);
LD5(S := Start, R1 := Stop, Q1 => LED5);
LD6(S := Start, R1 := Stop, Q1 => LED6);
END_PROGRAM
Př.3) ( SipvzProkektFb1)
(* příklad ukazuje definici POU funkční blok a její použití v programu.
1. nejprve je definován funkční blok, pro výpočet obvodu a obsahu obdélníka
2. v programu "hlavní" je definována instance definovaného funkčního boku, která jej používá.
Instancí může být v programu definováno a posléze použito libovolné množství *)
(* definování POU: "funkční blok" *)
FUNCTION_BLOCK fb_vypocet
VAR_INPUT
strana_a : INT;
// deklarace vstupních proměnných
strana_b : INT;
END_VAR
VAR
END_VAR
VAR_OUTPUT
// deklarace výstupních proměnných
obvod_o : INT;
obsah_s : INT;
END_VAR
obvod_o := 2*(strana_a+strana_b); // deklarace těla funkčního bloku
obsah_s := strana_a*strana_b;
END_FUNCTION_BLOCK
(* definování POU: "program" *)
PROGRAM hlavni
VAR_OUTPUT
END_VAR
// deklarace výstupních proměnných POU
VAR_INPUT
aa : INT;
END_VAR
// deklarace vstupních proměnných POU
VAR
inst_fb_vypocet : fb_vypocet;
obvod : INT;
plocha : INT;
END_VAR
// deklarace lokálních proměnných
//deklarace instance funkčního bloku
(* začátek výkonné části POU programu.*)
(* proměnná "inst_fb_vypočet" představuje instanci (použití) deklarovaného funkčního bloku fb_vypocet,
který pro zadané proměnné strana_a, strana_b počítá obvod a obsah obdélníka *)
inst_fb_vypocet( strana_a := aa,strana_b := 13,obvod_o => obvod,obsah_s => plocha);
END_PROGRAM
(* ověřování správné funkce programu je možné provádět pomocí inspektora POU, který se spustí ikonou
"nastavit debuger kontext" nebo "F11" *)
Př.4) ( SipvzProkektCasovac)
Vytvořte program, který bude generovat časové zpoždění při spouštění. Použijte k tomu časovač TON.
(* Program generuje časový interval, který je zadán v časovači TON v parametru "PT", časování se spouští
po přivedení log.1 do parametru IN ze vstupů "X" alias: "bila", "pocitej". Po dosažení nastaveného času
se překlopí výstup Q "cas_out" na log.1, ve které setrvá do přeplnění časovače *)
PROGRAM hlavni
VAR_INPUT
pocitej : BOOL;
bila : BOOL;
END_VAR
VAR
casovac_1 : TON;
cas_out : BOOL;
traktor : BOOL;
END_VAR
//vstup binární karty
//vstup binární karty
//definování standardní POU-Fb: časovač
// definování proměnné pro logický výstup z časovače
// definování proměnné pro řídící proměnnou pro časovač
traktor := pocitej and bila;
//výpočet řídící proměnné z logických vstupů
casovac_1(IN := traktor, PT := T#60s, Q => cas_out);
// použití časovače
(* řídící proměnná se přivádí na vstupní proměnnou Fb "IN", předvolený čas s datovým typem T je
přiveden na vstup"PT", výstup se čte z výstupní proměnné "Q"
*)
END_PROGRAM
Př.5) ( SipvzProkektDopravnik1)
(* Program provádí po stisknutí tlačítka Start postupné spouštění dopravníků v pořadí M3-M2-M1.
Časová prodleva mezi spuštěním jednotlivých dopravníků je nastavena napevno v jednotlivých
časovačích. Po stisknutí tlačítka Stop se provádí postupné zastavení dopravníků v pořadí M1-M2-M3.
Prodleva mezi zastavováním jednotlivých dopravníků je nastavena pevně v jednotlivých časovačích.
Signály Start, Stop, Aut jsou přiváděny na jednotlivé vstupy PLC, výstupní signály Motor1, Motor2 a
Motor3 jsou na výstupech PLC. *)
PROGRAM hlavni
VAR_INPUT
END_VAR
VAR
CasovacStart1 : TON;
CasovacStart2 : TON;
CasovacStart3 : TON;
CasovacStop1 : TON;
CasovacStop2 : TON;
CasovacStop3 : TON;
StartMotoru : BOOL := false;
StopMotoru : BOOL := true;
CasOutStart1 : BOOL;
CasOutStart2 : BOOL;
//definování standardní POU-Fb: časovač
//definování standardní POU-Fb: časovač
//definování standardní POU-Fb: časovač
//definování standardní POU-Fb: časovač
//definování standardní POU-Fb: časovač
//definování standardní POU-Fb: časovač
//spuštěni pohybu dopravníku
//vypnuti pohybu dopravníku
// definování proměnné pro logický výstup z časovače
// definování proměnné pro logický výstup z časovače
CasOutStart3 : BOOL;
CasOutStop1 : BOOL;
CasOutStop2 : BOOL;
CasOutStop3 : BOOL;
CasInStart1 : BOOL;
CasInStart2 : BOOL;
CasInStart3 : BOOL;
CasInStop1 : BOOL;
CasInStop2 : BOOL;
CasInStop3 : BOOL;
StavMotor1 : RS;
StavMotor2 : RS;
StavMotor3 : RS;
StartStop : RS;
END_VAR
// definování proměnné pro logický výstup z časovače
// definování proměnné pro logický výstup z časovače
// definování proměnné pro logický výstup z časovače
// definování proměnné pro logický výstup z časovače
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
(*stav motoru 1*)
(*stav motoru 2*)
(*stav motoru 3*)
//provoz dopravníku
StartStop( S := Aut and Start, R1 := Aut and Stop, Q1 => StartMotoru);
StopMotoru := not StartMotoru;
CasInStart3 := StartMotoru;
CasovacStart3(IN := CasInStart3, PT := T#15s, Q => CasOutStart3);
StavMotor3( S := CasOutStart3, R1 := CasOutStop3, Q1 => Motor3);
// použití časovače
CasInStart2 := StartMotoru and CasOutStart3;
CasovacStart2(IN := CasInStart2, PT := T#15s, Q => CasOutStart2);
StavMotor2( S := CasOutStart2, R1 := CasOutStop2, Q1 => Motor2);
// použití časovače
CasInStart1 := StartMotoru and CasOutStart2;
CasovacStart1(IN := CasInStart1, PT := T#25s, Q => CasOutStart1);
StavMotor1( S := CasOutStart1, R1 := CasOutStop1, Q1 => Motor1);
// použití časovače
CasInStop1 := StopMotoru;
CasovacStop1(IN := CasInStop1, PT := T#15s, Q => CasOutStop1);
CasInStop2 := CasOutStop1;
CasovacStop2(IN := CasInStop2, PT := T#15s, Q => CasOutStop2);
CasInStop3 := CasOutStop2;
CasovacStop3(IN := CasInStop3, PT := T#15s, Q => CasOutStop3);
// použití časovače
// použití časovače
// použití časovače
(* řídící proměnná se přivádí na vstupní proměnnou Fb "IN", předvolený čas datovým typem T je přiveden
na vstup"PT", výstup se čte z výstupní proměnné "Q" *)
END_PROGRAM
Př.5b) ( SipvzProkektDopravnik3)
Program ukazuje řešení předchozího zadání (Př.5) pomocí programu napsaného v assembleru.
#def Start x0.0
#def Stop x0.1
#def Aut x0.2
#def CStop x0.6
#def cas 5
;nastaveni prodlevy spousteni a zastavovani
#def Mot1 y0.0
#def Mot2 y0.1
#def Mot3 y0.2
#def Sign y0.4
#reg bit Docas1, Docas2, Docas3, Docas4
#reg bit Imp1, Imp2, Imp3, Imp4
#reg bit StStop, StStart
#reg word Cit1, Cit2, Cit3, Cit4
P0
ld Start;spousteni startovaci sekvence
and Aut
set StStart
;pouze jeden stisk Start v prubehu startovani
ld StStart
set S25.1
;aktivace procesu P 10
res s25.2
;deaktivace procesu P 11
res Docas3
res Docas4
res Imp3
res StStop
ld Stop
set StStop
ld StStop
set s25.2
res s25.1
res Docas1
res Docas2
res Imp1
res StStart
;spousteni vypinaci sekvence
;pouze jeden stisk Stop v prubehu vypinani
;aktivace procesu P 11
;deaktivace procesu P 10
ld Mot3
wr Sign
;signalizace provozu
ld CStop
res Mot1
res Mot2
res Mot3
res s25.5
res s25.6
res Docas1
res Docas2
res Docas3
res Docas4
res StStart
res StStop
;Central Stop - nouzove zastaveni vsech motoru
;nastaveni registru pred opetovnym spustenim
res Imp1
res Imp3
E0
P 10
ld StStart
set Mot3
ld Mot3
let Imp1
set Docas1
ld Docas1
ld cas
ton Cit1.2
res low Cit1
res Docas1
set Mot2
ld Mot2
let Imp2
set Docas2
ld Docas2
ld cas
ton Cit2.2
res low Cit2
res Docas2
set Mot1
ld Mot1
res StStart
res s25.1
res Imp1
;spusteni motoru 3
;casova prodleva pred spustenim motoru 2
;spusteni motoru 2
;casova prodleva pred spustenim motoru 1
;spusteni motoru 1
;vynulovani registru pred dalsim spoustenim
E 10
P 11
ld StStop
res Mot1
ldc Mot1
let Imp3
set Docas3
ld Docas3
ld Cas
ton Cit3.2
res low Cit3
res Docas3
res Mot2
ldc Mot2
let Imp4
set Docas4
ld Docas4
ld Cas
ton Cit4.2
;zastaveni motoru 1
;casova prodleva pred zastavenim motoru 2
;zastaveni motoru 2
;casova prodleva pred zastavenim motoru 3
res low Cit4
res Docas4
res Mot3
ldc Mot3
res StStop
res s25.2
res Imp3
;zastaveni motoru 3
;vynulovani registru pred dalsim zastavovanim
E 12
Př.6) ( SipvzProkektDopravnik2)
(* program provádí po stisknutí tlačítka Start postupné spouštění dopravníků v pořadí M3-M2-M1. Časová
prodleva mezi spuštěním jednotlivých dopravníků je nastavena napevno v jednotlivých časovačích. Po
stisknutí tlačítka Stop se provádí postupné zastavení dopravníků v pořadí M1-M2-M3. Prodleva mezi
zastavováním jednotlivých dopravníků je nastavena pevně v jednotlivých časovačích. Signály Start, Stop
Aut jsou přiváděny na jednotlivé vstupy PLC, výstupní signály Motor1, Motor2 a Motor3 jsou na
výstupech PLC. Zároveň je hlídán pohyb dopravníků pomocí snímačů otáčení nehnaného hřídele
dopravníků. Nehnaný hřídel každého dopravníku je opatřen indukčním snímačem polohy, který na
impulsním výstupu generuje na každou otáčku jeden impuls. V případě, že se jeden za tří nehnaných
hřídelů přestane otáčet, tak se zastaví všechny dopravníky v předepsaném pořadí i s nastavenými
časovými prodlevami *)
var_global
ZnackaCasu AT %S13.0 : BOOL;
(* definice globální proměnné, která přebírá časové značky ze systémového registru S13 bit 0. Absolutní
adresa je deklarována znakem % ( prefix umístění ) *)
end_var
PROGRAM hlavni
VAR_INPUT
END_VAR
VAR
CasovacStart1 : TON;
//definování standardní POU-Fb: časovač
CasovacStart2 : TON;
//definování standardní POU-Fb: časovač
CasovacStart3 : TON;
//definování standardní POU-Fb: časovač
CasovacStop1 : TON;
//definování standardní POU-Fb: časovač
CasovacStop2 : TON;
//definování standardní POU-Fb: časovač
CasovacStop3 : TON;
//definování standardní POU-Fb: časovač
StartMotoru : BOOL := false; //spusteni pohybu dopravniku
StopMotoru : BOOL := true; //vypnuti pohybu dopravniku
CasOutStart1 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStart2 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStart3 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStop1 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStop2 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStop3 : BOOL;
// definování proměnné pro logický výstup z časovače
CasInStart1 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStart2 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStart3 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStop1 : BOOL;
CasInStop2 : BOOL;
CasInStop3 : BOOL;
StavMotor1 : RS;
StavMotor2 : RS;
StavMotor3 : RS;
StartStop : RS;
VystupCitace1 : BOOL;
VystupCitace2 : BOOL;
VystupCitace3 : BOOL;
Citac1
: CTU;
Citac2
: CTU;
Citac3
: CTU;
Toceni : BOOL;
END_VAR
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
// definování proměnné pro řídící proměnnou pro časovač
(*stav motoru 1*)
(*stav motoru 2*)
(*stav motoru 3*)
//provoz dopravníku
StartStop( S := Aut and Start, R1 := Toceni or (Aut and Stop), Q1 => StartMotoru);
StopMotoru := not StartMotoru;
CasInStart3 := StartMotoru;
CasovacStart3(IN := CasInStart3, PT := T#15s, Q => CasOutStart3); // použití časovače
StavMotor3( S := CasOutStart3, R1 := CasOutStop3, Q1 => Motor3);
CasInStart2 := StartMotoru and CasOutStart3;
CasovacStart2(IN := CasInStart2, PT := T#15s, Q => CasOutStart2); // použití časovače
StavMotor2( S := CasOutStart2, R1 := CasOutStop2, Q1 => Motor2);
CasInStart1 := StartMotoru and CasOutStart2;
CasovacStart1(IN := CasInStart1, PT := T#25s, Q => CasOutStart1); // použití časovače
StavMotor1( S := CasOutStart1, R1 := CasOutStop1, Q1 => Motor1);
(* U použitých časovačů typu TON, které jsou použity pro generování zpoždění při spouštění a zastavování
motorů se řídící proměnná se přivádí na vstupní proměnnou Fb "IN", předvolený časový interval s
datovým typem T je přiveden na vstup"PT", logický výstup se čte z výstupní proměnné "Q" *)
CasInStop1 := StopMotoru;
CasovacStop1(IN := CasInStop1, PT := T#15s, Q => CasOutStop1); // použití časovače
CasInStop2 := CasOutStop1;
CasovacStop2(IN := CasInStop2, PT := T#15s, Q => CasOutStop2); // použití časovače
CasInStop3 := CasOutStop2;
CasovacStop3(IN := CasInStop3, PT := T#15s, Q => CasOutStop3); // použití časovače
(* Následující čítače slouží k hlídání otáčení dopravníku. Jsou použity jako "hlídací časovače" na jejichž
vstup se přivádí impulsy ze systémového registru S13.0 (s periodou T=0,1 s). Časovač je nulován
impulsy ze snímače otáčení. Pokud se dopravník přestane otáčet, časovač přestane být nulován a po
dosažení předvolby se výstup nastaví tj. Q=1. Tím dojde ke generování STOP signálu a začne běžný
zastavovací režim ( i s nastavenými časovými prodlevami ). *)
Citac1( CU := ZnackaCasu, R := Toci1, PV := 50, Q => VystupCitace1 );
Citac2( CU := ZnackaCasu, R := Toci2, PV := 50, Q => VystupCitace2 );
Citac3( CU := ZnackaCasu, R := Toci3, PV := 50, Q => VystupCitace3 );
Toceni := VystupCitace1 or VystupCitace2 or VystupCitace3;
END_PROGRAM
Př.7) ( SipvzProkektDopravnik4)
(* program provádí po stisknutí tlačítka Start postupné spouštění dopravníků v pořadí M3-M2-M1. Časová
prodleva mezi spuštěním jednotlivých dopravníků je nastavena napevno v jednotlivých časovačích. Po
stisknutí tlačítka Stop se provádí postupné zastavení dopravníků v pořadí M1-M2-M3. Prodleva mezi
zastavováním jednotlivých dopravníků je nastavena pevně v jednotlivých časovačích. Signály Start, Stop,
Aut jsou přiváděny na jednotlivé vstupy PLC, výstupní signály Motor1, Motor2 a Motor3 jsou na
výstupech PLC. Zároveň je hlídán pohyb dopravníků pomocí snímačů otáčení nehnaného hřídele
dopravníků. Nehnaný hřídel každého dopravníku je opatřen indukčním snímačem polohy, který na
impulsním výstupu generuje na každou otáčku jeden impuls. V případě, že se jeden za tří nehnaných
hřídelů přestane otáčet, tak se zastaví dopravníky podle následujících pravidel:
porucha dopravníku 1
zastaví se okamžitě M1
porucha dopravníku 1 a 2
zastaví se okamžitě M1 a M2
porucha dopravníku 1, 2 a 3
zastaví se okamžitě M1, M2 a M3
Doběh dopravníků, které se nezastavují okamžitě je řízen časovými prodlevami jako při bezporuchovém
zastavování. Pro tento účel byly definovány proměnné Toceni1, Toceni2, Toceni3 *)
var_global
ZnackaCasu AT %S13.0 : BOOL;
(* definice globální proměnné, která přebírá časové značky ze systémového registru S13 bit 0. Absolutní
adresa je deklarována znakem % ( prefix umístění ) *)
end_var
PROGRAM hlavni
VAR_INPUT
END_VAR
VAR
CasovacStart1 : TON;
//definování standardní POU-Fb: časovač
CasovacStart2 : TON;
//definování standardní POU-Fb: časovač
CasovacStart3 : TON;
//definování standardní POU-Fb: časovač
CasovacStop1 : TON;
//definování standardní POU-Fb: časovač
CasovacStop2 : TON;
//definování standardní POU-Fb: časovač
CasovacStop3 : TON;
//definování standardní POU-Fb: časovač
StartMotoru : BOOL := false; //spuštění pohybu dopravníku
StopMotoru : BOOL := true; //vypnuti pohybu dopravníku
CasOutStart1 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStart2 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStart3 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStop1 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStop2 : BOOL;
// definování proměnné pro logický výstup z časovače
CasOutStop3 : BOOL;
// definování proměnné pro logický výstup z časovače
CasInStart1 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStart2 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStart3 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStop1 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStop2 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
CasInStop3 : BOOL;
// definování proměnné pro řídící proměnnou pro časovač
StavMotor1 : RS;
(*stav motoru 1*)
StavMotor2 : RS;
(*stav motoru 2*)
StavMotor3 : RS;
(*stav motoru 3*)
StartStop : RS;
//provoz dopravníku
VystupCitace1 : BOOL;
VystupCitace2 : BOOL;
VystupCitace3 : BOOL;
Citac1
: CTU;
Citac2
: CTU;
Citac3
: CTU;
Toceni : BOOL;
Toceni1 : BOOL;
Toceni2 : BOOL;
Toceni3 : BOOL;
END_VAR
StartStop( S := Aut and Start, R1 := Toceni or (Aut and Stop), Q1 => StartMotoru);
StopMotoru := not StartMotoru;
CasInStart3 := StartMotoru;
CasovacStart3(IN := CasInStart3, PT := T#15s, Q => CasOutStart3); // použití časovače
StavMotor3( S := CasOutStart3, R1 := Toceni3 or CasOutStop3, Q1 => Motor3);
CasInStart2 := StartMotoru and CasOutStart3;
CasovacStart2(IN := CasInStart2, PT := T#15s, Q => CasOutStart2); // použití časovače
StavMotor2( S := CasOutStart2, R1 := Toceni2 or CasOutStop2, Q1 => Motor2);
CasInStart1 := StartMotoru and CasOutStart2;
CasovacStart1(IN := CasInStart1, PT := T#25s, Q => CasOutStart1); // použití časovače
StavMotor1( S := CasOutStart1, R1 := Toceni1 or CasOutStop1, Q1 => Motor1);
(* U použitých časovačů typu TON, které jsou použity pro generování zpoždění při spouštění a zastavování
motorů, se řídící proměnná přivádí na vstupní proměnnou Fb "IN", předvolený časový interval s datovým
typem T je přiveden na vstup"PT", logický výstup se čte z výstupní proměnné "Q" *)
CasInStop1 := StopMotoru;
CasovacStop1(IN := CasInStop1, PT := T#15s, Q => CasOutStop1); // použití časovače
CasInStop2 := CasOutStop1;
CasovacStop2(IN := CasInStop2, PT := T#15s, Q => CasOutStop2); // použití časovače
CasInStop3 := CasOutStop2;
CasovacStop3(IN := CasInStop3, PT := T#15s, Q => CasOutStop3); // použití časovače
(* Následující čítače slouží k hlídání otáčení dopravníku. Jsou použity jako "hlídací časovače" na jejichž
vstup se přivádí impulsy ze systémového registru S13.0 (s periodou T=0,1 s). Časovač je nulován
impulsy ze snímače otáčení. Pokud se dopravník přestane otáčet, časovač přestane být nulován a po
dosažení předvolby PV se výstup nastaví tj. Q=1. Tím dojde k ovlivňování logických proměnných Toceni,
Toceni1, Toceni2, Toceni3 a tím k zastavování jednotlivých dopravníků v závislosti na tom, který
dopravník je v poruše (zastaví se ten, který je v poruše a předchozí, následující dobíhá s nastavenou
prodlevou). *)
Citac1( CU := ZnackaCasu, R := Toci1, PV := 50, Q => VystupCitace1 );
Citac2( CU := ZnackaCasu, R := Toci2, PV := 50, Q => VystupCitace2 );
Citac3( CU := ZnackaCasu, R := Toci3, PV := 50, Q => VystupCitace3 );
Toceni := VystupCitace1 or VystupCitace2 or VystupCitace3;
Toceni1 := VystupCitace3 or VystupCitace2 or VystupCitace1;
Toceni2 := VystupCitace3 or VystupCitace2;
Toceni3 := VystupCitace3;
END_PROGRAM
Př.7b) ( SipvzProkektDopravnik5)
;Alternativa k prikladu 6, vytvoreno v assembleru
;Pred spustenim programu nutno v #def PrePas spravne nastavit cas ocekavani
;impulsu od cidla pretrzeni pasu. Z duvodu reakce na pretrzeni nesmi byt cas
;dlouhy avsak za nastavenou dobu musi od cidel prijit alespon jeden impuls)
#def Start x0.0
#def Stop x0.1
#def Aut x0.2
#def Snim1 x0.3
#def Snim2 x0.4
#def Snim3 x0.5
#def CStop x0.6
#def cas 5
;nastaveni prodlevy spousteni a zastavovani
#def PrePas 10
;cas ocekavani impulsu od cidla pretrzeni pasu
#def Mot1 y0.0
#def Mot2 y0.1
#def Mot3 y0.2
#def Sign y0.4
#reg bit Docas1, Docas2, Docas3, Docas4
#reg bit Imp1, Imp2, Imp3, Imp4
#reg bit StStop, StStart
#reg word Cit1, Cit2, Cit3, Cit4
#reg word Sn1, Sn2, Sn3
P0
ld Start;spousteni startovaci sekvence
and Aut
set StStart
;pouze jeden stisk Start v prubehu startovani
ld StStart
set S25.1
;aktivace procesu P 10
res s25.2
;deaktivace procesu P 11
res Docas3
res Docas4
res Imp3
res StStop
ld Stop
set StStop
ld StStop
set s25.2
res s25.1
res Docas1
res Docas2
res Imp1
res StStart
ld Mot3
wr Sign
ld Mot1
ld Snim1
ld PrePas
rto Sn1.1
;spousteni vypinaci sekvence
;pouze jeden stisk Stop v prubehu vypinani
;aktivace procesu P 11
;deaktivace procesu P 10
;signalizace provozu
;impulsy od snimace 1
set StStop
;vypnuti motoru pri pretrzeni pasu 1
res StStart
res low Sn1
res high Sn1
ld Mot2
ld Snim2
;impulsy od snimace 2
ld PrePas
rto Sn2.1
set StStop
;vypnuti motoru pri pretrzeni pasu 2
res StStart
res Mot1
res Mot2
res low Sn2
res high Sn2
res Imp4
res Docas4
ld Mot3
ld Snim3
;impulsy od snimace 3
ld PrePas
rto Sn3.1
res StStop
;vypnuti motoru pri pretrzeni pasu 3
res StStart
res Mot1
res Mot2
res Mot3
res low Sn3
res high Sn3
ld CStop
res Mot1
res Mot2
res Mot3
res s25.5
res s25.6
res Docas1
res Docas2
res Docas3
res Docas4
res StStart
res StStop
res Imp1
res Imp3
;Central Stop - nouzove zastaveni vsech motoru
;nastaveni registru pred opetovnym spustenim
E0
P 10
ld StStart
set Mot3
ld Mot3
let Imp1
set Docas1
;spusteni motoru 3
ld Docas1
ld cas
ton Cit1.2
res low Cit1
res Docas1
set Mot2
ld Mot2
let Imp2
set Docas2
ld Docas2
ld cas
ton Cit2.2
res low Cit2
res Docas2
set Mot1
ld Mot1
res StStart
res s25.1
res Imp1
;casova prodleva pred spustenim motoru 2
;spusteni motoru 2
;casova prodleva pred spustenim motoru 1
;spusteni motoru 1
;vynulovani registru pred dalsim spoustenim
E 10
P 11
ld StStop
res Mot1
ldc Mot1
let Imp3
set Docas3
ld Docas3
ld Cas
ton Cit3.2
res low Cit3
res Docas3
res Mot2
ldc Mot2
let Imp4
set Docas4
ld Docas4
ld Cas
ton Cit4.2
res low Cit4
res Docas4
res Mot3
ldc Mot3
res StStop
res s25.2
res Imp3
E 12
;zastaveni motoru 1
;casova prodleva pred zastavenim motoru 2
;zastaveni motoru 2
;casova prodleva pred zastavenim motoru 3
;zastaveni motoru 3
;vynulovani registru pred dalsim zastavovanim
Př.8) ( SipvzProkektKrizovatka1)
(* důležité: vytvořeno ve vývojovém prostředí !!! Mosaic v.1.5.10 !!! *)
(* příklad ukazuje použití časovače pro vytvoření časové základy s periodou 60s, během které se budou
opakovaně provádět ve stejných časových okamžicích předepsané činnosti- rozsvěcení a zhasínání světel
na křižovatce. Světla jsou ovládána pomocí proměnných definovaných v sekci var_output časování a tím i
přepínání světel v čase se provádí proměnnou "traktor", která je ovládána logickým součinem vstupů
(alias) "pocitej", "bila" lokální proměnné "cas_out" se používá ke zkrácení cyklu časovače na 60s funkci
programu a časový průběh jednotlivých veličin je možné sledovat na GraphMakeru, který je použit v
projektu spouštění časování je proměnnou " pocitej" a vstupem (alias) "bila" *)
PROGRAM hlavni
VAR_OUTPUT
// definování výstupních proměnných
zelena_ch : BOOL := 0;
cervena_ch : BOOL := 1;
zelena_auto : BOOL := 1;
cervena_auto : BOOL:= 0;
END_VAR
VAR_INPUT
pocitej : BOOL;
END_VAR
VAR
casovac_1 : TON;
cas_out : BOOL := false;
traktor : BOOL := false;
casovani : TIME;
END_VAR
// vstup binární
// definování vnitřních proměnných
(*generování prodlevy při spouštění*)
(*logický výstup z časovače*)
(*řídící proměnná pro časování*)
(*číselný údaj o časováním intervalu*)
(* vstup "bila" se nastavuje pro simulované připojení v "nastavení V/V" ikona "IO" pomocí fixace! Pro
reálné připojení se jedná o vstup %X1.0 *)
traktor := pocitej and bila and ( not cas_out);
//definice řídící proměnné
casovac_1(IN := traktor, PT := T#60s, Q => cas_out, ET => casovani );
(* definování funkčního bloku časovač: proměnná IN = traktor reaguje na vstupní proměnné a na konec
cyklu časovače nastaveného vstupem PT = #60s výstupní proměnná Q = cas_out zajišťuje vynulování
časovače na 60s ve výstupní proměnné ET = casovani je čas časování Fb časovač *)
if casovani < T#20s then
zelena_ch := true;
cervena_ch := false;
zelena_auto := false;
cervena_auto := true;
elsif casovani > T#20s then
zelena_ch := false;
cervena_ch := true;
zelena_auto := true;
cervena_auto := false;
end_if;
END_PROGRAM
// testování časové reference pro semafor
// zelená pro chodce svítí
// červená pro chodce nesvítí
// po překročení času časovače 20s:
// zelená pro chodce nesvítí
// červená pro chodce svítí
Př.9) ( SipvzProkektKrizovatka2)
(* program je vytvořen ve vývojovém prostředí Mosaic v.1.5.10.0. Pro jiné verze nemusí odpovídat
přiřazení vstupů a datové typy u čítačů,časovačů *)
(* příklad ukazuje použití čítače pro vytvoření časové základy s periodou 60s, během které se budou
opakovaně provádět ve stejných časových okamžicích předepsané činnosti- rozsvěcení a zhasínání světel
na křižovatce. Světla jsou ovládána pomocí proměnných definovaných v sekci var_output časový průběh
jednotlivých veličin je možné sledovat na GraphMakeru, který je použit v projektu. Spouštění čítání je
proměnnou " pocitej" a vstupem (alias) "bila" *)
var_global
znacka_casu AT %S13.2 : BOOL;
end_var
(* Definice globální proměnné, která přebírá časové značky ze systémového registru S13 bit 2.
Absolutní adresa je deklarována znakem % ( prefix umístění ). časové značky mají periodu 1s. *)
PROGRAM hlavni
// deklarace POU – program
VAR_OUTPUT
zelena_ch : BOOL := 0;
cervena_ch : BOOL := 1;
zelena_auto : BOOL := 1;
cervena_auto : BOOL := 0;
cyklus : UDINT;
END_VAR
// deklarace vstupních proměnných POU
VAR_INPUT
pocitej : BOOL;
citej : BOOL;
END_VAR
// deklarace vstupních proměnných POU
VAR
citac : CTU;
cas_out : BOOL;
casovani : INT;
citani : INT;
vystup_citace : BOOL := 0;
END_VAR
// deklarace lokálních proměnných
// výstupní proměnná Pou - vnitřní stav čítače
// logický výstup čítače Q
(* začátek výkonné části POU programu *)
(* použití funkčního bloku z knihovny funkčních bloků - čítače CTU. V závorce jsou použity některé
vstupní a výstupní parametry nutné pro správnou funkci časovače:
R
binární vstupní proměnná, která log.úrovní 1 nuluje čítač
CU
vstup, na který se přivádí počítané impulsy.
V prvním případě se pomocí námi definované globální proměnné "znacka_casu" přivádí časové značky
ze systémového registru S13, konkrétně obdélníkové impulsy s periodou T=1s, které jsou na bitu 2.
Globální proměnné se definují mimo POU následujícím řetězcem:
znacka_casu AT %S13.2 : BOOL;
Druhá možnost, jak získat impulsy ze systémového registru S13, je využít knihovnu systémových
registrů. Tu je nejprve nutné nainstalovat do knihovny v IEC manažeru ( v menu "projekt", podmenu "
přidat soubor do projektu" (taktéž ikona "přidat do projektu")) ze složky:
..\Teco\Mosaic1\Lib soubor "SysLib_V10_20040806".
V IEC manažeru v knihovně "SYSLIB_V10_20040806.MLB" se vybere ve složce:
"Globální proměnné\VAR_GLOBAL" proměnná: "system_1SEC_PERIOD_PULSE".
Q logický výstup časovače. Při dosažení předvolby PV se výstup překlopí z log. 0 na log.1 Zde
je využit výstup k nulování čítače a tím dojde ke zkrácení cyklu čítače na předvolenou hodnotu
tj.60.
CV výstupní proměnná časovače podávající informaci o vnitřním stavu časovače. Lze využít k
odvození akcí generovaných v průběhu časování *)
citej := bila and system_1SEC_PERIOD_PULSE; (* čítání je řízeno vstupní proměnnou (alias)
"bila", která je přiřazena vstupu %X1.0 *)
citac( CU := citej, R := (not bila) or vystup_citace, PV := 60, Q => vystup_citace, CV => citani );
casovani := citani;
if casovani < 20 then
zelena_ch := true;
cervena_ch := false;
elsif casovani > 20 then
zelena_ch := false;
cervena_ch := true;
end_if;
END_PROGRAM
(* ověřování správné funkce programu je možné provádět pomocí inspektora POU, který se spustí ikonou
"nastavit debuger kontext" a pomocí části vývojového prostředí "Graph maker", kde je možné sledovat
časové průběhy jednotlivých proměnných použitých v aplikaci. Simulaci změn vstupních proměnných je
možné provádět v inspektoru POU, simulaci změn fyzických vstupů je možné provádět v okně Nastavení
V/V pomocí fixací tzv. aliasů, které zde byly přiřazeny jednotlivým vstupům. Změny lokálních a
výstupních proměnných je možné sledovat v inspektoru POU. *)
Př.10) ( SipvzProkektMos1)
;příklad ukazuje řešení výpočtu obvodu trojúhelníku, obvodu a obsahu kruhu
;program je napsán v assembleru pro PLC.
#reg
#reg
#def
byte a, b, c, r
word soucet, obvod, obsah
pi
3
P0
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
E0
ld a
add b
add c
wr soucet
; výpočet počtu proměnných a, b, c pomocí
; instrukcí s vyjádřeným operandem
;
; uložení výsledku součtu do proměnné součet
ld pi
mul r
mul 2
wr obvod
; výpočet obvodu kruhu s použitím
; instrukcí s vyjádřeným operandem
;
; uložení výsledku výpočtu obvodu kruhu
ld pi
mul r
mul r
wr obsah
; výpočet obsahu kruhu s použitím
; instrukcí s vyjádřeným operandem
;
; uložení výsledku výpočtu obsahu kruhu
řešení téhož pomocí instrukcí s nevyjádřeným operandem
ld a
ld b
ld c
add
add
wr soucet
ld pi
ld r
ld 2
mul
mul
wr obvod
ld pi
ld r
ld r
mul
mul
wr obsah
; výpočet počtu proměnných a, b, c pomocí
; instrukcí s vyjádřeným operandem
;
; uložení výsledku součtu do proměnné součet
; výpočet obvodu kruhu s použitím
; instrukcí s vyjádřeným operandem
;
; uložení výsledku výpočtu obvodu kruhu
; výpočet obsahu kruhu s použitím
; instrukcí s vyjádřeným operandem
;
; uložení výsledku výpočtu obsahu kruhu
Př.11) ( SipvzProkektSt1)
(* definování jednotlivých proměnných a konstant vhodných datových typů (datové typy je nutno dodržet,
v případě použití různých datových typů je nutné před jejich použitím použít konverzní funkce) *)
VAR_GLOBAL RETAIN
zaloha : DWORD;
END_VAR
// definování globální proměnné
VAR_GLOBAL CONSTANT
pi : REAL := 3.14159;
END_VAR
// definování globální konstanty
(* definování programové organizační jednotky - funkce, která provádí součet celočíselných
proměnných - obvod trojúhelníka *)
FUNCTION Soucet : INT
VAR_INPUT
a : INT;
b : INT;
c : INT;
END_VAR
Soucet := a + b + c;
END_FUNCTION
// výkonná část funkce: obvod trojúhelníku
(* definování programové organizační jednotky - funkčního bloku, která provádí výpočet obvodu a
obsahu kruhu o poloměru r *)
FUNCTION_BLOCK fbKruh
VAR_INPUT
r : real;
END_VAR
VAR
END_VAR
VAR_OUTPUT
o : real;
s : REAL;
END_VAR
o := 2.0 * pi * r; s := pi * r*r;
END_FUNCTION_BLOCK
// deklarační část funkčního bloku
// výkonná část funkčního bloku
(* definování programové organizační jednotky - programu, ve kterém jsou použity výše
definované programové organizační jednotky ( POU ) *)
PROGRAM hlavni
VAR
// deklarační část POU-program
vysledek : int;
instFB_kruh_1 : fbKruh;
// definování instance POU-funkční blok
obvod : REAL;
plocha : REAL;
END_VAR
vysledek := Soucet( a := 11, b := 13, c := 8 );
// výkonná část POU-program
instFB_kruh_1( r := 12.0, o => obvod, s => plocha );
END_PROGRAM
Př.12) ( SipvzProkektPneu1)
(* Ovládání dvou dvoučinných pneumatických lineárních motorů. Rozvaděče vzduchu jsou jednočinné. Po
stisku tlačítka "Start" se "Motor_1" pohybuje z polohy "K_1" do polohy "K_2".
Po uplynutí prodlevy se bude pohybovat "Motor_"2 z polohy "K_3" do polohy "K_4", ve které zůstane
nastavenou prodlevu. Po jejím uplynutí se vrátí zpět do polohy "K_3". Zde se spustí třetí prodleva a po
jejím uplynutí se vrátí "Motor_1" zpět do polohy "K_1"
*)
(* začátek deklarační části POU programu *)
var_global
cykly : BOOL := false;
end_var
PROGRAM hlavni_1
VAR_OUTPUT
END_VAR
VAR_INPUT
END_VAR
VAR
casovac_1 : TON;
casovac_2 : TON;
casovac_3 : TON;
inst_RS_M1 : RS;
inst_RS_M2 : RS;
inst_RS_SS : RS;
vpred : BOOL;
vzad : BOOL;
motor_1a : BOOL;
motor_1b : BOOL;
motor_1 : BOOL;
motor_2 : BOOL;
casovani_1 : TIME;
casovani_2 : TIME;
casovani_3 : TIME;
cas_out_1 : BOOL;
cas_out_2 : BOOL;
cas_out_3 : BOOL;
END_VAR
// deklarace POU - program
// není definována žádná výstupní proměnná
// výstupy jsou provedeny přímo na aliasy
// deklarace vstupních proměnných POU
// vstupy jsou provedeny přímo z aliasů
// deklarace lokálních proměnných
// časová prodleva v poloze k_2 vpřed
// časová prodleva v poloze k_4
// časová prodleva v poloze k_2 vzad
// instance RS pro běh motoru M1
// instance RS pro běh motoru M2
// instance RS spouštění/zastavování
// pomocná proměnná
// pomocná proměnná
// pomocná proměnná pro spuštění M1
// pomocná proměnná pro zastavení M1
//
//
// proměnná pro časovou informaci časovače 1
// proměnná pro časovou informaci časovače 2
// proměnná pro časovou informaci časovače 3
// logický výstup časovače 1
// logický výstup časovače 2
// logický výstup časovače 3
(* začátek výkonné části POU programu *)
(* proměnná "motor_1a" představuje výsledek logické funkce definující vysunutí motoru "motor_1"
proměnná "motor_1b" představuje výsledek logické funkce definující zasunutí motoru "motor_1" *)
(* použití funkčního bloku z knihovny funkčních bloků-časovače TON. V závorce jsou použity I/O
parametry nutné pro správnou funkci časovače:
IN binární vstupní proměnná, která spouští časování
PT hodnota předvolby, při jejímž dosažení dojde k překlopení logického výstupu časovače
Q logický výstup časovače
ET výstupní proměnná časovače podávající informaci o vnitřním stavu časovače tj. generovaném
časovém intervalu *)
inst_RS_SS( S := Start, R1 := Stop or cas_out_2, Q1 => vpred);
vzad := not vpred;
motor_1a := k_1 and vpred;
motor_1b := cas_out_3 or STOP;
inst_RS_M1( S := motor_1a, R1 := motor_1b, Q1 => motor_1);
(* proměnná "inst_RS_M1" představuje instanci funkčního bloku RS, který ovládá pneumatický motor
"motor_1" *)
casovac_1(IN := vpred and K_2, PT := T#20s, Q => cas_out_1, ET => casovani_1 );
inst_RS_M2( S := cas_out_1, R1 := cas_out_2, Q1 => motor_2);
(* proměnná "inst_RS_M2" představuje instanci funkčního bloku RS, který ovládá pneumatický motor
"motor_2" *)
casovac_2(IN := vpred and k_4, PT := T#20s, Q => cas_out_2, ET => casovani_2 );
casovac_3(IN := vzad and k_3, PT := T#15s, Q => cas_out_3, ET => casovani_3 );
END_PROGRAM
(* ověřování správné funkce programu je možné provádět pomocí inspektora POU, který se spustí ikonou
"nastavit debuger kontext" a pomocí části vývojového prostředí "Graph maker", kde je možné sledovat
časové průběhy jednotlivých proměnných použitých v aplikaci. Simulaci změn vstupních proměnných je
možné provádět v inspektoru POU, simulaci změn fyzických vstupů je možné provádět v okně Nastavení
V/V pomocí fixací tzv. aliasů, které zde byly přiřazeny jednotlivým vstupům. Změny lokálních a
výstupních proměnných je možné sledovat v inspektoru POU. *)
Př.13) ( SipvzProkektPneu2)
(* Ovládání dvou dvoučinných pneumatických lineárních motorů. Rozvaděče vzduchu jsou jednočinné. Po
stisku tlačítka "Start" se "Motor_1" pohybuje z polohy "K_1" do polohy "K_2".
Po uplynutí prodlevy se bude pohybovat "Motor_"2 z polohy "K_3" do polohy "K_4", ve které zůstane
nastavenou prodlevu. Po jejím uplynutí se vrátí zpět do polohy "K_3". Zde se spustí třetí prodleva a po
jejím uplynutí se vrátí "Motor_1" zpět do polohy "K_1". Předchozí činnost se zopakuje x-krát *)
(* začátek deklarační části POU programu *)
var_global
cykly : BOOL := false;
end_var
PROGRAM hlavni_1
VAR_OUTPUT
END_VAR
VAR_INPUT
END_VAR
// deklarace POU - program
// není definována žádná výstupní proměnná
// výstupy jsou provedeny přímo na aliasy
// deklarace vstupních proměnných POU
// vstupy jsou provedeny přímo z aliasů
VAR
// deklarace lokálních proměnných
casovac_1 : TON;
// časová prodleva v poloze k_2 vpřed
casovac_2 : TON;
// časová prodleva v poloze k_4
casovac_3 : TON;
// časová prodleva v poloze k_2 vzad
casovac_4 : TON;
// časová prodleva v poloze k_1 mezi cykly
citac : CTU;
// čítač pro počítání pracovních cyklů
inst_RS_M1 : RS;
// instance RS pro běh motoru M1
inst_RS_M2 : RS;
// instance RS pro běh motoru M2
inst_RS_SS : RS;
// instance RS spouštění/zastavování
vpred : BOOL;
// pomocná proměnná
vzad : BOOL;
// pomocná proměnná
motor_1a : BOOL;
// pomocná proměnná pro spuštění M1
motor_1b : BOOL;
// pomocná proměnná pro zastavení M1
motor_1 : BOOL;
//
motor_2 : BOOL;
//
casovani_1 : TIME;
// proměnná pro časovou informaci časovače 1
casovani_2 : TIME;
// proměnná pro časovou informaci časovače 2
casovani_3 : TIME;
// proměnná pro časovou informaci časovače 3
casovani_4 : TIME;
// proměnná pro časovou informaci časovače 4
cas_out_1 : BOOL;
// logický výstup časovače 1
cas_out_2 : BOOL;
// logický výstup časovače 2
cas_out_3 : BOOL;
// logický výstup časovače 3
cas_out_4 : BOOL;
// logický výstup časovače 4
cyklus_1 : BOOL;
// pomocná proměnná
vystup_citace : BOOL := false;
END_VAR
(* začátek výkonné části POU programu *)
(* proměnná "motor_1a" představuje výsledek logické funkce definující vysunutí motoru "motor_1"
proměnná "motor_1b" představuje výsledek logické funkce definující zasunutí motoru "motor_1" *)
(* použití funkčního bloku z knihovny funkčních bloků-časovače TON. V závorce jsou použity I/O
parametry nutné pro správnou funkci časovače:
IN
PT
Q
ET
binární vstupní proměnná, která spouští časování
hodnota předvolby, při jejímž dosažení dojde k překlopení logického výstupu časovače
logický výstup časovače
výstupní proměnná časovače podávající informaci o vnitřním stavu časovače tj. generovaném
časovém intervalu *)
cyklus_1 := not vystup_citace and cas_out_4;
inst_RS_SS( S := Start or cyklus_1, R1 := Stop or cas_out_2, Q1 => vpred);
vzad := not vpred;
motor_1a := k_1 and vpred;
motor_1b := cas_out_3 or STOP;
inst_RS_M1( S := motor_1a, R1 := motor_1b, Q1 => motor_1);
(* proměnná "inst_RS_M1" představuje instanci funkčního bloku RS, který ovládá pneumatický motor
"motor_1" *)
casovac_1(IN := vpred and K_2, PT := T#20s, Q => cas_out_1, ET => casovani_1 );
inst_RS_M2( S := cas_out_1, R1 := cas_out_2, Q1 => motor_2);
(* proměnná "inst_RS_M2" představuje instanci funkčního bloku RS, který ovládá pneumatický motor
"motor_2" *)
casovac_2(IN := vpred and k_4, PT := T#20s, Q => cas_out_2, ET => casovani_2 );
casovac_3(IN := vzad and k_3, PT := T#15s, Q => cas_out_3, ET => casovani_3 );
casovac_4(IN := vzad and k_1, PT := T#15s, Q => cas_out_4, ET => casovani_4 );
(* použití funkčního bloku z knihovny funkčních bloků - čítače CTU. V závorce jsou použity některé
vstupní a výstupní parametry nutné pro správnou funkci časovače:
R binární vstupní proměnná, která logickou úrovní 1 nuluje čítač
CU vstup, na který se přivádí počítané impulsy.
Q logický výstup časovače. Při dosažení předvolby PV se výstup překlopí z log. 0 na log.1 Zde je
využit výstup k nulování čítače a tím dojde ke zkrácení cyklu čítače na předvolenou hodnotu tj.60
CV výstupní proměnná časovače podávající informaci o vnitřním stavu časovače. Lze využít k odvození
akcí generovaných v průběhu časování *)
cykly := vzad and k_1;
citac( CU := cykly, R := start, PV := 2, Q => vystup_citace );
END_PROGRAM
(* ověřování správné funkce programu je možné provádět pomocí inspektora POU, který se spustí ikonou
"nastavit debuger kontext" a pomocí části vývojového prostředí "Graph maker", kde je možné sledovat
časové průběhy jednotlivých proměnných použitých v aplikaci. Simulaci změn vstupních proměnných je
možné provádět v inspektoru POU, simulaci změn fyzických vstupů je možné provádět v okně Nastavení
V/V pomocí fixací tzv. aliasů, které zde byly přiřazeny jednotlivým vstupům. Změny lokálních a
výstupních proměnných je možné sledovat v inspektoru POU nebo pomocí GraphMakeru. *)
Příloha I: časové průběhy z ověřování příkladu 5
1
Stop
Start
0
1
Motor1
Motor2
Motor3
0
1
prog_1.StartMotoru
0
1
0
1
0
1
0
0,000
20,000
40,000
60,000
80,000
100,000
120,000
140,000
Příloha II: 9 časové průběhy z ověřování příkladu 6
1
Stop
0
1
Start
Motor1
0
1
Motor2
Motor3
0
1
prog_1.StartMotoru
0
1
prog_1.VystupCitace2
prog_1.VystupCitace1
prog_1.VystupCitace3
prog_1.Toceni
0
1
0
1
0
1
0
1
0
1
0
0,000
50,000
100,000
150,000
200,000
250,000
300,000
350,000
Pozn.) Pro přenesení průběhu grafu z GraphMakeru do dokumentace se zvolí:“Kopírovat graf do
schránky jako windows metafile“ a poté se vloží do textového editoru „ctrl+v“
Příloha III: časové průběhy z ověřování příkladu 7
1
Stop
0
1
Start
Motor1
0
1
Motor2
Motor3
0
1
prog_1.StartMotoru
0
1
prog_1.VystupCitace2
prog_1.VystupCitace1
prog_1.VystupCitace3
prog_1.Toceni
0
1
0
1
0
1
0
1
0
1
0
0,000
50,000
100,000
150,000
200,000
250,000
300,000
350,000
400,000
450,000
Příloha IV: časové průběhy z ověřování příkladu 12
1
0
1
prvni_hlavni.motor_1
0
prvni_hlavni.casovani_1
60000
50000
40000
30000
20000
10000
0
prvni_hlavni.casovani_2
prvni_hlavni.motor_2
prvni_hlavni.casovani_3
prvni_hlavni.casovani_4
prvni_hlavni.vpred
60000
50000
40000
30000
20000
10000
0
60000
50000
40000
30000
20000
10000
0
60000,0
50000,0
40000,0
30000,0
20000,0
10000,0
0,0
1
0
0,000
20,000
40,000
60,000 80,000 100,000 120,000 140,000 160,000 180,000 200,000 220,000 240,000
Příloha V: časové průběhy z ověřování příkladu 13
1
0
1
prvni_hlavni.motor_1
0
prvni_hlavni.casovani_1
60000
50000
40000
30000
20000
10000
0
prvni_hlavni.casovani_2
prvni_hlavni.motor_2
prvni_hlavni.casovani_3
prvni_hlavni.casovani_4
prvni_hlavni.vpred
60000
50000
40000
30000
20000
10000
0
60000
50000
40000
30000
20000
10000
0
60000
50000
40000
30000
20000
10000
0
1
0
0,000
50,000
100,000
150,000
200,000
250,000
B. Vzorové příklady – vizualizace
Př.1) (SipvzCwTempoDemo1, )
Navrhněte jednoduchou aplikaci skládající se s přístroje Control a Meter. Přístroj Meter bude
zobrazovat hodnotu nastavovanou přístrojem Control. Vytvořte na PC a vyzkoušejte v Tempu.
Vytvořený program ukazují následující obrázky:
Nastavení přístroje Control ukazuje inspektor přístroje:
Nastavení přístroje Meter ukazuje
inspektor přístroje
Př.2) (SipvzCwTempoTc1)
Navrhněte program, který bude zobrazovat hodnoty logických proměnných na vstupech a výstupech
PLC. Pro vizualizaci použijte Control Web a ovladač Tecomat.
Postup řešení:
a) pomocí průvodce novou aplikací se vytvoří nový projekt.
b) v datových inspektorech se definuje ovladač pro komunikaci s PLC. Nastavení parametrického
souboru ukazuje obrázek:
výpis parametrického souboru i s komentářem:
[Settings]
Ethernet
ComDriver
SrcAdr
NumRepeat
Timeout
= false
= CWCOMM.DLL COM1
=1
=1
= 5000
[comm]
baudrate
= 19200
parity
= even
databits
=8
stopbits
=1
cts_flow
= disable
dsr_flow
= disable
dtr_control
= disable
rts_control
= disable
dsr_sense
= low
rx_interchar_timeout = 0
tx_char_timeout
=0
rx_timeout
=0
rx_char_timeout
=0
tx_timeout
=0
;jméno knihovny ovladače sériového rozhraní a
;jméno komunikačního portu (COMx), který je
;nainstalován v prostředí Windows.
;vlastní adresa - adresa této stanice (počítače)
;počet opakování požadavků na komunikaci po chybě
;čas čekání na odezvu v milisekundách
rx_buffer
= 520
tx_buffer
= 520
rx_frame_buffer
= 520
tx_frame_buffer
= 520
[Channels]
; Block = ChFrom, ChTo, Stn, Area, Type, Offset, [Bidirect] [SwapBytes] [Id:xxx]
; Area: X, Y, R, S, DB, TIM, SYNCTIME, CW, SW
Block
Block
Block
Block
= 400, 449, 2, X,
= 450, 499, 2, Y,
= 600, 699, 2, X,
= 700, 799, 2, Y,
bits,
bits,
bits,
sbit,
1
0
1
0
Pozn)
1.parametry označené písmen tučná kurzíva je nutné nastavit při tvorbě aplikace podle potřeby
navrhované aplikace.
2.V případě, že komunikace mezi PC a PLC se provádí pomocí radiomodemu, tak parametr
SrcAdr (vlastní adresa tj. adresa této stanice (počítače)) v sekci „settings“ se musí shodovat
s adresou radiomodemu, který je připojen k PC nebo musí být adresa uvedená v tomto modemu
definovaná v radiomodemu v mapě přesměrování.
3.Vývojové prostředí control web musí být nastaveno v režimu „vyvíjet aplikaci pro Control Web
Runtime pro Windows CE“
4.V případě komunikace přes radiomodemy je nutné nastavit timeout na co největší hodnotu.
c) v datových inspektorech se definují jednotlivé komunikační kanály , které budou přenášet
informace o stavu zápisníkové paměti resp stavu vstupů a výstupů, viz obrázek:
d) v grafickém editoru se na panel umístí přetažením z „palety přístrojů“ virtuální přístroje
„indikátor“ případně „switch“ (pro nastavování vstupů PLC), jak ukazuje následující obrázek.
e) v inspektoru přístroje se nastaví pro jednotlivé virtuální přístroje „indikátor“ základní parametry
(jméno přístroje, časování, vyhodnocovaný výraz=kanál, rozsah, vzhled přístroje)
f) v inspektoru přístroje se nastaví pro jednotlivé virtuální přístroje „switch“ základní parametry
(jméno přístroje, výstupní datový element=kanál)
Př.3) (SipvzCwTempoDemo2), (SipvzCwTempoTc2), (SipvzCwPcDemo1), (SipvzCwPcTc1)
Příklady slouží k vizualizaci provozních stavů v PLC TC651. Příklady „SipvzCwTempoDemo2“,
„SipvzCwPcDemo1“ slouží k ověření funkčnosti aplikace - jsou doplněny simulací provozních
stavů na sledovaných datových kanálech a tak je možné je používat k ověření správné funkce
vizualizační aplikace bez připojeného PLC. Programy „SipvzCwTempoTc2“, „SipvzCwPcTc1“
slouží ke sledování skutečných provozních stavů:
1. na logických vstupech, které jsou mapovány do registrů X1, X2, ( skutečný počet logických
vstupů je 12 a ovládají se napětím 0 – 24 V)
2. na logických výstupech, které jsou mapovány do registru Y0 ( skutečný počet výstupů je 8 a
jsou osazeny tranzistorem s otevřeným kolektorem)
3. na analogových výstupech, které jsou 4 a jsou nakonfigurovány na výstupní signál: unifikované
napětí 0 – 10V. Pro nastavování výstupního napětí je zvolena volba: kanál „integer“ s rozsahem
přenášených hodnot „0 – 30000“ ( odpovídá 0 – 10 V). Kanál přenáší 2 bajty mapované do
zápisníkové paměti PLC následovně:
Výstup číslo
Mapování do registrů
zápisníkové paměti
AO0
Y1, Y2
AO1
Y11,Y12
AO2
Y21, Y22
AO3
Y31, Y32
Na panelu č.1 jsou zobrazovány velikosti výstupního napětí na analogových výstupech
Na panelu č.2 je umístěn přístroj „chart“, který zobrazuje velikosti výstupních napětí jednotlivých
kanálů v závislosti na čase
Na panelu č.3 sou zobrazovány logické stavy binárních vstupů a výstupů.
Vzhled jednotlivých panelů ukazují následující obrázky:
Panel 1. indikace výstupních napětí
Panel 2. grafické zobrazení
výstupního napětí
Panel 3. indikace stavů:
– logických vstupů
– logických výstupů
– archivních souborů
Pozn.) Programy určené pro počítač Tempo neobsahují archivování dat. Programy pro PC obsahují
přístroj trend místo přístroje chart ( archivace výstupních napětí) a obsahují přístroje archiver pro
archivování binárních hodnot
Parametrický soubor ovladače určuje vlastnosti ovladače (sekce „settings“ a „comm“) a definuje
komunikační kanály (v sekci „channels“),
[Settings]
Ethernet
ComDriver
SrcAdr
NumRepeat
Timeout
= false
= CWCOMM.DLL COM1
= 32
=1
= 5000
[comm]
baudrate
parity
databits
stopbits
cts_flow
dsr_flow
dtr_control
rts_control
dsr_sense
rx_interchar_timeout
tx_char_timeout
rx_timeout
rx_char_timeout
tx_timeout
rx_buffer
tx_buffer
rx_frame_buffer
tx_frame_buffer
= 19200
= even
=8
=1
= disable
= disable
= disable
= disable
= low
=0
=0
=0
=0
=0
= 520
= 520
= 520
= 520
[Channels]
; Block = ChFrom, ChTo, Stn, Area, Type, Offset, [Bidirect] [SwapBytes] [Id:xxx]
; Area: X, Y, R, S, DB, TIM, SYNCTIME, CW, SW
Block = 100, 149, 2, Y,
Block = 400, 449, 2, X,
Block = 450, 499, 2, Y,
int16, 1
bits, 1
bits, 0
; blok kanálů = spodní a horní mez bloku kanálů, adresa PLC, oblast zápisníkové paměti PLC,
; datový typ kanálů, počáteční adresa v oblasti zápisníkové paměti, které se pak použijí při tvorbě
aplikace v datových inspektorech:
Grafické indikátory pro výstupní napětí jsou programovány pomocí přístroje „draw“, jak ukazuje
následující obrázek:
Níže uvedené programy jsou vázány na licence k následujícím programovým produktům:
1. Control Web 2000 vývojová verze
2. Control Web 2000 Ovladač TECOMAT 4
3. Control Web 2000 Runtime Builder pro Windows CE
4. Ovladač pro TECOMAT v.4.10 pro WinCE
5. Control Web 2000 runtime pro Windows CE/CEPC
Zdrojové texty programů pro vizualizaci
SipvzCwTempoDemo1
složka s programy, které jsou určené pro seznámení s Control Webem,
počítačem Tempo a komunikací PC – Tempo. Program neobsahuje
žádný ovladač, přístroj Meter zobrazuje hodnoty, které nastavuje
obsluha na přístroji Control. Velikost panelů je 320x240 bodů.
SipvzCwTempoDemo2
složka s programy, které slouží jako příprava na praktickou komunikaci
Tempo - TC-650. Program provádí vizualizaci 8 logických vstupů, 8
logických výstupů a 4 analogových výstupů. Zobrazuje průběh velikosti
výstupního napětí v čase. Neobsahuje žádný ovladač, stav vstupů a
výstupů je simulován. Data nejsou zálohována. Velikost panelů je
320x240 bodů.
SipvzCwTempoTc1
složka s programy, které jsou určené pro seznámení s Control Webem,
počítačem Tempo a komunikací PC – Tempo a jednoduchou vizualizaci
Tempo – PC-650. Program obsahuje ovladač Tecomat, provádí
vizualizaci 8 logických vstupů a 8 logických výstupů. Velikost panelů je
320x240 bodů.
SipvzCwTempoTc2
obdoba programu SipvzCwTempoDemo2. Obsahuje ovladač Tecomat a
slouží ke sledování jednotlivých vstupů a výstupů PLC v reálném čase,
analogové výstupy jsou zobrazovány graficky. Provádí reálnou
komunikaci Tempo - PLC TC-650. Program provádí vizualizaci 8
logických vstupů, 8 logických výstupů a 4 analogových výstupů.
Neobsahuje archivaci sledovaných dat. Velikost panelů je 320x240 bodů.
SipvzCwPcDemo1
složka s programy, které slouží jako příprava na praktickou komunikaci s
PLC TC-650. Program provádí vizualizaci 12 logických vstupů, 8
logických výstupů a 4 analogových výstupů. Zobrazuje průběh velikosti
výstupního napětí v čase. Neobsahuje žádný ovladač, stav vstupů a
výstupů je simulován. Data jsou zálohována. Velikost panelů je 572x342
bodů.
SipvzCwPcTc1
obdoba programu SipvzCwPcDemo1. Obsahuje ovladač Tecomat a
slouží ke sledování jednotlivých vstupů a výstupů PLC v reálném čase,
analogové výstupy jsou zobrazovány graficky. Provádí komunikaci PC PLC TC-650. Program provádí vizualizaci 12 logických vstupů, 8
logických výstupů a 4 analogových výstupů. Obsahuje archivaci
sledovaných dat. Velikost panelů je 572x342 bodů.
SipvzCwPcEthTc1
obdoba programu SipvzCwPcEthTc1. Obsahuje ovladač Tecomat a slouží
ke sledování jednotlivých vstupů a výstupů PLC v reálném čase,
analogové výstupy jsou zobrazovány graficky. Provádí komunikaci PC PLC TC-650. Program provádí vizualizaci 12 logických vstupů, 8
logických výstupů a 4 analogových výstupů. Obsahuje archivaci
sledovaných dat. Velikost panelů je 572x342 bodů. V aplikaci je umístěn
virtuální přístroj httpd, která se chová jako server, který generuje html
stránky, které lze sledovat kterýmkoli internetovým prohlížečem
podporujícím dynamické html stránky. Aplikace je tvořena v CW 5 na
rozdíl od předchozích, které jsou z důvodu kompatibility s počítačem
Tempo tvořeny v CW 2000.
obsah zprávy:
A. Vzorové příklady na programování PLC
Př1
Př2
Př3
Př4
Př5
Př5b
Př6
Př7
Př7b
Př8
Př9
Př10
Př11
Př12
Př13
Přílohy I - V
B. Vzorové příklady - vizualizace
Př1
Př2
Př3
Zdrojové texty programů pro vizualizaci
2
2
2
3
4
4
6
8
10
12
15
16
18
19
20
22
24
27
27
29
32
35

Podobné dokumenty

[A·I] – prirucka Patronu v1.2 – 20/11/2008

[A·I] – prirucka Patronu v1.2 – 20/11/2008 Patron minimalne 1x tydne travi cas na stejne mape, jako jeho kadeti a aktivne jim pomaha s plněním ukolu a vydelavanim. Je nutne, abyste se aspon takto svým lidem ukazali a pripadne postoupili v j...

Více