Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Indirekte Adressierung in AWL

  1. #1
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute ich habe ein Problem. Ich möchte eine Schrittkette mehrmals durchlaufen und nach jedem durchlaufen einen Messwert in ein Array schreiben, leider weiss ich nicht, wie es in AWL geht. soll es aber in AWL machen. kann mir jemand helfen, also ich habe:

    Messwert: DB50.dbd66

    Array: db5.dbd0 (Array [1..50])

    wie kann ich es nun anstellen, dass ich nach dem ersten Durchlaufen der schrittkette in element 1 schreiben nach dem 2. durchlaufen in element 2 usw.

    danke schon mal
    Zitieren Zitieren Indirekte Adressierung in AWL  

  2. #2
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Da würde ich einen einfachen Zeiger nehmen.

    Der Zeiger wird am Ende der SK um 1 erhöht und zeigt auf das ARRAYfach in dem der masswert gespeichert werden soll.

    hoffe geholfen haben zu können dtsclipper
    Das Grauen lauert in der Zwischenablage !!

  3. #3
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    wie geht das denn, sorry bin in awl nicht so fit

  4. #4
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

  5. #5
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Hallo Bensen,

    nimm eine FC und übergib als Eingangsparameter die:
    Messwerte als ANY Zeiger
    Messwert als DINT
    und ein Hilfsdatenwort als Zeiger (DB50.DBW70)

    Code:
       L  P#Messwerte
       LAR1
       L  W[AR1, P#4.0]
       T  #DBNummer
     
       L  W[AR1, P#2.0]
       T #Anzahl
     
       L  #Zeiger
       SLD 5
       L  D[AR1, P#6.0]
       +D
       T  #Ziel
     
       L  #Messwert
       AUF #DBNummer 
       T DBD [#Ziel]
     
       L #Zeiger
       + 1
       T #Zeiger
       L #Anzahl
       < I
       SPB OK
       L 0
       T #Zeiger
    OK:NOP 0
    Bei jedem Aufruf wird der ein neuer Wert geschrieben.
    Das ist aber jetzt nicht getestet.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #6
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Hi Paule,

    dachte eher an so was...

    Code:
     
    UN #SK_fertig
    SPB END1
     
    AUF DB5
     
    L DB50.dbd66
    T dbd [MD 490]
     
    L MD490
    L 4
    +D
    T MD490  // Zeiger erhöhen
     
    // Hier Rückstellbedingung
     L MD490
    L 200
    >=D
    SPB NoRe
    L 0
    T MD 490
    NoRe: nop 0
    END1: nop 0
    Geändert von dtsclipper (08.12.2009 um 14:38 Uhr) Grund: Ralle hatte recht...
    Das Grauen lauert in der Zwischenablage !!

  7. #7
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von dtsclipper Beitrag anzeigen
    Code:
     
    UN #SK_fertig
    SPB END1
     
    AUF DB5
     
    L DB50.dbd66
    T dbd [MW 490]   // OL LA LA das geht schon mal in die Hose ;)
    // Da ist doch glatt der falsche DB auf.
     
    L MW490
    L 4
    +D
    T MW490  // Zeiger erhöhen
    Das mit dem Zeiger mache ich doch auch, erhöhe in um 1 und schiebe später um 2 nach links.
    Nur ist mein Zeiger kein Merkerwort sondern übergebe ich halt ein Datenwort

    Aber egal, eigentlich meinen wir ja das gleiche
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #8
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Du merkst aber auch alles!

    hier die korrigierte Fassung:

    Code:
    UN #SK_fertig
       SPB   END1
     
          L     MD   490
          SLD   3      // Aus Speicherwert Zeiger generieren
          T     MD   494
     
     
          L     DB50.DBD   66
     
          AUF   DB     5
          T     DBD [MD 494]
          L     MD   490
          L     4
          +D    
          T     MD   490                    // Zeiger erhöhen
    // Hier Rückstellbedingung
          L     MD   490
          L     200
          >=D   
          SPBN   NoRe
          L     L#0
          T     MD   490
    NoRe: NOP   0
    END1: NOP   0
    Geändert von dtsclipper (08.12.2009 um 15:26 Uhr) Grund: Ralle und Paule hatten recht...
    Das Grauen lauert in der Zwischenablage !!

  9. #9
    Registriert seit
    28.07.2009
    Ort
    St. Augustin
    Beiträge
    76
    Danke
    18
    Erhielt 9 Danke für 5 Beiträge

    Standard

    Hallo,

    ich habe auch noch eine mögliche Lösung geschrieben. Kann die aber leider nicht ausprobieren, da ich zur Zeit kein STEP 7 installiert hab.

    Code:
     
    // START
    U #Schrittkette_Ende    // Schrittkette Ende?
    FP #Statisch
    SPBN Ende     // Ja, dann springe nicht zur Marke "Ende"
     
    // INITIALISIERUNG
    UN #Init     // Statisch BOOL     
    SPBN Init
    L 1
    T #Anz_Messungen    // Start Anzahl Messungen (Statisch INT)
    L 0
    T #Messung     // Start Messung (Statisch WORD)   
    SET      
    = #Init      
    Init: NOP 0
     
    L DB50.DBD66     // Messwert
    T #Messwert     // TEMP DWORD
     
    L #Anz_Messungen
    L 50      
    ==I      // 50 Messungen fertig?
    SPBN Weit     // Ja, dann springe nicht zu Weit   
    L 1   
    T #Anz_Messungen    // Initalisiere Anz_Messungen auf 1
    L 0
    T #Messung     // Initalisiere Messung
    Weit: NOP 0
     
    L #Messung   
    SLW 3      // erstelle Pointer
    LAR1       // und lade diesen ins Address Register 1
    AUF DB5
    L #Messwert
    T D[AR1, P#0.0]     // transferiere den Messwert nach DB5.[Pointer]
     
    L #Anz_Messungen    
    L 1   
    +I
    T #Anz_Messungen    // Messung ausgeführt
    TAR1      // lade Pointer aus Address Register 1 in AKKU-1
    SRW 3      // aus Pointer Integer kreieren
    L 4
    +I     
    T #Messung     // 4 hinzu addieren (DW-Länge des Messwerts)
     
    Ende: NOP 0
    Falls jemand Fehler findet, bitte bescheid sagen.
    "Ich bin eine Mischung aus jung und erfahren, das findet man sonst nur auf dem Straßenstrich."

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @dtsclipper

    Ich habe da leichte Zweifel, dein MW hat nicht das korrekte Pointerformat, hast du das mal getestet? Oder kann man das so machen, ich hab das in dieser Weise noch nie verwendet?!

    @Andreas

    Verwende besser SLD 3 statt SLW 3, da das sonst bei sehr großen Adressen nicht funktioniert, der Pointer hat ja 4 Byte!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  11. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    dtsclipper (08.12.2009)

Ähnliche Themen

  1. indirekte Adressierung
    Von Sash7770 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 22.12.2008, 12:47
  2. indirekte Adressierung
    Von Linowitch im Forum HMI
    Antworten: 13
    Letzter Beitrag: 06.12.2008, 19:43
  3. Indirekte Adressierung
    Von thomasgull im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 31.01.2008, 14:49
  4. Indirekte Adressierung
    Von wusel220983 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.05.2007, 18:19
  5. Indirekte Adressierung von SFC 20
    Von andre im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.09.2005, 09:44

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •