Step 5 DB-Inhalte von einem DB in den nächsten

urlicht

Level-2
Beiträge
104
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits.
Als Gelegenheitsprogrammierer stehe ich vor folgender Aufgabenstellung:

Aus mehreren S5-135U mit VPA CPU (928-3UC11) sollen Zählerständen, die als INT und DINT in einem DB abgelegt sind zu einer bestimmten Uhrzeit 1:1 in einen weiteren, identischen DB kopiert werden. So sollen die Tageswerte für 24 Stunden erhalten bleiben, während im Ausgangs-DB weitergezählt wird.
Timer etc. funktionieren. Nur das Verschieben der DB-Inhalte erscheint mir aufwändig, zumal ich auch einen dritten DB mit Werten von Vorgestern kopieren möchte. Gibt es hier eine Operation wie in S7: SFC20 BLK MOV, ggf. sogar wie dort unabhängig von der Datenstruktur (Wort/Doppelwort)? Wie würde die aussehen, wenn ich z.B aus DB10 die DW0 bis DW10 in den DB11 kopieren wollte? In der Aufgabe kommen ca. 120 werte auf mich zu. Ich wäre Euch Profis für eine Hilfe sehr dankbar. :confused:
 
In der 948ér gabs mal einen OB182 der dem BLK MOV recht ähnlich war. Der müsste m.E. in der 928 auch laufen.

Edit: Sorry, läuft nur in der 948. Dann musst du dir manuell einen Baustein basteln der das macht.
 
Zuletzt bearbeitet:
In der 948ér gabs mal einen OB182 der dem BLK MOV recht ähnlich war. Der müsste m.E. in der 928 auch laufen.

Edit: Sorry, läuft nur in der 948. Dann musst du dir manuell einen Baustein basteln der das macht.

Hallo Aventinus,

Du hast Recht. Auch die CPU 928B hat lt. Programmieranleitung einen OB182 (Datenbereich kopieren) als integrierte Sonderfunktion. Habe die entsprechenden Seiten mal angehangen.
 

Anhänge

  • S5-135U CPU 928B Programmieranleitung.pdf
    23 KB · Aufrufe: 23
S5-DB kopieren

Hallo zusammen !

Dann musst du dir manuell einen Baustein basteln der das macht.

Andere Lösung = indirekte Addresierung mit B Befehl + Übetragungsschleife


ja, sehe ich auch so !

Hab´deshalb mal mein altes Handbuch bemüht ...;)

Ich hoffe, es hilft weiter :)

Code:
NAME: COPY
BEZ: DBQ B    ; Quell-DB
BEZ: DBZ B    ; Ziel-DB
BEZ: ANZA DKF ; Anzahl
BEZ: AQU EW   ; Anfang in Quelle
BEZ: AZI EW   ; Anfang in Ziel

          LW =AQU            ;Parameter in MW laden
          T MW 2 
          LW =AZI
          T MW 4
          LW =ANZ
          T MB 6

M826:  B =DBQU                ; 1.Wert aus Quelle laden
          B MW 2
          L DW 0
          B=DBZ               ; in 1. Wert im Ziel ablegen
          B MW 4
          T DW 0
          L MW 6              ; Anzahl dekremetieren
          D 1
          T MB 6
          L KB 0              ; Pruefen, ob Anzahl erreicht
          !=F
          BEB                 ; Aussprung, wenn ja

          L MW 2              ; wenn nicht, Paremeter fuer
          I 1                 ; naechsten Wert setzen
          T MW 2
          L MW 4
          I 1
          T MW 4
          SPA =M826           ; und dann nochmal...
          BE

Sollte auch auf deiner CPU laufen !

Gruss

P.S. Tippfehler sind geschenkt !
 
Hi Paule,

jo, da warst du warst schneller...

Hab´auch gerade den 2. Thread von Urlicht gefunden :)

Na, nu hat er 2 Lösungen zum Probieren..

Gruss
 
Hallo,
in der Lösung von SoftMachine ist ein kleiner Fehler

LW =ANZ
T MB 6 <------ wenn MB 6

L MW 6 <---- dann auch hier, oder beide MW 6

Eins im MB 6 = 256 im MW 6.
 
Zuletzt bearbeitet:
Zurück
Oben