BLKMOVE kopiert keinen String mit PLCSIM?!!

Wassermann

Level-1
Beiträge
51
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum!
Ich simuliere gerade mit PLCSIM einen Datenverschiebung von 20 Byte mit SFC20 BLKMOVE. Inerhalb der 20 Byte befindet sich auch ein String. Alle Daten bis auf den String werden korrekt verschoben. Der String bleibt praktisch unangetastet. Mir ist im Online-Modus aufgefallen, dass der Hintergrund der Stringvariable im Datenbaustein ausgegraut ist-im Gegensatz zu den Variablen, die sich verschieben lassen. Kann es sein sein, dass sich Strings mit BLKMOVE generell nicht verschieben lassen???? Bin etwas ratlos und würde mich über ein paar Ratschläge freuen :)
Gruß Volker

PS:Ich habe mal in den Anhang einen Screenshot gehängt.Der Ursprungsdatensatz ging von 1576 bis 1616. Der Zieldatensatz geht von 1616 bis 1656. Wie man sieht wurden alle Daten übertragen bis auf den String. Was auffällt, ist auch, dass der Ursprungsstring nicht gelöscht ist:confused:
 

Anhänge

  • ScreenShot002.jpg
    ScreenShot002.jpg
    103,4 KB · Aufrufe: 45
...
PS:Ich habe mal in den Anhang einen Screenshot gehängt.Der Ursprungsdatensatz ging von 1576 bis 1616. Der Zieldatensatz geht von 1616 bis 1656. Wie man sieht wurden alle Daten übertragen bis auf den String. Was auffällt, ist auch, dass der Ursprungsstring nicht gelöscht ist:confused:

Erstens kann Quelle(Ursprung) und Ziel sich nicht überschneiden, d.h. dein Ziel fängt bei 1616 an, die Quelle hört bei 1616 auf????

Zweitens wird lt. deinem Screenshot nicht nur der String nicht kopiert, vgl z.B. 1580 mit 1620.

Deine Pointer sollten lauten Quelle P#DBxy.DBX1576.0 Byte 38 und Ziel P#DBxy.DBX1616.0 Byte 38

Für deine Anwendung empfiehlt sich ein UDT "k" zu implementieren.

MfG MK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo MK erstmal danke für deinen gründlichen Blick! zu1) Die Datenbereiche überschneiden sich praktisch nicht. Es werden ab Byte 1576 40 Byte kopiert. Hatte ich ungenau ausgedrückt... zu2) Der Quelldatensatz wird nach dem Verschieben gelöscht, deshalb sind 1580 und 1620 ungleich. Tatsächlich sind die Daten vor dem String und nach dem String richtig verschoben, nur der String selbst nicht - und er wird auch nicht gelöscht, obwohl die Daten im Quelldatensatz davor und danach gelöscht werden???!! Was ist denn ein UDT "k" ??? Viele Grüße Volker
 
Du kannst Strings nicht in der Onlinesicht eines Datenbausteins beobachten!

Von Step7 aus ist es nur möglich sich den Inhalt von Strings über eine Variablentabelle anzeigen zu lassen - und dort auch nur zeichenweise.
Mal angenommen dein String ist 254 Zeichen lang, so legst du dir 256 Bytes aus dem Datenbaustein hintereinander an. Die ersten beiden Bytes stellst du im Anzeigeformat auf DEZ, die restlichen auf Anzeigeformat ZEICHEN.
Das erste Byte ist die String-Maximallänge, das zweite Byte ist die Aktuallänge.
 
Was ist denn ein UDT "k" ??? Viele Grüße Volker

Auszug aus dem Step7 Handbuch:

9.3.2 Anwenderdefinierte Datentypen (UDT)
Anwenderdefinierte Datentypen sind von Ihnen erzeugte spezielle Datenstrukturen, die Sie nach Ihrer
Definition im gesamten S7-Anwenderprogramm verwenden können.
• UDTs können wie elementare Datentypen oder zusammengesetzte Datentypen in der
Variablendeklaration von Codebausteinen (FC, FB, OB) oder als Datentyp für Variablen in einem
Datenbaustein (DB) verwendet werden. Damit haben Sie den Vorteil, dass Sie eine mehrmals zu
verwendende, spezielle Datenstruktur nur einmal definieren und sie anschließend beliebig vielen
Variablen zuweisen können.
• UDTs können als Vorlage für die Erstellung von Datenbausteinen mit gleicher Datenstruktur
dienen, d. h. Sie erstellen nur einmal die Struktur und erzeugen anschließend die benötigten
Datenbausteine durch einfache Zuweisung des UDTs (Beispiel Rezepturen: Die Struktur des DB
ist immer gleich, nur die Mengenangaben sind unterschiedlich).

• Anwenderdefinierte Datentypen werden - wie die übrigen Bausteine auch - im SIMATIC Manager
oder im inkrementellen Editor angelegt.

D.h. du schreibst einen UDT sagen wir k bzw. Waschmaschine und im DB legst du dann k1,k2,k3... oder Waschmaschine 1, Waschmaschine 2 ... mit dem Datentyp "UDTxxx" an. Spart ein haufen Tipparbeit, vorallem wenn noch zusätzliche Variablen dazukommen und am BLKMOV steht auch ein Symbol statt eines Pointers.


Ansonsten scheint dein BLKMOV richtig, natürlich 40Byte und Thomas_v2.1 hat recht mit dem Beobachten von Strings. Da dein String eine maximale Länge von 28 Zeichen hat musst du nicht mehr in der Variablentabelle beobachten.

Gruß MK
 
Hallo!

@ Zefix: Super, das funzt :)

@Mäuseklavier: Das mit dem UDT klingt gut! Kann ich aber auf einzelne Daten innerhalb des UDTs zugreifen, zum Beispiel zum Visualisieren oder rechnen?
Wenn ich jetzt nur das Gewicht in Kammer1 der Waschmaschine o.ä. benötige.

PS: An der Stelle schon mal danke für die hilfreichen Hinweise! Wenn ich den Link finde, sage ich noch offiziell "Danke".
 
Zurück
Oben