BEGIN_EVENTSINK_MAP(CParameter, CDialog)
//{{AFX_EVENTSINK_MAP(CParameter)
ON_EVENT(CParameter, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
#define comEvReceive 2
#define CR 0xd
// Daten über RS232 empfangen
void CParameter::OnOnCommMscomm1()
{
int len
short evnt = m_com.GetCommEvent();
if(evnt == comEvReceive)
{
CString empf;
empf = (m_com.GetInput()).bstrVal; // Empfangenes Zeichen
if (empf == CR)
{
len = strlen(m_Buffer_RS232);
m_Buffer_RS232.Delete(0,len);
}
else
m_Buffer_RS232.Insert(m_EmpfZeiger++,empf);}
An dieser Stelle will ich 100 Byte (also 100 Zeichen empfangen) und diese in die globale CString Variable m_BufferRS232 hintereinander schreiben. Wenn das Zeichen CR kommt ist das Ende der 100 Bytes erreicht. Allerdings hat es nicht funktioniert, da nur ca 30 Zeichen gelesen wurden. Wie kann ich erreichen das alle meine Zeichen eingelesen werden? Die Zeichen werden im Abstand von ca. 20 ms geschickt.
}
// RS232 initialisieren
void CParameter::ComInit()
{
TRY // Fehler abfangen
{
// Frage ob Port offen
if(m_com.GetPortOpen())
m_com.SetPortOpen(FALSE); // Port schließen
else
m_com.SetPortOpen(TRUE); // Port öffnen
}
CATCH_ALL (e)
MessageBox("Fehler");
END_CATCH_ALL
}
// über Rs232 senden
void CParameter::ComSenden(int len)
{
// Senden
if(m_com.GetPortOpen()) // Wenn Port offen
{
COleVariant var;
var = COleVariant(senden);
m_com.SetOutput(var); // Senden
}
}
Vielen Dank im Vorraus!!
:confused: