Heim / Bewertungen / Beschreibung des COM-Ports. Was ist ein COM-Port. Modem und COM-Port

Beschreibung des COM-Ports. Was ist ein COM-Port. Modem und COM-Port

In letzter Zeit ersetzt die serielle Methode der Datenübertragung die parallele.
Nach Beispielen muss man nicht lange suchen: Das Erscheinungsbild von USB- und SATA-Bussen spricht für sich.
In der Tat ist der parallele Bus schwer zu skalieren (längeres Kabel, höhere Bustaktrate), es ist nicht verwunderlich, dass sich die Technologien den parallelen Bussen im Hintergrund zuwenden.

Serielle Schnittstellen

Heute gibt es eine Vielzahl unterschiedlicher serieller Datenschnittstellen.
Neben den bereits erwähnten USB und SATA können wir uns auch an mindestens zwei bekannte RS-232- und MIDI-Standards (alias GamePort) erinnern.
Sie alle eint das Gleiche - die serielle Übertragung aller Informationen oder die serielle Schnittstelle.
Solche Schnittstellen haben sehr viele Vorteile, und der wichtigste von ihnen ist eine geringe Anzahl von Verbindungsdrähten und folglich ein niedrigerer Preis.

Datentransfer

Die serielle Kommunikation kann auf zwei Arten implementiert werden: asynchron und synchron.

Bei der synchronen Datenübertragung wird der Betrieb des Empfängers und des Senders synchronisiert, indem Taktinformationen in das übertragene Signal aufgenommen oder eine spezielle Synchronisationsleitung verwendet werden.
Empfänger und Sender müssen mit einem speziellen Synchronisationskabel verbunden werden, das dafür sorgt, dass die Geräte auf der gleichen Frequenz arbeiten.

Bei der asynchronen Übertragung werden spezielle Bits verwendet, die den Anfang und das Ende von Daten markieren – Startbits (logische Null) und Stoppbits (logische Eins).
Es ist auch möglich, ein spezielles Paritätsbit zu verwenden, das eine gerade oder ungerade Anzahl von übertragenen Einzelbits festlegt (je nach akzeptierter Konvention).
Auf der Empfängerseite wird dieses Bit ausgewertet und wenn das Paritätsbit nicht mit der Anzahl der Einzelbits übereinstimmt, wird das Datenpaket erneut gesendet.

Es ist erwähnenswert, dass Sie mit einer solchen Überprüfung einen Fehler nur erkennen können, wenn nur ein Bit falsch übertragen wurde. Wenn mehrere Bits falsch übertragen wurden, wird diese Überprüfung bereits fehlerhaft.
Das Senden des nächsten Datenpakets kann jederzeit nach dem Senden des Stoppbits erfolgen und muss natürlich mit dem Startbit beginnen.
Kann nichts verstehen?

Na wenn alles Computertechnologien wären einfach, dann hätte jede Hausfrau längst neue Protokolle parallel zu Knödeln gemeißelt ...
Versuchen wir, den Prozess auf eine andere Weise zu betrachten.
Daten werden in Paketen übertragen, ungefähr wie IP-Pakete, Informationsbits gehen mit den Daten einher, die Anzahl dieser Bits kann zwischen 2 und 3,5 variieren.
Und einhalb?!
Ja, Sie haben richtig gehört, mit einer Hälfte!

Das Stoppbit bzw. das dem Stoppbit entsprechende übertragene Signal kann eine Dauer haben, die länger ist als das Signal, das dem einen Bit entspricht, aber kürzer als zwei Bits.
Ein Paket beginnt also immer mit einem Startbit, das immer Null ist, gefolgt von Datenbits, dann einem Paritätsbit und dann einem Stoppbit, das immer Eins ist.
Dann, nach einer beliebigen Zeitspanne, setzt sich der Marsch der Beats auf Moskau fort.

Diese Übertragungsmethode impliziert, dass der Empfänger und der Sender mit der gleichen Geschwindigkeit arbeiten müssen (na ja, oder fast mit der gleichen Geschwindigkeit), da der Empfänger sonst entweder keine Zeit hat, die eingehenden Datenbits zu verarbeiten, oder das alte Bit für ein neues nimmt eins.
Um dies zu vermeiden, wird jedes Bit gestrobed, das heißt, es wird synchron mit einem speziellen Signal gesendet – einem im Gerät erzeugten „Strobe“.
Es gibt eine Reihe spezifischer Geschwindigkeiten für asynchrone Geräte – 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 und 115200 Bit pro Sekunde.

Sie haben wahrscheinlich gehört, dass „Baud“ als Maßeinheit für die Datenübertragungsrate verwendet wird - die Häufigkeit der Zustandsänderung der Leitung, und dieser Wert stimmt nur dann mit der Datenübertragungsrate überein, wenn das Signal einen von zwei Werten annehmen kann .
Wenn mehrere Bits in einem Signalwechsel kodiert werden (was bei vielen Modems der Fall ist), werden die Übertragungsrate und die Leitungswechselfrequenz völlig unterschiedliche Werte haben.

Nun noch ein paar Worte zum mysteriösen Begriff „Datenpaket“.
Unter dem Paket dieser Fall bezieht sich auf den Satz von Bits, die zwischen den Start- und Stoppbits übertragen werden.
Ihre Anzahl kann von fünf bis acht variieren.
Man könnte sich fragen, warum genau fünf bis acht Bits?
Warum nicht sofort, sagen wir, ein Kilobyte Daten innerhalb eines Pakets übertragen?

Die Antwort liegt auf der Hand: Bei der Übertragung kleiner Datenpakete verlieren wir vielleicht, indem wir drei Dienstbits mitschicken (50 bis 30 Prozent der Daten), aber wenn das Paket während der Übertragung beschädigt wird, können wir das leicht erkennen (erinnern Sie sich an die Paritätsbit?) und schnell wieder übertragen.
Aber in einem Kilobyte an Daten wird es schwierig sein, einen Fehler zu erkennen, und es wird viel schwieriger sein, ihn zu übertragen.

Ein Beispiel für ein asynchrones serielles Datenübertragungsgerät ist ein Computer-COM-Port, ein beliebtes von Trussardi entworfenes Modem und eine Maus, die an denselben Port angeschlossen ist, die aus irgendeinem Grund engstirnige Sekretärinnen immer versuchen, in PS / 2 zu schieben.
Alle diese Geräte arbeiten auf der RS-232-Schnittstelle bzw. auf deren asynchronem Teil, da der Standard auch eine synchrone Datenübertragung beschreibt.

AMD Radeon Software Adrenalin Edition Treiber 19.9.2 Optional

Der neue optionale Treiber AMD Radeon Software Adrenalin Edition 19.9.2 verbessert die Leistung in Borderlands 3 und fügt Unterstützung für Radeon Image Sharpening hinzu.

Kumulativ Windows Update 10 1903 KB4515384 (hinzugefügt)

Am 10. September 2019 hat Microsoft ein kumulatives Update für Windows 10 Version 1903 – KB4515384 – mit einer Reihe von Sicherheitsverbesserungen und einem Fix für einen fehlerhaften Fehler veröffentlicht Windows funktioniert Suche und verursachte eine hohe CPU-Auslastung.

Ein COM-Anschluss wird am häufigsten verwendet, um den Mikrocontroller mit einem Computer zu verbinden. In diesem Artikel zeigen wir, wie Sie Steuerbefehle von einem Computer senden und Daten von einem Controller senden.

Vorbereitung auf die Arbeit

Die meisten Mikrocontroller haben mehrere I/O-Ports. Für die Kommunikation mit einem PC ist das UART-Protokoll am besten geeignet. Es ist ein serielles asynchrones Datenübertragungsprotokoll. Um es in eine USB-Schnittstelle umzuwandeln, verfügt das Board über einen USB-RS232-Konverter - FT232RL.
Sie benötigen nur ein Arduino-kompatibles Board, um die Beispiele in diesem Artikel auszuführen. Wir gebrauchen . Stellen Sie sicher, dass Ihre Platine eine LED an Pin 13 und eine Reset-Taste hat.

Lassen Sie uns zum Beispiel einen Code auf das Board hochladen, der eine ASCII-Tabelle anzeigt. ASCII ist eine Kodierung zur Darstellung von Dezimalziffern, dem lateinischen und nationalen Alphabet, Satzzeichen und Steuerzeichen.

int symbol = 33 ; void setup() ( Serial. begin(9600 ) ; Serial. println(" ASCII Table ~ Character Map " ) ; ) void loop() ( Serial. write(symbol) ; Serial. print(" , dec: " ) ; Serial .print(symbol) ; Serial.print(" , hex: " ) ; Serial.print(symbol, HEX) ; Serial.print(" , oct: " ) ; Serial.print(symbol, OCT) ; Serial.print( " , bin: " ) ; Serial.println(symbol, BIN) ; if (symbol == 126 ) ( while (true) ( ​​​​fortfahren ; ) ) symbol+ + ; )

Die Symbolvariable speichert den Symbolcode. Die Tabelle beginnt bei 33 und endet bei 126, daher ist das Symbol anfänglich auf 33 gesetzt.
Verwenden Sie die Funktion, um den Betrieb des UART-Ports zu starten Serial.begin(). Sein einziger Parameter ist die Geschwindigkeit. Die Geschwindigkeit muss auf Sende- und Empfangsseite vorab ausgehandelt werden, da das Übertragungsprotokoll asynchron ist. In diesem Beispiel beträgt die Geschwindigkeit 9600 bps.
Drei Funktionen werden verwendet, um einen Wert auf einen Port zu schreiben:

  1. Serial.write ()– schreibt Daten in binärer Form auf den Port.
  2. Serial.print() kann viele Werte haben, aber alle dienen dazu, Informationen in menschenfreundlicher Form darzustellen. Wenn beispielsweise die als zu übergebender Parameter angegebenen Informationen in Anführungszeichen eingeschlossen sind, zeigt das Terminalprogramm sie unverändert an. Wenn Sie einen Wert in anzeigen möchten bestimmtes System Kalkül, dann müssen Sie ein Dienstwort hinzufügen: BIN-binär, OCT - oktal, DEC - dezimal, HEX - hexadezimal. Zum Beispiel, Serial.print (25, HEX).
  3. Serial.println() macht das gleiche wie Serial.print(), übersetzt die Zeichenfolge jedoch nach dem Anzeigen der Informationen.

Um den Betrieb des Programms zu überprüfen, muss der Computer über ein Terminalprogramm verfügen, das Daten vom COM-Port empfängt. IN Arduino-IDE schon eingebaut. Um es aufzurufen, wählen Sie Tools->Port Monitor aus dem Menü. Das Fenster dieses Dienstprogramms ist sehr einfach:

Klicken Sie nun auf die Neustart-Schaltfläche. Der MK startet neu und zeigt die ASCII-Tabelle an:

Achten Sie auf diesen Teil des Codes:

if (symbol = = 126 ) ( while (true) ( ​​​​fortfahren ; ) )

Es stoppt die Ausführung des Programms. Wenn Sie es ausschließen, wird die Tabelle unbegrenzt angezeigt.
Um das erworbene Wissen zu festigen, versuchen Sie, eine Endlosschleife zu schreiben, die Ihren Namen einmal pro Sekunde an die serielle Schnittstelle sendet. Fügen Sie der Ausgabe Schrittnummern hinzu und vergessen Sie nicht, die Zeile nach dem Namen zu übersetzen.

Senden von Befehlen vom PC

Bevor Sie dies tun, müssen Sie sich ein Bild davon machen, wie ein COM-Port funktioniert.
Zunächst erfolgt der gesamte Austausch über den Speicherpuffer. Das heißt, wenn Sie etwas von einem PC an ein Gerät senden, werden die Daten in einem speziellen Abschnitt des Speichers abgelegt. Sobald das Gerät bereit ist, liest es die Daten aus dem Puffer. Mit der Funktion können Sie den Zustand des Puffers überprüfen serial.verfügbar (). Diese Funktion gibt die Anzahl der Bytes im Puffer zurück. Um diese Bytes zu subtrahieren, müssen Sie die Funktion verwenden Serial.read(). Sehen wir uns anhand eines Beispiels an, wie diese Funktionen funktionieren:

int val = 0 ; void setup() ( Serial. begin(9600 ) ; ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; Serial. print(" I Received: " ) ; Serial. schreiben (Wert); Serial.println (); ) )

Nachdem der Code in den Speicher des Mikrocontrollers geladen wurde, öffnen Sie den COM-Port-Monitor. Geben Sie ein Zeichen ein und drücken Sie die Eingabetaste. Im empfangenen Datenfeld sehen Sie: „Ich habe: X erhalten“, wo statt X wird das eingegebene Zeichen sein.
Das Programm dreht sich endlos in der Hauptschleife. In dem Moment, in dem ein Byte auf den Port geschrieben wird, nimmt die Funktion Serial.available() den Wert 1 an, dh die Bedingung ist erfüllt Serial.verfügbar() > 0. Nächste Funktion Serial.read() liest dieses Byte und löscht dadurch den Puffer. Danach erfolgt die Ausgabe mit den Ihnen bereits bekannten Funktionen.
Die Verwendung des integrierten COM-Port-Monitors der Arduino IDE hat einige Einschränkungen. Beim Senden von Daten von der Karte an den COM-Port kann die Ausgabe in einem beliebigen Format organisiert werden. Und beim Senden vom PC zum Board erfolgt die Übertragung der Zeichen gemäß der ASCII-Tabelle. Das heißt, wenn Sie beispielsweise das Zeichen „1“ eingeben, wird die Binärzahl „00110001“ (also dezimal „49“) über den COM-Port gesendet.
Lassen Sie uns den Code ein wenig ändern und diese Aussage überprüfen:

int val = 0 ; void setup() ( Serial. begin(9600 ) ; ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; Serial. print(" I Received: " ) ; Serial. println(val, BIN) ; ) )

Nach dem Download sehen Sie im Portmonitor beim Senden von „1“ als Antwort: „Ich habe erhalten: 110001“. Sie können das Ausgabeformat ändern und sehen, was das Board mit anderen Zeichen akzeptiert.

Gerätesteuerung über COM-Port

Natürlich können Sie durch Befehle von einem PC alle Funktionen des Mikrocontrollers steuern. Laden Sie das Programm herunter Arbeit verwalten LED:

int val = 0 ; void setup() ( Serial. begin(9600 ) ; ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; if (val= = "H" ) digitalWrite(13 , HIGH) ; if (val= = "L" ) digitalWrite(13 , LOW) ; ) )

Beim Senden des Zeichens „H“ an den COM-Port leuchtet die LED am 13. Ausgang, beim Senden des „L“ erlischt die LED.
Wenn Sie basierend auf den Ergebnissen des Datenempfangs vom COM-Anschluss möchten, dass das Programm verschiedene Aktionen in der Hauptschleife ausführt, können Sie die Bedingungen in der Hauptschleife überprüfen. Zum Beispiel.

Ein COM-Port oder serieller Port ist eine bidirektionale serielle Schnittstelle, die für den Austausch von Byte-Daten ausgelegt ist. Dieser Port wurde zunächst für den Anschluss des Terminals und dann für Modem und Maus verwendet. Heutzutage ist es üblich, es sowohl zur Verbindung der Quelle als auch zur Kommunikation mit der Verarbeitung eingebetteter Computersysteme zu verwenden.

Verwendung

Bevor wir also ausführlicher darüber sprechen, was ein COM-Port ist, müssen wir in die Vergangenheit blicken, um seine Bedeutung zu verstehen. Vor buchstäblich 15 Jahren wurde eine Methode verwendet, um Geräte über einen speziellen Standardanschluss auf der Rückseite an einen Computer anzuschließen. Systemblock mit einem speziellen seriellen RS-232-Kabel. Dieses Verfahren hat viele Nachteile. Ein solches Kabel bietet nach modernen Maßstäben eine extrem niedrige Datenübertragungsrate - etwa hundert Kilobit pro Sekunde. Zusätzlich zum Herstellen der physischen Verbindung der Steckverbinder mussten die Geräte ausgeschaltet werden, und sie selbst wurden mit Schrauben aneinander befestigt, die die Zuverlässigkeit gewährleisteten, während sich ihre Abmessungen in beträchtlicher Größe unterschieden.

Ein bisschen Geschichte

Der COM-Port auf Computern dieser Zeit wurde traditionell mit 1 oder 2 nummeriert, da es normalerweise nicht mehr als zwei davon gab. Zusätzliche Ports können bei Bedarf installiert werden. Wenn der Benutzer konfiguriert hat Software, war es erforderlich, genau denjenigen, zu dem die Verbindung bereitgestellt wurde, nicht zu verwechseln und korrekt zu installieren notwendige Ausrüstung. Jeder COM-Port erforderte die richtigen Geschwindigkeitseinstellungen sowie eine Reihe anderer mysteriöser Parameter, die nur einem engen Kreis von Spezialisten bekannt waren. Damit die Verbindung der Geräte erfolgreich war, mussten alle notwendigen Parameter irgendwo herausgefunden oder experimentell ausgewählt werden, da es in diesem Fall keine automatische Konfiguration gab. Darüber hinaus erlaubte die Verbindung über den COM-Port die Verbindung beliebiger Software mit beliebigen externen Geräten, sogar völlig inkompatiblen, was zu einer Vielzahl von Fehlern während des Einstellungsprozesses führte.

Modernität

Jetzt wird die Verbindung über den COM-Port komplett durch mehr ersetzt moderne Methode, für dessen Implementierung keine besonderen Kenntnisse erforderlich sind, nämlich über einen USB-Anschluss. Dieses Verfahren ist frei von allen zuvor erwähnten Nachteilen. Moderne Standards für die Kompatibilität zum Anschluss aller Arten von GPS-Geräten und sehr heterogener Software haben sich jedoch schon vor langer Zeit um das derzeit archaisch gewordene Konzept der COM-Ports gebildet.

Dies liegt daran, dass anfangs fast alle Geräte, einschließlich GPS, extern waren und ihre Verbindung zum Computer über ein serielles Kabel hergestellt wurde, das an einen der Hardwareanschlüsse angeschlossen war. Während des Konfigurationsprozesses musste der Benutzer die Portnummer und die Geschwindigkeit der Datenübertragung darüber korrekt auswählen. Damals entstand der Hauptstandard für die Übertragung von Daten von einem GPS-Empfänger zu einem Programm, das heute NMEA-0183 heißt. Tatsächlich verlangt dieser Standard von allen Entwicklern selbst modernster Hard- und Software den Datenaustausch über COM-Ports. Und das alles unter den Bedingungen von moderne Computer, sowie auf PDAs, ist der USB-Standard seit langem der Hauptstandard. Hinzu kommt, dass GPS-Empfänger neuerdings vermehrt direkt im Gerätegehäuse verbaut werden, also kein Verbindungskabel zwischen diesem und dem Hauptgerät liegt.

Virtuelle COM-Ports

Ein Ausweg wurde erfunden, nämlich "virtuelle" COM-Ports wurden entwickelt. Es stellt sich heraus, dass das interne Gerät des PDAs, beispielsweise ein GPS-Empfänger, softwaremäßig in Form eines COM-Ports simuliert wird, während es hardwareseitig keines ist. Gleichzeitig macht es für ein Programm, das für eine Schnittstelle über einen solchen Standard ausgelegt ist, keinen Unterschied, wie es implementiert wird. Hier ist das Vorhandensein einer virtuellen Simulation erlaubt und nicht das obligatorische Vorhandensein einer Hardwareimplementierung. So ist es möglich, die Kompatibilität von GPS-Programmen alten Stils mit modernen Geräten sicherzustellen.

Änderungen vorgenommen

Gleichzeitig hat sich die Verwaltung des COM-Ports nicht wesentlich geändert. Der Benutzer muss in der alten Manier komplexe Einstellungen fast manuell vornehmen. Ein moderner COM-Port ist jedoch nicht mehr das sperrige Gerät, das sich auf der Rückseite der Systemeinheit befindet, sondern ein völlig anderes Gerät. Und hier ist der springende Punkt, dass aus Software-Sicht alle ihre Implementierungen gesichtslos aussehen, das heißt, es gibt keinen Unterschied zwischen virtuellen und realen Ports. Bei Software unterscheiden sich die Ports nur durch die von den PDA-Herstellern völlig willkürlich vergebenen Nummern. Beispielsweise befindet sich der ASUS-Empfänger normalerweise auf COM5, während PocketLOOX 560 den Empfänger auf COM8 anzeigt. Es stellt sich heraus, dass ein Programm, das Daten von einem GPS-Empfänger empfangen möchte, zunächst keine verlässliche Information über die Bedingungsnummer hat, unter der der Port erscheint, der passend für den Empfänger auf diesem PDA vorgeschrieben ist.

Wie funktioniert das alles?

Da dies unter allen verfügbaren COM-Ports möglich ist automatische Suche geeignet, das Verfahren für eine solche Erhebung ist eher unzuverlässig und ziemlich umständlich. Dies liegt daran, dass die im System als COM-Ports angezeigten Geräte sehr unterschiedlich sein können und nichts mit GPS zu tun haben, sie können völlig unvorhersehbar auf eine solche Umfrage reagieren. Beispielsweise gibt es auf einem PDA Ports, die mit einem internen Mobilfunkmodem, mit USB, mit einem Infrarotport sowie mit anderen Elementen verbunden sind. Der Zugriff auf sie durch ein Programm, das für die Arbeit mit einem bestimmten Gerät ausgelegt ist, kann zu einer völlig unvorhersehbaren Reaktion sowie zu verschiedenen Fehlfunktionen führen, die häufig zum Einfrieren des PDA führen. Deshalb kann der Versuch, einen COM-Port zu öffnen, zu unerwarteten Situationen führen, bis hin zum Einschalten von Bluetooth oder Und es kann noch unverständlichere Fälle geben.

COM-Port-Betrieb

Für COM-Ports wird als Basis ein asynchroner Universal-Transceiver-Chip verwendet. Diese Mikroschaltung existiert in mehreren Varianten: Intel 16550A, 16550, 16450, 8250. Für jeden COM-Port enthält sie Datenempfänger- und Senderregister sowie eine Reihe von Steuerregistern, auf die über BIOS-, Windows- und MS-DOS-Programme zugegriffen werden kann. Bei letzte Version Microchip verfügt über eine Reihe von Puffern zur temporären Speicherung von gesendeten und empfangenen Daten. Dank dieser Möglichkeit ist es möglich, die Arbeit des Zentralprozessors seltener zu unterbrechen und die Geschwindigkeit der Datenübertragung zu koordinieren.

Haupteinstellungen

Das COM-Port-Gerät nimmt die folgenden charakteristischen Merkmale an:

Die Basisadresse des Ports für die Eingabe und Ausgabe von Informationen;

Hardware-Interrupt-Nummern;

Die Größe eines Informationsblocks;

Die Geschwindigkeit, mit der Daten übertragen werden;

Ehrlichkeitserkennungsmodus;

Verfahren zur Verwaltung des Informationsflusses;

Die Anzahl der Stoppbits.

Wie überprüfe ich den COM-Port des Computers? Was ist zu beachten?

Wie bereits erwähnt, handelt es sich bei diesem Porttyp um eine bidirektionale Schnittstelle für einen seriellen Weg auf Bitebene. Eine Besonderheit gegenüber dem Parallelport ist hier die bitweise Übertragung der Daten. Die Anatomie eines COM-Anschlusses ist so, dass er nicht der einzige an einem Computer ist, der eine serielle Datenübertragungsmethode verwendet. Ein ähnliches Prinzip verwenden beispielsweise auch Schnittstellen wie Ethernet oder USB, allerdings ist es historisch so üblich, den Port des RS232-Standards seriell zu nennen.

Sehr oft ist es erforderlich, einen COM-Port zur Reparatur und Diagnose eines Computers zu öffnen und gleichzeitig auf Funktionsfähigkeit zu prüfen. Es ist sehr einfach, ein Element zu verbrennen. Meistens geschieht dies aufgrund des Verschuldens des Benutzers, der das Gerät falsch trennt und den Stecker herauszieht, während die Schnittstelle angeschlossen ist. Der einfachste Weg, um zu überprüfen, ob die Schnittstelle funktioniert, besteht darin, eine Maus daran anzuschließen. Es ist jedoch so schwierig, sich ein vollständiges Bild zu machen, da der Manipulator nur die Hälfte der von acht verfügbaren Signalleitungen verwendet. Nur die Verwendung eines speziellen Steckers und Programms ermöglicht eine Funktionsprüfung. Für diese Zwecke gibt es bereits eine speziell entwickelte Software.

Serielle Ports werden von Entwicklern wegen ihrer einfachen Wartung und Verwendung geliebt.

Und natürlich ist das Schreiben auf die Konsole des Terminalprogramms alles gut, aber ich möchte meine eigene Anwendung, die durch Drücken einer Taste auf dem Bildschirm die gewünschten Aktionen ausführt;)

In diesem Artikel werde ich beschreiben wie man damit arbeitet COM-Port in C++.

Die Lösung ist einfach, aber aus irgendeinem Grund wurde nicht sofort ein funktionierendes Beispiel gefunden. Für sim speichere ich es hier.

Natürlich können Sie plattformübergreifende Lösungen wie QSerial verwenden - eine Bibliothek in Qt, werde ich wahrscheinlich, aber in Zukunft. Jetzt sprechen wir über "reines" Windows C++. Wir werden in Visual Studio schreiben. Ich habe 2010, obwohl das keine Rolle spielt ...

Erstellen Sie ein neues Win32-Konsolenprojekt.

Header-Dateien einbinden:

#enthalten #enthalten mit Namensraum std;

Wir deklarieren einen Com-Port-Handler:

GRIFF hSerial;

Ich mache es global, damit ich mir keine Gedanken über Zeiger machen muss, wenn ich es an Funktionen übergebe.

int _tmain(int argc, _TCHAR* argv) (

Ich kann den Windows-Stil der Programmierung nicht ausstehen. Sie nannten alles auf ihre Weise und saßen jubelnd da ...

Jetzt die Magie, eine Zeichenfolge mit dem Portnamen zu deklarieren. Die Sache ist, dass es nicht in der Lage ist, char selbst umzuwandeln.

LPCTSTR sPortName = L"COM1";

Das Arbeiten mit seriellen Schnittstellen in Windows funktioniert wie mit einer Datei. Erster öffnen COM-Port zum Schreiben/Lesen:

HSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

Überprüfung der Funktionalität:

If(hSerial==INVALID_HANDLE_VALUE) ( if(GetLastError()==ERROR_FILE_NOT_FOUND) ( cout<< "serial port does not exist.\n"; } cout << "some other error occurred.\n"; }

Jetzt müssen Sie die Verbindungsparameter konfigurieren:

DCB dcbSerialParams = (0); dcbSerialParams.DCBlength=sizeof(dcbSerialParams); if (!GetCommState(hSerial, &dcbSerialParams)) ( cout<< "getting state error\n"; } dcbSerialParams.BaudRate=CBR_9600; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; if(!SetCommState(hSerial, &dcbSerialParams)) { cout << "error setting serial port state\n"; }

Bei msdn wird empfohlen, zuerst die Parameter abzurufen und sie dann zu ändern. Wir lernen immer noch, also tun wir, was verlangt wird.

Lassen Sie uns nun den String deklarieren, den wir übergeben werden, und die dafür erforderlichen Variablen:

Char data = "Hallo von C++"; // String zum Übergeben von DWORD dwSize = sizeof(data); // Größe dieses Strings DWORD dwBytesWritten; // Hier wird die Anzahl der tatsächlich übertragenen Bytes angezeigt

Senden einer Zeichenfolge. Ich möchte Sie daran erinnern, dass das Beispiel das einfachste ist, daher mache ich keine besonderen Prüfungen:

BOOL iRet = WriteFile(hSerial,data,dwSize,&dwBytesWritten,NULL);

Ich habe mich auch entschieden, die Zeichenfolgengröße und die Anzahl der an die Steuerung gesendeten Bytes anzuzeigen:

Cout<< dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl;

Am Ende des Programms machen wir eine Endlosschleife aus Lesedaten:

While(1) ( ReadCOM(); ) Rückgabe 0; )

Nun die Lesefunktion:

Void ReadCOM() ( DWORD iSize; char sReceivedChar; while (true) ( ​​​​ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0); // 1 Byte erhalten, wenn (iSize > 0) // cout ausgeben, wenn etwas empfangen wird<< sReceivedChar; } }

Das ist eigentlich das ganze Beispiel.

Beim Rechnen ist ein serieller Port eine serielle Kommunikationsschnittstelle, über die Informationen gleichzeitig übertragen oder ausgegeben werden. Während des größten Teils der Geschichte von PCs wurden Daten über serielle Ports an Geräte wie Modems, Terminals und verschiedene Peripheriegeräte übertragen.

Während Schnittstellen wie Ethernet, FireWire und USB alle Daten als seriellen Stream senden, bezeichnet der Begriff „serielle Schnittstelle“ normalerweise Hardware, die mehr oder weniger dem RS-232-Standard entspricht und für die Verbindung mit einem Modem oder einem ähnlichen Kommunikationsgerät ausgelegt ist.

Moderne Computer ohne serielle Anschlüsse benötigen möglicherweise serielle Konverter, um die Kompatibilität mit seriellen RS-232-Geräten sicherzustellen. Serielle Ports werden immer noch in Anwendungen wie industriellen Automatisierungssystemen, wissenschaftlichen Instrumenten, Point-of-Sale-Systemen und einigen Industrie- und Verbraucherprodukten verwendet. Servercomputer können den seriellen Anschluss als Verwaltungs- oder Diagnosekonsole verwenden. Netzwerkgeräte (wie Router und Switches) verwenden häufig die serielle Konsole zur Konfiguration. In diesen Bereichen werden weiterhin serielle Ports verwendet, weil sie einfach und billig sind und ihre Konsolenfunktionen hochgradig standardisiert und weit verbreitet sind.

Pinbelegung des COM-Anschlusses (RS232)

Es gibt 2 Arten von COM-Ports, einen 25-poligen alten Stecker und einen neueren 9-poligen Stecker, der ihn ersetzt hat.

Unten ist ein Diagramm eines typischen 9-poligen RS232-Standardsteckers mit Anschlüssen, dieser Steckertyp wird auch als DB9-Stecker bezeichnet.

  1. Trägererkennung (DCD).
  2. Daten empfangen (RXD).
  3. Datenübertragung (TXD).
  4. Austauschbereiter Empfänger (DTR).
  5. Masse (GND).
  6. Quelle bereit zum Austausch (DSR).
  7. Anfrage zum Senden (RTS).
  8. Bereit zur Übertragung (CTS).
  9. Rufsignal (RI).

RJ-45 zu DB-9 Serial Port Adapter Pin-Informationen für Switch

Der Konsolenanschluss ist eine serielle RS-232-Schnittstelle, die einen RJ-45-Anschluss verwendet, um eine Verbindung zu einem Steuergerät wie einem PC oder Laptop herzustellen. Wenn Ihr Laptop oder PC keinen DB-9-Anschlussstift hat und Sie Ihren Laptop oder PC an den Switch anschließen möchten, verwenden Sie eine Kombination aus RJ-45- und DB-9-Adapter.

DB-9RJ-45
Daten abrufen2 3
Datentransfer3 6
Bereitschaft zum Austausch4 7
Erde5 5
Erde5 4
Bereitschaft zum Austausch6 2
Transferanforderung7 8
Übertragung bereit8 1

Kabelfarben:

1 Schwarz
2 Braun
3 Rot
4 Orange
5 Gelb
6 Grün
7 Blau
8 Grau (oder Weiß)