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

Ergebnis 1 bis 5 von 5

Thema: Variabler Address-Pointer

  1. #1
    Registriert seit
    08.09.2010
    Beiträge
    57
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich habe eine schnelle Frage zum Address-Pointer.
    Und zwar versuche ich die Bit-Byte Adresse variable zu gestalten.

    Im Angehaengten Screenshot kann man erkennen, dass ich meinen FC mit Folgenden Parametern aufrufe:
    #Area_DB
    #Sel_Type

    wie kann ich jetzt die Variable in meinen Address-Pointer reinknueppeln?

    Ich moechte quasi
    U DBX [AR1,P#1.0] // 1.0 soll durch #Sel_Type ersetzt werden
    = M 399.0

    Also so
    U DBX [AR1,P#Sel_Type]
    = M 399.0



    Danke fuer jegliche Ratschlaege.

    Studi



    pointer.PNG
    Zitieren Zitieren Variabler Address-Pointer  

  2. #2
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Ich denke, dass du nach SLW 3 die Bitadresse reinmaskieren musst. Oder anstatt L P#DBX0.0 gleich L P#DBX0.[0..7]. Habs allerdings nicht getestet, weiss nicht, ob der Editor das frisst
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    den DB kannst du mit 2 Methoden aufrufen :
    1. dein Area_DB ist vom Variablen-Typ Block_DB, dann mit "AUF #Area_DB"
    2. dein Area_DB ist vom Typ Word, dann mit "AUF DB [#Area_DB]"

    Das Pointer-Offset in deinem Anwendungsfall ist immer eine Konstante. Daran kannst du also nichts machen.
    Allerdings bildet sich ein Pointer IMMER als Bit-Adresse - wenn du die also die Bit-Adresse deiner Speicherstelle ausrechnest dann kannst du sie direkt ins AR1 laden und damit indexieren ("U DBX [AR1,P#0.0]").
    Die Bit-Adresse errechnet sich aus Byte-Nummer*8+Bitnummer - das Ergebnis ist idealerweise ein DWORD.

    Gruß
    Larry

  4. #4
    Registriert seit
    08.09.2010
    Beiträge
    57
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,
    vielen Dank schon einmal fuer die Antworten.
    Ich habe meinen DB so strukturiert, dass ich alle 12 Bytes einen unterschiedlichen Bereich abdecke.
    #Area_DB
    Byte 12-23 = Bereich 1
    Byte 24-35 = Bereich 2
    ....
    ....

    Aus jedem Bereich habe ich Zugriff auf ein und daselbe Ausgangs-Byte.
    Daher muss ich in meinen FC303 8 mal den Address-Pointer anpassen, damit ich jedes einzelne Bit in dem Ausgangs-Byte verknueppeln kann.

    Momentan verstehe ich allerdings nicht, wie ich das variable gestalten kann
    bei einem Durchlauf muss ich es folgendermassen addressieren:
    U DBX [AR1,P#A.Z] und ich moechte den Teil A.Z beim naechsten Durchlauf (via #Sel_Type) auf U DBX [AR1,P#A.Y] aendern.

    Also kann ich das so nicht machen, da wie Larry schon sagt, das Pointer Offset immer Konstant ist?

    Danke Leute!

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    wie ich schon geschrieben habe ...
    Wenn ich mich aber Recht erinnere (ist ja noch nicht so lange her) habe ich dir auch die Alternative genannt, wie es z.B. gehen würde.

    Du mußt aber nicht den Adress-Pointer 8 mal neu "verknüppeln".
    Den berechnest du auf die Start-Adresse des jeweiligen Bytes (wie beschrieben) und lädst diesen Wert in das AR1.
    Nun kannst du das Bit 0 des Byte mit U DBX[AR1,p#0.0], das nächste mit U DBX[AR1,p#0.1] etc. ansprechen.
    Wie schon beschrieben ist der Pointer-Offset an dieser Stelle eine Konstante ...

    Gruß
    Larry

Ähnliche Themen

  1. Step 7 Pointer mit variabler DB-Adresse an einem SFC20?
    Von Bär1971 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 21.08.2013, 07:35
  2. PLC Address und Protocol Address in Modbus Poll?
    Von senmeis im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 01.06.2010, 02:15
  3. Arbeiten mit Pointer/Variabler Versatz
    Von Fuji im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.04.2009, 08:41
  4. 551 AS-Address not possible?
    Von Damb im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 14.04.2005, 15:29
  5. Set Slave Address
    Von haidmueller im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.10.2004, 09:57

Lesezeichen

Berechtigungen

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