Hallo Leute,
bitte um Hilfe!
Im Rahmen meines Projektes muss ich die Messdaten (in ASCII) aufnehmen und später visualisieren.
Beim Einschalten des Messgerätes sendet es über die serielle Schnittstelle RS-422 nonstop die Messdaten. Wenn ich die Datenaufnahme starte, dann beginnt die Aufnahme mit großer Sicherheit nicht am Anfang des Datenpaketes (siehe Abb.). Jedes Datenpaket ist 55 Stellen groß und am Ende wird CR ® angehängt.
Wie kann den String stellenweise zerlegen, um danach die Vergleichoperation anzuwenden?
[
attachment=19541]
Ich bin für jede Hilfe dankbar
Mit freundlichen Grüßen
Den
Durchsuche den String mit "Match Pattern.vi" (auf der String Palette für das Blockdiagramm) nach r. Du erhältst dann den String vor und nach dem gefundenen Pattern. r kannst Du jedoch nicht direkt in eine String-Konstante eintragen. Aktiviere erst im Kontextmenu '' Codes Display und trage dann r als Search Pattern ein.
Das ganze natürlich noch in eine Schleife mit Shift-Registern, so dass Du nacheinander im Deine 5 Zahlen im Block bekommt. der Block kann mit String Subset.vi zerlegt werden, wenn die Zahlen alle eine feste Stellenanzahl haben. Ansonsten anch dem Trennzeichen suchen.
' schrieb:Beim Einschalten des Messgerätes sendet es über die serielle Schnittstelle RS-422 nonstop die Messdaten. Wenn ich die Datenaufnahme starte, dann beginnt die Aufnahme mit großer Sicherheit nicht am Anfang des Datenpaketes (siehe Abb.). Jedes Datenpaket ist 55 Stellen groß und am Ende wird CR ® angehängt.
Beim Starten der Datenaufnahme kann es nicht nur passieren, daß die Aufnahme mitten in einem Datenpaket beginnt, sondern es kann ebenso passieren, daß die Aufnahme mitten in einem (seriellem) Byte beginnt. Dann wird das falsche Bit für das Startbit gehalten, der Fehler wird einige Bit später erkannt und man erhält die Meldung "Frame Error".
Dieser Fehler ist abzufangen und das Starten der Datenaufnahme ist so oft zu wiederholen, bis der Fehler nicht mehr kommt. Danach sind solange einzelne Bytes einzulesen und in den Papierkorb zu schmeißen, bis CR kommt.
Dann ist alles synchronisiert und dem ersten gültigen Empfang eines ganzen Datenpaketes steht nichts mehr im Wege.
Diese Operationen bis zur Synchronisation müssen in Realtime geschehen, d.h die Stringbytes müssen einzeln gelesen und analysiert werden. Das Einlesen eines längeren Strings und Zerlegen desselben wäre nicht der richtige Weg zurm Erreichen der Synchronisation.
Erst nach Erreichen der Synchronisatin können alle Bytes eines Datenpaketes bis CR auf einmal gelesen werden.
Aber besser wäre natürlich diese Alternative: Erst den Empfänger einschalten, und dann den Sender. Dann dürfte es schon mit dem Senden des ersten Datenpaketes keine Synchronisationsprobleme geben.
danke für eure Tipps!
In der Abbildung 1 bis 3 ist meine Messprogramm dargestellt. Das Programm funktioniert bis auf einen Fehler, welchen ich in Thema: "Umgang mit der Erzeuger/Verbraucher-Struktur" beschreibe.
Mit freundlichen Grüßen
Den