Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Befehl zum Empfangsbuffer prüfen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.06.2005, 08:48 Uhr
typecast
aka loddab
(Operator)


Dos? Windows? Kenn ich nicht

->
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: