geänderte UDT löscht Aktualwerte!

SPS.at

Level-1
Beiträge
57
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forumsgemeinde!

folgende Vorgangsweise:
Ich lade einen DB aus dem AG in den Offlineordner
anschließend ändere ich einen UDT der in diesem DB verwendet wird.
Danach aktualisiere ich die Deklaration in diesem DB und lade Ihn wieder in das AG.
Nun sind alle Aktualwerte auf 0 gesetzt bzw. mit den Anfangswerten des UDT belegt.
Dies ist natürlich nicht immer wünschenswert insbesondere wenn es sich um Sollwerte vom SCADA handelt...

Habt Ihr eine Idee ob die oben beschriebene Geschichte verhinderbar ist in dem irgendwo ein häkchen gestzt wird? Oder irgend eine andere Idee wie man das in den griff kriegen könnte?

grüße
thomas
 
Du willst doch deine Aktualwerte behalten und in dem Link ist beschrieben wie es geht. Du musst das natürlich an deine Situation anpassen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aktualwerte behalten

@marlob

Entweder bin ich blind oder du meinst ich soll sämtliche DB's mittels SFC20 sichern in denen die UDT verwendet wird und anschließend zurückspeichern?

grüße
thomas
 
@blockmove
@marlob

Also bezieht Ihr euch auf Punkt 2 in dem Link?

Der ja wohl nur dann praktikabel ist wenn man einzelne Datenbausteine behandelt.

Dann ist es aber auch so, daß DB's mit UDT mit den Anfangswerten überschrieben werden - ohne UDT nicht...

Das ist Softwaremäßig nur schwer in Griff zu bekommen...

grüße
tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@blockmove

was ist daran einfach?

Da ist es ja noch einfacher statt UDT's Struct's zu verwenden und diese offline auf Stand zu halten, dann habe ich das Problem gar nicht...

Aber trotzdem danke

mfg

tom
 
@blockmove

was ist daran einfach?

Da ist es ja noch einfacher statt UDT's Struct's zu verwenden und diese offline auf Stand zu halten, dann habe ich das Problem gar nicht...

Aber trotzdem danke

mfg

tom
Ist halt der einfachste Weg bei siemens. Vielleicht machen sie es ja irgendwann mal besser ;-)
 
Auf jeden Fall Danke mal...

Komisch ist das schon, daß UDT's die Anfangswerte reinschreiben...

typisch Siemens halt -
Die Frage ist was wichtiger wäre S9 oder ein Simaticmanager 9.0 oder BEIDES?!

grüße
thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ist es ja noch einfacher statt UDT's Struct's zu verwenden und diese offline auf Stand zu halten, dann habe ich das Problem gar nicht...

Kommt auf deinen Programmierstil und die Aufgabenstellung an.
Ich persönlich ziehe die Vorteile einer UDT dem Nachteil mit den Aktualdaten meist vor.

Gruß
Dieter
 
SCADA-Schnittstelle

@blockmove

Es geht um eine SCADA-Schnittstelle.
Am IN soll eine UDT reinkommen die alle Sollwerte enthält.
Am INOUT sollen die Istwerte in eine UDT.
Im InstanzDB liegen nur noch Zwischenspeicher.
Das hätte den Vorteil, daß Sollwerte und Istwerte immer in getrennten DBs liegen und sich die Adressen bei Schnittstellenänderungen nie ändern...

Die UDT's hätten den vorteil, dass sich alle DB's und FB's automatisch mitändern...

Ich könnte jetzt natürlich einen FB einführen der mir den Sollwert-DB ständig in einen Sicherungs-DB wegspeichert und beim Laden einer neuen UDT diese automatisch mit den alten Sollwerten beschreibt, anschließend einen größeren Sicherungs-DB erstellt und in diesen die neuen Sollwerte speichert.

Dabei entstehen eine Reihe von neuen Problemen, z.B. wie werden übertragene Bausteine in den Programmzyklus eingefügt? Alle übertragenen auf einmal? Am Ende oder zwischen drin?
Gibts da eine Dokumentation dazu?

grüße

thomas
 
@SPS.at
Das kannst du ablöten!

Das Sichern UND zurückspielen muss in dem Fall händisch erfolgen.

Du hast keine Chance zu erkennen (jedenfalls keine mir bekannte), das Laden irgend eines Bausteins vom System her zu erkennen.
Abgesehen davon ist es unerlässlich dass sich die Kiste in dem Fall in einem "sicheren" Zustand befindet,
jedenfalls so sicher, das "0" als Sollwert in dem Augenblick keine Rolle spielt.

Die einzige Möglichkeit wäre imho ein Datenfeld in dem "Nie" 0 drinsteht für das Auslösen der Initialisierung zu verwenden.


Andere Möglichkeit, wenn auch unschön bzw. gewissermaßen unsauber:
Den UDT von Anfang an auf die Maximallänge trimmen, ab dann den UDT im Normalbetrieb nur noch Offline ändern.
Solange genügend Bytes im DB sind spielt das auch keine Rolle, das verschafft zumindestens Zeit, einen "günstigen" Zeitpunkt zu wählen.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es geht um eine SCADA-Schnittstelle.

Tja ... Da verwende ich eigentlich immer separate DBs mit Strukturen.
Egal was du im Vorfeld zusammen mit den Kollegen vom Scada-System definierst, irgendwann passt es nicht mehr. Egal wieviel Reservefelder o.ä. vorhanden waren. Deshalb eigenständige DBs mit Koppel-FBs zum eigentlichen Programm.
Ist zwar mehr Arbeit aber Erfahrung macht klug ...

Gruß
Dieter



FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
 
@MSB
Das Problem einen neuen Datenbaustein zu erkennen ist es nicht - einfach ein initbit abfragen und nach dem hin und herkopieren setzen...
Das viel größere Problem sind die UDT's als FB-Schnittstelle, da kann es passieren, dass der FB für zumindest einen Zyklus undefinierte IO's an der Schnittstelle kriegt...
Was natürlich kein spezifisches UDT-problem ist - das hab ich auch bei structs - wenn sich die ändern...

Das mit der Maximallänge macht keinen Spaß weil online zusehen unmöglich wird...

@ blockmove
Auf das wird's wohl rauslaufen - eigene Schnittstellen DB's für SCADA

Noch ne abschließende Frage - gibt es keine möglichkeit Bausteine gezielt zu übertragen?
Ich meine das so:
neue DB's und FB's stehen im Speicher und werden am anfang eines Zyklus 'aktiviert' und das Programm arbeitet mit den neuen (geänderten) Bausteinen?
(Ich meine jetzt kein Stop oder händischen Eingriffe)


grüße
tom
 
Noch ne abschließende Frage - gibt es keine möglichkeit Bausteine gezielt zu übertragen?
Ich meine das so:
neue DB's und FB's stehen im Speicher und werden am anfang eines Zyklus 'aktiviert' und das Programm arbeitet mit den neuen (geänderten) Bausteinen?
(Ich meine jetzt kein Stop oder händischen Eingriffe)

Wenn du aus dem SIMATIC-Manager heraus mehrere Bausteine zusammen markierst und dann überträgst, versucht er diese Bausteine auch zusammen in das Programm einzubinden. Also es werden erst alle Bausteine in die SPS übertragen, und dann kommt erst der Befehl die Bausteine in das Programm einzubinden. Das macht Step7 aber alles intern. Das Einbinden der Bausteine irgendwie manuell zu stoppen oder anzufordern ist aus dem Manager Imho nicht möglich.

Weiterhin ist die maximale Anzahl an Bausteinen die gleichzeitig eingebunden werden kann nach oben hin begrenzt. Wo diese Grenze liegt habe ich jedoch noch in keiner Dokumentation gefunden, scheint aber auch von der eingesetzten CPU abhängig zu sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Thomas_v2.1
Du hast recht, hört sich interessant an...

Wenn man einen neuen Baustein im OB1 aufruft und den OB1 samt dem neuen FC in die CPU hinein läd, so geht die CPU auch nicht in Stop...
Das bedeutet der Simaticmanager läd zuerst die neu FC und anschließend erst den OB1...

Irgendeinen Trigger muss es also geben.

Vielleicht weiß ja jemand wo sowas dokumentiert ist...

grüße
tom
 
hi,

es schadet nicht, sich beim Laden von neuen FBs, FCs selbst Gedanken über die Reihenfolge zu machen.
Das ist IMHO besser als sich auf den Manager zu verlassen.

Wenn immer erst der Instanz-DB, danach bei Bedarf FB oder FC, und dann der Aufruf geladen werden kann nix passieren.

Micha
 
Hi

Lade einfach DB aus der CPU erstelle eine AWL-Quelle davon denn da sind die Aktualwerte mit hinterlegt dann änderst Du den UDT dann noch die AWL Quelle neu übersetzen, das sollte funktionieren. Falls du diverse Werte aus UDT löschst einfach auch in der Initialisierung der AWL Quelle entfernen.

mfg
Alex
 
Zurück
Oben