Umstellung von USB auf RS232

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Umstellung von USB auf RS232

    Hi,

    ich bin ziemlich neu in der VB-Welt. Normalerweise programmiere ich PHP und ein bisschen C++ (für Mikrocontroller).
    Jedenfalls benötige ich für mein aktuelles Projekt ein Programm, das im 10 Min-Takt Befehle an ein Gerät sendet und die Antwort in eine Datei schreibt.
    Also gut, hingesetzt und solch ein kleines Programm geschrieben. Für die Schnittstelle verwende ich die SerialPort-Klasse (oder Methode?). Das senden mache ich mit SerialPort.write() das lesen mit SerialPort.readExisting(). Das alles funktioniert via USB (als Virutal COM-Schnittstelle) perfekt.
    Nun wollte ich das Programm mal mit der RS232-Schnittstelle (hat das Gerät auch) testen.
    Dazu habe ich ich das USB-Kabel ausgesteckt und das RS232-Kabel (gekreuzt) beim Gerät und am PC eingesteckt.
    Mit HTerm getestet: perfekt, es geht! (Baud: 9600, 8N1)

    An meinem Programm habe ich dann als Baudrate 9600 eingestellt und die richtige Schnittstelle.
    Bei den anderen Parametern (SerialPort) habe ich die Default-Werte so gelassen. 8N1 ist ja sowieso immer eingestellt, wobei die Parameter bei der USB-Verbindung eh keine Rolle spielen.

    Was habe ich festgestellt: Verdammt, das Programm funktioniert nicht richtig...
    Solange das Gerät nicht im Powerdown ist, funktioniert das senden und emempfangen, ist es im Powerdown bekomme ich ein ?. Also Befehl nicht verstanden.
    Wieder mit HTerm experimentiert und mal RTS und DTS deaktiviert. Siehe da, jetzt geht es auch da nicht, sobald das Gerät im Powerdown ist.
    Also habe ich in meinem Programm bei SerialPort DTS-/ RTS-Enabeled auf True gesetzt. Bei Handshake hab ich noch XONXOFF aktiviert. (Weil in der Bedienungsanleitung Flusskontrolle: XON/ XOFF steht).
    Klar, geht wieder nicht...

    Was muss ich bei SerialPort einstellen, damit auch die Kommunikation per RS232-Schnittstelle geht? Bzw. wie kommuniziert HTerm?/ Was ist da eingestellt? Oder hatte jemand mal das selbe Problem?

    Das ist das besagte Gerät (falls das helfen sollte): skypowerinternational.com/uplo…xMet-V1.01_eng_St0609.pdf

    Schonmal Danke für Eure Hilfe!

    Gruß....

    Ich0815 schrieb:

    Was muss ich bei SerialPort einstellen
    Willkommen im Forum. :thumbup:
    S. 27 des Dokuments: "8 data bits, no (none) parity, 1 stop bit, RS232 or RS485-4 Wire". Mehr nicht.
    Möglicherweise hat das Gerät mehrere Ports, von denen nimmst Du COM1.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi,

    danke für Deine Antwort.
    Ja, das Gerät hat mehrere COM-Ports. Die RS232 für Befehle ist momentan COM1. Da habe ich auch das gekreuzte Kabel angeschlossen.
    Mit HTerm (und den Einstellungen 9600, 8, N, 1) funktioniert das Auslesen ja prima, nur mit meinem Programm nicht.
    Ein Porgrammfehler ist auszuschließen, da es via USB ja auch geht.

    Bei der SerialPort-Klasse ist die richtige Achnittstelle vom PC und richtige Baudrate ausgewählt. Den Modus 8N1 habe ich dort auch ausgewählt.
    Ich denke, dass da noch irgendwas bei der Flusssteuerung fehlt. Weil wenn das Gerät nicht im Powerdown ist, geht alles.
    Wenn ich es im Powerdown aufwecke, empfange ich nur ein "?". Mit HTerm geht's aber wieder...

    Nächste Woche probiere ich nochmal ein bisschen etwas und melde mich dann.
    Vielleicht frage ich mal noch den Entwickler von HTerm ob der da noch was spezielles macht (in Sachen Flusskontrolle und so).

    Ich halte euch auf dem Laufenden.

    Grüße...
    @Eierlein Jou

    Ich0815 schrieb:

    da es via USB ja auch geht.
    Kannst Du ein anderes Kabel nehmen oder Deins mal iwo ausprobieren?
    Das Kabel muss gekreuzt sein (ein nicht gekreuztes wäre ein Verlängerungskabel).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn das Endgerät Hardware-Handshake erwartet, läuft es ausser Sync, wenn nur die Datenleitungen gekreuzt sind.
    Beschalte dein Kabel als echtes Nullmodem, so wie hier beschrieben.

    Du kannst auch Eierleins Tipp aus Post #4 versuchen (auf beiden Seiten), aber das betrügt die Schnittstelle und hat nichts mit echter Flusskontrolle zu tun.
    Es wird auch nur so lange funktionieren wie beide Geräte Online und schnell genug sind (oder über XON/XOFF synchronisiert werden).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,

    erst einmal sorry, dass ich mich erst jetzt wieder melde - leider komme ich erst jetzt dazu ein bisschen zu testen.

    @ Eierlein: Das kann ich mal versuchen, da ich das Kabel sowieso selbst gelötet habe ist es kein Problem diese Leitungen zu brücken.

    @ RodFromGermany: Wie schon oben geschrieben habe ich das Kabel selbst hergestellt/ gelötet. Ich habe alles mehrmals überprüft, die
    Datenleitungen sind sicher gekreuzt. Außerdem funktioniert die Übertragung mit HTerm ja (mit dem PC).

    @ us4711: In der Anleitung habe ich keinen Hinweis gefunden, dass USB und RS232 nicht gleichzeitig genutzt werden können. Sollte aber keine
    Rolle spielen, da gar kein USB-Kabel angeschlossen ist.

    @ petaod: Mhmm, das werde ich als nächstes mal testen. Wobei in der Anleitung steht nichts von Hardware-Handshake und so. Außerdem
    müssen laut Verdrahtungsplan nur die Datenleitungen gekreuzt werden. Aber es schadet nicht, dass mal zu testen.

    Ich habe noch etwas festgestellt:
    Es sieht fast so aus, als ob das Gerät ein Zeichen braucht, welches es aufweckt (XON?????).
    Wenn ich mein Programm so anpasse, dass ein Zeichen (egal welches) vor dem eigentlichen Befehl geschickt wird funktioniert mein Programm?!
    Richtig ist das so aber bestimmt nicht. Ohne das Aufweckzeichen geht es mit HTerm....

    Das Gerät schläft und wacht erst durch einen Befehl auf. Der Befehl wird aber dann nicht verstanden.
    Schicke ich ein beliebiges Zeichen vor dem eigentlichen Befehl wacht es auf und antwortet......

    Wenn ich bei der SerialPort-Klasse doch als Handshake XON/XOFF aktiviere kümmert sich die Klasse um das ganze Handshake-"Gedöns", oder?

    Gruß....

    Ich0815 schrieb:

    XON/XOFF
    Gugst Du hier.
    Xon = 11h, Xoff = 13h.
    Hab ich noch nicht verwendet. Wenn, dann sollte das so in der Beschreibung stehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    <p>Hi,</p>

    <p>&nbsp;</p>

    <p>Mist, ich habe einen Fehler entdeckt: ich hatte RTS- und DTS-Leitungen aktiviert, was ja in meinem Fall falsch ist, denn die sind gar nicht angeschlossen.</p>

    <p>Ich werde das Programm vor&uuml;bergehen so ab&auml;ndern, dass vor dem eigentlichen Befehl ein beliebiges Zeichen gesendet wird (dadurch wird das Ger&auml;t dann wach).&nbsp;</p>

    <p>XOn/ XOff dienen ja eh nur als &quot;Notbremse&quot; falls der Sende-/ Empfangsbuffer auf beiden Seiten mal fast &uuml;berlaufen sollte.&nbsp;</p>

    <p>Mit HTerm tut's jetzt komischerweise auch nicht mehr...</p>

    <p>Das ist halt das sch&ouml;ne an USB, einfach einstecken und es geht (in den meisten F&auml;llen :-))</p>

    <p>Falls ich dennoch eine bessere L&ouml;sung finde melde ich mich.</p>

    <p>&nbsp;</p>

    <p>Gru&szlig;...</p>