Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Probleme bei der Programmierung der Seriellen Schnittstelle

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
19.08.2004, 21:45 Uhr
~Tommy_large
Gast


Hallo,

ich habe folgendes Problem. Ich bekomme über die Serielle Schnittstelle 100 Byte Daten mit einem definierten Endsignal (CR). Ich habe die Ansteuerung mit ActiveX programmiert und kann kein Handshake verwenden. Ich empfange allerdings nur ca. 30 Byte. Der Rest wird einfach verschluckt. Kann mit jemand helfen? Ich versuche schone eine Weile das Problem in den Griff zu bekommen und komme aber nicht weiter.


C++:
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.


C++:

// 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!!

Dieser Post wurde am 19.08.2004 um 21:59 Uhr von FloSoft editiert.
 
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: