TIA Struct teilweise kopieren

Sickone4

Level-2
Beiträge
68
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich habe mal eine Frage: Ich habe einem Kunden einen S7-Klassik Baustein auf TIA 15.1 migriert.
Dort waren eine ganze Menge AWL Aufrufe mit drin, welche z.B. via blockmove Daten verschoben haben.

In TIA habe ich den FB auf optimiert umgestellt. Und siehe da auf einmal hab ich ne ganze Menge Fehler.
Eigentlich habe ich bis auf zwei alle beseitigt.
Beides sind blockmoves. Und beide haben den gleichen Fehler:
Es wird beim Ersten Aufruf ein Datenbereich der viel zu groß ist in einen kleineren geschoben
und beim nächsten ein kleiner Datenbereich in einen größeren.
TIA meldet nun, dass die Längen unterschiedlich sind. Soweit ist das logisch.
Wie kann man das aber geschickt lösen. Es sind beides keine UDTs, selbst wenn sie es wären müsste das große ja aus zwei Teilen bestehen, damit man nur den ersten Teil kopieren kann

Gibt es eine elegante Lösung um innerhalb eines Fbs die Daten vernünftig zu schieben!? Meine Alternativlösung ist alle Variablen einzeln zuzuweisen, was nicht ganz so toll ist.

So sieht das im Original aus:
#IN/#OUT => sagen wir mal 100 Worte lang unterschiedlicher Datentypen
#Visu_Status.Von_Roboter/#Visu_Status.An_Roboter => sagen wir mal 60 Worte unterschiedlicher Datentypen

Die ersten 60 Worte verschiedener Dtaentypen sind aber identisch!

Code:
// Kopieren Ausgansbereich des Roboter // in Bereich der Visu
      CALL  BLKMOV
         blk_type:=Any
         SRCBLK  :=#IN
         RET_VAL :=#Temp_RET_VAL_IN
         DSTBLK  :=#Visu_Status.Von_Roboter






// Kopiere Eingangsbereich des Roboters 
// in den Bereich der Visu
      CALL  BLKMOV
         blk_type:=Any
         SRCBLK  :=#OUT
         RET_VAL :=#Temp_RET_VAL_OUT
         DSTBLK  :=#Visu_Status.An_Roboter

Freue mich, wenn es was eleganteres gibt, als alles von Hand zu Fuß zu machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi funkey,

das wäre sicherlich möglich, ich möchte aber nicht so arg viel an dem baustein ändern, bzw an den generellen strukturen, da sie von meinem kunden sind.
idr finden diese das nicht ganz so toll, wenn man deren bausteine grundlegend ändert.
 
Warum Umstellung auf "optimiert"? Da ändert sich doch die reelle Datenstruktur im DB!
Ich würde annehmen, daß es da jetzt ganz eigenartige Effekte durch die nun "anders" kopierten Daten gibt. Denn BLKMOV kopiert ja den Quelldatenbereich auf den Zieldatenbereich ohne Berücksichtigung der zugrundeliegenden Struktur. Da muß mindestens der Zustand optimiert oder nicht optimiert in Quelle und Ziel gleich sein, sonst geht es zwar, wird aber Blödsinn.

Ansonsten wäre, glaube ich, das Thema "AT-Sicht" und eine Zuweisung per SCL für dieses Problem ein Lösungsansatz. Geht aber natürlich nur bei nichtoptimerten Bausteinen.
 
Ich würde ebenfalls das AT-Konstrukt empfehlen. Du kannst den Baustein optimiert lassen, und die Remanenz auf "Im IDB setzen" einstellen.
 
Auch wenn es nicht explizit von Siemens gesagt wird, scheint es so zu sein, daß die Einstellung "im IDB setzen" die Optimierung abschaltet.
Wichtig ist zu beachten, daß bei optimierten Bausteinen der Entwickler keinen Einfluss auf die Anordnung der Variablen im Speicher mehr hat, worauf auch Onkel Dagobert hinweist!
 
Zurück
Oben