Step5 LIR 0 Befehl

bresner1

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


Ich habe ein problem mit dem übersetzen eines Lir 0 befehles da ich gehört habe das dies nicht ohne weiteres geht wenn er auf einen bereich wie E 400 zugreift der code ist wie folgt.


Code:
 L     #DB_S
      SLW   1                           // 1 DW = 2 BYTES
      L     W#16#E400                   // START ADDRESS DB's
      +I    
//      LIR 0;                    // START ADDRESS SOURCE-DB
// *** Fehler in Zeile    4421  (FB   6):  Befehl nicht definiert. ***
      T     MW    33
//;
      L     #DW_S
      SLW   1
      L     114                         // 114 BYTE
      +I    
      L     MW    33
      +I    
      T     MW    33
von mir wurde er wie folgt geändert:

Code:
 L     #DB_S
      T     #AUF_DB_S

      L     #DB_S
      SLW   1                           // 1 DW = 2 BYTES
      L     W#16#E400                   // START ADDRESS DB's
      +I    
      AUF   DB [#AUF_DB_S]
      T     MW    33
//;
      L     #DW_S
      SLW   1
      L     114                         // 114 BYTE
      +I    
      L     MW    33
      +I    
      T     MW    33
ausserdem habe ich E 400 noch in folgendem aufruf in der S5 quelle gfunden

Code:
L   =  K/DB        DB/NR. = 0 ?
        L   KB    255    
        UW        
        SPZ =  M003        DB  - NR. NICHT EINGETRAGEN
        SLW    1        
        ADD KF    -7168    = ADR.: E400 H
        LIR    0        
        L   KB    0    
        T   MB 249        
        OW        
        SPZ =  ERR4        JA, FEHLER 04
        LW  =  ANF        
        SLW    1        
        +F        
        R   M  254.0        
    M008    T   MW 246        
        LIR    0        
        T   MW 244        
    M007    UN  M  254.0        
        =   M  254.0


Ist meine übersetzung inordnung oder gibt es noch etwas zu beachten?
 
Also, E400 bei einer S5 klingt für mich verdächtig nach Bausteinadressliste, wenn ich damit richtig liege wird dein übersetzter Baustein niemals das machen, was er soll...

Grüße von HaDi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Bresner,

als erstes brauche ich von Dir den CPU-Typ. Ich vermute mal es ist eine CPU 103 (wg. Anfangsadresse DB: E400 h).

Nun zu Deinem Code:

Code:
L #DB_S          [COLOR=Red]Hier wird die Nummer des zu öffnenden DB's geladen[/COLOR]
SLW 1            [COLOR=Red]Um die richtige Adresse der Speicherzelle des DB's zu finden Nummer *2[/COLOR]
L W#16#E400      [COLOR=Red]Dies ist die Basisadresse der Speicherzellen in denen die DB-Adressen liegen[/COLOR]
+I               [COLOR=Red]Hier wird die Adresse der Speichezelle des DB's in #DB_S gebildet[/COLOR]
LIR 0            [COLOR=Red]Die Speicherzelle wird ausgelesen und die Adresse des DB's im RAM der CPU kommt in den AKKU1[/COLOR]
T MW 33          [COLOR=Red]Adresse merken[/COLOR]
L #DW_S          [COLOR=Red]Ich vermute hier wird das zu bearbeitende Datenwort übergeben[/COLOR]
SLW 1            [COLOR=Red]Adresse des DW * 2, Hat irgendwas mit der Art der Adressierung in der CPU 103 zu tun (Ich vermute die arbeitet byteweise)[/COLOR]
L 114
+I               [COLOR=Red]Irgendein Offset im DB[/COLOR]
L MW 33          [COLOR=Red]Anfangsadresse des DB's laden[/COLOR]
+I               [COLOR=Red]Adresse DW dazuaddieren[/COLOR]
T MW 33          [COLOR=Red]Absolute Adresse des Datenwortes im RAM der CPU[/COLOR]


Irgendwo muss in Deinem Code noch der Befehl:
B MW 33
L DW 0 auftauchen.
Damit wird das in MW 33 adressierte Datenwort ausgelesen.


Ich würde den Code so übersetzen:

Code:
L #DB_S
T #Auf_DB_Nr      // Temp. Variable

AUF DB [#Auf_DB_Nr]

L #DW_S
SLW 1             // S5-Wort-Format -> S7-Byte-Format
SLD  3            // Pointer bilden
LAR1              // Pointer an Adressregister übergeben

L DBW [AR1,P#0.0] // Datenwort laden

Ich hoffe das hilft Dir weiter!

Grüße
Gebs
 
Irgendwo muss in Deinem Code noch der Befehl:
B MW 33
L DW 0 auftauchen.
Damit wird das in MW 33 adressierte Datenwort ausgelesen.
Hallo Gebs,
das, denke ich, wird so nicht gehen, denn im MW33 steht ja nicht die Nummer des Datenworts sondern seine Speicheradresse, von daher würde ich eher einen indirekten Zugriff erwarten (LIR/TIR).
Mit deiner Übersetzung bin ich aber grundsätzlich einverstanden.
Ich frage mich aber schon, ob es wirklich sinnvoll ist, solche S5-Bausteine 1:1 übersetzen zu wollen. Wenn man die Funktion begriffen hat und was Neues programmiert, wird´s unter Umständen doch eleganter.

Grüße von HaDi
 
S5

Hallo bresner1,

beherzige doch mal das was ich dir geschrieben habe..

Aber bevor du das umsetzt finde doch erstmal heraus wofür es benötigt wird. Evtl kann man das mit S7 anders lösen bzw ist es überflüssig.

Alle SYNC - Aufrufe für Baugruppen, alle Sachen für Kommunikation über Ethernet/H1-Bus, alle Bausteine die auf Sonderbaugruppen zugreifen solltest du bei der Umsetzung aussen vor lassen. Viel wichtiger ist es die Struktur und Wirkungsweise zu erkennen und dann in S7 (falls noch nötig) nachzuprogrammieren.

Wenns ein schönes S7-Programm werden soll und nicht nur ein konvertiertes S5-Programm musst du dich von einigen Programmteilen trennen und die Schmiermerker bestatten. Funktionen von S5-PB´s mit Funktionsgruppen-DB kannst du komfortabler mit S7-FB lösen.

André
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein Vorschlag an dieser Stelle :
poste doch mal den Original Step5-Code. Ich denke, dass man damit weiterkommt und es in Step7 sinnvoll anders lösen kann ...

Gruß
LL
 
@ HaDi
Du hast recht! Ich hab' nicht richtig nachgedacht. Bresner müsste dann in seinem Code noch ein paar LIR/TIR-Befehle finden oder aber ein MAB und LRW/TRW.

@Bresner
Ich denke genauso, wie die Anderen. Mit S7 hat man die Möglichkeit viele Programme intelligenter bzw. einfacher zu programmieren. Wie LL gesagt hat, poste mal den S5-Code!

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
S5

Hallo zusammen

Hier der ganze code

Code:
LW  =  ANZ        lade Anzahl zu sendende Bytes
        L   KF    +0    
        !=F        
        BEB        
        R   M  254.7        MERKER   FALSCHE ADRESSE
        L   =  K/DB        
        SRW    8        Kanal Nr. ausmaskieren
        L   KB    3    
        >F        
        SPB =  ERR1        KANAL-NR. > 3
        UW        KANAL-NR. * 2
        SLW    1        
        L   =  ADR        + ADR. VIPA-KARTE
        +F        
        T   MW 250        Adresse zwischenspeichern
        ADD BF    +1    VIPA-ADR.+1 = STATUSWORT SS
        L   KH    EEFF    Statuswort -SS lesen -> MB 255
        TNB    1        
        U   M  254.7        ADR.FEHLER ?
        SPB =  M002        JA,SPRUNG
        UN  M  255.7        SENDEPUFFER LEER  ? --> BEB
        BEB        
        BLD    130        
        L   =  K/DB        DB/NR. = 0 ?
        L   KB    255    
        UW        
        SPZ =  M003        DB  - NR. NICHT EINGETRAGEN
        SLW    1        
        ADD KF    -7168    = ADR.: E400 H
        LIR    0        
        L   KB    0    
        T   MB 249        
        OW        
        SPZ =  ERR4        JA, FEHLER 04
        LW  =  ANF        
        SLW    1        
        +F        
        R   M  254.0        
    M008    T   MW 246        
        LIR    0        
        T   MW 244        
    M007    UN  M  254.0        
        =   M  254.0        
        L   KH    EEF4    
        SPB =  M005        
        ADD BF    +1    
    M005    L   MW 250        
        TNB    1        
        LW  =  ANZ        
        L   MB 249        
        ADD BF    +1    
        T   MB 249        
        <=F        
        SPB =  M006        
        U   M  254.0        
        SPB =  M007        
        L   MW 246        
        ADD BF    +2    
        SPA =  M008        
    M006    L   KB    0    
        SPA =  M009        
    M002    L   KB    1    
        SPA =  M009        
    ERR1    L   KB    2    falsche Kanalnummer
        SPA =  M009        
    M003    L   KB    3    
        SPA =  M009        
    ERR4    L   KB    4    
    M009    T   =  FEHL

ich würde die fehlerhaften bausteine gerne neu schreiben jedoch brauche ich länger bis ich diese verstanden habe:confused:. habe davor noch nichts mit S5 zu tun gehabt
 
S5

Hallo bresner,

aber so wie dus jetzt machst wird es so werden.


  • du passt alle diese Bausteine die mit Sonderkarten zu tun haben an dass sie theoretisch in der S7 lauffähig sind
  • du nimmst die Anlage in Betrieb
  • du merkst dass die neuen Sonderbaugruppen nicht damit angesprochen werden können
  • du stehst wieder vor dem Problem dass du erstmal verstehen musst was die alten Bausteine machen
  • du machst es neu
André
 
Zuletzt bearbeitet:
... da hat der André Recht ...

So wie ich das sehe fragt dieser ominöse Baustein einen Speicherbereich ab, der durch eine zus. Karte belegt wird (VIPA ?). Ob du das in der S7 noch genauso machen mußt halte ich für fraglich. Ich denke, dass die Karte, wenn in der S7 genauso (???) vorhanden ja in der HW-Konfig einen Koppelbereich erhalten hat, den du nur abzufragen brauchst.

Vielleicht ist das der Ansatz ...

Gruß
LL
 
Zurück
Oben