Technologische Neuigkeiten, Bewertungen und Tipps!

Eine Kommunikationsklasse für die serielle Schnittstelle

Hinweis: Der folgende Artikel hilft Ihnen dabei: Eine Kommunikationsklasse für die serielle Schnittstelle

Ich habe eine Weile nach einem guten Kommunikationskurs gesucht und konnte keinen finden. Da beschloss ich, mein eigenes zu schreiben, und es sollte eines sein, das einfach zu bedienen ist.

In den neuen Gruppen gibt es viele Fragen zur seriellen Kommunikation, also dachte ich: Machen Sie es öffentlich! Es ist Freeware. Das Einzige, was ich von Benutzern erwarte, ist, dass sie mir eine E-Mail schreiben. Alle Änderungen an dieser Klasse sind kostenlos. Bitte teilen Sie mir jedoch mit, ob dadurch ein Fehler behoben oder einige gute Funktionen hinzugefügt werden. Kommentieren Sie auch Ihren Code und lassen Sie mich Ihre Fehler nicht lösen!

Ziel

Die Klasse ist nicht als Basisklasse für die Modemkommunikation gedacht, sondern eher zum Ansteuern von Hardware oder zum Lesen von Hardware über die serielle Schnittstelle.

Von den enthaltenen Klassen ist nur eine Klasse wichtig: CSerialPort. Die anderen Klassen dienen nur zur Veranschaulichung der Verwendung dieser Klasse.

Verwendung

In Ihrer Software müssen Sie lediglich eine Instanz der CSerialPort-Klasse erstellen und InitPort aufrufen.

// der Besitzer (CWnd) des Ports (empfängt Nachricht) BOOL CSerialPort::InitPort(CWnd* pPortOwner, UINT Portnr, // Portnummer (1..4) UINT Baud, // Baudrate Char Parity, // Parität UINT Datenbits , // Datenbits UINT Stopbits, // Stopbits DWORD dwCommEvents, // EV_RXCHAR, EV_CTS usw. UINT writebuffersize) // Größe des Schreibpuffers

Das dwCommEvents-Flag kann für die Kommunikation mit dem Besitzer dieser Klasse verwendet werden.

Die Flags können eines der folgenden sein (oder mit | kombiniert):

    WM_COMM_BREAK_DETECTED Bei der Eingabe wurde eine Unterbrechung erkannt. WM_COMM_CTS_DETECTED Das CTS-Signal (Clear-to-Send) hat seinen Status geändert. WM_COMM_DSR_DETECTED Das DSR-Signal (Data-Set-Ready) hat seinen Status geändert. WM_COMM_ERR_DETECTED Es ist ein Zeilenstatusfehler aufgetreten. Leitungsstatusfehler sind CE_FRAME, CE_OVERRUN und CE_RXPARITY. WM_COMM_RING_DETECTED Ein Ringindikator wurde erkannt. WM_COMM_RLSD_DETECTED Das RLSD-Signal (Receive-Line-Signal-Detect) hat seinen Status geändert. WM_COMM_RXCHAR Ein Zeichen wurde empfangen und im Eingabepuffer abgelegt. WM_COMM_RXFLAG_DETECTED Das Ereigniszeichen wurde empfangen und im Eingabepuffer abgelegt.

Akzeptieren Sie den ersten Parameter. Alle Parameter sind optional. Die Standardwerte sind:

Portnr = 1 Baud = 19200 Parität = ‘N’ Datenbits = 8, Stoppbits = 1, dwCommEvents = EV_RXCHAR | EV_CTS, nBufferSize = 512);

Der folgende Code reicht also aus, um die Kommunikation zu ermöglichen:

im Header des Besitzers:

CSerialPort m_Serial;

im Code:

m_Serial.InitPort(this); m_Serial.StartMonitoring();

Dann wird der Tread gestartet, der den Port überwacht, und alle Ereignisse am Port werden an den Eigentümer gesendet. Um ein Zeichen zu erhalten, benötigt der Besitzer einen Nachrichteneintrag in der Nachrichtenzuordnung:

BEGIN_MESSAGE_MAP(CCommtestDlg, CDialog) //{{AFX_MSG_MAP(CCommtestDlg) ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication) ON_MESSAGE(WM_COMM_CTS_DETECTED, OnCTSDetected) //}}AFX_MSG_MAP END_MESSAGE_MAP()

und sie müssen behandelt werden:

LONG CCommtestDlg::OnCommunication(WPARAM ch, LPARAM port) { // etwas mit dem empfangenen Zeichen machen return 0; }

Das ist es zum Lesen. Das Schreiben kann mit WriteChar oder WriteToPort erfolgen

Downloads

Beispielprojekt herunterladen – 66K

Geschichte

Datum der Veröffentlichung: 27. Februar 1998

Behebung eines Ressourcenlecks in Init() – Wes Jones (17.10.2000)

Daten gehen bei WriteToPort verloren – Shree (12.09.2000)

Programm schlägt fehl, wenn Portnummer > 9 – Shree (08.09.2000)

Zwei Computer verbinden – Mani (23.08.2000)

ERROR_IO_PENDING Fehler in WriteFile – Deepu (07.08.2000)

Konvertieren der gesendeten Zeichenfolge in ASCII – Luke (28.07.2000)

Kann ich den COM-Port freigeben? – Rob Edwards (26.07.2000)

Commtest funktioniert nicht unter Win2000? – matt (26.05.2000)

CreateFile in Win2000 schlägt fehl – ​​matt (25.05.2000)

XMODEM-1k über serielle Schnittstellen – Jermaine (24.05.2000)

Linux-Kompatibilität? – Callaway (18.05.2000)

Modifiziertes CSerial mit Modemfunktionen? – Francois (18.05.2000)

Letzte Version von CSerial ?? – Francois G (18.05.2000)

Fehler bei GetOverlappedResult in WriteFile – Stéphane Lemoine (11.05.2000)

Auf logische Ports zugreifen??? – Shree (26.04.2000)

SEHR GUTE ARBEIT!!!! – Nico (14.04.2000)

Eine große Datei senden? Eine mögliche Antwort. – Bill Bateman (12.04.2000)

Eine große Datei senden? – Gary Hu (12.04.2000)

Ressourcenlecks – Ernesto García (04.04.2000)

CSerialPort-Klasse – Priya Nair (30.03.2000)

Chainard Arnaud, bist du da? – BigDaddy (25.03.2000)

eine GUI, die zum Lesen der seriellen Schnittstelle führt – dido padi (23.03.2000)

Wie macht man… – Raj (22.03.2000)

Dringend benötigte Informationen – mystiqman (04.03.2000)

Fehler: Seriellen Port töten? – Lee (03.03.2000)

Problem; Ich weiß nicht, wie ich Daten an und von der seriellen Schnittstelle senden und lesen soll – ajie (28.02.2000)

So spielen Sie mit der Demo – Jiasheng Zhu (17.02.2000)

Terminalemulation der seriellen Schnittstelle? IrDA? – Jermaine (15.02.2000)

X/Y/ZMODEM-Protokolle? – jermaine (11.02.2000)

Sendet diese Klasse NULL-ZEICHEN???? – X HANIN (06.02.2000)

Behauptung beim WritingToPort fehlgeschlagen – ajie (01.02.2000)

Beim Streamen der Eingabedaten fehlgeschlagen!) neu 2) empfangen 3) löschen 4) neu 5) empfangen – Ali Khan (14.12.1999)

Hilfe…ein Amateur hier…wie kompiliere ich ein Programm?? – Darren Pang (05.12.1999)

Bitte helfen Sie mir (ÄNDERN SIE DIE BAUDRATE)!! – Mustafa (02.12.1999)

Problem beim Senden des Steuersignals über den Port – Srvidya (24.11.1999)

Hinzugefügt WaitForString(…) – Olivier David (22.11.1999)

Demo funktioniert nicht mit Umgebungen mit mehreren Ports (2 Ports) – Joo Min, Lee (16.11.1999)

Andere Lösung für das Auslesen verlorener Daten – Ainurrofiq. Lento (04.11.1999)

Baudrate – Crystal (02.11.1999)

Ausgezeichnet, ich habe mich stark an diesem Kurs orientiert – Robert Pearmain (28.10.1999)

Zugriff auf parallele Ports. – Cameron (19.10.1999)

Wer möchte einen nicht nullterminierten String senden – Taesung Lee (24.09.1999)

Perfekter Code. – ajit wadekar. (07.08.1999)

So kompilieren Sie mit Borland c++ – R. Vogts (05.08.1999)

Datenübertragung vom Scanner zum PC und zurück – Narayanan (30.07.1999)

Destruktor kehrt nicht zurück? – Daniel Zuppinger (24.07.1999)

Gute Idee – Pumb (12.07.1999)

PC-zu-HPUNIX-RS232-Kommunikation – L.Gnaneshwar (06.07.1999)

Danke!! – jj (30.06.1999)

Keine Paritäts- und Rahmenfehler – Hans-Peter von Boetticher (15.06.1999)

Wie ändern, wenn die Klasse eine Nachricht WM_COMM_RXCHAR sendet? – Philippe Rambourg (10.06.1999)

Verwenden Sie das Serial Communications OLE-Steuerelement von Microsoft – Michael Urvan (01.06.1999)

Kann es in einem OCX nicht zum Laufen bringen!?! – Bjarki (19.05.1999)

Das Beispiel konnte nicht erfolgreich erstellt werden. Können Sie mir helfen? – Larry (13.05.1999)

Wie sende ich mit dieser Klasse ein Break-Signal – Ramrocket (11.05.1999)

Was zum Teufel ist mit diesem Code los? – Timothy O’Connor (04.05.1999)

Probleme beim Erstellen einer Instanz der Klasse – Roland Fru (03.05.1999)

Modemkommunikation – Gyoung-rock Kim (26.04.1999)

Ich habe Fehlercodes – Orlando Alas (22.04.1999)

Probleme bei der Nutzung des Projekts! – Marcio Junges (17.04.1999)

Probleme mit Mehrfachzugriffen – Paul Martin (14.04.1999)

Die Download-Datei kann auch nicht entpackt werden – min ji (09.04.1999)

Herunterfahren während des Datenempfangs – Shawn (07.04.1999)

Fehler in WriteToPort – Jayant Umrani (02.04.1999)

Wie wäre es mit FlowControl? – Chris Z. (31.03.1999)

Wie kann ich RTS und DTR geltend machen? – Paul Martin (26.03.1999)

So ändern Sie es zur Verwendung in der Doc/View-Architektur – Dhanesh (22.03.1999)

Handshake mit RTS/CTS? – Jayant Umrani (20.03.1999)

Ich kann diese Klasse nicht verwenden – Olivier (19.03.1999)

Für Unicode ändern – David Laarakkers (11.03.1999)

Modem-Initialisierung und Handshaking – Padmanabhan Ganesan (11.03.1999)

Fehlerbehebung ?? – Dhanesh Ramachandram (10.03.1999)

Kann diese Klasse von Port1 zu Port2 kommunizieren? – Shahzad (06.03.1999)

Arbeit rund um den Hang – Jinhui (06.03.1999)

Auszeiten??? – Padmanabhan Ganesan (05.03.1999)

Sehr neue Frage – Brian Masuda (03.03.1999)

CArchive-kompatible Klasse? – Bill Foust (26.02.1999)

Letzte Korrektur für verlorene Daten (Ja, ja, ich finde…) – Chainard Arnaud (26.02.1999)

TAPI / Modem / COM / Init-Informationen – Seain B. Conover (24.02.1999)

Gute Arbeit ! – R. Schnell (24.02.1999)

Über moderne Datenkommunikation – Zhaohui Xing (23.02.1999)

Lösung für NT – Michel Wassink (23.02.1999)

Modem – Chida (22.02.1999)

Wie viele Ports konnten gelesen werden? – Clay Bearden (18.02.1999)

Böses Zeug im Kamals-Code – Roar Skinderviken (17.02.1999)

Hier gibt es Drachen 🙂 – Kamal (25.01.1999)

Serielle Kommunikation mit VCOMM – Sanjay Singh (25.01.1999)

Die Download-Datei (commtest.zip) kann nicht entpackt werden – Alan Copeland (21.01.1999)

WaitCommEvent() NT4-Problem – Dave Bryan (21.01.1999)

Eine Klasse für die serielle Schnittstelle – Frederik Fromm (21.01.1999)

Aktualisierte Klasse? – Crister T (14.01.1999)

Geänderter CSerialPort sendet beim Datenempfang immer noch keine Daten – Heiko Bergmann (30.11.1998)

NT-Probleme? – Carl Chipman (25.11.1998)

modifizierte CSerialPort-Klasse – Brian Koh (24.11.1998)

CSerialPort fährt nicht herunter, wenn noch Bytes empfangen werden?! – Detlef Schmicker (23.11.1998)

Modifizierter Destruktorcode – Brian Koh (22.11.1998)

Einige Probleme beim dauerhaften Datenempfang – KangBC (21.11.1998)

Probleme beim Lesen von Daten – Dennis Rivard (19.11.1998)

Hilfe beim Demoprojekt – Denis Breton (10.11.1998)

Mag es nicht, zweimal initiiert zu werden – Phil Christensen (25.10.1998)

Mögliche Timing-Probleme – David Hill (13.10.1998)

Ausgezeichneter serieller Port-Kurs – Steve Feng (02.10.1998)