Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme bei der Ansteuerung der Seriellen Schnittstelle mit ActiveX

Empfohlene Antworten

Veröffentlicht

Hallo,

ich verwende ActiveX um Daten über die Serielle Schnittstelle zu empfangen. Dabei gibt es ein Problem: ich bekomme von außen 100 Byte über RS232, ich empfange in meinem Programm aber nur die ersten 20 Byte. Die restlichen werden einfach verworfen. Ich kann kein Handshake verwenden. Ich will also immer 100 Byte empfangen und diese dann verarbeiten.

Kann mir jemand helfen?

Danke schonmal im vorraus!

Gruß

Thomas

:mod:

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:

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.