S7-SoftSPS:Grundlegende Konfiguration: Unterschied zwischen den Versionen

Aus IBHsoftec Wiki
Wechseln zu: Navigation, Suche
Zeile 25: Zeile 25:
 
|}
 
|}
  
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 34: Zeile 34:
 
| OUT1 || :=MB11 || // DeviceFlags
 
| OUT1 || :=MB11 || // DeviceFlags
 
|}
 
|}
 
+
</code>
  
 
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.
 
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.
Zeile 42: Zeile 42:
  
 
Zum Ausführen von speziellen Funktionen der CIF-Karte dient der Steuer-Funktionsbaustein. Der Steuerbaustein wird folgendermaßen aufgerufen:
 
Zum Ausführen von speziellen Funktionen der CIF-Karte dient der Steuer-Funktionsbaustein. Der Steuerbaustein wird folgendermaßen aufgerufen:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 59: Zeile 59:
 
| OUT3 || := MW 24 || // OUTPUT Standard 80xx Fehlercodes, 0 bei Erfolg.
 
| OUT3 || := MW 24 || // OUTPUT Standard 80xx Fehlercodes, 0 bei Erfolg.
 
|}
 
|}
 
+
</code>
 
Bei Erfolg ist ebenfalls das BIE-Bit gesetzt.
 
Bei Erfolg ist ebenfalls das BIE-Bit gesetzt.
  
Zeile 119: Zeile 119:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 136: Zeile 136:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 150: Zeile 150:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 167: Zeile 167:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 176: Zeile 176:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 193: Zeile 193:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
 
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.
 
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.
  
Zeile 225: Zeile 225:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 242: Zeile 242:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 301: Zeile 301:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 313: Zeile 313:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 352: Zeile 352:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 364: Zeile 364:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 378: Zeile 378:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 390: Zeile 390:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 404: Zeile 404:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 416: Zeile 416:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 430: Zeile 430:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 447: Zeile 447:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 461: Zeile 461:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 478: Zeile 478:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 500: Zeile 500:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 517: Zeile 517:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 539: Zeile 539:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 556: Zeile 556:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 570: Zeile 570:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 582: Zeile 582:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 614: Zeile 614:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 626: Zeile 626:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
 
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.
 
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.
  
Zeile 671: Zeile 671:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|
 
{|
 
| CALL || SFC 210
 
| CALL || SFC 210
Zeile 683: Zeile 683:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 703: Zeile 703:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 720: Zeile 720:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
 
Passender Beispiel DB:
 
Passender Beispiel DB:
  
DATA_BLOCK DB 300
+
DATA_BLOCK DB 300
 
+
TITLE=DIAG
TITLE=DIAG
+
VERSION : 0.1
 
+
STRUCT
VERSION : 0.1
+
bGlobalBits : BYTE;
 
+
bDPM_state : BYTE;
STRUCT
+
tError : STRUCT
 
+
bErr_Rem_Adr : BYTE;
bGlobalBits : BYTE;
+
bErr_Event : BYTE;
 
+
END_STRUCT;
bDPM_state : BYTE;
+
usBus_Error_Cnt : WORD;
 
+
usTime_Out_Cnt : WORD;
tError : STRUCT
+
abReserved : ARRAY[0..7] OF BYTE;
 
+
abSl_cfg : ARRAY[0..15] OF BYTE;
bErr_Rem_Adr : BYTE;
+
abSl_state : ARRAY[0..15] OF BYTE;
 
+
abSl_diag : ARRAY[0..15] OF BYTE;
bErr_Event : BYTE;
+
END_STRUCT;
 
+
BEGIN
END_STRUCT;
+
END_DATA_BLOCK
 
+
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
+
  
  
Zeile 800: Zeile 782:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 817: Zeile 799:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 837: Zeile 819:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 854: Zeile 836:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
  
Zeile 874: Zeile 856:
  
 
Beispiel:
 
Beispiel:
 
+
<code>
 
{|  
 
{|  
 
|-
 
|-
Zeile 891: Zeile 873:
 
| OUT3 || := MW 24 || // Fehlercode
 
| OUT3 || := MW 24 || // Fehlercode
 
|}
 
|}
 
+
</code>
  
 
Passender Beispiel DB
 
Passender Beispiel DB
  
  
DATA_BLOCK DB 300
+
DATA_BLOCK DB 300
 
+
TITLE=
TITLE=
+
VERSION : 0.1
 
+
STRUCT
VERSION : 0.1
+
DPM_SLAVE_DIAG : STRUCT
 
+
Stationsstatus_1 : BYTE;
STRUCT
+
Stationsstatus_2 : BYTE;
 
+
Stationsstatus_3 : BYTE;
DPM_SLAVE_DIAG : STRUCT
+
bMaster_Add : BYTE; // corresponding master address
 
+
usIdent_Number : WORD; // ident number, motorola format
Stationsstatus_1 : BYTE;
+
abExt_Diag_Data : ARRAY[0..99] OF BYTE; // extended diagnostic field
 
+
END_STRUCT;
Stationsstatus_2 : BYTE;
+
END_STRUCT;
 
+
BEGIN
Stationsstatus_3 : BYTE;
+
END_DATA_BLOCK
 
+
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
+

Version vom 13. Dezember 2012, 08:49 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 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