?
hallo
hab jetzt nach einigen tipps aus diesem forum eine klasse "serial" geschrieben.
das senden von daten funktioniert sehr gut, nur das empfangen ist noch nicht so optimal.
die daten kommen am pc mit einer "großen" verzögerung an.(1-2 sekunden und wird im laufe des programms immer größer)
wenn ich aber ein rs-232 tool oder hyper terminal verwende habe ich keine verzögerung beim empfangen.
so sieht mein derzeitiger code aus.
*****************************************************************
//class Serial
BOOL Serial::OpenCOM()
{
//Filehandle
fh=CreateFile(com,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
if(fh==INVALID_HANDLE_VALUE)
return 1;
//Parameter
CString Param;
Param.Format("%s:9600,n,8,1",com);
DCB dcb;
memset(&dcb,0,sizeof(DCB));
dcb.DCBlength=sizeof(DCB);
BuildCommDCB(Param,&dcb);
SetCommState(fh,&dcb);
//TIMEOUTS
COMMTIMEOUTS cto;
memset(&cto,0,sizeof(cto));
GetCommTimeouts(fh,&cto);
cto.ReadIntervalTimeout=0;
cto.ReadTotalTimeoutMultiplier=0;
cto.ReadTotalTimeoutConstant=8000;
SetCommTimeouts(fh,&cto);
return TRUE;
}
BOOL Serial::WriteCOM(CString text)
{
DWORD BytesWritten=0;
int erg=WriteFile(fh,text,text.GetLength(),&BytesWritten,NULL);
if((!erg||BytesWritten)!=text.GetLength())
return FALSE;
else
return TRUE;
}
CString Serial::ReadCOM(int len)
{
DWORD bytesToRead = len,
bytesRead = 0;
char readBuf[32768];
int erg = ReadFile(fh,readBuf,bytesToRead,&bytesRead,NULL);
if (!erg/||bytesToRead!=bytesRead/) return "";
readBuf[bytesRead] = 0;
CString cs = readBuf;
return cs;
}
BOOL Serial::CloseCOM()
{
if(fh!=INVALID_HANDLE_VALUE)
{
CloseHandle(fh);
return TRUE;
}
else
return FALSE;
}
void Serial::SetCOM(CString schnittstelle)
{
com=schnittstelle;
}