SPS- Programmierung mit ST

nach IEC 61131 mit CODESYS V2.3, CODESYS V3, e!COCKPIT

Lösungen Kapitel 5 Kontrollstrukturen-Schleifen für CODESYS V3 oder e!COCKPIT ,  für CoDeSys V2.3

  Kopieren Sie den Programmcode und fügen Sie diesen in Ihre Entwicklungsumgebung ein.
  


Aufgabe 5.1 a) Impedanzberechnung in einer Tabelle mit der FOR-Schleife

PROGRAM PLC_PRG
VAR
 index:INT;(*Laufvariable*)
 U:REAL:=10.0;
 I:ARRAY[1..5] OF REAL;
 Z:ARRAY[1..5] OF REAL;
 a:REAL;
END_VAR
FOR index:=1 TO 5 DO
 I[index]:= INT_TO_REAL(index);
 Z[index]:= U/I[index];
END_FOR;
a:=Z[3];
  
b)

PROGRAM PLC_PRG
VAR
 index:USINT;(*Laufvariable*)
 U:REAL:=10.0;
 I:ARRAY[1..6] OF REAL;
 Z:ARRAY[1..6] OF REAL;
END_VAR
FOR index:=2 TO 12 BY 2 DO
 I[index/2]:= USINT_TO_REAL(index);
 Z[index/2]:= U/I[index/2];
END_FOR;
  
Übung 5.1 Messstellen, Mittelwertberechnung mit der FOR-Schleife

PROGRAM PLC_PRG
(*Mittelwert von %IW0...%IW5 berechnen*)
Geben Sie während der Laufzeit in der
Steuerungskonfiguration Werte 0...32760 ein*)
VAR
 iMw AT %IW0: ARRAY[0..5] OF INT;
 i:INT; (*Index*)
 rMesswert: ARRAY[0..5] OF REAL;
 rMittelwert, rSumme:REAL;
END_VAR
(*Messwerte berechnen*)
rSumme:= 0.0;
FOR i:= 0 TO 5 DO
 rMesswert[i]:= iMw[i] * 100 / 32760.0; (*Implizierte Typenumwandlung*)
 rSumme:= rSumme + rMesswert[i];
END_FOR;
(*Mittelwert berechnen*)
rMittelwert:= rSumme / i; (*Implizierte Typenumwandlung*)
  
Aufgabe 5.2 Impedanzberechnung in einer Tabelle mit der WHILE-Schleife

PROGRAM PLC_PRG
VAR
 index:INT;(*Laufvariable*)
 U:REAL:= 10.0;
 I:ARRAY[1..5] OF REAL;
 Z:ARRAY[1..5] OF REAL;
 a:INT;
END_VAR
index:= 1;
WHILE index < 6 DO
 I[index]:= index;
 Z[index]:= U / I[index];
 index:= index + 1;
END_WHILE;
a:=index;
  
Aufgabe 5.3 Watchdog

PROGRAM PLC_PRG
VAR
 S1:BOOL;(*Schalter*)
 Q1:BOOL;
 iVar:INT;
END_VAR
WHILE S1 = TRUE DO
 Q1 := TRUE;
END_WHILE;
iVar := iVar+1;
Q1 := FALSE;
  
Aufgabe 5.4 Impedanzberechnung in einer Tabelle mit der REPEAT-Schleife

PROGRAM PLC_PRG
VAR
 index:INT;(*Laufvariable*)
 U:REAL:= 10.0;
 I:ARRAY[1..5] OF REAL;
 Z:ARRAY[1..5] OF REAL;
 a:INT;
END_VAR
index :=1;
REPEAT
 I[index] := index;
 Z[index] := U / I[index];
 index := index + 1;
 UNTIL index > 5
END_REPEAT;
a:=index;
  
Übung 5.2 Mit REPEAT, Sortieren von Zahlen nach dem "Bubble Sort"-Verfahren

PROGRAM PLC_PRG
(*Sortieren nach dem "Bubble Sort" Verfahren*)
VAR CONSTANT
 iMax: INT:= 3;
END_VAR
VAR
 xSortieren, xTauschen: BOOL;
 i, iTauschplatz: INT;
 iPlatz: ARRAY[0..imax] OF INT:= [3,2,4,1];
END_VAR
IF xSortieren THEN
 REPEAT
  xTauschen := FALSE;
  FOR i:= iMax TO 1 BY -1 DO
   IF iPlatz[i-1] > iPlatz[i]THEN
    iTauschplatz:= iPlatz[i];
    iPlatz[i]:= iPlatz[i-1];
    iPlatz[i-1]:= iTauschplatz;
    xTauschen:= TRUE;
   END_IF;
  END_FOR;
 UNTIL NOT xTauschen
 END_REPEAT;
END_IF
  
Mit WHILE, Sortieren von Zahlen nach dem "Bubble Sort"-Verfahren

PROGRAM PLC_PRG
(*Sortieren nach dem "Bubble Sort" Verfahren*)
VAR CONSTANT
 iMax: INT:=3;
END_VAR
VAR
 xSortieren, xTauschen: BOOL;
 i, iTauschplatz: INT;
 iPlatz: ARRAY[0..imax] OF INT:= [3,2,4,1];
END_VAR
IF xSortieren THEN
 xTauschen:= TRUE;
 WHILE xTauschen DO
  xTauschen := FALSE;
  FOR i:= iMax TO 1 BY -1 DO
   IF iPlatz[i-1] > iPlatz[i]THEN
    iTauschplatz:= iPlatz[i];
    iPlatz[i]:= iPlatz[i-1];
    iPlatz[i-1]:= iTauschplatz;
    xTauschen:= TRUE;
   END_IF;
  END_FOR;
 END_WHILE;
END_IF
Übung 5.3 Dezimalzahl -> Dualzahl

PROGRAM PLC_PRG
(*Dezimalzahl -> Dualzahl*)
VAR
 usiEingabe_zahl :USINT := 10;
 usiZahl ,i, usiRest :USINT;
 usiOut : ARRAY[0..7] OF USINT;
END_VAR
FOR i:= 0 TO 7 DO
 usiOut[i]:= 0;
END_FOR;
i:= 0;
usiZahl:= usiEingabe_zahl;
REPEAT
 usiRest:= usiZahl MOD 2;
 usiOut[i]:= usiRest;
 usiZahl:= usiZahl/2;
 i:=i + 1;
 UNTIL usiZahl = 0
END_REPEAT;
  
Aufgabe 5.5 a) FOR-Schleife in FOR-Schleife

PROGRAM PLC_PRG
VAR
 i,k,a,b:USINT;
 M:ARRAY[0..2,0..7] OF BOOL;
END_VAR
IF M[2,7]=FALSE THEN
 FOR i:=0 TO 7 DO
  FOR k:=0 TO 2 DO
   IF (i<2 OR i=4) THEN EXIT;
   END_IF;
   M[k,i]:=TRUE;
  END_FOR;
 END_FOR;
END_IF;
a:=i;b:=k;
  
b) FOR-Schleife in FOR-Schleife mit EXIT

PROGRAM PLC_PRG
VAR
 i,k,a,b:USINT;
 M:ARRAY[0..2,0..7] OF BOOL;
END_VAR
IF M[2,7]=FALSE THEN
 FOR i:=0 TO 7 DO
  FOR k:=0 TO 2 DO
   IF (i<2 OR i=4) THEN EXIT;
   END_IF;
   M[k,i]:=TRUE;
  END_FOR;
 END_FOR;
END_IF;
a:=i;b:=k;

c) CONTINUE

PROGRAM PLC_PRG
(********************************************************
Bitmuster in ein Datenfeld schreiben,
Schleife mit CONTINUE oder EXIT
*********************************************************)
VAR
 S1:BOOL; i:INT;
 M:ARRAY[0..7] OF BOOL;
END_VAR
IF S1 THEN
  FOR i:=0 TO 7 DO
   IF (i=2 OR i=4) THEN CONTINUE; END_IF;
    M[i]:= TRUE;
  END_FOR;
 ELSE
  FOR i:=0 TO 7 DO
   M[i]:= FALSE;
  END_FOR
END_IF;
  

Übung 5.4 Kennwort-Abfrage mit REPEAT-Schleife und EXIT

PROGRAM PLC_PRG
(*Eingabe mit Liste vergleichen*)
VAR
 sEingabe:STRING:= 'a'; Index:INT;
 sKennwort:ARRAY[1..6] OF STRING:=['a','b','c','d','e','f'];
 xKw_nicht_gefunden:BOOL;
END_VAR
Index:= 0;
REPEAT
 Index:= Index + 1;
 IF Index > 6 THEN EXIT;
 END_IF;
 UNTIL Index > 6 OR sKennwort[Index]= sEingabe
END_REPEAT;
IF Index > 6 THEN
  xKw_nicht_gefunden:= TRUE;
 ELSE
  xKw_nicht_gefunden:= FALSE;
END_IF;
  
Übung 5.4 Kennwort-Abfrage mit der WHILE-Schleife

...
Index:= 1;
WHILE Index <= 6 AND sKennwort[Index]<> sEingabe DO
 Index:= Index + 1;
END_WHILE;
....
  

© Vogel Buchverlag