indirekte Adressierung

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe ein Programm bei dem ich verschiedene PEWs auf einen PAW leiten möchte, dazu habe ich folgenden Teil programmiert:

Code:
      L     #aktuellerPEW               //Lade aktuelles PEW
      SLD   3                           //Umwandlung des #aktuellenPEW in das Pointerformat Bereichsinterner Zeiger
      TAR1                              //Transferiere ins Adressregister  1 der CPU
      L     PEW [AR1,P#0.0]             //Lade das PEW, dessen Adresse im Adressregister 1 steht(ohne Offset)
      T     #AusgangPAW                 //Transferiere zum PAW

Jedoch scheint dies nicht zu funktionieren. Das PAW zeigt nicht den Wert des PEW an. Wo liegt der Fehler? #aktuellerPEW ist ein Integerwert wie z.B. 288.

Vielen Dank für Eure Hilfe,
Matthias
 
Zeigeradressierung

Hallo!

wenn du LAR1 anstatt TAR1 nimmst müsste das gehen so wie du die das denkst. Aber wies aussieht willst du das immer aufs gleiche PAW ausgeben, oder? Und als Intergerwert wird ausgewählt welches PEW umkopiert werden soll.

MfG
André Räppel
www.sps-concept.de
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau, ich möchte über das Schieben und transferieren in das AR1 erreichen, dass der PEW variiert und an immer das gleiche PAW transferiert wird. also wird LAR1 nichts bingen, da ich erst die Adresse ins AR schieben muss.
 
Also um nochmal genau die Funktion zu beschreiben: Ich habe eine Variable #aktuellerPEW in der der PEW als Zahl gespeichert ist. Beispielsweise 288. Diese Zahl variiert bei jedem durchlauf. Ich muss diese Zahl also in das Pointerformat bringen um den Eingang auf einen festen PAW zu bringen. Es soll in diesem Beispielsdurchgang also nichts anderes passieren als

Code:
L PEW288
T PAW288

im nächsten durchgang könnte das dann lauten:

Code:
L PEW290
T PAW288

Nur gerade dieses Transferieren macht er nicht. Wo mache ich den Fehler?
 
was für daten liest du den überhaupt ein?
möglicherweise brauchst du die bausteine sfc14 und sfc15 um die daten konsistent zu lesen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
das soll universell sein, so dass ich diesen Baustein in diversen Projekten einsetzen kann. Daran kann es aber nicht wirklich liegen, da ich an einer anderen Stelle das gleiche Problem habe. Müsste denke ich ein logischer Fehler sein:
Code:
 L     #AusgabeBit_Start
      L     #Bytebereich_I              //Lades aktuelles PEW
      +I    
      SLD   3                           //Umwandlung des #aktuellenPEW in das Pointerformat Bereichsinterner Zeiger
      TAR1                              //Transferiere ins Adressregister  1 der CPU
      S     A [AR1,P#0.1]               //Lade das PEW, dessen Adresse im Adressregister 1 steht(ohne Offset)
An anderer STelle will ich dies machen. Kurze Beschreibung: Eine Byteadresse soll zusammenaddiert werden (zwei Integer werte) beispielsweise 2+4 sodass ich auf dem AB6 lande und dann für das Pointerformat 3 Stellen geschoben werden. Anschließend soll das ganze in das Adressregister geladen werden und dann mit der indirekten Adressierung auf Ax.1 verweisen wie in meinem Beispiel also auf A6.1 und diesen Ausgang setzen.

Aber auch dies kappt nicht. ist ja quasi das gleiche PRinzip, aber löuft nicht.
 
Beitrag richtig lesen!!

Hallo Matthias,

wer lesen kann is klar im Vorteil! Du sollst anstatt TAR1 -> LAR1 nehmen. Denn mit TAR1 schiebst du den Inhalt des AR1 in den Akku und nicht umgedreht.

MfG
André Räppel
www.sps-concept.de
 
Hallo zusammen,
Um den Inhalt vom Akku1 in ein Adressregister zu laden muss der Befehl
LAR1 oder LAR2 benutzt werden. Mit TAR1 oder TAR2 wird das aktuelle Adressregister in den Akku1 kopiert.

Um solche Programme zu testen eignet sich übrigens der Debugmodus.
Im Debugmodus kann Befehl für Befehl abgearbeitet und die Register beobachtet werden.
Folgendes gibt es dabei zu beachten:
- Die SPS wechselt in den Modus Halt (alle Ausgänge log.0)
- Der Baustein muss Online geöffnet werden.
- Unter Ansicht muss explizit Darstellung AWL angewählt sein.
- Die Betriebsart der CPU muss auf Testbetrieb geschaltet sein (nicht Prozessbetrieb)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo nochmal,
vielen Dank schon mal ich bin schon ein großes Stück weiter. Da stimmt es natürlich, dass man LAR und nicht TAR nehmen muss. Ich bekomme aber trotzdem noch keinen transfer auf das PAW hin. Laut PG-Beobachtung scheint die Adresse jetzt zu stimmen, aber er macht es irgendwie trotzdem nicht.
 
Hallo Matthias,

versuch mal statt SLD 3 --> SLW 3
also :
Code:
L #aktPEW   // Var IN  int
SLW 3
LAR1
L PEW[AR1,P#0.0]
T #aktPAW  // Var Out  WORD

das sollte eigentlich funktionieren.

mfg.
Rolf
 
Zurück
Oben