SPS- Programmierung mit ST

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

Vorlagen Kapitel 11  Bibliotheksfähige Funktionsblöcke (FBs), CRAFCET

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


Aufgabe 11.3 Temperaturregelung, PID-Reglerbaustein

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<1 OR N>255 THEN
  N:= 1;
  FAULT:= TRUE;
 ELSE
  FAULT:= FALSE;
END_IF;
OUT:=((IN-OUT)/N)+ OUT;

FUNCTION_BLOCK PT2 (*Strecke mit Ausgleich*)
VAR_INPUT
 Y:REAL;(*Stellwert*)
 N:USINT:= 30;(*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;
  

Übung 11.1 Zahl erraten

PROGRAM PLC_PRG
(*********************************************************************
Funktion:
Es wird eine Zufallszahl erzeugt die durch Eingabe zu erraten ist.
Bibliothek: oscat_basic_333.library-> RDM(0),Version: 1.0, Datum: .....
**********************************************************************)
VAR
 Zufallszahl: USINT;
 Eingabezahl: USINT;(*Visu*)
 Meldung: STRING;
 Meld_ok:STRING:='Die Zahl ist richtig!';
 Meld_gr:STRING:='Die Zahl ist zu groß!';
 Meld_kl:STRING:='Die Zahl ist zu klein!';
 richtig: BOOL:=TRUE;(*Visu*)
 go: BOOL;(*Taster in der Visu "Neue Zahl"*)
 Versuche: INT;(*Anzahl der Versuche*)
 Eingabezahl_alt: USINT;
END_VAR
  

Aufgabe 11.3 Würfelspiel PIG

Die Importdatei auf InfoClick enthält noch eine Visualisierung

PROGRAM PLC_PRG
(***********************************************************
PIG Würfelspiel für zwei Spieler
Bibliothek: oscat_basic_333.library-> RDM(0)
************************************************************)
VAR
 instPIG1, instPIG2:PIG;
 xSpieler, xNeuesSpiel:BOOL; (*Schalter Visu*)
END_VAR
(*Spieler 1*)

(*Spieler 2*)

Lösungsvariante 1 mit Hilfe des PAP

FUNCTION_BLOCK PIG
VAR_INPUT
 xSPIELEN, xWUERFELN, xNEUES_SPIEL:BOOL;
END_VAR
VAR_OUTPUT
 usiWUERFELZAHL: USINT;
 uiSPIELSTAND:UINT;
END_VAR
VAR
 instWUERFELN_TRIG:R_TRIG;
 usiWuerfelzahlNeu: USINT;
END_VAR

Lösungsvariante 2 mit Hilfe des GRAFCETs

FUNCTION_BLOCK PIG
VAR_INPUT
 xSPIELEN, xWUERFELN, xNEUES_SPIEL:BOOL;
END_VAR
VAR_OUTPUT
 usiWUERFELZAHL: USINT;
 uiSPIELSTAND: UINT;
END_VAR
VAR
 usiSchrittNr:USINT;
 instWUERFELN_TRIG_R:R_TRIG;
 instWUERFELN_TRIG_F:F_TRIG;
END_VAR

FUNCTION FC_ZUFALLSZAHL : USINT
(******************************************
Zahl 1...6 erzeugen
Bibliothek: oscat_basic_333.library-> RDM(0)
*******************************************)
VAR

END_VAR
  

Übung 3 Fragen - Antworten

PROGRAM PLC_PRG
(**************************************************************************
Frage-Antwort
Öffnen Sie nach dem Einloggen und Start
die Visualisierung und klicken Sie auf "Frage" ..."Antwort"
***************************************************************************)
VAR
Frage:ARRAY[1..17] OF STRING:=[
'Wie wird der Programmbaustein PLC_PRG standardmäßig aufgerufen?',
'Das Zuweisungszeichen im Programm ist ... ',
'Der Wertebereich einer Variablen wird festgelegt mit ...',
'VAR, END_VAR, BOOL, FALSE ... sind ...',
'Der Datentyp USINT kann Werte annehmen bis ...',
'Die WHILE-Schleife erlaubt die wiederholte Ausführung einer Anweisungsfolge ...',
'Mit der Modulo-Division MOD wird ...',
'Mit der Anweisung EXIT können Sie ...',
'Mit der Anweisung RETURN wird ...',
'Unterprogramme werden im Hauptprogramm ...',
'Anwenderdefinierte Datentypen (DUT) setzt sich aus ...',
'Bei TIME und TIME_OF_DAY wird die Zeit in ...',
'Eine Funktion ist ein Codebaustein ohne ...',
'Der Parameter, der dem "PT" der Instanz vom TON übergeben wird, ist vom Datentyp',
'Der GRAFCET ist eine ...',
'R_TRIG ist ein Systemfunktionsbaustein; er erzeugt bei einer ...',
'Um Bausteine aus einer Bibliothek benutzen zu können, muss ...'];

Antwort:ARRAY[1..17] OF STRING:=[
'Freilaufend zyklisch.',
'der Doppelpunkt und das Gleichheitszeichen.',
'dem Datentyp der Variablen.',
'Schlüsselwörter.',
'255.',
'unter Kontrolle einer Durchführungsbedingung am Anfang der Schleife.',
'der Rest der Division ermittelt.',
'eine Schleife verlassen.',
'der Software-Baustein (POE) ohne Bedingung verlassen.',
'nacheinander aufgerufen.',
'Standard-Datentypen zusammen.',
'Millisekunden angegeben, wobei bei TOD ab 00:00 Uhr gerechnet wird.',
'Gedächtnis mit einem Rückgabewert.',
'TIME.',
'Spezifikationssprache für Ablaufsteuerungen',
'positiven Flanke am CLK-Parameter einen Zyklus lang am Q den Wert TRUE.',
'die Bibliothek im Projekt über die Bibliotheksverwaltung eingebunden werden.'];

S1Visu, S2Visu:BOOL; Zufallszahl:USINT; sFrage, sAntwort:STRING;
END_VAR

IF S1Visu THEN
 Zufallszahl:= FC_ZUFALLSZAHL(usiAnzahl:= 17) ;
 sFrage:=Frage[Zufallszahl];
 sAntwort:='';
END_IF;
IF S2Visu THEN
 sAntwort:=Antwort[Zufallszahl];
END_IF;

FUNCTION FC_ZUFALLSZAHL : USINT
(*Zahl 1...usiAnzahl erzeugen*)
VAR_INPUT
 usiAnzahl:USINT;
END_VAR;
VAR
 usiZufallszahl: USINT;
END_VAR

WHILE usiZufallszahl < 1 OR usiZufallszahl > usiAnzahl DO
 usiZufallszahl:= REAL_TO_USINT( OSCAT_BASIC.RDM(last:= 0.0 ) *10.0);
END_WHILE;
FC_ZUFALLSZAHL:= usiZufallszahl;


© Vogel Buchverlag