TIA 40Word langes ASCII-codierter Array of Word nach String konvertieren

ChristianVogel

Level-2
Beiträge
475
Reaktionspunkte
69
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe hier bereits ähnlich Beiträge gefunden, diese sind aber elendig alt. Erfahrungsgemäß bekomme ich dann wieder einen Anschiss, weil ich altes Zeug aufwärme, daher eine neue aktuelle Anfrage…

Ich nutze grade TIA18, Steuerungssystem soll die 1500er Baureihe sein, im kleinsten Fall die ET200SP CPU1510

Folgendes:

- Ich lese per Modbus Holding-Register mit insgesamt 120 Word Länge am Stück aus, das funktioniert!
- Diese schreibt mir der MB-Client in ein „Array[0..125] of Word“, das funktioniert auch!
- In diesem ganzen Word-Array-Bereich ist ein „Status Code“ als „ASCII-Text (40 Word String)“. Enthalten.
- Dieser beginnt in diesem „Array of Word“ ab Word 50

So jetzt uffbasse:
>>> Ich tüftle grade mit S_MOVE, Chars_TO_Strg und diversen MOVE-Funktionen rum, komme aber nicht wirklich ans Ziel…
>>> Gibt es einen eleganten und einfachen Weg, wie ich die 40 Word aus dem Quellbereich lesen kann und direkt auf eine String-Variable schreiben kann? Das ganze soll erstmal auf einem HMI als Text dargestellt werden…
>>> Oder muss ich das erstmal in einen „Array of Char“ konvertieren und in den Temp-Bereich schieben? Char sind ja 8bit, ich habe aber 16bit Word als Quelle…
>>> Ist der String dann 80Char lang bei 40Word, oder ist bei der Codierung 1Char=1Word? Da finde ich keine Infos drüber…

Soweit mal vielen Dank
Gruß Christian
 
String ist (mittlerweile) ein weites Thema.
Wenn du in deinen Word keine Werte > 255 bzw. Hex FF hast, dann ist ein Zeichen drin.
Hast du größere Werte drin, dann gibt es 2 Möglichkeiten:
Entweder du hast dann 2 Zeichen pro Word oder es ist ein UTF-codierter String.
Bei UTF kannst Glück haben. Wenn es UTF16 ist, dann kannst mit WSTRING arbeiten.

Dann spielt natürlich auch der Aufbau eines String ne Rolle.
Hier gibt es auch zig Varianten. Es gibt feste Länge, verschiedene Endezeichen (00, 0A, 0D, 0D 0A, 03 oder 04) oder Pascal-Strings wie sie Siemens verwendet mit max. Länge und aktueller Länge am Anfang.
 
Vielne Dank bisher... Laut Handbuch erfahre ich nur "ASCII-Code ...40 Words in String..." da werde ich dann mal tiefer graben müssen... Ergibt das Sinn, dass ich das erstmal ins "Temp" kopiere?
Anscheinend bekommi das tatsächlich nicht direkt in CHAR oder STRING kopiert... :cry: Hoffentlich stimmt zumindest die Länge im Modbus-Bereich, da habe ich auch meine Zweifel, nicht dass da unsinnigeszusammengewürfelt wird...
 
Zurück
Oben