Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: WinCC Advanced (flexible): Schaltflächen" entprellen"

  1. #1
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo in die Runde geballten Wissens,

    ich benötige mal Denkanstöße zu einem Problem:

    Ich verwende momentan (ein wenig gezwungenermaßen) diverse Siemens-ComfortPanels.
    Diese zeichnen sich durch eine solche Performance aus, dass es ein Bediener schafft, eine Schaltfläche, die eigentlich nach Betätigung "gesperrt" ist (ausgeblendet durch Bildwechsel oder überdeckt durch eine scriptgesteuerte Hilfsgrafik), mehrfach zu triggern.
    Ich möchte also diese und eigentlich alle Schaltflächen entprellen und so eine ungewollte Mehrfachbetätigung verhindern.

    Meine bisherigen Überlegungen sind wie folgt:
    1. Boolsche Variable "buttonTriggered" mit Betätigung setzen und diese an "Animation - Bedienbarkeit" projektieren. Rücksetzen dann nach der letzten Ereignis-Funktion, die die Schaltfläche ausführen soll.
    2. Wie vor, jedoch blendet "buttonTriggered" eine unsichtbare Schaltfläche VOR der betätigten ein.

    Gibt es noch andere Möglichkeiten?


    Gruß, Fred
    Zitieren Zitieren WinCC Advanced (flexible): Schaltflächen" entprellen"  

  2. #2
    Registriert seit
    13.10.2007
    Beiträge
    12.027
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Könnte zum entpreellen vielleicht helfen, wenn du dein Ereignis aufrufst,
    wenn die Taste losgelassen wird. Das wirkt doch schon fast wie eine entprellung.

    Über die Perfomance der neuen Panelreihe schließe ich mich an, mein subjektive
    Meinung ist, das diese Panels ganz schön schwach in ihrer Leistung sind.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  3. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    faust (07.09.2015)

  4. #3
    Avatar von faust
    faust ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    Könnte zum entpreellen vielleicht helfen, wenn du dein Ereignis aufrufst,
    wenn die Taste losgelassen wird. Das wirkt doch schon fast wie eine entprellung.

    Dem steht leider die Bediener-Gewohnheit "Ich drücke lange auf die Taste, weil ich ja keine Reaktion sehe" gegenüber.


    Gruß, Fred

  5. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.336
    Danke
    448
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Beschreib doch mal welche Funktion der Button genau ausführt. VBS-Aktion?

    Der Subjektiven Meinung von RN schließe ich mich an.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  6. #5
    Registriert seit
    13.10.2007
    Beiträge
    12.027
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Mir würde jetzt nur noch einfallen, mit den Tastendruck ein Script aufzurufen und das da abzufangen.
    Richtiges Entprellen geht ja nur über eine Zeit, dann wirst du im Script eine Zeitschleife einbauen.

    Wenn die Variablen zur Steuerungsanbindung und nicht intern genutzt werden, ist es ganz sauber
    die Tasten in der Steuerung zu entprellen.

    Zeitschleife, du hast mal in irgendeinen Thread geschrieben, das man Zeiten im Script in 'ms' auflösen
    kann. Das konnte ich nachvollziehen, kleinste Basis ist meinens erachtens die Sekunde.
    Könntes du noch mal darauf eingehen?
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  7. #6
    Avatar von faust
    faust ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    Beschreib doch mal welche Funktion der Button genau ausführt. VBS-Aktion?
    Das ist ganz unterschiedlich. Mal sind es nur Systemfunktionen (Das ist dann meist unkritisch, da z.B. eine doppelt ausgeführte Werte-Inkrementierung einfach durch den Bediener korrigiert werden kann), es werden aber meistens Scripte angestoßen. Dies stellt dann ein Problem dar, wenn sich das Script z.B. auf dynamisch ermittelte Bildnummern oder ähnliches abstützt.
    Konkret siehe hier:
    Code:
    Sub OperatorMgmt_showOperatorControl()
    ' ####################################################################################################
    ' Steuert den Bediener-Anmeldedialog.
    '
    ' -------------------------------------------------------------------------------------------
    ' |   Version   | Autor | Änderung                                                           
    ' -------------------------------------------------------------------------------------------
    ' | 01_00_00_00 |  fk   | Neuerstellung
    '
    ' ####################################################################################################
    
        ' ##################################################
        ' Variablenreferenzen holen, Funktion initialisieren
        ' ##################################################
    
    
        ' ##############
        ' Funktionslogik
        ' ##############
        
        ' Hilfsvariablen besetzen
        OM_backPageNo = pageCtrl_currentPageNo
        OMSG_messageNo = 0
        OM_loginPassword = ""
        OM_loginKeySerialNo = currentOperator_keySerialNo
        OM_logBtnsEnabled = (OM_loginKeySerialNo = "")
            
        ' Dialog anzeigen
        ActivateScreen "p0020_OperatorLogControl", 0
    End Sub
    Wobei ich OM_backPageNo dann für das "Schließen des Dialogs" (Bildwechsel) verwende. Bei Mehrfachtrigger der script-auslösenden Schaltfläche ist das Bild mit dem Anmeldedialog bereits sichtbar, und der zweite Scriptdurchlauf ergibt dann eine falsche Bildnummer.

    Klar könnte ich diese spezielle Situation auch anders umschiffen, dennoch ist mir eine allgemein anwendbaren Entprell-Lösung lieber.



    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    Mir würde jetzt nur noch einfallen, mit den Tastendruck ein Script aufzurufen und das da abzufangen.
    Richtiges Entprellen geht ja nur über eine Zeit, dann wirst du im Script eine Zeitschleife einbauen.
    ...
    Schon erfolglos probiert, die Mega-Performance der Panels reicht nicht, um eine Schaltfläche mithilfe einer globalen internen Variable rechtzeitig auszublenden.


    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    ...
    Wenn die Variablen zur Steuerungsanbindung und nicht intern genutzt werden, ist es ganz sauber
    die Tasten in der Steuerung zu entprellen.
    ...
    Würde ich ungern tun, da ich 1. Steuerung und HMI grundsätzlich trenne (2 Projekte) und 2. eine auch ohne Steuerungsverbindung lauffähige Bedienoberfläche haben möchte.


    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    ...
    Zeitschleife, du hast mal in irgendeinen Thread geschrieben, das man Zeiten im Script in 'ms' auflösen
    kann. Das konnte ich nachvollziehen, kleinste Basis ist meinens erachtens die Sekunde.
    Könntes du noch mal darauf eingehen?
    Hier der verwendete Code:
    Code:
    Sub PauseXms(ByVal timeInMs)
    ' ####################################################################################################
    ' Erzeugt eine Pause mit der gegebenen Dauer.
    ' WICHTIG: Für die Dauer der gegebenen Pausenzeit kann kein anderes Skript ausgeführt werden und die
    ' CPU-Auslastung des Panels steigt auf 100%, dies beeinträchtigt die gesamte Bedienoberfläche!
    '
    ' -------------------------------------------------------------------------------------------
    ' |   Version   | Autor | Änderung                                                           
    ' -------------------------------------------------------------------------------------------
    ' | 01_00_00_00 |  fk   | Neuerstellung
    '
    ' ####################################################################################################
    
        ' ##################################################
        ' Variablenreferenzen holen, Funktion initialisieren
        ' ##################################################
        Dim timestamp, pauseTimestamp
    
    
        ' ##############
        ' Funktionslogik
        ' ##############
        
        ' Zeitstempel mit Pause berechnen
        timestamp = Timer
        pauseTimestamp = timestamp + (timeInMs / 1000)
            
        ' Endlosschleife
        Do
        Loop Until Timer >= pauseTimestamp
    End Sub

    Gruß, Fred

  8. Folgender Benutzer sagt Danke zu faust für den nützlichen Beitrag:

    rostiger Nagel (08.09.2015)

  9. #7
    Registriert seit
    13.10.2007
    Beiträge
    12.027
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    bist du da sicher mit deinen Timer, das dieser kleiner als Sekunden auflöst?
    In der Online Hilfe steht folgendes und das deckt sich auch mit meinen Versuchen.

    Beschreibung
    Gibt die Anzahl der seit 24:00 Uhr (Mitternacht) vergangenen Sekunden an.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  10. #8
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.336
    Danke
    448
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Zitat Zitat von faust Beitrag anzeigen
    Das ist ganz unterschiedlich.
    Mal sind es nur Systemfunktionen (Das ist dann meist unkritisch, da z.B. eine doppelt ausgeführte Werte-Inkrementierung einfach durch den Bediener korrigiert werden kann), es werden aber meistens Scripte angestoßen.
    Tatsächlich? Sogar Funktionen die auf die SPS-Variablen zugreifen kannst du auch doppelt triggern) Das ist ja ganz toll...
    Bei den Skripten hätte mich das weniger gewundert dass man es schafft ein und dass selbe gleich 2x hintereinander in die VBS-Queue zu schicken.
    Das Problem gab's unter Flex schon.

    Zitat Zitat von faust Beitrag anzeigen
    Dies stellt dann ein Problem dar, wenn sich das Script z.B. auf dynamisch ermittelte Bildnummern oder ähnliches abstützt.
    Wenn du dich auf ein Bild stützt würde ich (sofern möglich) beim Aufruf prüfen ob das richtige geöffnet ist.

    Löst aber nicht das Grundsatzproblem... Hmm....
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  11. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von faust Beitrag anzeigen
    Code:
    Sub PauseXms(ByVal timeInMs)
    [...]
        ' Zeitstempel mit Pause berechnen
        timestamp = Timer
        pauseTimestamp = timestamp + (timeInMs / 1000) 'muß auf Mitternachts-Überschreitung (>= 86400) geprüft werden!
            
        ' Endlosschleife
        Do
        Loop Until Timer >= pauseTimestamp
    End Sub
    Die Verwendung der Timer-Funktion ist nicht so trivial wie es auf den ersten Blick aussieht - besonders wenn man sie kurz vor Mitternacht aufruft oder wenn die Panel-Uhr synchronisiert wird. Sonst kann aus der als "Endlosschleife" titulierten Warteschleife tatsächlich eine Endlosschleife werden.
    Besser: Now-Funktion verwenden oder bei Mitternachts-Überschreitung in 2 Schleifen zerlegen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. #10
    Avatar von faust
    faust ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Die Verwendung der Timer-Funktion ist nicht so trivial wie es auf den ersten Blick aussieht - besonders wenn man sie kurz vor Mitternacht aufruft oder wenn die Panel-Uhr synchronisiert wird. Sonst kann aus der als "Endlosschleife" titulierten Warteschleife tatsächlich eine Endlosschleife werden.
    Besser: Now-Funktion verwenden oder bei Mitternachts-Überschreitung in 2 Schleifen zerlegen.

    Hallo Harald,

    löst "Now" denn auch bis Millisekunden auf?
    "Timer" soll dies tun:
    Code:
    The Timer Function returns the number of seconds and milliseconds since 12:00 AM.
    
    Example
    
    <%
    response.write("Number of seconds and milliseconds since 12:00 AM: ")
    response.write(Timer)
    %>
    
     The output of the code above will be:
      Number of seconds and milliseconds since 12:00 AM: 13316.89

    Gruß, Fred

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 17.03.2015, 15:04
  2. TIA Veroderung der "Sichtbarkeit" in WinCC Advanced
    Von jusaca im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 29.09.2014, 18:37
  3. Antworten: 8
    Letzter Beitrag: 10.10.2012, 22:26
  4. Antworten: 0
    Letzter Beitrag: 18.03.2009, 14:20
  5. WinCC Flexible 2005 Advanced + OP270 6"
    Von stricky im Forum HMI
    Antworten: 15
    Letzter Beitrag: 17.04.2006, 20:46

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •