nodeAccess

nodeAccess

Eine Webseite ist schön zum Reinschauen in eine Maschine oder Anlage, aber zum Fernsteuern braucht man Funktionen, die man in seine Programmierungebung einbauen kann.
node
Access™ bietet diese Möglichkeit mit einer DLL, die Ein- und Ausgabeports auf einem entfernten ethernode oder einer TSM-CPU direkt manipulierbar macht. Damit erspart man sich lokale Programmierung auf den ferngesteuerten Einheiten.

  • Direktzugriff auf entfernte E/A über eine Windows®-DLL
  • Nutzung der Express-I/O-Funktionen auf ethernode®:
    • IOInfo: Liste vorhandener Hardware
    • IOCfg: E/A Parametrierung
    • IOIn: Eingang lesen
    • IOOut: Ausgang schreiben
    • IOVecIn: Alle Eingänge eines Moduls lesen
    • IOVecOut: Alle Ausgänge eines Moduls lesen
  • Ein Befehl kann mehrere Ports gleichzeitig ansprechen
  • Preise
  • Detailinfo

Access™ ist ohne Zusatzkosten auf allen Baugruppen verfügbar, die Express-I/O und ein Netzwerk unterstützen.

Express-I/O macht es dem Programmierer leicht, auf Prozess-E/A wie 24V-Ventile oder Temperaturfühler zuzugreifen, ohne über Portadressen und Bitmanipulation nachdenken zu müssen. Schon seit vielen Jahren ist es möglich, über den BITBUS-Feldbus auch von einem Master aus direkt auf Express-I/O-Ports zuzugreifen, jetzt auch übers Ethernet. Auch aus der Ferne gibt man nur an, an welchem Bustyp der Ein-/Ausgang hängt (z.B. direkt an Prozessorpins, am I²C-Bus oder am TSM-Bus), auf welchem Modul und an welcher Klemme.

nodeAccess™ nutzt die durch den BITBUS geschaffene Infrastruktur und ruft seinerseits die BITBUS-API "BAPI" auf, die in der TCP/IPVariante "BAPITCP" heißt. Also installiert man zunächst die mitgelieferte BAPITCP und bindet mit BapiTcpCfg ein ethernode oder eine TSM-ARMCPU mit der gewünschten IP-Adresse an einen BITBUS-Gerätenamen. Bis zu 16 Einheiten sind möglich, die üblicherweise mit BBUS0, BBUS1 usw. fortlaufend benannt werden. Aus Kompatibilitätsgründen muss man die in \windows\system32 installierte DLL "bapitcp.dll" dann noch in "bapint.dll" umbenennen.

Auch wenn der Zugriff jetzt über Ethernet läuft, haben wir die Benennungen beibehalten, da das einfache Master-Slave-Schema des BITBUS-Feldbus leicht verständlich ist. Für nodeAccess™ ist das angesprochene ethernode ein BITBUS-Master (was es in Wirklichkeit auch sein kann, siehe ETH-BIT) Der Zugriff mit nodeAccess™ lässt sich am Besten an einem Beispiel erklären, bei dem ein digitaler Eingang an Klemme 1 eines ethernode abgefragt wird:

#include <windows.h>
#include <stdio.h>
#include "nodeacc.h"
int main( int argc, char *argv[], char *envp[])
{
    XPIO_IO_Item in;
    XPIO_IO_Item *in_p
    const char *BitbusDevice = "BBUS0";
    unsigned BitbusNode = 255;
    unsigned bus = BUS_TYPE_CPU;
    unsigned module = CPU_DIN;
    unsigned chan = 0;
   
    /*
    * Get a handle for digital input.
    */
    in_p = &in;
    in_p->hdl = XPIOGetHandle(BitbusDevice, BitbusNode, bus, module, chan);
    in_p->value = (-1);
    if (in_p->hdl) {
       /*
       * Send In to get and display the values.
       */
       XPIOIn(1, &in_p);
       printf("IN %d = %d\n", chan, in_p->value);
    }
return 0;
}

Es wird zunächst ein Bitbusdevice "BBUS0" benannt. Mit BitbusNode = 255 wird der "Master" selbst angesprochen (Mit "3" würde man einen Bitbus-Slave mit Knotennummer 3 ansprechen, der an dem ethernode oder der TSM-ARMCPU angeschlossen ist). bus = BUS_TYPE_CPU bedeutet, dass die E/A angesprochen werden, die an der CPU selbst angeschlossen sind, nicht an einem Erweiterungsmodul (wie z.B. einem Analogmodul an der TSM-ARMCPU).

Mit module = CPU_DIN wird das Modul innerhalb des bus bezeichnet (bei einem E/A-Erweiterungsmodul würde hier die Adresse laut Drehschalter angegeben, z.B. module = 7). chan = 0 schließlich wählt die Klemme 1 aus (die in der Programmierung traditionell als 0 angesprochen wird).

Das eigentliche Programm holt sich dann zunächst mit XPIOGetHandle und den obigen Parametern eine Referenz auf den Eingangsport. Wenn das geklappt hat, wird XPIOIn aufgerufen und kommt mit dem Zustand des Eingangs in in_p->value zurück. Statt in_p kann man natürlich auch einen Variablennamen verwenden, der eine Assoziation zur Applikation ermöglicht, also z.B. rampenmotor3dreht.

Ab jetzt wird der Zugriff dann ganz einfach nur noch über Funktionsaufrufe XPIOIn und XPIOOut gemacht, wobei aus Effizienzgründen mehrere Ports in einen Befehl gepackt werden können, womit dann auch nur eine TCP/IP-Nachricht im Ethernet unterwegs ist.

In Ihrer Entwicklungsumgebung ist noch die nodeAccess™-DLL anzugeben, was je nach Sprache und Werkzeug unterschiedlich gemacht wird, aber den üblichen Richtlinien für die Einbindung externer Bibliotheken folgt. Neben dem obigen Beispiel und den zugehörigen Visual-C++-Projektdateien findet sich auf der CD auch noch ein Beispiel für ein Befehlszeilen-Programm, mit dem man direkt auf E/A an ethernode zugreifen kann. In seiner kompilierten Form ist es als Einrichtungshilfe zum Test der E/A neuer Anlagen recht nützlich.