mehrere COM Ports geleichzeitig auslesen



  • Halli hallo,

    ich habe mal wieder ein Problemchen und hoffe auf die Unterstützung durch Euch.

    Ich habe ein Programm geschrieben, bei dem ich mit der SerialPort.h bzw. SerialPort.cpp permanent einen COMPort auslesen kann. (->Monitoring). Nun stellt sich die Frage, wie ich aus dem gleichen Programm ganz nebenbei auch noch einen weiteren COMPort monitoren kann. Hat jemand Erfahrung mit der SerialPort.h gesammelt.

    Grüße

    Andera



  • Einfach eine zweite Instanz erzeugen...



  • Danke für die schnelle Antwort.

    Wie soll ich das verstehen? Neue Instanz?

    Kennst du die SerialPort.h?

    Danke

    Andrea



  • CSerial *pPort2 = new CSerial();
    

    (oder CSerialMFC, je nachdem was Du verwendest)



  • Um dir auch noch die Frage mit der Instanz zu beantworten:

    Den COM-PORT steuert deine Klasse welche in SerialPort.h definiert ist.

    Für den ersten COM-PORT hast du ja bereits eine Instanz (Objekt) dieser Klasse angelegt sonst könntest du nicht auf den Port zugreifen.
    Jochen hat dir nun gezeigt wie du noch eine Instanz der Klasse erstellst.
    Warum vielleicht diese Instanz anders asusieht als Deine erste liegt daran das diese Instanz auf dem HEAP angelegt wurde und nicht auf dem Stack.

    CSerial pPort1;
    CSerial *pPort2 = new CSerial();

    Jede Klasseninstanz ist dann für eine COM-PORT zuständig.
    Gegebenenfalls musst Du nun auch mit Threads arbeiten wenn Du beide Ports gleichzeitig abfragen willst.



  • Vielen herzlichen Dank,

    das mit den Instanzen habe ich jetzt glaub ich verstanden. Allerdings bekomme ich es trotzdem nicht hin, da vermutlich die Klasse es nicht zuläßt. Kann das sein?
    Oder hat vielleicht jemand ein passendes Beispiel? Bei mir im Code gibt es auch für den ersten COMport einen Thread. Allerdings bin ich mir nicht ganz sicher, was ich für zur Erweiterung auf einen weiteren COMport alles dublizieren bzw. umbenennen muss.
    Es wäre irgendwie ja schon schick, wenn das funktionieren würde. Später muss ich auch noch einen dritten Port ansteuern.
    Ich habe mir überlegt, vielleicht ist es einfach getrennte Programme zu schreiben und die Daten in eine Datenbank zu speichern. Eine weiteres Programm liest die Daten aus der Datenbank und visualisiert bzw. editiert diese.
    Bin aber noch immer für jeden Tipp über die COM´s dankbar.

    Herzliche Grüße

    andrea



  • Also, aus meiner Sicht müsste es funktionieren... kann gerade nix erkennen, was es verhindern sollte, wenn man zwei Instanzen erzeugt...



  • ich hab es noch ein weiteres mal versucht und siehe da, ich kann jetzt zwei comports monitoren. allerdings geschieht die noch ziemlich unregelmäßig. da aber die ankommenden daten von der formatierung her grundverschieden sind, kann ich diese irgendwie filtern.

    danke für eure bemühungen mit meinem problem.

    andrea grüßt die welt.



  • Der Com-Port wird doch mit der Msg mitgeschickt (WPARAM oder LPARAM)! Dann kannst Du doch die beiden auseinanderhalten...



  • sorry, aber das verstehe ich nicht.....
    ich habe heute fast den ganzen tag dafür geopfert. die funktion OnCommuniation enthält WPARAM und LPARAM. Diese heißen bei mir einmal ch und port. So!!
    ch untersuche ich nach ASCII-Zeichen (10=Line feed, 13=carriage return) und wenn dann eine 13 erscheint, dann kann ich die Daten aus meinem String verarbeiten.
    Aber ich weiß nicht, das Kind ist doch dann schon in den Brunnen gefallen? Allerdings bin ich mir da nicht 100% sicher. Vielleicht kannst du mir mal genauer erklären wie das läuft. Ich bin mir nicht ganz sicher, wie meine Funktion arbeitet. Habe die von einem anderen Projekt übernommen.

    Herzliche Grüße

    Andrea



  • Was für ein Brunnen?
    Was ist denn Dein Problem?
    Für jedes Zeichen wird "OnCommunication" aufgerufen. Und in "port" bekommst Du die Port-Nummer übergeben. Dann kannst Du doch entscheiden zu welchem Port es kommt...
    Verstehe Dein Problem nicht ganz 😕



  • Hi Jochen,

    vielen Dank für Deine Info´s. Mittlerweile habe ich es geschafft. die Daten anhand der Portnummer zu selektieren.

    Herzlichen Dank.

    Andrea


Log in to reply