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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Indirekte Adressierung von Eingängen

  1. #11
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    673
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Warrum machen Sie dass nicht mit Blockmove (SFC20), hiermit kann du ein bereich von x byte eingangen in block uberdragen nach z.b. ein DB bereich. Und wenn sie dass variabel machen must du die any pointers zu sammen basselen , in forum is er bei die FAQ ein beitrag mit beispiele dafur http://www.sps-forum.de/showthread.p...für-Datentypen

    Joop

  2. #12
    Registriert seit
    21.05.2008
    Beiträge
    98
    Danke
    8
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    ...Du musst vor L EW [#EADR]
    die Adresse um 3 Bits nach links schieben, da die Adressierung in Step7 bitgranulat ist.
    Warum ist das so und was bedeutet das?

  3. #13
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Warum das so ist, das kann nur Siemens beantworten. Aber dieses Forum und die Hilfe des Simatic Managers helfen weiter:

    Forum: http://www.sps-forum.de/showthread.p...FCr-Datentypen

    Und aus der Simatic Hilfe:
    Speicherindirekte Adressierung
    Programmanweisungen, die mit der speicherindirekten Adressierung arbeiten, setzen sich zusammen aus einer Operation, einem Operandenkennzeichen und einer [Adresse] (die Adresse muß in eckigen Klammern angegeben werden). Je nach Operandenkennzeichen wertet die Operation die Daten, die an der angegebenen Adresse abgelegt sind, als Pointer im Wort- bzw. im Doppelwortformat aus. Das zu wählende Pointerformat ist abhängig von dem verwendeten Operanden. Der vollständige Operand der Daten besteht aus einem Operandenkennzeichen und einem Pointer (siehe folgende Beispiele). Der Vorteil der indirekten Adressierung ist, daß Sie den Operanden der Anweisung während der Programmbearbeitung dynamisch modifizieren können.

    Bei der speicherindirekten Adressierung besteht der Operand aus den beiden folgenden Teilen:

    1. Operandenkennzeichen

    · Bei Bits, die von Bitverknüpfungsoperationen angesprochen werden, können Sie die Operandenkennzeichen E, A, M, L, DIX oder DBX verwenden.

    · Bei Bytes, Wörtern und Doppelwörtern, die von Ladeoperationen angesprochen werden, können Sie die Speicherbereiche E, A, M, L, D und PE verwenden, um die folgenden Operandenkennzeichen anzugeben: EB, EW, ED, DBB, DBW, DBD, DIB, DIW, DID, PEB, PEW, PED, etc.

    · Bei Bytes, Wörtern und Doppelwörtern, die von Transferoperationen angesprochen werden, können Sie die Speicherbereiche E, A, M, L, DB, DI und PA verwenden, um die folgenden Operandenkennzeichen anzugeben: EB, EW, ED, DBB, DBW, DBD, DIB, DIW, DID, PAB, PAW, PAD, etc.

    · Zum Adressieren von Zeiten, Zählern oder Bausteinen verwenden Sie die Bereichskennungen T, Z, DB, DI, FB, FC.

    2. Die Adresse von Pointern im Wort- oder Doppelwortformat wird in eckigen Klammern "[ ]" angegeben:

    · Pointer im Wortformat - Ein Wort, das die Nummer einer Zeit (T), eines Zählers (Z), eines Datenbausteins (DB, DI) oder eines Codebausteins (FC, FB) angibt. Bei einem Pointer im Wortformat handelt es sich um eine Dezimalzahl.

    · Pointer im Doppelwortformat - Ein Doppelwort, das in diesem Fall die genaue Adresse eines Bits, Bytes, Worts oder Doppelworts angibt. Ein Doppelwort hat folgendes Pointerformat: P#Byte.Bit.

    · Der Pointer muß für die speicherindirekte Adressierung in einem der folgenden Bereiche gespeichert werden:

    · M - Merker

    · L - Lokaldaten

    · D - Datenbaustein (DB oder DI)

    · STAT - Statische Daten (nicht bei multiinstanzfähigen Bausteinen)

    Hinweis

    Wenn Sie auf ein Byte, Wort oder Doppelwort zugreifen möchten, das über speicherindirekte Adressierung angesprochen wird, vergewissern Sie sich zunächst, daß die Bitnummer des Pointers im Doppelwortformat 0 ist.

    Beispiel für einen Pointer im Wortformat:

    L 5 //Lade den Wert des Pointers in AKKU 1.
    T MW2 //Transferiere den Pointer nach MW2.
    L T [MW2] //Lade den aktuellen Wert der Zeit T5 in AKKU 1.
    Beispiel für einen Pointer im Doppelwortformat:

    L P#8.7 //Lade den Wert des Pointers in AKKU 1.
    T MD2 //Transferiere den Pointer nach MD2.
    U E [MD2] //Frage den Signalzustand an Eingang E 8.7 ab
    = A [MD2] //und weise den Signalzustand Ausgang A 8.7 zu.
    Beispiele für speicherindirekte Adressierung Beschreibung
    U E [MD 2] Führe eine UND-Verknüpfung mit dem Eingangsbit aus. Die Adresse befindet sich in Merkerdoppelwort MD2.
    = DIX [DBD 2] Weise den Signalzustand des VKE-Bits dem Instanz-Datenbit zu. Die Adresse befindet sich im Datendoppelwort DBD2.
    L EB [DID 4] Lade das Eingangsbyte in AKKU 1. Die Adresse befindet sich im Instanzdoppelwort DID4.
    AUF DB [LW 2] Öffne den Datenbaustein. Die Nummer des Datenbausteins befindet sich im Lokaldatenwort LW2.

  4. #14
    Bubi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.11.2012
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von JoopB Beitrag anzeigen
    Warrum machen Sie dass nicht mit Blockmove (SFC20), hiermit kann du ein bereich von x byte eingangen in block uberdragen nach z.b. ein DB bereich. Und wenn sie dass variabel machen must du die any pointers zu sammen basselen , in forum is er bei die FAQ ein beitrag mit beispiele dafur http://www.sps-forum.de/showthread.php/12923-Any-Zeiger-für-Datentypen

    Joop
    ICh habe bisher nie mit pointer gearbeitet, aber danke, habe es mir durchgelesen und diese Lösung wäre auch gut.

    Zitat Zitat von LT Smash Beitrag anzeigen
    Warum ist das so und was bedeutet das?
    Das "Format" der Var in der klammer verlangt das so.
    Beispiel:
    L EW2
    Will ich das Vareabel gestalten also mit "L EW[#Var]" , kann ich nicht einfach :
    L 2
    T #Var
    L EW[#VAR] da käme quasi raus " L EW[0000.002]"

    Deswegen :
    L 2
    SLW
    T #Var
    L EW[#VAR]
    dann läd er wirklich das EW2
    Geändert von Bubi (22.11.2012 um 14:04 Uhr)

Ähnliche Themen

  1. Indirekte Adressierung von einem DB
    Von Sirus im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 14.08.2009, 18:08
  2. Indirekte Adressierung von STRING SCL
    Von sm@rt im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.02.2009, 15:12
  3. Indirekte Adressierung von Bit's in SCL
    Von tarzipan7 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 23.01.2009, 12:37
  4. Indirekte Adressierung von DATE_AND_TIME
    Von vennemer im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.03.2007, 12:23
  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
  •