SPS- Programmierung mit ST

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

Lösungen Kapitel 3, Datentypen, Codierung für CODESYS V2.3 (WAGO I/O Pro)

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


Aufgabe 3.1 Sensorgruppen

PROGRAM PLC_PRG
VAR
(* Adr. ist abhängig von der Gerätekonfiguration *)
 bySensorgruppe1 AT %IB1:BYTE;
 bySensorgruppe2 AT %IB2:BYTE;
 byErgebnis AT %QB0:BYTE;
END_VAR
byErgebnis:= bySensorgruppe1 XOR bySensorgruppe2;
  
Aufgabe 3.2 Maske

PROGRAM PLC_PRG
VAR
 wIn AT %IW1:WORD;
 wMaske:WORD:= 2#0000_1111_0000_0001;
 wOut AT %QW0:WORD;
END_VAR
wOut:=wIn AND wMaske;
  
Aufgabe 3.3 Funktion 2 aus 3

PROGRAM PLC_PRG
(******************************************************************
Datentypenumwandlung, Vergleichsoperator: Funktion 2 aus 3

Verändern Sie die Werte von xB1 ... xB3 nach dem Einloggen und Start,
xP1 wird TRUE bzw. FALSE.
*******************************************************************)
VAR
 xB1 AT %IX2.0:BOOL; xB2 AT %IX2.1:BOOL; xB3 AT %IX2.2:BOOL;
 xP1 AT %QX0.1:BOOL;(*Anzeige*)
END_VAR

xP1:= BOOL_TO_USINT(xB1)+ BOOL_TO_USINT(xB2)+ BOOL_TO_USINT(xB3)>= 2;
  
Aufgabe 3.4 Bitmuster und Wert

PROGRAM PLC_PRG
(******************************************************************
Bitmuster und Wert, Datentyp, Datentypumwandlung, Maske

Verändern Sie den Wert von iIn -32768...32767 nach dem
Einloggen und Start, beobachten Sie wIn und xP1_neg.
Wählen Sie über Menü Debug-Darstellung auch Binär.
*******************************************************************)
VAR
 iIn AT %IW0:INT;(*eingeben*)
 wIn:WORD;(*beobachten*)
 xP1_neg AT %QX0.0:BOOL;(*ist negativ*)
END_VAR

wIn:=INT_TO_WORD(iIn);
(*iIn positiv oder negativ*)
(*ausmaskieren*)
xP1_neg:= WORD_TO_BOOL(wIn AND 16#8000);
  
Aufgabe 3.5 Analogwertverarbeitung 1
  
Lösung 1
  
PROGRAM PLC_PRG
(*Zum Test Wert von rIn verändern*)
(*Wandelt -1…1 in -32767…32767*)
VAR
 rIn:REAL;(*-1.0 ... 1.0*)
 iOut AT %QW0:INT;
 wOut:WORD;
 xP1_neg AT %QX2.0:BOOL;
END_VAR

iOut:= REAL_TO_INT(rIn * 32767.0);
wOut:= INT_TO_WORD(iOut);
(*Anzeige:Wert ist negativ*)
xP1_neg:=WORD_TO_BOOL(wOut AND 16#8000);
  
Lösung 2

PROGRAM PLC_PRG
(********************************
Lösung mit Vergleichsoperator,
ohne Maske.
Zum Test Wert von rIn verändern
Wandelt 0...1 in 0...32767.
*********************************)
VAR
 rIn:REAL;(*0 ... 1.0*)
 iOut AT %QW0:INT;(*0 ... 32767*)
 wOut: WORD;
 xP1_neg AT %QX2.0: BOOL;
END_VAR

iOut:= REAL_TO_INT(rIn * 32767.0);
(*Anzeige:Wert ist negativ*)
xP1_neg:=iOut < 0;
Aufgabe 3.6 a) Eindimensionale Feldvariable, ARRAYS

PROGRAM PLC_PRG
(******************************************************************
Eindimensionale Feldvariable, ARRAY

Zeigt wie eine eindimensionale Feldvariable deklariert und auf Sie
zugegriffen wird.
*******************************************************************)
VAR
 iPosition: ARRAY[0..4] OF REAL:= -10.5, 20.2, 35.3, 40.0, 55.5;
 iAnfangsposition, iEndposition: REAL;
END_VAR

(*Werte aus der Feldvariable auslesen*)
iAnfangsposition:= iPosition[0];(*Wert = .....*)
iEndposition:= iPosition[4];
  
b) Zweidimensionale Feldvariable, ARRAY
  
PROGRAM PLC_PRG
(*****************************************************
Zweidimensionale Feldvariable, ARRAY

Zeigt wie eine zweidimensionalen Feldvariable
deklariert und auf Sie zugegriffen wird.
******************************************************)
VAR
 iRegal: ARRAY[1..4, 1..3] OF INT:= 5, 45, 2,
                                    8, 67, 5,
                                   10, 1, 3,
                                    9, 23, 4;
 iID_Nr1, iID_Nr2: INT;
END_VAR

(*Werte aus der Feldvariable auslesen*)
iID_Nr1:= iRegal[1,1];(*iID_Nr1= .....*)
iID_Nr2:= iRegal[3,2];(*iID_Nr2= .....*)
  
Aufgabe 3.7 Ausgangsbyte abhängig vom Eingangsbyte steuern

PROGRAM PLC_PRG
(******************************************************************
Ausgangsbyte abhängig vom Eingangsbyte steuern, ARRAY, Datentypen-
umwandlung, Maske
Verändern Sie die zwei niederwertigsten Bits von byIn nach dem
Einloggen und Start, beobachten Sie byOut.
*******************************************************************)
VAR
 byIn AT %IB4:BYTE;
 byOut:BYTE;
 index:INT;
 out:ARRAY [0..3] OF BYTE:= 16#04,16#03,16#03,16#05;
 xOut0 AT %QX0.0:BOOL; xOut1 AT %QX0.1:BOOL; xOut2 AT %QX0.2:BOOL;
END_VAR
index:= BYTE_TO_INT(byIn AND 2#0000_0011);
byOut:= out[index];
xOut0:=byOut.0; xOut1:=byOut.1; xOut2:=byOut.2;
  
Übung 3.2 Analogwertverarbeitung 2, Skalieren

PROGRAM PLC_PRG
(******************************************************************
Datentypenumwandlung, Skalieren von 0...32760 nach 0...1.0

Verändern Sie die Werte von iTemp_in nach dem Einloggen und Start,
beobachten Sie rTemp_out.
*******************************************************************)
VAR
 iTemp_in: INT;
 rTemp_out: REAL;
END_VAR
rTemp_out:= INT_TO_REAL(iTemp_in) / 327.6;
  
Übung 3.3 Bahnkorrektur mit ARRAY

PROGRAM PLC_PRG
(******************************************************************
Bahnkorrektur mit ARRAY: Datentypenumwandlung, Maske.
Einem bestimmten Eingangsbitmuster wird eine Ausgangsbitmuster
nach einer Funktionstabelle zugeordnet.

Verändern Sie die Bits 0...2 von Sensoren (Menü Debug-Darstellung)
nach dem Einloggen und Start, beobachten Sie die Bits von Ausgaenge.
*******************************************************************)
VAR
 bSensoren AT %IB4:BYTE; bOut:Byte; i:INT;
 xAlarm AT %QX0.0:BOOL; xOk AT %QX0.1:BOOL;
 xRe AT %QX0.2:BOOL; xLi AT %QX0.3:BOOL;
 out_tab:ARRAY[0..7] OF BYTE:=
                              2#0000_0001,
                              2#0000_0100,
                              2#0000_0010,
                              2#0000_0100,
                              2#0000_1000,
                              2#0000_0001,
                              2#0000_1000,
                              2#0000_0001;
END_VAR
i:=BYTE_TO_INT(bSensoren AND 2#0000_0111);
bOut:= out_tab[i];
xAlarm:= bOut.0; xOk:= bOut.1;
xRe:= bOut.2; xLi:= bOut.3;
  
Bandanlage Lösung

© Vogel Buchverlag