Ret_val nach BLKMOV

Kodan

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

benutze eine Vorlage von Siemens (FAQ)um einen DB in den anderen zu kopieren.
Per Blkmov über einen FC.
Nun mein Poblem.
Ist der der Ziel DB länger als der Quell-DB so wird mir ein RET_VAT 8003 (unterschiedliche länge) gemeldet.Was auch klar ist.
Und die Übertragung wird abgebrochen.
Hab die Fehlerausgabe schon rausgeschmissen. Wird der Ret-Val auch für interne Funtkionen benutzt auf die ich kein Zugriff habe?

Mein Ziel-DB muß aber länger bzw. gleich lang sein wie der längste Quell-DB. (ca. 60 versch. lange Quell-DB´s).

Wie kann ich diesen Fehler-/Fehlermeldung umgehen?

Gruß

Der link zu Siemens FAQ ...Benutze das 2-te Programm.

http://support.automation.siemens.com/WW/view/de/2738030
 
DB Länge

Warum überprüfst Du in Deinem Programm nicht vorher die Länge der DB? Dann kannst Du den BLKMOV doch für den ermittelten Bereich ausführen. Wäre das nicht viel sauberer?

Kieler
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die 8003 wird hier aber vom projekt generiert, das ist keine fehlerinformation des SFC20 BLKMOV ...

Quell- und Zielfeld dürfen sich nicht überlappen. Ist das angegebene Zielfeld
größer als das Quellfeld, dann werden auch nur so viele Daten in das Zielfeld
kopiert, wie im Quellfeld stehen.
Ist das angegebene Zielfeld kleiner als das Quellfeld, dann werden nur so viele
Daten kopiert, wie das Zielfeld aufnehmen kann.

also solltest du die größen-prüfung abschalten, z.b. auskommentieren :rolleyes:
 
Hallo,

das funktioniert so nicht mit dem Beispiel, da im FC81 vorher die Gleichheit der DB's geprüft wird
Code:
// Check Equal Source- and Destination Length
// if different exit with Ret_Val H8003
      L     #Src_Len
      L     #Dsc_Len
      ==I   
      SPB   L_OK
      L     W#16#8003
      T     #RET_VAL
      BEA
und zudem die Länge des Ziel-DB als Länge für den Zielblock angegeben wird.
Code:
// Number of Bytes to Copy
      L     #Test_DB_Length
      T     W [AR1,P#2.0]
Das wäre dann so als ob als Quelle z.B. P#DBX0.0 BYTE 10 und als Ziel P#DBX0.0 BYTE 20 deklariert wird.


Damit es grundsätzlich erstmal funktioniert musst Du die Gleichheits-Abfrage der DB's entfernen und die Länge des Quell-DB's als Länge für den Ziel-DB eintragen.

Code:
// Number of Bytes to Copy
      L     #Src_Len
      T     W [AR1,P#2.0]
 
Funktioniert so jetzt einwandfrei

Hi zusammen...


Das abschalten der Abfrage (länge DB hatte ich schon entfernt) und die Änderung der Anzahl der zu übertragenden Bytes hat die Lösung gebracht...


Danke an alle ..besonders an MTec...

Es zeigt ich hab noch nicht alles verstanden was das Pointerformat angeht...

Gruß Kodan
 
Zurück
Oben