Hallo Allerseits,
Unter MS C++ 6 haben wir mit dem Code unten die COM initialisiert. Die Übertragung von ca. 32 KB klappt auch oft, aber nicht immer. Bei Ivica zu Hause geht es unter Home XP, Multiuser überhaupt nicht.
Die Gegenstelle benutzt Xon/Xoff, die Handshakeleitungen sind an der Gegenstelle gebrückt.
Die COM wird nicht von anderen Programmen benutzt. Kabel, Anschlussbelegung und Hardware sollten ok sein, da die Kommunikation mit einem alten DOS-Programm ( das nun so langsam mal ersetzt werden soll ) funktioniert.
Wir würden uns freuen, wenn der geübte C++ Programmierer einen Blick auf unsere Zeilen wirft und uns einen Wink geben kann, an welcher Stelle es hapern könnte.
Vielen Dank für Eure Hilfe,
Uwe P.
bool CSerie:ortOpen(char *portnumber, long baudrate, int parity, int wordlength, int stopbits)
{
COMMTIMEOUTS g_cto =
{
5000, /* ReadIntervalTimeOut */
0, /* ReadTotalTimeOutMultiplier */
5000, /* ReadTotalTimeOutConstant */
3, /* WriteTotalTimeOutMultiplier */
1000 /* WriteTotalTimeOutConstant */
};
memset(&m_Ov,’/0’,sizeof(m_Ov));
m_hCom = CreateFile( portnumber,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL );
if ( m_hCom == INVALID_HANDLE_VALUE )
{
GetError();
return false;
}
m_dcb.DCBlength= sizeof(DCB); /* DCBlength */
m_dcb.BaudRate= 9600; /* BaudRate */
m_dcb.fBinary= TRUE; /* fBinary */
m_dcb.fParity = FALSE; /* fParity */
m_dcb.fOutxCtsFlow= FALSE; /* fOutxCtsFlow */
m_dcb.fOutxDsrFlow= FALSE; /* fOutxDsrFlow */
m_dcb.fDtrControl= DTR_CONTROL_ENABLE; /* fDtrControl */
m_dcb.fDsrSensitivity= FALSE; /* fDsrSensitivity */
m_dcb.fTXContinueOnXoff= FALSE; /* fTXContinueOnXoff */
m_dcb.fOutX= TRUE; /* fOutX */
m_dcb.fInX= TRUE; /* fInX */
m_dcb.fErrorChar= FALSE; /* fErrorChar */
m_dcb.fNull= FALSE; /* fNull */
m_dcb.fRtsControl= RTS_CONTROL_ENABLE; /* fRtsControl */
m_dcb.fAbortOnError= FALSE; /* fAbortOnError */
m_dcb.fDummy2= 0; /* fDummy2 */
m_dcb.wReserved= 0; /* wReserved */
m_dcb.XonLim= 250; /* XonLim */
m_dcb.XoffLim= 250; /* XoffLim */
m_dcb.ByteSize= 8; /* ByteSize */
m_dcb.Parity= NOPARITY; /* Parity */
m_dcb.StopBits= ONESTOPBIT; /* StopBits */
m_dcb.XonChar= 17; /* XonChar */
m_dcb.XoffChar= 19; /* XoffChar */
m_dcb.ErrorChar= 0; /* ErrorChar */
m_dcb.EofChar= 0; /* EofChar */
m_dcb.EvtChar= ‚\0‘;
/* Buffergroesse bestimmen */
SetupComm(m_hCom,4096,4096);
/* configuration port COM */
if(!SetCommTimeouts(m_hCom, &g_cto ) ||!SetCommState(m_hCom, &m_dcb))
{
// printf(„Erreur lors de la configuration du port COM%d“, nId);
AfxMessageBox(„Port nicht richtig geoeffnet“,NULL,MB_OK);
CloseHandle(m_hCom);
return FALSE;
}
/* Buffer loeschen, DTR auf 1 setzen */
PurgeComm(m_hCom, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
//EscapeCommFunction(m_hCom, SETDTR);
AfxMessageBox(„port geoeffnet“,NULL,MB_OK);
return true;
}