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

Ergebnis 1 bis 9 von 9

Thema: P#0.1 vom AR subtrahieren

  1. #1
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Gibt es einen Befehl mit dem ich einen Pointer vom Adressregister subtrahieren kann? Beim addieren gehts ja mit +AR1.

    Habs jetzt mal so gemacht:
    TAR1
    SLD 4
    DEC 1
    SRD 4
    LAR1
    Es funktioniert zwar nur ist das sicher? Nicht das ich mal die falsche Adresse bekomme.

    Godi
    Zitieren Zitieren P#0.1 vom AR subtrahieren  

  2. #2
    Unregistriert Gast

    Standard

    Moin;

    Einfachster Weg ist direkt mit Adressen zu arbeiten.

    Bsp:

    TAR1 //Adresse von ADR1 in AKKU1 transferieren
    L P#0.1 //Adressoffset in AKKU1 laden
    -D //AKKUS subrahieren
    LAR1 //Ergebnis nach ADR1 laden

    Du kannst direkt den Adressoffset abziehen. Einen Adressregister-Befehl
    für Subtraktion gibt es nicht.

    Das Adressregister1 kannst Du ansich immer benutzen. Ausnahme ist nur, wenn Du Zugriff auf Operanden höherer Ordnung, wie Strukturen oder UDT's hast, dann nimmt Siemens das AR1 selbst wieder her.
    Mit dem ADR2 muss man mehr aufpassen, wg. Multiinstanzoffset.

    Sollte Du mehr wissen wollen, frag einfach nach.
    Schönen Gruss
    Nils

  3. #3
    Registriert seit
    18.12.2005
    Beiträge
    71
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von godi
    Hallo!

    Gibt es einen Befehl mit dem ich einen Pointer vom Adressregister subtrahieren kann? Beim addieren gehts ja mit +AR1.

    Habs jetzt mal so gemacht:
    TAR1
    SLD 4
    DEC 1
    SRD 4
    LAR1
    Es funktioniert zwar nur ist das sicher? Nicht das ich mal die falsche Adresse bekomme.

    Godi
    Hi Godi
    ein bisschen sprachlos bin ich schon
    TAR1. ok jetzt ist der Wert von AR1 im AKKU, aber dann??
    SLD 4, ---- 4 Bits nach links schieben?? Was soll das? von rechts werden NULLEN nachgeschoben! Um 4 Bit links schieben ist gleichbedeutend einer Multiplikation mit 16! Da stimmt doch was nicht oder ist das tricky?
    DEC 1, verändert NUR das niederwertigste Byte des AKKUS!!!!!!!!! Nicht aber die anderen höherwqertigen Bytes des AKUS. Mit TAR1 hast du ein DWORD in den AKKU geladen und DEC kann auf ein DWORD nicht angewendet werden!!!!!
    Also IMHO läuft da ganz kräftig was schief.

    Was soll dein Code nach deiner Ansicht bewirken?

    Gruß Barnee
    Und der Weg zur Hölle ist mit guten Vorsätzen gepflastert......

  4. #4
    Registriert seit
    02.02.2006
    Ort
    Hessen
    Beiträge
    429
    Danke
    16
    Erhielt 28 Danke für 22 Beiträge

    Standard

    Hallo godi

    dein Code ist ein klein wenig zu trickreich!

    Wenn schon schieben, dann wäre in diesem Fall rotieren angesagt gewesen, damit die geschobenen Bits nicht einfach verschwinden (ROL/ROR).
    Abgesehen davon, DEC auf Doppelworte anzuwenden ist absolut tabu.
    mfG Werner
    Hoch lebe die Suchfunktion!
    Zitieren Zitieren ein wenig zu tricky  

  5. #5
    Avatar von godi
    godi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Naja mein Gedankengang war der das ich den Pointer im Akku 1 um 4 Stellen nach links verschiebe damit ich im LL Byte nur die Bitadresse stehen habe. Der Pointer ist, glaub ich, ja so aufgebaut (Im Akku):
    yyyyyyyyyyyyxxx
    y für Byteadresse und x für Bitadresse
    Nachdem ich jetzt nur mehr im untersten Byte die Bitadresse stehen habe, habe ich mir gedacht ich kann das Dekrementieren. Naja ist wohl nicht die bessere Lösung

    Danke für eure Hilfe.
    Mfg Godi

  6. #6
    Longbow Gast

    Standard

    Hallo

    Einfach nur:

    L P#8191.7 //entspricht P#-0.1
    +AR1


    Der MC7 Code würde auch ein +AR1 P#8191.7 zulassen, der Editor aber nicht


    Gruß

  7. #7
    Avatar von godi
    godi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Ist der P#8191.7 der maximalwert der im AR stehen kann?
    Also wenn das AR überläuft dann fängt er bei null wieder an und schreibt die Differenz die noch fehlt ins AR?

    Godi

  8. #8
    Unregistriert Gast

    Standard

    Nur der Vollstätigkeit halber...

    Wenn du das mit schieben machst, dann nur mit 3 Stellen. Und auch nur wenn du vom Pointer eine Byteadresse abziehen möchtest. Wenn du ein Bit abziehen möchtest, kannst du einfach das Doppelwort -1 rechnen. Wie oben schon geschrieben solltest du das aber nicht mit "inc" machen, da das nur auf ein Byte wirkt.

    Torsten

  9. #9
    Ernie ohne Bert Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von godi
    Hallo!

    Ist der P#8191.7 der maximalwert der im AR stehen kann?
    Also wenn das AR überläuft dann fängt er bei null wieder an und schreibt die Differenz die noch fehlt ins AR?

    Godi
    Nein. Alle Werte größer als 4095.7 werden als negativen Adresswerte interpretiert, und zwar im 2er-Komplement.

    Gruß
    Ernie ohne Bert

Ähnliche Themen

  1. TIME of DAY subtrahieren etc.
    Von hank12 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 29.05.2009, 14:42
  2. SCL -1 subtrahieren
    Von sr-83 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.04.2008, 10:17

Lesezeichen

Berechtigungen

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