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

Ergebnis 1 bis 5 von 5

Thema: Indirekte Adressierung Pointer berechnen

  1. #1
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute
    Komme nicht weiter. Folgendes Problem:


    goon: AUF "Heizkurve_DB"
    L P#166.0 //Startadresse des Arrays
    LAR1
    L P#12.0
    +AR1
    L DBD [ AR1 , P#0.0 ]
    T #gewaehlte_Vorlauf_Temperatur

    Dieser Code funktioniert. Nun möchte ich aber den Pointer L P#12.0 dynamisch berechnen.
    Ich habe ein Array of Real. Nun möchte ich den vierten Inhalt dieses Arrays lesen und auf T #gewaehlte_Vorlauf_Temperatur ausgeben.

    Also Habe ich folgendes geändert:

    goon: AUF "Heizkurve_DB"
    L P#166.0
    LAR1
    L P##Zeiger_Vorlauf_Temp
    +AR1
    L DBD [ AR1 , P#0.0 ]
    T #gewaehlte_Vorlauf_Temperatur

    Die CPU geht nun auf Stopp. L P##Zeiger_Vorlauf_Temp ist ein DINT mit dem Inhalt 4. Es sollte nun das vierte DBD laden.
    Sieht jemand meinen Fehler?? Ich konnte es nicht lösen??

    Besten im Voraus für Eure Hilfe.
    Zitieren Zitieren Indirekte Adressierung Pointer berechnen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    dann erkläre ich dir mal, was du da gerade machst :
    du hast einen Pointer auf eine Adresse gebildet. Zu diesem addierst du die Pointer-Adresse an der Zeiger_Vorlauf_Temperatur steht hinzu, was bewirkt, dass du dann möglicherweise außerhalb deines DB-Bereichs einlesen willst.
    Vielleicht liest du dir die Pointer-Geschichte noch einmal durch. Ein Pointer basiert auf einer Bit-Adresse. Ein Byte hat 8 Bits, ein DINT besteht aus 4 Byte - wenn du den 4. DINT einlesen willst dann das noch einmal mal 4.
    Also :
    Code:
    L Zeiger_Vorlauf_Temperatur
    L 8
    *d
    L 4
    *d
    +AR1
    Gruß
    Larry

  3. #3
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die schnelle Antwort.
    Ja ich muss mir das wohl noch einmal zu Gemüte führen. Leider geht die SPS immer noch auf stopp.
    Ich habe es wie folgt korrigiert:
    Code:
    goon: AUF   "Heizkurve_DB"
          L     P#166.0
          LAR1
          L     #Zeiger_Vorlauf_Temp
          L     8
          *D
          L     4
          *D
          +AR1
          L DBD [ AR1 , P#0.0 ]
          T     #gewaehlte_Vorlauf_Temperatur
    War da nicht was: Inhalt (also 4)um 3 Stellen nach links verschieben? Ich weiss es eben nicht mehr....

  4. #4
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Nun die Lösung:
    Code:
    goon: AUF   "Heizkurve_DB"
          L     #Zeiger_Vorlauf_Temp    //Zeiger laden
          L     4                                   //da Realwerte mit 4 Multipl.
          *D
          SLD   3                                //Zeiger schieben
          L     P#166.0
          +D
          LAR1
          L DBD [ AR1 , P#0.0 ]         //Ziel laden
          T     #gewaehlte_Vorlauf_Temperatur


    Beste Grüsse an alle.

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Supermario73 Beitrag anzeigen
    Nun die Lösung:
    Der Code rechnet das gleiche wie der Code im Beitrag vorher.
    Also entweder sind beide richtig oder beide falsch.

    Hinweise: wenn #Zeiger_Vorlauf_Temp = 4 ist, dann wird die Adresse des 5. REAL im Array berechnet. Die Adresse des ersten REAL im Array erhält man mit #Zeiger_Vorlauf_Temp = 0

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Indirekte Adressierung / Pointer ???
    Von max1de im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.02.2012, 18:29
  2. Indirekte Adressierung über einen ANY Pointer
    Von sventek im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.12.2009, 06:33
  3. Indirekte Adressierung
    Von Kuddel30 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 20.11.2009, 12:52
  4. cpu stop indirekte adressierung pointer
    Von falk.jaeger im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 23.02.2009, 07:22
  5. indirekte Adressierung und Pointer ??????????????
    Von Mathias W. im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 13.10.2003, 20:21

Lesezeichen

Berechtigungen

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