S7-SoftSPS:Grundlegende Konfiguration
Hier werden die grundlegenden Konfigurationseigenschaften der CIF-Karten eingestellt.
Wenn kein PROFIBUS® verwendet wird, muss die Konfiguration mit dem Systemkonfigurator der Firma Hilscher durchgeführt werden:
Wie der Treiber in die S7-SoftSPSeingebunden wird, ist Bestandteil dieser Anleitungen:
Verwenden der Status und Control SFC
Abfrage CIF-Status
Zur Abfrage des CIF Status muss regelmäßig der Status SFC aufgerufen werden (z.B. aus dem OB 1). Der SFC besitzt folgende Parameter :
Name | Art | Typ | Funktion |
---|---|---|---|
HostFlags | OUT | BYTE | HostFlags |
DevFlags | OUT | BYTE | DevFlags |
CALL
SFC 252
OUT0
:=MB10
// HostFlags
OUT1
:=MB11
// DeviceFlags
Die HostFlags und DeviceFlags sind in der Sektion Steuer-SFC Funktion 141 und Funktion 142, wie auch im Hilscher Dokument tke.pdf auf Seite 8 genau beschrieben.
Steuer-SFC
Zum Ausführen von speziellen Funktionen der CIF-Karte dient der Steuer-Funktionsbaustein. Der Steuerbaustein wird folgendermaßen aufgerufen:
L
#Wert
T
MD 20
CALL
SFC 210
IN0
:= 142
// INPUT Funktionsnummer.
IN1
:= 0
// INPUT Datenbausteinnummer (bei DB Operationen, sonst 0).
IO2
:= MD 20
// IN_OUT Option / Parameter der Funktion / Ergebnis.
OUT3
:= MW 24
// OUTPUT Standard 80xx Fehlercodes, 0 bei Erfolg.
Bei Erfolg ist ebenfalls das BIE-Bit gesetzt.
Übersicht der Steuer-SFC Funktionen
Fkt-Nr. | Funktionsbeschreibung |
---|---|
102 | Anzahl der digitalen Ein/Ausgänge einstellen |
108 | Anzahl der analogen Ein/Ausgänge einstellen |
125 | Prozesseingänge lesen |
126 | Prozessausgänge schreiben |
130 | Lese globale Diagnose-Bits |
131 | Lese Busstatus |
132 | Lese fehlerhafte Busadresse |
133 | Lese Fehlernummer |
134 | Lese Status-Bits |
135 | Lese Diagnose-Bits |
136 | Dualportmemory lesen |
137 | Dualportmemory schreiben |
140 | Watchdog triggern |
141 | HostFlags lesen |
142 | DevFlags lesen |
150 | DevGetTaskState aufrufen und Ergebnis im DB liefern |
151 | DevGetInfo aufrufen und Ergebnis im DB liefern |
152 | DevGetTaskParameter aufrufen und Ergebnis im DB liefern |
Fkt 102 Anzahl der digitalen Ein-/Ausgänge einstellen
Mit dieser Funktion können Sie die Anzahl der digitalen Ein-/Ausgänge einstellen. Voreingestellt sind bei der S7-SoftSPS 512 Byte digitale Ein-/Ausgänge. Sie können mit dieser Funktion die Anzahl der digitalen Ein- und Ausgänge auf die erforderliche Anzahl reduzieren. Dies bewirkt eine Beschleunigung der S7-SoftSPS. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt. Der Rückgabewert enthält die Standard 80xx Fehlercodes.
Fehlercode:
0x8222 = Anzahl zu groß
Beispiel:
L
50
// Es sind nur 50 digitale E/As erforderlich
T
MD 20
// Anzahl der digitalen E/As einstellen
CALL
SFC 210
IN0
:= 102
// Funktion 102
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Anzahl
OUT3
:= MW 24
// Fehlercode
Fkt 108 Anzahl der analogen Ein-/Ausgänge einstellen
Mit dieser Funktion können Sie die Anzahl der analogen Ein-/Ausgänge einstellen. Voreingestellt sind bei der S7-SoftSPS, die beim Initialisieren der Karte gefundene maximale Größe des Dualport RAMs. Sie können mit dieser Funktion die Anzahl der analogen Ein- und Ausgänge auf die erforderliche Anzahl reduzieren. Gezählt wird ab dem Byte 0 des Dualports. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt. Der Rückgabewert enthält die Standard 80xx Fehlercodes
Fehlercode:
0x8222 = Anzahl zu groß
Beispiel:
L
100
// Es sind nur 100 analoge E/As erforderlich
T
MD 20
// Anzahl der analoge E/As einstellen
CALL
SFC 210
IN0
:= 108
// Funktion 108
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Anzahl
OUT3
:= MW 24
// Fehlercode
Fkt 125 Prozesseingänge lesen
Mit dieser Funktion können die Prozesseingänge in einen Datenbaustein geschrieben werden. Hiermit können alle verfügbaren Peripheriebytes verwaltet werden. Diese Funktion schreibt asynchron. Bei wortorientierten Eingängen besteht keine Datenkonsistenz und die Funktion darf daher nur mit byteorientierten Eingängen benutzt werden.
Beispiel:
L
W#16#0100
// Anfangsadresse der Prozesseingänge
T
MD 20
CALL
SFC 210
IN0
:= 125
// Funktion 125
IN1
:= 300
// DB 300
IO2
:= MD 20
// Anfangsadresse der Prozesseingänge
OUT3
:= MW 24
// Fehlercode
Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8222 = Datenbausteingröße größer als die Quellbereichsgröße
0x8042 = READY oder COM fehlt
0x807F = Interner Treiberzugriffsfehler
Fkt 126 Prozessausgänge schreiben
Mit dieser Funktion kann ein Datenbaustein in die Prozessausgänge geschrieben werden. Hiermit können alle verfügbaren Peripheriebytes verwaltet werden. Diese Funktion schreibt asynchron: Bei wortorientierten Ausgängen besteht keine Datenkonsistenz und die Funktion darf daher nur byteorientiert benutzt werden. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8223 = Datenbausteingröße größer als die Quellbereichsgröße
0x8043 = READY oder COM fehlt
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
W#16#0100
// Anfangsadresse im Prozessausgangsbereich
T
MD 20
CALL
SFC 210
IN0
:= 126
// Funktion 126
IN1
:= 300
// DB 300
IO2
:= MD 20
// Anfangsadresse im Prozessausgangsbereich
OUT3
:= MW 24
// Fehlercode
Fkt 130 Lese globale Diagnosebits
Mit dieser Funktion können die globalen Diagnosebits ausgelesen werden.
Bit | PROFIBUS®-Meldung |
---|---|
0 | Parameterfehler |
1 | Baugruppe wegen Busfehler in Auto_Clear_Modus verzweigt |
2 | Mindestens ein Slave ist nicht in der Datentransferphase oder meldet schweren Fehler |
3 | Schwerer Busfehler, es ist kein weiterer Datentransfer möglich |
4 | Kurzschluss auf dem Bus |
5 | Host ist nicht bereit |
6 | reserviert |
7 | reserviert |
Bit | Interbusmeldung |
---|---|
0 | Parameterfehler |
1 | Systemfehler aufgetreten |
2 | mindestens ein Slave meldet Modulfehler |
3 | mindestens eine defekte W1-Schnittstelle |
4 | mindestens eine defekte W2-Schnittstelle |
5 | reserviert |
6 | reserviert |
7 | reserviert |
Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
CALL
SFC 210
IN0
:= 130
// Funktion 130
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Diagnosebits
OUT3
:= MW 24
// Fehlercode
Fkt 131 Lese Busstatus
Mit dieser Funktion kann der Busstatus ausgelesen werden.
Aufbau für CIF-Interbusbus-Karte:
Bit | Interbusmeldung |
---|---|
0 | Bussegmente sind abgeschaltet |
1 | reserviert |
2 | reserviert |
3 | reserviert |
4 | reserviert |
5 | reserviert |
6 | reserviert |
7 | reserviert |
Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
CALL
SFC 210
IN0
:= 131
// Funktion 131
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Busstatus
OUT3
:= MW 24
// Fehlercode
Fkt 132 Lese fehlerhafte Busadresse
Mit dieser Funktion kann die fehlerhafte Busadresse ausgelesen werden. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
CALL
SFC 210
IN0
:= 132
// Funktion 132
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Fehlerhafte Busadresse
OUT3
:= MW 24
// Fehlercode
Fkt 133 Lese Fehlernummer
Mit dieser Funktion kann die Fehlernummer ausgelesen werden. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
CALL
SFC 210
IN0
:= 133
// Funktion 133
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Fehlernummer
OUT3
:= MW 24
// Fehlercode
Fkt 134 Lese Statusbits
Mit dieser Funktion können die Statusbits ausgelesen werden. Vor dem Aufruf wird die Bytenummer (0..15) eingetragen. Nach dem Aufruf der Funktion wird das angewählten Statusbyte zurückgeliefert. Wenn ein Bit im Statusbyte 1 ist, ist der entsprechende Slave aktiv, bei 0 inaktiv. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
W#16#03
// Byte Nummer 3
T
MD 20
CALL
SFC 210
IN0
:= 134
// Funktion 134
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Vor Aufruf Statusbytenummer, nach Aufruf der Inhalt des Statusbytes.
OUT3
:= MW 24
// Fehlercode
Fkt 135 Lese Diagnosebits
Mit dieser Funktion können die Diagnosebits ausgelesen werden. Vor dem Aufruf wird die Bytenummer (0..15) eingetragen. Nach dem Aufruf der Funktion wird das angewählten Diagnosebyte zurückgeliefert. Wenn ein Bit im Diagnosebyte 1 ist, hat sich der Zustand des entsprechenden Slaves geändert (von aktiv auf inaktiv oder umgekehrt). Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
W#16#03
// Byte Nummer 3
T
MD 20
CALL
SFC 210
IN0
:= 135
// Funktion 135
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Vor Aufruf Diagnosebytenummer, nach Aufruf der Inhalt des Diagnosebytes.
OUT3
:= MW 24
// Fehlercode
Fkt 136 Dualportmemory lesen
Mit dieser Funktion kann ein Bereich aus dem Dualportmemory der CIF-Karte in einen Datenbaustein geschrieben werden. Es wird grundsätzlich mit dem 1. Byte im Datenbaustein begonnen. Die Länge des Bereiches steht im IO-Parameter-L und die relative Adresse im Dualportmemory im IO-Parameter-H. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8222 = Datenbaustein zu klein.
0x8224 = Bereichsüberschreitung
0x8042 = READY oder COM fehlt
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
DW#16#0100000A
// 10 Bytes von der relativen Adresse 100H kopieren
T
MD 20
CALL
SFC 210
IN0
:= 136
// Funktion 136
IN1
:= 60
// DB 60
IO2
:= MD 20
// Es werden 10 Bytes von der relativen Adresse 0x100H gelesen.
OUT3
:= MW 24
// Fehlercode
Fkt 137 Dualportmemory schreiben
Mit dieser Funktion kann ein Bereich aus einem Datenbaustein in das Dualportmemory der CIF-Karte geschrieben werden. Es wird grundsätzlich mit dem 1. Byte im Datenbaustein begonnen. Die Länge des Bereiches steht im IO-Parameter-L und die relative Adresse im Dualportmemory im IO-Parameter-H. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8223 = Datenbaustein zu klein.
0x8225 = Bereichsüberschreitung
0x8043 = READY oder COM fehlt
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
DW#16#0100000A
// 10 Bytes von der relativen Adresse 100H kopieren
T
MD 20
CALL
SFC 210
IN0
:= 137
// Funktion 137
IN1
:= 60
// DB 60
IO2
:= MD 20
// Es werden 10 Bytes auf die relative Adresse 0x100H geschrieben.
OUT3
:= MW 24
// Fehlercode
Fkt 140 Watchdog triggern
Diese Funktion ist erforderlich, wenn sehr lange SPS-Zyklen vorkommen können. Nach Abschluss der Funktion steht im Fehlercode immer eine 0 und das BIE ist gesetzt.
Fehlercodes:
keine
Beispiel:
CALL
SFC 210
IN0
:= 140
// Funktion 140
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Kein Funktionscode
OUT3
:= MW 24
// Fehlercode
Fkt 141 Hostflags lesen
Mit dieser Funktion können die Hostflags ausgelesen werden.
Aufbau :
Bit | Hostflag - Meldung |
---|---|
0 | HostCom: Handshake für Empfangsmailbox |
1 | DevAck: Handshake für Sendemailbox |
2 | PdAck: E/A-Datensynchronisationsbit Host |
3 | ERR: Kommunikations fehler auf Modul |
4 | PdExtAck: Erweiterter Handshake für das Prozessabbild |
5 | COM: Nutzdatentransferphase für mindestens ein Modul aktiv |
6 | RUN: Parameterdaten gültig, CIF zur Kommunikation bereit |
7 | Ready: CIF läuft, kein Basis-Initialisierungsfehler |
Beispiel:
CALL
SFC 210
IN0
:= 141
// Funktion 141
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Gibt die Host-Flags zurück
OUT3
:= MW 24
// Fehlercode
Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler.
Fkt 142 DevFlags lesen
Mit dieser Funktion können die DevFlags ausgelesen werden.
Aufbau :
Bit | Deviceflag - Meldung |
---|---|
0 | HostCom: Handshake für Empfangsmailbox |
1 | DevCom: Handshake für Sendemailbox |
2 | PdCom: Handshake des Prozessabbildes |
3 | Reserviert |
4 | PdExtCom: Erweitertes Handshake des Prozessabbildes |
5 | NotRdy: Busbetrieb anhalten (Module im Reset) oder freigeben |
6 | Init: Zurücksetzen des CIF mit Übernahme der Parameter aus dem DPM |
7 | Reset: Zurücksetzen des CIF |
Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x807F = Interner Treiberzugriffsfehler
Beispiel:
CALL
SFC 210
IN0
:= 142
// Funktion 142
IN1
:= 0
// Kein DB
IO2
:= MD 20
// Gibt die Dev-Flags zurück
OUT3
:= MW 24
// Fehlercode
Fkt 150 DevGetTaskState ausführen
Mit dieser Funktion können die globalen Diagnoseinformationen, die vom CIF Modul gemeldet werden, ausgelesen werden. Die Struktur beinhaltet Informationen über den Buszustand und den Zustand einzelner Slaves. Die Informationen sind im Wesentlichen in Bitfeldern abgelegt. So stehen Informationen über den Master und den Zustand des Feldbusses zur Verfügung. Des Weiteren kann abgelesen werden, welche Slaves konfiguriert sind und bedient werden, welche Slaves aktiv und inaktiv sind und welche Slaves Diagnoseinformationen beinhalten. Intern wird die Treiberfunktion DevGetTaskState angestoßen. Das Resultat kann in einem DB hinterlegt werden. Um die Funktion verwenden zu können, sollte unbedingt die Dokumentation zur Funktion dem Hilscher Manual dpm_pie.pdf entnommen werden. Der DB sollte der dort beschriebenen DPM_DIAGNOSTICS Struktur entsprechen. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8222 = Datenbaustein zu klein.
0x8225 = Bereichsüberschreitung.
0x807F = Interner Treiberzugriffsfehler.
Beispiel:
L
DW#16#2
T
MD 20
// Task 2
CALL
SFC 210
IN0
:= 150
// Funktion 150
IN1
:= 300
// DB 300
IO2
:= MD 20
// Task Nummer.
OUT3
:= MW 24
// Fehlercode
Passender Beispiel DB:
DATA_BLOCK DB 300 TITLE=DIAG VERSION : 0.1 STRUCT bGlobalBits : BYTE; bDPM_state : BYTE; tError : STRUCT bErr_Rem_Adr : BYTE; bErr_Event : BYTE; END_STRUCT; usBus_Error_Cnt : WORD; usTime_Out_Cnt : WORD; abReserved : ARRAY[0..7] OF BYTE; abSl_cfg : ARRAY[0..15] OF BYTE; abSl_state : ARRAY[0..15] OF BYTE; abSl_diag : ARRAY[0..15] OF BYTE; END_STRUCT; BEGIN END_DATA_BLOCK
Fkt 151 DevGetInfo ausführen
Mit DevGetInfo können verschiedene Informationen aus dem Dualport der CIF Baugruppe ausgelesen werden. Dies sind:
DW#16#1 GET_DRIVER_INFO Treiber Statusinformationen
DW#16#2 GET_VERSION_INFO Versionsinformation der CIF
DW#16#3 GET_FIRMWARE_INFO Version der CIF Firmware
DW#16#4 GET_TASK_INFO Task Informationen
DW#16#5 GET_RCS_INFO CIF spezifische Betriebssysteminformationen
DW#16#6 GET_DEV_INFO Geräteinformationen
DW#16#7 GET_IO_INFO Geräte E/A Informationen
DW#16#8 GET_IO_SEND_DATA Geräte E/A Sendedaten
Intern wird die Treiberfunktion DevGetInfo angestossen. Das Resultat kann in einem DB hinterlegt werden. Um die Funktion verwenden zu können, sollte unbedingt die Dokumentation zur Funktion dem Hilscher Manual devdrv.pdf entnommen werden. Der DB sollte den dort beschriebenen Strukturen entsprechen. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8222 = Datenbaustein zu klein.
0x8225 = Funktionsnummer nicht zulässig
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
DW#16#1
// Funktion GET_DRIVER_INFO
T
MD 20
CALL
SFC 210
IN0
:= 151
// Funktion 151
IN1
:= 300
// DB 300
IO2
:= MD 20
// Funktionsnummer
OUT3
:= MW 24
// Fehlercode
Fkt 152 DevGetTaskParameter ausführen
Mit dieser Funktion können die globalen Einstellungen wie beispielsweise die Übertragungsrate des Busses, die Watchdogzeit usw. aus der CIF ausgelesen werden. Intern wird die Treiberfunktion DevGetTaskParameter angestoßen. Das Resultat kann in einem DB hinterlegt werden. Um die Funktion verwenden zu können, sollte unbedingt die Dokumentation zur Funktion dem Hilscher Manual devdrv.pdf entnommen werden. Der DB sollte der dort beschriebenen Struktur entsprechen.Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8222 = Datenbaustein zu klein.
0x8225 = Funktionsnummer nicht zulässig
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
DW#16#2
// Task 2
T
MD 20
CALL
SFC 210
IN0
:= 152
// Funktion 152
IN1
:= 300
// DB 300
IO2
:= MD 20
// Funktionsnummer
OUT3
:= MW 24
// Fehlercode
Fkt 153 Slavediagnose eines spezifischen Slaves lesen
Mit dieser Funktion können die Normdiagnosedaten eines DP-Slaves ausgelesen werden. Die Informationen werden im Format DPM_SLAVE_SINGLE_DIAGNOSTICS zurückgeliefert. Diese Funktion darf nicht verwendet werden, wenn gleichzeitig die Datei cifcfg.dll zur Konfiguration und Diagnose des PROFIBUS® verwendet wird! In diesem Falle ist die über den Treiber cifcfg.dll bereitgestellte SFC 13 (wie Hardware SPS) zu verwenden. Details können dem Hilscher Manual dpm_pie.pdf, Sektion DDLM_Slave_Diag entnommen werden. Der DB sollte der dort beschriebenen Struktur entsprechen. Nach erfolgreichem Abschluss der Funktion steht im Fehlercode eine 0 und das BIE ist gesetzt. Falls die Funktion nicht erfolgreich abgeschlossen wurde, ist das BIE nicht gesetzt.
Fehlercodes:
0x813A = Datenbaustein nicht vorhanden
0x8222 = Datenbaustein zu klein
0x8225 = Bereichsüberschreitung
0x807F = Interner Treiberzugriffsfehler
Beispiel:
L
DW#16#2B
// PROFIBUS®-Adresse des Slaves (hier : 11dez)
T
MD 20
CALL
SFC 210
IN0
:= 153
// Funktion 153
IN1
:= 300
// DB 300
IO2
:= MD 20
// Funktionsnummer
OUT3
:= MW 24
// Fehlercode
Passender Beispiel DB
DATA_BLOCK DB 300 TITLE= VERSION : 0.1 STRUCT DPM_SLAVE_DIAG : STRUCT Stationsstatus_1 : BYTE; Stationsstatus_2 : BYTE; Stationsstatus_3 : BYTE; bMaster_Add : BYTE; // corresponding master address usIdent_Number : WORD; // ident number, motorola format abExt_Diag_Data : ARRAY[0..99] OF BYTE; // extended diagnostic field END_STRUCT; END_STRUCT; BEGIN END_DATA_BLOCK