Step 7 Array aus DB lesen und in weiteren DB schreiben

Freeesh12

Level-2
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Simatic S7 CPU 315-2DP

ich möchte aus einem IDB ein bestimmtes Array auslesen und weiß nicht wie ich hier anfangen soll.
DBW42 gibt mir vor welches ARRAY ich auslesen möchte (siehe rote Pfeile).

Kann mir hierzu jemand helfen.
Das ganze würde ich gerne in AWL realisieren.
Array im DB auslesen.png
 
Du meinst, in DBW42 steht der Index, welches Array-Element du lesen willst? Gib uns mal ein Beispiel. Bei Wert = 2 soll was gelesen werden?
Ansonsten: Stichworte für Suche in der Hilfe: "registerindirekte Adressierung" mit z.B. AR1 oder "speicherindirekte Adressierung" oder wenn du einen größeren Bereich lesen willst, dann ist vermutlich einfacher einen ANY-Pointer zu basteln und dann BLKMOV
 
Du weißt ja wo dein Array beginnt und welche Länge ein Fach hat.. so kannst du dir ja einfach einen Offset als fixen Wert für den Wert in act_comp_r bereitstellen
 
Dann will ich alle Daten (von 310 - 430) in einen Separaten DB schreiben.
Sicher? Die letzte Adresse (430) sollte normal eine ungerade Adresse sein.
Die Anfangsadresse für den Pointer berechnet sich so: Adresse := Index * 8 * Datensatzlänge + Anfangsadresse_des_Array;
(Berechnung in DINT machen)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich möchte aus einem IDB ein bestimmtes Array auslesen und weiß nicht wie ich hier anfangen soll...

Das klingt fast so, als möchtest du von extern, also nicht innerhalb des zugehörigen FB, auf diese Instanzdaten indirekt zugreifen? Das wäre ein ziemlich fataler Fehler.
 
Wer hat diesen Baustein erstellt ?
So viele 'Pointer', 'DB_buffer', 'AR1_buffer', AR2_buffer', ....

Warum muss es AWL sein ?
In SCL wäre dies schnell erledigt, ohne dass man Pointer zusammenstücken muss.
 
ich möchte aus einem IDB ein bestimmtes Array auslesen und weiß nicht wie ich hier anfangen soll.
Ach, das "IDB" habe ich übersehen. Das macht es in AWL noch etwas schwieriger, weil da (wahrscheinlich) noch der Multiinstanz-Offset aus AR2 addiert werden muss. In SCL wäre das kein Problem.
Erkläre mal noch genauer, wo der Kopier-Code laufen soll und wohin du kopieren willst. Liegt der Datensatz in OUT oder IN_OUT oder willst du direkt in einen externen Global-DB kopieren oder in einen IDB?
 
Sowie ich das sehe kann man bei dieser CPU kein SCL programmieren, deshalb AWL.

Ich möchte aus dem IDB in einen Globalen DB die Daten kopieren.
Kann man schon, wird dann wie bei Classic üblich, in AWL übersetzt und dann in MC7 Code.
Man benötigt halt das SCL Paket für Step 7.
 
ich möchte aus einem IDB ein bestimmtes Array auslesen und weiß nicht wie ich hier anfangen soll.
DBW42 gibt mir vor welches ARRAY ich auslesen möchte (siehe rote Pfeile).
...
Anhang anzeigen 88015
Sorry, aber ich verstehe nicht, wo Du die Arrays versteckt hast, von denen Du sprichst.
Für mein Verständnis besteht ein Array aus n Sätzen desselben DatenTyps.

ja genau im DBW42 steht wie in deinem Beispiel der Wert 2.
Dann will ich alle Daten (von 310 - 430) in einen Separaten DB schreiben.

Anhang anzeigen 88016
Alle o.g. Daten von 310 .. 430 ? Sollen das alle Sätze des Array sein oder 1 Satz des Array oder ... ?
Woraus ergibt sich die EndAdresse 430 und was soll sie bedeuten ???
 
Zurück
Oben