TIA Startwert von DB aus Ladespeicher in den Arbeitsspeicher Laden

NexusX1

Level-2
Beiträge
23
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forum Gemeinde,

habe folgende Aufgabenstellung bekommen.

Und zwar soll durch setzen eines Bit`s alle Global DB`s auf den Startwert bzw. auf den Auslieferungszustand zurück gesetzt werden.

Hierfür wäre mein Gedankengang gewesen dass ich mit Hilfe eines Befehls alle Datenbausteine durch idente "Standard Parameter Datenbausteine" überschreibe.
Dazu fällt mir aber keine Funktion ein die das bewerkstelligen könnte, BLK Move möglicherweise?
Bei BLK Move wird ja nur der Inhalt überschrieben was durchaus gewünscht ist, nur glaube ich dass der befehl mit komplizierte Strukturen nicht klar kommt.

Als anderen Ansatz habe ich gedacht könnte man ja das gesamte Programm im Arbeitsspeicher durch das Programm im Ladespeicher ersetzen da in diesem ja alle Startwerte vom Auslieferungszustand vorhanden sind nur leider fällt mir hierzu auch keine Funktion ein mit der ich das bewerkstelligen kann.

Möglicherweise fällt euch noch ein anderer bzw. einfacherer Weg ein wie ich das Problem angehen kann.

Im Übrigen sind es insgesamt 10 DB`s mit Bool, Int, Word, Real, Date_and_Time, Struct`s und Array`s.

Hoffe ihr könnt mir weiterhelfen.

MFG Nexus
 
Moin,

wie immer zuerst die Nachfrage: welche CPU programmierst Du?
(Weil nicht alle CPU DB aus dem Ladespeicher "nachladen" können.)

Wenn Deine CPU die Systemfunktion/Anweisung READ_DBL (SFC83) hat, dann kannst Du es damit machen.
Ansonsten kannst Du "Urlöschen" auslösen - das Urlöschen macht genau das, allerdings für alle DB.

Harald
 
Super danke hab ich gefunden, nur leider hab ich das Problem dass ich wenn ich bei dem Eingang SRCBLK zB.: %DB500 schreibe diese Variable rot hinterlegt wird.
Als Hilfe wird mir angezeigt dass der DB den Datentype Variant haben soll.

Hör das erste mal von so einem Datentyp und weis erlich gesagt nicht wie ich zu so einem Datentype komme.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aus der TIA Hilfe. Da setht auch noch mehr zu dem Datentyp

Ein Parameter vom Datentyp VARIANT ist ein Zeiger bzw. eine Referenz. Er kann auf Variablen verschiedener Datentypen zeigen. Der VARIANT-Zeiger kann auf keine Instanz und damit auch auf keine Multiinstanz oder ein ARRAY of Multiinstanzen zeigen. Der VARIANT-Zeiger kann ein Objekt eines elementaren Datentyps, wie z. B. INT oder REAL, sein. Es kann auch ein STRING, DTL, ARRAY of STRUCT, UDT oder ein ARRAY of UDT sein. Der VARIANT-Zeiger kann Strukturen erkennen und auf einzelne Strukturkomponenten zeigen. Ein Operand vom Datentyp VARIANT belegt keinen Platz im Instanz-Datenbaustein oder dem Arbeitsspeicher. Innerhalb des Speicherbereichs der CPU wird jedoch Speicherplatz belegt.
 
nur leider hab ich das Problem dass ich wenn ich bei dem Eingang SRCBLK zB.: %DB500 schreibe diese Variable rot hinterlegt wird.
Du mußt den Symbolname des DB an SRCBLK angeben, z.b. "myDBxyz".

(VARIANT ist der neue Datentyp für "Pointer auf irgendwas" (ähnlich ANY), nur daß Siemens uns nicht in den Aufbau des Datentyps schauen lassen will, damit wir ihn nicht zusammenbasteln/manipulieren können)

Harald
 
Wie Blackpeat schon schreibt kann man dem READ_DBL keinen ganzen optimierten Datenbaustein übergeben weil der Variant es nicht zulässt.
Bei opt. Datenbaustein müsstest du die betroffenen Daten im DB in eine Hüll-Struktur (STRUCT) packen. Diese akzeptiert er dann.
Nicht optimiert müsste mit ANY auch gehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA V13:
Nicht optimierte DB akzeptiert der VARIANT sofort.
Bei optimierten DB reicht kein "STRUCT". Es muß ein PLC-Datentyp erstellt werden und der DB muß vom Typ des PLC-Datentyps sein, damit der DB als VARIANT akzeptiert wird.

Wenn man den Mauszeiger über den roten DB-Name an SRCBLK hält oder drauf klickt, dann wird übrigens der Grund des Problems als gelber Tooltip oder roter Hinweisdialog eingeblendet:
Nur Datenbausteine, die auf einem PLC-Datentyp oder einem Systemdatentyp basieren, können mit dem Datentyp VARIANT adressiert werden.

Ich würde wahrscheinlich den "optimierten Bausteinzugriff" abschalten.

EDIT:
STRUCT geht doch :oops: Man muß nur zuerst den Struct an SRCBLK angeben und erst danach an DSTBLK und mit dem Autovervollständigen kämpfen, daß nicht immer noch einen Punkt anhängt wird.
Doch ist das eigentlich das selbe, den ganzen DB anzugeben oder nur den Struct der den DB ausfüllt?

Harald
 
Zuletzt bearbeitet:
wie kann ich den ein Urlöschen aus dem Programm auslösen?
Vermutlich gar nicht bzw. nicht kontrolliert.

Man kann aber per PG das Urlöschen auslösen, oder zur CPU hingehen und an der MMC oder dem Betriebsartenschalter oder dem Display spielen.

Könnte man vielleicht das Display der CPU "hacken" so daß es das Urlöschen auslöst? ;)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habs jetzt geschafft das der DB auf dem Eingang SRCBLK angenommen wird, nun habe ich aber das Problem dass auf der Ausgabe Seite DSTBLK nur der DB akzeptiert wird den ich auf der anderen Seite anschließe.:confused:

Egal ob ich den DB kopiere und umbenenne oder was auch immer ich mache ich kann auf der Ausgabe Seite den Ziel DB den ich gerne überschreiben möchte nicht anschließen.

:confused::confused:

Kurz ein Bild was ich meine.
DB Verschieben.jpg
 
Zuletzt bearbeitet:
Wolltest Du nicht einen DB erneut vom Ladespeicher laden, oder willst Du nun einen DB unter einer anderen Nummer in den Arbeitsspeicher laden?
Bei Ersterem muß es so sein, daß der Source-DB (im Ladespeicher) und der Dest-DB (im Arbeitsspeicher) der selbe DB ist.

Harald
 
Ich Vollpfosten, jetzt hab ich`s verstanden, ich muss ja nur den gleichen DB auf beide Seiten anschließen.

Dadurch wird der ursprüngliche Ladezustand mit den Original Startwerten wieder hergestellt.

Hab ich`s jetzt begriffen??:ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja :s12:

Beachte noch: Das Laden dauert mehrere OB1-Zyklen und sehr wahrscheinlich kannst Du auch nicht gleichzeitig alle 10 DB vom Ladespeicher kopieren - für den Ablauf brauchst Du also sowas wie eine Schrittkette. Beachte den Kopierstatus - die Ausgangsparameter BUSY und RET_VAL.

Harald
 
Zurück
Oben