|
|||
| Aufgabe 4.1 | b) SR-Kippglied PROGRAM PLC_PRG (*setzen vorrangig*) VAR xStart, xStopp:BOOL; xOut:BOOL; END_VAR IF xStopp THEN xOut:= FALSE; END_IF; IF xStart THEN xOut:= TRUE; END_IF; c) SR-Kippglied mit ELSIF... PROGRAM PLC_PRG (*setzen vorrangig*) VAR xStart, xStopp:BOOL; xOut:BOOL; END_VAR IF xStart THEN xOut:= TRUE; ELSIF xStopp THEN xOut:= FALSE; END_IF; d) RS-Kippglied mit remanenten Speicher PROGRAM PLC_PRG (*rücksetzen vorrangig mit remanenten Speicher*) VAR xOUT AT %QX0.0:BOOL; xStopp AT %IX2.0:BOOL; xStart AT %IX2.1:BOOL; END_VAR VAR RETAIN xMerker:BOOL; END_VAR IF xStopp THEN xMerker:=FALSE; ELSIF xStart THEN xMerker:=TRUE; END_IF xOUT:= xMerker; |
||
| Übung 4.1 | Behältersteuerung PROGRAM PLC_PRG (*Projekt: Behältersteuerung*) VAR (*Adr. abhängig von der Gerätekonfiguration *) S1_ein AT %IX2.0:BOOL; B1 AT %IX2.1:BOOL; B2 AT %IX2.2:BOOL; P1_ein AT %QX0.0:BOOL; M1_Ventil AT %QX0.1:BOOL; M2_Ventil AT %QX0.2:BOOL; END_VAR P1_ein := S1_ein; (*Meldung ein*) IF NOT B1 THEN(*Ventile ein*) M1_Ventil:= TRUE; M2_Ventil:= TRUE; END_IF; (*Ventile ausschalten*) IF B2 OR NOT S1_ein THEN M1_Ventil:= FALSE; M2_Ventil:= FALSE; END_IF; |
||
| Übung 4.2 | Zweipunktregler PROGRAM PLC_PRG (*Helligkeits- und dann Schwellwert ändern, xOut beobachten*) VAR usiSchwellwert :USINT:= 150; (*Testwert*) usiHelligkeit :USINT:= 200; (*Testwert*) usiEinschaltpunkt, usiAusschaltpunkt :USINT; xOut :BOOL; END_VAR (*Schwellwert prüfen*) IF usiSchwellwert >200 OR usiSchwellwert <100 THEN usiSchwellwert:= 150; END_IF (*Schaltpunkte berechnen, Hysterese=50*) usiEinschaltpunkt:= usiSchwellwert 25; usiAusschaltpunkt:= usiSchwellwert + 25; (*schalten*) IF usiHelligkeit > usiAusschaltpunkt THEN xOut:= FALSE; END_IF; IF usiHelligkeit < usiEinschaltpunkt THEN xOut:= TRUE; END_IF; |
||
| Übung 4.3 | Kompensationsanlage PROGRAM PLC_PRG VAR (*rQ eingeben, xQ1..xQ3 beobachten*) rQ:REAL:= 1500.0; (*Testwert*) xQ1, xQ2, xQ3:BOOL; END_VAR IF rQ < 1000.0 THEN xQ3:= FALSE; xQ2:= FALSE; xQ1:= FALSE; ELSIF rQ < 2000.0 THEN xQ3:= FALSE; xQ2:= FALSE; xQ1:= TRUE; ELSIF rQ < 3000.0 THEN xQ3:= FALSE; xQ2:= TRUE; xQ1:= TRUE; ELSE xQ3:= TRUE; xQ2:= TRUE; xQ1:= TRUE; END_IF; |
||
| Übung 4.4 | Zähler PROGRAM PLC_PRG (* Vorwärtszähler eng. Counter up *) VAR CU AT %IX2.1 :BOOL;(*Zähleingang- count up*) CV :INT;(*aktueller Zählwert-countervalue*) PV :INT:= 10;(*Vorgabewert-presetvalue*) CU_flanke,xGedaechtnis :BOOL; Q AT %Q0.0 :BOOL; END_VAR (*steigende Flanke erkennen*) CU_flanke:= CU AND NOT xGedaechtnis; xGedaechtnis:= CU; (*vorwärts zählen*) IF CU_flanke THEN CV:= CV + 1; END_IF Q:= CV >= PV; |
||
| Aufgabe 4.2 | Multiplexer PROGRAM PLC_PRG (****************************************** Geben Sie zum Testen in mw_1...mw_3 Werte vor Geben Sie in der Visu die Schalterstelung 1... ein Beurteilen Sie das Ergebniss *******************************************) VAR iSel:INT; mw_1 AT %IW?:INT;(* ? = abhängig von der Gerätekonfiguration *) mw_2 AT %IW?:INT; mw_3 AT %IW?:INT; rOut:REAL; END_VAR CASE iSel OF 1: rOut:=INT_TO_REAL(mw_1)/3276.0; 2: rOut:=INT_TO_REAL(mw_2)/3276.0; 3: rOut:=INT_TO_REAL(mw_3)/3276.0; ELSE rOut:=0.0; END_CASE; |
||
| Übung 4.5 | Autowaschanlage PROGRAM PLC_PRG (*Autowaschanlage, ablauforientiert programmiert*) VAR step_no:USINT:=0;(*Schrittnummer*) S1_start AT %IX0.0: BOOL;(*Start-Taste*) B1_pos_vorw AT %IX0.1: BOOL;(*Endschalter*) B2_pos_hauptw AT %IX0.2: BOOL;(*Endschalter*) B3_pos_trock AT %IX0.3: BOOL;(*Endschalter*) B4_pos_ende AT %IX0.4: BOOL;(*Endschalter*) P1_startbereit AT %QX0.0: BOOL;(*Anzeige*) Q1_Band AT %QX0.2: BOOL;(*Bandantrieb*) M1_Vorw AT %QX0.3: BOOL;(*Ventil*) M2_Q2_Hauptw AT %QX0.4: BOOL;(*Ventil+Bürsten*) Q3_Trockner AT %QX0.5: BOOL;(*Trocknerantrieb*) END_VAR CASE step_no OF 0: Q1_Band: = FALSE; Q3_Trockner:= FALSE; P1_startbereit:= TRUE; IF S1_start THEN step_no:= step_no + 1; END_IF; 1: P1_startbereit:= FALSE; Q1_Band:= TRUE; IF B1_pos_vorw THEN step_no:= step_no + 1; END_IF; 2: M1_Vorw:= TRUE; IF B2_pos_hauptw THEN step_no:= step_no + 1; END_IF; 3: M1_Vorw:= FALSE; M2_Q2_Hauptw:= TRUE; IF B3_pos_trock THEN step_no:= step_no + 1; END_IF; 4: M2_Q2_Hauptw:= FALSE; Q3_Trockner:= TRUE; IF B4_pos_ende THEN step_no:= 0; END_IF; END_CASE; |
||
| Aufgabe 4.3 | Meldung, String PROGRAM PLC_PRG (*usiMWert ändern, sMeldung beobachten*) VAR usiMWert :USINT:= 5;(*Testwert*) sMeldung :STRING; END_VAR CASE usiMWert OF 0..10 : sMeldung:= 'Temperatur zu niedrig'; 11..15: sMeldung:= 'Temperatur etwas hoch fahren'; 16 : sMeldung:= 'Temperatur ok'; 17..20: sMeldung:= 'Temperatur etwas herunter fahren'; ELSE sMeldung:= 'Temperatur zu hoch'; END_CASE; |
||
| Übung 4.6 | Füllstand, Frequenzumrichter PROGRAM PLC_PRG (*Zum Testen den Füllstand ändern*) VAR wHoehe AT %IW0:WORD; (*Füllstand 0...32760) usiHoehe:USINT;(*Füllstand in %*) wSollwert AT %QW0:WORD; led_gruen, led_gelb, led_rot:BOOL; END_VAR usiHoehe:= WORD_TO_USINT(wHoehe*100/32760); CASE usiHoehe OF 0..25 : wSollwert:= 0;(*0V*) led_gruen:= TRUE; led_gelb:= FALSE; led_rot:= FALSE; 26..50: wSollwert:= 8192;(*2,5V*) led_gruen:= TRUE; led_gelb:= FALSE; led_rot:= FALSE; 51..75 : wSollwert:= 16384;(*5V*) led_gruen:= FALSE; led_gelb:= TRUE; led_rot:= FALSE; ELSE wSollwert:= 32767;(*10V*) led_gruen:= FALSE; led_gelb:= FALSE; led_rot:= TRUE; END_CASE; |
||
| Aufgabe 4.4 | Funktion "2 aus 3" mit
CASE-Anweisung PROGRAM PLC_PRG (*Funktion(2aus3)%I2.0...I2.2 ändern, %Q0.0 beobachten*) VAR bSensoren AT %IB4: BYTE;(*Sensoreingänge*) usiSensoren: USINT; xP1 AT %QX0.0: BOOL; END_VAR (*Bit3..7 ausmaskieren und in USINT umwandeln*) usiSensoren:= BYTE_TO_USINT(bSensoren AND 2#0000_0111); CASE usiSensoren OF 3,5,6,7 : xP1:= TRUE; ELSE xP1:= FALSE; END_CASE; |
||
| Bandanlage | Speichernd ein/aus Lösung |
||
© Vogel Buchverlag |
|||