- •Wichtige Erläuterungen
- •Rechtliche Grundlagen
- •Urheberschutz
- •Personalqualifikation
- •Bestimmungsgemäßer Gebrauch
- •Symbole
- •Schriftkonventionen
- •Darstellungen der Zahlensysteme
- •Gültigkeitsbereich
- •Abkürzungen
- •Lieferumfang
- •Systemvoraussetzungen
- •Installation
- •Deinstallation
- •Programmstart
- •Wichtige Hinweise
- •WAGO-I/O-PRO 32 V2.2 Übersicht
- •Was ist WAGO-I/O-PRO 32
- •Wie ist ein Projekt strukturiert?
- •Wie erstelle ich mein Projekt?
- •Wie kann ich mein Projekt testen?
- •Debugging
- •Fazit
- •Bestandteile eines Projekts
- •Projekt
- •Baustein
- •Funktion
- •Funktionsblock
- •Instanzen von Funktionsblöcken
- •Aufruf eines Funktionsblocks
- •Programm
- •Aktion
- •Resourcen
- •Bibliotheken
- •Datentypen
- •Visualisierung
- •Die Sprachen
- •Anweisungsliste (AWL)
- •Modifikatoren und Operatoren in AWL
- •Strukturierter Text (ST)
- •Ausdrücke
- •Auswertung von Ausdrücken
- •Zuweisungsoperator
- •Aufruf von Funktionsblöcken in ST
- •RETURN-Anweisung
- •IF-Anweisung
- •CASE-Anweisung
- •FOR-Schleife
- •WHILE-Schleife
- •REPEAT-Schleife
- •EXIT-Anweisung
- •Ablaufsprache (AS)
- •Schritt
- •Aktion
- •Transition / Transitionsbedingung
- •Aktiver Schritt
- •IEC-Schritt
- •Qualifier
- •Implizite Variablen in AS
- •AS-Flags
- •Alternativzweig
- •Parallelzweig
- •Sprung
- •Funktionsplan (FUP)
- •Der freigraphische Funktionsplaneditor (CFC)
- •Kontaktplan (KOP)
- •Kontakt
- •Spule
- •Funktionsblöcke im Kontaktplan
- •Set/Reset-Spulen
- •Debugging, Onlinefunktionalitäten
- •Traceaufzeichnung
- •Debugging
- •Breakpoint
- •Einzelschritt
- •Einzelzyklus
- •Werte Online verändern
- •Monitoring
- •Simulation
- •Logbuch
- •Die Norm
- •Ein Beispielprogramm
- •Die Steuerung einer Ampelanlage
- •Bausteine erzeugen
- •Was macht AMPEL?
- •Was macht WARTEN?
- •Was macht ABLAUF?
- •Was macht PLC_PRG ?
- •"AMPEL"-Deklaration
- •"AMPEL"-Rumpf
- •Anbinden der standard.lib
- •"WARTEN" Deklaration
- •"WARTEN"-Rumpf
- •"ABLAUF" erste Ausbaustufe
- •Aktionen und Transitionsbedingungen
- •ABLAUF zweite Ausbaustufe
- •Das Ergebnis
- •Ampelsimulation
- •Die Visualisierung einer Ampelanlage
- •Erstellen einer neuen Visualisierung
- •Element in Visualisierung einfügen
- •Die weiteren Ampellichter
- •Das Ampelgehäuse
- •Die zweite Ampel
- •Schrift in der Visualisierung
- •Die Komponenten von WAGO-I/O-PRO 32
- •Hauptfenster
- •Menüleiste
- •Funktionsleiste
- •Object Organizer
- •Bildschirmteiler
- •Arbeitsbereich
- •Meldungsfenster
- •Statusleiste
- •Kontextmenü
- •Optionen
- •'Projekt''Optionen'
- •Optionen für Laden & Speichern
- •Optionen für Benutzerinformation
- •Optionen für Editor
- •Optionen für Arbeitsbereich
- •Optionen für Farben
- •Optionen für Verzeichnisse
- •Optionen für Logbuch'
- •Übersetzungsoptionen
- •Kennworte
- •Optionen für 'Sourcedownload'
- •Optionen für 'Symbolkonfiguration'
- •Optionen für 'Makros'
- •Projekte verwalten
- •'Datei' 'Neu'
- •'Datei' 'Öffnen'
- •'Datei' 'Schließen'
- •'Datei' 'Speichern'
- •'Datei' 'Speichern unter'
- •'Datei' 'Archiv speichern/versenden...'
- •'Datei' 'Drucken'
- •'Datei' 'Einstellungen Dokumentation'
- •'Datei' 'Beenden'
- •'Projekt' 'Übersetzen'
- •'Projekt' 'Alles übersetzen'
- •'Projekt' 'Alles bereinigen'
- •'Projekt' 'In andere Sprache übersetzen'
- •Übersetzungsdatei erstellen
- •Bearbeiten der Übersetzungsdatei
- •'Projekt' 'Dokumentieren'
- •'Projekt' 'Exportieren'
- •'Projekt' 'Importieren'
- •'Projekt' 'Kopieren'
- •'Projekt' 'Vergleichen'
- •Durchführung Projektvergleich
- •Darstellung des Vergleichsergebnisses
- •'Extras' 'Nächster Unterschied'
- •'Extras' 'Vorheriger Unterschied'
- •'Extras' 'Änderung übernehmen'
- •'Extras' 'Einzelne Änderung übernehmen'
- •'Extras' 'Eigenschaften übernehmen'
- •'Extras' 'Zugriffsrechte übernehmen'
- •'Projekt' 'Projektinformation'
- •'Projekt' 'Global Suchen'
- •'Projekt' 'Global Ersetzen'
- •'Projekt' 'Überprüfen'
- •Unbenutzte Variablen
- •Überlappende Speicherbereiche
- •Konkurrierender Zugriff
- •Mehrfaches Speichern auf Output
- •Arbeitsgruppen
- •'Projekt' 'Passwörter für Arbeitsgruppen'
- •Objekte verwalten
- •Objekt
- •Ordner
- •'Neuer Ordner'
- •'Knoten Expandieren' 'Knoten Kollabieren'
- •'Projekt' 'Objekt löschen'
- •'Projekt' 'Objekt einfügen'
- •'Projekt' 'Objekt umbenennen'
- •'Projekt' 'Objekt konvertieren'
- •'Projekt' 'Objekt kopieren'
- •'Projekt' 'Objekt bearbeiten'
- •'Projekt' 'Objekt Zugriffsrechte'
- •'Projekt' 'Objekt Eigenschaften'
- •'Projekt' 'Aktion hinzufügen'
- •'Projekt' 'Instanz öffnen'
- •'Projekt' 'Aufrufbaum ausgeben'
- •'Projekt' 'Querverweisliste ausgeben'
- •Allgemeine Editierfunktionen
- •Bearbeiten' 'Rückgängig'
- •'Bearbeiten' 'Wiederherstellen'
- •'Bearbeiten' 'Ausschneiden'
- •'Bearbeiten' 'Kopieren'
- •'Bearbeiten' 'Einfügen'
- •'Bearbeiten' 'Löschen'
- •'Bearbeiten' 'Suchen'
- •'Bearbeiten' 'Weitersuchen'
- •'Bearbeiten' 'Ersetzen'
- •'Bearbeiten' 'Eingabehilfe'
- •Strukturierte Darstellung
- •'Bearbeiten' 'Variablen Deklaration'
- •'Bearbeiten' 'Nächster Fehler'
- •'Bearbeiten' 'Vorheriger Fehler'
- •'Bearbeiten' 'Makros'
- •Allgemeine Online Funktionen
- •'Online' 'Einloggen'
- •Wenn sich das System meldet
- •'Online' 'Ausloggen'
- •'Online' 'Laden'
- •'Online' 'Start'
- •'Online' 'Stop'
- •'Online' 'Reset'
- •'Online' 'Breakpoint an/aus'
- •'Online' 'Einzelschritt über'
- •'Online' 'Einzelschritt in'
- •'Online' 'Einzelzyklus'
- •'Online' 'Werte schreiben'
- •'Online' 'Werte forcen'
- •'Online' 'Forcen aufheben'
- •'Online' 'Aufrufhierarchie'
- •'Online' 'Ablaufkontrolle'
- •'Online' 'Simulation'
- •'Online' 'Kommunikationsparameter'
- •Darstellung im Dialog 'Kommunikationsparameter'
- •Tips zum Editieren der Parameter im Kommunkationsparameter-Dialog:
- •Online' 'Quellcode laden'
- •'Online' 'Bootprojekt erzeugen'
- •'Online' 'Datei in Steuerung schreiben'
- •'Online' 'Datei aus Steuerung laden'
- •Logbuch
- •'Fenster' 'Logbuch'
- •Menü Logbuch
- •Fenster anordnen
- •'Fenster' 'Nebeneinander'
- •'Fenster' 'Untereinander'
- •'Fenster' 'Überlappend'
- •'Fenster' 'Symbole anordnen'
- •'Fenster' 'Alle Schließen'
- •'Fenster' 'Meldungen'
- •'Fenster' 'Bibliotheksverwaltung'
- •'Fenster' 'Logbuch'
- •Die rettende Hilfe
- •'Hilfe''Inhalt und Index'
- •Hilfe-Hauptfenster
- •Stichwort-Fenster
- •Kontextsensitive Hilfe
- •Die Editoren
- •Allgemeines zu den Editoren
- •Druckgrenzen
- •Kommentar
- •Zoom zu aufgerufenem Baustein
- •'Extras' 'Instanz öffnen'
- •Der Deklarationseditor
- •Deklarationsteil
- •Eingabevariablen
- •Ausgabevariablen
- •EinAusgabevariablen
- •Lokale Variablen
- •Remanente Variablen
- •Konstanten, Typed Literals
- •Externe Variablen
- •Schlüsselwörter
- •Variablendeklaration
- •AT-Deklaration
- •'Einfügen' 'Deklarations Schlüsselworte'
- •'Einfügen' 'Typen'
- •Syntaxcoloring
- •Kurzformmodus
- •Automatisch deklarieren
- •Zeilennummern im Deklarationseditor
- •Deklarationen als Tabelle
- •'Einfügen' 'Neue Deklaration'
- •Pragma-Anweisung
- •Deklarationseditoren im Online Modus
- •Die Texteditoren
- •'Einfügen''Operator' in Texteditoren
- •'Einfügen''Operand' in Texteditoren
- •'Einfügen''Funktion' in Texteditoren
- •'Einfügen''Funktionsblock' in Texteditoren
- •Bausteinaufruf mit Ausgangsparametern in Texteditoren
- •Die Texteditoren im Online Modus
- •'Extras' 'Monitoring Einstellungen'
- •Was passiert an einem Breakpoint?
- •Zeilennummern des Texteditors
- •Der Anweisungslisteneditor
- •AWL im Online Modus
- •Der Editor für Strukturierten Text
- •Die graphischen Editoren
- •Zoom
- •Netzwerk
- •Sprungmarken
- •Netzwerkkommentare,'Extras' 'Optionen'
- •Die Netzwerkeditoren im Online Modus
- •Der Funktionsplaneditor
- •Cursorpositionen im FUP
- •Wie man im FUP den Cursor setzt
- •'Einfügen' 'Zuweisung' im FUP
- •'Einfügen' 'Sprung' im FUP
- •'Einfügen' 'Return' im FUP
- •'Einfügen' 'Baustein' im FUP
- •'Einfügen' 'Eingang'
- •'Einfügen' 'Ausgang'
- •'Extras' 'Negation'
- •'Extras' 'Set/Reset'
- •Der Funktionsplan im Online Modus
- •Der Kontaktplaneditor
- •'Einfügen' 'Kontakt' im KOP
- •'Einfügen' 'Paralleler Kontakt' im KOP
- •'Einfügen' 'Funktionsblock im KOP'
- •'Einfügen' 'Spule' im KOP
- •'Einfügen' 'Baustein mit EN im KOP'
- •'Einfügen' 'Einfügen an Baustein' im KOP
- •'Einfügen' 'Sprung' im KOP
- •'Einfügen' 'Return' im KOP
- •'Extras' 'Dahinter Einfügen' im KOP
- •'Extras' 'Darunter Einfügen' im KOP
- •'Extras' 'Darüber Einfügen' im KOP
- •'Extras' 'Negation' im KOP
- •'Extras' 'Set/Reset' im KOP
- •Der Kontaktplan im Online Modus
- •Der Ablaufspracheneditor
- •Blöcke markieren im AS
- •'Einfügen' 'Sprung'
- •'Einfügen' 'Eingangsaktion hinzufügen'
- •'Einfügen' 'Ausgangsaktion hinzufügen'
- •'Extras' 'Marke zu Parallelzweig hinzufügen'
- •Sprungmarke löschen
- •'Extras' 'Einfügen danach'
- •'Extras' 'Zoom Aktion/Transition'
- •'Extras' 'Lösche Aktion/Transition'
- •'Extras' 'Schritt Attribute'
- •'Extras' 'Zeitenüberblick'
- •'Extras' 'Optionen'
- •'Extras' 'Aktion assoziieren'
- •Die Ablaufsprache im Online Modus
- •Der freigraphische Funktionsplaneditor
- •Cursorpositionen im CFC
- •'Einfügen' 'Baustein' im CFC
- •'Einfügen' 'Ausgang' im CFC
- •'Einfügen' 'Sprung' im CFC
- •'Einfügen' 'Marke' im CFC
- •'Einfügen' 'Return' im CFC
- •'Einfügen' 'Kommentar' im CFC
- •'Einfügen' 'Bausteineingang' im CFC
- •'Extras' 'Negieren' im CFC
- •'Extras' 'Set/Reset' im CFC
- •'Extras' 'EN/ENO' im CFC
- •'Extras' 'Eigenschaften...' im CFC
- •Elemente selektieren im CFC
- •Elemente verschieben im freigraphischen Funktionsplaneditor
- •Elemente kopieren im CFC
- •Verbindungen erstellen
- •Verbindungen löschen
- •Verbindungen ändern
- •'Extras' 'Verbindungsmarke'
- •Inputs/Outputs "On the fly" einfügen
- •Abarbeitungsreihenfolge
- •'Reihenfolge' 'Anzeigen'
- •'Extras' 'Reihenfolge' 'Topologisch anordnen'
- •'Extras' 'Reihenfolge' 'Eins vor'
- •'Extras' 'Reihenfolge' 'Eins zurück'
- •'Extras' 'Reihenfolge' 'An den Anfang'
- •'Extras' 'Reihenfolge' 'Ans Ende'
- •'Extras' 'Makro erzeugen'''
- •'Extras' 'In Makro springen''
- •'Extras' 'Makro expandieren''
- •Rückkopplungen
- •CFC im Online Modus'
- •'Extras' 'Zoom'
- •Übersicht Resourcen
- •Globale Variablen
- •Globale Variablen editieren
- •Mehrere Variablenlisten
- •Globale Variablen
- •Anlegen einer Globalen Variablenliste
- •Editieren der Listen für Globale Variablen
- •Globale Konstanten
- •Variablenkonfiguration
- •Beispiel Variablenkonfiguration
- •'Einfügen''Alle Instanzpfade'
- •Dokumentvorlage
- •PLC Browser
- •Steuerungskonfiguration
- •Steuerungsauswahl
- •Taskkonfiguration
- •Beispiel für eine Taskkonfiguration
- •Welche Task wird bearbeitet?
- •Arbeiten in der Taskkonfiguration
- •'Extras' 'Eigenschaften''
- •'Extras' 'Debug Task festlegen'
- •Traceaufzeichnung
- •'Extras' 'Tracekonfiguration'
- •'Extras' 'Trace starten'
- •'Extras' 'Trace lesen'
- •'Extras' 'Trace automatisch lesen'
- •'Extras' 'Trace stoppen'
- •Auswahl der darzustellenden Variablen
- •Darstellung der Traceaufzeichnung
- •'Extras' 'Cursor ausgeben'
- •'Extras' 'Mehrkanal'
- •'Extras' 'Koordinatennetz'
- •'Extras' 'Strecken'
- •'Extras' 'Komprimieren'
- •'Extras' 'Trace speichern'
- •'Extras' 'Trace laden'
- •Watch und Rezepturverwalter
- •'Einfügen' 'Neue Watchliste'
- •'Extras' 'Watchliste Umbenennen'
- •'Extras' 'Watchliste speichern'
- •'Extras' 'Watchliste laden'
- •'Extra' 'Monitoring aktiv'
- •'Extras' 'Rezeptur schreiben'
- •'Extras' 'Rezeptur lesen'
- •Werte forcen und schreiben im Watch Manager
- •Bibliotheksverwaltung
- •Bibliotheksverwalter
- •Bibliotheksverwalter nutzen
- •Standardbibliothek
- •Benutzerdefinierte Bibliotheken
- •'Einfügen' 'weitere Bibliothek'
- •Bibliothek entfernen
- •Visualisierung in WAGO-I/O-PRO 32
- •Visualisierung
- •Visualisierung erstellen
- •Visualisierungselemente einfügen
- •Visualisierungselemente einfügen
- •'Einfügen' 'Rechteck'
- •'Einfügen' 'Abgerundetes Rechteck'
- •'Einfügen' 'Ellipse'
- •'Einfügen' 'Polygon'
- •'Einfügen' 'Linie'
- •'Einfügen' 'Kurve'
- •'Einfügen' 'Bitmap'
- •'Einfügen' 'Visualisierung'
- •'Einfügen' 'Schaltfläche'
- •Arbeiten mit Visualisierungselementen
- •Visualisierungselemente selektieren
- •Ändern von Visualisierungselementen
- •Verschieben von Visualisierungselementen
- •Kopieren von Visualisierungselementen
- •Statusleiste in der Visualisierung
- •Visualisierungselemente konfigurieren
- •'Extras' 'Konfigurieren'
- •Platzhalter
- •'Extras' 'Platzhalterliste'
- •Form
- •Text
- •Linienstärke
- •Farben
- •Bewegung absolut
- •Bewegung relativ
- •Variablen
- •Eingabe
- •Tooltip
- •Bitmap
- •Visualisierung
- •Gruppierung von Elementen
- •Weitere Funktionen für Visualisierungselemente
- •'Extras' 'Nach vorn bringen'
- •'Extras' 'Nach hinten legen'
- •'Extras' 'Hintergrund Bitmap auswählen'
- •'Extras' 'Hintergrund Bitmap löschen'
- •'Extras' 'Ausrichten'
- •'Extras' 'Alles Markieren'
- •'Extras' 'Selektieren'
- •'Extras' 'Elementliste'
- •'Extras' 'Einstellungen'
- •Tastaturbedienung - im Online Modus
- •Datei Drucken im Online Modus
- •Visualisierungen in Bibliotheken
- •DDE Kommunikation mit WAGO-I/O-PRO 32
- •DDE Schnittstelle des WAGO-I/O-PRO 32 Programmiersystems
- •Aktivieren der DDE Schnittstelle
- •Allgemeines Ansprechen von Daten
- •Welche Variablen können gelesen werden?
- •Variablen Verknüpfen mit WORD
- •Variablen Verknüpfen mit EXCEL
- •Variablen Ansprechen mit Intouch
- •Tastaturbedienung
- •Bedienung
- •Tastenkombinationen
- •Die Datentypen
- •Datentypen
- •Standard Datentypen
- •BOOL
- •Ganzzahlige Datentypen
- •REAL
- •STRING
- •Zeitdatentypen
- •Definierte Datentypen
- •Array
- •Funktion Checkbounds
- •Pointer
- •Aufzählungstyp
- •Strukturen
- •Referenzen
- •Unterbereichstypen
- •Die IEC Operatoren
- •Die IEC Operatoren
- •Arithmetische Operatoren
- •INDEXOF
- •SIZEOF
- •Bitstring Operatoren
- •Bit-Shift Operatoren
- •Auswahloperatoren
- •LIMIT
- •Vergleichsoperatoren
- •Adreßoperatoren
- •Inhaltsoperator
- •Aufrufoperator
- •Typkonvertierungen
- •BOOL_TO-Konvertierungen
- •TO_BOOL-Konvertierungen
- •Konvertierungen zwischen ganzzahligen Zahlentypen
- •REAL_TO-Konvertierungen
- •STRING_TO-Konvertierungen
- •TRUNC
- •Numerische Operatoren
- •SQRT
- •ASIN
- •ACOS
- •ATAN
- •EXPT
- •Die Elemente der Standardbibliothek
- •String Funktionen
- •LEFT
- •RIGHT
- •CONCAT
- •INSERT
- •DELETE
- •REPLACE
- •FIND
- •Bistabile Funktionsblöcke
- •SEMA
- •Flankenerkennung
- •R_TRIG
- •F_TRIG
- •Zähler
- •CTUD
- •Timer
- •Die Bibliothek UTIL.LIB
- •BCD-Konvertierung
- •Bit-/Byte-Funktionen
- •EXTRACT
- •PACK
- •PUTBIT
- •UNPACK
- •Mathematische Hilfsfunktionen
- •DERIVATIVE
- •INTEGRAL
- •STATISTICS_INT
- •STATISTICS_REAL
- •VARIANCE
- •Regler
- •Signalgeneratoren
- •BLINK
- •Funktionsmanipulatoren
- •CHARCURVE
- •RAMP_INT
- •RAMP_REAL
- •Analogwertverarbeitung
- •HYSTERESIS
- •LIMITALARM
Die Datentypen • 297
Definierte Datentypen
11.3.2Pointer
In Pointern speichert man die Adresse von Variablen oder Funktionsblöcken zur Laufzeit eines Programms.
Pointerdeklarationen haben folgende Syntax:
<Bezeichner>: POINTER TO <Datentyp/Funktionsblock>;
Ein Pointer kann auf jeden beliebigen Datentyp und Funktionsblock zeigen, auch selbstdefinierte.
Mit dem Adreßoperator ADR wird dem Pointer die Adresse einer Variablen oder Funktionsblocks zugewiesen.
Die Dereferenzierung eines Pointers erfolgt über den Inhaltsoperator "^" nach dem Pointerbezeichner.
Beispiel:
pt:POINTER TO INT;
var_int1:INT := 5;
var_int2:INT;
WAGO-I/O-SYSTEM 759 WAGO-I/O-PRO 32
298 • Die Datentypen
Definierte Datentypen
pt := ADR(var_int1);
var_int2:= pt^; (* var_int2 ist nun 5 *)
11.3.3Aufzählungstyp
Ein Aufzählungstyp ist ein selbstdefinierter Datentyp, der aus einer Menge von Stringkonstanten besteht. Diese Konstanten bezeichnet man als Enumerationswerte.
Die Enumerationswerte sind im ganzen Projekt bekannt, auch wenn Sie lokal in einem Baustein deklariert wurden. Legen Sie ihre Aufzählungstypen am besten als Objekte im Object Organizer unter der Registerkarte Datentypen an. Sie beginnen mit dem Schlüsselwort TYPE und enden mit END_TYPE.
Syntax:
TYPE <Bezeichner>:(<Enum_0> ,<Enum_1>, ...,<Enum_n>);
END_TYPE
Eine Variable vom Typ <Bezeichner> kann einen der Enumerationswerte annehmen und wird mit dem ersten initialisiert. Die Werte sind zu ganzen Zahlen kompatibel, d.h. man kann damit Operationen wie mit INT durchführen. Der Variablen kann eine Zahl x zugewiesen werden. Sind die Enumerationswerte nicht initialisiert, beginnt die Zählung bei 0. Achten Sie beim Initialisieren darauf, daß die Initialwerte aufsteigend sind. Die Gültigkeit der Zahl wird zur Laufzeit überprüft.
Beispiel:
TYPE AMPEL: (Rot, Gelb, Gruen:=10); (*Rot hat den
Initalwert 0, Gelb 1, Gruen 10 *)
END_TYPE
AMPEL1 : AMPEL ;
AMPEL1:=0; (* Ampel hat den Wert Rot*)
FOR i:= Rot TO Gruen DO
i := i + 1;
END_FOR;
Der gleiche Enumerationswert darf sowohl innerhalb einer Enumeration wie auch bei der Verwendung verschiedener Enumerationen innerhalb desselben Bausteins nicht zweimal verwendet werden. Beispiel:
AMPEL: (rot, gelb, gruen);
FARBE: (blau, weiss, rot);
WAGO-I/O-SYSTEM 759 WAGO-I/O-PRO 32
Die Datentypen • 299
Definierte Datentypen
Fehler: rot darf nicht für AMPEL und FARBE verwendet werden, wenn diese im gleichen Baustein benützt werden.
11.3.4Strukturen
Strukturen werden als Objekte im Object Organizer unter der Registerkarte Datentypen abgelegt. Sie beginnen mit den Schlüsselwörtern TYPE und STRUCT und enden mit END_STRUCT und END_TYPE.
Strukturdeklarationen haben folgende Syntax:
TYPE <Strukturname>:
STRUCT
<Variablendeklaration 1>
.
.
<Variablendeklaration n>
END_STRUCT
END_TYPE
<Strukturname> ist nun ein Typ, der im gesamten Projekt bekannt ist, und der wie ein Standard Datentyp benutzt werden kann.
Verschachtelte Strukturen sind erlaubt. Die einzige Einschränkung ist, daß Variablen nicht auf Adressen gesetzt werden können (AT-Deklaration ist nicht erlaubt!).
x Beispiel für eine Strukturdefinition Polygonzug
Beispiel für die Initialisierung einer Struktur vom Typ Polygonzug:
Poly_1: Polygonzug := ( Start:=3,3, Punkt1 =5,2, Punkt2:=7,3, Punkt3:=8,5, Punkt4:=5,7, Ende := 3,5);
Initialisierungen mit Variablen sind nicht möglich. Ein Beispiel für die
Initialisierung eines Arrays einer Struktur siehe unter 'Arrays'.
Auf Komponenten von Strukturen greift man mit folgender Syntax zu:
<Struktur_Name>.<Komponentenname>
Für das oben genannte Beispiel der Struktur Polygonzug erfolgt der Zugriff auf die Komponente Start dementsprechend über Poly_1.Start
WAGO-I/O-SYSTEM 759 WAGO-I/O-PRO 32
300 • Die Datentypen
Definierte Datentypen
TYPE Polygonzug:
STRUCT
Start:ARRAY [1..2] OF INT;
Punkt1:ARRAY [1..2] OF INT;
Punkt2:ARRAY [1..2] OF INT;
Punkt3:ARRAY [1..2] OF INT;
Punkt4:ARRAY [1..2] OF INT;
Ende:ARRAY [1..2] OF INT;
END_STRUCT
END_TYPE
11.3.5Referenzen
Der selbstdefinierte Datentyp Referenz dient dazu, um einen alternativen Namen (alias) für einen Datentypen oder einen Funktionsblock zu erzeugen.
Legen Sie ihre Referenzen als Objekte im Object Organizer unter der Registerkarte Datentypen an. Sie beginnen mit dem Schlüsselwort TYPE und enden mit END_TYPE.
Syntax:
TYPE <Bezeichner>: <Zuweisungsausdruck>;
END_TYPE
Beispiel:
TYPE message:STRING[50];
END_TYPE;
11.3.6Unterbereichstypen
Ein Unterbereichstyp ist ein Typ, dessen Wertebereich nur eine Untermenge eines Basistypen umfaßt. Die Deklaration kann im Register Datentypen erfolgen, eine Variablen kann aber auch direkt mit einem Unterbereichstypen deklariert werden:
Syntax für die Deklaration im Register 'Datentypen':
TYPE <Name> : <Inttype> (<ug>..<og>) END_TYPE;
<Name> |
muß ein gültiger IEC-Bezeichner sein, |
WAGO-I/O-SYSTEM 759
WAGO-I/O-PRO 32
|
Die Datentypen • 301 |
|
Definierte Datentypen |
|
|
<Inttype> |
ist einer der Datentypen SINT, USINT, INT, UINT, DINT, UDINT, BYTE, |
|
WORD, DWORD (LINT, ULINT, LWORD). |
<ug> |
ist eine Konstante, die kompatibel sein muß zum Basistypen, und die die |
|
Untergrenze des Bereichstypen festlegt. Die Untergrenze selbst gehört zu |
|
diesem Bereich. |
<og> |
ist eine Konstante, die kompatibel sein muß zum Basistypen, und die die |
|
Obergrenze des Bereichstypen festlegt. Die Obergrenze selbst gehört zu |
|
diesem Basistypen. |
Beispiel:
TYPE
SubInt : INT (-4095..4095);
END_TYPE
Direkte Deklaration einer Variablen mit einem Unterbereichstypen (Beachten Sie die korrekte Angabe eines Initialwerts, wenn der Unterbereich nicht die '0' enthält):
VAR
i1 : INT (-4095..4095);
i2: INT (5..10):=5;
ui : UINT (0..10000);
END_VAR
Wird einem Unterbereichstypen eine Konstante zugewiesen (in der Deklaration oder in der Implementation), die nicht in diesen Bereich fällt (z.B. i:=5000), wird eine Fehlermeldung ausgegeben.
Um die Einhaltung der Bereichsgrenzen zur Laufzeit zu überprüfen, müssen die Funktionen CheckRangeSigned bzw. CheckRangeUnsigned eingefügt werden. In diesen können Bereichsverletzungen in geeigneter Art und Weise abgefangen werden (z.B kann der Wert abgeschnitten werden oder ein Fehlerflag gesetzt werden). Sie werden implizit aufgerufen, sobald auf eine Variable geschrieben wird, die von einem Unterbereichstyp ist, der aus einem vorzeichenbehafteten bzw. vorzeichenlosen Typ gebildet wurde.
Beispiel: Im Falle einer Variable eines vorzeichenbehafteten Unterbereichstyps (also wie i von oben) wird die Funktion CheckRangeSigned aufgerufen, die folgendermaßen programmiert sein könnte, um einen Wert auf den erlaubten Bereich zurückzuschneiden:
FUNCTION CheckRangeSigned : DINT
VAR_INPUT
value, lower, upper: DINT;
WAGO-I/O-SYSTEM 759 WAGO-I/O-PRO 32
302 • Die Datentypen
Definierte Datentypen
END_VAR
IF (value < lower) THEN
CheckRangeSigned := lower;
ELSIF(value > upper) THEN
CheckRangeSigned := upper;
ELSE
CheckRangeSigned := value;
END_IF
Zwingend für einen automatischen Aufruf ist der Funktionsname CheckRangeSigned und die Gestaltung der Schnittstelle: Rückgabewert und drei Parameter vom Typ DINT.
Die Funktion wird beim Aufruf folgendermaßen parametriert:
value: |
bekommt den Wert, der dem Bereichstypen zugewiesen werden soll |
lower: |
die Untergrenze des Bereichs |
upper: |
die Obergrenze des Bereichs |
Rückgabewert: |
der Wert, der tatsächlich dem Bereichstypen zugewiesen wird |
Aus einer Zuweisung i := 10*y; wird in diesem Beispiel implizit folgende erzeugt:
i := CheckRangeSigned(10*y, -4095, 4095);
Wenn y beispielsweise den Wert 1000 hat, dann hat i nach dieser Zuweisung trotzdem nur den Wert 4095.
Entsprechend gilt für die Funktion CheckRangeUnsigned: Funktionsname und Schnittstelle müssen korrekt sein:
FUNCTION CheckRangeUnsigned : UDINT
VAR_INPUT
value, lower, upper: UDINT; END_VAR
Warnung:
Sind die beiden Funktionen CheckRangeSigned und CheckRangeUnsigned nicht vorhanden, findet zur Laufzeit keine Typüberprüfung der Unterbereichstypen statt! Die Variable i könnte dann also durchaus beliebige Werte zwischen –32768 und 32767 annehmen!
WAGO-I/O-SYSTEM 759 WAGO-I/O-PRO 32
Die Datentypen • 303
Definierte Datentypen
Warnung:
Wenn eine Funktion CheckRangeSigned bzw. CheckRangeUnsigned wie oben gezeigt implementiert ist, kann bei der Verwendung des Unterbereichstypen in einer FOR-Schleife eine Endlosschleife entstehen. Dies geschieht genau dann, wenn der für die FOR-Schleife angegebenen Bereich genauso groß oder größer ist als der des Unterbereichstypen !
Beispiel:
VAR
ui : UINT (0..10000); END_VAR
FOR ui:=0 TO 10000 DO
...
END_FOR
Die FOR-Schleife wird nicht verlassen, da ui nicht größer als 10000 werden kann.
Ebenso ist der Inhalt der CheckRange-Funktionen bei der Verwendung von Inkrementationswerten in der FOR-Schleife zu beachten !
WAGO-I/O-SYSTEM 759 WAGO-I/O-PRO 32
