Step 7 Array of Char -> String: Zykluszeit bei Schleifen

neibeck

Level-2
Beiträge
168
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ich hab folgendes Problem:

Ich brauche keine Erklärung bezüglich Umwandlung eines Array of Char in einen String. Das Problem das ich habe ist, dass in meiner Software insgesamt 30 Array of Char in Strings (mit Leerzeichen am Ende des Texts bis zur max. Länge) umgewandelt werden und dies die Zykluszeit gewaltig beeinflusst. Hat irgendjemand eine Idee wie sich das besser lösen lässt, ausser immer nur ein (oder eine bestimmte Anzahl von) Zeichen per Zyklus zu prüfen?

Mit bestem Dank,

Neibeck
 
das muss doch garnicht umgewandelt werden. ein Array of Char ist doch eigentlich schon ein String. Nur halt ohne die Längenbytes.
Was genau beeinflusst also deinen Zyklus? Nutzt du Chars_to_strg? ist das nötig?

Sind deine Arrays verschieden lang? sind deine Strings verschieden lang?

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem ist ja, ich benötige die Längenbytes! Der Text ist verschieden lang und eben ein Array of Char, alle nicht "benutzen" Zeichen werden am Ende mit Spaces gefüllt. D.h. die Schleifen werden zum berechnen der tatsächlichen Länge benötigt. Die Strings werden als dynamische Variable in Fehlermeldungen verwendet.
Was ist "Chars_to_Strg"?

EDIT: Wie oben ersichtlich gehts um Step7 bzw. S7-300, da gibts "Chars_to_Strg" nicht!
EDIT 2: "Chars_to_Strg" hat (bzw. hätte) für mich wieder 2 Probleme:
a.) ich hab nicht hex 0 als Endzeichen, sondern weitere hex 20. Trotzdem muss ich von hinten zu suchen anfangen, da durchaus im Text zwischen den Wörtern Leerzeichen sein können.
b.) ich frage mich wie das in dieser Funktion gelöst wird, falls nicht mit Schleifen?!
 
Zuletzt bearbeitet:
Dann könntest du das mal anders angehen. Statt da eine Schleife zu machen um die ungenutzten Zeichen zu finden. Pack das Array erstmal in einen String (AT überlagerung).

Code:
      Snd : Struct
         Byte1 : Byte;
         Byte2 : Byte;
         Sendebereich : Array[0..256] of Char;
      END_STRUCT;
      Sendestring AT Snd : String[240];

Mit FIND findest du dann z.B. zwei aufeinanderfolgende Leerzeichen (oder halt wie du mit der Schleife die Länge errechnet hast) damit weisst du schonmal die länge deines Strings. Das ist vermutlich effektiver als deine Längenberechnung.
 
Hab mir mal kurz den Code von FIND angesehn, is auch nix anderes als eine Schleife. Jedoch hatte ich grad die Eingebung (bzw im FIND gesehen :p) das ganze zumindest etwas zu optimieren, in dem man mit einem DWORD Vergleich statt byteweise zu suchen beginnt und bei ungleich Suchwert die letzten 3 Bytes noch vergleicht.
 
Zurück
Oben