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

Ergebnis 1 bis 8 von 8

Thema: indirekte Adressierung

  1. #1
    Registriert seit
    03.02.2010
    Beiträge
    22
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,


    mir stellt sich das erste mal das Problem einer indirekten Adressierung.
    Folgendes:
    Ich möchte gerne aus einem Array zur Laufzeit jeweils ein von "PFreigabe".iIndex vorgegebenes Bit eines Array auslesen.
    Der folgende Code ist von seiner Syntax falsch ... beschreibt aber was ich machen möchte.
    Kann mir jemand einen Tip geben.

    L "PFreigabe".iIndex
    T #TEMP0

    U "PMenge".axFertig[#TEMP0]
    = "PVar".xweiterschaltbedingung

    vielen Dank

    Juppy
    Zitieren Zitieren indirekte Adressierung  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.582
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Welche Sprache darf es denn sein?
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    @Tigerente:
    Für mich sieht das wie AWL-Code aus ...

    @TE:
    Die Elemente eines Array's kannst du nur in SCL so ansprechen.
    IN AWL müßtest du dir einen Pointer auf das Array bilden und den um den Element-Index*Elementbreite_in_Bit erhöhen und die Speicherstelle dann indirekt laden.

    Gruß
    Larry

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.302
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Ein Beispiel wie es funktioniert - "schön" ist es aber nicht.
    Hier muß die absolute Adresse des Array-Anfangs per Hand bei "L P#DBX4.0" eingetragen werden (manuell anpassen, wenn sich die Adresse im DB verschiebt!):
    Code:
    //Pointer auf absolute Adresse "PMenge".axFertig["PFreigabe".iIndex] erstellen
          L     P#DBX 4.0                   //Anfang Array = Offset axFertig[0] in DB "PMenge"
          L     "PFreigabe".iIndex          //Index 0... in das Bit-Array axFertig[]
          +D
          T     #temp_pxAdr                 //(TEMP, DWORD)
    
    //Zugriff auf Array für Referenzdaten und für Kontrolle Anfangsadresse des Array
          SPA   M010                        //nächste Dummy-Operation überspringen
          U     "PMenge".axFertig[0]        //z.B. DB13.DBX4.0
    
    //"PMenge".axFertig["PFreigabe".iIndex] kopieren
    M010: AUF   "PMenge"
          U     DBX [#temp_pxAdr]
          =     "PVar".xweiterschaltbedingung
    Wie groß ist Dein Array?
    Eine symbolische Angabe der Anfangsadresse des Arrays ist nur möglich, wenn Du das Array als INPUT oder IN_OUT an einen FB oder FC übergibst oder per SFC20 in TEMP umkopierst oder wenn das Array Teil des IDB eines FB ist.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    schneijo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.02.2010
    Beiträge
    22
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Array ist 25 Elemente, also 25bit lang.

  6. #6
    schneijo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.02.2010
    Beiträge
    22
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    Ja ich möchte das in AWL umsetzen ...
    Das Array liegt in einem globalen DB (DB483, "PMenge")
    Das symbolische ansprechen ist nicht möglich laut allgemeiner Litheratur.

    daher folgender Lösungsansatz:

    Das Array startet mit bit 4.0 im DB483
    deshalb muss auf den "Index" der Fixwert 31 aufaddiert werden.
    Über das Datenindexregister kann nun das jeweils gültige Bit angesprochen werden.
    -> DB483 laden (AUF DI ...); anschießend Bit wählen (U DIX ...)
    Gibt es dazu noch Kommentare?


    L "RFreigabe".iIndex
    L 31
    +I
    T "mdSpeicher"

    AUF DI 487
    UN DIX ["mdSpeicher"]
    = "PVar".xZykluszeitUeberspringen

  7. #7
    schneijo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.02.2010
    Beiträge
    22
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    in den beiden Beispielen, einmal von User PN/DP und von mir gibt es einen kleinen Unterschied

    Im Code von PN/DP wird das entsprechende Bit mit U DBX ... angesprochen.
    Im Beispiel von mir mit U DIX ...

    wo liegt hier der Unterschied?
    der von mir hinterlegte Code scheint zu funktionieren.

    vielen Dank schon jetzt für die Unterstützung.
    Geändert von schneijo (22.10.2012 um 13:45 Uhr)

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    AUF DI 487
    UN DIX ["mdSpeicher"]
    Wenn du "AUF DI" schreibst dann mußt du auch auf die DI.. zugreifen.
    Bei "AUF DB" dann eben auf die DB..

    DI ist allerdings eigentlich für einen Instanz-DB gedacht. Du solltest es also schon besser so machen :
    Code:
    AUF DB 487
    UN DBX ["mdSpeicher"]
    Gruß
    Larry

Ähnliche Themen

  1. S7 Indirekte Adressierung
    Von Rommani im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 02.05.2014, 22:05
  2. Indirekte Adressierung im DB
    Von Bollo im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 07.05.2008, 07:14
  3. Indirekte-Adressierung
    Von johnij im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.02.2008, 14:32
  4. Indirekte Adressierung
    Von hbck im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.06.2007, 17:11
  5. Indirekte Adressierung !
    Von max1de im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.02.2007, 18:18

Stichworte

Lesezeichen

Berechtigungen

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