IBHNet:Hochsprachenzugriffe

Aus IBHsoftec Wiki
(Weitergeleitet von Hochsprachenzugriffe)
Wechseln zu: Navigation, Suche

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.

    Es ist auch möglich über RFC1006 auf die LOGO! RCE Varianten zuzugreifen. Die zu verwendende MPI-Adresse bei der Funktion Connect() ist 128, bei Connect_DP() ist es der Steckplatz 128. Die MPI-Adresse und der Baugruppenträger müssen 0 sein. Als Variablen können Eingänge, Ausgänge, Merker, der DB1 und die Bestellnummer gewählt werden.

    Bei der S7-1500 sind zusätzliche Sicherheitseinstellungen zum Erlauben des Zugriffs erforderlich. Hierzu muss in den Eigenschaften der Steuerung unter Schutz die Option: 'Verbindungsmechanismen - Zugriff über PUT/GET Kommunikation durch entfernten Partner erlauben' gewählt werden.