Über Triggervariable in DB Script in WinCCFlex starten

Ralle

Super-Moderator , User des Jahres 2006-2007
Teammitglied
Beiträge
15.404
Reaktionspunkte
4.039
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich war heute mit einem Freund an WinCCFlex am Testen.

Eine Triggervariable (Int) sollte bei Wertänderung ein Script anstoßen. In dem Script wurde dann abgefragt, ob sich die Variable von 0 auf 1 geändert hat, dann wurde das Script abgearbeitet und am Ende die Triggervariable im Script wieder auf Null gesetzt.

Hat man die Triggervariable über einen Butten gesetzt ging das. Über die SPS ging das ab und an, sehr oft wurde das Script gar nicht erst aufgerufen (Kontrolle im Debugger)

Wir haben ewig rumgeopert, bis wir zum Schluß die Triggervariable einfach in der SPS getoggelt und nicht mehr das Rücksetzen des Triggers im Script vorgenommen haben. Dadurch fehlt leider die Rückmeldung, ob das Script gelaufen ist, eine zweite Variable wäre möglich, aber na ja. Zumindest funktioniert der Aufruf nun immer.

Ist das Verhalten normal?

MP277 8" , Triggervariable im DB, Variable im Panel auf Wertänderung überwacht, Zyklus fortlaufend.
 
Ich bin ja der Auffassung das in den scripten, die steuerungsvariabeln als
Instanz genutzt werden und ausserhalb wieder anders aktualliesiert wird.
Wenn also innerhalb des scriptes die variabel nicht mit der Steuerung aktualisiert
wird, wird nach beenden des scriptes einfach der alte wert aus der Steuerung
übernommen. Als Beispiel Script braucht 50ms und kleinste aktualisierungszeit
der Variablen ist 100ms, dann ist es ein glückstreffer innerhalb des scriptes
zu aktualisieren.
Versuch doch mal eine warte Zeit am Ende des scriptes einzubauen und schau
mal was dann passiert, oft reicht es schon aus am Ende einfach noch ein zweites
Script aufzurufen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
... das sehe ich nicht so wie Helmut. Im Gegenteil sollte das auf jeden Fall funktionieren und ich bin mir auch sicher, dass ich so etwas mal in einem Script (mal ungeachtet dessen ob das so sinnig ist) am laufen hatte - allerdings PC-Runtime. Bei den MP's ticken die Uhren so ab und an auch mal anders.
Na jedenfalls ... bei meiner Anwendung war es dann aber auch so, dass der Handshake z.T. über Gebühr langsam vonstatten ging - also länger als von der Script-Bearbeitung und der Variablen-Aktualisierungszeit her vertretbar gewesen wäre (was dann im Grund wieder in Richtung von dem, was Helmut geschrieben hat, geht).

Fazit: :confused: :confused: :confused:

Gruß
Larry
 
Wir bauen jetzt noch eine 2. Variable als Rückmeldung ein. Die setze ich dann am Ende des Scriptes und lösche sie aus der SPS heraus. Vorher Toggel ich den Trigger nicht.

Wir hatten auch mit längeren und kürzeren Aktualisierungszeiten gearbeitet.
Wartezeit ist eher nicht gut, in der Zwischenzeit geht ja nicht Anderes oder irre ich da?

Bei WinCC6.2 ist es so, das ein VB-Script alles aufhält, es werden keine Fehler mehr angezeigt, keine anderen Scripte bearbeitet, das geht also dort gar nicht.
 
versuche doch mal mit einer Zeit, die muss ja nicht lange sein.
Hier ein Beispiel, wo ich "Array's" von Variabeln in die einzelenen
Datenbausteine verteile, ohne Zeit geht da nichts.

Code:
Dim i
Dim Parameter, Dummy, DB, speicher
 
ReDim Dummy(20)
ReDim Parameter(20)
ReDim DB(20)
Parameter(1) = "001\001-DB.HMI.Parameter"
Parameter(2) = "111\111-DB.HMI.Parameter"
Parameter(3) = "121\121-DB.HMI.Parameter"
Parameter(4) = "122\122-DB.HMI.Parameter"
Parameter(5) = "131\131-DB.HMI.Parameter"
Parameter(6) = "132\132-DB.HMI.Parameter"
Parameter(7) = "141\141-DB.HMI.Parameter"
Parameter(8) = "142\142-DB.HMI.Parameter"
Parameter(9) = "151\151-DB.HMI.Parameter"
Parameter(10) = "152\152-DB.HMI.Parameter"
Parameter(11) = "161\161-DB.HMI.Parameter"
Parameter(12) = "207\207-DB.HMI.Parameter"
DB(1) = "001"
DB(2) = "111"
DB(3) = "121"
DB(4) = "122"
DB(5) = "131"
DB(6) = "132"
DB(7) = "141"
DB(8) = "142"
DB(9) = "151"
DB(10) = "152"
DB(11) = "161"
DB(12) = "207"
 
'Fenster einblenden
SmartTags("INI\Status") = 1
 
'Parameter laden
SmartTags("INI\Text_1") = "Parameters are loaded"
SmartTags("INI\Text_2") = " "
For i = 1 To 12
 speicher = Parameter(i)
 Dummy(i) = SmartTags (speicher)  
 SmartTags("INI\Text_2") = "Parameters Group " & DB(i)
 Delay 10
Next
 
'Initalisierung Beendet
SmartTags("INI\Text_1") = "Initialization completed"
SmartTags("INI\Text_2") = " "
Delay 10
 
'Fenster ausblenden
SmartTags("INI\Status") = 0
 
'Homebild aufrufen
ActivateScreen "001:1 - Home", 0

und hier das script für die Zeit
Code:
Dim StartTime, StopTime, i
StartTime = Now
StopTime = StartTime + DelayTime / 24 / 360000
Do
Loop Until Now >= StopTime
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wartezeit ist eher nicht gut, in der Zwischenzeit geht ja nicht Anderes oder irre ich da?

Bei WinCC6.2 ist es so, das ein VB-Script alles aufhält, es werden keine Fehler mehr angezeigt, keine anderen Scripte bearbeitet, das geht also dort gar nicht.

Das ist bei Flex auch nicht anders.
Es wird immer nur das eine Script ausgeführt (oder keins). Du kannst natürlich aus Script1 das Script2 aufrufen (und gibst dann so den "Token" weiter), Script2 bearbeiten und am Ende dessen wieder in Script1 zurückkehren (wie bei den Bausteine in der SPS).
Wenn ein Scrippt viele Variablen aktualisiert (zumindestens beim Einlesen) kann die Laufzeit davon schon ganz schön ansteigen.

@Helmut:
Der Sinn deiner Delay's in dem Script erschießt sich mir jetzt nicht wirklich.
Schreib doch mal etwas mehr dazu. Was wird dadurch besser ?

Gruß
Larry
 
ich lade die Variabeln im Script über eine schleife um, das mach ich
über zeiger. In jeden Schleifendurchlauf stelle ich den Zeiger auf eine
neu Variabel und warte ich einen kleinen Augenblick. bis die Variabeln
aktualisiert werden, wenn ich die Zeit nicht einbaue, werden
die werte nicht übertragen. Baue ich die Zeit ein funktioniert es.
 
Zurück
Oben