Step 7 S7 317 BlockMove Daten verschoben / unvollständig

Chris86

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich habe folgendes Problem:
Es werden über einen DB Daten eingelesen, diese werden über einen weiteren DB zwischengespeichert und dann in den endgültigen DB geschrieben.

Quasi so:
DB1410.DBB42 BYTE 30 ->BLKMOV -> P#DB1411.DBB16 BYTE 30 -> BLKMOV -> P#DB1420.DBB40 BYTE 30

bis zum letzten verschieben handelt es sich um einen ARRAY[1...30], bis es zuletzt in einen STRING[30] geschrieben wird.

Problem:
Es wird ein 29 Stelliger Code eingelesen, die ersten Beiden Zeichen werden allerdings nicht mit an den externen übertragen. (ihm fehlen die ersten beiden Zeichen)
Wenn ich mir die einzelnen Datenbereiche in der VAT ansehe, verschiebt sich die Symbolik beim zweiten BLKMOV auch nach hinten....

Ich hoffe ihr könnt mir helfen, und dies ist nicht zu kryptisch geschrieben...
 
ein string[30] hat die länge von 32 byte.
byte0 = max länge des strings
byte1 = tatsächliche länge des strings
byte 2 bis x = die zeichen

welche steuerung? wenn1500/1200 gibt es einen fertigen baustein um ein array of char in einen string zu wandeln
wenn 300/400 schau mal hier

dein letzter move sollte ehr so aussehen wenn du nicht die fertigen bausteine nimmst
P#DB1420.DBB42 BYTE 30
L 30
T DB1420.DBB40 //maxlänge
T DB1420.DBB41 //istlänge
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
bis zum letzten verschieben handelt es sich um einen ARRAY[1...30], bis es zuletzt in einen STRING[30] geschrieben wird.
Problem:
Es wird ein 29 Stelliger Code eingelesen, die ersten Beiden Zeichen werden allerdings nicht mit an den externen übertragen. (ihm fehlen die ersten beiden Zeichen)
Was meinst du mit "den externen"?
Was ist das Problem?
Wenn du 30 Zeichen aus einem Char/Byte-Array in einen String mit 30 Zeichen kopieren willst, dann muss vorher das erste Header-Byte des String auf (mindestens) 30 initialisiert sein. Siehe die Hilfe zum Aufbau des Datentyps STRING

welche steuerung?
laut Thread-Titel eine S7-317
ob Step7 classic oder TIA wurde keine Angabe gemacht
 
Zuletzt bearbeitet:
erst mal Danke,
S7-317 mit Step7 classic.

mit extern meine ich meinen Automatisierer dem ich die Daten zur Verfügung stelle.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und was ist jetzt das Problem? Kommen die Daten nicht an oder zu kurz oder verschoben? Oder sehen die nur beim Beobachten unerklärlich komisch aus?
Will der Kommunikationspartner überhaupt die 30 Zeichen als S7-String haben oder vielleicht doch auch als Char-Array?

Wie ist der Kommunikationsbereich der 30 Zeichen zum "externen" deklariert? Wenn das ein String[30] sein soll, dann passt die Angabe P#DB1420.DBB40 BYTE 30 nicht, sondern du solltest den Bereich symbolisch angeben z.B. "DB1420".Ausgangsdaten.Code
 
Zuletzt bearbeitet:
Und was ist jetzt das Problem? Kommen die Daten nicht an oder zu kurz oder verschoben? Oder sehen die nur beim Beobachten unerklärlich komisch aus?
Will der Kommunikationspartner überhaupt die 30 Zeichen als S7-String haben oder vielleicht doch auch als Char-Array?

Wie ist der Kommunikationsbereich der 30 Zeichen zum "externen" deklariert? Wenn das ein String[30] sein soll, dann passt die Angabe P#DB1420.DBB40 BYTE 30 nicht, sondern du solltest den Bereich symbolisch angeben z.B. "DB1420".Ausgangsdaten.Code
Problem ist:
Es wird ein Code im Format ABCDEFGHIJKLMNOPQRSTUVWXYZ123 eingelesen.
Extern kommt folgendes an: CDEFGHIJKLMNOPQRSTUVWXYZ123...

Gefordert ist tatsächlich ein S7-STRING

So sieht das Programm aktuell aus:
1744115506537.png1744115601858.png1744115647783.png
 

Anhänge

  • 1744115533845.png
    1744115533845.png
    77,5 KB · Aufrufe: 4
Zuviel Werbung?
-> Hier kostenlos registrieren
Problem:
Es wird ein 29 Stelliger Code eingelesen, die ersten Beiden Zeichen werden allerdings nicht mit an den externen übertragen. (ihm fehlen die ersten beiden Zeichen)
Ich interpretiere das so, dass die ersten beiden Zeichen durchaus übertragen werden und beim Partner auch ankommen, er die aber als String-Header-Bytes interpretiert und nicht anzeigt.
Wie ich bereits in #6 schrieb, muss beim BLKMOV der Zielstring symbolisch angegeben werden, und nicht nur der Bereich der ersten 30 Bytes von den 32 Bytes des String[30].

PS: eventuell/ungetestet geht es auch so: P#DB1420.DBX40.0 STRING 30
 
Zuletzt bearbeitet:
... oder den Sendebereich so deklarieren:
Code:
DB1420
...
40.0 Code_S7H1 : BYTE
41.0 Code_S7H2 : BYTE
42.0 Code : ARRAY [1..30] OF CHAR
dann kann man den BLKMOV so schreiben
Code:
   +----+
30-|MOVE|-DB1420.DBB40
   +----+
   +----+
30-|MOVE|-DB1420.DBB41
   +----+

------+
BLKMOV|
   ...|
DSTBLK|-P#DB1420.DBX42.0 BYTE 30
------+

PS: das Bild in #8 passt nicht zur Adresse in #1
 
Zuletzt bearbeitet:
... oder den Sendebereich so deklarieren:
Code:
DB1420
...
40.0 Code_S7H1 : BYTE
41.0 Code_S7H2 : BYTE
42.0 Code : ARRAY [1..30] OF CHAR
dann kann man den BLKMOV so schreiben
Code:
   +----+
30-|MOVE|-DB1420.DBB40
   +----+
   +----+
30-|MOVE|-DB1420.DBB41
   +----+

------+
BLKMOV|
   ...|
DSTBLK|-P#DB1420.DBB42 BYTE 30
------+

PS: das Bild in #8 passt nicht zur Adresse in #1
genau das gleiche habe ich doch schon in post #2 geschrieben
 
Zurück
Oben