ASCII-codierter Array of Word nach String konvertieren

D-Platoon

Level-2
Beiträge
43
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich stehe gerade vor folgendem Problem:
Ich habe ne S7-314 und ein KTP 400comfort.
Die 314 liest von einem IO-Link-Teilnehmer verschiedene Werte aus. Darunter auch den Produkttyp. Dieser wird in ein ASCII-codiert in ein Array of Word geschrieben (Ziffern und Buchstaben).
Diesen will ich nun gerne als Klartext auf der HMI darstellen können. Ich kann auf dem KTP aber nur einen String als "Text" ausgeben.
Gibt es da eine Möglichkeit?

Also in aller Kürze:
Aus ASCII (Hex) "5452 3734 3332" soll "TR7432" werden.
 
Kann das KTP Array of Chars?
Evtl. mal damit probieren.
Aber erst 2 Bytes nach String Anfang projektieren.

Wenn die Länge des empfangegen Strings immer gleich ist,
die "Words" per Blockmove in einen String kopieren.
Musst dich dann evtl. noch um die 2 Headerbytes des Strings kümmern.
Darin steht die Länge des Strings und die Menge an enthaltenen Zeichen.

Den Weg würd ich versuchen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zefix,

entschuldige die späte Antwort.
Ich glaube ich habe das Problem nicht genau genug beschrieben:
Gleich vorab: Ich arbeite mit dem TIA-Portal.
Ich schreibe die Daten vom IO-Link-Modul in ein Array [0..10] of Word.
Egal ob das der Produktname oder ein Temperaturwert ist.
Dieser wird dann in einem weiteren Baustein in die entsprechende "Schublade" (Struct mit den entsprechnden Variablen für jeden Parameter) gesteckt, entsprechend umgewandelt (z.B. ein Temperaturwert in eine Realzahl) und abgespeichert, damit das HMI darauf zugreifen kann.
Bei den Werten ist das alles auch gar kein Problem. Das KTP greift auf den entsprechenden Wert zu in zeigt ihn korrekt an.
Das Problem liegt bei den Zeichenketten, also dem Text.
Wenn ich diesen direkt, ohne weitere Umwandlung in meine oben genannte Schublade stecke (es ist dann immer noch ein Array [0..10] of Word) und auf dem KTP anzeigen will wird auf diesem nur "5452" (was ja bekanntlich "TR" bedeutet) angezeigt. Denn ich muss dort bei "Format" "Hexadezimal" (oder auch Dezimal) auswählen, damit es mir erlaubt ist dem E/A-Feld die Variable (aber auch hier nur das erste Wort) zuzuweisen.
Wähle ich eine "Zeichenkette" aus, muss das Eingabeformat ein "String" sein.

Ich hoffe, die Problemstellung ist jetzt klarer.

Edit:
Die Länge des Strings ist von Parameter zu Parameter unterschiedlich.

Edit Edit:
Ich hab gerade noch ein bisschen gespielt.
So wie es aussieht ist das Problem behoben. Ich werde berichten, wenn ich es mit Sicherheit weiß!
 
Zuletzt bearbeitet:
Also ich habe das Programm nochmals auf Herz und Nieren geprüft und es funktioniert jetzt.
Es hat, genau wie du gesagt hattest, mit BLKMOV geklappt. Ich musste mich dabei nichtmal um die Headerbytes kümmern. Hatte da wohl zu kompliziert gedacht ;)

Vielen Dank für deinen Tipp!
 
Also in aller Kürze:
Aus ASCII (Hex) "5452 3734 3332" soll "TR7432" werden.

Was jetzt?

"5452...." ist jetzt Hex, also sowieso schon ASCII "TR...". Dann musst du wahrscheinlich für deinen String noch den Header ergänzen.
Wenn "5452...." allerdings ASCII sein sollte - was ich für sehr unwarscheinlich halte - wirds interessanter, ist aber auch zu schaffen.


EDIT:
Sorry, nicht bis zum Ende gelesen....
 
Zuletzt bearbeitet:
Zurück
Oben