Hallo, ich möchte mit einer Batch per Com3 ein HEX 6d 6f 76 65 20 2d 35 36 31 37 0a an ein Gerät schicken. Hier mal ein paar Details: Port: Com3 Baudrate: 9600 Databits: 8 Stopbits: 1 Stop bit Parity: No Flow control: No HEX 6d 6f 76 65 20 2d 35 36 31 37 0a Habe es hiermit probier... Es geht aber leider nicht. In der CMD: MODE COM3:9600,N,8,1,P COPY 1.HEX COM3 Ich hoffe ihr habt eine Idee / Vorschlag Gruß Tom
Versuch den Type Befehl. Copy ist ein File-Befehl. Type sendet nur. type hex.txt >com1: Befehl - Datei - Umlenkungszeichen ( > )- Ziel (hier com-1-Schnittstelle). Type ohne Umlenkung zeigt es auf den Display an. Problem ist. Umlenkungen haben KEINE Rückmeldung. Was bedeutet , die Gegenstelle verarbeitet es oder lässt es bleiben. Davon erfährt der Type Befehl NIX. 2. Problem. Er sendet ALLES Seriell. Also auch den größten Mist.
Hinweis : Es kann zu "Datei nicht gefunden kommen" wenn im Pfad ein Leerzeichen ist. In den Falle den ganzen Pfad + Datei in Anführungsstriche setzen. Type "c:\test 1\hex.bin" > com1:
Tom schrieb: > COPY 1.HEX COM3 copy /? Versuche mal mit /B zu senden. Wurde die Datei 1.HEX mit einem Texteditor erstellt und ist evtl Unicode oder ist sie 'sauber' mit einem Hexeditor gemacht? ------- Schlaumaier schrieb: > Hinweis : Lerne Lesen.
Tom schrieb: > Ich hoffe ihr habt eine Idee / Vorschlag Deinen unklaren Angaben zufolge nehme ich an dass du die Daten nicht hexadezimal sondern binär senden willst. Dazu solltest du die Daten mit einem geeignetet Editor als Bytefolge in eine Datei schreiben, nicht als "Hex-Folge".
Manfred schrieb: > Schlaumaier schrieb: >> Hinweis : > > Lerne Lesen. Und wieso. Meine Antwort ist völlig richtig. Ein Gerät wartet auf Daten, der PC sendet. Der Type Befehl macht genau da. Er sendet. Ohne wenn und aber. Ich habe mit dieser Technik von fast 40 Jahren um Papier zu sparen meine Probe-Ausdrucke an das Terminal-Prg. auf meinen Amiga gesendet. Es funktioniert einwandfrei. Und der TYPE-Befehl ist auch in Win-10 noch drin. Wenn also das "Gerät" des TO keine Rückmeldungen gibt, ist der Copy-Befehl egal welche Parameter NICHT FUNKTIONSFÄHIG. Weil Copy erwartet eine Antwort. Also labere nicht.
Schlaumaier schrieb: > Weil Copy > erwartet eine Antwort. Völliger Quatsch - ein typischer Schlaumaier eben. Georg
Georg schrieb: > Völliger Quatsch - ein typischer Schlaumaier eben. > > Georg Is klar. Wieso gibt es die Meldung "Fehler beim kopieren". Und nicht Fehler beim TYPE-Befehl". Antwort : Weil der Copy-Befehl eine Rückmeldung der Gegenstadtion erwartet. Der Type Befehl nicht. Aber vielleicht kann der TO ja mal sagen was funktioniert hat.
Hallo, ich hab einiges probiert aber noch tut sich nichts. Ich denke es hängt mit der Hex datei zusammen. Habe Sie mit Note erstellt(ist im Anhang). Type Test: type 1.hex >com3: Copy /b Test: MODE COM3:19,n,8,1 copy 1.hex \\.\com3 /b Mit Serial Port Monitor geht es nach wie vor. Da es etwas umständlich ist möchte ich gerne die Batch-Datei erstellen. Damit es mit einem Klick geht. Anhang: - a.txt Meine Test Hex - b.txt Meine Test Hex - Screenshot von Serial Port Monitor (Von Eltima).png" Gruß Tom
Hallo Portmon sendet vermutlich die zu den Hex-Werten passenden Bytes, Type und Copy die Buchstaben und Zahlen als Text. In der Datei müssten dann Byte-Werte stehen.
Tom schrieb: > Ich denke es hängt mit der Hex datei zusammen. Habe Sie mit Note > erstellt(ist im Anhang). Das ist keine Hex-Datei, sondern eine Textdatei. Eine Hex-Datei enthält nicht die Zeichen 6 und d, sondern ein(!) Byte 6d. Das geht nicht mit einem Texteditor (warum heisst der wohl so?). Georg
Georg schrieb: > Das ist keine Hex-Datei, sondern eine Textdatei. Eine Hex-Datei enthält > nicht die Zeichen 6 und d, sondern ein(!) Byte 6d. Das geht nicht mit > einem Texteditor (warum heisst der wohl so?). Hast du eine Empfehlung für einen einfachen Hex-editor?
HxD oder einer der anderen hundert die google ausspukt wenn man fragt
never ever schrieb: > HxD Den nutze ich auch. Hier mal ein Link dazu. https://mh-nexus.de/de/hxd/ Aber davon mal abgesehen, müsste ich Serial-Monitor trotzdem die Datei (als Text halt dann) auftauchen.
never ever schrieb: > HxD > > oder einer der anderen hundert die google ausspukt wenn man fragt Ist das so richtig? copy aa.hex \\.\com3 /b Das Zeitlimit für die Semaphore wurde erreicht. 0 Datei(en) kopiert. und type aa.hex >com3: Das System kann nicht auf das angegebene Gerät schreiben. Das System kann nicht auf das angegebene Gerät schreiben. Das System kann nicht auf das angegebene Gerät schreiben. Das System kann nicht auf das angegebene Gerät schreiben.
Wenn beides schief geht, würde ich die Schnittstelle mal selbst überprüfen. Oder ob du eine Berechtigung hast, auf das Gerät zu schreiben.
Schlaumaier schrieb: > Wenn beides schief geht, würde ich die Schnittstelle mal selbst > überprüfen. > > Oder ob du eine Berechtigung hast, auf das Gerät zu schreiben. Habe CMD als admin ausgeführt
MODE COM3:19,n,8,1 Status von Gerät COM3: ---------------------- Baudrate: 19200 Parität: None Datenbits: 8 Stoppbits: 1 Timeout: ON XON/XOFF: OFF CTS-Handshaking: OFF DSR-Handshaking: OFF DSR-Prüfung: OFF DTR-Signal: ON RTS-Signal: ON
Tom schrieb: > Habe CMD als admin ausgeführt Falsches Gerät. Ich meinte das ZIEL. Ist das bereit von dir Daten anzunehmen. Und sind alle Einstellungen der COM-Schnittstelle die selbe wie am Gerät. ?? Diese beiden Dinge, sind für 99% aller Probleme verantwortlich.
Nachtrag: Prüfe im Gerätemanager ob es sich um ein echtes COM-Gerät handelt und nicht um ein Simulieren Anschluss. Einfach gesagt, es muss unter COM-stehen. Und schaue dir dann mal DA die Einstellungen an. Die haben meist ein Grund.
@Tom Ich werde das Gefühl nicht los, als ob Du nicht kapiert hast, dass Deine Dateien - was auch immer Du damit bezwecken willst - keine "Hex"-Dateien sind. Es sind, wie bei einem Editor nicht anders zu erwarten, Textdateien. In der ersten Datei (a.txt) steht, wenn ich mal ASCII unterstelle (Vertikal): ASC Hex Bin Dez '6' 0x36 00110110b 54d 'd' 0x64 01101000b 100d ' ' 0x20 00100000b 32d '6' 0x36 00110110b 54d 'f' 0x66 01100110b 102d ... ' ' 0x20 00100000b 32d '3' 0x33 00110011b 51d '7' 0x37 00110111b 55d ' ' 0x20 00100000b 32d '0' 0x30 00110000b 48d 'a' 0x61 01100001b 97d Das sieht zwar interessant aus, ist aber für'n A****
Sebastian S. schrieb: > @Tom > Ich werde das Gefühl nicht los, als ob Du nicht kapiert hast, dass Deine > Dateien - was auch immer Du damit bezwecken willst - keine "Hex"-Dateien > sind. Naja, eigentlich hat er 2 Probleme. 1 Problem : Das Gerät redet nicht mit ihm. 2 Problem : Es ist nicht sichergestellt ob die Datei die er übertragen will, echtes HEX braucht (Oder nur eine Textdatei ist). Der Unterschied @TO ist, das in einer HEX-Datei ALLE Zeichen also auch seltsame Sonderzeichen drin sind. Die sind so verwusselt wie ein echtes Programm. i.d.R. sind es meist Firmware-Dateien oder Software (exe Datei). Also so was was z.b. die Arduino-IDE erzeugt und was dann auf das Gerät übertragen wird. Aber wie auch immer, du hast 2 Probleme halt. Wenn du aber, was ich vermute eine Einstellung übertragen willst (Die kann in selten Fällen auch mal purer Text sein) musst du immer noch das Problem der Kommunikation lösen. Der Com-Port ist nicht so einfach. Tom schrieb: > Status von Gerät COM3: > ---------------------- > Baudrate: 19200 > Parität: None > Datenbits: 8 > Stoppbits: 1 > Timeout: ON > XON/XOFF: OFF > CTS-Handshaking: OFF > DSR-Handshaking: OFF > DSR-Prüfung: OFF > DTR-Signal: ON > RTS-Signal: ON Feine Angaben, aber sind das auch die selben wie das ZIEL-Gerät. ?? Die müssen nämlich gleich sein, und zwar ALLE. Ich würde als erstes die Baudrate auf 9600 senken. Das macht die Verbindung langsamer aber sicherer. Bei mein Arduino habe ich die auch so niedrig. Warte ich halt nen paar Sekunden aber dafür habe ich nie Stress mit der Übertragung bei meinen clonen.
Schlaumaier schrieb: > Nachtrag: Prüfe im Gerätemanager ob es sich um ein echtes > COM-Gerät > handelt und nicht um ein Simulieren Anschluss. > > Einfach gesagt, es muss unter COM-stehen. > > Und schaue dir dann mal DA die Einstellungen an. Die haben meist ein > Grund. Das Gerät ist ein Drehteller der über USB am PC angeschlossen ist. Im Geräte-Treiber Steht COM3 9600, 8Bits, Stopbits1 Mit den Daten habe ich den Serial Port Monitor gefüttert und bewegungen mitgeschrieben. Dabei habe ich herausgefunden das der Hex Wert "6d 6f 76 65 20 2d 35 36 31 37 0a" die Bewegung macht was ich möchte. Nun kann ich Serial Port Monitor starten und auf COM3 den Hex Wert "6d 6f 76 65 20 2d 35 36 31 37 0a" schicken und der Drehteller bewegt sich. Nun soll das nur noch in cmd funktionieren damit ich mir ein paar Batch machen kann für unterschiedliche bewegungen.
Schlaumaier schrieb: > Ich würde als erstes die Baudrate auf 9600 senken. Das macht die > Verbindung langsamer aber sicherer. Bei mein Arduino habe ich die auch > so niedrig. Warte ich halt nen paar Sekunden aber dafür habe ich nie > Stress mit der Übertragung bei meinen clonen. Habe es auf 9600 gesenkt Status von Gerät COM3: ---------------------- Baudrate: 9600 Parität: None Datenbits: 8 Stoppbits: 1 Timeout: ON XON/XOFF: OFF CTS-Handshaking: OFF DSR-Handshaking: OFF DSR-Prüfung: OFF DTR-Signal: ON RTS-Signal: ON
@HeX-Datei. Scheinbar bekomme ich das nicht hin. Ich weiß nicht warum. Wäre nett wenn jemand mir eine Hex-Datei uploaden könnte mit dem Hex 6d 6f 76 65 20 2d 35 36 31 37 0a
Dann schau dir mal in Hterm die grünen Lämpchen an ;) die sind so wie ich das erkenne alle aus Wenn also die Befehle mit Hterm funktionieren ist das der Grund nr. 1.
Hat eigentlich einer bemerkt, das
1 | 6d 6f 76 65 20 2d 35 36 31 37 0a |
eigentlich
1 | move -5617 |
(plus ein LF) in Textform bedeutet?
:
Bearbeitet durch User
Jens M. schrieb: > Hat eigentlich einer bemerkt, das Ja, schon vor ganz laaannnngggerr Zeit. Und wieso kann das Teil ein Befehl nicht in TEXT-FORM bekommen. ?? Das mache ich dauernd bei meinen kleinen Arduino-Spielereien. Es geht hier um eine Scheibe die gesagt bekommt drehe dich falschrum auf 5617 oder halt im 5617 Schritte. Das Prg. in den Teilchen parsed den Text und macht was es soll. Es muss nicht immer Hex-sein. Weil Text-Zeichen sind ja irgendwie auch hex'ig ;)
Jens M. schrieb: > Hat eigentlich JEMAND bemerkt, dasS > 6d 6f 76 65 20 2d 35 36 31 37 0a > eigentlich > move -5617 (plus ein LF) in Textform bedeutet? Das habe ich gesehen, als ich HxD bemüht habe. Manfred schrieb: > Wurde die Datei 1.HEX mit einem Texteditor erstellt und ist evtl Unicode > oder ist sie 'sauber' mit einem Hexeditor gemacht? Das macht auch Sinn, nachdem Tom seine Anwendung nachgereicht hat. Vermutlich muss er genau diesen Text senden, und zwar in Standard-ASCII.
Tom schrieb: > per Com3 ein HEX > 6d 6f 76 65 20 2d 35 36 31 37 0a > an ein Gerät Also, kläre erstmal ab, was du da eigentlich schicken willst. Zur Auswahl stehen: - Intel Hex - Motorola Hex - beliebige andere Dateien (die DU als .hex titulierst) - eine Textdatei mit einer Zeile "mov -5617 (lf)" Dann sehen wir weiter. W.S.
Habe ASCII gestest leider nicht. Es geht nur mit Hex. Welches Hex Format? Gute Frage. Bisher kann ich nur sagen.. Es geht mit HTerm und Serial Port Monitor und nur als HEX Ich würde alles an Hex Formaten gerne nehmen und probieren. Bin auch für jede andere Umsetzung dankbar. Ziel es am ende per Datei-klick (zB Batchdatei) ein bewegung auslösen.
Tom schrieb: > Habe ASCII gestest leider nicht. > Es geht nur mit Hex. > Welches Hex Format? Gute Frage. > Bisher kann ich nur sagen.. > Es geht mit HTerm und Serial Port Monitor und nur als HEX Besitzt Du einen zweiten PC? Ich hatte ein ähnliches Problem, der Lieferant wollte sein Protokoll nicht offenlegen. Ich habe ein Kabel mit vier SubD gelötet, Rx und Tx auf einen zweiten PC mit zwei COM ausgeleitet und mir mit dem zweiten PC den Datenverkehr angeschaut. Dazu mal bei https://www.shamrock.de/freeware/ gucken, ich glaube, ShamCom war es, was beide Richtungen in einem Fenster darstellen kann.
Geh doch mal unter Ausführen und rufe den Taschenrechner CALC auf. Stelle den Modus auf Programmierer und gib die einzelnen Zeichen in Hex ein. Dann siehst du auch gleich die 11 Werte in Dezimal : 6d 6f 76 65 20 2d 35 36 31 37 0a = dezimal : 109 111 118 101 32 45 53 54 49 55 10 Das ist was anderes als in ANSI das "move -5617" zu senden. Die Gegenstelle kann ja kein ANSI lesen bzw. verstehen. HTherm u. a. wandeln das halt automatisch um. Deshalb funktioniert das auch. Am besten würde das mit einem kleinen Basic- Programm oder C - Programm o. ä. gehen, das man in einer Batch-Datei aufruft. Damit hat man das Problem umgangen, dass mit einer Datei auch nicht gewünschte Zeichen wie Blank, Komma oder EOF-Zeichen mitgeschickt werden.
:
Bearbeitet durch User
Tom schrieb: > Habe ASCII gestest leider nicht. > > Es geht nur mit Hex. Quatsch. Ob du nun die Bytes "6d 6f 76 65" oder den Text "move" schickst ist am anderen Ende identisch, dein Problem ist das senden an sich. Und "move" und eine Zahl nach Wahl ist für dich einfacher zu erzeugen als für jeden gewünschten Winkel eine Datei abzuspeichern. Schau mal unter https://batchloaf.wordpress.com/serialsend/ Das könnte sein was du brauchst...
Toller Lösungsansatz! Es geht fast. Ich denke da muss am Ende nur noch ein "0a" mit übertragen werden. Aber erst mal was ich getestet habe... - Test mit "move -3745." C:\>SerialSend.exe /devnum 3 /baudrate 9600 "move -3745." SerialSend (last updated 8-4-2015) See http://batchloaf.com for more information Device number 3 specified 9600 baud specified Searching serial ports... Trying COM3...OK Sending text... 11 bytes written to \\.\COM3 Closing serial port...OK Log aus Serial Monitor: 1504 11/07/2021 13:31:23 IRP_MJ_WRITE DOWN 6d 6f 76 65 20 2d 33 37 34 35 2e move -3745. 11 11 COM3 - Test mit "move -3745" C:\>SerialSend.exe /devnum 3 /baudrate 9600 SerialSend (last updated 8-4-2015) See http://batchloaf.com for more information Device number 3 specified 9600 baud specified Searching serial ports... Trying COM3...OK Sending text... 10 bytes written to \\.\COM3 Closing serial port...OK Log aus Serial Monitor: 1644 11/07/2021 13:36:15 IRP_MJ_WRITE DOWN 6d 6f 76 65 20 2d 33 37 34 35 move -3745 10 10 COM3 Bei "move -3745." kommt 6d 6f 76 65 20 2d 33 37 34 35 2e heraus Bei "move -3745" kommt 6d 6f 76 65 20 2d 33 37 34 35 heraus Bei "move -3745 " kommt 6d 6f 76 65 20 2d 33 37 34 35 20 heraus Jedes Hex womit der Drehteller was anfangen kann endet immer auf "0a" zB "6d 6f 76 65 20 2d 33 37 34 35 0a" oder "6d 6f 76 65 20 2d 35 36 31 37 0a" Jetzt die warscheinlich dumme Frage... was gebe ich ein damit ich am Ende "0a" übertrage?
Wenn du auf der Kommandozeile bist, probiere mal ALT - Taste festhalten + 1 und 0 auf Nummernblock schnell hintereinander. Es ist halt so, dass die ersten 32 Zeichen der ASCII-Tabelle keine Entsprechung in der ASNI-Tabelle haben und keine druckbaren Zeichen sind. Da gibt es noch mehrere zwischendrin. Deswegen der Trick mit der ALT-Taste und Nummernblock. Buchstaben und Zahlen haben die gleiche Zahl (0-255) -> z.B. Chr$(65) = A 65 - 90 -> Großbuchstaben 97 - 122 -> Kleinbuchstaben 48 - 57 -> Zahlen Als Hobbyprogrammierer weiß man das. Hast du früher in MS-DOS nicht mit den Blockgrafikzeichen gespielt. Viele MS-DOS Spiele benutzten diese auch gerne.
:
Bearbeitet durch User
Tom schrieb: > Ich denke da muss am Ende nur noch > ein "0a" mit übertragen werden. Logisch. Und wer die Dokumentation gelesen hätte, wüsste das man mit der Option /hex die Möglichkeit einschaltet, Pseudotexte wie \r oder \n als CR bzw. LF zu senden. Protip: 0a ist LF, also \n Um's dir leicht zu machen:
1 | SerialSend.exe /devnum 3 /baudrate 9600 /hex "move -3745\n" |
sollte tun was du brauchst.
Und wenn es das nicht tut, dann überprüfe mal DTR-Signal: ON RTS-Signal: ON In deine Software sind die nämlich auf OFF (die 4 grünen Punkte oben).
-- Neuer Test mit HyperTerminal Einstellungen: COM3 9600 Databits 8 Stoppbits 1 und dann "Sent Txt File" aa.hex öffnen Das Funktioniert und der Drehteller bewegt sich. -- C:\>SerialSend.exe /baudrate 9600 /devnum 3 /hex "\x6d\x6f\x76\x65\x20\x2d\x35\x36\x31\x37\x0a" SerialSend (last updated 8-4-2015) See http://batchloaf.com for more information 9600 baud specified Device number 3 specified Searching serial ports... Trying COM3...OK Sending text... 11 bytes written to \\.\COM3 Closing serial port...OK Log aus Serial Monitor: IRP_MJ_WRITE DOWN 6d 6f 76 65 20 2d 33 37 34 35 0a move -3745. 11 11 COM3 Soweit ist das übertragene Kommando richtig und hier im Log nicht vom Orig. zu unterscheiden, aber leider passiert nichts -- SerialSend.exe /devnum 3 /baudrate 9600 /hex "move -3745\n" SerialSend (last updated 8-4-2015) See http://batchloaf.com for more information Device number 3 specified 9600 baud specified Searching serial ports... Trying COM3...OK Sending text... 11 bytes written to \\.\COM3 Closing serial port...OK Log aus Serial Monitor: IRP_MJ_WRITE DOWN 6d 6f 76 65 20 2d 33 37 34 35 0a move -3745. 11 11 COM3 Soweit ist das übertragene Kommando richtig und hier im Log nicht vom Orig. zu unterscheiden, aber leider passiert nichts --Das sind momentan die COM Einstellungen: MODE COM3 Status von Gerät COM3: ---------------------- Baudrate: 9600 Parität: None Datenbits: 8 Stoppbits: 1 Timeout: ON XON/XOFF: OFF CTS-Handshaking: OFF DSR-Handshaking: OFF DSR-Prüfung: OFF DTR-Signal: ON RTS-Signal: ON -- Der Aktuelle Stand ist: -Hex übertragen mit Serial Port Monitor. Geht -Hex übertragen mit Serial Port Monitor. Geht aber nur wenn DTR an ist. -Hex-datei mit "Sent Txt File" mit HyperTerminal. Geht SerialSend.exe /baudrate 9600 /devnum 3 /hex "\x6d\x6f\x76\x65\x20\x2d\x35\x36\x31\x37\x0a" und SerialSend.exe /devnum 3 /baudrate 9600 /hex "move -3745\n" beide Übertragen laut dem Log von Serial Port Monitor korrekt das Hex Kommando. Trotzdem dreht sich nichts. Woran könnte es noch liegen?
Tja, machste Textmodus im Terminal an und kuckste Rückmeldung. Im Screenshot oben sehe ich Status running, Status stopped und Error. Vielleicht bekommst du jetzt Fehler (Kommando falsch) oder gar nix (Verbindung steht nicht richtig). Wie machst du das eigentlich, das du 2 Anwendungen gleichzeitig auf einen COM zugreifen lässt?
Jens M. schrieb: > Wie machst du das eigentlich, das du 2 Anwendungen gleichzeitig auf > einen COM zugreifen lässt? Mit Serial Port Monitor kannst du Mithören
Möglicherweise macht Serialsend die Schnittstelle zu schnell wieder zu. Es gibt ein Kommando das den Vorgang verzögert.
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.