/******************************************/ /* RK512 Interpreter (Version 1.1.0.1) */ /* für WINDOWS 32Bit */ /* mit 3864 und 3964R-Prozedur */ /* */ /* Copyright: Uwe Klatt 04/1995-12/2000 */ /* */ /******************************************/ // Diese DLL kann unter anderem z.B. zum Senden und Empfangen von Daten // in/aus einem wahlfreien DB mit Hilfe einer CP 524/525 und Simatic S5 // verwendet werden. // Alle Sio... Funktionen geben bei Erfolg '0' und im Fehlerfall '-1' zurück ! // Die RK512... Funktionen bei Erfolg '0' bzw. einen Fehlercode // Port ist die gewünschte Schnittstelle 1..4 (1=COM1, 2=COM2, ...) // Funktionsweise: // Zuerst muß eine Schnittstelle mit SioInit() initialisiert werden. // Nun können die RK512() oder anderen Sio() Funktionen verwendet werden. // Wahlweise kann bei Lesen mit SioSetTimeout() ein Timeout angegeben werden, bis zu // dem mindestens ein Zeichen gelesen weden können muß. Dieses Timeout gilt ebenfalls // für das ganze Datenpaket mit len zeichen. // Zum Schluß muß die Schnittstele mit SioClose() wieder feigegeben werden. long __declspec(dllimport) WINAPI SioInit(long Port, long Baud, long WordLen, long Parity, long Stop); // Baud = 110,300,600,1200,2400,4800,9600,14400,19200,38400,56000,57600 oder 115200 // Wordlen = 7 oder 8 Bits // Parity 0 = keine, 1 = Odd, 2 = Even // Stop = 1 oder 2 Stopbits long __declspec(dllimport) WINAPI SioClose(long Port); long __declspec(dllimport) WINAPI SioSetTimeout(long Port, long timeout); // timeot in mS long __declspec(dllimport) WINAPI SioWrite(long Port,unsigned char *d,long len); long __declspec(dllimport) WINAPI SioRead(long Port, unsigned char *d, long len, long to); // "len" Datenbytes über Schnittstelle 'Port' senden/empfangen // Der Rückgabewert liefert die Anzahl der gelesenen/geschriebenen Bytes. // Ein negativer Wert beinhaltet einen Fehlercode: // -1 = FRAME Error // -2 = I/O Error // -3 = OVERRUN Error // -4 = RXOVER Error (Empfangspufferüberlauf) // -5 = PARITY Error // -6 = TXOVER Error (Sendepufferüberlauf) // -7 = Schnittstelle nicht geöffnet long __declspec(dllimport) WINAPI SioGetLineStatus(long Port); // Bit 0: CTS // Bit 1: DSR // Bit 2: RING // Bit 3: RLSD long __declspec(dllimport) WINAPI SioSetLineStatus(long Port, long mode, long param); // mode 0=kein Handshake // param: Bit 0=RTS // Bit 1=DTR // mode 1=RTS/CTS Handshake // mode 2=DTR/DSR Handshake long __declspec(dllimport) WINAPI SioGetBufLen(long Port, long param); // Anzahl Zeichen im Buffer // param 0 = Sendebuffer // param 1 = Empfangsbuffer long __declspec(dllimport) WINAPI RK512Send(long Port,unsigned char *data, long db, long dw, long len, long r3964, long typ); long __declspec(dllimport) WINAPI RK512Fetch(long Port, unsigned char *data, long db, long dw, long len, long r3964, long typ); // *data Zeiger auf zu sendene/empfangene Daten // db = DB-bausteinnummer // dw = Ab Datenwort db // len = Anzahl Bytes // r3964 = 0: 3964 Format // r3964 = 1: 3964R Format // typ = Bausteintyp (z.B. Datenbaustein = 0x44 = 'D') /******************************************************************** Fehlercodes der RK512... Funktionen =================================== Das LOWBYTE des Rückgabewertes hat folgende Funktion: 0 = kein Fehler aufgetreten -1 = Schnittstelle nicht geöffnet 1 = Timeout beim Warten auf vom Empfänger 2 = vom Empfänger erhalten, erneutes Senden versuchen 3 = Falsches Zeichen erhalten, vom Empfänger erwartet 4 = Timeout beim Warten auf vom Empfänger 6 = Falsches Quittungszeichen vom Empfänger erhalten (kein ) 7 = Timeout beim Warten auf vom Empfänger 8 = Timeout beim Warten auf Empfangszeichen 9 = Ende Kennung nicht erhalten 10 = Fehler xxx im Reaktionstelegramm (Fehlercode im HIGHBYTE des Rückgabewertes) ********************************************************************/