Daten von einen Serial Port empfangen und verarbeiten
Verfasst: 26.02.2016 21:59
Schönen guten Abend.
Derzeitig arbeite ich mal wieder ein wenig mit Purebasic, und hänge derzeitig an einem Vorhaben in Verbindung mit den Serial Port Funktionen.
Ich sende Daten an einem virtuellen Port (Läuft über com0com) auf den ein Simulator zugreift. Dieser antwortet mir entsprechend mit wichtigen Informationen, die ich später von Hex in Dezimal umrechnen muss, um mit diesen Werten arbeiten zu können.
Derzeitig ist mein Code ziemlich einfach:
und die Ausgabe vom Text sieht folgendermaßen aus:
Könnte man nicht irgendwie mit Arrays oder ähnlichen arbeiten ?
Mit freundlichen Grüßen
HHYayo
Derzeitig arbeite ich mal wieder ein wenig mit Purebasic, und hänge derzeitig an einem Vorhaben in Verbindung mit den Serial Port Funktionen.
Ich sende Daten an einem virtuellen Port (Läuft über com0com) auf den ein Simulator zugreift. Dieser antwortet mir entsprechend mit wichtigen Informationen, die ich später von Hex in Dezimal umrechnen muss, um mit diesen Werten arbeiten zu können.
Derzeitig ist mein Code ziemlich einfach:
Code: Alles auswählen
If OpenSerialPort(0, "COM5", 9600, #PB_SerialPort_EvenParity , 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
If WriteSerialPortString(0,"010D"+#CRLF$)
Delay(100)
While AvailableSerialPortInput(0)>0
If ReadSerialPortData(0,@Byte,1)
text.s=text.s+Chr(Byte)
EndIf
Wend
EndIf
Debug text
Else
MessageRequester("Error", "")
EndIf
Relevant dabei sind in der dritten Zeile die Stellen nach "41 OD". Je nach Daten die von den Simulator aus geschickt werden variiert die Ausgabe. Jedoch muss ich irgendwie alles bis auf die Zeichen nach den genannten Werten entfernt bekommen. Ich habe versucht direkt aus "text.s" mit FindString/RemoveString diese zu entfernen, scheinbar jedoch stetig ohne Erfolg. Ich könnte natürlich alles aus "text.s" in einen .txt Dokument speichern, die Strings suchen und bearbeiten, speichern, und wieder neu einlesen. Das Problem ist jedoch das ich später einen Timer und eine Schleife parallel laufen haben werde, die am besten alle 100-200ms den Wert überprüfen und den Timer stoppen sollen (Ob der virtuelle Port die Anzahl an Anfragen mitmacht in der Geschwindigkeit weiß ich derzeitig auch noch nicht, war der Meinung 200ms ist die absolute Grenze). Daher denke ich nicht das es sinnvoll wäre, in den kurzen Zeitspannen irgendwelche Dateien ständig zu öffnen, zu verändern, und wieder neu auszulesen.010D
41 0D 00
>
Könnte man nicht irgendwie mit Arrays oder ähnlichen arbeiten ?
Mit freundlichen Grüßen
HHYayo