EasyIP für @CHIP-RTOS-Applikationen Beck IPC GmbH Garbenheimer Str. 36 - 38 35578 Wetzlar/Germany Phone +49 (0) 64 41-9 05-0 Fax +49 (0) 64 41-9 05-2 45 Web www.beck-ipc.com EasyIP für Version V. 1.1 @CHIP-RTOS Applikationen Datum 02.11.2004 Autor hine EasyIP Seite 1 von 25 EasyIP für @CHIP-RTOS-Applikationen INHALT 1 Allgemein .......................................................................................... 3 2 Funktionsweise ................................................................................. 4 3 Datenstruktur .................................................................................... 5 4 Adressierung der Partnerstation ....................................................... 6 5 Server- und Client Funktionen .......................................................... 7 6 Programmierung ............................................................................... 8 7 Benötigter Quellcode für die EasyIP @CHIP-RTOS Applikation ...... 9 8 Referenz ......................................................................................... 10 9 EasyIP Client-Funktionen ............................................................... 10 9.1 EasyIP Server-Funktionen ........................................................... 20 10.1 Einführung .................................................................................................. 20 10.1.1 EipStartServer ......................................................................................... 20 10.1.2 EipStopServer ......................................................................................... 21 11 11.1 Protokollbeschreibung ................................................................. 22 Paketaufbau................................................................................................ 22 11.2 Erläuterungen zu den einzelnen Feldern ................................................... 23 11.2.1 Senden von Daten .................................................................................. 23 11.2.2 Anfragen von Daten ................................................................................ 23 11.2.3 Senden und Anfragen von Daten............................................................ 23 11.2.4 Informationspakete ................................................................................. 24 12 EasyIP www.beck-ipc.com Einführung ...................................................................................................... 10 9.2 Funktionsbeschreibungen .............................................................................. 11 9.2.1 Easy_SR ................................................................................................. 11 9.2.2 Easy_R .................................................................................................... 13 9.2.3 Easy_S .................................................................................................... 14 9.2.4 IP_Table_Set .......................................................................................... 15 9.2.5 IP_Table_Get .......................................................................................... 16 9.2.6 SaveIptable ............................................................................................. 17 9.2.7 LoadIptable ............................................................................................. 18 9.2.8 IPFrom4Chars ......................................................................................... 19 10 Web Historie ........................................................................................ 25 Seite 2 von 25 Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 1 Allgemein EasyIP ermöglicht den Austausch von SPS-Operanden (Eingangswerte, Ausgangswerte, Merker, Register) zwischen mehreren Steuerungen. Die Datenübertragung erfolgt dabei über Ethernet auf Basis der Protokolle IP und UDP. EasyIP verwendet dabei UDP - Datagramme auf Port 995. EasyIP ist ein Punkt - zu - Punkt - Protokoll, bei dem ein Client Daten sendet oder anfordert und ein Server die Daten bestätigt oder die Anfrage beantwortet. Wenn der Server die Anfrage nicht verarbeiten kann (Datenblock zu groß, falscher Operandentyp etc.), sendet er ein Fehler-Paket an den Client. Web www.beck-ipc.com Da keine logischen Verbindungen benötigt werden, ist die Anzahl der Clients und Server in einem Netzwerk theoretisch unbegrenzt. Die Menge der gleichzeitig zu verarbeitenden Datenpakete ist nur durch die Leistung der beteiligten Geräte oder die verwendete Software beschränkt. Im Normalfall ist eine EasyIP - Steuerung sowohl Client als auch Server. Geräte, die nur Client-Funktion haben, könnten z.B. Visualisierungsrechner oder Diagnosesysteme sein. EasyIP steht für verschiedene Betriebssysteme zur Verfügung, so dass der Datenaustausch zwischen verschiedenen Typen von Steuerungen möglich ist. Zu den unterstützten Systemen gehören Festo FST, Codesys und @Chip-RTOS. Außerdem kann EasyIP mit wenig Aufwand in Windows- und Linux - Anwendungen integriert werden. EasyIP für @CHIP-RTOS (BCxxx) wird als C-Quelltext geliefert und beim Kompilieren in das Anwendungsprogramm eingebunden. Ein Easy-IP Beispiel im Source-Code ist auf der Download-Seite des IPC@CHIP unter http://www.beck-ipc.com/ipc erhältlich. EasyIP Seite 3 von 25 Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 2 Funktionsweise Der übliche Datenfluss zum Senden von Daten (Client an Server) ist: 1. Client sendet Daten 2. Server empfängt Daten 3. Können die Daten vom Server verarbeitet werden, sendet der Server ein Bestätigungspaket. Können die Daten nicht verarbeitet werden, sendet der Server ein Fehlerpaket. 4. Client empfängt Antwort des Servers Web www.beck-ipc.com Der Datenfluss zum Anfordern von Daten (Client fordert Daten von Server an) ist: 1. Client sendet Anforderungs-Paket 2. Server empfängt Anforderung 3. Wenn Anforderung vom Server ausgeführt werden kann, sendet der Server ein Paket mit den angeforderten Daten.Wenn nicht, sendet er ein Fehlerpaket 4. Client empfängt Antwort des Servers Version V. 1.1 Datum Der Datenfluss zum gleichzeitigen Senden und Anfordern von Daten ist: 1. Client sendet Daten-/Anforderungs-Paket 2. Server empfängt Daten und Anforderung 3. Wenn gesendete Daten vom Server nicht verarbeitet werden konnten, sendet er ein Fehlerpaket. Wenn die Anforderung vom Server ausgeführt werden kann, sendet er ein Paket mit den angeforderten Daten. Wenn die Anforderung vom Server nicht ausgeführt werden kann, sendet er ein Fehlerpaket 4. Client empfängt die Antwort des Servers EasyIP Seite 4 von 25 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 3 Datenstruktur EasyIP ist auf die Verwendung mit SPS-Betriebssystemen ausgerichtet und stellt daher einen genau definierten Datenbereich zur Verfügung. Angelehnt an die Festo Steuerungen mit FST-Betriebssystem besteht der Datenbereich aus: 1. 2. 3. 4. 10000 Merkerworten (MW) 256 Eingangsworten (IW) 256 Ausgangsworten (OW) 256 Registern (R) Web www.beck-ipc.com Im C-Programm auf dem RTOS-Betriebssystem werden an Stelle dieser Operanden globale Variablenfelder bereit gestellt, die wie folgt definiert sind: unsigned unsigned unsigned unsigned int int int int uEipMW[10000]; uEipIW[256]; uEipOW[256]; uEipR[256]; // // // // Merkerworte Eingangsworte Ausgangsworte Register Version V. 1.1 Datum Der Benutzer kann durch Zeiger auf einzelne Feldelemente anschaulichere Namen für Teile dieser Datenfelder festlegen, z.B. 02.11.2004 Autor hine unsigned int* DatenAusAndererSteuerung; DatenAusAndererSteuerung = &uEipMW[789]; EasyIP Seite 5 von 25 EasyIP für @CHIP-RTOS-Applikationen 4 Adressierung der Partnerstation EasyIP verwaltet eine Liste (Variablenfeld) mit den IP-Adressen der Partnerstationen. Diese Liste kann entweder vom Anwendungsprogramm selbst gefüllt werden (über die Funktionen IP_Table_Set und IP_Table_Get oder durch direktes Schreiben in das Variablenfeld) oder aus einer .ini-Datei gelesen werden (über die Funktionen SaveIptable und LoadIptable). Um die Übersicht zu erhalten und gegenseitiges Überschreiben von Tabelleneinträgen zu vermeiden, sollten niemals beide Methoden kombiniert werden. Ist die IP-Kurzwahlliste gefüllt, können die Partnerstationen in den Sende-/ Empfangsfunktionen einfach über ihren Tabellenindex angesprochen werden. Die Liste kann in der EasyIP-Implementierung für BCxxx bis zu 32 Einträge (0 bis 31) umfassen. int IP_Table_Set(unsigned unsigned unsigned unsigned unsigned unsigned int iReadWrite, int iIndex, char cByte1, char cByte2, char cByte3, char cByte4) Web www.beck-ipc.com Version V. 1.1 Datum 02.11.2004 int IP_Table_Get(unsigned unsigned unsigned unsigned unsigned unsigned EasyIP int iReadWrite, int Index, char *cByte1, char *cByte2, char *cByte3, char *cByte4) Autor hine Seite 6 von 25 EasyIP für @CHIP-RTOS-Applikationen 5 Server- und Client Funktionen Die EasyIP-Servertask beantwortet Anfragen entfernter EasyIP-Clients und überwacht den Zustand der lokalen Anfragen, die über die ClientFunktionen Easy_S und Easy_R an andere Server gerichtet wurden, auf Fehler und Timeouts. Die Servertask muss deshalb immer gestartet werden, wenn EasyIP benutzt werden soll. Zum Start der Servertask dient die Funktion EipStartServer, zum Stoppen EipStopServer. EasyIP ist nur innerhalb des Programms (.exe) verfügbar, das den Server gestartet hat, und der Server darf auch nur innerhalb eines Programms gestartet werden. Die Multitasking-Fähigkeiten des Betriebssystems werden dadurch nicht eingeschränkt, weil dieses eine Programm durchaus weitere Tasks erzeugen kann, die alle Zugriff auf EasyIP und die globalen EasyIPVariablenfelder haben. Lediglich der Start mehrerer .exe-Dateien, die EasyIP enthalten, ist nicht zulässig. Während die Servertask im Hintergrund läuft, kann das Anwendungsprogramm mit Hilfe der ClientFunktionen aktiv Daten zu anderen Steuerungen, auf denen ein EasyIPServer läuft, senden und von diesen empfangen. Zu den ClientFunktionen gehören z.B. Easy_S (senden) und Easy_R (empfangen). void huge EipServerTask(void) Web www.beck-ipc.com Version V. 1.1 Datum 02.11.2004 int EipStartServer(unsigned char cCycleMs) //Milliseconds server sleeps before checking Autor hine int Easy_S(unsigned int uTableIndex, unsigned int uOpType, unsigned int uNumToRequest, unsigned int uOpOffLoc, unsigned int uOpOffRem, int *iStatus) int Easy_R(unsigned int uTableIndex, unsigned int uOpType, unsigned int uNumToRequest, unsigned int uOpOffLoc, unsigned int uOpOffRem, int *iStatus) EasyIP Seite 7 von 25 EasyIP für @CHIP-RTOS-Applikationen 6 Programmierung Die Verwendung von EasyIP in einem eigenen Programm läuft also wie folgt ab: 1. Initialisierung Laden der IP-Kurzwahlliste (im Programm oder aus einer iniDatei) Starten der Servertask 2. Betrieb Daten zu anderen Stationen senden mit Easy_S Daten von anderen Stationen anfordern mit Easy_R Daten senden und gleichzeitig andere Daten anfordern mit Easy_SR Im Hintergrund beantwortet die EasyIP-Servertask die Anfragen der anderen Stationen 3. Ende Beenden der Servertask. Beenden des Anwendungsprogramms Der Aufruf einer Client-Funktion startet eine Anfrage an den Server einer anderen Steuerung. Nachdem die Client-Funktion die Anfrage abgesendet hat, überwacht die lokale Servertask den Zustand der Anfrage und nimmt die eintreffende Antwort des entfernten Servers entgegen. Trifft die Antwort nicht rechtzeitig (vor Ablauf des Timeout-Zählers) ein oder enthält die eintreffende Antwort einen Fehlercode der entfernten Station, wird dieser Fehlercode in der vorher von der Client-Funktion als Zeiger übergebenen Variablen abgelegt. Dieser Mechanismus ermöglicht dem Anwenderprogramm nach dem Start einer Anfrage ein sofortiges Weiterarbeiten, ohne auf die Antwort der entfernten Station warten zu müssen; es kann aber auch aktiv auf die Antwort warten, indem es die Statusvariable überwacht. Zur gleichen Zeit kann zu jeder Partnerstation in der IP-Tabelle nur eine Anfrage aktiv sein. EasyIP Seite 8 von 25 Web www.beck-ipc.com Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 7 Benötigter Quellcode für die EasyIP @CHIP-RTOS Applikation Diese Dateien müssen in das Projektverzeichnis auf der Festplatte kopiert werden: easyip.c easyip.h eipserv.c eipserv.h Web In das Projekt selbst sind folgende Dateien aufzunehmen: www.beck-ipc.com eipserv.c easyip.c für die EasyIP-Funktionen. Version CLib200L.lib aus dem Verzeichnis CLib V. 1.1 für den Aufruf von @CHIP-RTOS Betriebssystem-Funktionen, die von EasyIP benötigt werden. Datum 02.11.2004 Autor hine In das Anwendungsprogramm muss schließlich nur die Anweisung #include "easyip.h" aufgenommen werden. EasyIP Seite 9 von 25 EasyIP für @CHIP-RTOS-Applikationen Falls Sie Borland C++ 5.02 benutzen, wird Ihr Projektfenster also wie folgt aussehen: Achten Sie ebenfalls darauf, den Prozessortyp richtig einzustellen (bei Borland C: Options | Project | 16-bit Compiler | Processor „80186“) sowie die DebugInformationen auszuschalten, um die exe-Datei zu verkleinern (bei Borland C: Options | Project | Linker | General „Include debug information“ ausschalten) Web www.beck-ipc.com Version V. 1.1 Datum 8 02.11.2004 Referenz Für detaillierte Informationen zu den einzelnen Funktionen und deren Verwendung beachten Sie bitte das entsprechende Kapitel dieser Dokumentation. 9 EasyIP Client-Funktionen 9.1 Einführung Die Client-Funktionen werden von einem EasyIP-Client (in diesem Fall die lokale Station) aufgerufen, um auf einen EasyIP-Server (entfernte Station) zuzugreifen. Es können Daten von diesem Server angefordert (Request-Funktion Easy_R) und zu ihm gesendet werden (SendFunktion Easy_S). Die Funktion Easy_SR kombiniert Senden und Empfangen in einem Vorgang. Zusätzlich sind einige Hilfsfunktionen vorhanden, um Einträge in die IPKurzwahlliste vorzunehmen oder die Kurzwahlliste aus einer Datei zu lesen oder in eine Datei zu schreiben. EasyIP Seite 10 von 25 Autor hine EasyIP für @CHIP-RTOS-Applikationen 9.2 Funktionsbeschreibungen 9.2.1 Easy_SR Sendet Daten zu einer anderen Steuerung und fordert mit demselben Paket Daten von dieser Steuerung an. Deklaration: int Easy_SR(unsigned int uTableIndex, unsigned int uOpTypeSend, unsigned int uNumToSend, unsigned int uOpOffLocSend, unsigned int uOpOffRemSend, unsigned int uOpTypeReq, unsigned int uNumToRequest, unsigned int uOpOffLocReq, unsigned int uOpOffRemReq, int* iStatus) Web www.beck-ipc.com Rückgabewert: 0: kein Fehler , nicht 0: Fehler (siehe Fehlertabelle) Version V. 1.1 Parameter: uTableIndex Index der IP-Adresse der entfernten Station (mit der Daten ausgetauscht werden sollen) in der IP-Kurzwahlliste. uOpTypeSend Typ der Operanden, die gesendet werden sollen: 1: Merkerwort 2: Eingangswort 3: Ausgangswort 4: Register uNumToSend Anzahl der zu sendenden Datenworte (höchstens 256) uOpOffLocSend Offset (Nummer) des ersten zu sendenden Datenwortes in der lokalen Station. uOpOffRemSend Ziel-Offset des ersten gesendeten Datenwortes in der entfernten Station. uOpTypeReq Operandentyp, der angefordert werden soll. Operandentypen siehe uOpTypeSend. uNumToRequest Anzahl der anzufordernden Datenworte (höchstens 256) uOpOffLocReq Ziel-Offset des ersten angeforderten Datenwortes in der lokalen Station. EasyIP Seite 11 von 25 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen uOpOffRemReq Offset des ersten anzufordernden Datenwortes in der entfernten Station. *iStatus Zeiger auf eine int-Variable, in der der Status der Kommunikation mit dieser Partnerstation gespeichert wird. Diese Variable wird im Hintergrund aktualisiert: -1: Paket zum Server gesendet, noch keine Bestätigung empfangen, noch kein Timeout 0: OK, Bestätigung von entfernter Station empfangen Web 1: Fehlerhafter Operandentyp. Dieser Operandentyp wird von der entfernten Station nicht unterstützt. www.beck-ipc.com 2: Fehlerhafter Offset. Die Partnerstation lässt diese Operandennummer nicht zu. Wahrscheinlich ist der Offset zu groß. 4: Fehlerhafte Operandenanzahl. Die Partnerstation lässt diese Operandenanzahl nicht zu. Wahrscheinlich ist die Anzahl zu groß. 128: Timeout. Partnerstation hat nicht oder nicht innerhalb der vorgegebenen Zeit geantwortet. (Diese Zeit wird in EIPSERV.H als Vielfaches (Voreinstellung 12) der lokalen Server-Zyklenzeit definiert. Die Server-Zyklenzeit wird beim Aufruf der Funktion EipStartServer als Parameter eingestellt.) Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP Seite 12 von 25 EasyIP für @CHIP-RTOS-Applikationen 9.2.2 Easy_R Fordert Daten von einer anderen Steuerung an. Deklaration: int Easy_R(unsigned int uTableIndex, unsigned int uOpType, unsigned int uNumToRequest, unsigned int uOpOffLoc, unsigned int uOpOffRem, int * iStatus) Web www.beck-ipc.com Rückgabewert: 0: kein Fehler, nicht 0: Fehler (siehe Fehlertabelle) Parameter: uTableIndex Index der IP-Adresse der entfernten Station (von der Daten angefordert werden sollen) in der IP-Kurzwahlliste. uOpType Typ der Operanden, die angefordert werden sollen: 1: Merkerwort 2: Eingangswort 3: Ausgangswort 4: Register uNumToRequest Anzahl der anzufordernden Datenworte (höchstens 256) uOpOffLoc Ziel-Offset (Nummer) des ersten anzufordernden Datenwortes in der lokalen Station. uOpOffRem Offset des ersten anzufordernden Datenwortes in der entfernten Station. *iStatus Zeiger auf eine int-Variable, in der der Status der Kommunikation mit dieser Partnerstation gespeichert wird. Diese Variable wird im Hintergrund aktualisiert. Die möglichen Statuswerte sind bei der Funktion EasySR beschrieben. Bemerkung: Intern ruft die Funktion Easy_R die Funktion Easy_SR auf, wobei alle Parameter, die sich auf das Senden von Daten beziehen, auf 0 gesetzt werden. EasyIP Seite 13 von 25 Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 9.2.3 Easy_S Sendet Daten zu einer anderen Steuerung. Deklaration: int Easy_S(unsigned int uTableIndex, unsigned int uOpType, unsigned int uNumToSend, unsigned int uOpOffLoc, unsigned int uOpOffRem, int * iStatus) Web www.beck-ipc.com Rückgabewert: 0: kein Fehler, nicht 0: Fehler (siehe Fehlertabelle) Parameter: uTableIndex Index der IP-Adresse der entfernten Station (zu der Daten gesendet werden sollen) in der IP-Kurzwahlliste. uOpType Typ der Operanden, die gesendet werden sollen: 1: Merkerwort 2: Eingangswort 3: Ausgangswort 4: Register uNumToSend Anzahl der zu sendenden Datenworte (höchstens 256) uOpOffLoc Offset des ersten zu sendenden Datenwortes in der lokalen Station. uOpOffRem Ziel-Offset (Nummer) des ersten gesendeten Datenwortes in der entfernten Station. *iStatus Zeiger auf eine int-Variable, in der der Status der Kommunikation mit dieser Partnerstation gespeichert wird. Diese Variable wird im Hintergrund aktualisiert. Die möglichen Statuswerte sind bei der Funktion EasySR beschrieben. Bemerkung: Intern ruft die Funktion Easy_S die Funktion Easy_SR auf, wobei alle Parameter, die sich auf das Anfordern von Daten beziehen, auf 0 gesetzt werden. EasyIP Seite 14 von 25 Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 9.2.4 IP_Table_Set Trägt eine IP-Adresse in die IP-Kurzwahlliste ein. Jede Adresse kann dann über ihren Listenindex angesprochen werden. Beispiel für die IP-Liste: Index 0 1 IP-Adresse 192.168.0.1 192.168.0.2 Web Deklaration: int IP_Table_Set(unsigned unsigned unsigned unsigned unsigned unsigned www.beck-ipc.com int iReadWrite, int iIndex, char cByte1, char cByte2, char cByte3, char cByte4) Version Rückgabewert: 0: kein Fehler (-1): Fehler (z.B. unzulässig hoher Tabellenindex) V. 1.1 Datum 02.11.2004 Parameter: Autor iReadWrite muss auf 1 gesetzt werden (Kompatibilität mit FST-Steuerungen) iIndex Index des Listeneintrags, der geschrieben werden soll cByte1 bis cByte4 IP-Adresse in der Reihenfolge cByte1.cByte2.cByte3.cByte4 Bemerkung: Statt diese Funktion zu verwenden, können Sie die IP-Adresse als unsigned long int auch direkt in das Array lIpable schreiben. Beachten Sie dabei aber unbedingt die Reihenfolge: Byte 4 ist das höchstwertige, Byte 1 das niederwertigste Byte innerhalb des unsigned long int (Network Byte Order). Der niedrigste Tabellenindex ist 0, der höchste 31.Damit kann die Tabelle 32 Einträge umfassen. EasyIP Seite 15 von 25 hine EasyIP für @CHIP-RTOS-Applikationen 9.2.5 IP_Table_Get Liest eine IP-Adresse aus der IP-Kurzwahlliste aus. Deklaration: int IP_Table_Get(unsigned unsigned unsigned unsigned unsigned unsigned int iReadWrite, int iIndex, char * cByte1, char * cByte2, char * cByte3, char * cByte4) Web www.beck-ipc.com Rückgabewert: 0: kein Fehler (-1): Fehler (z.B. unzulässig hoher Tabellenindex) Parameter: Version V. 1.1 iReadWrite muss auf 2 gesetzt werden (Kompatibilität zu FST-Steuerungen) 02.11.2004 iIndex Index des Listeneintrags, der ausgelesen werden soll. Autor *cByte1 bis *cByte4 Zeiger auf 4 Variablen vom Typ unsigned char, die die vier Bytes der IPAdresse aufnehmen sollen. Die Reihenfolge ist: cByte1.cByte2.cByte3.cByte4 EasyIP Datum Seite 16 von 25 hine EasyIP für @CHIP-RTOS-Applikationen 9.2.6 SaveIptable Speichert die IP-Kurzwahlliste in der Datei „iptable.ini“. Ist die Datei bereits vorhanden, wird sie überschrieben. Deklaration: int SaveIptable(void) Web Rückgabewert: 0: kein Fehler (-1): Datei konnte nicht zum Schreiben geöffnet werden www.beck-ipc.com Bemerkung: SaveIptable speichert alle Adressen, die nicht 0.0.0.0 sind. Das Format der Datei iptable.ini ist bei der Funktion LoadIptable beschrieben. Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP Seite 17 von 25 EasyIP für @CHIP-RTOS-Applikationen 9.2.7 LoadIptable Lädt die IP-Kurzwahlliste aus der Datei „iptable.ini“. Deklaration: int LoadIptable(void) Rückgabewert: 0: kein Fehler, Datei korrekt geladen (-1): Datei konnte nicht geöffnet werden. Möglicherweise wurde die Datei nicht gefunden. 2: Datei konnte nicht geschlossen werden. 3: Lesefehler. Die Datei enthält ungültige Daten. Web www.beck-ipc.com Bemerkung: Die Datei iptable.ini muss den folgenden Aufbau haben: 1=222.222.222.222 2=5.5.5.5 3=100.100.100.100 wobei 1, 2, 3 die Listenindizes sind und 222.222.222.222, 5.5.5.5, 100.100.100.100 die dazugehörigen IP-Adressen. Alle Listenpositionen, die nicht in der Datei definiert sind, bleiben unverändert. Wenn das Dateiformat nicht mit diesen Vorgaben übereinstimmt, ist das Verhalten dieser Funktion möglicherweise nicht definiert. EasyIP Seite 18 von 25 Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 9.2.8 IPFrom4Chars Wandelt eine als 4 Einzelbytes vorliegende IP-Adresse in einen unsigned long int (DWORD) um. Deklaration: unsigned long int IPFrom4Chars(char char char char cByte1, cByte2, cByte3, cByte4) Web www.beck-ipc.com Rückgabewert: Die IP-Adresse als unsigned long int in „Network Byte Order“, wobei Byte1 das höchstwertige und Byte4 das niederwertigste Byte ist. Parameter: Version V. 1.1 cByte1 bis cByte4 IP-Adresse in der Reihenfolge cByte1.cByte2.cByte3.cByte4 Datum 02.11.2004 Autor hine EasyIP Seite 19 von 25 EasyIP für @CHIP-RTOS-Applikationen 10 EasyIP Server-Funktionen 10.1 Einführung Die Server-Funktionen starten und stoppen den EasyIP-Server. Wenn der Server auf einer Steuerung läuft, können andere Steuerungen Daten von dieser Steuerung anfordern und an diese Steuerung senden. Außerdem wird der Server zur Unterstützung der Client-Funktionen benötigt, um die Antworten anderer Stationen auszuwerten, nachdem eine Client-Funktion aufgerufen wurde. Der Server muss also immer gestartet werden, wenn EasyIP genutzt werden soll. Der Server läuft als eigenständige Betriebssystem-Task im Hintergrund. Web www.beck-ipc.com 10.1.1 EipStartServer Startet die EasyIP-Server-Task. Version Deklaration: V. 1.1 int EipStartServer(unsigned char cCycleMs) Datum 02.11.2004 Rückgabewert: Autor 0: Kein Fehler. Server erfolgreich gestartet. (-1): Fehler. Server konnte nicht gestartet werden. Möglicherweise läuft der Server bereits. Parameter: cCycleMs Millisekunden, die der Server schläft, bevor er erneut prüft, ob Daten verarbeitet werden müssen. Empfohlener Wert: 10 ms. EasyIP Seite 20 von 25 hine EasyIP für @CHIP-RTOS-Applikationen 10.1.2 EipStopServer Stoppt die EasyIP-Server-Task Deklaration: int EipStopServer(void) Web Rückgabewert: www.beck-ipc.com 0: kein Fehler. Server erfolgreich gestoppt. (-1): Fehler. Server konnte nicht gestoppt werden. Möglicherweise läuft der Server nicht. Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP Seite 21 von 25 EasyIP für @CHIP-RTOS-Applikationen 11 Protokollbeschreibung Die folgende EasyIP-Protokollbeschreibung hilft Ihnen bei der Entwicklung eigener EasyIP-Funktionen und bei der Integration von EasyIP in andere Programme und Plattformen. Weiterhin gehen aus der Protokollbeschreibung einige zusätzliche Möglichkeiten hervor, die mit den bisher beschriebenen Grundfunktionen nicht ausgenutzt werden können. Web 11.1 Paketaufbau Jedes EasyIP-Paket beginnt mit dem folgenden Kopf (Header): Größe 1 Byte 1 Byte Bezeichnung Flags Fehler 4 Bytes Paketzähler 1 Byte 1 Byte reserviert Datentyp (Senden) 2 Bytes 2 Bytes 1 Byte 1 Byte Größe (Senden) Offset (Senden) reserviert Datentyp (Anfrage) 2 Bytes 2 Bytes 2 Bytes Größe (Anfrage) Server-Offset (Anfrage) Client-Offset (Anfrage) EasyIP Bemerkungen Bit 0: Informationspaket (Anfrage oder Antwort) Bit 1...2: Bitoperationen (Bitoperationen nur beim Senden, nicht beim Anfragen von Daten. Siehe nähere Erklärung zu Bitoperationen) Bit 6: Keine Antwort senden Bit 7: Antwortpaket Nur in Antwortpaketen benutzt 0: Kein Fehler 1: Operandentyp-Fehler 2: Offset-Fehler (Operandennummer falsch) 4: Größenfehler (zu viele Operanden) 16: nicht unterstützt Vom Client gesetzt, vom Server unverändert kopiert muss 0 sein Operandentyp, einige Typen werden möglicherweise nicht unterstützt: 1: Merkerwort 2: Eingangswort 3: Ausgangswort 4: Register 5: Timer 11: Zeichenkette Anzahl der gesendeten Datenworte Ziel-Offset im Server muss 0 sein Operandentyp, einige Typen werden möglicherweise nicht unterstützt (siehe Datentyp (Senden) für eine Liste der Typen) Anzahl der angeforderten Datenworte Offset der angeforderten Daten im Server Ziel-Offset der angeforderten Daten im Client Seite 22 von 25 www.beck-ipc.com Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen Dem Kopf folgen (optional) die Nutzdaten: Größe N*2 Bytes Bezeichnung Daten Bemerkungen Daten, die vom Client gesendet wurden oder angeforderte Daten vom Server Bei der Benutzung von Zeichenketten (in der BCxxx-RTOS-Version nicht unterstützt) haben die Größe-Felder eine andere Bedeutung: Sie geben die Anzahl der Zeichen in der Zeichenkette an. Die Zeichenketten müssen C-Stil haben, d.h. ein NUL-Byte als Endekennzeichen. 11.2 Erläuterungen zu den einzelnen Feldern Web www.beck-ipc.com 11.2.1 Senden von Daten Wenn der Client einen Datenblock zum Server sendet, werden die folgenden Felder benutzt: Paketzähler, Datentyp (Senden), Größe (Senden) und Offset (Senden). Die übrigen Felder sollen 0 sein. Der Server setzt das Antwort-Flag (Bit 7 im Feld Flags), kopiert den Paketzähler und setzt das Fehler-Feld, falls Fehler aufgetreten sind. Version V. 1.1 11.2.2 Anfragen von Daten Datum Wenn der Client eine Anfrage sendet, um Daten vom Server abzurufen, werden die folgenden Felder benutzt: Paketzähler, Datentyp (Anfrage), Größe (Anfrage), Server-Offset (Anfrage), Client-Offset (Anfrage). Die übrigen Felder sollen 0 sein. Der Server setzt das Antwort-Flag (Bit 7 im Flags-Feld), kopiert Paketzähler, Datentyp (Anfrage), Größe (Anfrage), Server-Offset (Anfrage) und Client-Offset (Anfrage) und setzt das Fehler-Feld, falls Fehler aufgetreten sind. Wenn die Anfrage erfüllt werden konnte, enthält das Antwortpaket zusätzlich die angeforderten Daten. 11.2.3 Senden und Anfragen von Daten Eine Kombination von Senden und Anfragen ist ebenfalls möglich: Ein Client kann in einem Paket sowohl Daten senden als auch anfordern. Das Antwortpaket, das vom Server gesendet wird, ist in diesem Fall sowohl Bestätigung der gesendeten Daten als auch Datenpaket. EasyIP Seite 23 von 25 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen 11.2.4 Informationspakete Wenn Bit 0 im Feld Flags gesetzt ist, handelt es sich bei dem entsprechenden Paket um ein Informationspaket. Die Steuerung, die Informationen anfordert, setzt das Informations-Flag und den 4-BytePaketzähler. Alle anderen Felder sollen 0 sein. Die Steuerung, die die Anfrage empfängt, setzt in ihrer Antwort ebenfalls das Informations-Flag und das Antwort-Flag, kopiert den Paketzähler und setzt die Größe (Anfrage) auf 38. Im Datenfeld werden die folgenden Daten gesendet: Web www.beck-ipc.com Größe 2 Bytes Bezeichnung Art der Information 2 Bytes Steuerungs-Typ 2 Bytes Steuerungs-Revision high Steuerungs-Revision low EasyIP-Revision high EasyIP-Revision low Größe von Operandentyp N 2 Bytes 2 Bytes 2 Bytes N*2 Bytes Bemerkungen Art des Informationspakets 1: Paket mit Steuerungs- und Operanden-Informationen Typ der Steuerung 1: FST 2: MWT 3: DOS etc. siehe unten siehe unten siehe unten siehe unten 0, wenn dieser Operandentyp nicht verfügbar ist, sonst Anzahl der unterstützten Operanden dieses Typs Die Tabelle der Operandengröße listet die Informationen für die Operandentypen 1 bis 32 auf. Beispiel: Eine Steuerung mit RTOSBetriebssystem (z.B. BCxxx) Version 1.01 und EasyIP-Revision 1.0 hat Steuerungs-Typ 3, Steuerungs-Revision high 1, Steuerungs-Revision low 1, EasyIP-Revision high 1 und EasyIP-Revision low 0. Die Operandengrößen sind 10000, 256, 256, 256, 0, 0, ..., 0. EasyIP Seite 24 von 25 Version V. 1.1 Datum 02.11.2004 Autor hine EasyIP für @CHIP-RTOS-Applikationen Bit-Operationen: Normalerweise speichert ein EasyIP-Server beim Empfang von Daten diese nur in den Operanden ab. Um einzelne Bits ändern zu können (z.B. Bit 5 in Merkerwort 25 setzen und alle anderen Bits unverändert lassen), können Bit-Operatoren mit den Daten gesendet werden. Bitoperationen können über die Bits 1 und 2 im Flag-Feld wie folgt ausgewählt werden: Operation normal bitweises ODER bitweises UND bitweises XOR Bit 1 0 1 0 1 Bit 2 0 0 1 1 Web www.beck-ipc.com Beispiel: Möchten Sie Bit 2 setzen, senden Sie ODER mit dem Wert 4. Möchten Sie Bit 3 löschen, senden Sie UND mit dem Wert FFF7h. Version V. 1.1 Datum 02.11.2004 12 Ver. 1.0 1.1 EasyIP Autor Historie Datum 17.06.2002 02.11.2004 hine Autor dtr hine Änderungen erste Version Corporate Design / Version für Demo 1.0 Seite 25 von 25