Hallo alle zusammen,
ich hoffe ihr könnt mein Fehlendes Wissen in der Programmiersprache ST füllen und mir bei meinem Problem weiter helfen, da ich alles in CFC nur programmiere.
Ich besitze einen DENON Verstärker der per HTTP-Befehl gesteuert und ausgelesen werden kann. Dies wird per Baustein "FbHTTP_Get" realisiert wobei ein Buffer (Buffer-Statusabfrage) mit 281 Byte-Einträgen gefüllt wird. Diese müssen per ASCII-Tabelle in Character (STRING) umgewandelt werden.
Ich habe es bereits geschafft BYTE-Einträge, die im "Buffer_Statusabfrage" in einem ARRAY enthalten sind laut ASCII-Tabelle in Characters umzuwandeln (siehe Bild "CHAR_TO_STRING).
Bild
CHAR_TO_STRING:
CHAR_TO_STRING.jpg
Als kleines Beispiel: Die Byte Zahl
"70" bedeutet laut ASCII-Tabelle in Character umgewandelt den Buchstaben
"F".
Wie bereits weiter oben erwähnt spiegeln die 281 Byte-Einträge diese XML-Seite wieder (siehe Bild "HTTP-Ausgabe").
Bild
HTTP-Ausgabe:
HTTP-Ausgabe.jpg
Ich weiß bereits das z.B. der Buffer_Statusabfrage [61] der Buchstabe "O" und der Buffer_Statusabfrage [62] der Buchstabe "N"für den Powerzustand ausgiebt. D.h. ist der Verstärker EINGESCHALTET ist das laut Bild "HTTP-Ausgabe" das Wort "ON" nach dem Wort <value> usw....
Mein vorhaben ist es jedoch auch die momentane Volume (Lautsträke) auszulesen. Bedauerlicherweise ändert sich der Array-Eintrag je nach Betriebszustand des Verstärkers. Ist der Verstärker EINGESCHALTET besitzt das "
-" vor der Zahl "52.5" den "Buffer_Statusabfrage [212]", ist der Verstärker AUSGESCHALTET besitzt das "-" den "Buffer_Statusabfrage [213]". Das liegt daran das, dass Wort weiter oben (aus Bild "HTTP-Ausgabe") von ON auf OFF wechselt und somit einen Eintrag mehr einnimmt und sich es um einen Array-Eintrag verschiebt.
Im Onlinemodus sieht es wie folgt aus... ebenso sieht man eine Realisierung um den Betriebszustand (AN oder AUS) des Verstärkers festzustellen.
Bild
Onlinestatus:
Onlinestatus.jpg
Wie kann ich nun zuverlässt diese Werte aus der XML-Datei (HTTP-Ausgabe) in e!COCKPIT auslesen?
Ich habe mir gedacht das ich vll. das gesamte ARRAY von "Buffer_Statusabfrage" mit meinem ST-Code (CHAR_TO_STRING) in einen "einzigen" STRING umwandel. Dann mit Hilfe des Baustein "FIND" (String Function) die erste Überschrift wie im Bild "HTTP-Ausgabe" zu sehen nach " <MasterVolume> " suche und dann mit dem Baustein "LEFT" (String Function), sieben Array-Einträge (für den Eintrag " <value> ") weiter springe, um dann immer an der korrekten Stelle zu sein, um z.B. die Laustärke auslesen zu können.
Wäre dies zu umständlich oder gibt es eine bessere Möglichkeit?
Würde mich wahnsinnig über einen ST-Code oder auch in CFC freuen, z.B. wie es programmiert werden könnte um das gesamte Array umgewandelt als ein einzigen String darzustellen.
Gruß Lex