23.12.2012 Aufrufe

4. Einstieg in das IEC-Programmiersystem CoDeSys - B.Eng ...

4. Einstieg in das IEC-Programmiersystem CoDeSys - B.Eng ...

4. Einstieg in das IEC-Programmiersystem CoDeSys - B.Eng ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Grundlagen der Automatisierungstechnik I<br />

<strong>4.</strong> <strong>E<strong>in</strong>stieg</strong> <strong>in</strong> <strong>das</strong> <strong>IEC</strong>-<strong>Programmiersystem</strong> <strong>CoDeSys</strong><br />

<strong>CoDeSys</strong>: Controller Development System (Entwicklungssystem für Automatisierungs-Systeme)<br />

<strong>4.</strong>1 Schlüsselworte und Bezeichner<br />

Schlüsselwörter s<strong>in</strong>d Zeichenkomb<strong>in</strong>ationen, die ke<strong>in</strong>e e<strong>in</strong>gebetteten Leerzeichen enthalten dürfen.<br />

Schlüsselwörter s<strong>in</strong>d festgelegt und dürfen für ke<strong>in</strong>en anderen Zweck (z.B. als Variablennamen!)<br />

benutzt werden. Schlüsselworte werden grundsätzlich mit Großbuchstaben geschrieben!<br />

Beispiele für Schlüsselworte: ACTION...END_ACTION ; ARRAY...OF ; AT<br />

Bezeichner können frei gewählt werden. Sie s<strong>in</strong>d e<strong>in</strong>e Folge von Buchstaben, Ziffern und<br />

Unterstrichzeichen ( _ ). Sie müssen mit e<strong>in</strong>em Buchstaben oder Unterstrichzeichen beg<strong>in</strong>nen.<br />

Mehrere voranstehende und mehrfach e<strong>in</strong>gebettete Unterstriche s<strong>in</strong>d unzulässig. Außerdem dürfen<br />

Bezeichner ke<strong>in</strong>e Leerstellen enthalten. Zum<strong>in</strong>dest sechs Zeichen müssen <strong>in</strong> sämtlichen Systemen<br />

unterstützt werden.<br />

Beispiel e<strong>in</strong>es Bezeichners: VENTIL_6<br />

-> hierzu Anhang: Schlüsselworte, Bezeichner und Literale<br />

<strong>4.</strong>2 Beschreibung der Struktur von Automatisierungssystemen<br />

Wie bereits <strong>in</strong> den Grundlagen Abschnitt 1.5.5 ausgeführt, gibt es <strong>in</strong> Automatisierungssystemen zu<br />

konfigurierende Elemente und zu programmierende Elemente.<br />

E<strong>in</strong> Softwaremodell nach <strong>IEC</strong> 61131-3 muss selbstverständlich Strukturen und Funktionen von<br />

Automatisierungssystemen über die Grenzen von E<strong>in</strong>-Prozessor-Programmen h<strong>in</strong>aus<br />

ermöglichen, beispielsweise <strong>das</strong> Multi-Task<strong>in</strong>g e<strong>in</strong>er CPU oder die Zusammenarbeit mehrerer CPU<br />

oder die Zusammenarbeit vernetzter Systeme.<br />

Dazu werden<br />

• die Ressourcen der Automatisierungssysteme per Software konfiguriert<br />

• die Programme <strong>in</strong> Programmorganisationse<strong>in</strong>heiten (POE's) gegliedert<br />

Die zu konfigurierenden Elemente s<strong>in</strong>d z.B. die Ressourcen, die Task's, globale Variablen, die über<br />

Resourcengrenzen wirken, Kommunikationspfade u.a. Die Begriffe zur Strukturierung der Software<br />

<strong>in</strong> Automatisierungssystemen zeigt nachfolgendes Schema.<br />

Konfigurationselemente<br />

Konfiguration<br />

Resourcen<br />

Task oder<br />

Laufzeitprogramm<br />

POE<br />

POE<br />

POE<br />

Gesamtsystem, z.B. mit 3 CPU<br />

Diese 3 CPU’s bilden die Resourcen des<br />

Systems<br />

E<strong>in</strong>zelne CPU<br />

Die Resourcen arbeiten im Gesamtsystem<br />

zusammen<br />

Lauffähiges Programm als E<strong>in</strong>heit oder aber <strong>in</strong><br />

Teile<strong>in</strong>heiten oder Task gegliedert<br />

Bauste<strong>in</strong>e der Programme, die den Resourcen<br />

oder Task’s von Resourcen zugeordnet s<strong>in</strong>d<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-1<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Wenn auf e<strong>in</strong>er Hardwareumgebung mehrere Programme unabhängig vone<strong>in</strong>ander und gleichzeitig<br />

laufen, muss den Programmen<br />

• e<strong>in</strong>e bestimmte Rechenzeit auf e<strong>in</strong>er bestimmten Hardware und / oder<br />

• e<strong>in</strong>e Priorität und e<strong>in</strong>e Startbed<strong>in</strong>gung (zyklisch oder Interrupt)<br />

zugeteilt werden.<br />

Dann müssen Variablen häufig von mehreren Programmen gleichzeitig genutzt werden können.<br />

Die notwendigen Informationen über die Systeme und ihr Zusammenwirken werden <strong>in</strong> e<strong>in</strong>e<br />

Konfiguration mit dem Schlüsselwort CONFIGURATION geschrieben. Nachfolgender Kasten zeigt<br />

e<strong>in</strong> formales Beispiel, wie solche Konfigurationen mit entsprechenden Schlüsselwörtern beschrieben<br />

werden.<br />

Wichtig <strong>in</strong> diesem Zusammenhang ist der Begriff „Laufzeitprogramm“. Darunter versteht man e<strong>in</strong><br />

Gesamtprogramm mit Laufzeit-Eigenschaften, bestehend aus sämtlichen benötigten POE's und allen<br />

Task. Mit dieser Def<strong>in</strong>ition ist e<strong>in</strong> Laufzeitprogramm e<strong>in</strong>e <strong>in</strong> sich abgeschlossene Programme<strong>in</strong>heit, die<br />

selbständig <strong>in</strong> e<strong>in</strong>er CPU ablaufen kann.<br />

E<strong>in</strong> Automatisierungssystem kann aus mehreren multitask-fähigen CPU's sowie Spezialkomponenten<br />

(-> Rechner-Ressourcen) bestehen.<br />

Variablen vom Typ ACCESS werden benutzt, um Kommunikationskanäle zwischen Ressourcen zu<br />

beschreiben.<br />

CONFIGURATION Autom_Qualitaetsüberwachung<br />

VAR_GLOBAL<br />

Auftrag:INT;<br />

Qualitätskennziffer:REAL;<br />

END_VAR<br />

RESSOURCE CPU_1<br />

TASK Task_1 (Intervall:=t#20s, PRIORITY:=5)<br />

TASK Task_2 (S<strong>in</strong>gle:=z2, PRORITY:=1)<br />

PROGRAMM Überwachung<br />

END_RESSOURCE<br />

RESOURCE CPU_2<br />

TASK Task_2 (S<strong>in</strong>gle:=z3, PRORITY:=2)<br />

PROGRAMM Auswertung<br />

PROGRAMM Störungsmeldung<br />

END_RESOURCE<br />

VAR_ACCESS<br />

QUALITAET: RESSOURCE CPU_ 1.%QW2 :WORD ;<br />

END_VAR<br />

END_CONFIGURATION<br />

Die Konfiguration ist der POE-Ebene grundsätzlich übergeordnet.<br />

Falls e<strong>in</strong>e Konfiguration nur e<strong>in</strong>e e<strong>in</strong>zige Ressource besitzt, kann man auf die Angabe derselben<br />

verzichten. Dies ist bei e<strong>in</strong>fachen Systemen der Normalfall! Die Konfigurationen größerer Systeme<br />

bleibt deshalb Aufgabe weiterführenden Lehrveranstaltungen.<br />

Achtung!<br />

Die Programmieroberfläche <strong>CoDeSys</strong> stellt Tools für nachfolgend farbig gekennzeichnete<br />

Aufgaben zur Verfügung. Sie beg<strong>in</strong>nen mit der Gestaltung e<strong>in</strong>es Projektes, erlauben aber mit<br />

den Software-Werkzeugen unter „Ressourcen“ auch e<strong>in</strong>e Reihe von Konfigurationen.<br />

Der hierarische Aufbau Konfiguration – Ressource – Laufzeitprogramm nach Bild 3-1 ist<br />

allerd<strong>in</strong>gs nicht erkennbar, zumal der Begriff Ressourcen hier im S<strong>in</strong>ne von „verfügbaren<br />

Werkzeugen“ für Konfigurationen verwendet wird.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-2<br />

Autor: Dr. Becker 03_2008


Konfiguration 1<br />

Projekt<br />

Objekte<br />

Bauste<strong>in</strong>e Datentypen<br />

Programmorganisa-<br />

tionse<strong>in</strong>heiten POE<br />

POE FC<br />

POE<br />

Programm<br />

POE FB<br />

Grundlagen der Automatisierungstechnik I<br />

Automatisierungssystem<br />

Konfig. 2<br />

Konfig. 3<br />

Konfig. n<br />

Projekt 1 Projekt 2 Projekt n<br />

Bibliotheken <br />

Visualisiesierungen<br />

Bild 4-1: Das <strong>Programmiersystem</strong>s <strong>CoDeSys</strong> bietet<br />

u.a. auch Tools für die Konfiguration von Automatisierungssystemen,<br />

der Begriff Ressourcen wird<br />

jedoch <strong>in</strong> anderer Bedeutung benutzt!<br />

Resourcen zum Konfigurieren und<br />

Organisieren des Projektes<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-3<br />

Autor: Dr. Becker 03_2008


<strong>4.</strong>3 Programmorganisationse<strong>in</strong>heiten (POE)<br />

<strong>4.</strong>3.1 Übersicht<br />

Grundlagen der Automatisierungstechnik I<br />

• Zur Strukturierung e<strong>in</strong>es Anwenderprogramms stehen nach <strong>IEC</strong> 61131-3 drei unterschiedliche<br />

Organisationse<strong>in</strong>heiten mit speziellen Eigenschaften zur Verfügung:<br />

Programme (Schlüsselwort PROGRAM)<br />

Funktionen (Schlüsselwort FUNCTION) und<br />

Funktionsblöcke (Schlüsselwort FUNCTION_BLOCK)<br />

• E<strong>in</strong> Programm ist allgeme<strong>in</strong> e<strong>in</strong> zusammenhängender Teil e<strong>in</strong>es Anwenderprogramms, der im<br />

gesamten Projekt bekannt ist.<br />

Das Betriebssystem organisiert die zyklische Bearbeitung des „Haupt“-Programms mit dem<br />

Schlüsselwort PLC_PRG. Alle anderen POE und damit auch alle anderen Programme müssen für<br />

die zyklische Bearbeitung <strong>in</strong> der POE PLC_PRG oder <strong>in</strong> anderen bereits aufgerufenen POE<br />

aufgerufen werden. E<strong>in</strong> Aufruf <strong>in</strong> e<strong>in</strong>er Funktion ist allerd<strong>in</strong>gs nicht möglich, wohl aber <strong>in</strong> e<strong>in</strong>em<br />

Funktionsblock. Programme s<strong>in</strong>d parametrierbar.<br />

Gegenüber der Funktion kann e<strong>in</strong> Programm bei der Ausführung e<strong>in</strong>en oder mehrere Werte<br />

liefern. Von e<strong>in</strong>er Ausführung bis zur nächsten Ausführung bleiben alle Werte erhalten.<br />

Gegenüber e<strong>in</strong>em Funktionsblock zeichnet sich e<strong>in</strong> Programm wie folgt aus: Werden bei e<strong>in</strong>em<br />

Aufruf e<strong>in</strong>es Programms Werte geändert, so stehen die Änderungen für den nächsten Aufruf zur<br />

Verfügung, auch wenn e<strong>in</strong>e andere POE <strong>das</strong> Programm aufruft. Beim Funktionsblock dagegen<br />

werden Änderungen nur <strong>in</strong> der jeweiligen Instanz wirksam, nicht aber <strong>in</strong> anderen Instanzen!<br />

• Funktionen können nur für „Sofortlogik“ e<strong>in</strong>gesetzt werden, d.h. für die direkte logische<br />

Verarbeitung von Signalen. Innere Werte können nicht gespeichert werden. Sie können wie e<strong>in</strong><br />

Operator benutzt werden. Grundsätzlich können Funktionen nur e<strong>in</strong> Datenelement – den<br />

Rückgabewert – liefern.<br />

Bei der Deklaration der Funktion und der Name des Rückgabewert und se<strong>in</strong> Datentyp festgelegt.<br />

Der Rückgabewert ersetzt den Funktionsaufruf und wird wie e<strong>in</strong>e Ausgabevariable benutzt. Der<br />

Aufruf mit dem Befehl CAL ist nicht möglich.<br />

Typische Funktionen wie Rechen- oder Umwandlungsoperationen stehen als Standard-<br />

funktionen <strong>in</strong> den <strong>Programmiersystem</strong>en zur Verfügung<br />

Funktionen s<strong>in</strong>d nur mit E<strong>in</strong>gangsvariablen parametrierbar. Ausgangsvariablen s<strong>in</strong>d nicht erlaubt.<br />

• Funktionsbauste<strong>in</strong>e (Funktionsblocks) können mehrere Ausgangsvariablen besitzen und für<br />

gleiche E<strong>in</strong>gangswerte durchaus unterschiedliche Ausgangswerte zulassen. Das ist möglich, weil<br />

sie auch <strong>in</strong>terne Variablen besitzen.<br />

Typische Funktionsbauste<strong>in</strong>e wie Zähler, Zeitgeber, Bistabile Elemente, Trigger stehen als<br />

Standard-FB <strong>in</strong> den Bibliotheken der <strong>Programmiersystem</strong>e zur Verfügung. Häufig benötigte<br />

Programmteile kann der Anwender selbst als Funktionsbauste<strong>in</strong> def<strong>in</strong>ieren.<br />

Funktionsbauste<strong>in</strong>e s<strong>in</strong>d parametrierbar, wobei E<strong>in</strong>gangs-, Ausgangs- und <strong>in</strong>nere Variablen<br />

benutzt werden können.<br />

Der Aufruf von Funktionsbauste<strong>in</strong>en von Programmen und anderen FB’s aus erfolgt durch ihre<br />

Instanzierung. Die Instanz ist vergleichbar mit e<strong>in</strong>er Kopie des deklarierten FB für e<strong>in</strong>en<br />

speziellen Anwendungsfall. In der Deklaration wird die Instanz mit Ihrem Typ vere<strong>in</strong>bart. Damit<br />

wird für jede Instanz der notwendige Speicherbereich zur Verfügung gestellt.<br />

Zwischen den Aufrufen des Bauste<strong>in</strong>s werden die Daten gespeichert werden. Diese Tatsache<br />

wird landläufig als „Gedächtnis“ des FB beschrieben.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-4<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

An dieser Stelle wird nachfolgend e<strong>in</strong>e Übersicht aus dem Standardwerk von ...<br />

Karl-He<strong>in</strong>z John und Michael Tiegelkamp: SPS-Programmierung mit <strong>IEC</strong> 61131-3 Konzepte und<br />

Programmiersprachen, Anforderungen an <strong>Programmiersystem</strong>e, Entscheidungshilfen 3. Auflage<br />

Spr<strong>in</strong>ger Verlag 2000<br />

...über die Eigenschaften und Möglichkeiten der POE gegeben. Die E<strong>in</strong>zelheiten dazu werden <strong>in</strong> den<br />

nachfolgenden Abschnitten ausgeführt. Nicht jedes <strong>Programmiersystem</strong> realisiert alle diese<br />

Grundeigenschaften <strong>in</strong> gleichem Maße!<br />

Konzept<br />

E<strong>in</strong>gangsparameter<br />

VAR_INPUT<br />

Ausgangsparameter<br />

VAR_OUTPUT<br />

E<strong>in</strong>-Ausgangsparameter<br />

VAR_IN_OUT<br />

Funktionswert<br />

(Rückgabewert)<br />

Aufruf von Funktionen<br />

Aufruf von<br />

Funktionsbauste<strong>in</strong>en<br />

Aufruf von Programmen<br />

Deklaration globaler<br />

Variablen VAR_GLOBAL<br />

Zugriff auf externe<br />

Variablen<br />

VAR_EXTERNAL<br />

Deklaration direkt<br />

dargestellter Variablen<br />

Deklaration lokaler<br />

Variablen VAR<br />

Deklaration e<strong>in</strong>er FB-<br />

Instanz<br />

Flankenerkennung<br />

verwendbar<br />

Verwendung von EN/ENO<br />

Pufferung von lokalen und<br />

Ausgangsdaten<br />

Indirekter FB-Aufruf<br />

Verwendung von<br />

Funktionswerten als<br />

E<strong>in</strong>gangsparameter<br />

Verwendung von FB-<br />

Instanzen als<br />

E<strong>in</strong>gangsparameter<br />

Rekursiver Aufruf<br />

Funktion Funktionsbauste<strong>in</strong><br />

Programm<br />

ja ja ja<br />

ne<strong>in</strong> ja ja<br />

ne<strong>in</strong> ja ja<br />

ja ne<strong>in</strong> ne<strong>in</strong><br />

ja ja ja<br />

ne<strong>in</strong> ja ja<br />

ne<strong>in</strong> ne<strong>in</strong> ne<strong>in</strong><br />

ne<strong>in</strong> ne<strong>in</strong> ja<br />

ne<strong>in</strong> ja ja<br />

ne<strong>in</strong> ne<strong>in</strong>, bei FB’s nur <strong>in</strong><br />

VAR_EXTERNAL<br />

ja<br />

ja ja ja<br />

ne<strong>in</strong> ja ja<br />

ne<strong>in</strong> ja ja<br />

ja ja ne<strong>in</strong><br />

ne<strong>in</strong> ja ja<br />

ne<strong>in</strong> ja ja<br />

ja ja ja<br />

ja ja ja<br />

ne<strong>in</strong> ne<strong>in</strong> ne<strong>in</strong><br />

Übersicht aus Karl-He<strong>in</strong>z John und Michael Tiegelkamp: SPS Programmierung nach <strong>IEC</strong> 61131-3<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-5<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Nachfolgendes Schema zeigt <strong>das</strong> Wesen der zyklischen Programmbearbeitung mit den POE<br />

PROGRAM, FUNCTION und FUNKTION_BLOCK<br />

PLC_PRG<br />

CAL InstanzA1<br />

CAL InstanzA2<br />

LD ........<br />

FUNCTION_1....<br />

CAL PROGRAM_A<br />

CAL PROGRAM_A<br />

InstanzA2<br />

Rückgabewert<br />

InstanzA1<br />

FUNCTION_BLOCK_A<br />

CAL InstanzB1<br />

FUNCTION_BLOCK_A<br />

CAL InstanzB1<br />

FUNCTION_1<br />

PROGRAM_A<br />

InstanzB1<br />

FUNCTION_BLOCK_B<br />

Deklarationen:<br />

InstanzA1:FUNCTION_BLOCK_A;<br />

InstanzA2:FUNCTION_BLOCK_A;<br />

InstanzB1:FUNCTION_BLOCK_B;<br />

Für alle drei Typen von POE sieht <strong>IEC</strong> 61131-3 grundsätzlich zwei Teile vor, die mit Programmkopf<br />

(Header) und Programm-Rumpf (Body) bezeichnet werden. Für <strong>das</strong> Ausführen beider Teile s<strong>in</strong>d<br />

exakte Regeln zu beachten!<br />

Der Programm-Kopf enthält Deklarationen (und Konfigurationen).<br />

Der Programm-Rumpf enthält <strong>das</strong> eigentliche Programm.<br />

Zu Beg<strong>in</strong>n jedes Programms bzw. jeder Programmorganisationse<strong>in</strong>heit (POE) s<strong>in</strong>d alle benutzten<br />

Variablen im Programmkopf e<strong>in</strong>deutig zu deklarieren! Dies ist e<strong>in</strong> deutliches Kennzeichen von <strong>IEC</strong>konformen<br />

Programmen und sollte nicht unterlaufen werden! Mit der Deklaration der Variablen<br />

wird der erforderliche Platz für alle Daten im Datenspeicher des Automatisierungsgerätes reserviert,<br />

oder es werden e<strong>in</strong>e Menge von E<strong>in</strong>- oder Ausgangsparametern für die Schnittstellen der POE<br />

zue<strong>in</strong>ander festgelegt.<br />

Die Norm def<strong>in</strong>iert die Variablen als „Mittel zur Identifizierung von Datenobjekten, deren Inhalt<br />

sich ändern darf, d.h. Daten, die mit E<strong>in</strong>gängen, Ausgängen oder Speicherplätzen der SPS<br />

verbunden s<strong>in</strong>d.“<br />

Das Programm selbst wird ohne Bezug auf die Hardware – d.h. ohne Bezug auf E<strong>in</strong>gänge, Ausgänge<br />

oder spezielle Datenbereiche – geschrieben. Nur im Deklarationsteil werden Variablen bei Bedarf „auf<br />

Adressen gelegt“, an besten nur im Hauptprogramm PLC_PRG. E<strong>in</strong>e Änderung der Verdrahtung hat<br />

dann ke<strong>in</strong>en E<strong>in</strong>fluss auf <strong>das</strong> Programm, sondern lediglich auf den Deklarationsteil<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-6<br />

Autor: Dr. Becker 03_2008


<strong>4.</strong>3.2 Regeln für die Variablendeklaration<br />

Grundlagen der Automatisierungstechnik I<br />

Nachfolgender Kasten zeigt alle Schlüsselworte für die Variablendeklaration.<br />

Schlüssselwort Anwendung<br />

VAR lokal <strong>in</strong>nerhalb der POE<br />

VAR_INPUT von außen kommend (gelesen), <strong>in</strong> der POE nicht änderbar<br />

VAR_OUTPUT von der POE nach außen geliefert (geschrieben)<br />

VAR_IN_OUT von außen kommend, kann <strong>in</strong>nerhalb der POE geändert werden<br />

VAR_GLOBAL über alle POE e<strong>in</strong>es Projektes gültig<br />

VAR_EXTERNAL von e<strong>in</strong>er Konfiguration geliefert und <strong>in</strong>nerhalb der POE änderbar<br />

VAR_END Ende e<strong>in</strong>es Variablenblockes<br />

RETAIN Remanente Daten<br />

PERSISTENT Nullspannungssicher gepuffert<br />

AT (%Adresse) Zuweisung des Speicherortes (-> “Legen auf Adresse”)<br />

Jede Variablendeklaration wird <strong>in</strong> Blöcke geschrieben, die durch die Schlüsselworte VAR und<br />

END_VAR begrenzt werden. Die Reihenfolge der Blöcke spielt ke<strong>in</strong>e Rolle.<br />

Bei der Variablendeklaration wird der Name der Variablen mit e<strong>in</strong>em Datentyp verbunden.<br />

Der Name oder Bezeichner ist im Rahmen der zugelassenen Zeichen frei wählbar. Es ist s<strong>in</strong>nvoll,<br />

prozessverständliche Namen zu wählen! Groß- und Kle<strong>in</strong>schreibung werden nicht unterschieden<br />

und s<strong>in</strong>d deshalb ohne Belang.<br />

M<strong>in</strong>destangaben e<strong>in</strong>er Variablendeklaration:<br />

Name : Datentyp ; Beispiel: Teilezahl:INT;<br />

Erläuterung zu diesem Beispiel:<br />

Mit der Deklaration Teilezahl:INT; wird für die Variable mit dem Namen „Teilezahl“ e<strong>in</strong> Speicherraum<br />

von 16 Bit reserviert. Der 16-Bit-Inhalt des Wortes im Datenspeicher wird dann als Ganzzahl<br />

<strong>in</strong>terpretiert.<br />

Durch Optionen können zusätzliche Festlegungen getroffen werden wie Legen auf Adresse und<br />

Vorgabe e<strong>in</strong>es Anfangwertes (Initialwertes). Die Initialisierung erfolgt durch Vorgabe von<br />

Anfangswerten mit dem Zeichen := .<br />

Mögliche Optionen:<br />

Name : Datentyp := Initialwert ; zusätzliche Angabe e<strong>in</strong>es Anfangwertes<br />

Name AT Adresse : Datentyp ; Mit Schlüsselwort AT wird Variable auf bestimmte<br />

Adresse gelegt, zumeist auf E<strong>in</strong>gänge oder Ausgänge<br />

(im Ausnahmefall auf Merker)<br />

Name AT Adresse : Datentyp := Initialwert ; Maximaldeklaration<br />

Beispiele: Sensoren_0_5 AT %IB4:Byte;<br />

Meldung AT %QX0.2:BOOL :=FALSE;<br />

Wert:REAL:=0.23;<br />

Werden ke<strong>in</strong>e Anfangswerte vorgegeben, so starten die Variablen mit e<strong>in</strong>em vordef<strong>in</strong>ierten Wert, der<br />

überwiegend Null zum Inhalt hat.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-7<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Bei der Variablendeklaration werden weiter auch der Wirkungsbereich (global oder lokal) und weitere<br />

Eigenschaften (wie nullspannungsfest u.a.) festgelegt.<br />

Dazu wird <strong>das</strong> Schlüsselwort VAR ergänzt. Beispiele s<strong>in</strong>d VAR_GOBAL, VAR_RETAIN u.a.<br />

Beispiele:<br />

In die Variablendeklaration können Konstanten e<strong>in</strong>bezogen werden. Die Norm spricht von Typed<br />

Literals. Konstanten werden mit dem Schlüsselwort CONSTANT gekennzeichnet. Sie können lokal<br />

für e<strong>in</strong>e POE oder global für alle POE deklariert werden.<br />

Beispiele:<br />

Durch Benutzung des Schlüsselwortes RETAIN werden remanente Daten erzeugt. Solche Variablen<br />

behalten beim Aus- und E<strong>in</strong>schalten der Steuerung oder Onl<strong>in</strong>e-Reset ihre Werte, d.h. bei erneutem<br />

Start wird mit den gespeicherten aktuellen Werten weitergearbeitet.<br />

Dagegen werden alle anderen Variablen <strong>in</strong> diesem Fall neu <strong>in</strong>itialisiert, entweder mit ihren Standard-<br />

Initialisierungswerten (zumeist Inhalt Null) oder nach Vorgabe der Deklaration.<br />

Beispiele:<br />

VAR<br />

Summand_1:INT:=200;<br />

Summand_2:INT;<br />

Summe:INT;<br />

Anzeige AT %QX0.1:BOOL;<br />

Stoerung AT %IX2.3:BOOL;<br />

Wartezeit:TIME:=5s;<br />

END_VAR<br />

VAR CONSTANT<br />

Divisor:INT:=20;<br />

Zeitdifferenz:TIME:=T#12h;<br />

END_VAR<br />

Nutzen Sie die Auflistung möglicher Konstanten unter<br />

Index-Stichwort „Konstanten“ der Onl<strong>in</strong>e-Hilfe <strong>CoDeSys</strong><br />

VAR RETAIN<br />

Teilezaehler:INT;<br />

Endtemperatur:REAL;<br />

END_VAR<br />

VAR_GLOBAL<br />

BCD_Schalter_1 AT %IW 2:WORD;<br />

Ventile_1-16 AT %QW12:WORD;<br />

Temperatur_A:REAL;<br />

Fehlerquote:REAL;<br />

Teilezahl:INT;<br />

END_VAR<br />

VAR_GLOBAL CONSTANT<br />

Immer_1:BOOL:=TRUE;<br />

Multiplikator_A:RAL:=3.14;<br />

E<strong>in</strong>trag:STRING:=’€’;<br />

END_VAR<br />

VAR_GLOBAL RETAIN<br />

Produktion:DINT;<br />

Restzeit:TIME;<br />

END_VAR<br />

Nicht remanent s<strong>in</strong>d RETAIN-Variablen allerd<strong>in</strong>gs bei bestimmten (systemabhängigen) Befehlen wie<br />

„Reset auf Ursprung“ oder erneutem Download des Programms.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-8<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Für solche Probleme sieht die Norm weiter <strong>das</strong> Schlüsselwort PERSISTENT vor.<br />

Nachfolgende Tabelle zeigt <strong>das</strong> Verhalten der Variablen RETAIN und PERSISTENT im System<br />

<strong>CoDeSys</strong>. Für VAR RETAIN PERSISTENT kann auch geschrieben werden VAR PERSISTENT<br />

RETAIN<br />

Beispiel:<br />

Onl<strong>in</strong>e-Befehl VAR VAR VAR VAR RETAIN<br />

RETAIN PERSISTENT PERSISTENT<br />

RESET neu <strong>in</strong>itial. remanent neu <strong>in</strong>itial. remanent<br />

RESET KALT neu <strong>in</strong>itial. neu <strong>in</strong>itial. neu <strong>in</strong>itial. neu <strong>in</strong>itial.<br />

RESET URSPRUNG neu <strong>in</strong>itial. neu <strong>in</strong>itial. neu <strong>in</strong>itial. neu <strong>in</strong>itial.<br />

DOWNLOAD neu <strong>in</strong>itial. neu <strong>in</strong>itial. remanent remanent<br />

ONLINE CHANGE remanent remanent remanent remanent<br />

ONLINE CHANGE bedeutet die Funktion, bei laufender Steuerung Änderungen des<br />

Programms vorzunehmen.<br />

VAR RETAIN PERSISTENT<br />

Betriebsstundenzähler:TIME;<br />

Sollwert:REAL;<br />

END_VAR<br />

Achtung! Im System <strong>CoDeSys</strong> gilt h<strong>in</strong>sichtlich Wirkung und Speicherplatzbedarf:<br />

Wenn e<strong>in</strong>e lokale Variable <strong>in</strong> e<strong>in</strong>em Programm als RETAIN deklariert ist, wird genau<br />

diese Variable im RETAIN-Bereich gespeichert (wie e<strong>in</strong>e globale RETAIN-Variable).<br />

Wenn e<strong>in</strong>e lokale Variable <strong>in</strong> e<strong>in</strong>em Funktionsblock als RETAIN deklariert ist, wird<br />

die komplette Instanz dieses Funktionsblocks im RETAIN-Bereich gespeichert (alle<br />

Daten des Bauste<strong>in</strong>s), wobei jedoch nur die deklarierte RETAIN-Variable als solche<br />

behandelt wird.<br />

Wenn e<strong>in</strong>e lokale Variable <strong>in</strong> e<strong>in</strong>er Funktion als RETAIN deklariert ist, hat dies ke<strong>in</strong>e<br />

Auswirkung. Die Variable wird nicht im Reta<strong>in</strong>-Bereich gespeichert! Wird e<strong>in</strong>e lokale<br />

Variable <strong>in</strong> e<strong>in</strong>er Funktion als PERSISTENT deklariert, bleibt dies ebenfalls ohne<br />

Wirkung!<br />

<strong>4.</strong>3.3 Direkt dargestellte Variablen („Legen auf Adressen“)<br />

Bestimmte Variablen erhalten ihre Inhalte von E<strong>in</strong>gangskartenbaugruppen oder schreiben ihre Werte<br />

<strong>in</strong> Ausgangskartenbaugruppen.<br />

In Sonderfällen möchten Anwender den Wert von Variablen <strong>in</strong> Datenspeicherbereiche schreiben, die<br />

sie selbst verwalten wollen.<br />

In diesen Fällen werden die Variablen mit dem Schlüsselwort AT auf Bit-, Byte, Wort- oder<br />

Doppelwortadressen gelegt. Die Kennungen dieser Speichergrößen und der Speicherorte s<strong>in</strong>d<br />

nachfolgend dargestellt. Grundsätzlich werden Adressen durch <strong>das</strong> Zeichen % gekennzeichnet.<br />

Bit: Kennung: X<br />

Byte: Kennung: B<br />

Wort: Kennung: W<br />

Doppelwort: Kennung: DW (32 Bit)<br />

Langwort: Kennung: L (62 Bit)<br />

E<strong>in</strong>gang: Kennung: I (Input)<br />

Ausgang: Kennung: Q (Quit)<br />

Merker: Kennung: M (nur <strong>in</strong> Ausnahme-<br />

fällen anwenden!)<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-9<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Die Adressierung erfolgt mit Bit- Byte- und Wortadressen (siehe Grundlagen Abschnitt 1.5.3).<br />

Zur Problematik von Variablen und Symbole siehe Abschnitt <strong>4.</strong>3.5.<br />

Werden Merker benutzt, so werden die Daten selbstätig <strong>in</strong> e<strong>in</strong>en nullspannungsfesten RETAIN-<br />

Speicher geschrieben. Das Wort Merker fungiert hier wie e<strong>in</strong> Schlüsselwort.<br />

Achtung! Um unkontrollierte Überschreibungen zu vermeiden, sollten Merker und<br />

VAR_RETAIN niemals gleichzeitig benutzt werden!<br />

Achtung! Nur Variable und Globale Variable - nicht aber VAR_INPUT und VAR_OUTPUT –<br />

dürfen auf Adressen gelegt werden.<br />

<strong>4.</strong>3.4 Parameterübergabe an POE und parametrierbare Bauste<strong>in</strong>e<br />

Für die Übergabe von Daten an POE und für die Ausgabe von Daten aus POE sieht <strong>IEC</strong> 1131-3<br />

nachfolgende spezielle Variablen vor, die auch als Parameter bezeichnet werden:<br />

Variablen Typ Funktion der Variablen<br />

VAR_INPUT Mit diesen Variablen erhält die POE E<strong>in</strong>gangs<strong>in</strong>formationen<br />

VAR_OUTPUT Mit diesen Variablen gibt die POE Ausgangs<strong>in</strong>formationen zurück<br />

VAR_IN_OUT Mit diesen Variablen erhält die POE E<strong>in</strong>gangs<strong>in</strong>formationen und gibt<br />

diese verändert zurück<br />

In Funktionen gibt es abweichend nur Parameter vom Typ VAR_INPUT.<br />

Durch Anwendung solcher Variablen entstehen parametrierbare Bauste<strong>in</strong>e. Das s<strong>in</strong>d allgeme<strong>in</strong><br />

formulierte Programmteile, die ihre konkrete Funktion erst beim Aufruf im Hauptprogramm durch<br />

Übergabe konkreter, d.h. aktueller Parameter erlangen.<br />

Die Variablen der Typen VAR_INPUT, VAR_OUTPUT und VAR_IN_OUT stellen somit die<br />

Schnittstelle e<strong>in</strong>er POE zu anderen POE dar.<br />

Die Verwendung parametrierbarer POE ist e<strong>in</strong> wesentliches Element von <strong>IEC</strong> 1131-3. Das Verfahren<br />

erlaubt den E<strong>in</strong>satz wiederverwendbarer Programme <strong>in</strong> Form selbst geschriebener POE und<br />

vielfältiger Biblioteken. Bibliotheken gehören zum <strong>Programmiersystem</strong>. Von Grundsatz her s<strong>in</strong>d alle<br />

Bibliotheksbauste<strong>in</strong>e parametrierbare POE.<br />

Schnittstellen<br />

E<strong>in</strong>-<br />

gangs-<br />

daten<br />

VAR_INPUT<br />

..........<br />

..........<br />

..........<br />

parametrierbare POE<br />

VAR_IN_OUT VAR_OUTPUT<br />

.......... ..........<br />

.......... ..........<br />

.......... ...........<br />

Aus-<br />

gangs-<br />

daten<br />

Wird die Abarbeitung e<strong>in</strong>es Programms nicht durch Task organisiert, muss <strong>das</strong> Projekt den Bauste<strong>in</strong><br />

PLC-PRG enthalten (im System Simatic S5 / S7 der Organisationsbauste<strong>in</strong> OB1). E<strong>in</strong> vom Umfang<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-10<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

her begrenztes Programm kann durchaus alle<strong>in</strong> im Bauste<strong>in</strong> PLC_PRG ohne Verzweigungen zu<br />

anderen Bauste<strong>in</strong>en niedergeschrieben werden. E<strong>in</strong> solches Programm bezeichnet man als l<strong>in</strong>eares<br />

Programm.<br />

In POE gegliederte Programme s<strong>in</strong>d gegenüber l<strong>in</strong>earen Programmen übersichtlicher. Bei<br />

Änderungen müssen nur bestimmte POE berücksichtigt werden.<br />

In der Automatisierungstechnik müssen oftmals gleichartige Programmteile mehrfach angewendet<br />

werden. Strukturiert man mit parametrierbaren POE, dann können durch Export- / Import-Funktionen<br />

Programmteile <strong>in</strong> anderen Projekten wiederwendet werden oder aber mehrmals im gleichen Projekt.<br />

In Fachkreisen spricht man erst bei Anwendung parametrierbarer POE von strukturierten<br />

Programmen.<br />

L<strong>in</strong>eares Programm Gegliedertes Programm Strukturiertes Programm<br />

PLC_PRG<br />

Messung 1<br />

Auswertung 1<br />

Meldung 1<br />

Messung 2<br />

Auswertung 2<br />

Meldung 2<br />

Messung 3<br />

Auswertung 3<br />

Meldung 3<br />

PLC_PRG<br />

Aufruf POE<br />

Messung 1<br />

Aufruf POE<br />

Auswertung1<br />

Aufruf POE<br />

Meldung 1<br />

Aufruf POE<br />

Messung 2<br />

Aufruf POE<br />

Auswertung2<br />

Aufruf POE<br />

Meldung 2<br />

Aufruf POE<br />

Messung 3<br />

Aufruf POE<br />

Auswertung3<br />

Aufruf POE<br />

Meldung 3<br />

<strong>4.</strong>3.5 Variablen und Symbolik<br />

POE<br />

Messung 1<br />

POE<br />

Auswertung 1<br />

POE<br />

Meldung 1<br />

POE<br />

Messung 2<br />

POE<br />

Auswertung 2<br />

POE<br />

Meldung 2<br />

POE<br />

Messung 3<br />

POE<br />

Auswertung 3<br />

POE<br />

Meldung 3<br />

OB 1<br />

Aufruf Messung<br />

für Messstelle 1<br />

Aufruf Auswertg.<br />

für Messstelle 1<br />

Aufruf Meldung<br />

für Messstelle 1<br />

Aufruf Messung<br />

für Messstelle 2<br />

Aufruf Auswertg.<br />

für Messstelle 2<br />

Aufruf Meldung<br />

für Messstelle 2<br />

Aufruf Messung<br />

für Messstelle 3<br />

Aufruf Auswertg.<br />

für Messstelle 3<br />

Aufruf Meldung<br />

für Messstelle 3<br />

jeweilige<br />

Parameter-<br />

übergabe<br />

paramerierbare<br />

POE Messung<br />

parametrierbare<br />

POE Auswertung<br />

parametrierbare<br />

POE Meldung<br />

E<strong>in</strong>ige <strong>Programmiersystem</strong>e ermöglichen zur besseren Lesbarkeit von Programmen für die direkt<br />

adressierten Operanden symbolische Namen zu verwenden. Diese werden kurz Symbole genannt.<br />

Dazu gehört Step7 des Automatisierungssystems Siemens Simatic S7 und ebenso der Vorgänger<br />

Step5. Für die vom Anwender zu adressierenden Operanden im Merkerbereich, im Bereich der<br />

globalen Datenbauste<strong>in</strong>e, im Prozessabbild der E<strong>in</strong>gänge (PAE) und Ausgänge (PAA) sowie für<br />

Peripheriebereiche und für Timer und Zähler werden hier <strong>in</strong> e<strong>in</strong>er Symboltabelle frei wählbare<br />

Symbole verwaltet. Bei der Programmierung kann der Anwender entscheiden, ob er <strong>das</strong> Programm<br />

mit absoluten Operanden, mit symbolischen Operanden oder <strong>in</strong> der Option „mit Symbol<strong>in</strong>formation“<br />

mit beiden betrachten und bearbeiten will. Da alle diese Operanden die Funktion globaler Variablen<br />

haben, stehen Symbole grundsätzlich für globale Variablen.<br />

Symbole werden bei Step7 mit doppeltem Hochkomma gekennzeichnet. Für Symboltabellen wird<br />

auch der Begriff Zuordnungstabellen benutzt.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-11<br />

Autor: Dr. Becker 03_2008


Beispiele für Step7:<br />

Grundlagen der Automatisierungstechnik I<br />

Operand Symbol<br />

M100.0 “Steuerung_e<strong>in</strong>geschaltet“<br />

DB5.DBW12 “Sollstueckzahl“<br />

E10.3 “T_Antrieb_e<strong>in</strong>“<br />

A2.7 “LED_Anrieb2“<br />

PEW304 “Temperatur“<br />

T12 “Z_Ueberwachung“<br />

Z1 “Teilezeaehler“<br />

Symbole dürfen nicht mit den Bezeichnern von Variablen verwechselt werden! H<strong>in</strong>ter jedem<br />

Symbol liegt e<strong>in</strong>e vom Anwender festgelegte Adresse, während h<strong>in</strong>ter Variablen nur im Sonderfall<br />

beim Legen auf Adressen mit Schlüsselwort AT e<strong>in</strong> Hardwarebezug besteht!<br />

Bei Programmen nach <strong>IEC</strong> 61131 erhöht die grundsätzliche Verwendung von Variablen die Flexibilität<br />

e<strong>in</strong>es Programms, denn solange die Anb<strong>in</strong>dung an die Peripherie noch nicht festgelegt ist, ist e<strong>in</strong><br />

Programm universeller e<strong>in</strong>setzbar.<br />

Die erforderliche Adressierung sollte immer zum spätest möglichen Zeitpunkt und <strong>in</strong> e<strong>in</strong>er möglichst<br />

hohen Ebene, bei großen Projekten <strong>in</strong> e<strong>in</strong>er Konfiguration oder Ressource festgelegt werden.<br />

Es ist zumeist ausreichend, für den direkten Zugriff auf die Peripherie alle<strong>in</strong> <strong>in</strong> der POE PLC_PRG mit<br />

absoluten Adressen zu arbeiten. In Funktionen und Funktionsbauste<strong>in</strong>en ist die Verwendung von<br />

absoluten Adressen grundsätzlich zu vermeiden!<br />

<strong>4.</strong>3.6 Zusammenfassung: Wo werden welche Variablen deklariert?<br />

Variablendeklaration mit Schlüsselwort ....<br />

VAR Diese Variablen gelten nur <strong>in</strong> der POE, <strong>in</strong> der sie deklariert wurden. Es s<strong>in</strong>d lokale<br />

Variablen.<br />

VAR_GLOBAL Diese Variablen gelten für alle POE im Gesamtprogramm. Es s<strong>in</strong>d globale<br />

Variablen. Sie s<strong>in</strong>d von allen POE's lesbar und änderbar.<br />

Globale Variablen werden vorrangig für die Adressierung der Peripherie<br />

verwendet.<br />

VAR_INPUT dienen zur Parameterübergabe beim Aufruf e<strong>in</strong>er Funktion, e<strong>in</strong>es Funktionsbauste<strong>in</strong>s<br />

oder e<strong>in</strong>es Programms.<br />

Diese Variablen können <strong>in</strong> diesen POE abgefragt werden. In der graphischen<br />

Darstellung stehen diese Variablen auf der l<strong>in</strong>ken Seite des FB/FUN-Symbols. Es<br />

können beim Aufruf nur Werte mit dem angegebenen Datentyp übergeben werden.<br />

VAR_OUTPUT s<strong>in</strong>d die Ausgangsvariablen e<strong>in</strong>es Funktionsbauste<strong>in</strong>s oder e<strong>in</strong>es Programms.<br />

Hier stehen die Ergebnisse im angegebenen Datentyp für die Verwendung <strong>in</strong><br />

anderen POE bereit.<br />

In der graphischen Darstellung stehen diese Variablen auf der rechten Seite des<br />

FB/FUN-Symbols.<br />

Bei e<strong>in</strong>er Funktion wird <strong>das</strong> Ergebnis als Rückgabewert auf dem Funktionsnamen<br />

abgelegt. Es wird also ke<strong>in</strong> VAR_OUTPUT benötigt.<br />

VAR_IN_OUT Diese Variablen wirken bei FB und Programm wie VAR_INPUT, sie können aber <strong>in</strong><br />

der POE geschrieben und verändert ausgegeben werden.<br />

In Funktionen s<strong>in</strong>d diese Variablen nicht zulässig.<br />

In der graphischen Darstellung stehen diese Variablen auf der l<strong>in</strong>ken Seite des<br />

FB/FUN-Symbols.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-12<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

VAR_EXTERNAL E<strong>in</strong>e globale Variable aus der Konfiguration kann dann <strong>in</strong> e<strong>in</strong>em Element<br />

dieser Konfiguration benutzt werden, wenn sie <strong>in</strong> dem Element zusätzlich als<br />

VAR_EXTERNAL def<strong>in</strong>iert wird.<br />

VAR_ACCESS Mit diesen Kommunikationsvariablen werden Zugriffspfade für die<br />

Kommunikation def<strong>in</strong>iert.<br />

Achtung! Var_IN_OUT und VAR_EXTERNAL können nicht mit Anfangswerten <strong>in</strong>itialisiert<br />

werden<br />

H<strong>in</strong>weis zu H<strong>in</strong>sichtlich der Datenhaltung bestehen deutliche Unterschiede zwischen der Norm<br />

Step7: <strong>IEC</strong> 61131-3 und Step7 (hierzu auch Abschnitt 3.5)<br />

Bei konventioneller Arbeit mit Step7 schreibt man Daten <strong>in</strong> Merker und <strong>in</strong> Daten-<br />

elemente der Datenbauste<strong>in</strong>e. Beide Bereiche s<strong>in</strong>d globale Daten und müssen vom<br />

Anwender selbst adressiert werden, was e<strong>in</strong>e nicht zu unterschätzende Fehlerquelle<br />

ist!! Die Fehlerhäufigkeit beim Arbeiten mit Merkern und Elementen von Datenbau-<br />

ste<strong>in</strong>en kann durch Verwendung von Symbolen deutlich gesenkt werden!<br />

Das ändert aber nichts an der Notwendigkeit, <strong>das</strong>s der Programmierer die Speicher-<br />

zellen selbst adressieren muss! Bei Step7 steht h<strong>in</strong>ter jedem Symbol e<strong>in</strong>e Adresse<br />

(siehe Abschnitt 3.5)<br />

Dagegen adressieren <strong>Programmiersystem</strong>e wie <strong>CoDeSys</strong> bei der Variablen-<br />

deklaration die Speicher selbst.<br />

Dieses Verfahren erfolgt nun wiederum auch bei Step7, wenn man lokale Variablen<br />

Daten <strong>in</strong> der Deklarationstabelle der Funktionen (FC) und Funktionsbauste<strong>in</strong>e (FB)<br />

verwendet.<br />

FC erlauben neben den Parametern IN, OUT und IN_OUT nur lokale Variable vom<br />

Typ TEMP (temporäre Variable).<br />

E<strong>in</strong>e temporäre Variable dient als Zwischenspeicher („Schmierzettel“), um Werte<br />

<strong>in</strong>nerhalb e<strong>in</strong>es Bauste<strong>in</strong>s im Programmablauf „von oben nach unten“ weiter zu<br />

geben (Pr<strong>in</strong>zip: erst schreiben, dann lesen!) Die Information der TEMP- Variablen<br />

steht nach e<strong>in</strong>em Programmzyklus nicht mehr zur Verfügung.<br />

FB erlauben neben den Parametern IN, OUT und IN_OUT sowie lokalen temporären<br />

Variablen auch lokale statische Variablen (Typ STAT). Diese werden im Instanzdatenbauste<strong>in</strong><br />

verwaltet, so <strong>das</strong>s der Bauste<strong>in</strong> über e<strong>in</strong> „Gedächtnis“ verfügt. Die Daten<br />

bleiben solange erhalten, bis sie mit neuen Werte überschrieben werden, auch über<br />

Zyklen und Bauste<strong>in</strong>aufrufe.<br />

Bild 4-2: Deklaration lokaler Variablen <strong>in</strong> Step7: Die Funktion erlaubt neben den Parametern IN, OUT<br />

und IN_OUT nur temporäre Variable.<br />

Deklariert wurden im Bild die Variablen „Stopp:BOOL“ und „Anzeige:WORD“.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-13<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Bild 4-3: Deklaration lokaler Variablen <strong>in</strong> Step7: Der Funktionsbauste<strong>in</strong> erlaubt neben den Parametern<br />

IN, OUT und IN_OUT temporäre und statische Variable.<br />

Deklariert wurden im Bild die statischen Variablen „Gutteile:INT“ und „Zaehler_Null:BOOL“<br />

und die temporäre Variable “Stopp:BOOL”.<br />

Details der Variablendeklaration <strong>in</strong> Step7 – Funktionen und – Funktionsbauste<strong>in</strong>en werden <strong>in</strong> den<br />

Abschnitten 8 und 9 behandelt.<br />

<strong>4.</strong>4 Datenformate<br />

<strong>IEC</strong> 61131-3 def<strong>in</strong>iert elementare und zusammengesetzte Datentypen. Zusammengesetzte Datentypen<br />

wie ARRAY und STRUCT sowie spezielle User def<strong>in</strong>ed Typs (UDT) werden im Abschnitt 14<br />

behandelt.<br />

Mit dem Schlüsselwort ANY_ fasst man die elementaren Datentypen <strong>in</strong> fünf Gruppen zusammen:<br />

- Bitfolgen: ANY_BIT<br />

- Alle Zahlen: ANY_NUM<br />

- Ganzzahlen mit und ohne Vorzeichen: ANY_INT<br />

- Gleitpunktzahlen: ANY_REAL<br />

- Datum, Zeitpunkt: ANY_DATE<br />

- Zeichenfolge, Zeitdauer ANY (allgeme<strong>in</strong>ste Vorgabe)<br />

ANY<br />

ANY_BIT ANY_NUM ANY_DATE<br />

ANY_INT ANY_REAL<br />

BOOL<br />

BYTE<br />

WORD<br />

DWORD<br />

LWORD<br />

INT<br />

SINT<br />

DINT<br />

LINT<br />

Bedeutung der Schlüsselworte:<br />

UINT<br />

USINT<br />

UDINT<br />

ULINT<br />

REAL<br />

LREAL<br />

DATE<br />

TIME_OF_DAY<br />

DATE_AND_TIME<br />

DWORD: Double Word: Doppelwort<br />

LWORD: Long Word: Langwort<br />

INT: Integer: Ganzzahl<br />

SINT: Short Integer: kurze Ganzzahl<br />

DINT: Double lnteger: Doppelte Ganzzahl<br />

LINT: Long Integer: Lange Ganzzahl<br />

UINT: Unsigned Integer: Ganzzahl ohne Vorzeichen (0..+65 535)<br />

USINT: Unsigned Short Integer: kurze Ganzzahl ohne Vorzeichen (0..+255)<br />

UDINT: Unsigned Double Int: Doppelte Ganzzahl ohne Vorzeichen (0..+2 32 -1)<br />

ULINT: Unsigned Long Integer: Langzahl ohne Vorzeichen (0..+2 64 -1<br />

REAL: Real: Gleitpunktzahl<br />

LREAL: Long Real: Lange Gleitpunktzahl<br />

TIME<br />

STRING<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-14<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Nicht alle Hersteller unterstützen alle Datentypen. Nachfolgende elementare Datenformate bilden <strong>das</strong><br />

unverzichtbare Grundgerüst der Variablendeklaration.<br />

Schlüsselwort Datentyp Größe Schreibweise / Wertebereiche<br />

Bit-Datentypen<br />

BOOL<br />

BYTE<br />

WORD<br />

DWORD<br />

LWORD<br />

CHAR<br />

Arithmetische Typen<br />

INT<br />

DINT<br />

REAL<br />

Zeittypen<br />

TIME<br />

TIME OF DAY<br />

DATE<br />

DATE_AND_TIME<br />

S5TIME<br />

Erläuterungen zu den Datentypen für Zeit und Datum<br />

Datentyp Schlüsselwort Interne Wertung<br />

Zeitdauer TIME Zeitdauer <strong>in</strong> Millisekunden<br />

Tageszeit TIME_OF_DAY oder TOD Zeit im Millisekunden ab<br />

00:00Uhr<br />

Datum DATE Zeit <strong>in</strong> Sekunden ab 01.01.1970<br />

Datum und Uhrzeit<br />

(Zeitstempel)<br />

Boolesche Variable<br />

8 Bit-Folge oder 2 Hex-Zahlen<br />

16 Bit-Folge oder 4 Hex-Zahlen<br />

32 Bit-Folge oder 8 Hex-Zahlen<br />

64 Bit-Folge oder 16 Hex-Zahlen<br />

ASCII-Zeichen<br />

Ganze Zahlen (Festpunktzahlen)<br />

Ganze Zahlen (Festpunktzahlen)<br />

Reelle Zahlen (Gleitpunktzahlen)<br />

Zeitdauer (<strong>IEC</strong>)<br />

Uhrzeit (Tageszeit)<br />

Datum<br />

Zeitstempel: Datum und Uhrzeit<br />

Zeitdauer (S5-Format, nur bei<br />

Step7)<br />

1 Bit<br />

8 Bit<br />

16 Bit<br />

32 Bit<br />

64 Bit<br />

8 Bit<br />

16 Bit<br />

32 Bit<br />

32 Bit<br />

32 Bit<br />

32 Bit<br />

32 Bit<br />

32 Bit<br />

16 Bit<br />

00:00 Uhr<br />

DATE_AND_TIME oder DT Zeit <strong>in</strong> Sekunden ab 01.01.1970<br />

00:00 Uhr<br />

TIME: Zeitbasis ist die Millisekunde. Jede andere Zeitangabe wird <strong>in</strong>tern <strong>in</strong> e<strong>in</strong>e Anzahl von<br />

Millisekunden umgerechnet. Die Gesamtzahl von Millisekunden steht dualcodiert <strong>in</strong> e<strong>in</strong>em<br />

32 Bit breiten Doppelwort (DWORD). Der größtmögliche Dezimalwert e<strong>in</strong>es Doppelwortes ist<br />

<strong>4.</strong>29<strong>4.</strong>967.295.<br />

Werden größere Werte vorgegeben, meldet <strong>das</strong> System <strong>CoDeSys</strong> den Fehler „Überlauf <strong>in</strong><br />

Zeitkonstante“. Es ist aber zu beachten, <strong>das</strong>s die Datenbreite <strong>in</strong> unterschiedlichen<br />

<strong>Programmiersystem</strong>en auch systemabhängig se<strong>in</strong> kann.<br />

TOD: Auch wenn die Tageszeit im „Klartext“ e<strong>in</strong>getragen werden kann, so wird sie <strong>in</strong>tern doch als<br />

Anzahl der Millisekunden ab 00:00 Uhr gewertet.<br />

DATE: Auch hier wird die Angabe <strong>in</strong> „Klartext“ <strong>in</strong>tern <strong>in</strong> e<strong>in</strong>e Anzahl von Sekunden ab dem<br />

festgelegten Zeitpunkt 01.01.1970 00:00 Uhr umgerechnet.<br />

DT: ebenfalls Umrechnung <strong>in</strong> die Anzahl von Sekunden ab dem festgelegten Zeitpunkt<br />

01.01.1970 00:00 Uhr<br />

• Intern werden alle Zeitdaten-Typen wie DWORD behandelt!<br />

FALSE (0) , TRUE (1)<br />

B#16#00...FF<br />

W#16#0000...FFFF<br />

DW#16#0000_0000...FFFF_FFFF<br />

LW#16#0...FFFF_FFFF_FFFF_FFFF<br />

‘ X‘ , ‘ +‘, ‘ &‘<br />

-32768 .... +32767 (0...65535)<br />

L# -2 147 483 648 ... 2 147 483 647<br />

Beispiel: 63<strong>4.</strong>57 oder 6.3457e+02<br />

TIME# -24d20h31m<strong>in</strong> ... + 24d20h31m<strong>in</strong><br />

TOD# 23:59:59.9<br />

DATE#1990-01-01<br />

DT#2007-02-04-10:15:30<br />

S5T# 0ms... 9990s<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-15<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Erläuterungen zu den Datentypen INT, DINT und REAL<br />

• Die Inhalte von Ganzahlen im Umfang von Byte, Wort und Doppelwort können im Dezimal-Code,<br />

Dual-Code oder Hexadezimal-Code angegeben werden.<br />

• Das Automatisierungsgerät arbeitet grundsätzlich nur auf Basis des Dualcodes. Aus ihm werden<br />

alle anderen Codes abgeleitet. Diese s<strong>in</strong>d zumeist für Darstellungen am Bildschirm oder <strong>in</strong><br />

Geräten erforderlich.<br />

• Im Hexa-Code wird jeweils e<strong>in</strong>e Tetrade (4 Bit) zu e<strong>in</strong>er Hexaziffer zusammengefasst.<br />

• Bei INT-Datentypen gilt: Das höchstwertige Bit enthält <strong>das</strong> Vorzeichen:<br />

Wert 0 = positiv, Wert 1 = negativ<br />

• Negative Zahlen werden im Zweierkomplement angegeben. Zweierkomplemente ermittelt man<br />

durch Umkehr aller Bitwerte und Addition e<strong>in</strong>es Bitwertes, wobei Überträge zu berücksichtigen<br />

s<strong>in</strong>d.<br />

• REAL werden nicht mit Komma, sondern mit Punkt e<strong>in</strong>gegeben<br />

Beispiele:<br />

Dezimalzahl 662, darstellbar als INT := 662, 2# 0000_0001_0100_1010 oder W#16# 0296<br />

Bit 15<br />

Dual: 2# 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 Hex: W#16# 0 2 9 6<br />

+2 9<br />

2 7<br />

+2 4<br />

Bit 0<br />

+2 2 +2 1<br />

+ 662<br />

Die Hexaziffern für die Darstellung von vier Bit:<br />

+6x16 0 = 6<br />

+9x16 1 =144<br />

+2x16 2 = 512<br />

Tetrade Dezimal Hex-Ziffer Tetrade Dezimal Hex-Ziffer<br />

0000 0 0 1000 8 8<br />

0001 1 1 1001 9 9<br />

0010 2 2 1010 10 A<br />

0011 3 3 1011 11 B<br />

0100 4 4 1100 12 C<br />

0101 5 5 1101 13 D<br />

0110 6 6 1110 14 E<br />

0111 7 7 1111 15 F<br />

Beispiel: 2# 1110_1010_0001_1000_1111_0111_1011_1001<br />

DW#16# E A 1 8 F 7 B 9<br />

Dezimal: 3 927 504 825<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-16<br />

Autor: Dr. Becker 03_2008<br />

662


Grundlagen der Automatisierungstechnik I<br />

Um sowohl sehr kle<strong>in</strong>e Kommazahlen wie z.B. 0.000000000000342 als auch große Kommazahlen<br />

wie z.B.1233231456. 012 mit 32 Bit verschlüsseln zu können, wird bei REAL <strong>das</strong> Pr<strong>in</strong>zip des<br />

gleitenden Kommas benutzt. Intern wird dazu die exponentielle Darstellung der Zahlen und e<strong>in</strong>e<br />

festgelegte Anzahl Bits jeweils für Mantisse und für Exponent verwendet (Bild 4-4).<br />

Bild 4-4: Pr<strong>in</strong>zip der Verschlüsselung von 32 Bit-Gleitpunktzahlen<br />

B<strong>in</strong>är codierte Dezimalzahlen und BCD-Code<br />

Zifferncodierschalter und 7-Segment-Anzeigen enthalten Codewandler, die e<strong>in</strong>e Tetrade <strong>in</strong> e<strong>in</strong>e<br />

Dezimalziffer wandeln. Grundlage für die Darstellung e<strong>in</strong>er Dezimalziffer durch vier Bit ist der<br />

Dualcode.<br />

Der BCD Code ist e<strong>in</strong> Code, bei dem e<strong>in</strong>e Dezimalzahl nicht als Ganzes <strong>in</strong> den Dualcode<br />

überführt wird, sondern jede e<strong>in</strong>zelne Dezimalziffer für sich.<br />

Dezimalziffer Dualcode der Hexacode<br />

Dezimalziffer = BCD<br />

0 2# 0000 16# 0<br />

1 2# 0001 16# 1<br />

2 2# 0010 16# 2<br />

3 2# 0011 16# 3<br />

4 2# 0100 16# 4<br />

5 2# 0101 16# 5<br />

6 2# 0110 16# 6<br />

7 2# 0111 16# 7<br />

8 2# 1000 16# 8<br />

9 2# 1001 16# 9<br />

Weiter<br />

verfügbare<br />

Tetraden<br />

2# 1010<br />

2# 1011<br />

2# 1100<br />

2# 1101<br />

In BCD<br />

nicht<br />

erlaubt!<br />

16# A<br />

16# B<br />

16# C<br />

16# D<br />

2# 1110 16# E<br />

2# 1111 16# F<br />

Bildquelle: Siemens AG Lehrgang SPS-Techniker<br />

Erkenntnis:<br />

Im Bereich der Dezimalziffern 0..9<br />

s<strong>in</strong>d BCD- und Hexacode formal gleich.<br />

Die Hexa-Ziffern A..F s<strong>in</strong>d im BCD-Code<br />

nicht erlaubt!<br />

Bei SimaticS7 wirken fehlerhafte BCD-<br />

Tetraden, die zu Ziffern A..F führen<br />

würden, als Stopp-Fehler!)<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-17<br />

Autor: Dr. Becker 03_2008


Beispiel:<br />

6 2 9 1<br />

0 I I 0 0 0 I 0 I 0 0 I 0 0 0 I<br />

Grundlagen der Automatisierungstechnik I<br />

Bei den speziellen Simatic S5–Timern und -Zählern – die auch <strong>in</strong> Step7 weiter verwendet werden -,<br />

liefern die Ausgänge „DEZ“ Inhalte im BCD-Code. Die Ausgänge „DUAL“ liefern die gleichen Inhalte<br />

im Dualcode.<br />

Z5<br />

T10<br />

S_EVERZ<br />

S DUAL<br />

TW DEZ<br />

R Q<br />

Codewandler<br />

Codewandler<br />

So wie zunehmend Codierschalter und 7-Segment-Anzeigen durch Touch Panels ersetzt werden,<br />

verliert der BCD-Code an Bedeutung.<br />

• BCD-Datentypen und Zählerdatentypen s<strong>in</strong>d <strong>in</strong> <strong>IEC</strong> 61131-3 nicht explizit def<strong>in</strong>iert!<br />

An dieser Stelle sei auf Möglichkeiten der Konvertierung von Datenformaten nach <strong>IEC</strong> 61131-3<br />

verwiesen. Konvertierungen benötigt man bei der Weiterverarbeitung von Daten, wenn formale<br />

Typkonflikte auftreten. Mit e<strong>in</strong>er Konvertierung TIME_TO_DWORD ist es beispielsweise möglich,<br />

e<strong>in</strong>en allgeme<strong>in</strong>en Wert TIME <strong>in</strong> e<strong>in</strong>en Dezimalwert von Millisekunden zu überführen.<br />

Datenkonvertierung wird im Abschnitt 7 behandelt.<br />

• Ansprechen e<strong>in</strong>zelner Bit’s <strong>in</strong> Variablen:<br />

In <strong>Programmiersystem</strong>en nach <strong>IEC</strong> 61131-3 ist es sehr e<strong>in</strong>fach, e<strong>in</strong>zelne Bit’s <strong>in</strong> Variablen der Typen<br />

BYTE, WORD, DWORD, LWORD anzusprechen: Man benutzt dazu den Bezeichner und – getrennt<br />

durch e<strong>in</strong>en Punkt – die Bitadresse.<br />

Beispiel: Wortvariable:WORD;<br />

Zugriff auf Bit 0 .. 15: Wortvariable.0 ... Wortvariable.15<br />

BCD-Code,<br />

dargestellt durch vier Tetraden:<br />

0 I I 0_0 0 I 0_I 0 0 I_0 0 0 I<br />

Im Gegensatz dazu ist der Dualcode<br />

von 6291:<br />

Zaehler<br />

2# 0 0 0 I_I 00 0_I 0 0 I_ 0 0 I I<br />

S DUAL<br />

Restzeit im BCD-Code ZW DEZ<br />

Zaehlerwert im BCD-Code<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-18<br />

Autor: Dr. Becker 03_2008<br />

ZV<br />

ZR<br />

R Q


<strong>4.</strong>5 Die Verwendung von Bibliotheken<br />

Grundlagen der Automatisierungstechnik I<br />

E<strong>in</strong>e Vielzahl oft benötigter Funktionen wie z.B. Timer (Zeitglieder), Counter (Zähler), Flankenauswertung<br />

(Trigger) oder RS-Flip-Flop (Bistabile Kippstufen) liegt als fertiges Programmelement <strong>in</strong><br />

Bibliotheken bereit. Der Form nach s<strong>in</strong>d es parametrierbare Bauste<strong>in</strong>e, die ihre aktuellen Variablen<br />

durch Parameterübergabe mit Variablen der Typen VAR_INPUT, VAR_OUTPUT und VAR_IN_OUT<br />

erhalten.<br />

Die wichtigste Bibliothek ist die Standardbibliothek (Standard Library), die nach <strong>IEC</strong> 1131-3 allen<br />

<strong>Programmiersystem</strong>en beigefügt werden muss.<br />

Im <strong>Programmiersystem</strong> <strong>CoDeSys</strong> ist diese Bibliothek bereits <strong>in</strong> alle Projekte e<strong>in</strong>gebunden, so <strong>das</strong>s<br />

ihre Programmelemente als Standard-Funktionsblöcke genutzt werden können.<br />

Bild 4-5 zeigt e<strong>in</strong>en solchen Fall: In dem <strong>in</strong> der graphischen Sprache FUP geschriebenen Programm<br />

wird e<strong>in</strong>e positive Flankenauswertung benötigt. Nach E<strong>in</strong>fügen e<strong>in</strong>es Blockes <strong>in</strong> <strong>das</strong> Programm wird<br />

entweder <strong>das</strong> richtige Schlüsselwort e<strong>in</strong>getragen (<strong>in</strong> diesem Falle R_TRIG), oder es wird mit Hilfe der<br />

E<strong>in</strong>fügetaste F2 aus dem Angebot der Standard-Funktionsbauste<strong>in</strong>e ausgewählt.<br />

Deklaration der<br />

Instanz von R-TRIG<br />

Bild 4-5 : Die Verwendung von Funktionsbauste<strong>in</strong>en der Standard-Bibliothek<br />

Da Funktionsbauste<strong>in</strong>e (FB) pr<strong>in</strong>zipiell <strong>in</strong>stanziert werden müssen, trifft dies auch für FB’s aus der<br />

Standardbibliothek zu. Sie erhalten e<strong>in</strong>en Namen (den Instanznamen oder e<strong>in</strong>facher „die Instanz“) und<br />

werden mit diesem Namen im Programmkopf nach dem Schema deklariert (im Beispiel<br />

Up_Trig1:R_TRIG;).<br />

Schreibt man selbst FB’s, so würden diese im obigen Menu unter „Def<strong>in</strong>ierte Funktionsblöcke“<br />

ersche<strong>in</strong>en. Ausführlich wird die Arbeit mit FB’s und ihre Instanzierung <strong>in</strong> Abschnitt 9 beschrieben.<br />

Neben der Standardbibliothek gibt es e<strong>in</strong>e Vielzahl weiterer Bibliotheken. Sie stehen auf Homepages<br />

von Software-Entwicklern (z.B. www.3S-Software.com ) oder Hardware-Anbietern (z.B.<br />

www.wago.com) bereit. S<strong>in</strong>d die Files auf dem Rechner vorhanden, werden sie bei Bedarf <strong>in</strong> <strong>das</strong><br />

Projekt e<strong>in</strong>gefügt. Danach können ihre Bauste<strong>in</strong>e genutzt werden.<br />

Bild 4-6 zeigt die Vorgehensweise bei <strong>CoDeSys</strong>: In der Mitte s<strong>in</strong>d die standardmäßig vorhandenen<br />

Bibliotheken sichtbar, rechts verfügbare Zusatzbibliotheken. Mit den Menu’s ->Fenster -> Bibliotheksverwaltung<br />

und -> E<strong>in</strong>fügen -> Neue Bibliothek kann man aus diesem Fenster auswählen und<br />

e<strong>in</strong>fügen.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-19<br />

Autor: Dr. Becker 03_2008


Bild 4-6: E<strong>in</strong>fügen zusätzlicher<br />

Bibliotheken <strong>in</strong> e<strong>in</strong><br />

Projekt unter <strong>CoDeSys</strong><br />

<strong>4.</strong>6 Onl<strong>in</strong>e-Hilfe als Lehrmittel<br />

Grundlagen der Automatisierungstechnik I<br />

Standard<br />

Zusatz<br />

Das beste Lehrbuch für <strong>das</strong> System <strong>CoDeSys</strong> ist die Onl<strong>in</strong>e-Hilfe. Bild 4-7 zeigt die Übersicht der<br />

Themen und als Beispiel Erläuterungen zum Befehl CAL.<br />

Bild 4-7: Übersicht der Themen <strong>in</strong> der Onl<strong>in</strong>e Hilfe<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-20<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Die Onl<strong>in</strong>e-Hilfe ist unverzichtbarer Bestandteil zeitgemäßer <strong>Programmiersystem</strong>e. Beim Programmieren<br />

kann nach dem Markieren fraglicher Blöcke mit der Taste F1 konkrete Hilfe abgerufen werden.<br />

(Beispiel Bild 4-8: Hilfe zum Counter Typ CTUD). Sehr praktikabel ist die Auswahlliste verwandter<br />

Themen am oberen Bildrand (Bild 4-9).<br />

Bild 4-8: Onl<strong>in</strong>e Hilfe zum Counter<br />

CTUD mit Taste F1<br />

Bild 4-9: Benutzung der oben sichtbaren Auswahlliste für artverwandte Themen <strong>in</strong> der Onl<strong>in</strong>e Hilfe<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-21<br />

Autor: Dr. Becker 03_2008


<strong>4.</strong>7 Integrierte Visualisierung<br />

Grundlagen der Automatisierungstechnik I<br />

Geme<strong>in</strong>sam mit der Simulation der Programme ist auch die <strong>in</strong> <strong>CoDeSys</strong> <strong>in</strong>tegrierte Visualisierung sehr<br />

hilfreich für den Lernenden. Mit e<strong>in</strong>er im Vergleich zu großen Visualisierungstools schnell erstellten<br />

e<strong>in</strong>fachen Visualisierung können bequem Programme getestet werden, ohne auf Hardware<br />

angewiesen zu se<strong>in</strong>! E<strong>in</strong>zelheiten zur Visualisierung s<strong>in</strong>d Folge 12 der „Praktischen E<strong>in</strong>führung <strong>in</strong><br />

<strong>CoDeSys</strong>“ zu entnehmen.<br />

-> Praktische E<strong>in</strong>führung <strong>in</strong> <strong>CoDeSys</strong> Folge 12<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-22<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

<strong>4.</strong>8 Anhang: Bezeichner, Literale und Schlüsselworte der Norm <strong>IEC</strong> 61131-3<br />

Bezeichner und Literale:<br />

Bezeichner dienen <strong>in</strong> den Programmiersprachen zur Darstellung von Objekten wie z. B. Variablen<br />

oder Funktionen.<br />

Sie s<strong>in</strong>d e<strong>in</strong>e Folge von Buchstaben, Ziffern und Unterstrichzeichen ( _ ). Zum<strong>in</strong>dest sechs Zeichen<br />

müssen <strong>in</strong> sämtlichen Systemen unterstützt werden.<br />

Bezeichner müssen mit e<strong>in</strong>em Buchstaben oder mit e<strong>in</strong>em Unterstrichzeichen beg<strong>in</strong>nen. Mehrere<br />

voranstehende und mehrfach e<strong>in</strong>gebettete Unterstriche s<strong>in</strong>d unzulässig. Außerdem dürfen Bezeichner<br />

ke<strong>in</strong>e Leerstellen enthalten.<br />

Beispiele für Bezeichner:<br />

START STOP VENTIL_6 VENT_E_7 _16E8 WELLE1 _WELLE<br />

E<strong>in</strong> Literal ist <strong>in</strong> den Programmiersprachen e<strong>in</strong>e zulässige Zeichenfolge zur Darstellung e<strong>in</strong>es<br />

bestimmten Inhaltes von Objekten, z.B. e<strong>in</strong>es aktuellen Wertes e<strong>in</strong>es Datentyps.<br />

Der Begriff basiert auf lat: litera = Buchstabe.<br />

Beispiel für e<strong>in</strong> Literal (hier speziell zulässig für den Datentyp mit Bezeichner DATE): D#1996-04-6<br />

Schlüsselwörter (alphabetisch geordnet)<br />

Hierunter werden spezielle reservierte Worte (bzw. spezielle Zeichenkomb<strong>in</strong>ationen) verstanden, die<br />

im Quelltext von Programmiersprachen e<strong>in</strong>en speziellen Auftrag auslösen oder e<strong>in</strong>e bestimmte<br />

Funktion haben.<br />

Schlüsselworte dürfen ke<strong>in</strong>e e<strong>in</strong>gebetteten Leerzeichen enthalten und für ke<strong>in</strong>en anderen Zweck wie<br />

z.B. als Namen für Variablen (!), POE oder Projekte verwendet werden.<br />

ACTION...END_ACTION<br />

ARRAY...OF<br />

AT<br />

CASE...OF...ELSE...END_CASE<br />

CONFIGURATION...END_CONFIGURATION<br />

CONSTANT<br />

EN ENO<br />

EXIT<br />

FALSE<br />

F_EDGE<br />

FOR…TO…BY…DO…END_FOR<br />

FUNCTION…END_FUNCTION<br />

FUNCTION_BLOCK…END_FUNCTION_BLOCK<br />

IF…THEN…ELSIF…ELSE…END_IF<br />

INITIAL_STEP…END_STEP<br />

PROGRAM…WITH…<br />

PROGRAM…END_PROGRAM<br />

R_EDGIE<br />

READ_ONLY<br />

READ_WRITE<br />

REPEAT…UNTIL…END_REPEAT<br />

RESOURCE…ON…END_RESOURCE<br />

RETAIN<br />

RETURN<br />

STEP…END_STEP<br />

STRUCT…END_STRUCT<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-23<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

TASK<br />

TRANSITION…FROM…TO…END_TRANSITION<br />

TRUE<br />

TYPE…END_TYPE<br />

VAR…END_VAR<br />

VAR_INPUT…END_VAR<br />

VAR_OUTPUT…END_VAR<br />

VAR_IN_OUT…END_VAR<br />

VAR_EXTERNAL…END_VAR<br />

VAR_ACCESS…END_VAR<br />

VAR_GLOBAL…END_VAR<br />

WHILE…DO…END_WHILE<br />

WITH<br />

Beispiele für numerische ganzzahlige und reelle Literale:<br />

-5 +96 628_26 Ganzzahlige Literale; Unterstrichzeichen zwischen<br />

den Ziffern dürfen nicht signifikant se<strong>in</strong><br />

-5,0 0.123 12.56 Reelle Literale<br />

6.2E – 4 bzw. 6.2e – 4<br />

-2.6E + 3 bzw. – 2,6e + 3<br />

12.0E3 bzw. 12.0e3<br />

Reelle Literale mit Exponent<br />

2#1010_1010 Literal zur Basis 2<br />

8#156 Literal zur Basis 8<br />

16#FF Literal zur Basis 16<br />

0 1 Boolesche Null und E<strong>in</strong>s<br />

FALSE TRUE Boolesche FALSE und TRUE<br />

Beispiele für Zeichenfolge-Literale:<br />

Folge von Null oder mehr Zeichen, die <strong>in</strong> e<strong>in</strong>fache Anführungszeichen (') e<strong>in</strong>geschlossen ist.<br />

“ Leere Zeichenfolge mit der Länge Null<br />

'X' Zeichenfolge mit der Länge E<strong>in</strong>s, mit Zeichen X<br />

' ' Zeichenfolge der Länge E<strong>in</strong>s, mit Leerzeichen<br />

'$“ Zeichenfolge der Länge E<strong>in</strong>s, mit Anführungszeichen<br />

'$$6.00' Zeichenfolge der Länge Fünf, $6.00<br />

$$ Dollar-Zeichen $<br />

$' Anführungszeichen<br />

$L bzw. $1 Zeilenvorschub<br />

$N bzw. §n Neue Zeile<br />

$P bzw. §p Neue Seite<br />

$R bzw. $r Wagenrücklauf<br />

Beispiele für Zeit-Literale:<br />

• Zeitdauer<br />

Daten für Zeitdauer müssen l<strong>in</strong>ks durch <strong>das</strong> Schlüsselwort T#, TIME#, t# oder time#<br />

begrenzt werden. Unterstrichzeichen können die E<strong>in</strong>heiten von Zeitdauer-Literalen trennen.<br />

T#80ms T#30.8s T#9.5m T#20.6h<br />

t#30h26m t#7d16h12m13s<br />

TIME#2.5h time#2.5h<br />

T#16h_12m_18s T#16h_12m_18s<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-24<br />

Autor: Dr. Becker 03_2008


• Datum und Tageszeit<br />

Grundlagen der Automatisierungstechnik I<br />

DATE# bzw. D# Datum<br />

TIME_OF_DAY# bzw: TOD# Tageszeit<br />

DATE_AND_TIME# bzw: DT# Datum und Zeit<br />

Date#1996-04-6<br />

D#1996-04-6<br />

d#1996-04-6<br />

TIME_OF_DAY#17 : 19 : 40.12<br />

TOD#17 : 19 : 40.12<br />

DATE_AND_TIME#1996-04-12-17 : 26 : 45.16<br />

dt#1996-04-12-17 : 26 : 45.16<br />

Schlüsselworte für Standard-Operatoren<br />

• Boolesche Operatoren<br />

Operator Parameter Kommentar<br />

AND & ANY_BIT Und-Funktion<br />

OR ANY_BIT ODER-Funktion<br />

NOT ANY_BIT NICHT-Funktion, Negation<br />

XOR ANY_BIT XOR-Funktion, Antivalenz<br />

• Arithmetische Operatoren<br />

Operator E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

ADD+ ANY_NUM ANY_NUM Addition<br />

SUB- ANY_NUM ANY_NUM Subtraktion<br />

MUL* ANY_NUM ANY_NUM Multiplikation<br />

DIV / ANY_NUM ANY_NUM Division; bei<br />

ANY_INT ganzzahlige<br />

Division<br />

MOD ANY_INT ANY_INT Modulo (Rest bei ganzzahliger<br />

Division)<br />

EXPT** Basis:<br />

ANY_REAL<br />

Exponent:<br />

ANY_NUM<br />

ANY_REAL Potenzrechnung<br />

MOVE := ANY_NUM ANY_NUM Zuweisung<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-25<br />

Autor: Dr. Becker 03_2008


• Vergleichsoperationen<br />

Grundlagen der Automatisierungstechnik I<br />

Operator E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

GT > ANY_BIT<br />

ANY_NUM<br />

STRING<br />

TIME<br />

ANY_DATE<br />

BOOL größer als<br />

GE >= ANY_BIT<br />

ANY_NUM<br />

STRING<br />

TIME<br />

ANY_DATE<br />

BOOL größer oder gleich<br />

LE >= ANY_BIT<br />

ANY_NUM<br />

STRING<br />

TIME<br />

ANY_DATE<br />

BOOL kle<strong>in</strong>er oder gleich<br />

LT< ANY_BIT<br />

ANY_NUM<br />

STRING<br />

TIME<br />

ANY_DATE<br />

BOOL kle<strong>in</strong>er<br />

EQ= ANY_BIT<br />

ANY_NUM<br />

STRING<br />

TIME<br />

ANY_DATE<br />

BOOL gleich<br />

NE ANY_BIT<br />

ANY_NUM<br />

STRING<br />

TIME<br />

ANY_DATE<br />

BOOL ungleich<br />

• Bitmanipulation<br />

Funktion E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

SHL IN:<br />

ANY_BIT<br />

N:<br />

ANY_INT<br />

SHR IN:<br />

ANY_BIT<br />

N:<br />

ANY_INT<br />

ROL IN:<br />

ANY_BIT<br />

N:<br />

ANY_INT<br />

ROR IN:<br />

ANY_BIT<br />

N:<br />

ANY_INT<br />

ANY_BIT L<strong>in</strong>ks schieben von<br />

IN um N Bit<br />

ANY_BIT Rechts schieben von<br />

IN um N Bit<br />

ANY_BIT Rotation l<strong>in</strong>ks von<br />

IN um N Bit im Kreis<br />

ANY_BIT Rotation rechts von<br />

IN um N Bit im Kreis<br />

Beispiel X :=SHL (IN :=WERT, N :=3); 00010101 vor SHL... 10101000 nach SHL...<br />

Drei Stellen nach l<strong>in</strong>ks, rechts werden Nullen nachgezogen.<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-26<br />

Autor: Dr. Becker 03_2008


• Typumwandlung<br />

Grundlagen der Automatisierungstechnik I<br />

Funktion E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

*_TO_** ANY_NUM ANY_NUM Numerische Typen wer-<br />

den <strong>in</strong>e<strong>in</strong>ander<br />

umgewandelt<br />

*E<strong>in</strong>gangsdatentyp<br />

**Ausgangsdatentyp<br />

Beispiel<br />

X :=INT_TO_REAL;<br />

TRUNC ANY_REAL ANY_INT Nachkommastellen<br />

werden abgeschnitten<br />

Beispiel<br />

X :=TRUNC (Y);<br />

BCD_TO_* ANY_BIT ANY_INT *Datentyp<br />

Daten der ANY_BIT-<br />

Gruppe im BCD-Format<br />

werden <strong>in</strong> <strong>das</strong> ANY_INT-<br />

Format umgewandelt<br />

Beispiel<br />

X :=BCD_TO INT (Y);<br />

*_TO_BCD ANY_INT ANY_BIT *Datentyp<br />

• Numerische Funktionen<br />

Daten im ANY_INT-<br />

Format werden <strong>in</strong> <strong>das</strong><br />

BCD-Format umge-<br />

wandelt<br />

Beispiel<br />

X :=INT_TO_BCD (Y);<br />

Funktion E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

ABS ANY_NUM ANY_NUM Absolutwert<br />

SQRT ANY_REAL ANY_REAL Quadratwurzel<br />

LN ANY_REAL ANY_REAL Logarithmus, natürlicher<br />

LOG ANY_REAL ANY_REAL Logarithmus, Basis 10<br />

EXP ANY_REAL ANY_REAL Exponentialfunktion (e)<br />

SIN ANY_REAL ANY_REAL S<strong>in</strong>usfunktion (Bogenmaß)<br />

COS ANY_REAL ANY_REAL Cos<strong>in</strong>usfunktion (Bogenmaß)<br />

TAN ANY_REAL ANY_REAL Tangensfunktion (Bogenm.)<br />

ASIN ANY_REAL ANY_REAL Arcus-S<strong>in</strong>usfunktion<br />

ACOS ANY_REAL ANY_REAL Arcus-Cos<strong>in</strong>usfunktion<br />

ATAN ANY_REAL ANY_REAL Arcus-Tangensfunktion<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-27<br />

Autor: Dr. Becker 03_2008


• Auswahlfunktion<br />

Grundlagen der Automatisierungstechnik I<br />

Funktion E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

SEL G : BOOL<br />

INO : ANY<br />

ANY B<strong>in</strong>äre Auswahl<br />

IN1: ANY<br />

OUT :=IN0, wenn G = 0<br />

OUT :=IN1, wenn G = 2<br />

MAX ANY_BIT<br />

ANY_NUM<br />

STRING<br />

ANY_DATE<br />

TIME<br />

MIN ANY_BIT<br />

ANY_NUM<br />

STRING<br />

ANY_DATE<br />

TIME<br />

LIMIT MIN, IN, MX:<br />

ANY_BIT<br />

ANY_NUM<br />

STRING<br />

ANY_DATE<br />

TIME<br />

MUX K : ANY_INT<br />

andere:<br />

ANY<br />

ANY_BIT<br />

ANY_NUM<br />

STRING<br />

ANY_DATE<br />

TIME<br />

ANY_BIT<br />

ANY_NUM<br />

STRING<br />

ANY_DATE<br />

TIME<br />

ANY_BIT<br />

ANY_NUM<br />

STRING<br />

ANY_DATE<br />

TIME<br />

Beispiel<br />

X :=SEL (G :=0, IN0 := Y, IN1 = 3);<br />

Maximum-Funktion<br />

ANY Multiplexer<br />

OUT := MAX (IN1, IN2, …)<br />

Beispiel<br />

X :=MAX (Y, Z);<br />

M<strong>in</strong>imum-Funktion<br />

OUT :=MIN (IN1, IN2, …);<br />

Beispiel<br />

X :=MIN (Y, Z);<br />

Begrenzer<br />

OUT :=MIN (MAX (IN, MN,) MX)<br />

Beispiel<br />

X :=LIMIT (IN := Y ;MN :=0, MX :=3);<br />

Wählt e<strong>in</strong>en von N E<strong>in</strong>gängen aus,<br />

abhängig vom E<strong>in</strong>gang K<br />

Beispiel<br />

X :=MUX (K :=0, IN0 :=A, IN1 = B, IN2<br />

= C);<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-28<br />

Autor: Dr. Becker 03_2008


• Funktionen für Zeichenfolgen<br />

Grundlagen der Automatisierungstechnik I<br />

Funktion E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

LEN STRING INT Länge e<strong>in</strong>er Zeichenfolge<br />

LEFT IN: STRING<br />

L:ANY_INT<br />

RIGHT IN: STRING<br />

L:ANY_INT<br />

MID IN: STRING<br />

L:ANY_INT<br />

X :=LEN ('WORT');<br />

X :=4<br />

Beispiel<br />

L l<strong>in</strong>ksstehende Zeichen von IN<br />

STRING<br />

Beispiel<br />

X :=LEFT (IN := 'WORT',L :=3);<br />

X :=WOR<br />

STRING L rechtsdrehende Zeichen von IN<br />

Beispiel<br />

X :=RIGHT (IN := 'WORT',L :=3);<br />

X :=ORT<br />

STRING L Zeichen von IN, beg<strong>in</strong>nend mit dem P-ten Zeichen<br />

Beispiel<br />

X :=MID (IN := 'WORT',L=2, P=2);<br />

X :=OR<br />

CONCAT STRING STRING Ane<strong>in</strong>anderreihung von Zeichenfolgen<br />

X :=CONCAT ('WO', 'RT');<br />

INSERT IN1, IN2:<br />

STRING<br />

P: ANY_INT<br />

DELETE IN:STRING<br />

L, P: ANY_INT<br />

REPLACE IN1:, IN2:<br />

STRING<br />

L, P:<br />

ANY_INT<br />

FIND IN1, IN2:<br />

STRING<br />

X :=WORT<br />

STRING Fügt IN2 <strong>in</strong> IN1 nach der P-ten Zeichenposition e<strong>in</strong>.<br />

Beispiel<br />

X :=INSERT (IN1 :=HER, IN2 :=MA, P :=2);<br />

X :=HEMAR<br />

STRING Löscht L Zeichen von IN, beg<strong>in</strong>nend mit der P-ten<br />

Position.<br />

Beispiel<br />

X :=DELETE (IN := 'WORT', L :=1, P :=2);<br />

X :=WRT<br />

STRING Ersetzt L Zeichen von IN1 durch IN2, beg<strong>in</strong>nend ab der<br />

P-ten Zeichenposition.<br />

Beispiel<br />

X :=REPLACE (IN1 := 'WORT', IN2 := 'T', L := 1, P :=2);<br />

X :=WTRT<br />

INT Ermittelt wird die Zeichenposition des Anfangs für <strong>das</strong><br />

erste Auftreten von IN2 <strong>in</strong> IN1.<br />

Wenn ke<strong>in</strong> Auftreten von IN2 gefunden wird, ist <strong>das</strong><br />

Ergebnis Null.<br />

Beispiel<br />

X :=FIND (IN1 := 'WORT', IN2 := 'RT');<br />

X :=3<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-29<br />

Autor: Dr. Becker 03_2008


Grundlagen der Automatisierungstechnik I<br />

Schlüsselworte für Standard-Funktionsbauste<strong>in</strong>e<br />

• Bistabile Elemente<br />

Funktionsbauste<strong>in</strong> E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

SR S1, R:<br />

Q1:<br />

Speicher mit vorrangigem Setzen<br />

BOOL<br />

BOOL<br />

RS S, R1:<br />

Q1:<br />

Speicher mit vorrangigem Rücksetzen<br />

BOOL<br />

BOOL<br />

• Flankenerkennung<br />

Funktionsbauste<strong>in</strong> E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

R_TRIG CLK:<br />

Q:<br />

Bei steigender Flanke an CLK ist Q TRUE.<br />

BOOL<br />

BOOL<br />

F_TRIG CLK:<br />

Q:<br />

Bei fallender Flanke an CLK ist Q TRUE.<br />

BOOL<br />

BOOL<br />

• Timer<br />

Funktionsbauste<strong>in</strong> E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

TON IN : BOOL<br />

PT : TIME<br />

TOF IN : BOOL<br />

PT : TIME<br />

TP IN : BOOL<br />

PT : TIME<br />

RTC IN : BOOL<br />

PDT: DATE<br />

Q: BOOL<br />

ET: TIME<br />

Q: BOOL<br />

ET: TIME<br />

Q: BOOL<br />

ET: TIME<br />

Q: BOOL<br />

CDT: DATE<br />

E<strong>in</strong>schaltverzögerung<br />

IN: steigende Flanke startet Zeitglied<br />

PT: Verzögerungsdauer<br />

Q: wenn Zeit abgelaufen, TRUE<br />

ET: momentan verstrichene Verzögerung<br />

Ausschaltverzögerung,<br />

sonst wie TON<br />

Impulszeit,<br />

sonst wie TON<br />

1) Wenn an IN e<strong>in</strong>e steigende Flanke erkannt wird, wird die Uhrzeit gesetzt.<br />

Sie läuft ab, solange IN TRUE ist.<br />

Echtzeituhr 1)<br />

IN: steigende Flanke, Datum und Uhrzeit<br />

Werden geladen<br />

PDT: Vore<strong>in</strong>stellung von Datum und Uhrzeit<br />

CDT: laufendes Datum und laufende Uhrzeit<br />

Q: wie EN<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-30<br />

Autor: Dr. Becker 03_2008


• Zähler<br />

Grundlagen der Automatisierungstechnik I<br />

Funktionsbauste<strong>in</strong> E<strong>in</strong>g.-Parameter Ausg.-Parameter Kommentar<br />

CTU CU: R_TRIG<br />

(BOOL)<br />

R: BOOL<br />

PV: INT<br />

CTD CU: R_TRIG<br />

(BOOL)<br />

LD: BOOL<br />

PV: INT<br />

CTUD CU, CD:<br />

R_TRIG<br />

(BOOL)<br />

R, LD: BOOL<br />

PV: INT<br />

Q: BOOL<br />

ET: TIME<br />

Q: BOOL<br />

ET: TIME<br />

QU, QD: BOOL<br />

CV: INT<br />

Vorwärtszähler, Aufwärtszähler<br />

Zähler zählt von Null bis PV.<br />

CU: Zähle<strong>in</strong>gang (steigende Flanke)<br />

PV: Sollwert des Zählers<br />

R: Reset (CV auf 0)<br />

Q: Wenn PV erreicht, dann Q TRUE<br />

Rückwertszähler, Abwärtszähler<br />

Zähler zählt von PV bis Null.<br />

CD: Zähle<strong>in</strong>gang (steigende Flanke)<br />

PV: Sollwert des Zählers<br />

LD: Initialisierung von CV auf PV<br />

Q: Wenn PV = 0, dann Q TRUE<br />

CV: aktueller Zählwert<br />

Vorwärts-/Rückwärtszähler,<br />

Aufwärts/Abwärtszähler<br />

QU: Wenn CV Maximalwert erreicht hat, TRUE<br />

QD: Wenn CV M<strong>in</strong>imalwert erreicht hat, TRUE,<br />

sonst wie CTU und CTD<br />

Grundlagen der Automatisierungstechnik I: <strong>4.</strong> <strong>Programmiersystem</strong> <strong>CoDeSys</strong> Seite 4-31<br />

Autor: Dr. Becker 03_2008

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!