Step 7 String CONCAT geht nicht richtig

TECO

Level-2
Beiträge
51
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Lieben Experten,

ich habe ein Problem mit meinem CONCAT Baustein, leider schneidet er einen String ab.
In dem Baustein setzte ich mehrere Strings zu einem großen String zusammen
Hier ist der Baustein
1772023414047.png

So rufe ich in in meinem Programm auf
1772023539951.png

es soll aus dem Block 001 - 003 ein String werden und der Block 001 String ist Maximal 50 Zeichen während die zwei andern Blöcke deutlich kürzer sind
ich schicke aktuell 34 Zeichen in den FB
1772024382287.png
das ganze wird zusammengesetzt, aber er schneidet mir dann ab dem Zeichen 19 alles ab.
siehe nächstes Bild
1772024560346.png
ab dem Zeichen 54 macht er nicht so weiter wie er soll.

Ich hoffe ihr könnt mir weiter helfen.

Falls noch fragen habt könnt ihr euch gerne melden.

Danke schon mal für eure Hilfe

Euer TECO
 
DB900.DBB0 - die max Länge vom String
DB900.DBB1 - die tatsächliche Länge

wenn in Byte1 0 drin steht, kommt es zu deinem Problem. Das bitte bei allen kontrollieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du Laser_Inhalt_001 einmal in der Länge definieren und einem festen Wert zuweisen?
Anhang anzeigen 94543
So das wäre der ganze String
WX,Job=3,BLK=0,Characterstring=441037120022222019990-2324948-1D,BLK=1,Characterstring=88888888,BLK=2,Characterstring=33322,

ich habe es jetzt mal so gemacht
1772056464905.png
das ganze ist bei mir ein FB, aber es geht leider immer noch nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wurden die DB auch initialisiert vor dem Laden in die CPU? Im Editor Ansicht "Datensicht", dann Bearbeiten > Datenbaustein initialisieren, dann Laden in CPU

Schau dir mal in den VAT von allen Strings die Headerbytes in HEX an, nicht als ZEICHEN
In deinen Bildern leider schlecht zu erkennen: MaxLänge = 'b' und IstLänge = 't' kann/darf so gar nicht sein, weil da wäre die IstLänge > MaxLänge.

Könnte es sein, dass dein Programm außerhalb des FB noch in die Strings schreibt, evtl. unbeabsichtigt?

Nicht schön: FB Input-Parameter "Block_..." mit großem Anfangsbuchstabe deklariert, im Code alle kleingeschrieben "block_...
 
Wurden die DB auch initialisiert vor dem Laden in die CPU? Im Editor Ansicht "Datensicht", dann Bearbeiten > Datenbaustein initialisieren, dann Laden in CPU

Schau dir mal in den VAT von allen Strings die Headerbytes in HEX an, nicht als ZEICHEN
In deinen Bildern leider schlecht zu erkennen: MaxLänge = 'b' und IstLänge = 't' kann/darf so gar nicht sein, weil da wäre die IstLänge > MaxLänge.

Könnte es sein, dass dein Programm außerhalb des FB noch in die Strings schreibt, evtl. unbeabsichtigt?

Nicht schön: FB Input-Parameter "Block_..." mit großem Anfangsbuchstabe deklariert, im Code alle kleingeschrieben "block_...
Ich habe das ganze nochmals initialisiert und neu geladen
aber es sieht immer noch so aus

Hier ist das ganze in HEX
1772145531706.png

1772145563512.png

Ich habe es jetzt schön gemacht

Den DB 901 verwenden ich nur noch für einen BLKMOV

Danke
 
Zuletzt bearbeitet:
In DB900.DBB1 steht B#16#12 - das bedeutet, dass der String Block_POS1_DMC_1 nur eine aktuelle Länge von 18 Zeichen hat und der CONCAT nimmt daher nur die ersten 18 Zeichen. Wieso erwartest du, dass da mehr Zeichen kommen müssten? Wie und wo schreibst du mehr als 12 Zeichen in den String Block_POS1_DMC_1 ?
 
Zuletzt bearbeitet:
Hab jetzt nicht den ganzen Thread gelesen. Vielleicht kommt die Konfusion durch die Indizes zustande.
In der SPS-Welt ist das Ende immer inklusiv, deswegen auf beiden Seiten die eckigen Klammern. In der Mathematik nutzt man für Zahlenreihen eckige Klammern, wenn der exakte Wert erreicht wird und runde Klammern, wenn an den Wert angenähert wird, dieser aber nicht erreicht werden kann.

Wenn ich einen Bereich angebe und nicht viel denken will, fange ich bei 1 an. Das Ende ist dann die Anzahl der Elemente, dessen Größe vom Datentyp abhängig ist. Ich hoffe, das ist halbwegs verständlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In DB900.DBB1 steht B#16#12 - das bedeutet, dass der String Block_POS1_DMC_1 nur eine aktuelle Länge von 18 Zeichen hat und der CONCAT nimmt daher nur die ersten 18 Zeichen. Wieso erwartest du, dass da mehr Zeichen kommen müssten? Wie und wo schreibst du mehr als 12 Zeichen in den String Block_POS1_DMC_1 ?
Ich weiß nicht wie da die 18 dort hin kommt?
Wie kann ich das Ändern?

So das ca. 40 Zeichen weiter gegeben werden.

Danke
 
Die sind da seit der DB-Initialisierung des Anfangswertes im Projekt. Danach schreibst du irgendwo in nicht korrekter Weise in den String, ohne dass die aktuelle Länge angepasst/eingetragen wird. Denke nochmal über meine Frage nach:
Wie und wo schreibst du mehr als 12 Zeichen in den String Block_POS1_DMC_1 ?
 
Die sind da seit der DB-Initialisierung des Anfangswertes im Projekt. Danach schreibst du irgendwo in nicht korrekter Weise in den String, ohne dass die aktuelle Länge angepasst/eingetragen wird. Denke nochmal über meine Frage nach:
Danke für den Tipp
Ich habe mich auf die Suche gemacht und eine Doppel Beschreibung gefunden.
Nun funktioniert alles
siehe Foto
1772441509703.png


Nochmals Danke für die Hilfe.
 
Zurück
Oben