Skripts werden bei Wertänderung offenbar nicht immer angestoßen. (WinnCC Fl.Adv.2008)

Rodewijn

Level-1
Beiträge
90
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe bei WinCC Flexible Advanced 2008SP3 das Folgende Problem:

Ich bekomme über einen OPC-Server Daten von einer Mitsubishi-SPS (Eingangswörter/Ausgangswörter/usw.). Wenn z.B. ein Ausgangswort sich ändert, wird ein Skript angestoßen, das diese Ausgangswörter auf internen Bits abbildet, die dann an diverse Stellen für die Visualisierung zur Ein- und Ausblendung benutzt werden. Beim Offline-Testen klappt das auch ganz gut. Aber beim Kunden scheint es oft so zu sein, dass bei Wertänderungen die Skripte nur manchmal angestoßen werden, manchmal auch nicht. Der Kunde schaltet dann zwischen zwei Bilder hin-und-her dann ist alles wieder aktuell, weil beim Bildaufbau auch die Skripte ausgeführt werden.

Kann jemand mir erklären, woran das liegt? Ist es vielleicht so, dass wenn sich sowohl ein Eingangswort als ein Ausgangswort ändert, das Skript zur Eingängswörterverwaltung gestartet wird und das Ausgangskript einfach "vergessen" wird, wenn das erste Skript noch nicht abgearbeitet war? Oder ist es vielleicht genau andersherum, also wird ein Skript gar nicht zu Ende geführt, wenn ein zweites angestoßen wird?

Vielen Dank im Voraus :)
 
Die scripte werden immer bis zum Ende Abgeabeitet, aber kann es sein da du mit
deiner Funktion ein Scriptfeuerwerk aufrufst und die HMI damit überlastest?

Wie häufig und wie schnell hintereinander kommen deine zustandswechsel der Signale?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nun ja, eigentlich ändert sich ein Wort sich nur etwa in 1-3 s. Zum Beispiel, wenn eine neue Endlage erreicht wurde, oder wenn der Regler eine Heizung ausgeschaltet hat... Die Anlage ist nicht schnell. Hmmm, aber vielleicht "räuscht" ab- und zu irgendein Eingang... Das dumme ist, dass die Anlage jetzt soweit weg ist, und als sie hier war, ist es mir nicht aufgefallen...
 
@TE:
Das sehe ich nicht ganz so verbissen wie der RN ...
Wenn dein System mit den Scripten überlastet wäre dann würde es das ja mit einer entsprechenden Fehlermeldung sagen.
Wie steht es denn um die Aktualisierung der genannten Variablen ? Werden die "zyklisch fortlaufend" aktualisiert ? Wenn nicht dann das bitte ändern. Die blosse Verwendung der Variablen um ein Script zu triggern ist nicht ausreichend.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, ich habe alle Variablen als "zyklisch fortlaufend" definiert... Und Erfassungszyklus 1s, dann könnte ein Variable sich doch nur 1 mal pro Sekunde ändern, oder...? Und es sind nur etwa 12 Wörter mit einem Skript verbunden mit als Trigger eine Wertänderung....
 
Die einzige Lösung wäre vielleicht komplett auf Skripte durch Wertänderung zu verzichten und überal in die entsprechenden Wörter direkt auf die Bitnummer "kucken" zu lassen, dass wäre jetzt aber noch eine Menge Arbeit... Und nicht so anschaulich für die Wartung später, weil die lokale bits verständliche Namen haben... Und Fehlermeldungen bekomme ich weiter auch nicht, es gibt "nur" das Problem, dass nicht immer getriggert wird. So ganz verstehe ich es noch nicht...
 
Die von dir geschilderte Sache mit dem Seitenaufbau macht mich trotzdem glauben, dass Flex selbst eine Wertänderung der Variablen nicht mitbekommt.
Was macht denn das Script konkret ?
Es gibt allerdings noch ein nicht so richtig für mich kalkulierbare Größe : du schreibst, dass du aus den OPC-Worten Flex-interne Bits machst. Dir ist aber bekannt, dass Flex mit den internen Variablen gewisse Einschränkungen hat ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also das Skript macht nichts anderes, als die Wörter auf bits abzubilden, die dann (mehrmals ausgewertet werden) z.B.

E00_Stoerung_Schaltschrank = ((Eingang_word_1 And 1 ) = 1 )
E01_Gasheitzer_Betrieb = ((Eingang_word_1 And 2 ) = 2 )
E02_Gasheitzer_Stoerung = ((Eingang_word_1 And 4 ) = 4 )
E03_Feueralarm = ((Eingang_word_1 And 8 ) = 8 )
E04_Not_Aus_Ausgeloest = ((Eingang_word_1 And 16 ) = 16 )
E05_Fehler_Zone_1_911 = ((Eingang_word_1 And 32 ) = 32 )
E06_Fehler_Zone_1_912 = ((Eingang_word_1 And 64 ) = 64 )
E07_Fehler_Zone_2_921 = ((Eingang_word_1 And 128 ) = 128 )
E10_Fehler_Zone_2_922 = ((Eingang_word_1 And 256 ) = 256 )
E11_Fehler_Zone_2_931 = ((Eingang_word_1 And 512 ) = 512 )
E12_Fehler_Zone_3_932 = ((Eingang_word_1 And 1024 ) = 1024 )
E13_Fehler_Zone_4_941 = ((Eingang_word_1 And 2048 ) = 2048 )
E14_Fehler_Zone_4_942 = ((Eingang_word_1 And 4096 ) = 4096 )
E15_Fehler_Zone_5_951 = ((Eingang_word_1 And 8192 ) = 8192 )
E16_Fehler_Zone_5_952 = ((Eingang_word_1 And 16384) = 16384)
E17_Reserve = ((Eingang_word_1 And 32768) = 32768)


und so weiter bis word_5...

Bei Änderungen wird es angestoßen, und beim Offline-Test klappt das alles wunderbar...
Ich habe die internen bits dann so genannt wie in den E-Plänen, das Mitsubishi SPS-Programm habe ich übrigens nicht selber geschrieben, da kenne ich mich nicht mit aus..
 
Vielleicht änderst du es mal so, das nicht jedes der Words das gleiche Script anstossen sondern jedes sein eigenes - also im Script von Word1 auch nur Word1 auswerten und nicht auch noch Word2 .. 5. Ist nur so eine Idee ...

Gruß
Larry
 
Hallo,

Problem kommt mir bekannt vor. Ich habe Scripte laufen, die über Wertänderung einer Variablen gestartet werden. Man muss diese Variable in den Bildern, wo das Script laufen soll, (unsichtbar) hinterlegen. Es ist bei WinCCflex (wahrscheinlich) so, dass Scripte nur dann über Wertänderung einer Variablen angestossen werden, wenn diese Variable in dem entsprechenden Bild hinterlegt ist.

Ich habe es auch so gemacht, das ich die Variable in der Vorlage hinterlegt habe. Vorlage ist in allen Bildern gleich.

gd
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also das Skript macht nichts anderes, als die Wörter auf bits abzubilden, die dann (mehrmals ausgewertet werden) z.B.

E00_Stoerung_Schaltschrank = ((Eingang_word_1 And 1 ) = 1 )
E01_Gasheitzer_Betrieb = ((Eingang_word_1 And 2 ) = 2 )
E02_Gasheitzer_Stoerung = ((Eingang_word_1 And 4 ) = 4 )
E03_Feueralarm = ((Eingang_word_1 And 8 ) = 8 )
E04_Not_Aus_Ausgeloest = ((Eingang_word_1 And 16 ) = 16 )
E05_Fehler_Zone_1_911 = ((Eingang_word_1 And 32 ) = 32 )
E06_Fehler_Zone_1_912 = ((Eingang_word_1 And 64 ) = 64 )
E07_Fehler_Zone_2_921 = ((Eingang_word_1 And 128 ) = 128 )
E10_Fehler_Zone_2_922 = ((Eingang_word_1 And 256 ) = 256 )
E11_Fehler_Zone_2_931 = ((Eingang_word_1 And 512 ) = 512 )
E12_Fehler_Zone_3_932 = ((Eingang_word_1 And 1024 ) = 1024 )
E13_Fehler_Zone_4_941 = ((Eingang_word_1 And 2048 ) = 2048 )
E14_Fehler_Zone_4_942 = ((Eingang_word_1 And 4096 ) = 4096 )
E15_Fehler_Zone_5_951 = ((Eingang_word_1 And 8192 ) = 8192 )
E16_Fehler_Zone_5_952 = ((Eingang_word_1 And 16384) = 16384)
E17_Reserve = ((Eingang_word_1 And 32768) = 32768)


und so weiter bis word_5...
Wozu dient dies eigentlich ? Ich habe den Gefühl das es ist nicht Notwendig das was du vorhast über Skripte zu lösen.
Ist es für Visualisierung ?
Du kannst für die meisten Visualisierungen auf die einzelne Bits innerhalb von ein Variabel zugreiefen.
Andere Lösung wäre einfach die einzelne Bits als eigenständige Variabeln zu definieren. Wenn sie mit den Word-Variabel überlappt ist es kein Problem. Kostet nur mehr Powertags.
Oder Array Tags. Mehr umständlich aber kostet keine ekstra Powertags.

Hast du Fehler-Hantierung in dein Skript ?

Ich habe Scripte laufen, die über Wertänderung einer Variablen gestartet werden. Man muss diese Variable in den Bildern, wo das Script laufen soll, (unsichtbar) hinterlegen. Es ist bei WinCCflex (wahrscheinlich) so, dass Scripte nur dann über Wertänderung einer Variablen angestossen werden, wenn diese Variable in dem entsprechenden Bild hinterlegt ist.
Das ist definitiv Falsch. Die Variabel muss einfach "Zyklisch fortlaufend" aktualisiert werden.
 
Zurück
Oben