LIR 0 S5 nach S7

bresner1

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

Ich habe ein Problem mit dem LIR 0 befehl. Ich übersetze ein S5 projekt nach S7 und weiss nicht wie ich den Lir 0 befehl ersetzen kann.:confused:
Habe bereits 2 änderungen vorgenomen und wäre froh wenn man mir auch bei diesen bestätigen könnte das dies so funktioniert

Danke im voraus


Code:
       AUF DB 21;                // DB Wartungsdatei
       UN  #RES;                 // Wartungs Trigger (Minutentakt)
       SPB M001;
       L   0;                    // bei Zeittrigger Anfang
       T   DBW 10;               // Neustart
       SPA M002;
       //;
  M001:L   DBW 10;               // aktuelles Event in Arbeit
       L   100;                  // max. 100 Events
       <=I;
       SPB M002;
       L   0;                   // Neustart bei event 1
       T   DBW 10;
  M002:L   DBW 10;               // Indexreg. aktuelles Event
       L   100;                 // max 100 Events
       ==I;
       R   #TRIG;               // Ruecksetzen Zeittrigger
       TAK;
       L   21;                  // Offset Lesezeiger (ab DW 21)
       +I;
       T   DBW 12;              // Indexregister Lesezeiger
       L   100;                 // Offset Vergleichspuffer
       +I;
       T   DBW 14;              // Indexregister Vergleichspuffer
       //;
                                // laden Eventdaten
       T   conv_akku1;
       L   STW;
       T   conv_stw;
       L   DBB 13;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku1;
       L   DBW [ AR1, P#0.0 ];
       T   MW 33;               // Zwischenspeicher Eventdaten
       L   W#16#0;              // "0" nicht erlaubt
       <>I;                     // aktuelles Event belegt
       SPB M003;                // Daten bearbeiten
       L   DBW 10;              // Indexregister aktuelles Event
       INC 1;
       T   DBW 10;              // Zeiger auf naechstes Event
       L   100;                 // max. 100 Events
       >=I;
       R   #TRIG;               // Ruecksetzen Zeitraster
       BEB;
       SPA M002;
       //;
  M003:L   MB 34;                // Byteinfo aktuelles Event
       T   DBW 2;               // Byte Nr. aktuelles Event
       L   MB 33;
       L   2#0000000000000111;  // Bit Nr. ausmaskieren
       UW;
       T   DBW 4;               // Bit Nr. aktuelles Event
       TAK;
       SRW 3;                   // Code  I  ausmaskieren
       L   W#16#7;              // nur 3 Bits gueltig
       UW;
       T   DBW 6;               // Code  I
       L   MB 33;
       SRW 6;                   // Code  II ausmaskieren
       L   W#16#3;              // nur 2 Bits gueltig
       UW;
       T   DBW 8;               // Code  II
       //;
    
    
    
/////////////////////////////////////////////////////////////////////////////////////////////////////////       
//       
//                   Wurde mit SPL ausgetauscht. DBB7 wird verwendet da beim befehl B DBW auf das rechte byte gezeigt wird das linke (Byte6) muss 0 sein 
// 
//
//
//          B DBW 6;
//          SPA  M004                   // kein gueltiger Eintrag
//          *** Warnung in Zeile    5891   Sprungbefehl nach BEARBEITE nicht übersetzbar (SPL verwenden).
//         
/////////////////////////////////////////////////////////////////////////////////////////////////////////////          
          
                                // Code bearbeiten
       L DBB 7
       SPL  M004                   // kein gueltiger Eintrag
       SPA M005;                // Anfrage Eingang
       SPA M006;                // Anfrage Ausgang
       SPA M007;                // Anfrage Merker
       SPA M008;                // Anfarge Zaehler
       SPA M009;                // Anfrage Timer
       BEA;
       //;
  M005:L   W#16#EF00;            // Basisadresse Eingaenge
       SPA M010;
  M006:L   W#16#EF80;            // Basisadresse Ausgaenge
       SPA M010;
  M007:L   W#16#EE00;            // Basisadresse Merker
       SPA M010;
  M008:L   W#16#ED00;            // Basisadresse Zaehler
       SPA M010;
  M009:L   W#16#EC00;            // Basisadresse Timer
       //;
  M010:L   DBW 2;                // aktuelle byte Nr.
       +I;
 [COLOR=Red] //      LIR 0;                   // lade Wert
  // *** Fehler in Zeile    5913  (FB 100):  Befehl nicht definiert. ***[/COLOR]
       SRW 8;                   // Byte ausmaskieren
       T   MW 33;               // Wert zwischenspeichern
       //;
                                // Bit Nr. bearbeiten
/////////////////////////////////////////////////////////////////////////////////////////////////////////       
//       
//                   Wurde mit SPL ausgetauscht. DBB7 wird verwendet da beim befehl B DBW auf das rechte byte gezeigt wird das linke (Byte6) muss 0 sein 
// 
//
//
//          B DBW 4;
//          SPA  M011                   // kein gueltiger Eintrag
//          *** Warnung in Zeile    5891   Sprungbefehl nach BEARBEITE nicht übersetzbar (SPL verwenden).
//         
/////////////////////////////////////////////////////////////////////////////////////////////////////////////                                  
                                
                                
       L DBB 5
       SPL  M011
       SPA M012;
       SPA M013;
       SPA M014;
       SPA M015;
       SPA M016;
       SPA M017;
       SPA M018;
       //;
  M011:UN  M 34.0;               // Bit 0 nicht gesetzt
       SPA M019;
  M012:UN  M 34.1;               // Bit 1 nicht gesetzt
       SPA M019;
  M013:UN  M 34.2;               // Bit 2 nicht gesetzt
       SPA M019;
  M014:UN  M 34.3;               // Bit 3 nicht gesetzt
       SPA M019;
  M015:UN  M 34.4;               // Bit 4 nicht gesetzt
       SPA M019;
  M016:UN  M 34.5;               // Bit 5 nicht gesetzt
       SPA M019;
  M017:UN  M 34.6;               // Bit 6 nicht gesetzt
       SPA M019;
  M018:UN  M 34.7;               // Bit 7 nicht gesetzt
       //;
  M019:SPB M020;                 // kein Bit gesetzt
       L   DBW 8;              // Anfrage nicht zeitgetriggert
       L   0;
       <>I;
       SPB M021;
       //;
       UN  #TRIG;              // Zeittrigger nicht aktiv
       SPB M004;
       SPA M022;               // Vergleichspuffer nicht aktiv
       //;
  M021:NOP 0;
      
       T   conv_akku1;
       L   STW;
       T   conv_stw;
       L   DBB 15;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku1;
       L   DBW [ AR1, P#0.0 ];
       L   1;
       ==I;
       SPB M023;
  M022:L   DBW 12;               // Indexregister Lesezeiger
       L   20;
       -I;
       SLW 8;                  // aktuelle Event Nr. links
       T   MW 33;
       L   DBW 12;
       L   21;                 // Offset Lesezeiger
       -I;
       SLW 1;                  // Offset 2 Worte
       L   11;
       +I;
       AUF DB 20;
       T   DBW 2;              // Indexregister Schreibzeiger
       INC 1;
       T   DBW 4;              // Indexregister HIGH BYTE
      
       T   conv_akku1;
       L   STW;
       T   conv_stw;
       L   DBB 3;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku1;
       L   DBW [ AR1, P#0.0 ];   // lade Eventdaten
       INC 1;
       L   MW 33;              // akt. Event Nr. in linkes Byte
       OW;
      
       T   conv_akku1;
       TAK;
       T   conv_akku2;
       L   STW;
       T   conv_stw;
       L   DBB 3;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku2;
       L   conv_akku1;
       T  DBW [ AR1, P#0.0 ];
       L   W#16#FF;
       UW;
       L   60;                 // bei Wert > 60 Uebetrag
       <=I;
       SPB M023;
                               // Indexregister HIGH BYTE
       T   conv_akku1;
       L   STW;
       T   conv_stw;
       L   DBB 5;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku1;
       L   DBW [ AR1, P#0.0 ];
       INC 1;                  // increment HIGH BYTE
      
       T   conv_akku1;
       TAK;
       T   conv_akku2;
       L   STW;
       T   conv_stw;
       L   DBB 5;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku2;
       L   conv_akku1;
       T  DBW [ AR1, P#0.0 ];
      
       T   conv_akku1;
       L   STW;
       T   conv_stw;
       L   DBB 3;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku1;
       L   DBW [ AR1, P#0.0 ];   // lade Low Word Wartungsereigniss
       L   W#16#FF00;          // loesche LOW BYTE
       UW;
      
       T   conv_akku1;
       TAK;
       T   conv_akku2;
       L   STW;
       T   conv_stw;
       L   DBB 3;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku2;
       L   conv_akku1;
       T  DBW [ AR1, P#0.0 ];    // speichern Wert
  M023:AUF DB 21;
  M004:L   1;
                               // Indexreg. Vergleichsbuffer
       T   conv_akku1;
       TAK;
       T   conv_akku2;
       L   STW;
       T   conv_stw;
       L   DBB 15;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku2;
       L   conv_akku1;
       T  DBW [ AR1, P#0.0 ];    // setzen Vergleichsbuffer
       SPA M024;
  M020:L   0;
                               // Vergleichspuffer loeschen
       T   conv_akku1;
       TAK;
       T   conv_akku2;
       L   STW;
       T   conv_stw;
       L   DBB 15;
       SLW 4;
       LAR1;
       L   conv_stw;
       T   STW;
       L   conv_akku2;
       L   conv_akku1;
       T  DBW [ AR1, P#0.0 ];
  M024:L   DBW 10;               // Indexregister aktuelles Event
       INC 1;
       T   DBW 10;             // Zeiger auf naechstes Event
       L   100;
       >=I;
       R   #TRIG;              // Ruecksetzen Zeittrigger
  
  
END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
hier einfach nur den Befehl ersetzen bringt m.E. gar nichts.
Der abgebildete Baustein adressiert (für welchen Zweck ?) Speicherbereiche der SPS. Diese Speicherbereiche hast du in dieser Form in der S7 sowieso nicht mehr - das heißt, dass wenn du die Funktion dieses Bausteins erhalten willst, du genau wissen mußt, was er tut.
Code:
     L DBB 7
       SPL  M004                   // kein gueltiger Eintrag
       SPA M005;                // Anfrage Eingang
       SPA M006;                // Anfrage Ausgang
       SPA M007;                // Anfrage Merker
       SPA M008;                // Anfarge Zaehler
       SPA M009;                // Anfrage Timer
       BEA;
       //;
  M005:L   W#16#EF00;            // Basisadresse Eingaenge
       SPA M010;
  M006:L   W#16#EF80;            // Basisadresse Ausgaenge
       SPA M010;
  M007:L   W#16#EE00;            // Basisadresse Merker
       SPA M010;
  M008:L   W#16#ED00;            // Basisadresse Zaehler
       SPA M010;
  M009:L   W#16#EC00;            // Basisadresse Timer
       //;
  M010:L   DBW 2;                // aktuelle byte Nr.
       +I;
 [COLOR=red] //      LIR 0;                   // lade Wert
[/COLOR]
an dem Beispiel :
in Abhängigkeit von DBB7 wird der gewünschte Speicherbereich in der SPS adressiert. Im DBW2 steht dann der Index der Variablen drin und deren Wert wird dann geladen.
Der ganze Block würde in der S7 (wie schon erwähnt) ganz anders aussehen :
Code:
L DBW 2
SLW 3
LAR1
 
L MW [AR1,#P0.0]
 
usw.
Gruß
LL
 
Resume (auch aufgrund des Beitrages von 4L) :
Einfach nur Code von Step5 nach Step7 übersetzen ist nicht unbedingt immer die Lösung ...
Da kann dann auch ganz schöner Mist dabei herauskommen ...
 
Lir

Hallo bresner,

ich würde (wenn du das so weiternutzen willst) die Pointer auf die gewünschten Bereiche setzen und damit weiterarbeiten wie gehabt, dh Offset addieren und ab ins AR1 wie von LL beschrieben. Aber ob das bei Timern und Zählern geht bzw Sinn macht sei dahingestellt.

Code:
       L DBB 7
       SPL  M004                   // kein gueltiger Eintrag
       SPA M005;                // Anfrage Eingang
       SPA M006;                // Anfrage Ausgang
       SPA M007;                // Anfrage Merker
       SPA M008;                // Anfarge Zaehler
       SPA M009;                // Anfrage Timer
       BEA;
       //;
  M005:L   [COLOR=Red]P#E0.0[/COLOR];               // Basisadresse Eingaenge
       SPA M010;
  M006:L   [COLOR=Red]P#A.0[/COLOR];                // Basisadresse Ausgaenge
       SPA M010;
  M007:L   [COLOR=Red]P#M0.0[/COLOR];               // Basisadresse Merker
       SPA M010;
  M008:L   [COLOR=Red]P#Z0[/COLOR];                 // Basisadresse Zaehler
       SPA M010;
  M009:L   [COLOR=Red]P#T0[/COLOR];                 // Basisadresse Timer

André
 
Zurück
Oben