TIA String innerhalb eines FBs kopieren?

Nimm SCL, da geht es, ohne daß man wissen muß wie. ;)

Ist der Zielstring groß genug?
Ist in dem Zielstring die Maximallänge eingetragen?

Ich habe mit TIA nur sehr wenig Erfahrung. Ich weiß nicht, ob in dem TIA das MOVE auch Strings kopiert, doch bei BLKMOV mußt Du aufpassen, wenn Du einen kürzeren Quellstring in einen längeren Zielstring kopierst - BLKMOV überschreibt nämlich die Maximallänge des Zielstrings!. Eigentlich müßte man LEFT oder CONCAT gut zum Kopieren von Strings verwenden können.

Harald
 
Du könntest den Ausgabestring in OUT statt IN_OUT deklarieren.

Strings an IN_OUT werden nicht direkt sondern per Referenz als 6-Byte-Pointer übergeben, BLKMOV benötigt aber einen 10-Byte-ANY. Du müßtest alternativ zunächst aus der an IN_OUT übergebenen Adresse einen ANY in TEMP zusammenbasteln, danach kannst Du BLKMOV mit dem TEMP-Any benutzen.

Harald
 
Hi, versteh ich jetzt nicht ganz. Ich hab am Input einen String mit einer Länge von 10 Zeichen deklariert. Am InOut habe ich einen UDT wo unter anderem ebenfalls ein String mit 10 Zeichen Länge drin ist. Wie bekomm ich den dann jetzt da rüber?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wie es dir Harald schon zu erklären versuchte.
Das Beste und Einfachste wäre, du nämest SCL - das willst du aber wohl nicht. Somit bleibt dir nur der schwierige Weg ...
Wenn du an deinem IN_OUT einen UDT dan hast dann ändert sich an Haralds Aussage mit dem Pointer dadurch nichts. Du hast da (in Wirklichkeit) einen Pointer, der dir die Adresse angibt, wo der UDT in Wirklichkeit steht. Du mußt dir also die Adresse laden, auf die der Pointer zeigt und ab der Adresse dann die 10 Bytes des AMY-Pointers des UDT's. Jetzt müßtest du auf diese Adresse noch die Offset-Verschiebung draufaddieren, die der String innerhalb des UDT's hat. Nun hättest du den ANY-Pointer auf den du mittels Blockmove deinen IN-Strings verschieben kannst.

Gruß
Larry
 
Herrlich kompliziert

Hallo,
wie es dir Harald schon zu erklären versuchte.
Das Beste und Einfachste wäre, du nämest SCL - das willst du aber wohl nicht. Somit bleibt dir nur der schwierige Weg ...
Wenn du an deinem IN_OUT einen UDT dan hast dann ändert sich an Haralds Aussage mit dem Pointer dadurch nichts. Du hast da (in Wirklichkeit) einen Pointer, der dir die Adresse angibt, wo der UDT in Wirklichkeit steht. Du mußt dir also die Adresse laden, auf die der Pointer zeigt und ab der Adresse dann die 10 Bytes des AMY-Pointers des UDT's. Jetzt müßtest du auf diese Adresse noch die Offset-Verschiebung draufaddieren, die der String innerhalb des UDT's hat. Nun hättest du den ANY-Pointer auf den du mittels Blockmove deinen IN-Strings verschieben kannst.

Gruß
Larry

Was bin ich froh, dass ich Codesys, .NET und C# normaler weise benutzen darf. Da gibt es solche Probleme nicht.:p
 
Hi!

Hallo zusammen,
wie kann ich in einem 300er FB einen String kopieren von z.B. Input zu Static. Weder mit dem Befehl Move noch mit Blkmov hab ich es hinbekommen.:confused:

Andi

Hiermit macht man das:
"Einfache Anweisungen"/"Verschieben"/"Fill"

EDIT:
Achso, von Input zu INOUT willst du kopieren... ...ja, das geht nicht. :)


Gruß,

Ottmar
 
Zuletzt bearbeitet:
Zurück
Oben