Nachricht von Serieller Schnittstelle

Gast #386646
Hallo,
hab da mal ne Frage!
Ich programmiere grade ein Windows Fenster mit dem ich die serielle
Schnittstelle bedienen kann. Hab mir dazu eine fertige Klasse im Netz
besorgt. Die funktioniert an sich auch schon. Das problem ist nur: wenn
ich Daten aus dem Buffer auslesen will brauche ich ja vorher eine
Nachricht von Windows, das Date in den Buffer geschrieben wurden.
Gibt es da schon eine Nachricht in Win.h und wenn ja wie heißt die oder
welche Nummer hat sie. Falls nicht wie kann ich mir in Visual C++ selbst
so eine Nachricht erzeugen?

Gruß B.
Gast
WaitCommEvent (oder CreateEvent + WaitCommEvent wenn
FILE_FLAG_OVERLAPPED verwendet wird). Eine andere Möglichkeit wäre
z.B., mit SetCommTimeouts die Timeouts beim Lesen auszuschalten und
dann regelmäßig (Timer, Thread) mit ReadFile abzufragen, ob Daten
angekommen sind.
Gast
Ok WaitCommEvent hab ich gefunden. Ist aber keine Nachricht sondern
sdtcall.
Bin noch ein absoluter Anfänger, desshalb die Frage:
wie binde ich diesen Aufruf in mein Programm ein.
Hab folgendes versucht:

im Header meiner Klasse:
class CSerial
{

public:
  CSerial();
  ~CSerial();


  .....
        BOOL WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED);
        .....

protected:
  BOOL WriteCommByte( unsigned char );

  HANDLE m_hIDComDev;
  OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
  BOOL m_bOpened;
        ........

Und in CComDlg :



.......

BOOL CSerial::WaitCommEvent(HANDLE m_hIDComDev, LPDWORD lpword,
LPOVERLAPPED m_OverlappedRead)
{

  CSerial serial;

  if (serial.Open(1, 9600))
  {
          char* lpBuffer = new char[500];
    int nBytesRead = serial.ReadData(lpBuffer, 500);
    UpdateData(TRUE);
    m_receive = lpBuffer;
    UpdateData(FALSE);
    delete []lpBuffer;
  }

  else AfxMessageBox("Failed to open port!");


  return NULL;


}

......

void CComDlg::OnButton1() // Open COMPORT

......


Funktioniert natürlich nicht! Falls jemand die zeit hat und sich die
mühe machen könnte mir das etwas genauer zu erklären wäre ich sehr
dankbar!!
Gruß B.
Gast
Ach und noch ne Frage!!!!!!

Warum kann ich den Buffer nicht mit einem standart event zb. Button
click oder so auslesen.
Das geht nur, wenn unmittelbar Daten gesendet werden.
Überschreibt Windows den Buffer nach kurzer zeit wieder mi 0000.. ?

so bis dahin schönes WE. Gruß B.
Gast
mit
int nBytesRead = serial.ReadData(lpBuffer, 500);
liest du ja den seriellen Buffer aus.

durch dieses auslesen wird der Buffer gelöscht.
wenn du in dem WaitCommEvent den buffer schon ausliest, dann kannst du
ihn über ein buttonevent nicht nochmal auslesen.


thomas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.