Hallo, ich möchte für Testzwecke ein Gerät über eine serielle Schnittstelle steuern. Die Schnittstelle ist bereits konfiguriert. Mir stellt sich dabei jedoch folgende Frage: Als Befehl zu dem Gerät soll Beispielsweise der Befehl ! T R D CR übermittelt werden, wobei CR für carriage return steht und das Fragezeichen dem Gerät sagt, dass die Nachfolgenden Zeichen ein Befehl sind, welcher das besagte Gerät einschalten soll. Nun zur Frage: Kann ich diesen Befehl einfach in ein Array schreiben und diesen an das Gerät senden? Oder muss ich dabei noch etwas beachten? Viele Grüße
m.s. schrieb: > Als Befehl zu dem Gerät soll Beispielsweise der Befehl > ! T R D CR übermittelt werden, wobei CR für carriage return steht und > das Fragezeichen dem Gerät sagt, dass die Nachfolgenden Zeichen ein > Befehl sind, welcher das besagte Gerät einschalten soll. Da ist kein Fragezeichen. > Nun zur Frage: > Kann ich diesen Befehl einfach in ein Array schreiben und diesen an das > Gerät senden? > Oder muss ich dabei noch etwas beachten? Versuch's erst mal mit einem Terminalprogramm (z.B. Hterm). Prinzipiell geht es aber, wie du es vorhast.
STK500-Besitzer schrieb: > Da ist kein Fragezeichen. Ausrufezeichen, Sorry! Wenn dies so funktioniert wäre die Frage, wie ich eine Baudrate von 500.000 einstellen kann. Im Gerätemanager kriege ich nur 460.000 hin. Wahrscheinlich reicht es nicht, wenn im Programm selbst 500.000 als Baudrate definiert ist, richtig? Wie stelle ich diese ein?
>..wie ich eine Baudrate von 500.000 einstellen kann..
Nimm eine Baudrate von 115200. Das ist die höchste Baudrate die in der
Regel von allen Geräten unterstütz wird und für eine Command-Shell ist's
bei weitem schnell genug.
Mike schrieb: > Nimm eine Baudrate von 115200. Hallo Mike, im Geräte-Manager von Windows ist die höchste Wählbare Baudrate 921600. Sollte ich diese wählen? Es wird aber darauf hingewiesen, dass das Gerät explizit eine Baudrate von 500.000 haben soll.
Klingt so, als ob sein Gerät schon auf 500baud steht. Das sollte aber z.b. mit einem FTDI USB-Seriell Wandler kein Problem sein. Einfach im Terminslprogramm einstellen, z.b. HTERM kann da auch frei konfiguriert werden. Windows Einstellungen sind zumindest für virtuelle com Ports schnurz.
m.s. schrieb: > Als Befehl zu dem Gerät soll Beispielsweise der Befehl > ! T R D CR übermittelt werden, wobei CR für carriage return steht und > das Fragezeichen dem Gerät sagt, dass die Nachfolgenden Zeichen ein > Befehl sind, welcher das besagte Gerät einschalten soll. Ich glaube aber nicht, daß zwischen zwei Zeichen jeweils ein Leerzeichen sein muß...
Oleg schrieb: > Ich glaube aber nicht, daß zwischen zwei Zeichen jeweils ein Leerzeichen > sein muß... Das war nur so geschrieben, um zu verdeutlichen, dass CR zusammenhängt. Ich habe mit QT jetzt folgendes gemacht: Initialisierung:
1 | QSerialPort serial; |
2 | serial.setPortName("COM3"); |
3 | serial.open(QSerialPort::ReadWrite); |
4 | serial.setBaudRate(500000); |
5 | serial.setParity(QSerialPort::NoParity); |
6 | serial.setDataBits(QSerialPort::Data8); |
7 | serial.setStopBits(QSerialPort::OneStop); |
8 | serial.setFlowControl(QSerialPort::NoFlowControl); |
Kann man die Baudrate so einfach auf 500.000 setzen? Es gibt beim compilieren kein Problem, aber das Programm funktioniert nicht. Verbindung:
1 | if (serial.isOpen() && serial.isWritable()){ |
2 | |
3 | |
4 | serial.write("?TRd\r"); |
5 | const QString data2 = serial.readAll(); |
6 | qDebug() << data2; |
7 | |
8 | |
9 | qDebug() << "Erfolgreich" << endl; |
10 | }else |
11 | {
|
12 | qDebug() << "Fehler" << endl; |
13 | }
|
Ich komme zwar soweit, dass das innere der If-Abfrage erreicht wird, allerdings bekomme ich eine leere qDebug Ausgabe, obwohl eigentlich etwas Empfangen werden sollte. Die COM-Port Nummer ist richtig und die Treiber sind ebenfalls richtig installiert. Das Gerät benötigt leider zwingend 500.000 baud. Verbunden ist es über einen normalen USB-Stecker. Hat jemand eine Idee, wo der Fehler liegen könnte?
m.s. schrieb: > Hat jemand eine Idee, wo der Fehler liegen könnte? weder mit hterm noch mit hyperterminal kann ich unter windowsXP oder win7 500k wählen aber Beitrag "Re: Hterm 1M Baud" oder wird man wohl zu Fuss programmieren müssen. https://github.com/stephane/libmodbus/pull/227/commits/a87fd7815fa5c76d1a4b007f246e9176ae23075e
m.s. schrieb: > Hat jemand eine Idee, wo der Fehler liegen könnte? Am ? oder ist es ein ! Kommt in jedem Fall eine Antwort?
Dirk B. schrieb: > Kommt in jedem Fall eine Antwort? Ja, es soll in jedem Fall eine Antwort kommen. Das ! ist ein Befehl, auf welchen eine Bestätigung folgt. Das ? ist eine Abfrage, auf welche eine Antwort kommt. Rufus Τ. F. schrieb: > Das ist mindestens ungewöhnlich. Leider ja.
Joachim B. schrieb: > weder mit hterm Das dachte ich damals auch. Bei htem (vom Hammer...) einfach eine Verbindung öffnen und die Wunschbaudrate in die Baudraten-Dropdown-Liste eintragen - geht.
STK500-Besitzer schrieb: > Bei htem (vom Hammer...) einfach eine Verbindung öffnen und die > Wunschbaudrate in die Baudraten-Dropdown-Liste eintragen - geht. schrieb ich ja Toralf W. schrieb: > in HTerm kannst auch 1 MHz einstellen, einfach nicht die Auswahlbox > nehmen, sonder per Hand dort eintragen was Du brauchst / willst, das > geht. Joachim B. schrieb: > aber > Beitrag "Re: Hterm 1M Baud"
> kann man die Baudrate so einfach auf 500.000 setzen? Es gibt beim > compilieren kein Problem, aber das Programm funktioniert nicht. Man..immer die Leute mit der Gnade der spaeten Geburt. :-) Urspruenglich wurden in einem PC diverse Uart verwendet (z.B 16450) die haben ihre Baudrate durch das runterteilen von einer Quarzfrequenz erzeugt. Und aehnliches galt auf immer fuer die Gegenstelle im Mikrocontroller. Deshalb haben auch nur so krumme Baudrate von 1200,2400....115200 funktioniert. Die Hardware kann einfach nichts anderes! Bei USB-RS232 Wandler kann das anders aussehen. Es gibt ja garkeine Baudrate bei der Verbindung PC-nach USB-Wandler. Die Baudrate wird erst im USB-RS232 Baustein neu erzeugt. Und da gibt es welche die koennen dann vollkommen beliebige Baudraten. (rationale Teiler) Die ueblichen FTDI gehoeren dazu. Aber das kann laengst nicht jeder Baustein! Moderne Microcontroller koennen das dann auch. Jetzt muss man dem Wandler aber auch noch seine ungewoehnliche Baudrate mitteilen koennen. Da ist dann leider mal Windows im Vorteil. Dort wird die Baudrate direkt als Zahl uebergeben. Wenn das Terminalprogramm selbst die Eingabe von 1234Baud unterstuetzt dann funktioniert es. Hterm gehoert zu den Programmen wo es funktioniert. Bei Linux sieht das etwas anderes aus. Da gibt es fuer die Baudraten spezielle Defines. Das sind dann ungewoehnliche Baudraten erstmal nicht vorgesehen und auch nicht moeglich. Allerdings wurde das Interface mal irgendwann erweitert und es gibt da einen ungewoehnlichen Weg der Port doch eine andere Baudarte mitzuteilen. Ich hab mal vor ein paar Jahren mein minicom fuer 250000Baud gepatcht. Da geht es also auch. Grundvoraussetzung ist aber immer das de USB-RS232 Wandler das koennen muss! Olaf
m.s. schrieb: > const QString data2 = serial.readAll(); readALL() wartet bis ein CR kommt, oder will es ein LF/CR. Oder gibt es einfach den akktuellen Empfangsbuffer zurück? Sendet das Gerät Oberhaupt CR oder LF? Sende einfach mal das Kommando und lasse dir alle Byte anzeigen die dir das Gerät zurück sendet. Bei deinem Code siehst du überhaupt nicht was da passiert.
m.s. schrieb: > Das Gerät benötigt leider zwingend 500.000 baud. Verbunden ist es über > einen normalen USB-Stecker. Irgend etwas stimmt nicht. Bitte Gerät angeben (Datenblatt, Foto, ...). Wie sind denn die anderen Daten der Schnittstelle? Ob die eingestellte baudrate stimmt, mit Oszi oder Stoppuhr messen (Led dran, 100Mb-file per copy übertragen, Zeit stoppen, rechnen)
m.s. schrieb: > Hat jemand eine Idee, wo der Fehler liegen könnte? Evtl. am "kleinen d" in "?TRd\n" (Initialer Post: "!TRD\n")?
"\n" ist aber nicht CR, sondern "newline". Ich würde es mit "\r" versuchen. Mal mit beiden Kombinationen "\r\n", usw. mit "wem" musst du dich denn da auf der seriellen rumärgern? Evtl. hätt Schimmel jemand das gleiche "Problem" gehabt. Forum eben. Schwarmwissen abrufen setzt aber auch ein gewisses Maß an Input voraus. Also: welches Gerät? Datenblatt, Typ, Foto?
Äxl schrieb: > Schimmel -> schon mal Auch am iPhone kann man die nutzlose Rechtschreibkorrektur abschalten.
Name, Typ des Geräts? Oder die Doku als Download... 500.000 baud ist echt sehr/zu ungewöhnlich
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.