s5->s7 Übersetzung DW-Transfer Funktion

superkato

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

in einer S5 wurde eine Transfer Funktion verwendet, welche Daten aus dem Schmiermerker (MW220 - 220 ) in ein DB geschrieben hat.

FC
Code:
      L     #OFFS
      L     #RZNR
      +I    
      T     MW   218
//;
      L     #OFFS
      <=I   
      SPB   M001
      L     #ANZ
      +I    
      L     MW   218
      <I    
      SPB   M001
//;
      T     #conv_akku1
      L     MB   219
      T     #conv_index
      TAK   
      L     #conv_akku1
      AUF   DB [#conv_index]
      L     DBB    3
      L     1
      <>I   
      SPB   M002
      ==I   
      =     #VORH
      SPA   M001
//;
M002: T     DBB    3
      U     #VORH
      R     #VORH
//;
      CALL  "FB 70"
//;
      CALL  "FB180"
       Q_DB:="DB 98"
       QANF:=110
       Z_DB:="DB  8"
       ZANF:=31
       ANZ :=4
//;
[I][B][COLOR=#ff0000]     CALL  "FB 71"
       Q_DB:="DB  8"
       QANF:=2
       ZANF:=2
       ANZ :=41
[/COLOR][/B][/I]//;
      AUF   "DB  8"
      L     W#16#0
      T     DBW   60
      L     W#16#2020
      T     DBW   70
      T     DBW   72
      T     DBW   74
      T     DBW   76
      T     DBW   78
      T     DBW   80
//;
M001: NOP   0

Innen drin siehts so aus:


Code:
FB 71                                         LAE=63
Netzwerk 1                   DW-TRANSFER MIT DB-QUELLANGABE   FUP Ausgabe
    
Name :DW-TRANS
Bez  :Q-DB      E/A/D/B/T/Z: B
Bez  :QANF      E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF
Bez  :ZANF      E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF
Bez  :ANZ       E/A/D/B/T/Z: D  KM/KH/KY/KC/KF/KT/KZ/KG: KF     :
     :LW  =Q-DB
     :T   MW 220
     :
     :LW  =QANF
     :T   MW 222
     :
     :LW  =ZANF
     :T   MW 226
     :
     :LW  =ANZ
     :T   MW 228
     :
M001 :B   MW 220
     :A   DB   0
     :B   MW 222
     :L   DW   0
     :
     :B   MW 218
     :A   DB   0
     :B   MW 226
     :T   DW   0
     :
     :L   MW 222
     :I        1
     :T   MW 222
     :
     :L   MW 226
     :I        1
     :T   MW 226
     :
     :L   MW 228
     :D        1
     :T   MW 228
     :L   KF +0
     :>F
     :SPB =M001
     :
     :NOP 0
     :BE

Step 7 hats so übersetzt:


Code:
FUNCTION FC 36 : VOID
  NAME: DW_TRANS  // DW-TRANS
  VAR_INPUT
    Q_DB      :block_db;  // Q-DB
    QANF      :int;       // QANF
    ZANF      :int;       // ZANF
    ANZ       :int;       // ANZ
  END_VAR
  VAR_TEMP
   conv_akku1 :dword;
   conv_akku2 :dword;
   conv_stw   :word;
   conv_index :word;
  END_VAR
  BEGIN
  NETWORK
  TITLE = DW-TRANSFER MIT DB-QUELLANGABE
       //;
  //      L   #Q_DB;
  // *** Fehler in Zeile     560  (FB  71):  Operator ungültig, kann eventuell durch die Anweisung:\"L   P##Q_DB\" ersetzt werden. ***
       T   MW 220;
       //;
       L   #QANF;
       T   MW 222;
       //;
       L   #ZANF;
       T   MW 226;
       //;
       L   #ANZ;
       T   MW 228;
       //;
  M001:NOP 0;
       T   conv_akku1;
       L   MB 221;
       T   conv_index;
       TAK;
       L   conv_akku1;
       AUF DB [conv_index];
       T   conv_akku1;
       L   STW;
       T   conv_stw;
       L   MB 223;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku1;
       L   DBW [ AR1, P#0.0 ];
       //;
       T   conv_akku1;
       L   MB 219;
       T   conv_index;
       TAK;
       L   conv_akku1;
       AUF DB [conv_index];
       T   conv_akku1;
       TAK;
       T   conv_akku2;
       L   STW;
       T   conv_stw;
       L   MB 227;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku2;
       L   conv_akku1;
       T  DBW [ AR1, P#0.0 ];
       //;
       L   MW 222;
       INC 1;
       T   MW 222;
       //;
       L   MW 226;
       INC 1;
       T   MW 226;
       //;
       L   MW 228;
       DEC 1;
       T   MW 228;
       L   0;
       >I;
       SPB M001;
       //;
       NOP 0;
Könnt ihr mir vielleicht helfen wie ich den Baustein am besten ersetzt bekomme?


Viele Grüße
SK
 
Zuletzt bearbeitet:
Hallo,
dazu wäre der S7-Blockmove gedacht (SFC20).
Der würde genau das machen - du mußt dafür nur den Quell- und den Ziel-Datenbereich entweder sysmbolisch oder als selbst erstellten ANY-Pointer an den Baustein übergeben ...

Gruß
Larry
 
Zurück
Oben