TIA Schwierigkeiten bei einem migrierten Baustein von Klassisch auf TIA

Edition35

Level-1
Beiträge
55
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen,

ich habe Probleme mit einem Baustein, den ich in TIA migriert habe.
Im folgenden Programmabschnitt soll ein gewählter Parametersatz in den aktuellen Parametersatz mittels Pointeradressierung kopiert werden.

Code:
     TAR1  #t_RettAR1           //Inhalt AR1 merken

      LAR1  P##t_P_Satz_1_20_any //Lade den Zeiger
//modifiziere Zeiger
      L     B#16#10              // Syntay
      T LB [ AR1 , P#0.0 ]
      L     B#16#2               // Byte oder Wort (2=Byte, 4=Wort)
      T LB [ AR1 , P#1.0 ]
      L     #Blockgroesse_Para_Satz_D// Anzahl der Bytes oder Worte die übertragen werden sollen
      T LW [ AR1 , P#2.0 ]
      L DINO                     // Nr. des Instanz-DB's laden
      T LW [ AR1 , P#4.0 ]
      L     P##_P_Satz_1         // Anfangsadresse laden    //UDT XY
      L     #t_Offset_Para_Satz_Nr// Offset laden
      SLD   3
      +D
      T LD [ AR1 , P#6.0 ]

      LAR1  #t_RettAR1           //AR1 restaurieren


//Bis hier her alles kein Problem

//Der Blockmove verusacht einen Bereichzugriffsfehler

      CALL  BLKMOV
         blk_type:=Variant
         SRCBLK  :=#t_P_Satz_1_20_any    //Any
         RET_VAL :=#t_RET_VAL
         DSTBLK  :=#t_P_Satz_aktu             //UDT XY

Wieso funktioniert das nicht? CPU ist eine 1511C.
Ich würde gerne den kompletten FB neu und moderner schreiben, aber mein Kollege der den Baustein entwickelt hat möchte wenn möglich alles so lassen wie es ist.

Danke für eure Hilfe.

Edit: Meine Vermutung ist , dass Blk_move variant den Any-Pointer falsch intepretiert.
 
Naja, was steht denn an der Stelle "Bis Hier kein Problem" im Any-Pointer?
Ist der FB auch "nicht optimiert"?
Vermutlich, so war es in einem anderen Thread ist das Problem aber das in der Anfangsadresse die mit L P##_P_Satz_1 geladen wird als Kennung DIX verwendet wird,
d.h. du bastelst einen Pointer mit DB"DINO".DI"_P_Satz_1 + t_Offset_Para_Satz_Nr".

Wobei das was man jetzt hier erkennen kann eigentlich geradezu nach SCL und Array OF UDT schreit.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort.
Ja ich würde es auch so Programmieren also mit array of UDT.
In der klassischen Welt läuft der Baustein.
Anbei ein Screenshot mit Beobachtungswerten.
Neue Bitmap.jpg
 
Also, wie vermutet, der Any wird mit Kennen DIX erzeugt.

Abhilfe:
Modele das 16#85..... auf 16#84.... um.
 
Goil! Soweit funktionierts mal! Danke

Ashampoo_Snap_2016.07.15_11h30m12s_003_.jpg

Kannst du mir sagen wieso es in der klassischen Welt funktioniert hat? Solle ich es im alten Baustein auch ändern?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute!

Stehe jetzt vor einem Projekt bei dem eine 1500 CPU verwendet werden soll, haben Vorlagebausteine die natürlich in S7 sind.
Habe gerade ein Video gefunden von Siemens in dem steht dass AWL Netzwerke nicht migriert werden können.

Jetzt habe ich diesen Beitrag gefunden, und da oben siehts mir verdächtig nach AWL aus, also meine Frage an alle, hat schon jemand Erfahrung mit solchen migrationen? Worauf sollte man achten usw.

Das Video war mit TIA V11, benutze derzeit V13 SP1 Upd9.

Vielleicht kann mir jemand beistehen, will nicht alles neu schreiben.
 
V13 SP1 Upd9 kann AWL, die CPU1500 auch. Das sollte eigentlich funktionieren.
Ich hatte mal ein Testprojekt migriert das fast nur aus AWL bestand, das funktionierte damals. CPU war eine 315-2DP.
 
AWL Migrieren ist ohne Probleme möglich. Zur 1500er. Die 1200er kann halt kein AWL.

Aber es ist auf jedenfall nötig das Programm danach mindestens mal durchzuprüfen. Der Aufwand ist IMHO geringer als früher der wechsel von S5 zu S7, aber nicht zu unterschätzen. Und man lässt natürlich alle weiterentwicklungen in der 1500er links liegen.

Zum Punkt warum der move auf ne Instanz trotz falscher Deklaration in der S7300 funktioniert hat, kann ich mir nur erklären dass für die S7-300 es egal war ob man auf eine Instanz wie auf einen GlobalDB zugriff, da die DBs intern immer einfach globale DBs waren. Ich zumindest hab die Typdeklaration des DBs in den Pointern auch nie umgesetzt. Ich hab eh immer nur auf DBs gepointert und da hab ich nicht unterschieden zwischen instanzdbs und Globaldbs.
Mit SCL habe ich die eigene Instanz sowieso immer Symbolisch adressiert.

mfG René
 
Zurück
Oben