WinCC7 - E/A Feld Alt- und Neuwert in C-Script

clr brain

Level-1
Beiträge
16
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum!

Ich baue mir gerade Bedienmeldungen in WinCC, unter anderem für die EA-Felder mit den Sollwerten.
Es läuft auch ganz wunderbar, nur wird mir beim Thema Eingabe- und Ausgabewert der EA Felder wieder schwindelig.

Ich brauche für die erzeugte Meldung den Variablenwert des Feldes vor und nach der Änderung. Die Datenaufbereitung und der Aufruf für die Bedienmeldung steht in "Propertythemen->Ausgabe/Eingabe->Eingabewert->Änderung" des EA-Feldes.

An Neu- und Altwert komme ich über folgende funktionen...

Code:
float  fVal =(float) GetInputValueDouble(lpszPictureName,lpszObjectName);      
float  fValOld =(float) GetOutputValueDouble(lpszPictureName,lpszObjectName);

Wird der Eingabewert per Script noch umgerechnet (Nachkommastellen), ist auch alles in Ordnung. Wenn er allerdings "direkt" verarbeitet wird, scheint die Verarbeitung "zu schnell" zu laufen. Ich bekomme dann schon den neuen Wert im OutputValue.

Gibt es eine bessere/richtigere/schönere Möglichkeit an den Variablenwert vor und nach Änderung zu gelangen?

Schon mal danke für die Hilfe!
Der Ruhrpott grüßt.
 
Wenn du WinCC V7 verwendest kannst du auch die vorgefertigen Bedienmeldungen verwenden, das muss man bei dem EA-Feld nur aktivieren und eine Einstellung im Alarmlogging anpassen. Da sollten zumindest laut Beschreibung auch Alt- und Neuwert erfasst werden.
http://support.automation.siemens.com/DE/view/en/24325381

Ansonsten ist das mit zwei Feldern machbar, ich glaube fast nicht dass das mit einem einzelnen EA/Feld zuverlässig funktioniert.
Denn so wie es scheint, wird bei einem EA-Feld als erstes auf die Variable geschrieben, und erst dann das Änderungs-Ereignis ausgelöst.

Mit zwei separaten Feldern hättest du ein Feld nur für die Ausgabe und das andere Feld ist nur Eingabewert ohne direkte Verknüpfung zu einer Variable. Im Änderungsereignis liest du dann mit GetTagXY den Altwert aus und mit GetPropXY den Neuwert. Dann mit SetTagXY den Neuwert schreiben und Meldung erzeugen.
Ich würde evtl. sogar eine SetTagWait Funktion verwenden, dann kannst du die Bedienmeldung erst generieren wenn der Wert wirklich in der Steuerung gelandet ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

Die Idee mit den doppelten EA-Feldern scheint noch das sauberste zu sein. Ich bin mir nur nicht sicher ob ich mir das geben will. Ich rüste die Bedienmeldungen in einem bestehenden Projekt mit etwa 300 EA "mal eben" nach. Ich hatte irgendwo im Hinterkopf, das Siemens sowas für den Ein- und Ausgabewert im Sinn hatte. Bin mir aber auch nicht mehr so sicher. Ob ich damit nun die Kerntemperatur eines Reaktors steuern würde seih dahin gestellt... für Bedienmeldungen würde es mir reichen.

Zu den fertigen Bedienmeldungen aus der Box. Auch die habe ich mir angeschaut, hatte aber ein, zwei Probleme damit. Ich glaube mich erinnern zu können, das der aktuelle Benutzername nirgends hinterlegt wird (bin mir aber nicht mehr sicher). Mein Hauptproblem lag aber darin, das WinCC nur den geänderten Variablennamen in das Alarmlogging feuert. Der ist mir für den Kunden leider zu kryptisch. Ich könnte von drei runterzählen bis der Anruf mit bitte um Klartext kommt. Mit der Scriptvariante (24325381_ISALG_OperationLog) bin ich da wesentlich flexibler unterwegs.
 
Die Idee mit den doppelten EA-Feldern scheint noch das sauberste zu sein.

Naja, ob das sauber ist?

Die mitgelieferten Bedienmeldungen für die EA-Felder sehen standardmäßig so aus: "aktueller Benutzer" neu="neuer Wert" alt="alter Wert" Bei Herkunft steht der WinCC-Variablenname.
Das kannst Du im Alarmlogging auch noch konfigurieren. Oder evtl. auch noch das verwendete Script modifizieren (allerdings nur im Notfall!).

Gruß.
 
Naja, ob das sauber ist?

Stimmt schon, nicht sauber aber gedanklich am einfachsten nachzuvollziehen... bevor man anfängt sich kleine 3d Bildchen von EA Felder zu malen und versucht zu verstehen was, wann, wo ankommt.

Die Variablennamen im originalen Bedienmeldungsscript durch klartexte ersetzen zu lassen, wäre auch eine idee. Mache ich aber auch ungern. Ist eben keine Projektfunktion, bei Neuinstallation oder Update fängt der nächste (oder noch schlimmer, ich!) dann an zu würgen.

Vielleicht missbrauche ich gleich noch mal die Fachberatung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurzes Feedback...
Problem tritt nur auf wenn Variable direkt in Dynamik vom Ausgabewert steht. Auch dann nur bei erster Änderung nach Bildaufruf.

Bisheriger Pfad.... Bestätigung meiner "Alt-Neuwert Ausleseidee" bei der Fachberatung ("sollte gehen!") ... weiter an Hotline .... nun schon bei der Entwicklungsabteilung. Habe wieder einen Joker gezogen.

Wünsche ein schönes Wochenende.
 
D.h. es sollte doch mit einem einzigen EA-Feld gehen? Da bin ich mal gespannt.

Dass man bei eigenen Meldungen eine bessere Kontrolle über den Meldetext hat ist ein Vorteil. Leider gibt es im WinCC bei Variablen kein Kommentarfeld aus dem man einen lesbaren Text auslesen könnte. Ich würde wohl hingehen, und für jeden Sollwert eine weitere interne Variable vom Typ Text anlegen, in dem der Meldetext für die Bedienmeldung steht.
Z.B. wenn die Sollwertvariable ML01_SW01 heißt, dann heißt die Variable für den Meldetext ML01_SW01_MSG. Dann kann man mit GetLinkedVariable() die verknüpfte Variable auslesen. Wenn es eine Variable mit +_MSG gibt, dann wird der dort enthaltene Text für die Meldung verwendet, ansonsten der Variablenname (falls jemand vergessen hat die MSG-Variable anzulegen).
 
aallsoooo...

Bisher hatte ich das Feedback bekommen, man könne es durchaus über das auslesen von Ausgabe- und Eingabewert machen. Der letzt Kollege der Siemens Hotline war aber plötzlich anderer Meinung.
Zuerst einmal funktioniert es schon. Man hat allerdings keine Garantie, daß man im Ausgabewert auch wirklich noch den alten Variablenwert bekommt. Zu sehen in meinem Beispiel, Nach aufruf des Bildes wird der Wert bei erster Änderung "zu schnell" weitergegeben.

Nach der Frage "Bug oder feature?" startete der übliche Tanz um den heissen Brei. Man kennt das verhalten, auch der Kollege nebenan kennt es... aber machen sie doch besser was anderes.

Ich denke ich nehme jetzt mal die letzte Idee auf. Bei klick auf das EA Feld, Ausgabewert in globale Variable speichern. Bei Änderung, Bedienmeldung abfeuern mit Neuwert aus Eingabewert und Altwert aus dem neuen Zwischenspeicher.

@Thomas: Auch eine Idee... bin jetzt aber schon zu weit um noch neues einzubauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider gibt es im WinCC bei Variablen kein Kommentarfeld aus dem man einen lesbaren Text auslesen könnte. Ich würde wohl hingehen, und für jeden Sollwert eine weitere interne Variable vom Typ Text anlegen, in dem der Meldetext für die Bedienmeldung steht.

Bei klick auf das EA Feld, Ausgabewert in globale Variable speichern.

Naja, das mit den zusätzliche internen Variablen macht ja immer ziemlich viel Arbeit. Ich und auch Siemens bei z.B. PCS7 machen es so:

Man verwendet als Speicher entweder unbenutzte Objekteigenschaften (für den Kommentar könnte man ja evtl. den Tooltiptext nehmen). Die 2. Variante: man baut ein Anwenderobjekt oder Faceplatetype (*.fpt) dort kann man unsichtbare Objekte mit einbauen, welche als Speicher für irgendwelche Dinge verwendet werden.
Der Vorteil, mann muss nicht zusätzliche Interne Variablen anlegen, sondern man kann im Graphicseditor bleiben und dort einfach das Anwenderobjekt kopieren, fertig.

Gruß.
 
Leider gibt es im WinCC bei Variablen kein Kommentarfeld aus dem man einen lesbaren Text auslesen könnte. Ich würde wohl hingehen, und für jeden Sollwert eine weitere interne Variable vom Typ Text anlegen, in dem der Meldetext für die Bedienmeldung steht.
Z.B. wenn die Sollwertvariable ML01_SW01 heißt, dann heißt die Variable für den Meldetext ML01_SW01_MSG.
CFC hat den Vorteil, dass texte beim AS-OS-Übersetzen aus dem CFC ins WinCC als interne Variable übersetzt werden. Z.B der Bausteinkommentar, oder auch Einheit oder Texte von einzelnen Bausteineingängen. Daraus lässt sich dann automatisiert einiges in WinCC anstellen, ohne dass man händisch Variablen anlegen muss und auch noch konsistent die texte bearbeiten muss. Bei Verwendung von CFC wird das alles automatisch generiert.
Wenn man sich da mal ein System erarbeitet hat, will man nix anderes mehr :)

Gruß.
 
... Wenn man sich da mal ein System erarbeitet hat, ...
Gruß.

Mein großes Ziel! Eines Tages bin ich soweit.

Naja, das betreffende Projekt ist nun schon fast zwei Jahre alt und eine der ersten Versionen seit ich hier sitze. Bis kurz vorher wurden Variablen auf Papier dokumentiert und in WinCC manuell angelegt. Das Potential von WinCC wurde etwa zu 2% genutzt. Faceplates völlig unbekannt oder auch Teufelszeuch. Unter den Bedingungen habe ich glaube ich das beste draus gemacht. Natürlich ein unheimlicher Projektierungsaufwand und nicht unbedingt weiter zu empfehlen!

Fazit des Themas: Bis zur Entwicklungsabeteilung bei Siemens ist man der Meinung, man könne und dürfe sehr wohl auf Ausgabe- und Eingabewert zugreifen um die beiden Werte zu bekommen. Die Entwicklung selber kann mir nicht beantworten warum die Variablen sich mal schneller und mal langsamer aktualisieren. Zumindest in Version 7.0/7.2 raten sie also davon ab. Der Umweg über den Zwischenspeicher ist nicht der schlimmste, ist nur ein weiteres event bei Anwahl des Feldes.

Gruß und Danke,
Sebastian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, das betreffende Projekt ist nun schon fast zwei Jahre alt und eine der ersten Versionen seit ich hier sitze. Bis kurz vorher wurden Variablen auf Papier dokumentiert und in WinCC manuell angelegt. Das Potential von WinCC wurde etwa zu 2% genutzt. Faceplates völlig unbekannt oder auch Teufelszeuch. Unter den Bedingungen habe ich glaube ich das beste draus gemacht. Natürlich ein unheimlicher Projektierungsaufwand und nicht unbedingt weiter zu empfehlen!

Für nur ein Projekt lohnt es sich nicht, solch eine Bibliothek zu erstellen. Da gibt es auch Fertige zu kaufen. Wenn man die Bibliothek aber bei anderen Projekten weiterverwenden kann, spart das jede Menge Arbeit (bei den Folgeprojekten)...

Aber man lernt ne Menge über die Funktionsweise und Möglichkeiten von WinCC dabei.

Gruß.
 
Für nur ein Projekt lohnt es sich nicht, solch eine Bibliothek zu erstellen. Da gibt es auch Fertige zu kaufen. Wenn man die Bibliothek aber bei anderen Projekten weiterverwenden kann, spart das jede Menge Arbeit (bei den Folgeprojekten)...

Aber man lernt ne Menge über die Funktionsweise und Möglichkeiten von WinCC dabei.

Gruß.

Stimmt natürlich. Für unsere Anlagen lohnt es sich aber durchaus. Muss nur zwischen den Projekten an unseren Vorlagen/Bibliotheken/... arbeiten um mir selber das Leben zu erleichtern. Bis dahin werde ich aber wohl noch wahnsinnig. :cool:
 
Zurück
Oben