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

Ergebnis 1 bis 8 von 8

Thema: Pointeradresse erhöhen

  1. #1
    Registriert seit
    16.08.2006
    Beiträge
    86
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leuts

    Nun hab ich mich mal hier im Forum angemeldet, da ich nicht weiter weis.
    Ich habe folgendes Problem:
    Ich möchte eine indirekte Adressierung mittels Pointerzugriffs vornehmen.
    Es sollen verschiedene Messwerte eingelesen und in einem Datenbaustein abgelegt werden.
    In einer Schleife beginnt der Pinter z.B bei P#0.0
    nun möchte ich, dass die Adresse des Pointers beim nächsten Schleifendurchlauf um 16 erhöht wird. (wichtig ist, dass die Bitadresse des Zeigers 000 bleibt)ich denke aber, dass das schon durch die Erhöhung um 16 garantiert wird.

    Wer kann mir helfen?


    Liebe Grüße Tino
    Zitieren Zitieren Pointeradresse erhöhen  

  2. #2
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    Du brauchst einen Zähler.

    Diesen musst du mit der Startadr. initialisieren. Nach dem Durchlauf der Schleife erhöhst du diesen um 16.

    Code:
    L 0
    T Zähler
     
    Loop: L Zähler
    SLD 3
    LAR1
     
    L W[AR1,P#0.0]
    T .....
     
    L Zähler
    L Abbruchbedinugn
    >=D
    spb ENDE
     
    L Zähler
    L L#16
    +D
    T Zähler
    SPA Loop
     
    ENDE: NOP 0
    Die Abbruchbedingung habe ich jetzt nicht sauber geschrieben, denke dass du das kannst.

    Gruß, pt
    Geändert von plc_tippser (16.08.2006 um 16:43 Uhr)
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.264
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Oder auch so:

    Code:
     
          AUF   "STOERMELDUNGEN DB"
          L     P#0.0
          T     #pointer_1               //temp-Var DWORD
          L     0
          T     #ergebnis
     
          L     125                         //Anzahl Störmeldungen (Wortweise)
    SC02: T     #zaehler
          L     DBW [#pointer_1]            // Lade Datenwort
          L     0                           // Lade 0
          ==I                               // keine Störmeldung !!!
          SPB   NUL2                        // Ergebnis nicht hochzählen
          L     #ergebnis                   // bei Erg <> 0 Ergebnis hochzählen
          L     1                           // um 1 erhöhen
          +I    
          T     #ergebnis
    NUL2: NOP   0                           // Zeiger erhöhen aud nächstest DW
          L     #pointer_1
          L     P#2.0                         //hier kommt in deinem Fall P#16.0 rein
          +D    
          T     #pointer_1
          L     #zaehler
          LOOP  SC02                        // Schleife solange, bis #zaehler auf 0
          L     #ergebnis                   // bei Ergebnis <> 0 liegt Fehler vor
          L     0
          <>I   
          =     "M1.0 Sammelfehler"
    Das Code-Fragment macht natürlich etwas anderes, es prüft ob in den 125 Worten ein Bit gesetzt ist. Etwas abgewandelt kannst du das aber verwenden.
    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

  4. #4
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.866
    Danke
    78
    Erhielt 806 Danke für 549 Beiträge

    Standard

    die art wie plc_tippser das schreibt, nutze ich das in der regel auch.
    so kann ich den zähler auch im weiteren prog, falls benötigt, noch als 'normale' variable nutzen.

    grundsätzlich kannst du deinen pointer aber auch so erhöhen.
    L P#16.0
    +AR1

    das entspräche diesen zeilen
    L Zähler
    L L#16
    +D
    SLD 3
    LAR1
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  5. #5
    Registriert seit
    16.08.2006
    Beiträge
    86
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    grundsätzlich kannst du deinen pointer aber auch so erhöhen.
    L P#16.0
    +AR1

    das entspräche diesen zeilen
    L Zähler
    L L#16
    +D
    SLD 3
    LAR1

    Warum brauche ich den SLD 3 ?
    verstehe das momentan nicht so richtig.

    grüße tino

  6. #6
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.527 Danke für 1.286 Beiträge

    Standard

    Weil die "rechten" 3 Bit die Bitadresse darstellen.
    Aus dem Grund das SLD3

    Wenn du es ganz genau wissen willst einfach in der Hilfe von Step7 mal Pointer eingeben.

    Mfg
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  7. #7
    Registriert seit
    28.06.2006
    Ort
    Königreich Neuseeland
    Beiträge
    2.027
    Danke
    133
    Erhielt 96 Danke für 76 Beiträge

    Standard

    Zitat Zitat von tino2512 Beitrag anzeigen
    grundsätzlich kannst du deinen pointer aber auch so erhöhen.
    L P#16.0
    +AR1
    Richtig. halte ich auch für die schönere Methode.

    Zitat Zitat von tino2512 Beitrag anzeigen
    L Zähler
    L L#16
    +D
    SLD 3
    LAR1

    Warum brauche ich den SLD 3 ?
    verstehe das momentan nicht so richtig.

    grüße tino
    In den rechten 3 Bits steckt die BITadresse (0..7), die wird damit ausgebendet. Esrt ab Bit 4 steckt die Wortadresse. (Tip: Ist in der S7 Onlinehilfe auch schön beschrieben)


    edit:
    @msb:
    Huch, da war ich wohl etwas langsam mit dem tippen

  8. #8
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja, das stimmt mit dem direkten erhöhen. Ich habe nur eine Variable durch eine Konstante für dieses Thema ersetzt. Ich versuche solche Sachen immer nur einmal zu schreiben.
    Für einmalige Anwendungen ist das ohne SLD sicherlich einfacher.

    Gruß, pt
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

Ähnliche Themen

  1. Zykluszeit definiert erhöhen
    Von mkd im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 01.04.2011, 10:38
  2. wie kann ich Zeitgliedadresse um 1 zu erhöhen?
    Von Arnold999 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 10.06.2010, 16:38
  3. Pointeradresse in einer STRUCT
    Von JoeCool16 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 25.11.2009, 09:18
  4. ar1 erhöhen um wert aus ew
    Von Ibaxx im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 26.09.2007, 12:57
  5. Adressregister: Pointeradresse anzeigen
    Von sven im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 12.07.2007, 07:46

Lesezeichen

Berechtigungen

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