TIA RT Prof V16: Zweifache Skript-Ausführung durch Variablentrigger verhindern

fabey

Level-2
Beiträge
113
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte aus der PLC heraus ein Bit setzen, welches mir ein Skript startet.
Dafür habe ich eine Variable angelegt und entsprechend verbunden.
Diese habe ich dann als Triggervariable im Aufgabenplaner gesetzt und das gewünschte Skript als Ereignis festgelegt.

Das Problem ist dass es bei jeder Änderung (True <--> False) getriggert wird.
Deshalb wollte ich als Work-Around eine If-Abfrage verwenden in der ich vergleiche "If Triggervariable = True Then" und so den eigentlichen Code nur 1x ausführe. Dies scheitert aber leider, da bei False --> True zwar der Trigger angestoßen wird, aber SmartTags("Triggervariable") noch false ist und die If-Abfrage somit stets im ELSE-Pfad endet.

Was für Lösungen gibt es hierfür?


Liebe Grüße
 
Einfache Lösung:

Du nimmst zum Antriggern z.B. eine Byte Variable. In WinCC stellst du dann an dieser Variable eine Grenze von 5
ein. Bei Grenzüberschreitung parametrierst du dann "WertSetzen auf 0" und Aufruf von deinem Skript.

In der SPS setzt du dann diese Variable, wenn du das Skript ausführen möchtest auf irgendwas >5, also z.B. 6
Dann wird das Skript 1x ausgeführt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo DeltaMikeAir,

redest du von TIA WinCC RT Professional? (Ich hatte es nur im Titel erwähnt)
Dort kann ich das von dir beschriebene nicht nachvollziehen. Es fängt schon damit an das man Byte nicht als Datentyp auswählen kann.
Auch gibt es keine Grenzen, sondern ich finde nur "Bereich", bei überschreiten dessen finde ich aber nur das setzen des Ersatzwerts. Aber nichts um noch ein Skript zu triggern. Bei den meisten Datentypen ist dies auch ausgegraut.

Danke für deine Rückmeldung.
 
Also ich nutze eigentlich grundsätzlich Int-Variablen, um Scripte anzustoßen, da kann man auch gleich eine Fertigmeldung absetzen.
FNSIniVar ist die Triggervariable, die auf 1 Triggern soll.
Wichtig ist, die Variable im Script nochmals zu lesen, das funktioniert so jedenfalls bei mir sowohl in winCC 6.2, 7.2, als auch in WinCC Prof.

Aufruf in etwa:

Code:
FMSStatus = CInt(HMIRuntime.Tags(FMSIniVar).Read(1))
  FMSTemplate = SectionStr(HMIRuntime.Tags(FMSTemplateVar).Read(1))
  FMSFullTemplate = "S" & Station & "_" & Section & "_" & FMSTemplate
  
  If FMSStatus <> 1 Then
    Exit Function
  End If

//Bei FMSStatus = 1  geht es hier weiter.

Code



//Am Ende hier Antwort an SPS
' set INI status
  If ResponseCode = 1 Then
    Call HMIRuntime.Tags(FMSIniVar).Write(CInt("&H00F1")) ' PASS
    Call DebugStr("ProcessFMS::" & Station, "PASS (0x00F1), ResponseCode=" & ResponseCode)
  Else
    Call HMIRuntime.Tags(FMSIniVar).Write(CInt("&H00FF")) ' FAIL
    Call DebugStr("ProcessFMS::" & Station, "FAIL (0x00FF), ResponseCode=" & ResponseCode)
  End If
End Function
 
Zurück
Oben