|
|
| Aufgabe 10.1 |
Niedriger Behälter mit I-Verhalten: FUNCTION_BLOCK BEHAELTER_I
(*Simulation eines niedrigen Behälters I-Verhalten,
Strecke ohne Ausgleich*)
VAR_INPUT
rZUFLUSS, rABFLUSS:REAL;(*0 ... 1.0*)
tFUELLZEIT:TIME:= T#10S;
tCYCLE:TIME:= T#100MS;
END_VAR
VAR_OUTPUT
rHOEHE:REAL;(*0 ... 1.0*)
END_VAR
VAR
r_m:REAL;(*Steigung*)
rFuellzeit, rCycle:REAL;
END_VAR
IF rHOEHE <= 0.0 THEN (*Begenzung*)
rHOEHE:= 0.0; rABFLUSS:= 0.0;
END_IF;
r_m:=(rZUFLUSS-rABFLUSS);
rFuellzeit:= TIME_TO_REAL(tFUELLZEIT);(*in ms*)
rCycle:= TIME_TO_REAL(tCYCLE);(*in ms*)
rHOEHE:= rHOEHE + r_m*rCycle/rFuellzeit;(*neue Höhe*)
IF rHOEHE > 1.0 THEN (*Begenzung*)
rHOEHE:= 1.0; RETURN;
END_IF;
PROGRAM Test (*Taskkonfiguration
zyklisch, z. B. 200 ms*)
VAR
rZulauf, rAblauf, rFuellstand:REAL;(*0...1.0*)
BEHAELTER_1:BEHAELTER_I;(*Instanz*)
END_VAR
BEHAELTER_1(
rZUFLUSS:= rZulauf,
rABFLUSS:= rAblauf,
tFUELLZEIT:= T#10s,
tCYCLE:= T#200ms);
rFuellstand:= BEHAELTER_1.rHOEHE;
Importieren Sie den FB in Ihre STRECKEN-Bibliothek.
|
| Aufgabe 10.2 |
Digitalfilter
FUNCTION_BLOCK
FILTER_M
(*Gleitende Mittelwertbildung mit N+1=4*)
VAR_INPUT
i_X:INT;(*aktueller Eingangswert,0..10V=>0..27648*)
END_VAR
VAR_OUTPUT
i_Y:INT;(*berechneter Ausgangswert,0..27648=>0..10V*)
END_VAR
VAR
x0, x1, x2, x3, y:REAL;
END_VAR
(*x-Werte verschieben*)
x3:= x2; x2:= x1; x1:= x0;
(*neuen Wert einlesen*)
x0:= INT_TO_REAL(i_x);
(*neuen Ausgangswert berechnen*)
y:= 0.25*(x0+x1+x2+x3);
(*Wert in INT wandeln*)
i_y:= REAL_TO_INT(y);
PROGRAM TEST (*Taskkonfiguration
mit einem Intervall von T#10 ms*)
(*Test des Digitalfilters*)
VAR
temp,temp_out:INT;
FILTER1:FILTER_M;
END_VAR
FILTER1(i_X:=temp);
temp_out:= FILTER1.i_Y;
Importieren Sie den FB in Ihre STRECKEN-Bibliothek.
|
| Aufgabe 10.3 |
Taktgeber
FUNCTION_BLOCK CLOCK_R
(*Taktgeber mit einstellbarer Periodendauer und
einstellbarem Ausgangssignal*)
VAR_INPUT
PERIOD:TIME;
CYCLE:TIME;(*Intervall*)
OUT_MAX:REAL:= 1.0;
OUT_MIN:REAL:= -1.0;
END_VAR
VAR_OUTPUT
OUT:REAL;
FAULT:BOOL;
END_VAR
VAR
n: INT:= 1;(*Zyklenzahl*)
rCycle_ms, rPERIOD_ms: REAL;
END_VAR
(*Eingabe überprüfen*)
IF PERIOD < CYCLE THEN
FAULT:= TRUE; RETURN;
ELSE
FAULT:= FALSE;
END_IF;
(*Schalten*)
rPERIOD_ms:= TIME_TO_REAL(PERIOD);
rCycle_ms:= TIME_TO_REAL(CYCLE);
IF n=(TRUNC(rPERIOD_ms/rCycle_ms))THEN
IF OUT > OUT_MIN THEN
OUT:= OUT_MIN;
n:= 1;
ELSE OUT:= OUT_MAX;
n:= 1;
END_IF;
ELSE
n:= n+1;
END_IF;
PROGRAM TEST (*Taskkonfiguration
mit einem Intervall von T#100 ms*)
VAR
rWert: REAL;
CLOCK_R_1: CLOCK_R;
END_VAR
CLOCK_R_1(
PERIOD:= T#0.499s,
CYCLE:= T#100ms,
OUT_MAX:= 1.0,
OUT_MIN:= 0.5);
rWert:= CLOCK_R_1.OUT;
Importieren Sie den FB in Ihre STRECKEN-Bibliothek.
|
| Aufgabe 10.4 |
Tiefpass
FUNCTION_BLOCK LOW_PASS
(*Einfacher Tiefpass,
Ausgangsverlauf ist nahe der e-Funktion*)
VAR_INPUT
IN: REAL;
N: USINT;(*nach N Zyklen wird der Endwert erreicht*)
END_VAR
VAR_OUTPUT
FAULT: BOOL;
OUT: REAL;
END_VAR
IF N<5 OR N>200 THEN
FAULT:= TRUE;
OUT:= 0.0; RETURN;
ELSE
FAULT:= FALSE;
END_IF;
OUT:=((IN-OUT)/N)+ OUT;
PROGRAM TEST (*Taskkonfiguration
mit einem Intervall von T#100 ms*)
VAR
rDruck: REAL;
rWert: REAL;
usiZykl: USINT:= 10;
xN_Fehler:BOOL;
LOW_PASS_1: LOW_PASS;
CLOCK_R_1: CLOCK_R;
END_VAR
CLOCK_R_1(
PERIOD:= T#0.5s,
CYCLE:= T#100ms,
OUT_MAX:= 8.5,
OUT_MIN:= 7.5);
rWert:= CLOCK_R_1.OUT;
LOW_PASS_1(IN:= rWert, N:=usiZykl);
rDruck:= LOW_PASS_1.OUT;
xN_Fehler:= LOW_PASS_1.FAULT;
Importieren Sie LOW_PASS in Ihre STRECKEN-Bibliothek
|
| Aufgabe 10.5 |
Streckensimulation für
Regelstrecken mit Ausgleich
Fügen Sie die STRECKEN-Bibliothek hinzu.
FUNCTION_BLOCK PT2
(*Strecke mit Ausgleich*)
VAR_INPUT
Y:REAL;(*Stellwert*)
N:USINT;(*zeitliches Verhalten*)
END_VAR
VAR_OUTPUT
X:REAL;(*Istwert*)
END_VAR
VAR
LOW_PASS_1, LOW_PASS_2:LOW_PASS;(*Instanzen*)
x1: REAL;
END_VAR
LOW_PASS_1(IN:= Y, N:= N);
x1:= LOW_PASS_1.OUT;
LOW_PASS_2(IN:= x1, N:= N);
X:= LOW_PASS_2.OUT;
PROGRAM TEST (*im
Task 100 ms, test des FBs-PT2*)
VAR
(*Zum Testen Stellwert verändern, z.B. von 0 -> 0.5*)
rStellwert:REAL;
rIstwert:REAL;
usiN:USINT:= 50;
Temperaturregelstrecke:PT2;
END_VAR
Temperaturregelstrecke(Y:= rStellwert, N:= usiN);
rIstwert:= Temperaturregelstrecke.X;(*Temperatur normiert*)
Importieren Sie den FB in Ihre STRECKEN-Bibliothek.
|
| Aufgabe 10.6b |
Autowaschanlage,
ablauforientiert programmiert Benutzen Sie die
Vorlage bzw. Lösung mit der Visualisierung von der
Startseite.
PROGRAM PLC_PRG
(******************************************************************
Autowaschanlage, ablauforientiert programmiert, CASE, IF...
mit einer simulierten Waschstraße mit Hilfe der
Visualisierung
und den Baustein MODELL_W
Einloggen und Start, beobachten Sie den Ablauf in der
Visualisierung.
*******************************************************************)
VAR
S1_Start, S0_Stopp : BOOL;(*Taster Visu*)
S2_Hand :BOOL; (*Schalter Handbetrieb Visu*)
B1_pos_vorw, B2_pos_hauptw, B3_pos_trock: BOOL;(*simulierter
Pos.schalter*)
P1_startbereit AT %QX0.0: BOOL;(*Anzeige*)
Q1_Band AT %QX0.2: BOOL;(*Schütz Bandantrieb*)
M1_Vorw AT %QX0.3: BOOL;(*Ventil*)
M2_Q2_Hauptw AT %QX0.4: BOOL;(*Ventil+ Schütz
Bürsten*)
Q3_Trockner AT %QX0.5: BOOL;(*Schütz
Trocknerantrieb*)
usiSchrittNr:USINT; usiAktionsNr: USINT := 1; (*Visu
Anzeige und Eingabe*)
WASCH1:WASCH; MODELL1:MODELL_W;(*Instanzen*)
END_VAR
(*Modell der Waschstraße, simuliert die
Positionsschalter*)
MODELL1(BAND:= Q1_Band,
POS_VORW=>
B1_pos_vorw,
POS_HAUPTW=>
B2_pos_hauptw,
POS_TROCK=>
B3_pos_trock);
(*Waschstraße 1*)
WASCH1(START:= S1_Start,
STOPP:= S0_Stopp,
POS_VORW:= B1_pos_vorw,
POS_HAUPTW:= B2_pos_hauptw,
POS_TROCK:= B3_pos_trock,
HAND:= S2_Hand,
AKTION_NR:=
usiAktionsNr,
BEREIT=> P1_startbereit,
BAND=> Q1_Band,
VOR_WAESCHE=>
M1_Vorw,
HAUPT_WAESCHE=>
M2_Q2_Hauptw,
TROCKNER=> Q3_Trockner,
SCHRITT=>
usiSchrittNr);
FUNCTION_BLOCK WASCH
VAR_INPUT
START, STOPP, POS_VORW, POS_HAUPTW, POS_TROCK:BOOL;
HAND:BOOL; AKTION_NR:USINT;
END_VAR
VAR_OUTPUT
BEREIT, BAND, VOR_WAESCHE, HAUPT_WAESCHE, TROCKNER:BOOL;
SCHRITT:USINT;
END_VAR
VAR
FREIGABE:RS; TON1:TON;
step_no: USINT;
END_VAR
IF HAND THEN
(*********** Handbetrieb ***************
Aktionsnummer wählen und S1-Start betätigen*)
step_no:=0;
IF AKTION_NR > 4 OR AKTION_NR < 0
THEN AKTION_NR:=0;
END_IF;
BAND:= AKTION_NR=1 AND START;
VOR_WAESCHE:= AKTION_NR=2 AND START;
HAUPT_WAESCHE:= AKTION_NR=3 AND START;
TROCKNER:= AKTION_NR=4 AND START;
ELSE
(*********** Automatikbetrieb *****************)
(* Schrittkette *)
TON1(IN:= step_no = 4, PT:= T#8S);
CASE step_no OF
0: IF START THEN
step_no:= 1;
END_IF;
1: IF POS_VORW THEN
step_no:= 2;
END_IF;
2: IF POS_HAUPTW THEN
step_no:= 3;
END_IF;
3: IF POS_TROCK THEN
step_no:= 4;
END_IF;
4: IF TON1.Q THEN
step_no:= 0;
END_IF;
END_CASE;
(*Aktionsfreigabe*)
FREIGABE(SET:= START, RESET1:= STOPP);
(* Aktionen *)
BEREIT:= step_no = 0;
BAND:= step_no > 0 AND FREIGABE.Q1;
VOR_WAESCHE:= step_no = 2 AND FREIGABE.Q1;
HAUPT_WAESCHE:= step_no = 3 AND FREIGABE.Q1;
TROCKNER:= step_no = 4 AND FREIGABE.Q1;
END_IF;
SCHRITT:=step_no; (*Anzeige*)
FUNCTION_BLOCK
MODELL_W
(*********************************************
Simulierte die Waschstraße
Sensoren B1...B3 abhängig vom BAND schalten
Steuern und beobachten über die Visualisierung
**********************************************)
VAR_INPUT
BAND, WEGFAHREN:BOOL; (*Visu- Auto wegfahren*)
END_VAR
VAR_OUTPUT
POS_VORW, POS_HAUPTW, POS_TROCK:BOOL;
END_VAR
VAR
TON1:TON; CTU1:CTU;
END_VAR
TON1(IN:= NOT TON1.Q, PT:= T#0.1S);
CTU1(CU:= BAND AND TON1.Q);
POS_VORW:= CTU1.CV > 14 AND CTU1.CV < 41;
POS_HAUPTW:= CTU1.CV > 53 AND CTU1.CV < 87;
POS_TROCK:= CTU1.CV > 91 AND CTU1.CV < 120;
CTU1.RESET:= WEGFAHREN; (*Schaltfläche Visu*)
|
| Übung 10.1 |
Lichtszenen
b) Lichtszenen mit einem Zähler
PROGRAM PLC_PRG (*Hauptprogramm*)
(********************************
Lichtszenenbaustein mit Zähler
testen S8 -> E7...E9 beobachten
*********************************)
VAR
LICHT_SZENEN_1: LICHT_SZENEN;
END_VAR
LICHT_SZENEN_1(IN:= S8_Wohnzimmer);
E7_Wohnzimmer:=LICHT_SZENEN_1.OUT1;
E8_Wohnzimmer:=LICHT_SZENEN_1.OUT2;
E9_Wohnzimmer:=LICHT_SZENEN_1.OUT3;
VAR_GLOBAL
(*Die Adressen sind abhängig von der
Gerätekonfiguration*)
S8_Wohnzimmer AT %IX2.7:BOOL;
E7_Wohnzimmer AT %QX0.5:BOOL;
E8_Wohnzimmer AT %QX0.6:BOOL;
E9_Wohnzimmer AT %QX0.7:BOOL;
END_VAR
FUNCTION_BLOCK LICHT_SZENEN
(*6 Szenen mit 3 Ausgänge*)
VAR_INPUT
IN:BOOL;(*schaltet die Szene um*)
tAUS:TIME:=T#3S;
END_VAR
VAR_OUTPUT
OUT1, OUT2, OUT3:BOOL;
END_VAR
VAR
CTU1: CTU;
TON1: TON;
END_VAR
CTU1(CU:= IN);
CASE CTU1.CV OF
0: OUT1:= FALSE; OUT2:= FALSE; OUT3:= FALSE;
1: OUT1:= FALSE; OUT2:= TRUE; OUT3:= FALSE;
2: OUT1:= FALSE; OUT2:= TRUE; OUT3:= TRUE;
3: OUT1:= TRUE; OUT2:= TRUE; OUT3:= FALSE;
4: OUT1:= TRUE; OUT2:= FALSE; OUT3:= TRUE;
5: OUT1:= TRUE; OUT2:= TRUE; OUT3:= TRUE;
END_CASE;
(*Ausschalten wenn IN länger als tAUS TRUE ist*)
TON1(IN:= IN, PT:= tAUS);
IF CTU1.CV > 5 OR TON1.Q THEN
CTU1.RESET:= TRUE;
ELSE CTU1.RESET:= FALSE;
END_IF
c) Lichtszenen mit einer Schrittkette
PROGRAM PLC_PRG
(********************************
Lichtszenenbaustein- Schrittkette
testen S8 -> E7...E9 beobachten
*********************************)
VAR
S8:BOOL;
E7, E8, E9:BOOL;
LICHTSZENEN1:LICHTSZENEN;
END_VAR
LICHTSZENEN1(
IN:=
S8,
tAUS:=
T#3S,
OUT1=>
E7,
OUT2=>
E8,
OUT3=>
E9);
FUNCTION_BLOCK LICHTSZENEN
(************************************
6 Szenen mit 3 Ausgänge, Schrittkette
*************************************)
VAR_INPUT
IN:BOOL;
tAUS:TIME:=T#3S;(*Ausschalten wenn IN länger ist*)
END_VAR
VAR_OUTPUT
OUT1, OUT2, OUT3:BOOL;
END_VAR
VAR
schrittNr:USINT;
TON1:Standard.TON; R_TRIG_IN:Standard.R_TRIG;
END_VAR
R_TRIG_IN(CLK:= IN); (* Flanke von IN *)
(* Schrittkette *)
CASE schrittNr OF
0: IF R_TRIG_IN.Q THEN
schrittNr:= 1;
END_IF;
1: IF R_TRIG_IN.Q THEN
schrittNr:= 2;
END_IF;
2: IF R_TRIG_IN.Q THEN
schrittNr:= 3;
END_IF;
3: IF R_TRIG_IN.Q THEN
schrittNr:= 4;
END_IF;
4: IF R_TRIG_IN.Q THEN
schrittNr:= 5;
END_IF;
5: IF R_TRIG_IN.Q THEN
schrittNr:= 0;
END_IF;
END_CASE;
(*Ausschalten wenn IN länger als 3s TRUE ist*)
TON1(IN:= IN, PT:= tAUS);
(* Kontinuierlich wirkende zeitlich begrenzte Aktionen *)
IF TON1.Q THEN schrittNr:=0; END_IF;
OUT1:= schrittNr = 3 OR schrittNr = 4 OR schrittNr = 5;
OUT2:= schrittNr = 1 OR schrittNr = 2 OR schrittNr = 3 OR
schrittNr = 5;
OUT3:= schrittNr = 2 OR schrittNr = 4 OR schrittNr = 5;
|
| Übung 10.2 |
Waschstraße mit Drehbürste,
GRAFCET Benutzen Sie die Vorlage bzw. Lösung
mit der Visualisierung von der Startseite.
PROGRAM PLC_PRG
(**********************************************************************
Autowaschstraße mit Drehbürste, Modell und
Visualisierung.
Funktionsbeschreibung:
Automatik: Ist das Auto in die Waschstraße gefahren und
Start betätigt,
so wird die Anlage freigegeben. Der Bandantrieb schaltet
ein, das
Vorwaschventil öffnet. Wird B11 erreicht, so schließt
das Vorwasch-
ventil, der Bürstenantrieb schaltet ein, das
Hauptwaschventil öffnet.
Solange B11=1 fährt die Bürste über M12 auf, wird B11=0,
solange fährt
die Bürste über M11 ab. Dies gilt auch für B12. Wird B02
erreicht,
so wird alles ausgeschaltet.
Handbetrieb: Ist der Schalter Hand eigeschaltet, so kann
ein Aktor
abhängig von der Aktionsnumer über Start tippend
geschaltet werden.
***********************************************************************)
VAR
AUTOWASCH1: AUTOWASCH;
MODELL:MODELL_B;
END_VAR
MODELL(
BAND:= Q00_Band,
AUF:= M12_auf,
AB:= M11_ab,
ANF=> B01_Anfang,
END=> B02_Ende,
SEN1=> B11,
SEN2=> B12);
(*** Waschstraße 1 der Anlage ***)
AUTOWASCH1(
xSTOPP:=
S00_Stopp,
xSTART:=
S01_Start,
xHand:=
S02_Hand,
usiAKTION_NR:=
,
xANFANG:=
B01_Anfang,
xENDE:=
B02_Ende,
xSENSOR1:=
B11,
xSENSOR2:=
B12,
xBEREIT=>
P1_Bereit,
xBAND=>
Q00_Band,
xBUERST=>
Q10_Buerste,
xAUF=>
M12_auf,
xAB=>
M11_ab,
xVORWASCH=>
M00_Vorwasch,
xHAUPTWASCH=>
M01_Wasch);
VAR_GLOBAL
(**********************************************************
Eine Zuordnung zu den Adressen des Prozessabbildes mit
dem
Schlüsselwort AT wurde bewusst nicht erstellt, die
Variablen
können dann vom MODELL-Baustein leicht beschrieben
werden.
**********************************************************)
S00_Stopp :BOOL;(*Taster*)
S01_Start :BOOL;(*Taster*)
S02_Hand :BOOL; (*Schalter Handbetrieb Visu*)
B01_Anfang :BOOL;(*Anfangsposition*)
B02_Ende :BOOL;(*Endposition*)
B11 :BOOL;(*Lichtschranke*)
B12 :BOOL;(*Lichtschranke*)
P1_Bereit:BOOL;
Q00_Band :BOOL;(*Schütz Förderband*)
M00_Vorwasch :BOOL;(*Ventil Vorwäsche*)
M01_Wasch :BOOL;(*Ventil Hauptwäsche*)
Q10_Buerste :BOOL;(*Schütz Bürstenantrieb*)
M11_ab :BOOL;(*Ventil Bürsten ab*)
M12_auf :BOOL;(*Ventil Bürsten auf*)
END_VAR
FUNCTION_BLOCK AUTOWASCH
VAR_INPUT
xSTOPP, xSTART, xHand:BOOL;(*Visu*)
usiAKTION_NR:USINT:= 4;(*Eingabe in Visu*)
xANFANG, xENDE,xSENSOR1,xSENSOR2:BOOL;(*Prozess*)
END_VAR
VAR_OUTPUT
xBEREIT:BOOL;(*Visu*)
xBAND, xBUERST, xAUF, xAB, xVORWASCH, xHAUPTWASCH:BOOL;(*Prozess*)
usiSCHRITTNR: USINT;
END_VAR
VAR
Freigabe:RS;
END_VAR
IF xHAND THEN
(*********** Handbetrieb *********************
Aktionsnummer wählen und S1-Start betätigen*)
usiSCHRITTNR:=0;
IF usiAKTION_NR > 5 OR usiAKTION_NR < 0
THEN usiAKTION_NR:=4;
END_IF;
xBAND:= usiAKTION_NR=1 AND xSTART;
xVORWASCH:= usiAKTION_NR=2 AND xSTART;
xHAUPTWASCH:= usiAKTION_NR=3 AND xSTART;
xAUF:= usiAKTION_NR=4 AND xSTART;
xAB:= usiAKTION_NR=5 AND xSTART;
ELSE
(*********** Automatikbetrieb *****************)
(*** Schrittkette ***)
CASE usiSCHRITTNR OF
0: IF xANFANG THEN
usiSCHRITTNR:=usiSCHRITTNR+1;
END_IF;
1: IF xSTART THEN
usiSCHRITTNR:=usiSCHRITTNR+1;
END_IF;
2: IF xSENSOR1 THEN
usiSCHRITTNR:=usiSCHRITTNR+1;
END_IF;
3: IF xSENSOR2 THEN
usiSCHRITTNR:=usiSCHRITTNR+1;
END_IF;
4: IF xENDE THEN
usiSCHRITTNR:=0;
END_IF;
END_CASE;
(*** Aktionsfreigabe ***)
Freigabe(SET:= xSTART, RESET1:= xSTOPP);
(*** AKTIONEN ***)
xBEREIT:= xANFANG AND usiSCHRITTNR= 1;
xBAND:= (Freigabe.Q1 AND (usiSCHRITTNR=2 OR
usiSCHRITTNR=3
OR
usiSCHRITTNR=4));
xVORWASCH:= Freigabe.Q1 AND usiSCHRITTNR=2;
xHAUPTWASCH:=Freigabe.Q1 AND (usiSCHRITTNR=3 OR
usiSCHRITTNR=4);
xBUERST:= Freigabe.Q1 AND (usiSCHRITTNR=3 OR
usiSCHRITTNR=4);
xAUF:= NOT xAB AND Freigabe.Q1 AND (usiSCHRITTNR=3
AND xSENSOR1
OR
usiSCHRITTNR=4 AND xSENSOR1 OR xSENSOR2);
xAB:= NOT xAUF AND Freigabe.Q1 AND (usiSCHRITTNR=0
OR usiSCHRITTNR=3
AND
NOT xSENSOR1 OR usiSCHRITTNR=4 AND NOT xSENSOR2 );
END_IF;
FUNCTION_BLOCK MODELL_B
VAR_INPUT
BAND, Auf, AB:BOOL;
END_VAR
VAR_OUTPUT
ANF, END, SEN1, SEN2:BOOL;
END_VAR
VAR
Auto:BOOL;
z:REAL;(*Position Auto*)
Auto_ein, Auto_aus: BOOL;(*Visu*)
v: INT;(*Position Bürste*)
END_VAR
(*Auto*)
IF Auto_ein THEN Auto := TRUE;
ELSIF Auto_aus THEN Auto:=FALSE;
END_IF;
(*B01 Anfang*)
IF Auto AND z > -80.0 THEN
ANF:=TRUE;
ELSE ANF:= FALSE;
END_IF;
(*Auto fährt, Position z*)
IF Auto AND Q00_Band THEN
z:=z-0.5;
ELSIF NOT Auto THEN z:=0;
END_IF;
(*B11*)
IF Auto AND v <=0 AND v > -12 AND z < -60 AND z
> -90 OR v > -26
AND z
< -88 AND z > -150 THEN
SEN1:=TRUE;
ELSE SEN1:= FALSE;
END_IF;
(*B12*)
IF v <=0 AND v > -12 AND z < -100 AND z > -120
OR v > -26
AND
z < -118 AND z > -173 THEN
SEN2:=TRUE;
ELSE SEN2:= FALSE;
END_IF;
(*Bürste fährt, Position*)
IF AUF AND v > -30 THEN v:=v-1;
ELSIF AB AND v <= -1 THEN v:=v+1;
END_IF;
(*B02 Ende*)
IF Auto AND z < -205 THEN
END:=TRUE;
ELSE END:= FALSE;
END_IF;
|
© Vogel Buchverlag
|