Step 5 S5 nach S7 Konvertierung Befehl B

Member2

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

ich benötige dringend Hilfe. Ich bin leider noch unerfahren was das Programmieren angeht und mit AWL hatte ich sogut wie keine Berührungspunkte und bitte dacher um Verständnis.
Ich habe auch die Suchfunktion mehrmals genutz, wurde zum Teil auch fündig, jedoch durch Abweichungen im Code von anderen wurde ich nur noch verwirrter. Daher ein neuer Beitrag zu einem bekannten Thema.

Jetzt zu meinem Problem, ich habe ein S5 Programm nach S7 konvertiert. Beim Vergleichen der Codes wird die Anweisung B bei S7 anders erzeugt.
Jedoch kann ich nicht nachvollziehen ob der neue Code so funktioniert. Habe mit indirekter Adressierung so meine Probleme.

S5 FC126

Code:
NAME:    ANZAUSW
BEZ :    DBUE    B
BEZ :    DBME    B
BEZ :    DBGW    B
BEZ :    ZEI1    T
BEZ :    ZEI2    T
BEZ :    FLME    EBI

    UN    =FLME        ;MESSTELLEN NICHT MANUELL
    SPB    =M001      ;WEITERGETASTET DANN SPRUNG
                             ;SONST
    B    =DBUE          ;BEARBEITE UEBERGEORDNETEN DB
    L    DW 2            ;NR DER ANGEWAEHLTEN MESSTELLE
    L    KF +19          ;ADRESSBERECHNUNG DES ENTSPRECH.
    +F                     ;DATENWORTES
    T    DW 10          ;ABLEGEN ZUR IND.ADRESSIERUNG
    B    DW 10          ;ENTSPR. MESSTELLE LADEN UND IM
    L    DW 0            ;DW1 DES DBME ABLEGEN
    B    =DBME
    T    DW 1
    SPA    =M002      ;ABS.SPRUNG ZUR GRENZWERT AUSWAHL
        
M001:    O    =ZEI2    ;ZEIT FUER AUTOM.ANZEIGEN-
    O    =ZEI1            ;ERNEUERUNG LAEUFT?
    SPB    =M003        ;DANN ENDE
    B    =DBUE            ;SONST AUSWAHL ZUR NEUEN AUTOMAT.
    L    DW 2              ;ANZEIGE DER GEFAEHRDETSTEN MESS-
    L    KF +19            ;STELLE
    +F                        ;ADRESSBERECHNUNG
    T    DW 10
    B    DW 10
    L    DW 0             ;ENTSPR.MESSTELLE LADEN UND IM
    B    =DBME           ;DW1 DES DBME ABLEGEN
    T    DW 1
        
M002:    B    =DBUE    ;ZUR AUSGEWAEHLTEN MESSTELLE
    L    DW 2              ;DEN ENSTRECHENDEN GRENZWERT
    L    KF +49            ;UNTER DER BERECHNETEN ADRESSE
    +F                       ;ENTNEHMEN UND IM DW1 DES DBGW
    T    DW 10            ;ABLEGEN
    B    DW 10
    L    DW 0
    B    =DBGW
    T    DW 1
        
M003:        
    BE

und hier die Konvertierung nach S7

Code:
      UN    #FLME                // MESSTELLEN NICHT MANUELL
      SPB   M001                           // WEITERGETASTET DANN SPRUNG
//;                                             // SONST
      AUF   #DBUE                        // BEARBEITE UEBERGEORDNETEN DB
      L     %DBW4                        // NR DER ANGEWAEHLTEN MESSTELLE
      L     19                                // ADRESSBERECHNUNG DES ENTSPRECH.
      +I                                      // DATENWORTES
      T     %DBW20                     // ABLEGEN ZUR IND.ADRESSIERUNG
                                                // ENTSPR. MESSTELLE LADEN UND IM
      T     #conv_akku1
      L STW
      T     #conv_stw
      L     %DBB21
      SLW   4
      LAR1
      L     #conv_stw
      T STW
      L     #conv_akku1
      L DBW [ AR1 , P#0.0 ]      // DW1 DES DBME ABLEGEN
      AUF   #DBME
      T     %DBW2
      SPA   M002                    // ABS.SPRUNG ZUR GRENZWERT AUSWAHL
//;
M001: O     #ZEI2                // ZEIT FUER AUTOM.ANZEIGEN-
      O     #ZEI1                    // ERNEUERUNG LAEUFT?
      SPB   M003                    // DANN ENDE
      AUF   #DBUE                  // SONST AUSWAHL ZUR NEUEN AUTOMAT.
      L     %DBW4                  // ANZEIGE DER GEFAEHRDETSTEN MESS-
      L     19                         // STELLE
      +I                                // ADRESSBERECHNUNG
      T     %DBW20

      T     #conv_akku1
      L STW
      T     #conv_stw
      L     %DBB21
      SLW   4
      LAR1
      L     #conv_stw
      T STW
      L     #conv_akku1
      L DBW [ AR1 , P#0.0 ]      // ENTSPR.MESSTELLE LADEN UND IM
      AUF   #DBME                   // DW2 DES DBME ABLEGEN
      T     %DBW2
//;
M002: NOP 0
      AUF   #DBUE                // ZUR AUSGEWAEHLTEN MESSTELLE
      L     %DBW4                // DEN ENSTRECHENDEN GRENZWERT
      L     49                        // UNTER DER BERECHNETEN ADRESSE
      +I                                // ENTNEHMEN UND IM DW1 DES DBGW
      T     %DBW20               // ABLEGEN

      T     #conv_akku1
      L STW
      T     #conv_stw
      L     %DBB21
      SLW   4
      LAR1
      L     #conv_stw
      T STW
      L     #conv_akku1
      L DBW [ AR1 , P#0.0 ]
      AUF   #DBGW
      T     %DBW2
//;
M003: NOP 0


Kann es so funktionieren oder muss man die indirekte Adressierung anpassen.
Kann mir da vielleicht jemand helfen?

Schöne Grüße
M2
 

Anhänge

  • S7-FC126.txt
    2,1 KB · Aufrufe: 5
  • S5-FB126.txt
    1,1 KB · Aufrufe: 6
Das sieht eingentlich ganz ordentlich aus,
wobei da auch Code dabei ist, der eigentlich nicht weiter genutzt wird, wenn ich das richtig übersehe.
#conf_stw und STW wird zwar hin- und herkopiert, aber nach meiner Ansicht nicht genutzt und benötigt.
Wer weiß warum der Konverter das tut, gibt ja noch kompliziertere Fälle, als diesen.
Der Rest paßt eigentlich und setzt die indirekte Adressierung von S5 (B) in indirekte Adressierung der S7 um.

PS Wobei ich gerade nciht weiß, ob STW hier in S7 eine Variable oder eine Systemvariable ist, hab gerade keine Programm parat.
Dann könnte es Sinn machen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte funktionieren in S5 stand die Bezeichnung B für Benutze DB in #DBUE steht dann die DB nummer des DBs der geöffnet werden soll.
Bei S7 eigentlich genau das Gleiche hier steht AUF für Öffne DB in #DBUE steht dann die DB nummer des DBs der geöffnet werden soll.

peter(R)
 
Ich danke euch beiden.

Habt ihr eine Idee wozu dann hier noch das Statuswort gebildet wird?
@Ralle: So wie du es sagst, die Variable wird eigentlich im weiteren Verlauf nicht mehr abgefragt.

Gruß
M2
 
Das StatusWort STW wird offensichtlich gerettet und wieder rekonstruiert
Code:
      L STW
      T     #conv_stw
      . . .
      L     #conv_stw
      T STW
Wozu? Das weiss der Gurk.

BS5.jpg

STWS7.jpg

Anbei zu B bzw. B = in S5 und STW in S7
B steht eigentlich für "bearbeite". B = (mit FormalParameter) wird zum Aufrufen von Bausteinen verwendet.

Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Statuswort wird aufgrund des eingefügten Befehls "SLW 4" gerettet und wiederhergestellt.
Denn eine Schiebe-Anweisung beeinflusst das STW. Falls im S5 Programm damals später das STW abgefragt wird, würde das konvertierte Programm nicht mehr funktionieren. Der S5/S7 Übersetzer schaut aber nicht so weit nach ob das der Fall ist, und fügt prinzipiell immer bei der Umsetzung das Sichern und Wiederherstellen ein.

Das ist bei handgeschriebenem AWL-Code auch fast unmöglich durch einen automatischen Übersetzer zu erkennen was der Programmierer damals bezwecken wollte.
 
Zurück
Oben