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