Parameterübergabe FB <-> HMI

eYe

Level-1
Beiträge
759
Reaktionspunkte
80
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich habe mir einen FB für Auswertung von Alarmen gschrieben. Dabei geht es im allgemeinen darum einen digitalen Eingang oder einen Analogwert auszuwerten und gegebenfalls einen Alarm auszugeben. Hinzukommen noch einige Parameter, wie Unterdrückung, Verzögerungszeit, Test, etc...

Die Einzelnen Alarme werden dann auf einem Panel in der Alarmliste angeben, jedoch soll es auch möglich sein, über Passwort vom Panel aus die Parameter zu verändern. Insgesammt sind es nachher 500 Alarme.

Nun bin ich am überlegen was die eleganteste Lösung dafür ist..?

Derzeit habe ich einen FB1 mit ca 10 Eingängen und 2 Ausgängen und den dazugehörigen Instanzen DB.


Nun würde ich am liebsten meinen FB1 in einer Schleife Aufrufen (0-499) und in jeder Schleife dann einen anderen Datensatz übergeben und dieses Datensatz vom Panel aus bearbeiten können.

-Muss ich für diesen Datensatz einen neuen DB anlegen, oder kann man das irgendwie in den entsprechenden Instanzen DB einfügen?
(Habe ja nun schon Instanzen DB 1-500 und müßte dann nochma 500 DBs für die Parameter anlegen :( )

-Ist es in WinCC Flex nachher möglich über ein Skript auf einfache Weise den ganzen Parametersatz einzulesen? Ich müßte dann ja quasi immer nur die DB Nummer verändern, am besten über nen Drop Down Menü.

- Macht das ganze so überhaupt sind, oder gibt es bessere Lösungen?


Danke für die Milch ;)
 
Den FB1 in einer Schleife aufrufen ist sicher nicht so praktisch. Irgendwie müssen die Aufrufe auch mit entsprechenden Störungen (Ex.x) beschaltet werden.

Ich würde das prinzipiell so machen:
Den FB1 als Multiinstanz in einem anderen FB die gewünschte Anzahl aufrufen und die Eingänge beschalten.
Somit hast man nachher nur einen Instanz DB.

Es gibt zwar Leute die wieder meckern werden, aber ich würde dann von der Visu auf diesen Instanz-DB zugreifen.
Bei WinCC flexible würde ich dann bei den Parametern mit indirekter Adressierung arbeiten.
Zeit Alarm 1: DB1.DBW[Offset0]
Zeit Alarm 2: DB1.DBW[Offset1]
...
In WinCC-flexible dann z.B. ein Drop-Down Feld mit Einträgen:
Alarme 1-10
Alarme 11-20
...

Bei Anwahl eines Feldes dann die Offset Variablen auf entsprechende Werte setzen.

Man könnte das Multiplexen auch in der SPS machen. Würd ich aber nur wenn es so umfangreich wird dass es in WinCCflexible nicht mehr geht.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum direkt auf den Instanzdb zugreifen ?

Ich würde alle Parameter in einen Struct legen.
Diesen dann als Array[1..500] of Struct in einen DB legen.
Der FB kann dann über den Counter von 1-500 auf den DB zugreifen.
In der Visu kann man das über Multiplexen machen, ist mir aber manchmal zu umständlich.

Ich habe immer z.B. am Anfang des Speicher-DB einen Struct mit Edit stehen. Bei der Anwahl am Panel wird der entsprechende Satz aus dem DB nach Edit kopiert. Eine Taste "Speichern" kopiert diesen Bereich Edit dann wieder zurück in den DB.

Aber das verschalten hab ich noch nicht ganz verstanden, du musst ja z.B. einen Eingang an den FB schreiben.
Ich hab so etwas für Ventile mit Fehlerüberwachungen.
In einem extra FC werden die notwendigen Signale auf den entsprechenden Bereich im DB verschaltet.
z.B.
Code:
U E 10.0
= DB_Fehler.Nr[123].Signal
Dadurch kann man dann alle Signale an den FB verschaltet, diesen aber Intern direkt von 1-500 in einem Loop durchlaufen lassen.
 
Hallo eYe,
ich hätte da auch noch einen Ansatz (ggf. besteht hier aber eine gewisse Parallelität zu dem Vorschlag von Jabba).
Ich würde den FB nicht mit 500 Instanzen aufrufen, sondern immer die gleiche Instanz verwenden und dem Fehler eine Index-Nummer mitgeben, die dann in dem FB deine Fehler-Nummer indiziert. Allerdings, wenn du hier mit Zeiten oder weiterführenden Verknüpfungen arbeiten willst, dann mußt du diese Dinge (Hilfsmerker , angelaufene Zeiten etc.) auch für jede Meldung seperat mit gespeichert werden ... Du könntest dann in der Visu aber immer mit der gleichen Fehlerliste aus dem gleichen DB arbeiten ...

Gruß
LL
 
500 IDBs in denen kaum was drin steht?

wie wärs mir ner multiinstanz?

wäre in deinem fall vielleicht ganz praktisch, da es dir 499 IDBs erspart

erschwert allerdings das bearbeiten von der visu aus...

der pfuscher in mir möchte dir da glatt dazu raten, SPS-seitig jeweils einen parameterbereich des instanz-DBs bzw im moment 1 instanz-DB per blockmove in einen DB zu verschieben, auf den die visu dann direkt zugreifen kann.

hätte den vorteil, dass du dich nicht mit multiplexen auf der visu rumschlagen musst. außerdem kannste dir die parameter dann als rezeptur auf der visu sichern und beim setzen der parameter werden nicht einzelne geänderte werte sofort von deinem FB verwendet. nützlich, wenn es ungünstige kombinationen gibt oder die reihenfolge beim setzen der parameter eigentlich ne rolle spielen würde.
abgesehen davon kannste die frisch gesetzten parameter dann noch verwerfen, wenn du sie einfach nicht zurückspielst und per datensätzen/rezepten die 500 parametersätze in minutenschnelle neu setzen

nachteil ist das rumgepointere und der kopiervorgang, der einen einzelnen zyklus ein wenig verlangsamt (sollte aber eigentlich nicht weiter ins gewicht fallen. du kopierst ja keine 1000 bytes nehm ich an)
 
Zurück
Oben