Hilfe mit Pointern

d.schubert1982

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe SPS-Jünger,

also, ich versuche mich erstmals an Pointern. Folgendes will ich bewerkstelligen:

In DB10 sind Zählwerte (integer) gespeichert.

DB10.dbw0 - Zählwert für Pos1
DB10.dbw2 - Zählwert für pos2
DB10.dbw4 - Zählwert für pos3
.
.
.
DB10.dbw70 - Zählwert für pos36


Bei jedem Signal an E10.0 soll Zählwert im gewählten DB-Fach um 1 erhöht werden.

Bei Signal an E10.1 soll in nächstes DB-Fach gewechselt werden.(+AR1 P#2.0????), nach Pos 36 wieder zu Pos 1

Bei Signal an E10.2 sollen alle Fächer 0 gesetzt werden.

Ich habe mich schon 2 Tage durch Forum gelesn und schon einiges probiert. Iregendwie seh ich nun den Wald vor lauter Bäumen nicht mehr...

Könnt Ihr mir helfen?


Viele Grüße

Dirk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe mir den Beitrag durchgelesen.
Folgendes war mein Ansatz:
Code:
AUF   DB1
L 0
SLD 3
LAR 1
U     E     10.0
FP    #fl1
SPBNB Ende
L     DBW [AR1,P#0.0]
L     1
+I    
T DBW [AR1,P#0.0]
U     E     10.1
FP    #fl2
SPBNB Ende
+AR1  P#2.0

MfG
 
Zuletzt bearbeitet:
Hallo Dirk,

erst mal herzlich willkommen im Forum!

Zu Deinem Ansatz:
Wo mekst Du Dir die Fach-Nummer? => ein DBW in Deinem DB? =>
Code:
AUF DB 1
L DBW x     // Fach-Nummer
SLD 3
LAR1
Du überspringst die Erhöhung des Zählwertes UND der Fach-Adresse wenn E 10.0 = 0. Ist das so gewollt?
Besse wäre:
Code:
U E 10.0
FP #F11
SPBN PLUS
...
PLUS: NOP 0
U E 10.1
SPBN NEXT
L DBW x  // Fach-Nummer
I 1
T DBW x // Fach-Nummer
L 36 // höchste Fach-Nummer
>=I
SPBN NEXT
L 0
T DBW x // Auf 1. Fach setzen
NEXT: NOP 0

U E 10.2
SPBN Loes

Hier Deine Schleife zum löschen aller Fächer

Loes: NOP 0

Grüße
Gebs
 
Hallo,

vielen Dank, ich versuche mich gerade dran, aber es will nicht so richtig. Die aktuelle Fach-Nr is im dbw72 gespeichert.

Also:
Code:
AUF DB 1 
L dbw 72
SLD 3
LAR1
U E 10.0
FP #F11
SPBN PLUS
PLUS: NOP 0
U E 10.1 
SPBN NEXT 
L DBW x  // Fach-Nummer 
I 1 T DBW x // Fach-Nummer 
L 36 // höchste Fach-Nummer 
>=I SPBN NEXT 
L 0 
T DBW x // Auf 1. Fach setzen 
NEXT: NOP 0 
U E 10.2
SPBN Loes

in dbw 72 steht ne 1 ansonsten tut sich nix...


MfG

Dirk
 
Zuletzt bearbeitet:
Hallo nochmal,

hier nun meine funktionierende Lösung. Lässt sich sicher etwas besser gestalten, aber für den Augenblick bin ich Stolz.... :)


Code:
 AUF DB10
      L     DBW   72
      SLD   3
      LAR1  
      U E10.1
      FP    #fl1
      SPBN  M001
      L     DBW   72
      L     2
      +I    
      T     DBW   72
      L     72
      >=I   
      SPBN  M001
      L     0
      T     DBW   72
M001: U E10.2
      FP    #fl2
      SPBN  M004
      L     0
      T     DBW   72
      SLD   3
      LAR1  
      L     36
M003: T     #Schleifenzahl
      L     0
      T     DBW [AR1,P#0.0]
      L     DBW   72
      L     2
      +I    
      T     DBW   72
      SLD   3
      LAR1  
      L     #Schleifenzahl
      LOOP  M003
      L     0
      T     DBW   72
      SLD   3
      LAR1  
M004: U E10.0
      FP    #fl3
      SPBN  M005
      L     DBW [AR1,P#0.0]
      L     1
      +I    
      T     DBW [AR1,P#0.0]

M005: NOP   0

Nochmals Danke für die Hilfe!
 
Vielleicht ein kleiner optimierungsansatz:

Warum addierst du in deiner Schleife nicht sofort das Adressregister mit p#2.0?

Code:
L     36 
M003: T     #Schleifenzahl       
L     0       
T     DBW [AR1,P#0.0]
L     DBW   72
L     2
+I
T     DBW   72
SLD   3
LAR1
L     #Schleifenzahl
LOOP  M003

Code:
L     36 
M003: T     #Schleifenzahl       
L     0       
T     DBW [AR1,P#0.0]
+AR1 P#2.0
L     #Schleifenzahl
LOOP  M003

Da du dich ja jetzt intensiver mit indirekter Adressierung und Pointern beschäftigt hast, kannst du auch noch weiter machen.
Jetzt bist du im "Saft".
 
Zurück
Oben