TIA SPLIT Funktion

dweber283

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

ich nutze TIA V19 mit einer S7-1515T-2P
ich bekomme von einem Keyence Handscanner aus einem Datamatrix-Code ein Array of Char.
Dieses sieht z.B. wie folgt aus wenn man es in einen String wandelt: '600638-1970-000//03//521022//5647375$R'
Ich möchte Dieses Array nun in mehrere Strings aufteilen. Als Separator sind die "//" vorhanden, der EndSeparator ist "$R"

Im Bild könnt ihr den Aufruf des SPILT Bausteins sehen. Dieser Liefert mir als Fehler immer den Fehlercode 8254. Dies bedeutet, dass ich am Parameter 2 (RecSeparator) einen ungültigen Datentyp verwende. Ich verstehe hier nicht warum mein Datentyp falsch ist. Der Eingang RecSeparator ist als Variant deklariert und sollte doch somit einen String "verstehen" in dem String steht '//'.

Kann mir jemand von euch sagen, was ich hier falsch mache?

Screenshot 2024-06-27 073907.png
 
Wenn ich als String nur ein Zeichen eingebe bleibt der Fehler. Wenn ich es als Char deklariere und nur ein Zeichen eingebe kommt der Fehler nicht mehr. Aber bringt mich ja nicht weiter, da ich zwei Zeichen als Separator habe.

Wenn ich mit Char arbeite kommt als nächstes der Fehler 80B5 (Das zu lesende Array ist zu klein). Versteh ich aber auch nicht, warum das zu klein sein soll.
 
Aus der Hilfe
Wenn Sie zum Beispiel am Parameter SrcArray ein Array mit dem Datentyp CHAR verwenden, müssen Sie sowohl für die Trennzeichen (Rec-/EndSeparator) den Datentyp CHAR als auch die Struktur am Parameter DestStruct nur Zeichenketten vom Datentyp STRING enthalten.

Wie ist dein SrcArray deklariert? Ist das ein Array of Char?

-chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist es doch, denn das $ ist ein Escapezeichen, mit dem der Compiler rafft, dass Du Carriage return erzeugen willst, ein %R ist einfach ein %R und kein CR.
Du magst recht haben, dass es später ein Problem gewesen wäre. Aber für den oben erklärten Fehler war es unrelevant.

Für was ist dann der Eingang RecSeparator als Variant deklariert, wenn er dann eh nur Char zulässt? Ist ja dann kompletter humbuck
 
Ja, Array of Char [0..127]. Ist von dem handscanner vorgegeben

Dann muss dein Trennzeichen auch ein Char sein laut Hilfe.

Kannst du es mal Testweise vorher in ein String wandeln und an den Baustein legen? Dann solltest du auch als Trennzeichen und Endzeichen ein String angeben können, so verstehe ich das zumindest.

-chris

EDIT:
SrcArray lässt nur Char / WChar zu, daher ist ein String dort nicht möglich.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Laut Hilfe geht da nur ein Zeichen. (Ist da schon etwas ungünstig ausgedrückt)

A3Q: Betrifft eigendlich nur den Unterschied Char/WChar...

Das dein Array zu klein ist hängt an deinem Endezeichen!
 
Du könntest mit einer Schleife, in der Du mit Find die Position der '//' ermittelst und mit Replace durch z.B. '/' ersetzt und dann durch den Split jagst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du magst recht haben, dass es später ein Problem gewesen wäre. Aber für den oben erklärten Fehler war es unrelevant.

Für was ist dann der Eingang RecSeparator als Variant deklariert, wenn er dann eh nur Char zulässt? Ist ja dann kompletter humbuck
Lies Dir den Beitrag #6 von @A3Q nochmals durch und da speziell den Auszug aus dem Handbuch.
Das spielt für Deinen Fehler eine ganz große Rolle. Wenn der Typ von SrcArray ein ARRAY OF CHAR ist, müssen die RecSeparator und EndSeparator vom Typ CHAR sein, bei Dir ist RecSeparator aber ein String und dadurch kommt es zum Fehler.
Nachtrag: Sorry, habe zwei Beiträge vermischt. Der Kommentar vom OP bezog sich nicht auf den Beitrag von @A3Q. Nichts desto trotz, wenn die Quelle ein ARRAY OF CHAR ist, dürfen als Separatoren nur CHARs angegeben werden, da beißt die Maus keinen Faden ab.
 
Zuletzt bearbeitet:
Habe ich, habe ich auch verstanden. Nur kann man am Eingang SrcArray, ja nur ein Array of Char verschalten. Von daher geht an den Separatoren ja immer nur Char. Daher vorstehe ich nicht, warum der Eingang als Variant deklariert ist und warum Siemens hier so unflexibel ist
 
Zurück
Oben