Programmschleife

RainerP

Level-1
Beiträge
26
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in einem DB mehrere Werte mit einem Offset beschreiben:
Beispiel: Offset = 100
1. Wert = 100
2. Wert = 1. Wert + Offset
3. Wert = 2. Wert + Offset
usw.

meine Programmschleife sieht so aus:
1. Netzwerk

L DBNO // DB-Register
T #DB_REGISTER
TAR1 #AR1_REGISTER // AR1-Register

2. Netzwerk

U #Sort
SPB AUS
AUF #DATENBAUSTEIN // Datenbaustein
L #STARTADRESSE // Startadresse
ITD
SLD 3
T #BEREICHSZEIGER // Bereichszeiger
L #BLOCKANZAHL // Blockanzahl
L 1
-I
M01: T #SCHLEIFE_1
L #BEREICHSZEIGER // Bereichszeiger
LAR1
L #ABSTAND
L DBD [AR1,P#0.0] // Wert 1
+D
T DBD [AR1,P#4.0] // Wert 2
L P#4.0
+AR1

L #SCHLEIFE_1
LOOP M01
UN #Sort
S #Sort
AUS: NOP 0

3. Netzwerk

AUF DB [#DB_REGISTER] // DB-Register
LAR1 #AR1_REGISTER // AR1-Register


Leider funktioniert das ganze nicht.
Was mach ich falsch?
 
Schnell mal drübergeschaut würde ich sagen, du lädst ja am Anfang der Schleife immer wieder "#Bereichstzeiger" ins AR1, also passiert da auch nichts.

Also entweder

a) "P#4.0" nicht ins AR1 laden, sontern zu "#Bereichszeiger" dazuaddieren, dann zu M01 zurück "loopen" ;)
oder aber
b) "M01: T #SCHLEIFE_1" nach "#Bereichszeiger" schreiben und nach "T #BEREICHSZEIGER // Bereichszeiger" ein "LAR1"

Kannst ja beide Versionen mal testen.

Das ITD läßt du weg, sonst bekommst du evtl. Probleme, wenn du deine Adressen weit hinten in einem DB liegen hast. Ein Pointer ist eh ein DWORD und keine DINT. Das hatte ich frühfer auch falsch, bis irgendwann ein Umkopieren weit hinten im DB nicht mehr funktionierte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab jetzt den Baustein so geändert:

U #Sort
SPB AUS
AUF #DATENBAUSTEIN // Datenbaustein
L #STARTADRESSE // Startadresse
// ITD
SLD 3
T #BEREICHSZEIGER // Bereichszeiger
LAR1

L #ABSTAND
T DBD [AR1,P#0.0] // Wert 2

L #BLOCKANZAHL // Blockanzahl
M01: L 1
-I
T #SCHLEIFE_1 // Bereichszeiger

L DBD [AR1,P#0.0] // Wert 1
L #ABSTAND
+D
T DBD [AR1,P#4.0] // Wert 2
L P#4.0
+D
T #BEREICHSZEIGER
LAR1

L #SCHLEIFE_1
LOOP M01

UN #Sort
S #Sort
AUS: NOP 0



mit dem Erfolg, das die ersten drei Werte wie gewünscht beschrieben werden.
Aber dann ist Schluß. steh irgendwie total auf dem Schlauch.....
 
Versuche es mal so:

Code:
U #Sort
SPB AUS

AUF #DATENBAUSTEIN // Datenbaustein
L #STARTADRESSE // Startadresse
SLD 3
T #BEREICHSZEIGER // Bereichszeiger
LAR1 

L #ABSTAND
T DBD [AR1,P#0.0] // Wert 1

L #BLOCKANZAHL // Blockanzahl

M01: [COLOR=#ff0000]T #SCHLEIFE_1[/COLOR]

L DBD [AR1,P#0.0] // Wert 1
L #ABSTAND
+D 
T DBD [AR1,P#4.0] // Wert 2

[COLOR=#ff0000]+AR1  P#4.0[/COLOR]

L #SCHLEIFE_1
LOOP M01

UN #Sort
S #Sort

AUS: NOP 0

Man könnte statt

+AR1 P#4.0

schreiben

L #BEREICHSZEIGER
L P#4.0
+D
T #BEREICHSZEIGER
LAR1

Dann hat man in #BEREICHSZEIGER immer die zu bearbeitende Adresse stehen.
 
Zuletzt bearbeitet:
M01: L 1
-I
T #SCHLEIFE_1 // Bereichszeiger
.
.
.
L #SCHLEIFE_1
LOOP M01

Also wenn ich mich recht erinnere, dann dekrementiert dir der loop-Befehl den Akku um 1 und springt, falls größer als 0, zu M01.
An der Sprungmarke M01 solltest du das Ergebnis wieder in #Schleife_1 schreiben.

Code:
L 10
M01: T #Schleife_1
.
.
.
L #Schleife_1
LOOP M01

Gruß wolder

Edit: zu spät...
 
Zurück
Oben