Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
blutigerAnfänger
Anmeldungsdatum: 26.09.2006 Beiträge: 2
|
Verfasst am: 26.09.2006, 09:30 Titel: Request und Response an der Seriellen Schnittstelle |
|
|
Hallo zusammen,
hab folgendes Problem:
Muss über eine Serielle Schnittstelle Prozessparameter loggen. Dazu muss jeweils ein Request an die Serielle Schnittstelle gesendet und die Response anschließend in eine Datei geschrieben werden.
Request und Response müssen als hex-Code gesendet und empfangen werden.
Folgender Ansatz:
OPEN Pfadundname$ FOR OUTPUT AS 1
OPEN COM "com1:38400,N,8,1" FOR RANDOM AS 2
DO
PRINT"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
PRINT
Periode =.4
DO
deltat = TIMER - MESSENDE
LOOP UNTIL deltat >= Periode
PRINT #2, "&H010A00000605FF00090000F841" 'Request
DO
IF LOC(2) THEN
dataBridge$=INPUT$(28, #2) 'Reading the
'responded string
IF LEN(dataBridge$)=28 THEN EXIT DO
END IF
LOOP
PRINT dataBridge$
PRINT LEN (dataBridge$)
PRINT #1, dataBridge$
LOOP UNTIL INKEY$ = "s"
CLOSE #1
' Dateiwechsel durch Tastendruck
INPUT "Neue Datei anlegen? (y/n)", neueDatei$
if neueDatei$ = "y" then
i=i+1
GOTO NeueDatei
END if
CLOSE #2
END
Das grundsätzliche Problem: Ich bekomme keine Antwort!
1. Meine Vermutung ist schon mal, dass ich nicht wirklich nen hex-Code schreibe sondern eigentlich nen String, oder? Wie kann ich wirklich nen hex-Code auf die Serielle Schnittstelle schreiben?
Muss ich den hex-Frame als Einzelbotschaften nacheinander senden?
2. Funktioniert mit "dataBridge$=INPUT$(28, #2) " bereits das Warten auf eine Antwort mit der Länge von 28 Bit?
Würd mich sehr freuen, wenn mir jemand weiterhelfen könnte!
Herzlichen Gruß
blutigerAnfänger |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.09.2006, 13:15 Titel: |
|
|
Hi.
Wirklich helfen kann ich dir nicht...
...außer sagen, dass so, wie du den HEX-Code senden willst, ein String gesendet wird. Versuch's mal mit Val:
[code]
Print #2, Val(&H010A00000605FF00090000F841) ' Request
[code]
Allerdings weiß ich nicht, ob Val so große Zahlen überhaupt verarbeiten kann.
Und dann:
entweder du hast dich verschrieben, oder du wartest wirklich auf eine 28 _Bit_ Antwort. Input$ holt nur Bytes, keine Bits.
Naja, wirklich geholfen hat das nicht, oder?
Greets,
Mao _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 26.09.2006, 13:22 Titel: |
|
|
zu 1. ja, mit 'PRINT #2, "&H010A00000605FF00090000F841" schreibst du einen 56 Byte langen String als Request.
Vermutlich (???) sollst du Code: | PRINT #2, &H01
PRINT #2, &H0A
PRINT #2, &H00
PRINT #2, &H00
.. usw | schreiben, aber das sind dann nur 13 Byte?
zu 2. Jain , ja da wird auf 28 Byte(Zeichen) gewartet, nicht nur 28 Bit (1 Byte = 8 Bit)
Problem ist: Was meinst du mit 'als Hex-Code senden und empfangen' ?
Vermutlich sollen im Log die Daten als Hex-Werte geschrieben werden, weil die Steuercodes auch nicht druckbare Zeichen enthalten?
Gruß Volta
EDIT/ Hi Mao, warst schneller  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.09.2006, 13:53 Titel: |
|
|
Ja, aber auch nicht so hilfreich.
Ich vermute mal irgendwie, dass bei Bloody's Code der Hex-String falsch ist.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.09.2006, 15:26 Titel: |
|
|
Korrekte Variante mit dem Senden von Bytes:
Code: | PRINT #2, CHR$(&H01)+CHR$(&H0A)+CHR$(&H00)+..+CHR$(&H41); |
(natürlich kann man sich auch eine BinString-FUNCTION bauen)
Umgekehrt Lesen:
Code: | WHILE LOC(2) > 0
byte% = ASC(INPUT$(1, 2))
' byte% verarbeiten
WEND |
_________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
blutigerAnfänger
Anmeldungsdatum: 26.09.2006 Beiträge: 2
|
Verfasst am: 26.09.2006, 16:53 Titel: |
|
|
Hallo dreal,
das war der entscheidende Hinweis! Vielen Dank!
Allerdings ist das Script relativ langsam, gibts hier noch Möglichkeiten etwas zu tunen?
Herzlichen Dank |
|
Nach oben |
|
 |
pebisoft gesperrt
Anmeldungsdatum: 28.11.2004 Beiträge: 131
|
Verfasst am: 26.09.2006, 19:28 Titel: |
|
|
man könnte die baudrate von 9600 auf 19200baud erhöhen , wenn es das programm zulässt, macht es aber nicht.
ich hoffe, das mal bald in freebasic die gängigen höheren baudraten mit eingebaut werden!!!! |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 27.09.2006, 09:33 Titel: |
|
|
pebisoft hat Folgendes geschrieben: | man könnte die baudrate von 9600 auf 19200baud erhöhen , wenn es das programm zulässt, macht es aber nicht. | äh, bloody benutzt doch schon eine Baudrate von 38400 .
siehe OPEN COM "com1:38400,N,8,1" FOR RANDOM AS 2
pebisoft hat Folgendes geschrieben: | ich hoffe, das mal bald in freebasic die gängigen höheren baudraten mit eingebaut werden!!!! | ist nicht nötig. Über FB kann man alles einstellen, was der Com-Port zulässt. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
pebisoft gesperrt
Anmeldungsdatum: 28.11.2004 Beiträge: 131
|
Verfasst am: 27.09.2006, 17:37 Titel: |
|
|
in der "open com"beschreibung steht nur ein höchstwert von 9600baud.
bist du sicher das er die höheren baudzahlen durchführt, vielleicht nimmt der immer nur 9600, auch wenn ein höherer wert eingestellt wird. |
|
Nach oben |
|
 |
Kai Bareis

Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 27.09.2006, 17:43 Titel: |
|
|
Naja siehe hier
Dort steht weiter unten auch eine größere Baudrate. So wie es aussieht ist das auf Freebaisc.de noch alt und von der Qbasic-Hilfe übernommen worden. _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 27.09.2006, 18:06 Titel: |
|
|
Vielleicht liegt es bei euch daran, das ihr "For Random" habt, in der englischen wiki steht das gar nicht. Also einfach
Code: | Open Com "com1:38400,N,8,1" as #1 |
sollte klappen. |
|
Nach oben |
|
 |
|