TIA Namen einer Statischen Variablen eines FB ändern ohne IDB zu reinitialisieren

ducati

Level-3
Beiträge
9.712
Reaktionspunkte
2.788
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, mal wieder ein TIA 1500er Problemchen,

ich habe einen FB in einer 1500er. Von vorhandenen statischen Variablen soll nur der (symbolische) Name geändert werden.

Danach will das TIA-Dings bei mir aber den IDB "MIT REINITIALISIEREN" laden, was doof wäre.

Vorheriges Sichern ist zwar ne Option aber:

In den statischen Variablen sind einige Bits, welche gesetzt bzw. rückgesetzt werden. D.h. selbst wenn ich den IDB vorher sichere, bis zur Fertigstellung der Änderungen sind einige Minuten vergangen, was Änderungen an den Bits bedeuten kann.

Wenn ich jetzt im laufenden Betrieb der Anlage den IDB einspiele, kann das Probleme machen...

Ich hoffe Ihr versteht mein Problem, wer hat die Lösung???

Gebe nen Kaffe aus ;)

Gruß.

PS: in der 300er unter Classic bestand dieses Problem nicht, da konnten die Variablennamen geändert werden, ohne dass ich den IDB laden musste.
 
Funktioniert Laden ohne reinitialisieren nicht bei Änderung einer Variablen?
Also ich meine die Funktion ?

LOR.jpg

Scheint tatsächlich nur bei Erweiterungen zu gehen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Funktioniert Laden ohne reinitialisieren nicht bei Änderung einer Variablen?

ich hab's jedenfalls nicht hinbekommen, sag mir wie es gehen soll ;)

Gruß.

PS ich kann nicht mal in einem Struct neue Variablen einfügen, nur neue Structs bzw. Variablen ausserhalb eines Struct...

Wenn hier keiner ne Lösung dafür hat, dann geb ich's auf mit dem TIA-Gedöns und fahr in Urlaub...

Gruß.
 
Zuletzt bearbeitet:
Also ich hatte mich da damals auch auf die Hinterbeine gestellt. Da ich das auch so aus der Classic Welt kannte. Jedoch haben mich meine Kollegen eines besseren belehrt. Das ging früher schon nicht ohne initialisieren. Nur konnte man das Symbol Ändern und auch verwenden ohne den Baustein neu laden zu müssen. Ich versteh aber ehrlich gesagt auch nicht, wieso das ein codesys basierendes System hin bekommt aber der großes Siemens nicht.

Gesendet von meinem SM-G930F mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja das mache ich tagtäglich. Da hat es mir noch nie irgendwas verhagelt. Also vorausgesetzt,ich kann mit online change laden. Solange die SPS nicht gestoppt wird ist alles gut. Ich kann in Codesys auch einen Datentyp Ändern und kann ohne Übersetzen direkt mit der neuen Variablen arbeiten. Bei Siemens muss ich immer Übersetzen. Das kann aber auch daran liegen, dass das eine ein Compilerbasiertes und das andere ein Interpreterbasiertes System ist.

Gesendet von meinem SM-G930F mit Tapatalk
 
Nur mal so interessehalber:

WIE MACHT IHR DANN ÄNDERUNGEN AN ANLAGEN IM LAUFENDEN BETRIEB ???

Ich muss meine Standard Elemente (FBs) für Motoren, Ventile, Analogwerte usw. nie anfassen, da ich hier alle Zusatzfunktionen (Simulation, Alarme, Grenzwerte, Meldetextänderungen usw.) von der HMI aus ein und ausschalten kann.
Die Ansteuerung dieser Elemente realisiere ich in der Regel über eine Zustandsmaschine in Form eines FCs mit einem Global DB, das ist die Ebene auf der auch in der Regel alle Änderungen durchgeführt werden.

Ich trennen schon seit langem in meinen Programmen die Ansteuerung der Feldebene (Physik) von der Programmlogik (Funktion), um eben immer ohne Stop ändern zu können.
Damit fahre ich ganz gut bei der 1500er.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss meine Standard Elemente (FBs) für Motoren, Ventile, Analogwerte usw. nie anfassen
Deine Programme bestehen immer nur aus fertigen ausgetesteten Standard Elementen oder falls doch mal neue Elemente her müssen, dann sind die immer perfekt vorgeplant und die Instanzdaten müssen ab der Version 0.1 nie mehr erweitert werden?

Harald
 
in Form eines FCs mit einem Global DB, das ist die Ebene auf der auch in der Regel alle Änderungen durchgeführt werden.

Jo, bei dem Global-DB verhält es sich aber doch genauso???

Wenn darin eine Variable umbenannt werden muss (Res_xyz -> Ventil_0815) MUSS ich den Global-DB MIT Reinitialisierung neu laden???

Wenn jetzt in dem Global-DB irgendwelche Bits gesetzt waren (also in der Logik nur mit Setzte / Rücksetzte beschrieben werden) dann macht das bei meinen Anlagen Probleme, wenn ich dies im laufenden Betrieb der Anlage machen muss....

Die CPU geht nicht in Stop, darum geht es garnicht. "Nur" aktuelle INhalte von Variablen gehen verloren...

Gruß.
 
Zuletzt bearbeitet:
Von vorhandenen statischen Variablen soll nur der (symbolische) Name geändert werden.

Danach will das TIA-Dings bei mir aber den IDB "MIT REINITIALISIEREN" laden, was doof wäre.

...
Ich hoffe Ihr versteht mein Problem, wer hat die Lösung???

Das Problem wird sein, dass Umbenennen so aussieht, als ware eine Variable gelöscht worden und eine neue erzeugt worden.

Warum kannst Du das Problem nicht so lösen, dass Du die Variable mit dem neuen Namen hinzufügst ohne die Variable mit dem alten Namen zu löschen? Im Programm verwendest Du dann natürlich die neue Variable.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Step7 classic bekomme ich das Laden neuer DB oder auch IDB ohne CPU-Stop und ohne Aktualdatenverlust notfalls hin (über das zeitweilige Benutzen von Variablen-Kopien oder DB-Kopien oder FB-Kopien), doch da bin ich darauf angewiesen, daß das ES exakt das tut was ich bestimme. Bei TIA muß man sich wohl ein ähnliches Vorgehen Step-by-Step neu überlegen, weil das TIA wohl meistens meint, schlauer als der Programmierer zu sein und zeitweilig inkonsistente Zustände oder Differenzen Projekt/online verhindern will. Zusätzlich wird das stoßfreie Sichern/Wiederherstellen von ganzen DB bei "optimierten" DB sehr sehr aufwändig (weil jede Variable einzeln angefasst werden muß).

Harald
 
Warum kannst Du das Problem nicht so lösen, dass Du die Variable mit dem neuen Namen hinzufügst ohne die Variable mit dem alten Namen zu löschen? Im Programm verwendest Du dann natürlich die neue Variable.
Tja....
ich habe die stat. Variablen im FB in Structs organisiert... Also alles was einer bestimmten Teilfunktion zugeordnet wird, befindet sich in einem Struct.

Bsp:
db1000.Ventil1.Freigabe

ich kann jetzt ohne Reinitialisieren weder eine Variable db1000.Ventil1.Stoerung hinzufügen noch eine Variable db1000.Ventil1.Reserve -> db1000.Ventil1.Stoerung umbenennen

Hinzufügen von Variablen ist nur ausserhalb von bestehenden Structs möglich...

Ich könnte jetzt natürlich auf Structs verzichten... und nur einzelne Bool Variablen DB1000.Ventil1_Stoerung anlegen... Das wird aber ne unendlich lange Liste...

Gruß und Danke.
 
Deine Programme bestehen immer nur aus fertigen ausgetesteten Standard Elementen oder falls doch mal neue Elemente her müssen, dann sind die immer perfekt vorgeplant und die Instanzdaten müssen ab der Version 0.1 nie mehr erweitert werden?

Harald

Ja genau bloß keine Änderungen und neue Elemente, deshalb ja alle Optionen von der Visu zur Laufzeit einstellbar. Dafür nehmen ich dann aber auch in Kauf das ein Ventil 40 Tags in der Visu hat und 57372 Byte im Ladespeicher brauch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist ja lustig, dass man riesen Speicherbereiche im Voraus vorbelegen muss, damit es später zu keinen Problemen kommt. Es ist schon verrückt.
Wenn man bedenkt, was für Programme und Spiele auf einen Commodore C64 liefen. Alles war optimiert auf geringst möglichen Speicherverbrauch.
Und das ging auch ganz einfach. Heute, 30 Jahre später muss man 256 Ventile anlegen, wenn man 3 hat. Es könnten ja noch welche dazu kommen ?!?!

Schöne neue Welt

Naja, der Speicher kostet ja auch nichts mehr ( Powertags schon ).
 
Zuletzt bearbeitet:
Tja....
ich habe die stat. Variablen im FB in Structs organisiert... Also alles was einer bestimmten Teilfunktion zugeordnet wird, befindet sich in einem Struct.

Bsp:
db1000.Ventil1.Freigabe

ich kann jetzt ohne Reinitialisieren weder eine Variable db1000.Ventil1.Stoerung hinzufügen noch eine Variable db1000.Ventil1.Reserve -> db1000.Ventil1.Stoerung umbenennen

Hinzufügen von Variablen ist nur ausserhalb von bestehenden Structs möglich...

Ich könnte jetzt natürlich auf Structs verzichten... und nur einzelne Bool Variablen DB1000.Ventil1_Stoerung anlegen... Das wird aber ne unendlich lange Liste...

Gruß und Danke.

O.K. ich verstehe.

Du müsstest Du vorläufig mit der Variable db1000.Ventil1.Reserve arbeiten, ohne die Variable umzubennen (im Kommentar könntest aber etwas über die Verwendung vermerken).
Alternativ könntest Du eine neue um die Variable erweiterte Struktur hinzufügen DB1000.Ventil1V2.Stoerung.

Was spricht in Deinem Fall gegen eine dieser beiden Wege? Warum ist das Umbennen so wichtig? Was spricht gegen eine neue Version der Struktur?
 
Das ist ja lustig, dass man riesen Speicherbereiche im Voraus vorbelegen muss, damit es später zu keinen Problemen kommt. Es ist schon verrückt.
Wenn man bedenkt, was für Programme und Spiele auf einen Commodore C64 liefen. Alles war optimiert auf geringst möglichen Speicherverbrauch.
Und das ging auch ganz einfach. Heute, 30 Jahre später muss man 256 Ventile anlegen, wenn man 3 hat. Es könnten ja noch welche dazu kommen ?!?!

Schöne neue Welt

Naja, der Speicher kostet ja auch nichts mehr ( Powertags schon ).
Solange keiner das Spiel weiterentwickelt, während es gerade gespielt wird ist alles etwas einfacher, auch in der neuen Welt ;)
 
Zurück
Oben