Indirektes lesen eine DBD...

AndreK

Level-1
Beiträge
415
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Also soweit bin ich schon...

L D [AR1,P#0.0]

Wenn ich nun in 4er Schritten ab DBD0 erfassen will muß ich den AR1 hochzählen? Habe ich das richtig verstanden?

Also in einer Schleife...
L 4
+AR1

Dann würde ich die Doppelwörter 0,4,8,... lesen...

Wie kann ich dann zu beginn der Schleife den AR1 auf 0 setzen?

Oder ist das ein Denkfehler?
Ich bedanke mich schon mal vorab und entschuldige mich für die geistige Belastung am Montag Vormittag...:rolleyes:
 
Hallo Andre,

das AR1 auf null setzten:
L 0
LAR1

beim aufaddieren des AR1 musst Du beachten, dass die rechten 3 Bit des Pointers
die Bit-Adresse sind. Deshalb nach dem L 4 ein SLD3 einbauen.

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kannst auch mit

Code:
+AR1    P#4.0
hochzählen

nullen geht mit

Code:
L    0
LAR1
um mit deiner 4 zu arbeiten vorher SLD 3 machen ... da die ersten drei bit das bit und die folgenden das byte adressieren
 
Zuletzt bearbeitet:
nicht richtig ...

wenn du den AR1 Doppelwortweise hochzählen willst so ginge das mit :
Code:
L P#4.0
+AR1
den du zum AR1-Register hinzuzählst ...

Auf 0 setzen kannst du dann mit :
Code:
L 0
LAR1
Gruß
LL

Nachsatz:
da du jetzt 3 Mal deine Lösung hast wird es dann wohl klappen ...
 
Alles wunderschön... aber...

kann man da auch Variabelen (Integer) irgendwo reinbauen?

Ich habe eine Schleife 0-100, dazu werden ab DBW0 die Doppelwörter gelesen... bei einer Bedingung X wird aus der Schleife gesprungen. Soll für Sollwertkurven sein... 0-100 kann man schön skalieren :)

So... jetzt zum AR1 oder dem Pointer...
Ich kann jetzt entweder:
L x (wobei X = Schleife * 4 ist)
L AR1
L D [AR1,P#0.0]
dann habe ich meinen DBD geladen?

kann man auch die Aufrufadresse direkt im Pointer einbauen? Also die P#0.0 durch eine Variabele ersetzen...
L D [AR1,P#0.0]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kann man da auch Variabelen (Integer) irgendwo reinbauen?

schau dir den unterschied zwischen registerindirekten und speicherindirekten adressierung an.

So... jetzt zum AR1 oder dem Pointer...
Ich kann jetzt entweder:
L x (wobei X = Schleife * 4 ist)
L AR1
L D [AR1,P#0.0]
dann habe ich meinen DBD geladen?

nö. haste nich, zumindest nicht das, was du laden wolltest ... SLD 3

kann man auch die Aufrufadresse direkt im Pointer einbauen? Also die P#0.0 durch eine Variabele ersetzen...
L D [AR1,P#0.0]

nö, nicht bei der registerindirekten adressierung ... bei der speicherindirekten schon
 
Also, so...

L x (wobei X = Schleife * 4 ist)
SLD 3
L AR1
L D [AR1,P#0.0]
dann habe ich meinen DBD geladen?

Ich glaube ich tippe den Zugriff doch 100 mal ein :sb8:
 
L x (wobei X = Schleife * 4 ist)
SLD 3
L AR1
L D [AR1,P#0.0]
dann habe ich meinen DBD geladen?

jopp ... so einfach kann es sein ... wobei du, wenn du aus einem globalen datenbaustein laden willst auf

Code:
*
      L     DBD [AR1,P#0.0]

zugreifen solltest und vor der schleife das

Code:
*
      AUF   DB     y
nicht vergessen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja...

das AUF DB hab ich schon...

Mich nervt nur der extrem lange Baustein... in dem der Inputwert auf 0.100 verglichen wird um dann entsprechend den Werd aus dem DB zu laden...

Also das hier 100 mal...
//============================
L #IN
L 9.800000e+001
<R
= #TMP
U #TMP
SPB ENDE
L DBD 392
T #out

Warum kann man eine SPS nicht in VB programmieren ...:cool:
 
SCL habe ich mir abgewöhnt...

...auch wenn es einfacher scheint!

Woanders werden Leute die eine Frikadelle essen rausgeworfen, das Team das für den Editor zuständig ist/war darf sogar noch leben.... komisch komisch....:rolleyes:

Wenn man den mal auf die höher der Zeit bringen würde...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
na na na ... da habe ich aber schon weit Schlimmeres gesehen ...
Für mich wäre hier auch SCL das Werkzeug der 1.Wahl ... und man erhält einen schönen übersichtlichen Code :)

Aber das muß ja jeder selbst wissen ...

Gruß
LL
 
Zurück
Oben