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. |