000
01.06.2005, 06:52 Uhr
~Kaiser
Gast
|
Ein Dos-Rechner steuert über die serielle Schnittstelle RS232 einen Funktionsgenerator an, um den Datenfluß mitlesen zu können habe ich folgendes Tool geschrieben.
C++: |
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include "serial.h"
#define speed 115000 #define dbits 8 #define parity 0 #define stopbits 1 #define flow 0
void main() { SerialPort_t pPort1,pPort2; DWORD dwEvtMask1, dwEvtMask2; BOOL fsuccess1, fsuccess2;
int laenge_port1=0; int laenge_port2=0; char Port1[5]="Com1"; char Port2[5]="Com2";
unsigned char RecBuf_port1[4400]; unsigned char RecBuf_port2[4400];
// COM Port 1&2 öffnen pPort1=fuSerial_PortOpen(Port1,speed,dbits,parity,stopbits,flow); pPort2=fuSerial_PortOpen(Port2,speed,dbits,parity,stopbits,flow);
fsuccess1=SetCommMask(pPort1,EV_RXCHAR); fsuccess2=SetCommMask(pPort2,EV_RXCHAR);
do { if(WaitCommEvent(pPort1,&dwEvtMask1,NULL)) if((laenge_port1=wfuSerial_Receive(pPort1,4400,RecBuf_port1))>0) wfuSerial_Send(pPort2,laenge_port1,RecBuf_port1);
if(WaitCommEvent(pPort2,&dwEvtMask2,NULL)) if((laenge_port2=wfuSerial_Receive(pPort2,4400,RecBuf_port2))>0) wfuSerial_Send(pPort1,laenge_port2,RecBuf_port2);
if(kbhit()) // Schleife abbrechen bei Tastendruck break; } while(1);
// COM Port 1&2 schliessen wfuSerial_PortClose(pPort1); wfuSerial_PortClose(pPort2); getch(); }
|
Der Windows-Rechner auf dem das Tool läuft wurde zwischen Dos-Rechner und Funktionsgenerator geschlossen. Schreibt nun der Dos-Rechner etwas auf die Schnittstelle wird es mit dem Windows-Rechner auf Com1 eingelesen und auf Com2 an den Funktionsgenerator ausgegeben. Die Daten werden mit Portmon mitgelesen. Da das ganze Tool ja in einer Endlosschleife läuft wird bei jeden Durchlauf der Schleife eine Zeile am Bildschir des Windows-Rechners ausgegeben. Aus diesem Grund habe ich die Zeile/n
C++: |
if(WaitCommEvent(pPort1,&dwEvtMask1,NULL))
|
eingefügt. Jetzt habe ich nur das Problem das der Befehl WaitCommEvent darauf wartet bis er etwas empfängt, ich suche4 aber nach einem Befehl der kontrolliert ob im Empfangsbuffer etwas liegt, wenn ja die Daten weiterschickt, wenn nein einfach weiter macht und beim nächstenmal wieder abprüft.
Ich hoffe ich konnte mein Problem annähernd beschreiben.
Danke |