[Wincc Flexible08] Bedingter Bildwechsel mit Script

Sickone4

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

ich hab da mal ein Problem :)

ich habe eine Textliste mit 5 einträgen.
die wertigkeit geht von 0-4 ( 0 = erster eintrag,...)

bei "änderung" auf einen bestimmten wert soll ein bedingter bildwechsel passieren.

d.h. wird in der textliste eintrag 3 angewählt ändert isch der wert in einem db auf 2 und das script soll auswerten ob eine 2 drin steht und demnach in der visualisierung eine bestimmte seite öffnen.

irgendwie "funktioniert" das aber mit ziemlichen chaos. d.h. manchmal klappts, manchmal schreibt er irgendwas irgendwo rein und wechselt auf ein falsches bild, egal bei welchem eintrag.

ich habe um es zu verdeutlichen 3 interne variablen angelegt, welche einen voreingestellten grundwert der aufzurufenden bildnummer haben:

Bild_20 -> 20
BIld_95 -> 95
Bild_96 -> 96

und hier das script

'Bedingter Bildwechsel

' Wenn die Programmauswahl geändert wird, so wird eine neue Nummer in den Datenbaustein DB5.DBW8 geschrieben.
' In Abhängigkeit wird ein Bildwechsel ausgeführt

' 0 - Kein Programm ausgewählt - Kein Bildwechsel
' 1 - Keine Carbonisierung - Kein Bildwechsel
' 2 - Auffrischen - Bildwechsel nach Bild Auffrischeinstellungen [ Bildnummer: 20 ]
' 3 - Carbonisieren - Bildwechsel nach Bild Carbonisierungseinstellungen [ Bildnummer: 95 ]
' 4 - Reinigung - Bildwechsel nach Bild Reinigungseinstellungen [ Bildnummer: 96 ]

' Variable Bildwechsel
Dim Programmauswahl

' Übergabe der Programmauswahl aus dem DB in die Scriptvariable
Programmauswahl = SmartTags("IDB_MP377.Taste_Programmauswahl")

' Vergleiche und Bildwechsel

If Programmauswahl = "2" Then
ActivateScreenByNumber SmartTags("Bild_20"), 0
End If

If Programmauswahl = "3" Then
ActivateScreenByNumber SmartTags("Bild_95"), 0
End If

If Programmauswahl = "4" Then
ActivateScreenByNumber SmartTags("Bild_96"), 0
End If


was mache ich nur falsch?
 
vielleicht ein kleiner zusatz: die variable, welche zur auswertung genutzt wird stimmt. also sie wechselt zw 0 und 4 korrekt! das hab ich über variable beobachten direkt im überblick.

der fehler muss also an dem symbolischen EAfeld mit der textliste oder dem script liegen
 
ich habe sie auf zyklisch fortlaufend bei erfassungsart eingestellt. vorher stand sie auf zyklisch bei verwendung.

beides bringt leider keine verbesserung
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in winccflexible mache ich folgendes:

ich habe ein symbolisches ea feld:
daran habe ich als textliste die "programmauswahl" angeschlossen und als variable: IDB_MP377.Taste_Programmauswahl
zusätzlich habe ich bei Ereignisse "ändern" meinen Scriptaufruf drin.

die textliste programmauswahl enthält 5 Werte, von 0-4.

die entsprechend ausgewählte zahl (0-4) übertrage ich in einen FB, in dem ich alle tasten etc in der steuerung auswerte.

eben diese variable nimmt auch die werte 0-4 an. alle miene ventilstellungen etc funktionieren genau danach, dass ich das programm auswähle und vergleicher entsprechend schalten.

nur der bildwechsel funktioniert mit dem oben angegebenen script nicht
 
Was steht den in den Variablen "Bild_20"; "Bild_95" und "Bild_96" mit den du die Bilder aufrufst?
Ist da gewährleistet das dort auch die richtigen Werte drinstehen wenn du das Script aufrufst?
 
eigentlich steht da nur ein startwert drin, der auch der zahl entspricht, die das aufzurufenden bild hat.

am liebsten würde ich im script den eintrag "SmartTags("Bild_20"), 0" durch "20, 0" ersetzen. aber irgendwie klappt das nicht. bekomm da imme reinen fehler.
scheinbar kann man dort keine feste zahl hinschrieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Feste Zahlen sollten auch gehen, bekomme aber jetzt nicht den Syntax
aus den Kopf auf die Reihe.
Du kannst doch über den Scripteditor
Rechts Funktionen einfühgen, versuche
es doch da mal mit.
Alternativ könntest du dir ja auch mal vom
Script eine variabel beschreiben lassen die du dann beobachtest.
 
was die funktionen angeht weiß ich nicht was ich machen kann, ich kann zwar von rechts nach links was rineziehen, nach beschaltung, aber auch bei dem bildwechsel mit nummer ist eine variable anzubinden. ich hab wincc nun aus und werde mich dem morgen zuwenden :) nach 2 wochen wincc hardcore muss um 24h auch mal ende sein^^ naja das datum emine abschlussprojektes rückt eben immer näher :D
 
Vielleicht so...
Code:
' In Abhängigkeit wird ein Bildwechsel ausgeführt

' 0 - Kein Programm ausgewählt - Kein Bildwechsel
' 1 - Keine Carbonisierung     - Kein Bildwechsel
' 2 - Auffrischen              - Bildwechsel nach Bild Auffrischeinstellungen       [ Bildnummer: 20 ]
' 3 - Carbonisieren            - Bildwechsel nach Bild Carbonisierungseinstellungen [ Bildnummer: 95 ]
' 4 - Reinigung                - Bildwechsel nach Bild Reinigungseinstellungen      [ Bildnummer: 96 ]

' Variable Bildwechsel
Dim Programmauswahl
Dim Bild

' Übergabe der Programmauswahl aus dem DB in die Scriptvariable
Programmauswahl = SmartTags("IDB_MP377.Taste_Programmauswahl")

' Vergleiche und Bildwechsel

    If Programmauswahl = "2" Then
Bild = 3
        ActivateScreenByNumber Bild, 0
    End If
    
    If Programmauswahl = "3" Then
Bild = 95
        ActivateScreenByNumber Bild, 0
    End If
    
    If Programmauswahl = "4" Then
Bild = 96
        ActivateScreenByNumber Bild, 0
    End If
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Programmwahl aus einer Dropdown-Liste mit direkt ausgelöstem Bildwechsel finde ich nicht so glücklich ... auch weil es nicht gut mit Fingern bedienbar ist. Wenn möglich würde ich 4 oder 5 Programmwahl-Schaltflächen benutzen. Oder eine Dropdown-Liste zur Vorauswahl mit einer extra OK-Schaltfläche dazu.


zusätzlich habe ich bei Ereignisse "ändern" meinen Scriptaufruf drin.
Du meinst Ereignis "Ändern" des symbolischen EA-Felds?
Besser wäre wohl, das Skript beim Ereignis "Wertänderung" der am EA-Feld angebundenen Variable "IDB_MP377.Taste_Programmauswahl" aufzurufen. Diese Variable muß fortlaufend gelesen werden.

(Spekulation: Falls WinCC flexible kein Ereignis "Wertänderung" der Variable auslösen sollte, dann die Variable in der Steuerung auf eine zweite Variable kopieren oder in WinCCflex eine zweite Variable auf die selbe Adresse anlegen.)

Zum Skript:
Die Variable "Programmauswahl" würde ich numerisch vergleichen, nicht als Stringvergleich:
Code:
If Programmauswahl = "2" Then

'besser:
If Programmauswahl = 2 Then

Warum benutzt Du "ActivateScreenByNumber"? So wie Du Deine Fallunterscheidung im Skript geschrieben hast, kannst Du auch direkt "ActivateScreen" mit Deinem Ziel-Bildname programmieren. Das ist außerdem besser für die Querverweisliste:
Code:
If Programmauswahl = 2 Then
    ActivateScreen "Bild_20", 0
End If

If Programmauswahl = 3 Then
    ActivateScreen "Bild_95", 0
End If

If Programmauswahl = 4 Then
    ActivateScreen "Bild_96", 0
End If

Oder programmiere nur einen, aber variablen Bildaufruf-Befehl:
Code:
DestScreen = 0

If Programmauswahl = 2 Then
    DestScreen = 20
End If

If Programmauswahl = 3 Then
    DestScreen = 95
End If

If Programmauswahl = 4 Then
    DestScreen = 96
End If

If DestScreen > 0 Then
    ActivateScreenByNumber DestScreen, 0
End If


eben diese variable nimmt auch die werte 0-4 an. alle miene ventilstellungen etc funktionieren genau danach, dass ich das programm auswähle und vergleicher entsprechend schalten.
Die Variable an dem symbolischen EA-Feld ist bei Dir aber nicht die selbe Variable, die auch die Ventilstellungen steuert? Die Eingabe/Auswahl-Prüfung und die Benutzung zur Programmsteuerung muß getrennt sein (2 verschiedene Variablen).

Harald
 
Zurück
Oben