WinCC Flex VB Script, Variablen unter Script ablauf aktualisieren

fabi012

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

ich lese hier schon eine weile mit und habe nun eine Frage zu der ich noch keine Antwort durch die Suche gefunden habe.
Ist es denn irgendwie möglich während ein Skript abläuft eine bestimmte Variable, oder auch alle angelegten Variablen zu aktualisieren, ohne ein Rezept anzulegen?

Hintergrund ist dieser:

ich habe ein Script das aus einem DB eine Variable anzahl an Bits ausliest,
Der DB und wo die Bits liegen ist allerdings Variabel einzugeben, deshalb sind in der Variable, die auf die Steuerung zum lesen zugreift wiederum Variablen enthalten. (Siehe Bild)

Unbenannt.jpg

-> somit kann die Variable nicht in einem Rezept verwendet werden.
Der Byte_Stand wird jedoch in dem Skript hochgezählt, also müssen auch die Variablen aktualisiert werden.

Kennt dazu jemand eine Lösung?

Vielen dank schon mall im Voraus.
 
Ohne Rezeptur wird das ein Glücksspiel, z.B. könnte man die Variablen zweimal lesen mit einer Pause von ein paar Sekunden dazwischen und hoffen, daß beim zweiten mal alle Variablen aktualisiert wurden.

Damit man mit nur einer kleinen Rezeptur auskommt: Das HMI könnte der Steuerung mitteilen, welchen Datenbereich sie lesen will und die Steuerung kopiert den Bereich in einen Übergabepuffer. Der Übergabepuffer kann vom HMI als Rezept eingelesen werden (GetDataRecordTagsFromPLC). Da bekommt man eine Information, wann das einlesen abgeschlossen ist.
Hier z.B. wird ein Array aus Structs über nur eine Rezeptur ins HMI gelesen: http://www.sps-forum.de/hmi/47637-p...rte-eines-tp277-6-speichern-2.html#post350344

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Antwort!
das ist mir jedoch nicht möglich, da ich dann meiner Meinung nach eine Übergabevariable erstellen müsste, der ich eine bestimmte Größe zuteilen müsste. Das will ich aber offen lassen.
Ich habe es nun so gemacht, dass ich pro Script durchlauf jeweils nur eine Variable (Bool, Real....) auslese, und den Zugriffsbereich der Oben genannten Variable verändere.
Durch einen Trigger in der SPS wird das Script jede 0,4 Sec dann aufgerufen und ließt die nächste Variable aus, bis die anzahl an auszulesenen Variablen erreicht wird.
Jedes mal wenn ich aus dem Script springe kann sich dann die Variable aktualisieren.
 
Wo, wofür bzw. wann verwendest Du den aktualisierten Wert der Variablen?

Hast Du Dir da sowas wie ein "Status Variable"-Bild gebastelt, wo man die Adresse (DB, Offset) einer Variable frei eingeben kann und dann der Wert der Variable angezeigt wird? Oder hast Du ein "gemultiplextes" Bild für mehrere Anlagenteile, wo irgendwie der Multiplex-Index bzw. die -Adresse verändert wird, abhängig davon welcher Anlagenteil dagestellt werden soll? Da braucht man kein Skript um die Variablen zu aktualisieren, man muß nur die adress-gemultiplexten Variablen in einem Bild (z.B. dem Bild mit der Adresseingabe) verwenden, z.B. als Ausgabefeld, dann wird die Aktualisierung der Variablen automatisch angestossen.

Wenn Du die Variablen nicht in einem Bild einbauen willst: Du könntest in dem Skript auch in einem einzigen Durchlauf auf alle Variablen mit dem selben Byte_stand oder auf überhaupt alle Variablen einen Lesezugriff machen, dadurch wird die (einmalige) Aktualisierung der Variablen angestossen. Ein paar Sekunden später könntest Du mit hoher Wahrscheinlichkeit die aktualisierten Werte verwenden.

Ob Deine Lösung zuverlässig funktioniert kommt es wohl nicht drauf an?
http://www.sps-forum.de/hmi/73704-w...alisierungszeit-der-variablen.html#post511939
und
falls es jmd interessiert: Seit ein paar Wochen ist nun die Skript-Lösung mit Wartezeit+"Dummy-Variablen einlesen" am Laufen und ich kann bis jetzt keine Inkonsistenzen mehr feststellen. Wie bereits geschrieben, die Variablen sind nicht auf "Zyklisch fortlaufend" gestellt, der Bus wird also nicht ständig belastet. Für meinen Teil ist die Archivierung so wie sie jetzt läuft absolut ok. Wer eine wirklich bombensichere Lösung haben will, sollte allerdings die von PN/DP bevorzugte Lösung mit Rezpeten verweden.

Harald
 
Jetzt melde ich mich noch einmal zurück,
das Skript habe ich benötigt um einen DB auszulesen und als .csv datei abzulegen. Da der DB aber auswählbar sein soll gibt man in einer anderen csv den aufbau des DB`s an
(z.b. Bool; Real; Int.....)
Das Skript arbeitet dann die Spalten durch und schreibt in eine CSV Datei die ausgelesenen werte. Da ich aber nicht zu viele Smarttags verwenden möchte habe ich nur eine Variable mit der Steuerung verbunden.

Je nach Vorangegangener Variable wird auf die Variable ein Offset daraufgesetzt.

Lösung:

ich habe es nun so gemacht das in der Quell csv auch die Anzahl an Variablen steht.
Wenn das Script angestoßen wird wird nur eine Variable ausgelesen und dann das Skript verlassen.
Durch die Steuerung wird eine Variable nach 0,5s invertiert die wiederum das Skript anstoßen. Dies wird so oft gemacht bis die Anzahl an Variablen ausgelesen wurde.
In der Zeit in der das Skript nicht abgearbeitet wird, wird die Variable aktualisiert.
 
Zurück
Oben