Hallo,
mehr zu mir findet ihr in der Vorstellung:
Klickt mich!
Ich habe noch nicht viel Erfahrung und daher teilweise sicherlich auch Fragen zu den Begriffen (wenn ich sie im Netz nicht erklärt finde). Aber trotzdem immer her damit : )
Sollte dies das falsche Unterforum sein, bitte entsprechend verschieben.
Nun zu meinem „Problem“.
Ich habe einen Stellmotor dessen Signale über einen Wandler via USB in den Rechner gelangen.
Zitat:
„Als Protokoll wird ein RS232 kompatibles Format mit 9600Baud, 1 Startbit, 1 Stoppbit, 0 Paritätsbit benutzt. Die Daten werden einmal je Sekunde ausgegeben.
Alle Daten werden in Blöcken von jeweils 7 Byte inkl. aller Steuerbytes im ASCII-Code ausgegeben.
Startbyte ist ein $, Endbyte ein Line-Feed <LF>“.
Hier ergibt sich für mich die erste Frage:
Ich habe folgende sieben Steuerbytes: H, I, J, K, L, M (kleines m bei Fehler), N
Für mich ist erst mal nur K interessant, daher werde ich alle Beispiele anhand von K schreiben.
K ist wie folgt aufgebaut:
$Kxxxx<LF>
$K – Kennung „Istposition“ des Stellmotors
xxxx - Istposition, 0x0000 bis 0x0480, (mit Begrenzung aufgrund des relativen Messsystems)
<LF> Line-Feed
Es besteht dann doch aus sieben Bits oder (<LF> (Zeilenumbruch) gilt als ein Bit?)?
Oben müsste es doch immer StartBIT und EndBIT heißen, oder?
Nun
das konkrete Problem:
Ich bekomme sieben Steuerbytes je Sekunde in die Software, möchte aber nur das „$K-Byte“ verwenden (es ist das vierte, die Reihenfolge ist wie oben aufgelistet).
Wie kann ich mir dieses Byte herausfiltern, um es weiter zu verarbeiten?
Die weitere Verarbeitung nach dem erfolgreichen Herausfiltern:
Wenn ich das Byte einzeln „in den Händen halte“ möchte ich den eingehenden Wert in eine Prozenteingabe umwandeln und auf dem Panel ausgeben.
Ich könnte die Werte „0000“ bis „0480“ aufteilen und mit Schritten auf 100Prozent umrechnen.
Dies würde mir für den Anfang schon reichen!
Der Haken:
Der Stellmotor passt sich ans jeweilige Ventil an, bei dem zurzeit eingesetzten ist die maximale Öffnung z.B. „036B“. Es wäre wunderbar, wenn man sich hierfür auch eine Art „Automatik“ bzw. Einstellmöglichkeit einfallen lassen könnte. Ich erwähne es jetzt schon, da es sich ja vielleicht gleich beim Programmieren berücksichtigen ließe.
Das angehängte VI habe ich mir gebaut, um die Daten durch LabVIEW in den PC zu bekommen.
Es hat noch den Fehler, dass gelegentlich „die Daten eingelesen werden, bevor die Hardware soweit war“ (oder ähnlich, ihr wisst sicherlich was ich meine). Der Fehler ist hier im Forum auch erklärt, allerdings habe ich mich noch nicht um eine Lösung bemüht, da ich nicht sicher bin ob es überhaupt der richtige Weg ist. Testweise habe ich den Fehlerausgang auf das Beenden der While-Schleife gelegt.
Hier einmal die ganze Eingangskette (habe ich aus Hterm gezogen):
RAW/Normal Format (was ist daran „Normal“, Ist damit ASCII gemeint?):
$H138E
$É13FE
$J036B
$K0224
$L10E9
$Í5110
$N1064
O³132
Warum werden das I (zweites Byte) und das M (sechstes Byte) hier manchmal als É und Í angegeben?
Das kann ich auch in LabVIEW beobachten. („K“ war bisher wirklich immer „K“).
Hexadezimal:
2448303132410A
2449313346450A
244A303336420A
24CB303338380A
244C333637420A
244D343831300A
244E313032350A
4F333945330A0D
Auf Wunsch kann ich auch noch weitere Formate einstellen.
Es würde mich freuen, wenn wir uns gemeinsam nach und nach um meine Probleme kümmern können.
Danke
Gruß
Maxix