Gast
#990120
Hallo,
habe es geschafft meine RS232-Schnittstelle zu öffnen und Daten
einzulesen, jetzt habe ich aber noch folgendes Problem:
die Schnittstelle kann ich jederzeit öffnen, auch wenn noch keine Daten
gesendet werden, wenn die Schnittstelle offen ist und dann erst anfange
Daten über diese zu senden, dann zeigt er mir an, das er nicht lesen
kann.
werden aber daten schon gesendet und ich öffne die Schnittstelle, dann
kann er sie lesen.
hier ein teil meines programms:
Die Funktionen:
// Initialisieren der Schnittstelle
void rs232::rs_init()
{
cout << "Portnr.: ";
cin >> portnr;
cout << "Baudrate: ";
cin >> baudrate;
}
// Öffnen der Schnittstelle
int rs232::rs_open()
{
TCHAR portcom[10];
wsprintf(portcom, Z("COM%d"), portnr);
hComm = CreateFile( portcom,
GENERIC_READ,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hComm == INVALID_HANDLE_VALUE)
{
cout << "Fehler beim Oeffnen des Ports\n";
return FALSE;
}
GetCommState(hComm, &dcb);
dcb.BaudRate = baudrate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hComm, &dcb);
GetCommTimeouts(hComm, &to);
to.ReadIntervalTimeout = 0;
to.ReadTotalTimeoutMultiplier = 0;
to.ReadTotalTimeoutConstant = 0;
SetCommTimeouts(hComm, &to);
return TRUE;
}
// Schließen der Schnittstelle
void rs232::rs_close()
{
CloseHandle(hComm);
}
// Einlesen der Schnittstelle
unsigned char rs232::rs_read()
{
unsigned char receive_data = 0;
DWORD buffer = 0;
BOOL result = FALSE;
if (&rs232::rs_open==FALSE)
{
cout << "Schnittstelle nicht bereit!\n";
return 0;
}
result=ReadFile(hComm, (LPVOID)&receive_data, 1, &buffer, 0);
if(result==FALSE)
{
cout << "Error!\n";
exit (0);
}
else
return receive_data;
}
Teil des Hauptprogramms:
#include "receiver_klassen.h"
void main()
{
rs232 my_rs;
data my_data;
int open;
int block = SYNCHRON1;
int i;
int f;
unsigned char receive_data;
unsigned short length;
my_rs.rs_init();
open = my_rs.rs_open();
if (open==TRUE)
cout << "Schnittstelle bereit!\n\n";
else
{
cout << "Schnittstelle nicht bereit!\n";
exit(1);
}
//Endlosschleife
for( ; ; )
{
switch (block)
{
case SYNCHRON1: //Synchronisationsblock
Teil1
if (my_rs.rs_read()==165)
block = SYNCHRON2;
break;
...