Indirekte Adressierung Pointer berechnen

Supermario73

Level-2
Beiträge
77
Reaktionspunkte
2
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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....
 
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.
 
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
 
Zurück
Oben