S7-SoftSPS:Grundlegende Konfiguration: Unterschied zwischen den Versionen

Aus IBHsoftec Wiki
Wechseln zu: Navigation, Suche
 
(7 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
Wenn kein PROFIBUS<sup>®</sup> verwendet wird, muss die Konfiguration mit dem Systemkonfigurator der Firma Hilscher durchgeführt werden:
 
Wenn kein PROFIBUS<sup>®</sup> verwendet wird, muss die Konfiguration mit dem Systemkonfigurator der Firma Hilscher durchgeführt werden:
  
* [[SyCon.htm|Konfiguration der CIF-Karte mit dem Systemkonfigurator]]
+
* [[S7-SoftSPS:Konfiguration der CIF-Karte mit dem Systemkonfigurator|Konfiguration der CIF-Karte mit dem Systemkonfigurator]]
  
 
Wie der Treiber in die ''S7-SoftSPS''eingebunden wird, ist Bestandteil dieser Anleitungen:
 
Wie der Treiber in die ''S7-SoftSPS''eingebunden wird, ist Bestandteil dieser Anleitungen:
  
* [[Oberflaeche/CIF.htm|Konfiguration via Oberfläche]]
+
* [[S7-SoftSPS:CIF 30/50/60 Einstellungen|Konfiguration via Oberfläche]]
* [[INI/CIF30.htm|Konfiguration in PLC43.INI]]
+
* [[S7-SoftSPS:CIF 30/50/60 Einstellungen der IBHsoftec S7-SoftSPS|Konfiguration in PLC43.INI]]
  
 
== Verwenden der Status und Control SFC ==
 
== Verwenden der Status und Control SFC ==
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>
 
{|  
 
{|  
 
|-
 
|-
| 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 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.
  
Fehlercodes:<br />
 
0x813A = Datenbaustein nicht vorhanden<br />
 
0x8222 = Datenbausteingröße größer als die Quellbereichsgröße<br />
 
0x8042 = READY oder COM fehlt<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
'''Fkt 126 Prozessausgänge schreiben'''<br />
+
Fehlercodes:
Mit dieser Funktion kann ein Datenbaustein in die Prozessausgänge geschrieben werden. Hiermit können alle verfügbaren Peripheriebytes verwaltet werden.<br />
+
 
Diese Funktion schreibt asynchron: Bei wortorientierten Ausgängen besteht keine Datenkonsistenz und die Funktion darf daher nur byteorientiert benutzt werden.<br />
+
0x813A = Datenbaustein nicht vorhanden
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.
+
 
 +
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
  
Fehlercodes:<br />
 
0x813A = Datenbaustein nicht vorhanden<br />
 
0x8223 = Datenbausteingröße größer als die Quellbereichsgröße<br />
 
0x8043 = READY oder COM fehlt<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  W#16#0100  || // Anfangsadresse im Prozessausgangsbereich
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 126  ||  // Funktion 126
 +
|-
 +
| IN1 || := 300 || // DB 300
 +
|-
 +
| IO2 || := MD 20  || // Anfangsadresse im Prozessausgangsbereich
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">W#16#0100</td>
 
<td align="left">//Anfangsadresse im Prozessausgangsbereich</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD 20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 126</td>
 
<td align="left">// Funktion 126</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 300</td>
 
<td align="left">// DB 300</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Anfangsadresse im Prozessausgangsbereich</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 130 Lese globale Diagnosebits'''<br />
+
'''Fkt 130 Lese globale Diagnosebits'''
Mit dieser Funktion können die globalen Diagnosebits ausgelesen werden.
+
  
<table>
+
Mit dieser Funktion können die globalen Diagnosebits ausgelesen werden.
<tbody>
+
<tr class="odd">
+
<td align="left">Bit</td>
+
<td align="left">PROFIBUS<sup>®</sup>-Meldung</td>
+
</tr>
+
<tr class="even">
+
<td align="left">0</td>
+
<td align="left">Parameterfehler</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">1</td>
+
<td align="left">Baugruppe wegen Busfehler in Auto_Clear_Modus verzweigt</td>
+
</tr>
+
<tr class="even">
+
<td align="left">2</td>
+
<td align="left">Mindestens ein Slave ist nicht in der Datentransferphase oder meldet schweren Fehler</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">3</td>
+
<td align="left">Schwerer Busfehler, es ist kein weiterer Datentransfer möglich</td>
+
</tr>
+
<tr class="even">
+
<td align="left">4</td>
+
<td align="left">Kurzschluss auf dem Bus</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">5</td>
+
<td align="left">Host ist nicht bereit</td>
+
</tr>
+
<tr class="even">
+
<td align="left">6</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">7</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
</tbody>
+
</table>
+
  
<br />
+
{| class="wikitable"
 +
|-
 +
! Bit !! PROFIBUS®-Meldung
 +
|-
 +
|style="width: 5em"| 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
 +
|}
  
  
<table>
+
{| class="wikitable"
<tbody>
+
|-
<tr class="odd">
+
! Bit !! Interbusmeldung
<td align="left">Bit</td>
+
|-
<td align="left">Interbusmeldung</td>
+
|style="width: 5em"| 0 || Parameterfehler
</tr>
+
|-
<tr class="even">
+
| 1 || Systemfehler aufgetreten
<td align="left">0</td>
+
|-
<td align="left">Parameterfehler</td>
+
| 2 || mindestens ein Slave meldet Modulfehler
</tr>
+
|-
<tr class="odd">
+
| 3 || mindestens eine defekte W1-Schnittstelle
<td align="left">1</td>
+
|-
<td align="left">Systemfehler aufgetreten</td>
+
| 4 || mindestens eine defekte W2-Schnittstelle
</tr>
+
|-
<tr class="even">
+
| 5 || reserviert
<td align="left">2</td>
+
|-
<td align="left">mindestens ein Slave meldet Modulfehler</td>
+
| 6 || reserviert
</tr>
+
|-
<tr class="odd">
+
| 7 || reserviert
<td align="left">3</td>
+
|}
<td align="left">mindestens eine defekte W1-Schnittstelle</td>
+
</tr>
+
<tr class="even">
+
<td align="left">4</td>
+
<td align="left">mindestens eine defekte W2-Schnittstelle</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">5</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
<tr class="even">
+
<td align="left">6</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">7</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
</tbody>
+
</table>
+
  
 
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.
  
Fehlercodes:<br />
+
 
0x807F = Interner Treiberzugriffsfehler
+
Fehlercodes:
 +
 
 +
0x807F = Interner Treiberzugriffsfehler
 +
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 130  ||  // Funktion 130
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Diagnosebits
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 130</td>
 
<td align="left">// Funktion 130</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Diagnosebits</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 131 Lese Busstatus'''<br />
+
'''Fkt 131 Lese Busstatus'''
Mit dieser Funktion kann der Busstatus ausgelesen werden.<br />
+
Aufbau für CIF-Interbusbus-Karte:
+
  
<table>
+
Mit dieser Funktion kann der Busstatus ausgelesen werden.
<tbody>
+
 
<tr class="odd">
+
Aufbau für CIF-Interbusbus-Karte:
<td align="left">Bit</td>
+
 
<td align="left">Interbusmeldung</td>
+
{| class="wikitable"
</tr>
+
|-
<tr class="even">
+
! Bit !! Interbusmeldung
<td align="left">0</td>
+
|-
<td align="left">Reserviert</td>
+
|style="width: 5em"| 0 || Bussegmente sind abgeschaltet
</tr>
+
|-
<tr class="odd">
+
| 1 || reserviert
<td align="left">1</td>
+
|-
<td align="left">Reserviert</td>
+
| 2 || reserviert
</tr>
+
|-
<tr class="even">
+
| 3 || reserviert
<td align="left">2</td>
+
|-
<td align="left">Reserviert</td>
+
| 4 || reserviert
</tr>
+
|-
<tr class="odd">
+
| 5 || reserviert
<td align="left">3</td>
+
|-
<td align="left">Reserviert</td>
+
| 6 || reserviert
</tr>
+
|-
<tr class="even">
+
| 7 || reserviert
<td align="left">4</td>
+
|}
<td align="left">Reserviert</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">5</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
<tr class="even">
+
<td align="left">6</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">7</td>
+
<td align="left">Reserviert</td>
+
</tr>
+
</tbody>
+
</table>
+
  
 
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.
  
Fehlercodes:<br />
+
 
0x807F = Interner Treiberzugriffsfehler
+
Fehlercodes:
 +
 
 +
0x807F = Interner Treiberzugriffsfehler
 +
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 131  ||  // Funktion 131
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Busstatus
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 131</td>
 
<td align="left">// Funktion 131</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Busstatus</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 132 Lese fehlerhafte Busadresse'''<br />
+
'''Fkt 132 Lese fehlerhafte Busadresse'''
Mit dieser Funktion kann die fehlerhafte Busadresse ausgelesen werden. <br />
+
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:<br />
+
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.
0x807F = Interner Treiberzugriffsfehler
+
  
Beispiel:
 
  
<table>
+
Fehlercodes:
<tbody>
+
<tr class="odd">
+
<td align="left">CALL</td>
+
<td align="left">SFC 210</td>
+
<td align="left"></td>
+
</tr>
+
<tr class="even">
+
<td align="left">IN0</td>
+
<td align="left">:= 132</td>
+
<td align="left">// Funktion 132</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">IN1</td>
+
<td align="left">:= 0</td>
+
<td align="left">// kein DB</td>
+
</tr>
+
<tr class="even">
+
<td align="left">IO2</td>
+
<td align="left">:= MD 20</td>
+
<td align="left">// Fehlerhafte Busadresse</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">OUT3</td>
+
<td align="left">:= MW 24</td>
+
<td align="left">// Fehlercode</td>
+
</tr>
+
</tbody>
+
</table>
+
  
'''Fkt 133 Lese Fehlernummer'''<br />
+
0x807F = Interner Treiberzugriffsfehler
Mit dieser Funktion kann die Fehlernummer ausgelesen werden.<br />
+
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:<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 132  ||  // Funktion 132
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Fehlerhafte Busadresse
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 133</td>
 
<td align="left">// Funktion 133</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Fehlernummer</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 134 Lese Statusbits'''<br />
+
'''Fkt 133 Lese Fehlernummer'''
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. <br />
+
 
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.
+
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
  
Fehlercodes:<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 133  ||  // Funktion 133
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Fehlernummer
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">W#16#03</td>
 
<td align="left">// Byte Nummer 3</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 134</td>
 
<td align="left">// Funktion 134</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Vor Aufruf Statusbytenummer, nach Aufruf der Inhalt des Statusbytes.</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 135 Lese Diagnosebits'''<br />
+
'''Fkt 134 Lese Statusbits'''
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).<br />
+
 
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.
+
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
  
Fehlercodes:<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  W#16#03  || // Byte Nummer 3
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 134  ||  // Funktion 134
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Vor Aufruf Statusbytenummer, nach Aufruf der Inhalt des Statusbytes.
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">W#16#03</td>
 
<td align="left">// Byte Nummer 3</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 135</td>
 
<td align="left">// Funktion 135</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Vor Aufruf Diagnosebytenummer, nach Aufruf der Inhalt des Diagnosebytes.</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 136 Dualportmemory lesen'''<br />
+
'''Fkt 135 Lese Diagnosebits'''
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.<br />
+
 
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.
+
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
  
Fehlercodes:<br />
 
0x813A = Datenbaustein nicht vorhanden<br />
 
0x8222 = Datenbaustein zu klein.<br />
 
0x8224 = Bereichsüberschreitung<br />
 
0x8042 = READY oder COM fehlt<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  W#16#03  || // Byte Nummer 3
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 135  ||  // Funktion 135
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Vor Aufruf Diagnosebytenummer, nach Aufruf der Inhalt des Diagnosebytes.
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">DW#16#0100000A</td>
 
<td align="left">// 10 Bytes von der relativen Adresse 100H kopieren</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 136</td>
 
<td align="left">// Funktion 136</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 60</td>
 
<td align="left">// DB 60</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Es werden 10 Bytes von der relativen Adresse 0x100H gelesen.</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 137 Dualportmemory schreiben'''<br />
+
'''Fkt 136 Dualportmemory lesen'''
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.<br />
+
 
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.
+
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
  
Fehlercodes:<br />
 
0x813A = Datenbaustein nicht vorhanden<br />
 
0x8223 = Datenbaustein zu klein.<br />
 
0x8225 = Bereichsüberschreitung<br />
 
0x8043 = READY oder COM fehlt<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  DW#16#0100000A  || // 10 Bytes von der relativen Adresse 100H kopieren
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 136  ||  // Funktion 136
 +
|-
 +
| IN1 || := 60 || // DB 60
 +
|-
 +
| IO2 || := MD 20  || // Es werden 10 Bytes von der relativen Adresse 0x100H gelesen.
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">DW#16#0100000A</td>
 
<td align="left">// 10 Bytes von der relativen Adresse 100H kopieren</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 137</td>
 
<td align="left">// Funktion 137</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 60</td>
 
<td align="left">// DB 60</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Es werden 10 Bytes auf die relative Adresse 0x100H geschrieben.</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 140 Watchdog triggern'''<br />
+
'''Fkt 137 Dualportmemory schreiben'''
Diese Funktion ist erforderlich, wenn sehr lange SPS-Zyklen vorkommen können.<br />
+
 
Nach Abschluss der Funktion steht im Fehlercode immer eine 0 und das BIE ist gesetzt.
+
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
  
Fehlercodes:<br />
 
keine
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  DW#16#0100000A  || // 10 Bytes von der relativen Adresse 100H kopieren
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 137  ||  // Funktion 137
 +
|-
 +
| IN1 || := 60 || // DB 60
 +
|-
 +
| IO2 || := MD 20  || // Es werden 10 Bytes auf die relative Adresse 0x100H geschrieben.
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 140</td>
 
<td align="left">// Funktion 140</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Kein Funktionscode</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 141 Hostflags lesen'''<br />
+
'''Fkt 140 Watchdog triggern'''
Mit dieser Funktion können die Hostflags ausgelesen werden.<br />
+
 
Aufbau :
+
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
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">Bit</td>
 
<td align="left">Hostflag - Meldung</td>
 
</tr>
 
<tr class="even">
 
<td align="left">0</td>
 
<td align="left">HostCom: Handshake für Empfangsmailbox</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">1</td>
 
<td align="left">DevAck: Handshake für Sendemailbox</td>
 
</tr>
 
<tr class="even">
 
<td align="left">2</td>
 
<td align="left">PdAck: E/A-Datensynchronisationsbit Host</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">3</td>
 
<td align="left">ERR: Kommunikations fehler auf Modul</td>
 
</tr>
 
<tr class="even">
 
<td align="left">4</td>
 
<td align="left">PdExtAck: Erweiterter Handshake für das Prozessabbild</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">5</td>
 
<td align="left">COM: Nutzdatentransferphase für mindestens ein Modul aktiv</td>
 
</tr>
 
<tr class="even">
 
<td align="left">6</td>
 
<td align="left">RUN: Parameterdaten gültig, CIF zur Kommunikation bereit</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">7</td>
 
<td align="left">Ready: CIF läuft, kein Basis-Initialisierungsfehler</td>
 
</tr>
 
</tbody>
 
</table>
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 140  ||  // Funktion 140
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Kein Funktionscode
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 141</td>
 
<td align="left">// Funktion 141</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Gibt die Host-Flags zurück</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
 +
'''Fkt 141 Hostflags lesen'''
 +
 +
Mit dieser Funktion können die Hostflags ausgelesen werden.
 +
 +
Aufbau :
 +
 +
{| class="wikitable"
 +
|-
 +
! Bit !! Hostflag - Meldung
 +
|-
 +
|style="width: 5em"| 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:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 141  ||  // Funktion 141
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Gibt die Host-Flags zurück
 +
|-
 +
| 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.
  
Fehlercodes:<br />
 
0x807F = Interner Treiberzugriffsfehler.
 
  
'''Fkt 142 DevFlags lesen'''<br />
+
Fehlercodes:
Mit dieser Funktion können die DevFlags ausgelesen werden.<br />
+
Aufbau :
+
  
<table>
+
0x807F = Interner Treiberzugriffsfehler.
<tbody>
+
 
<tr class="odd">
+
 
<td align="left">Bit</td>
+
'''Fkt 142 DevFlags lesen'''
<td align="left">Deviceflag - Meldung</td>
+
 
</tr>
+
Mit dieser Funktion können die DevFlags ausgelesen werden.
<tr class="even">
+
 
<td align="left">0</td>
+
Aufbau :
<td align="left">HostCom: Handshake für Empfangsmailbox</td>
+
 
</tr>
+
{| class="wikitable"
<tr class="odd">
+
|-
<td align="left">1</td>
+
! Bit !! Deviceflag - Meldung
<td align="left">DevCom: Handshake für Sendemailbox</td>
+
|-
</tr>
+
|style="width: 5em"| 0 || HostCom: Handshake für Empfangsmailbox
<tr class="even">
+
|-
<td align="left">2</td>
+
| 1 || DevCom: Handshake für Sendemailbox
<td align="left">PdCom: Handshake des Prozessabbildes</td>
+
|-
</tr>
+
| 2 || PdCom: Handshake des Prozessabbildes
<tr class="odd">
+
|-
<td align="left">3</td>
+
| 3 || Reserviert
<td align="left">Reserviert</td>
+
|-
</tr>
+
| 4 || PdExtCom: Erweitertes Handshake des Prozessabbildes
<tr class="even">
+
|-
<td align="left">4</td>
+
| 5 || NotRdy: Busbetrieb anhalten (Module im Reset) oder freigeben
<td align="left">PdExtCom: Erweitertes Handshake des Prozessabbildes</td>
+
|-
</tr>
+
| 6 || Init: Zurücksetzen des CIF mit Übernahme der Parameter aus dem DPM
<tr class="odd">
+
|-
<td align="left">5</td>
+
| 7 || Reset: Zurücksetzen des CIF
<td align="left">NotRdy: Busbetrieb anhalten (Module im Reset) oder freigeben</td>
+
|}
</tr>
+
<tr class="even">
+
<td align="left">6</td>
+
<td align="left">Init: Zurücksetzen des CIF mit Übernahme der Parameter aus dem DPM</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">7</td>
+
<td align="left">Reset: Zurücksetzen des CIF</td>
+
</tr>
+
</tbody>
+
</table>
+
  
 
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.
  
Fehlercodes:<br />
+
 
0x807F = Interner Treiberzugriffsfehler
+
Fehlercodes:
 +
 
 +
0x807F = Interner Treiberzugriffsfehler
 +
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 142  ||  // Funktion 142
 +
|-
 +
| IN1 || := 0 || // Kein DB
 +
|-
 +
| IO2 || := MD 20  || // Gibt die Dev-Flags zurück
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 142</td>
 
<td align="left">// Funktion 142</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 0</td>
 
<td align="left">// kein DB</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Gibt die Dev-Flags zurück</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 150 DevGetTaskState ausführen'''<br />
+
'''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.<br />
+
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.<br />
+
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:<br />
+
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.
0x813A = Datenbaustein nicht vorhanden<br />
+
0x8222 = Datenbaustein zu klein.<br />
+
0x8225 = Bereichsüberschreitung.<br />
+
0x807F = Interner Treiberzugriffsfehler.
+
  
Beispiel:
 
  
<table>
+
Fehlercodes:
<tbody>
+
<tr class="odd">
+
<td align="left">L</td>
+
<td align="left">DW#16#2</td>
+
<td align="left"></td>
+
</tr>
+
<tr class="even">
+
<td align="left">T</td>
+
<td align="left">MD20 // Task 2</td>
+
<td align="left"></td>
+
</tr>
+
<tr class="odd">
+
<td align="left">CALL</td>
+
<td align="left">SFC 210</td>
+
<td align="left"></td>
+
</tr>
+
<tr class="even">
+
<td align="left">IN0</td>
+
<td align="left">:= 150</td>
+
<td align="left">// Funktion 150</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">IN1</td>
+
<td align="left">:= 300</td>
+
<td align="left">// DB 300</td>
+
</tr>
+
<tr class="even">
+
<td align="left">IO2</td>
+
<td align="left">:= MD 20</td>
+
<td align="left">// Task Nummer.</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">OUT3</td>
+
<td align="left">:= MW 24</td>
+
<td align="left">// Fehlercode</td>
+
</tr>
+
</tbody>
+
</table>
+
  
Passender Beispiel DB:
+
0x813A = Datenbaustein nicht vorhanden
  
DATA_BLOCK DB 300<br />
+
0x8222 = Datenbaustein zu klein.
  TITLE=DIAG<br />
+
 
  VERSION : 0.1<br />
+
0x8225 = Bereichsüberschreitung.
  STRUCT<br />
+
 
  bGlobalBits : BYTE;<br />
+
0x807F = Interner Treiberzugriffsfehler.
  bDPM_state : BYTE;<br />
+
 
  tError : STRUCT<br />
+
 
  bErr_Rem_Adr : BYTE;<br />
+
Beispiel:
  bErr_Event : BYTE;<br />
+
<code>
  END_STRUCT;<br />
+
{|
  usBus_Error_Cnt : WORD;<br />
+
|-
  usTime_Out_Cnt : WORD;<br />
+
| L ||  DW#16#2 
  abReserved : ARRAY[0..7] OF BYTE;<br />
+
|-
  abSl_cfg : ARRAY[0..15] OF BYTE;<br />
+
| T || MD 20 || // Task 2
  abSl_state : ARRAY[0..15] OF BYTE;<br />
+
|-
  abSl_diag : ARRAY[0..15] OF BYTE;<br />
+
| CALL || SFC 210
  END_STRUCT;<br />
+
|-
  BEGIN<br />
+
|style="width: 5em"| IN0 ||style="width: 11em"| := 150  ||  // Funktion 150
 +
|-
 +
| IN1 || := 300 || // DB 300
 +
|-
 +
| IO2 || := MD 20  || // Task Nummer.
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
 +
 
 +
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
 
  END_DATA_BLOCK
  
'''Fkt 151 DevGetInfo ausführen'''<br />
 
Mit DevGetInfo können verschiedene Informationen aus dem Dualport der CIF Baugruppe ausgelesen werden. Dies sind:
 
  
DW#16#1 GET_DRIVER_INFO Treiber Statusinformationen<br />
 
DW#16#2 GET_VERSION_INFO Versionsinformation der CIF<br />
 
DW#16#3 GET_FIRMWARE_INFO Version der CIF Firmware<br />
 
DW#16#4 GET_TASK_INFO Task Informationen<br />
 
DW#16#5 GET_RCS_INFO CIF spezifische Betriebssysteminformationen<br />
 
DW#16#6 GET_DEV_INFO Geräteinformationen<br />
 
DW#16#7 GET_IO_INFO Geräte E/A Informationen<br />
 
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.<br />
+
'''Fkt 151 DevGetInfo ausführen'''
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:<br />
+
Mit DevGetInfo können verschiedene Informationen aus dem Dualport der CIF Baugruppe ausgelesen werden. Dies sind:
0x813A = Datenbaustein nicht vorhanden<br />
+
0x8222 = Datenbaustein zu klein.<br />
+
0x8225 = Funktionsnummer nicht zulässig<br />
+
0x807F = Interner Treiberzugriffsfehler
+
  
Beispiel:
+
DW#16#1 GET_DRIVER_INFO Treiber Statusinformationen
  
<table>
+
DW#16#2 GET_VERSION_INFO Versionsinformation der CIF
<tbody>
+
<tr class="odd">
+
<td align="left">L</td>
+
<td align="left">DW#16#1</td>
+
<td align="left">// Funktion GET_DRIVER_INFO</td>
+
</tr>
+
<tr class="even">
+
<td align="left">T</td>
+
<td align="left">MD20</td>
+
<td align="left"></td>
+
</tr>
+
<tr class="odd">
+
<td align="left">CALL</td>
+
<td align="left">SFC 210</td>
+
<td align="left"></td>
+
</tr>
+
<tr class="even">
+
<td align="left">IN0</td>
+
<td align="left">:= 151</td>
+
<td align="left">// Funktion 151</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">IN1</td>
+
<td align="left">:= 300</td>
+
<td align="left">// DB 300</td>
+
</tr>
+
<tr class="even">
+
<td align="left">IO2</td>
+
<td align="left">:= MD 20</td>
+
<td align="left">// Funktionsnummer</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">OUT3</td>
+
<td align="left">:= MW 24</td>
+
<td align="left">// Fehlercode</td>
+
</tr>
+
</tbody>
+
</table>
+
  
'''Fkt 152 DevGetTaskParameter ausführen'''<br />
+
DW#16#3 GET_FIRMWARE_INFO Version der CIF Firmware
Mit dieser Funktion können die globalen Einstellungen wie beispielsweise die Übertragungsrate des Busses, die Watchdogzeit usw. aus der CIF ausgelesen werden.<br />
+
 
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.
+
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
  
Fehlercodes:<br />
 
0x813A = Datenbaustein nicht vorhanden<br />
 
0x8222 = Datenbaustein zu klein.<br />
 
0x8225 = Funktionsnummer nicht zulässig<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  DW#16#1  || // Funktion GET_DRIVER_INFO
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 151  ||  // Funktion 151
 +
|-
 +
| IN1 || := 300 || // DB 300
 +
|-
 +
| IO2 || := MD 20  || // Funktionsnummer
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">DW#16#2</td>
 
<td align="left">// Task 2</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 152</td>
 
<td align="left">// Funktion 152</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 300</td>
 
<td align="left">// DB 300</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Funktionsnummer</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
'''Fkt 153 Slavediagnose eines spezifischen Slaves lesen'''<br />
+
'''Fkt 152 DevGetTaskParameter ausführen'''
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<sup>®</sup> verwendet wird !<br />
+
 
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.<br />
+
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.
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
  
Fehlercodes:<br />
 
0x813A = Datenbaustein nicht vorhanden<br />
 
0x8222 = Datenbaustein zu klein<br />
 
0x8225 = Bereichsüberschreitung<br />
 
0x807F = Interner Treiberzugriffsfehler
 
  
 
Beispiel:
 
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L ||  DW#16#2  || // Task 2
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 152  ||  // Funktion 152
 +
|-
 +
| IN1 || := 300 || // DB 300
 +
|-
 +
| IO2 || := MD 20  || // Funktionsnummer
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
  
<table>
 
<tbody>
 
<tr class="odd">
 
<td align="left">L</td>
 
<td align="left">DW#16#2B</td>
 
<td align="left">// PROFIBUS<sup>®</sup>-Adresse des Slaves (hier : 11dez)</td>
 
</tr>
 
<tr class="even">
 
<td align="left">T</td>
 
<td align="left">MD20</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="odd">
 
<td align="left">CALL</td>
 
<td align="left">SFC 210</td>
 
<td align="left"></td>
 
</tr>
 
<tr class="even">
 
<td align="left">IN0</td>
 
<td align="left">:= 153</td>
 
<td align="left">// Funktion 153</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">IN1</td>
 
<td align="left">:= 300</td>
 
<td align="left">// DB 300</td>
 
</tr>
 
<tr class="even">
 
<td align="left">IO2</td>
 
<td align="left">:= MD 20</td>
 
<td align="left">// Funktionsnummer</td>
 
</tr>
 
<tr class="odd">
 
<td align="left">OUT3</td>
 
<td align="left">:= MW 24</td>
 
<td align="left">// Fehlercode</td>
 
</tr>
 
</tbody>
 
</table>
 
  
Passender Beispiel DB
+
'''Fkt 153 Slavediagnose eines spezifischen Slaves lesen'''
  
DATA_BLOCK DB 300<br />
+
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<sup>®</sup> 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.
  TITLE=<br />
+
 
  VERSION : 0.1<br />
+
 
  STRUCT<br />
+
Fehlercodes:
  DPM_SLAVE_DIAG : STRUCT<br />
+
 
  Stationsstatus_1 : BYTE;<br />
+
0x813A = Datenbaustein nicht vorhanden
  Stationsstatus_2 : BYTE;<br />
+
 
  Stationsstatus_3 : BYTE;<br />
+
0x8222 = Datenbaustein zu klein
  bMaster_Add : BYTE; // corresponding master address<br />
+
 
  usIdent_Number : WORD; // ident number, motorola format<br />
+
0x8225 = Bereichsüberschreitung
  abExt_Diag_Data : ARRAY[0..99] OF BYTE; // extended diagnostic field<br />
+
 
  END_STRUCT;<br />
+
0x807F = Interner Treiberzugriffsfehler
  END_STRUCT;<br />
+
 
  BEGIN<br />
+
 
 +
Beispiel:
 +
<code>
 +
{|
 +
|-
 +
| L || DW#16#2B  || // PROFIBUS®-Adresse des Slaves (hier : 11dez)
 +
|-
 +
| T || MD 20
 +
|-
 +
| CALL || SFC 210
 +
|-
 +
|style="width: 5em"| IN0 ||style="width: 11em"| := 153  ||  // Funktion 153
 +
|-
 +
| IN1 || := 300 || // DB 300
 +
|-
 +
| IO2 || := MD 20  || // Funktionsnummer
 +
|-
 +
| OUT3 || := MW 24 || // Fehlercode
 +
|}
 +
</code>
 +
 
 +
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
 
  END_DATA_BLOCK

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