IBHNet:Hochsprachenzugriffe
Im Lieferumfang des IBHNet-Netzwerktreibers befindet sich ein Objekt, mit dem man einen Hochsprachenzugriff auf die Variablen von Steuerungen erhält.
Der Name der Schnittstelle lautet "IBHnet". Unter Visual Basic beispielsweise erscheint dies als IBHNet 1.0 Type Library unter dem Menüpunkt "Projekt-Verweise". Wenn über das IBHNet-Objekt Variablen aus der Steuerung gelesen oder geschrieben werden sollen, sollte nach Möglichkeit in der Station immer das Protokoll RFC1006 gewählt werden. Es ist nur in Einzelfällen bei älteren Baugruppen erforderlich, ein anderes Protokoll zu verwenden. Für den Zugriff auf Variablen der SPS steht folgende Schnittstelle zur Verfügung:
Funktion der Schnittstelle IIIBHnet | S5 | S7 300/400 |
SoftSPS und S7-CX |
S7 200 |
---|---|---|---|---|
Erste konfigurierte Station suchen HRESULT FirstStation(BSTR* pVal) pVal: Erster gefundener Stationsname Rückgabewert: S_OK bei Erfolg, S_FALSE wenn keine Station vorhanden ist. |
X | X | X | X |
Weitere konfigurierte Stationen suchen HRESULT NextStation(BSTR* pVal) pVal: Stationsname Rückgabewert: S_OK bei Erfolg, S_FALSE wenn keine weitere Station vorhanden ist. Wenn kein Stationsmame mehr zurückgegeben wird, ist die letzte Station gefunden. |
X | X | X | X |
Verbindung zur SPS aufbauen HRESULT Connect([in, string] BSTR Station,[in] long MPIAdr) Station: Stationsname MPIAdr: MPI Adresse Rückgabewert: S_OK bei Erfolg, E_FAIL oder die Sequenznummer, bei der der Fehler auftrat. Die Funktion Connect_DP aus dem Interface IIIBHNet3 sollte zum Verbindungsaufbau vorgezogen werden da diese bei Misserfolg in Programmiersprachen wie VisualBasic oder C# immer eine Exeption auslöst. |
X | X | X | X |
Verbindung zur SPS trennen HRESULT Disconnect() Parameter: Keine Rückgabewert: Immer S_OK. |
X | X | X | X |
Lesen von einzelnen Werten aus der SPS HRESULT ReadVal(long typ, long nr, long DBNr, long size, long *val) typ: (E)ingang = 69d, (A)usgang = 65d, (M)erker = 77d, (D)atenbaustein = 68d nr: Startadresse bei EAM, bei D die Startadresse im DB DBNr: Datenbausteinnumer bei typ=D (68d), bei EAM 0 size: 0..7 = Die Bitnummer im gelesenen Byte, 8 = Byte, 16 = Wort, 32 = Doppelwort val: Der gelesene Wert. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. |
X | X | X | X |
Blockweise Lesen von Werten aus der SPS HRESULT ReadVals(long typ, long nr, long DBNr, long size, SAFEARRAY(unsigned char) vals) typ: (E)ingang = 69d, (A)usgang = 65d, (M)erker = 77d, (D)atenbaustein = 68d nr: Startadresse bei EAM, bei D die Startadresse im DB DBNr: Datenbausteinnumer bei typ=D (68d), bei EAM 0 size: Anzahl der zu lesenden Bytes vals: Das Byte Feld mit den Daten Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. ReadVals gibt Daten in einem SAFEARRAY vom Datentyp Byte zurück. DotNetReadVals gibt Daten in einer VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp Byte enthält zurück. In den .Net Sprachen ist der Übergabeparameter ein Objekt. Sollen Datenbereiche gelesen werden die größer sind als die auf der CPU tatsächlich vorhandenen Bereiche, so meldet die CPU dem Treiber dass der Datenbereich nicht existent ist. Die Funktion gibt in diesem Fall E_INVALIDARG zurück. Die Verbindung zur Steuerung bleibt dabei bestehen, es besteht kein Grund die Verbindung zur Steuerung zu trennen. |
X | X | X | X |
Schreiben von einzelnen Werten in die SPS HRESULT WriteVal(long typ, long nr, long DBNr, long size, long val) typ: (E)ingang = 69d, (A)usgang = 65d, (M)erker = 77d, (D)atenbaustein = 68d nr: Startadresse bei EAM, bei D die Startadresse im DB DBNr: Datenbausteinnumer bei typ=D (68d), bei EAM 0 size: 0..7 = Die Bitnummer im zu schreibenden Byte, 8 = Byte, 16 = Wort, 32 = Doppelwort val: Der zu schreibende Wert. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. |
X | X | X | X |
Blockweise Schreiben von Werten in die SPS HRESULT WriteVals(long typ, long nr, long DBNr, long size,SAFEARRAY(unsigned char) vals) typ: (E)ingang = 69d, (A)usgang = 65d, (M)erker = 77d, (D)atenbaustein = 68d nr: Startadresse bei EAM, bei D die Startadresse im DB DBNr: Datenbausteinnumer bei typ=D (68d), bei EAM 0 size: Anzahl der zu lesenden Bytes vals: Das Byte Feld mit den Daten Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. WriteVals übergibt Daten in einem SAFEARRAY vom Datentyp Byte. DotNetReadVals übergibt Daten in einer VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp Byte enthält. In den .Net Sprachen ist der Übergabeparameter ein Objekt. Sollen Datenbereiche geschrieben werden die größer sind als die auf der CPU tatsächlich vorhandenen Bereiche, so meldet die CPU dem Treiber dass der Datenbereich nicht existent ist. Die Funktion gibt in diesem Fall E_INVALIDARG zurück. Die Verbindung zur Steuerung bleibt dabei bestehen, es besteht kein Grund die Verbindung zur Steuerung zu trennen. |
X | X | X | X |
Erzeugt das .bin File der SoftSPS welches das SPS-Programm enthält. HRESULT PLC_Store() Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird urückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Lädt das .bin File der SoftSPS welches das SPS-Programm enthält HRESULT PLC_Restore() Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Eigenschaften der Schnittstelle IIIBHnet | S5 | S7 300/400 |
SoftSPS und S7-CX |
S7 200 |
Betriebszustand der CPU lesen HRESULT PLC_Run([out, retval] BOOL *pVal) pVal: TRUE = Run, FALSE = Stop. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
X | X | X | X |
Auslesen des Ausgabestands der SoftSPS HRESULT PLC_Version([out, retval] long *pVal) pVal: gibt den Ausgabestand zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen der Zyklen der SoftSPS HRESULT PLC_Cycles([out, retval] long *pVal)) pVal: gibt die aktuelle Zyklenzahl zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Schaltet die SPS in Zustand STOP HRESULT PLC_Stop([in] BOOL newVal) Der Parameter newVal ist reserviert und muss immer FALSE sein. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
X | X | X | - |
Neustart der SPS HRESULT PLC_Run_OB100([in] BOOL newVal) Der Parameter newVal ist reserviert und muss immer TRUE sein. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
X | X | X | - |
Wiederanlauf der SPS HRESULT PLC_Run_OB101([in] BOOL newVal) Der Parameter newVal ist reserviert und muss immer TRUE sein. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
X | X | X | - |
Beendet die SoftSPS HRESULT PLC_Terminate([in] BOOL newVal) Der Parameter newVal ist reserviert und muss immer FALSE sein. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen der Serinnummer der SoftSPS HRESULT PLC_SerialNr([out, retval] BSTR *pVal) pVal: gibt die Seriennummer zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen des Benutzernamens der SoftSPS HRESULT PLC_Name([out, retval] BSTR *pVal) pVal: gibt den Benutzernamen zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen des Firmennamens der SoftSPS HRESULT PLC_Firma([out, retval] BSTR *pVal) pVal: gibt den Firmennamen zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Bestellnummer der CPU lesen HRESULT PLC_Mlfb([out, retval] BSTR *pVal) pVal: gibt den Firmennamen zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
X | X | X | - |
Auslesen der aktuellen Durchlaufzeit der SoftSPS HRESULT PLC_CycleAct([out, retval] long *pVal) pVal: gibt die aktuelle Durchlaufzeit zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen der minimalen Durchlaufzeit der SoftSPS HRESULT PLC_CycleMin([out, retval] long *pVal) pVal: gibt die minimale Durchlaufzeit zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen der maximalen Durchlaufzeit der SoftSPS HRESULT PLC_CycleMax([out, retval] long *pVal) pVal: gibt die maximale Durchlaufzeit zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen des maximalen Jitters der SoftSPS HRESULT PLC_JitterMax([out, retval] long *pVal) pVal: gibt den maximalen Jitter zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen des aktuellen Jitters der SoftSPS HRESULT PLC_JitterAct([out, retval] long *pVal) pVal: gibt den aktuellen Jitter zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Startet die SoftSPS HRESULT PLC_Load([in] long newVal) Parameter: newVal. 0 = Als Prozess, 1 = Als Dienst, 2 = Als AutoStart Dienst, 3 = Als DemandStart Dienst. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Pfad der Konfiguationsdatei PLC43.ini der SoftSPS HRESULT PLC_InitPath([out, retval] BSTR *pVal) pVal: gibt den Pfad zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen der Gesamtgröße des Speichers der SoftSPS in Byte HRESULT PLC_MemTotal([out, retval] long *pVal) pVal: gibt die Speichergröße zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen der Größe des freien Speichers der SoftSPS in Byte HRESULT PLC_MemFree([out, retval] long *pVal) pVal: gibt die Größe des freien Speichers zurück. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | - | X | - |
Auslesen konfigurierter Stationen über Index HRESULT Station(long Nr, [out, retval] BSTR* pVal) Nr: Stationsindex pVal: Wenn kein Stationsmame zurückgegeben wird, wurde die Station nicht gefunden. Rückgabewert: S_OK bei Erfolg, S_FALSE wenn die Station nicht vorhanden ist. |
- | X | X | - |
Eigenschaften für den Variablenzugriff
Es ist zu beachten, das jede der nachfolgend gelisteten Funktionen ein kompletten Lese- bzw. Schreibzugriff zur Steuerung durchführt. Man sollte daher versuchen, die zu lesenden bzw. zu schreibenden Bereiche in der SPS zusammenzufassen, damit diese als kompletter Block gelesen bzw. geschrieben werden können. Lesen bzw. Schreiben kompletter Blöcke über ReadVals / WriteVals dauert nur unwesentlich länger, als das Lesen bzw. Schreiben einer einzelnen Variablen. |
S5 | S7 300/400 |
SoftSPS und S7-CX |
S7 200 |
Liest ein Merkerdoppelwort HRESULT MD(long nr, [out, retval] long *pVal) nr: Nummer des Merkerdoppelworts pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Merkerdoppelwort HRESULT MD(long nr, [in] long newVal) nr: Nummer des Merkerdoppelworts newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Merkerwort HRESULT MW(long nr, [out, retval] long *pVal) nr: Nummer des Merkerworts pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Merkerwort HRESULT MW(long nr, [in] long newVal) nr: Nummer des MerkerWorts newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Merkerbyte HRESULT MB(long nr, [out, retval] long *pVal) nr: Nummer des Merkerbytes pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Merkerbyte HRESULT MB(long nr, [in] long newVal) nr: Nummer des Merkerbytes newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Merkerbit HRESULT M(long nr,long bit, [out, retval] BOOL *pVal) nr: Adresse des Merkerbytes bit: Bitnummer im Merkerbyte pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Merkerbit HRESULT M(long nr,long bit, [in] BOOL newVal) nr: Adresse des Merkerbytes bit: Bitnummer im Merkerbyte newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Eingangsdoppelwort HRESULT ED(long nr, [out, retval] long *pVal) nr: Nummer des Eingangsdoppelworts pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Eingangsdoppelwort HRESULT ED(long nr, [in] long newVal) nr: Nummer des Eingangsdoppelworts newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Eingangswort HRESULT EW(long nr, [out, retval] long *pVal) nr: Nummer des Eingangsworts pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Eingangsdoppelwort HRESULT EW(long nr, [in] long newVal) nr: Nummer des Eingangsworts newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Eingangsbyte HRESULT EB(long nr, [out, retval] long *pVal) nr: Nummer des Eingangsbytes pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Eingangsbyte HRESULT EB(long nr, [in] long newVal) nr: Nummer des Eingangsbytes newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Eingangsbit HRESULT E(long nr,long bit, [out, retval] BOOL *pVal) nr: Adresse des Eingangsbytes bit: Bitnummer im Eingangsbyte pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Eingangsbit HRESULT E(long nr,long bit, [in] BOOL newVal) nr: Adresse des Eingangsbytes bit: Bitnummer im Eingangsbyte newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Ausgangsdoppelwort HRESULT AD(long nr, [out, retval] long *pVal) nr: Nummer des Ausgangsdoppelworts pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Ausgangsdoppelwort HRESULT AD(long nr, [in] long newVal) nr: Nummer des Ausgangsdoppelworts newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Ausgangswort HRESULT AW(long nr, [out, retval] long *pVal) nr: Nummer des Ausgangsworts pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Ausgangswort HRESULT AW(long nr, [in] long newVal) nr: Nummer des AusgangsWorts newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Ausgangsbyte HRESULT AB(long nr, [out, retval] long *pVal) nr: Nummer des Ausgangsbytes pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Ausgangsbyte HRESULT AB(long nr, [in] long newVal) nr: Nummer des Ausgangsbytes newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Ausgangsbit HRESULT A(long nr,long bit, [out, retval] BOOL *pVal) nr: Adresse des Ausgangsbytes bit: Bitnummer im Ausgangsbytes pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. Schreibt ein Ausgangsbit HRESULT A(long nr,long bit, [in] BOOL newVal) nr: Adresse des Ausgangsbytes bit: Bitnummer im Ausgangsbyte newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich zu klein ist. |
X | X | X | X |
Liest ein Datendoppelwort HRESULT DD(long DBNr,long nr, [out, retval] long *pVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. Schreibt ein Datendoppelwort HRESULT DD(long DBNr,long nr, [in] long newVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. |
X | X | X | X |
Liest ein Datenwort HRESULT DW(long DBNr,long nr, [out, retval] long *pVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. Schreibt ein Datenwort HRESULT DW(long DBNr,long nr, [in] long newVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. |
X | X | X | X |
Liest ein Datenbyte HRESULT DB(long DBNr,long nr, [out, retval] long *pVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. Schreibt ein Datenbyte HRESULT DB(long DBNr,long nr, [in] long newVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. |
X | X | X | X |
Liest ein Datenbit HRESULT D(long DBNr,long nr,long bit, [out, retval] BOOL *pVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein bit: Bitnummer im Datenbyte pVal: Gelesener Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. Schreibt ein Datenbit HRESULT D(long DBNr,long nr,long bit, [in] BOOL newVal) DBNr: Nummer des Datenbausteins nr: Byte-Offset im Datenbaustein bit: Bitnummer im Datenbyte newVal: Zu schreibender Wert Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. |
X | X | X | X |
Systemfunktionen der Schnittstelle IIIBHnet2 | S5 | S7 300/400 |
SoftSPS und S7-CX |
S7 200 |
Neustart (Reboot) des IBH Link HRESULT ResetDevice(BSTR device) device: Stationsname Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene Baugruppe die Funktion nicht untertützt. |
- | X | X | X |
Liest die Position des Schlüsselschalters der SPS aus HRESULT Key_Position([out, retval] long *pVal) pVal: gibt die Schalterstellung zurück Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | X | X | - |
Ermittelt die am Bus erreichbaren Teilnehmer HRESULT LifeList(BSTR device, VARIANT * lifelist) lifelist: enthält die Liste der Teilnehmer, 0x30 = Aktiv, 0x20 = Aktiv Ready, 0x10 = Nicht vorhanden, 0x00 = Passiv Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | X | X | X |
Liest Systemzustandslisten aus der SPS aus HRESULT SZ_List(long SZL_ID, long INDEX, VARIANT * SZ_List) Siehe hierzu die Siemens Dokumentation zur SFC51. Installationsverzeichnis: C:\Program Files\Siemens\Dokumentation\Deutsch\STEP 7 - System- und Standardfunktionen für S7-300 und S7-400 Kapitel: Systemzustandsliste SZL. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. E_NOTIMPL wird zurückgegeben, wenn die angeschlossene SPS die Funktion nicht untertützt. |
- | X | X | - |
Beendet den Treiber IBH_NetPcom.exe HRESULT TerminateDriver() Rückgabewert: Immer S_OK Bei den Protokollen RFC1006, API oder 1200 nicht relevant. |
- | X | X | X |
Erweiterte Funktionen und .NET der Schnittstelle IIIBHnet3 | S5 | S7 300/400 |
SoftSPS und S7-CX |
S7 200 |
Verbindung zur SPS aufbauen HRESULT Connect_DP(BSTR Station, long DPAdr, long Rack, long Slot) Station: Stationsname DPAdr: MPI® bzw. Profibusadresse Rack: Baugruppenträger Nummer (normalerweise 0) Slot: Steckplatz. Bei MPI meistens 0, bei Profibus der Steckplatz der CPU im Rack. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. Die Funktion Connect_DP aus dem Interface IIIBHNet3 sollte zum Verbindungsaufbau vorgezogen werden da diese bei Misserfolg in Programmiersprachen wie VisualBasic oder C# immer eine Exeption auslöst. Ist in der IBHNet Station das Protokoll RFC1006 augewählt, so ist der Parameter DPAdr irrelevant. Es werden für Verbindungen zu einem Siemens CP nur die Parameter Rack und Slot beachtet. Bei einem IBH Link S7++ setzt sich die MPI bzw. Profibusadresse aus den unteren 5 Bit des Parameters Slot und den unteren 3 Bit des Parameters Rack zusammen. |
- | X | X | - |
Geroutete Verbindung zur SPS in abgesetzte MPI/Profibus-Netzwerke aufbauen, sofern die CPU dies unterstützt HRESULT Subnet_Connect_DP(BSTR Station, long MPIStart, long MPIZiel, long RackZiel, long SlotZiel, long Subnet_HH, long Subnet_LL) Station: Stationsname MPIStart: MPI® bzw. Profibusadresse, auf die der IBH Link aufgesteckt ist. MPIZiel: MPI® bzw. Profibusadresse, auf die im Subnetz geroutet werden soll. RackZiel: Baugruppenträger Nummer der Baugrupp im Zielsubnetz (normalerweise 0) SlotZiel: Steckplatz der CPU im Zielsubnetz (normalerweise 2). Subnet_HH: Subnet ID HighWort, aus Projekt. Subnet_LL: Subnet ID LowWort, aus Projekt. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. Die Funktion Connect_DP aus dem Interface IIIBHNet3 sollte zum Verbindungsaufbau vorgezogen werden da diese bei Misserfolg in Programmiersprachen wie VisualBasic oder C# immer eine Exeption auslöst. |
- | X | - | - |
Geroutete Verbindung zur SPS in abgesetzte TCP/IP-Netzwerke aufbauen, sofern die CPU dies unterstützt HRESULT Subnet_Connect_IP(BSTR Station, long MPIStart, BSTR IPZiel, long RackZiel, long SlotZiel, long Subnet_HH, long Subnet_LL) Station: Stationsname MPIStart: MPI® bzw. Profibusadresse, auf die der IBH Link aufgesteckt ist. IPZiel: TCP/IP Adresse, auf die im Subnetz geroutet werden soll. RackZiel: Baugruppenträger Nummer der Baugrupp im Zielsubnetz (normalerweise 0) SlotZiel: Steckplatz der CPU im Zielsubnetz (normalerweise 2). Subnet_HH: Subnet ID HighWort, aus Projekt. Subnet_LL: Subnet ID LowWort, aus Projekt. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. Die Funktion Connect_DP aus dem Interface IIIBHNet3 sollte zum Verbindungsaufbau vorgezogen werden da diese bei Misserfolg in Programmiersprachen wie VisualBasic oder C# immer eine Exeption auslöst. |
- | X | - | - |
Geroutete Verbindung zur SPS in abgesetzte H1-Netzwerke aufbauen, sofern die CPU dies unterstützt HRESULT SubnetConnectH1(BSTR Station, long MPIStart, BSTR H1Ziel, long RackZiel, long SlotZiel, long Subnet_HH, long Subnet_LL) Station: Stationsname MPIStart: MPI® bzw. Profibusadresse, auf die der IBH Link aufgesteckt ist. H1Ziel: H1 Adresse, auf die im Subnetz geroutet werden soll. RackZiel: Baugruppenträger Nummer der Baugrupp im Zielsubnetz (normalerweise 0) SlotZiel: Steckplatz der CPU im Zielsubnetz (normalerweise 2). Subnet_HH: Subnet ID HighWort, aus Projekt. Subnet_LL: Subnet ID LowWort, aus Projekt. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler. Die Funktion Connect_DP aus dem Interface IIIBHNet3 sollte zum Verbindungsaufbau vorgezogen werden da diese bei Misserfolg in Programmiersprachen wie VisualBasic oder C# immer eine Exeption auslöst. |
- | X | - | - |
Liest die Rohdaten eines Datenbausteins, wie dieser auf der SPS abliegt, aus. HRESULT ReadDB(long DBNr, VARIANT*DB, long * Len) DBNr: Datenbausteinnummer DB: VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp Byte enthält mit dem Bausteininhalt. Len: Länge der Bausteines Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_INVALIDARG wenn der Datenbaustein nicht existiert. Um diese Funktion verwenden zu können sind detaillierte Kenntnisse des S7-Bausteinaufbaus erforderlich. Aus rechtlichen Gründen können diese von IBHsoftec nicht veröffentlicht werden. |
X | X | X | - |
Schreibt die Rohdaten eines Datenbausteins, wie dieser auf der SPS abliegt. HRESULT WriteDB(long DBNr, VARIANT DB, long Len) DBNr: Datenbausteinnummer DB: VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp Byte enthält mit dem Bausteininhalt. Len: Länge der Bausteines Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_INVALIDARG wenn der Datenbaustein nicht existiert Um diese Funktion verwenden zu können sind detaillierte Kenntnisse des S7-Bausteinaufbaus erforderlich. Aus rechtlichen Gründen können diese von IBHsoftec nicht veröffentlicht werden. |
X | X | X | - |
Blockweise Lesen von Werten aus der SPS HRESULT DotNetReadVals(long typ, long nr, long DBNr, long size, VARIANT * vals) DotNetReadVals(long typ, long nr, long DBNr, long size, VARIANT * vals) typ: (E)ingang = 69d, (A)usgang = 65d, (M)erker = 77d, (D)atenbaustein = 68d nr: Startadresse bei EAM, bei D die Startadresse im DB DBNr: Datenbausteinnumer bei typ=D (68d), bei EAM 0 size: Anzahl der zu lesenden Bytes vals: VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp BYTE enthält mit den daten aus der SPS. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. In den .Net Sprachen ist der Übergabeparameter ein Objekt. Sollen Datenbereiche gelesen werden die größer sind als die auf der CPU tatsächlich vorhandenen Bereiche, so meldet die CPU dem Treiber dass der Datenbereich nicht existent ist. Die Funktion gibt in diesem Fall E_INVALIDARG zurück. Die Verbindung zur Steuerung bleibt dabei bestehen, es besteht kein Grund die Verbindung zur Steuerung zu trennen. |
X | X | X | X |
Blockweise Schreiben von Werten in die SPS HRESULT DotNetWriteVals(long typ, long nr, long DBNr, long size, VARIANT vals) DotNetWriteVals(long typ, long nr, long DBNr, long size, VARIANT vals) typ: (E)ingang = 69d, (A)usgang = 65d, (M)erker = 77d, (D)atenbaustein = 68d nr: Startadresse bei EAM, bei D die Startadresse im DB DBNr: Datenbausteinnumer bei typ=D (68d), bei EAM 0 size: Anzahl der zu lesenden Bytes vals: VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp BYTE mit den Daten enthält. Rückgabewert: S_OK bei Erfolg, E_FAIL bei Fehler, E_ABORT wenn die SPS den Zugriff verweigert oder E_INVALIDARG wenn der Datenbereich nicht existiert oder zu klein ist. DotNetReadVals übergibt Daten in einer VARIANT Variable, die wiederum ein SAFEARRAY vom Datentyp Byte enthält. In den .Net Sprachen ist der Übergabeparameter ein Objekt. Sollen Datenbereiche geschrieben werden die größer sind als die auf der CPU tatsächlich vorhandenen Bereiche, so meldet die CPU dem Treiber dass der Datenbereich nicht existent ist. Die Funktion gibt in diesem Fall E_INVALIDARG zurück. Die Verbindung zur Steuerung bleibt dabei bestehen, es besteht kein Grund die Verbindung zur Steuerung zu trennen. |
X | X | X | X |
Im Installationsverzeichnis des IBHNet-Treibers finden Sie Beispiele zur Verwendung der Schnittstelle zum Variablenaustausch für Visual Basic 6. Die Beispiele sind kommentiert. Weitere Beispiele für andere Programmiersprachen werden im Laufe der Zeit folgen.
Achtung: Soll mit mehreren Threads auf das gleiche IBHNet Objekt zugegriffen werden, so müssen die einzelnen Zugriffe auf das IBHNet Objekt gegenseitig verriegelt werden. Geeignete Mechanismen sind beispielsweise Critical Sections, Semaphoren oder Mutexe. Ein Verriegeln über einfache Variablen reicht nicht aus, um eventuelle Race Conditions sicher zu vermeiden. |
Folgende Fehlercodes werden zurückgegeben:
Fehlercode | Fehlertext |
---|---|
1 | netpcomv.CreateInstance failed |
2 | netpcomv.MPI_open failed |
3 | netpcomv.MPI_ConnRequest failed |
4 | connection request to SoftPlc failed |
5 | netpcomv.MPI_close failed |
Bei einem fehlerhaften Schreib-/Lesezugriff wird eine Exception ausgelöst.