bestimmte Werte aus DB lesen

selly

Level-1
Beiträge
41
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
:confused:Hallo Leute, ich weiss net was heute los ist. Steh gerade irgendwie voll auf dem Schlauch.

Wenn ich jedes mal einen anderen Wert aus einem Datenbaustein lesen möchte, z.B.
ich habe eine Arithmetik in der ein Wert x errechnet wird. Im Datenbaustein (werte von 0..100 Byte) möchte ich genau exakt den Wert auslesen, den x gerade hat. Also ist Beispielsweise x gerade 5, dann möchte ich den 5.ten Byte des Datenbausteins lesen.

in meinem Programm wäre es dann beispielsweise:

db15.dbb5

wie kann ich das Programmieren bzw. wie lautet der Befehl, das exakt das x te Byte aus dem DB gelesen wird??

Dieser DB-Wert wird dann nämlich auf ein Funktionsbaustein kopiert.

Bitte um HILFEEEE :confused::confused::confused::confused::confused::confused::confused::confused::confused::confused:
 
Klappt nicht:(

Das klappt irgendwie nicht....
kann mir nicht mal bitte einer Helfen:

Folgendes: Angenommen, ich habe einen Wert xxx von Datentyp Byte. Ich möchte exakt um diesen Wert verschoben auf den DB15 zugreifen.
BSP: x hat den 5
d.h. ich möchte den Inhalt DB15.DBW5 herauslesen


Ist x=7, möchte ich DB15.DBW7 herauslesen

ist x=2 dann DB15.DBW2

wie lautet da die Befehlsfolge? Wie mach ich das mit diesen Pointer, ich kriege es einfach nicht gebacken :((((
 
Hallo Selly,

wenn Du Bytes lesen willst, dann musst Du das so machen:

DB15.DBB5

Grüße
Gebs


 
Zuviel Werbung?
-> Hier kostenlos registrieren
sry mein fehler bei der Angabe,

das habe ich auch so.

Das sollte nur mal so eine generelle Problemdarstellung sein.
Ich schreibe das schon als Byte dann.

Mein Problem ist, wie ich den Programcode dafür schreibe.
Anscheinend geht es nur über Pointer aber irgendwie klappt das nicht so wie ich will.

Wie lautet denn für so etwas der Code, haben doch bestimmt viele schon gemacht oder???

Danke im voraus


MFG SELLY
 
volker hat dir doch schon die antwort gegeben!

Statt dem
"L 5"

Musst du nur deinen Wert laden!
Also etwa

L DB10.DBW10 'oder was auch immer
sld 3
lar1
auf db15
l dbb[ar1,p#0.0]
t DB10.DBW12 'oder wo auch immer hin
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute, ich hab ein Ähnliches Problem wie BPlagens Ich hab einen DB210 und der ist voll mit Addresen für einen Positionierantrieb. Jetzt soll mit jedem Takt ein andere Wert aus dem DB gelesen werden.
Code:
0.0   Position.PO1    INT    10          
2.0   Position.PO2    INT    20          
4.0   Position.PO3    INT    30           
6.0   Position.PO4    INT    40           
8.0   Position.PO5    INT    50
Jetzt hab ich vor irgendwo sitzt ein Zähler und zählt immer in 2 Schritten noch oben und schreibt dann in eine Variable 0.0..2.0.. und so weiter. (Wie ich das löse weiß ich noch nicht.)

Dann müsste mein Code doch so ausssehen:

L ZAEHL
sld 3
lar1
auf db210
l dbw[ar1,p#0.0]
t POSI_1

Oder?

Gruß Guts2
 
Wenn du Worte so adressieren möchtest, dann muß der SLD3 in SLD4 geändert werden (SLD3 erzeugt einen Byte-Pointer, SLD4 einen Word-Pointer und SLD5 einen DWord-Pointer).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du Worte so adressieren möchtest, dann muß der SLD3 in SLD4 geändert werden (SLD3 erzeugt einen Byte-Pointer, SLD4 einen Word-Pointer und SLD5 einen DWord-Pointer).

Sorry, Larry, aber das stimmt so nicht. Es muss um 3 nach links geschoben werden (SLD3), weil die Byte-Adresse im Pointer ab Bit 4 beginnt, es muss also beim jedem Byte-/Wort-/Doppelwortaufruf über einen Pointer, der aus einer Integerzahl generiert wird, um 3nach links geschoben werden.
 
@M-Ott:
Der Pointer ist grundsätzlich eine Bit-Adresse. Ein Byte hat 8 Bit - deswegen SLD3 oder auch "mal 8". Willst du ein Wort ansprechen, so mußt du das nochmals verdoppeln - also entweder gleich SLD4 oder "mal 16". Willst du ein Doppelwort ansprechen, dann eben so weiter ...
 
das schieben um 4 bzw 5 ist nur eine vereinfachung der multiplikation mit 2

l 5
sld 4
lar1
ergibt einen pointer auf adresse 10

ist das gleiche wie
l 5
l 2
*i
sld3
lar1
auch das ergibt adresse 10
-------------

l 5
sld 5
lar1
ergibt einen pointer auf adresse 20

ist das gleiche wie
l 5
l 4
*i
sld3
lar1
auch das ergibt adresse 20

das ganze ist aber auch ausführlich in der faq beschrieben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also da muss ich M-Ott schon Recht geben Larry.
Der Pointer ist grundsätzlich eine Bit-Adresse.
Das stimmt ja schon mal gar nicht.
Es werden Pointer im Wort oder Doppelwortformat angegeben.
Pointer im Wortformat geben als Dezimalzahl z.B.: die Nummer einer Zeit oder eines Zähler oder DB oder FC / FB an, aber keine Bitadresse.
Pointer im Doppelwortformat geben die genaue Adresse an die immer aus dem Byte und dem Bit besteht.
Willst du ein Wort ansprechen, so mußt du das nochmals verdoppeln - also entweder gleich SLD4 oder "mal 16". Willst du ein Doppelwort ansprechen, dann eben so weiter ...
Ob ich SLD4 oder SLD5 schreibe hat doch nichts mit Wort oder Doppelwort zu tun, hier wird nur gleich die Zieladresse geändert, genau so wie es Volker beschrieben hat.
 
Zurück
Oben