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 digitale E/As erforderlich |
T | MD 20 | // Anzahl der digitalen 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