ständig neue werte aus DB auf den ausgang legen

McPaul

Level-1
Beiträge
32
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi!

ich möchte 480 Doppelwörter aus einem DB auf 64 Ausgänge legen.

Beispiel:

alle 10 Sekunden soll gleichzeitig

DB10.DBD 0 auf AD0
DB10.DBD 4 soll auf AD4

dann wieder nach 10 sekunden

DB10.DBD 8 soll auf AD0
DB10.DBD 12 soll auf AD4

usw.


Es sollen also nur alle 10 sekunden neue werte aus einem vorhandenem Datenbaustein auf immer die gleichen Ausgänge gelegt werden.


Hat jemand eine Idee,Lösungsvorschlag oder einen Tip?

Danke!!!!!!!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Larry Laffer,

FAQ habe ich schon gelesen, aber blicke da nicht so durch. Kenne mich mit Pointern leider nicht aus. Werde es mal studieren,brauche nämlich ganz schnell eine Lösung.

Vielleicht hast du einen Ansatz für mich?

Danke
 
Im Grunde so, wie in dem Beitrag von Volker geschildert ...

Was ist konkret dein Problem bei der Pointer-Geschichte ? Ich bin nicht der Meinung, dass ich dir damit helfe, wenn ich dir so eine Routine schreibe, wenn du das Ergebnis letztlich nicht verstehst ...

Gruß
LL
 
Muss mich einfach noch mehr damit befassen! Wenn du mir was schreibst und ich es nicht verstehe, dann hat es keinen Sinn!
Habe noch nie mit Pointern gearbeitet und das ist das Problem!

Ich Versuche mal einen eigenen Ansatz und stelle den dann hier rein!
Vielleicht klappt es ja sofort!

Gruß McPaul
 
Ja,gerne sogar! Ich kenne nur Pointer und Arrays aus C/C++!Da wüste ich, wie es zu machen wäre,aber in Step 7 in AWL?

Gruß Paul
 
Ich habe dir da mal etwas aus einem etwas älteren Beitrag von mir heraus-Kopiert ...

Anstelle eine Variable (Datenwort) direkt zu adressieren (L DB10.DBW 12) kann du es auch indirekt (über Pointer = Zeiger) ansprechen. Hier gibt es 2 Möglichkeiten. Die eine wäre über das Adress-Register (AR1 oder AR2) wie im Beispiel in der FAQ. Eine andere direkt über den Pointer (L DBW [Pointer]).

Der Pointer in der S7 basiert auf Bit-Adressierung. Das heißt, wenn du ein Byte ansprechen willst, dann mußt du im Pointer berücksichtigen, dass das 8 Bit beinhaltet. Hierfür wird dann gerne der SLD-Befehl herangenommen (SLD 3 bedeutet das Gleiche wie "mal 8").

Willst du das Datenwort 4 in deinem DB ansprechen dann programmierst du :

Code:
Pointer : dword 
 
L 4
SLD 3
T Pointer 
 
L DBW [Pointer]

Hast du das soweit verstanden ?
 
Zuletzt bearbeitet:
Wenn du damit das DBD0 meinst , ja ...

Wie kommst du vom DB zum Ausgang ?
Wie kommst du an das nächste Daten-Paar ?
 
Gefällt mir nicht ...
Nimm für den Hilfs-Pointer (im Moment die 12) mal eine Variable.
Warum +48 ? Sollte nicht als nächstes das DBD20 / 24 geladen und auf die Ausgänge gebracht werden ?
 
Zurück
Oben