S7-SoftSPS:Grundlegende Konfiguration: Unterschied zwischen den Versionen

Aus IBHsoftec Wiki
Wechseln zu: Navigation, Suche
 
(Eine dazwischenliegende Version des gleichen Benutzers werden nicht angezeigt)
Zeile 153: Zeile 153:
 
{|  
 
{|  
 
|-
 
|-
| L || 100 || // Es sind nur 100 digitale E/As erforderlich
+
| L || 100 || // Es sind nur 100 analoge E/As erforderlich
 
|-
 
|-
| T || MD 20 || // Anzahl der digitalen E/As einstellen
+
| T || MD 20 || // Anzahl der analoge E/As einstellen
 
|-
 
|-
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 723: Zeile 723:
  
 
Passender Beispiel DB:
 
Passender Beispiel DB:
 
 
  DATA_BLOCK DB 300
 
  DATA_BLOCK DB 300
 
  TITLE=DIAG
 
  TITLE=DIAG
Zeile 876: Zeile 875:
  
 
Passender Beispiel DB
 
Passender Beispiel DB
 
 
 
  DATA_BLOCK DB 300
 
  DATA_BLOCK DB 300
 
  TITLE=
 
  TITLE=

Aktuelle Version vom 17. Januar 2013, 08:43 Uhr

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