TIA boolschen Default-Wert setzten

Bernd87

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

ich benötige für einen Kaltstart den gesetzten Default-Wert einer, für jenen Zweck, frisch in ner DB erzeugten boolschen Variable.
Leider kann ich den Default-Wert in den Eigenschaften der Variable nicht setzen. Der Startwert steht auf true.
1690532248130.png
1690532204015.png

Wo muss ich ansetzten um die den Default-Wert zu setzen? Mir fällt gerade nix mehr ein!?
Danke im Voraus!
 
Du könntest Konstanten wie TRUE, FALSE nehmen und der Variable jeden Zyklus zuweisen, ggf. welche selbst in der Schnittstelle eines FCs anlegen. Der Startwert 1 ist unschön programmiert, da man, ohne richtig hinzuschauen von ausgehen könnte, dass es sich hierbei um eine Integer-Variable halten könnte. TIA lässt es zwar zu, beim DB-Beobachten steht hier ein TRUE (true).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was meinst Du mit "gesetzten Default-Wert"?
Du willst den Defaultwert von Bool ändern? Reicht das nicht, den Startwert auf True zu setzen?

Oder willst Du den Startwert 1 zu False ändern? --> Gehe auf die 1 und drücke "Entfernen"

Ist das ein Global-DB oder ein Instanz-DB?
Welche TIA Version verwendest Du? Geht das nur in dem einen Projekt nicht? Hast Du TIA mal geschlossen und neu geöffnet?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Fragesteller will, daß die Variable beim Kaltstart schon einen bestimmten Wert hat. Vermutlich um den Kaltstart zu erkennen.
Dann hab ich es wohl falsch verstanden. Den Anlauf der SPS löse ich immer über einen alten klassischen SE-Timer den ich mit 5 Sekunden parametriere und in dieser Zeit ein Anlaufbit setze.
Gibt es denn bei der 1200/1500er den überhaupt einen Kaltstart? Kenn ich eig. nur von der 400er.

Wenn ich den DB aber neu intialisieren lasse, habe ich doch wenn ich mit Startwerten hantiere im normalen Betrieb doch einen "Kaltstart"?
 
Den Anlauf der SPS löse ich immer über einen alten klassischen SE-Timer den ich mit 5 Sekunden parametriere und in dieser Zeit ein Anlaufbit setze.
Gibt es denn bei der 1200/1500er den überhaupt einen Kaltstart? Kenn ich eig. nur von der 400er.
Hallo DerStilleBeobachter,

warum benutzt du nicht das Systembyte, das Bit 0 ist für den ersten SPS Zyklus true, egal welche Anlaufart.
1690538199736.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir wäre als einzige Möglichkeit einen wirklichen Kaltstart zuverlässig zu erkennen.
Einen Merker zu verwenden diesen im nicht remanenten Speicherbereich liegt. Dann in OB100 auf 0 abzufragen dann erkennt man den Kaltstart.
Danach im OB100 auf 1 setzen.
Alles andere könnte durch Softwareladen komplett
Etc. Mal falsch funktionieren.

Oder man muss einen DB verwenden remanent. Bin mir gerade nicht sicher welcher Kaltstart genau gemeint ist
 
Zuletzt bearbeitet:
Mir wäre als einzige Möglichkeit einen wirklichen Kaltstart zuverlässig zu erkennen.
Einen Merker zu verwenden diesen im nicht remanenten Speicherbereich liegt.
Falsch. Nicht remanente Speicherbereiche werden bei jedem ANLAUF (STOP-RUN-Übergang) gelöscht. Also auch bei jedem Warmstart, egal ob vorher Power-ON war oder nur RUN-STOP-RUN geschaltet wurde.
Was für eine CPU hat der Fragesteller?? Für eine S7-1200 z.B. gibt es offiziell gar keinen Kaltstart.
Ich vermute, mit "Kaltstart" meint der Fragesteller den Start, wo alle Variablen gelöscht sind, auch die remanenten Variablen. Das wäre z.B. nach einem Urlöschen oder bei einer fabrikneuen oder auf Werkseinstellungen zurückgesetzten CPU.

warum benutzt du nicht das Systembyte, das Bit 0 ist für den ersten SPS Zyklus true, egal welche Anlaufart.
Diese Lösung ist für das Problem des Fragestellers untauglich, weil das "Erster Zyklus"-Merkerbit bei jedem Anlauf gesetzt ist. Auch bei Warmstart.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldigt die äußerst späte Antwort! Ich war leider mit was "wichtigerem" (sagt man) beschäftigt.
Wie PN/DP bereits erwähnte will ich beim einschalten der Maschine einen bestimmten Wert auf TRUE haben. Die "1" ist nicht schön funktioniert aber 100%ig. Ich verwende eine 1500er.

Mit Kaltstart meine ich einen "frischen" Start der MAschine, sprich: Eine Initialiesierung des Programmablaufs. Also nicht das beibehalten des letzten Wertes. Einen remanenter Wert passt in diesem Zusammenhang leider nicht. @SPS-Bitschubser: Es gibt einen definierten remanenten Speicherbereich?

Der Vorschlag des stillen Beobachters werde ich versuchen... Klingt einleuchtend. Danke

Der Ansatz von Peter Wahlen ist natürlich auch sehr gut! Muss man wissen! Man lernt nie aus. Das probiere ich ebenfalls.
 
Mit Kaltstart meine ich einen "frischen" Start der MAschine, sprich: Eine Initialiesierung des Programmablaufs. Also nicht das beibehalten des letzten Wertes. Einen remanenter Wert passt in diesem Zusammenhang leider nicht.
Bist Du SPS-Programmierer? ;) Könntest Du Dich einmal so exakt ausdrücken, daß man klar und zweifelsfrei verstehen kann, was Du meinst? Vielleicht mit einem Beispiel? Deiner SPS musst Du doch auch saubere Logik richtig beibringen können...

Wann und wie genau kommt es bei Deiner Maschine zu einem "frischen" Start mit Verlust der letzten Werte? Ist das ein ungewollter "Unfall" oder Fehlverhalten oder wie wird das absichtlich herbeigeführt? Oder soll das der Normalfall beim Einschalten sein?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bist Du SPS-Programmierer? ;) Könntest Du Dich einmal so exakt ausdrücken, daß man klar und zweifelsfrei verstehen kann, was Du meinst? Vielleicht mit einem Beispiel? Deiner SPS musst Du doch auch saubere Logik richtig beibringen können...

Wann und wie genau kommt es bei Deiner Maschine zu einem "frischen" Start mit Verlust der letzten Werte? Ist das ein ungewollter "Unfall" oder Fehlverhalten oder wie wird das absichtlich herbeigeführt? Oder soll das der Normalfall beim Einschalten sein?

Harald
Entschuldige die schwammige Beschreibung. Ich meine den normalen Start der Maschine beim einschalten.
 
Entschuldige die schwammige Beschreibung. Ich meine den normalen Start der Maschine beim einschalten.
Auch diese Aussage hilft nicht weiter. War die CPU bei diesem „normalen Start“ spannungsfrei? Oder ist dieser „normale Start“ eine Funktion des Ablaufs? Oder beschreibt das etwa den Beginn eines Produktionstaktes?
 
ich benötige für einen Kaltstart den gesetzten Default-Wert einer, für jenen Zweck, frisch in ner DB erzeugten boolschen Variable.
Leider kann ich den Default-Wert in den Eigenschaften der Variable nicht setzen.
Defaultwerte kann man nur bei eigenen Datentypen festlegen.

Entschuldige die schwammige Beschreibung. Ich meine den normalen Start der Maschine beim einschalten.
Ich verstehe leider immer noch nicht, warum Du im ersten Post das Wort "Kaltstart" schreibst und warum Du den Defaultwert von Bool ändern willst. Ist das nicht egal, ob der Defaultwert False oder True ist? Wichtig ist doch nur, zu erkennen, ob der Wert einer Variable auf einen Startwert gesetzt wurde - notfalls mit negierter (negativer) Logik. Wenn der Standard-Defaultwert als Startwert nicht gefällt (Knoten im Gehirn?), dann kann man einen Startwert projektieren.

Ich vermute, Du brauchst einfach:
- einige Variablen sollen sich die Werte von vor dem Ausschalten der Maschine merken - diese Variablen müssen als "remanent" projektiert werden
- einige Variablen sollen sich keine Werte merken und sollen beim Einschalten (Anlauf) auf einen definierten Startwert gesetzt werden - diese Variablen müssen als "nicht remanent" projektiert werden, dann erhalten sie beim Anlauf den Defaultwert des Datentyps oder den extra zu projektierenden "Startwert".
Siehe die TIA-Hilfe Thema "Grundlagen zu Startwerten" (z.B. in Beitrag #4):
Grundlagen zu Startwerten
Definition "Startwert"

Der Startwert einer Variablen ist ein von Ihnen definierter Wert, den die Variable nach einem Anlauf der CPU einnehmen soll.

Eine Sonderstellung nehmen die remanenten Variablen ein. Ihre Werte nehmen nur nach einem "Kaltstart" den definierten Startwert ein. Nach einem "Neustart (Warmstart)" bleiben ihre Werte erhalten und werden nicht auf den Startwert zurückgesetzt.

Definition "Defaultwert"
Die Struktur von Datenbausteinen kann von übergeordneten Elementen abgeleitet sein:
• Ein Instanz-Datenbaustein basiert z. B. auf der Schnittstelle eines übergeordneten Codebausteins.
• Ein globaler Datenbaustein kann auf einem vordefinierten PLC-Datentyp basieren.

In diesem Fall können Sie im übergeordneten Element einen Defaultwert für jede Variable definieren. Beim Anlegen des Datenbausteins werden diese Defaultwerte als Startwerte verwendet. Diese übernommenen Werte können Sie anschließend im Datenbaustein mit instanzspezifischen Startwerten ersetzen.

Die Angabe eines Startwerts ist optional. Wenn Sie keinen Wert festlegen, nimmt die Variable beim Anlauf den Defaultwert ein. Ist auch kein Defaultwert definiert, wird der für den Datentyp gültige Standardwert verwendet. Für BOOL ist z. B. der Standardwert "FALSE" festgelegt.

In Deinem ersten Beitrag hast Du eine Variable "Schmierung KALTSTART" mit Startwert 1 (wird von TIA gutwillig für schlampige Programmierer so akzeptiert). Die Variable ist als "nicht remanent" projektiert, d.h. die Variable bekommt bei jedem Anlauf den Startwert zugewiesen, ohne Unterschied ob das ein Warmstart oder Kaltstart war. Es kann also lediglich festgestellt werden, daß die CPU einen neuen Anlauf hatte - dafür kann man auch einfach den Systemmerker "FirstScan" auswerten.

- Soll tatsächlich ein Unterschied zwischen Warmstart und Kaltstart gemacht werden, dann muß man eine Variable als "remanent" projektieren und einen Startwert (für den Kaltstart) festlegen und im Programm dann einen vom Startwert abweichenden Wert zuweisen. Ein "Kaltstart" ist, wenn auch die remanenten Variablen auf den Defaultwert oder Startwert gesetzt wurden.

Sollte das nun immer noch nicht das sein, was Du brauchst, dann beschreibe für uns exakt ein Beispiel, was Du erreichen willst.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Normales einschalten heißt für mich hart den Schalter von OFF auf ON, 0 auf 1, oder wie es weniger schlampige Programmierer ausdrücken würden: FALSE auf TRUE.

Wie dem auch sei ich, die Bedeutung von Kaltstart und Warmstart war schon immer klar.

Ich habe den Fehler gefunden. Eine Variable tief im Gebälk des Programms hatte im Nachhinein die eigentlich zu setzende Variable wieder überschrieben.
FYI: Es handelt sich bei jenem Programm um keine Version von mir sondern ein Reengeneering/ Anpassung.
 
Normales einschalten heißt für mich hart den Schalter von OFF auf ON, 0 auf 1, oder wie es weniger schlampige Programmierer ausdrücken würden: FALSE auf TRUE.
Welchen Schalter?🤔
Den Run/Stop Schalter der SPS? Oder den Hauptschalter vom Schaltschrank(SPS spannungslos)? Oder einen Schalter an einem Eingang der SPS welcher die Maschine startet?🤔
 
Zuletzt bearbeitet:
Zurück
Oben