TIA S7 1200 - DB "Nullen"

Mr. Schinken

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich möchte bei einer S7-1200 einen DB in dem ca. 120 BOOL Variablen stehen unter gewissen Voraussetzungen Nullen.
In Step7 hab ich das immer mit FILL gemacht. Funktioniert nur bei der 1200 nicht wirklich da ich mit keinen ANY_Pointer bauen kann.

Hat da jemand eine Lösung?
 
Programmierst du in SCL,
dann könntest du eine For Schleife programmieren

FOR TempVariable := 1 TO 120 BY 1 DO
DeineVariable[TempVariable] := 0;
END_FOR;

oder ohne Symbolik

FOR TempVariable := 1 TO 120 BY 1 DO
DB10.DBB[TempVariable] := 0;
END_FOR;

Für WordZugriff dann halt BY 2

Mit Grüßen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort.
Ja so was hab ich schon probiert. Da meckert er nur bei der Übersetzung.
Kann es sein, dass das nicht geht weil der DB aus einem UDT generiert ist?
Bin allerdings auch relativer SCL Neuling. Kann auch sein das meine Syntax nicht passt.

Löschen.jpg
 
Ja, du schreibst ja "Output_Auto"[#Index]
Dass kann nicht funktionieren. Das ist gleichzustellen mit DB7[#Index]
Es müsste heißen "Output_Auto".MeineVariableImDB[#Index]

Vorraussetzung wäre natürlich dass deine Variablen im DB so heißen:
MeineVariableImDB[0]
MeineVariableImDB[1]
MeineVariableImDB[2]
....
MeineVariableImDB[120]

Mit Grüßen
 
Hallo,

Erzeuge von deinen DB eine Kopie mit Startwerten Null. Dann kannst du den DB auf deinen DB mit einen einzigen MOVE Befehl überschreiben.
Voraussetzung ist das du keine Speicherreserve im DB aktiviert hast.


Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also Sprache ist auf Deutsch. Unter Einstellungen-PLC-Programmierung-SCL habe ich allerdings keine weitere Sprachauswahl.

An so einen DB habe ich schon gedacht. Ist halt eher eine Notlösung.
Die Schleife muss ja in anderen Bereichen auch mal funktionieren.
 
Das von DeltaMike vorgeschlagene geht natürlich nur wenn du auch ein Array hast.
Fill funktioniert nur bei nicht optimierten Bausteinen.

Da du im DB weder Arrays noch Strukturen hast geht bei opt. Bausteinen nicht viel. Per Code kannst du die nur einzeln auf 0 schreiben.

Willst du den DB einmalig auf 0 setzen (dann könnte man den DB per PG-Funktion reinitialisieren) oder willst du das vom Programmcode aus machen?
 
Soll aus dem Programmcode heraus auf Null gesetzt werden wenn eine gewisse Bedingung erfüllt oder nicht erfüllt ist. In diesem Fall wenn Automatikbetrieb nicht aktiv ist.
DB mit Array anlegen hab ich mir schon überlegt. ist in meinem Fall aber etwas unübersichtlich da ich aus diesem DB meine Peripherie-Ausgänge beschreibe.

Dann bleibt in diesem fall wahrscheinlich wirklich nur das überschreiben mit einem "Null"-DB.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann hast du z.B. folgende Möglichkeiten
  • Optimierten Bausteinzugriff deaktivieren und SFC Fill.
  • Deine Signale in eine Struktur oder besser UDT packen, dann einen 2ten leeren UDT irgendwo anlegen und per Zuweisung "MeinDB.Struct1 := MeindDB.Struct2;" umkopieren.
 
Kann es sein, dass das nicht geht weil der DB aus einem UDT generiert ist?
Wenn Dein DB ein UDT ist, kannst Du im Temp-Bereich eines optimierten FC/FB eine gleiche Variable aus diesem UDT erstellen. Diese sollte bei jedem FC-Aufruf auch frisch initalisiert werden.
Deinen DB kannst Du dann einfach durch Zuweisung auf diesen Stand bringen:
Code:
"Output Auto" := "UDT Temp-Variable";
Alternativ kannst Du diese Variable auch in einem (weiteren) DB anlegen und genauso einstellen, wie Dein DB nach der Zuweisung aussehen soll.
 
Zurück
Oben