000
16.02.2006, 20:42 Uhr
Magic
|
Hallo, hab eine Frage zur Schnittstellenprogrammierung
Ich benutze ein I/O Interface von ELV (Beschreibung hier: www.elv-downloads.de/service/manuals/IO88/472-69.asp?&%1 ) Das Interface arbeitet mit speziellen Steuerbefehlen. Das Problem ist, dass ich die Antwort vom Interface nicht auslesen kann. Die Steuerbefehle erreichen jedoch das Interface. Denn die einzelen Ausgänge kann ich setzen. Nur wenn ich den Befehl zum abfragen schicke kann ich die Antwort nicht auswerten.
Ich arbeite mit dem Bloodshed dev-C++
Hier meine Serial.h
C++: |
/* * serial.h -- kleine Bibliothek fuer die Ein-/Ausgabe auf den seriellen Port */
#ifndef _SERIAL_H #define _SERIAL_H
#include <stdio.h> #include "windows.h"
#define PORTNAME "COM1" #define BAUDRATE 9600 #define BYTESIZE 8 #define PARITY EVENPARITY #define STOPBITS ONESTOPBIT
void *port;
/* * portInitalisieren() -- der Port wird mit den Grundeinstellungen initalisiert */
void portInitalisieren() { DCB dcbConfig;
// Port oeffnen port = CreateFile( PORTNAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (port == INVALID_HANDLE_VALUE) { printf("Fehler beim Oeffnen des Ports\n"); exit(-1); }
// Parameter des Port holen if (GetCommState(port, &dcbConfig)) { dcbConfig.BaudRate = BAUDRATE; dcbConfig.ByteSize = BYTESIZE; dcbConfig.Parity = PARITY; dcbConfig.StopBits = STOPBITS; dcbConfig.fBinary = TRUE; dcbConfig.fParity = TRUE; } else { printf("Fehler beim Holen der Konfiguration\n"); exit(-1); }
// Parameter des Port setzen if (!SetCommState(port, &dcbConfig)) { printf("Fehler beim Setzen der Konfiguration\n"); exit(-1); } }
/* * byteVomPortLesen() -- liest ein Character vom Port */
byte byteVomPortLesen() { byte zeichen; DWORD eventMask; DWORD anzImBuffer;
// Setzen der CommMask if (!SetCommMask(port, EV_RXCHAR)) { printf("Fehler beim Setzen der CommMaske\n"); exit(-1); }
// Warten auf CommEvent if (WaitCommEvent(port, &eventMask, NULL)) { // Lesen bis was kommt do { ReadFile(port, &zeichen, 1, &anzImBuffer, NULL); } while (anzImBuffer == 0); } else { printf("Fehler beim Warten auf CommEvent\n"); exit(-1); }
return zeichen; }
/* * byteAufPortSchreiben() -- schreibt ein Character auf den Port */
void byteZumPortSchreiben(byte zeichen) { unsigned long anzGeschrieben;
if (WriteFile(port, &zeichen, 1, &anzGeschrieben, NULL) == 0) { printf("Fehler beim Schreiben auf Port\n"); exit(-1); } } #endif
|
mein Programm:
C++: |
#include <stdio.h> #include "serial.h" byte b[10]; int i; main() { printf("Port wird initialisiert:\n"); portInitalisieren();
// Protokoll absenden um den Status zu empfangen.. byteZumPortSchreiben(0x02); // STX byteZumPortSchreiben(0x49); // Kommando "I" byteZumPortSchreiben(0x05); // ENQ byteZumPortSchreiben(0x12); // DC2 byteZumPortSchreiben(0x03); // ETX
// Kurz warten.. sleep(50);
// Hier muss das Antwort-Protokoll empfangen werden.
printf("byte wird vom Port gelesen:\n"); for( i = 0; i < 10; i++) { b[i]=byteVomPortLesen(); printf("%d Wert\n", b[i]); }
getchar(); getchar(); }
|
Kann mir jemand weiterhelfen? Gruss Peter |