www.mikrocontroller.net

Forum: PC-Programmierung Nachricht von Serieller Schnittstelle


Autor: Björn B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Björn B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Björn B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dominik Friedrichs (forlix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.