Quittiertaste TP177B in SPS auswerten

bastler

Level-1
Beiträge
254
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich habe ein Projekt in WinCC flexible 2008 erstellt. Dieses läuft auf einen TP177B. In diesen Projekt benutze ich auch die Meldeanzeige. Diese besitzt ja schon eine "integrierte" Quittiertaste. Ist es möglich, diese Taste im SPS-Programm auszuwerten? Welches Bit wird beim Drücken dieser Taste gesetzt?
Danke für eure Hilfe.

MfG
bastler
 
Mit der Quittiertaste kannst du zu jeder Meldung ein spezifisches Signal zum quittieren ausgeben. Dazu wählst du die Meldung unter "Bitmeldungen" an und kannst dann im Eigenschaftenfenster unter Ereignisse >> Quittieren >> Setze Bit >> XXXXX dein Bit festlegen,

Quittierst du nun z.B. Meldung 1, dann wird das Bit, welches du der Meldung zugeordnet hast, gesetzt.

Willst du nur ein Bit für alle, dann weist du halt allen das gleiche zu.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Hilfe. Wenn ich im Eigenschaftenfenster unter Ereignisse >> Quittieren >> Setze Bit >> auswähle, wird dieses Bit "fest gesetzt". Ich bräuchte aber eine Funktion, wo dieses Bit nur solange gesetzt ist, solang ich auf die Quittiertaste drücke. Wie kann man den das realisieren? Sorry für die blöden Fragen, aber ich bin kein Programmierer.

MfG
bastler
 
Hallo
Irgendwie komm ich nicht so richtig weiter. Mit der Quitt-Taste quittiere ich die Meldung und gleichzeitig möchte ich eine Hupe abschalten, die bei jeder eingehenden Meldung los geht. Steht eine Meldung noch an, soll halt nur der Merker, der die Hupe eingeschalten hat, zurückgesetzt werden. Dafür bräuchte ich halt dieses kurze Signal, wenn auf die Quittiertaste gedrückt wird. Mit den Quittierbits wie es Manfred beschrieben hat komm ich irgendwie nicht klar. Gibt es denn keine Möglichkeit diese Taste auszuwerten?

MfG
bastler
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit der Taste wird nur bestätigt das die Meldung gelesen wurde
ACK=ACKnowledgement

Wenn diese taste betätigt wird, wird immer nur ein Bit der aktuellen Meldung gesetzt. Für die Hupe müßtet due theoretisch alle Bits einzeln abfragen.
Dies erfodert aber einiges an Arbeit.

Nun kann man ein paar mehr oder weniger schöne Sachen anwenden.

Man kann die Quittiervariablen auf 0 setzen, und jedesmal wenn ein Bit kommt, die hupe quittieren und die Quittierbits wieder löschen.
Dies funktioniert aber nicht, weil man eine Meldung nur einmal bestätigen kann, sollte die Störung also nicht weggegangen sein, kann man die Huper nicht mehr quittieren.

Hier hab ich das Verfahren der Meldungen mal beschrieben.

Eine einfache Sache wäre z.B. auf dem Störmeldebild eine extra Taste zu hinterlegen mit "Reset" oder "Hupe aus".

Je nachdem wieviele Meldungen es werden, kann man auch die Bits abfragen. Dazu müßte man mal die Anzahl der Meldungen wissen.

Ich habe immer eine extra Taste zum Löschen der bereits quittierten Meldungen, sollten diese noch anstehen. Hält man diese taste z.B. fest, werden alle noch nicht quittierte Meldungen gelöscht.
 
Also es sind max. 64 Störungen.
Was ich nicht verstanden habe, du schreibst du hast eine Taste für bereits quittierte Meldungen. Ich nutze die Meldeanzeige von WinCC flexible und da ist doch die Quittiertaste bereits integriert. Ich fürchte ich hab die ganze Problematik mit der Meldeanzeige noch nicht ganz verstanden. Ich dachte bei älteren Tasten-OP's konnte man die einzelnen Tasten (per Bereichszeiger ???)abfragen. So wollte ich es halt auch mit dem TP177B machen. Das Problem ist halt, dass ich kein Programmierer bin, und das ein oder andere nicht ganz so verstehe wie die Profis hier.

MfG
bastler
 
@God_Failed
Die Taste ist in der Meldeanzeige integriert, die geht nicht extra zu konfigurieren, auch nicht in der aktuellen Version, ich wüßte zumindest nicht wie.

Gruß bastler
 
Also es sind max. 64 Störungen.
Was ich nicht verstanden habe, du schreibst du hast eine Taste für bereits quittierte Meldungen. Ich nutze die Meldeanzeige von WinCC flexible und da ist doch die Quittiertaste bereits integriert. Ich fürchte ich hab die ganze Problematik mit der Meldeanzeige noch nicht ganz verstanden. Ich dachte bei älteren Tasten-OP's konnte man die einzelnen Tasten (per Bereichszeiger ???)abfragen. So wollte ich es halt auch mit dem TP177B machen. Das Problem ist halt, dass ich kein Programmierer bin, und das ein oder andere nicht ganz so verstehe wie die Profis hier.

MfG
bastler

Bei den alten OP's bzw bei OP's kann man über die Systemtastatur die "ACK"-Taste abfragen und zum quittieren verwenden. Dieses gibt es aber bei reinen TP's nicht. Daher eventuell der Umweg über eine extra Taste.

Man muß dieses mal aus der Sicht sehen, wie es mal von Siemens entwickelt wurde.

Wenn eine Störung kommt, wird diese am Panel bestätigt, die Meldung bekommt den Status "K" für gekommen. Jetzt kann man diese eine Meldung auf der der Focus steht quittieren, und dann die nächste. Würde man über eine taste alle Meldungen quittieren und vieleicht löschen , könnte man eventuelle ein unbeabsichtige Handlung durchführen oder man würde eine Meldung die eventuell weiter unten steht nie sehen. Normalerweis muß man jede Störmeldung einzeln quittieren, dann kann man diese auch mit den einzelnen Bits abfragen. Jetzt könnte dies unter Umständen bei bestimmten Meldungen zu viel sein, dann kann man diese in eine Quittiergruppe zusammenfassen, und bei ACK werden allen Meldungen dieser Gruppe auf einmal quittiert.

Hast Du dir mal den Tread den ich verlinkt habe durchgelesen ?
Dort steht eigentlich alles wichtige erklärt, und es ist ein Diagramm vorhanden wie der Ablauf des Meldewesens funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, AFAIK kann man in der Vorlage der Taste eine Funktion zuweisen, Bit setzen etc, wenn es das ist was Du wissen willst !
Bei Panelen, die eine echte Tastatur besitzen (z.B. MP277 Key), kann man verschiedenen Systemtasten eine Funktion zuweisen.
z.B. der ESC-Taste, den Blätter-Tasten und auch der gelben ACK-Taste.
Ich meine, die LEDs kann man auch manipulieren.

Edit: das geht schon mindestens seit WCCflex 2007

Harald
 
Zuletzt bearbeitet:
Am besten blendest du die integrierte ACK Taste aus und erstellst einen neuen Button. Mit diesem kannst du dann auch anstellen, was du willst...
 
Hallo
Ich denke ich bin ein ganzes Stück näher ans Ziel gekommen. Im NW 1-4 mache ich die Flankenauswertung der Störmeldeeingänge. Bei jeder negativen Flanke, also beim Eintreffen einer Störung wird die Hupe (DB100.dbx1.0) im NW9 angesteuert.
Bei jeder Störmeldung wird ein dazugehöriges Quittierbit beim Quittieren der Meldung gesetzt. Jetzt wollte ich die positive Flanke der Quittierbits nutzen, (ebenfalls über die Flankenauswertung NW 5,6,7,8 um die Hupe wieder zurückzusetzen. Die Quittierbits werden nach Drücken auf die Quittiertaste ordentlich gesetzt, und setzen sich zurück, wenn die Störung weg ist. Folgendes Problem hab ich aber noch.
Sobald eine Störung einläuft wird die Hupe angesteuert und direkt wieder ausgeschalten, also vor dem eigentlichen quittieren. Was mach ich denn da noch falsch? Ich denke der Fehler liegt im NW 9, wo ich die Abfragen der Flankenauswertung mache. Vielleicht findet ja von euch einer den Fehler, wäre sehr dankbar.

Code:
NW1
//Flankenauswertung EW0 
//Flankenauswertung Eingänge 0-15 für Ansteuerung Hupe/Lampe
CALL  FC   102
       IN :=EW0
       OUT:=MW42
       HM :=MW40

NW2
//Flankenauswertung EW2
//Flankenauswertung Eingänge 16-31 für Ansteuerung Hupe/Lampe 
 CALL  FC   102
       IN :=EW2
       OUT:=MW46
       HM :=MW44

NW3
//Flankenauswertung EW4 
//Flankenauswertung Eingänge 32-47 für Ansteuerung Hupe/Lampe
 CALL  FC   102
       IN :=EW4
       OUT:=MW50
       HM :=MW48

NW4
//Flankenauswertung EW6 
//Flankenauswertung Eingänge 48-63 für Ansteuerung Hupe/Lampe
 CALL  FC   102
       IN :=EW6
       OUT:=MW54
       HM :=MW52

NW5
//Rücksetzen Hupe/Lampe über Quittierbits Word 8
//Rücksetzen der Hupe/Lampe mit Quittierbits der Störungen 0-15
 CALL  FC   101
       IN :=DB100.DBW8
       Out:=MW58
       HM :=MW56

NW6
//Rücksetzen Hupe/Lampe über Quittierbits Word 10
//Rücksetzen der Hupe/Lampe mit Quittierbits der Störungen 16-31
 CALL  FC   101
       IN :=DB100.DBW10
       Out:=MW62
       HM :=MW60

NW7
//Rücksetzen Hupe/Lampe über Quittierbits Word 12
//Rücksetzen der Hupe/Lampe mit Quittierbits der Störungen 32-47
 CALL  FC   101
       IN :=DB100.DBW12
       Out:=MW66
       HM :=MW64

NW8
//Rücksetzen Hupe/Lampe über Quittierbits Word 14
//Rücksetzen der Hupe/Lampe mit Quittierbits der Störungen 48-63
 CALL  FC   101
       IN :=DB100.DBW14
       Out:=MW70
       HM :=MW68

NW9
//Ansteuerung und Rücksetzen der Hupe/Lampe
      U(    
      O(    
      L     MW    42
      L     W#16#0
      <>I   
      )     
      O(    
      L     MW    46
      L     W#16#0
      <>I   
      )     
      O(    
      L     MW    50
      L     W#16#0
      <>I   
      )     
      O(    
      L     MW    54
      L     W#16#0
      <>I   
      )     
      )     
      FP    M     10.3
      S     M     10.2
      U(    
      O(    
      L     MW    58
      L     W#16#0
      <>I   
      )     
      O(    
      L     MW    62
      L     W#16#0
      <>I   
      )     
      O(    
      L     MW     66
      L     W#16#0
      <>I   
      )     
      O(    
      L     MW    70
      L     W#16#0
      <>I   
      )     
      )     
      FP    M     10.4
      R     M     10.2
      U     M     10.2
      =     L     16.0
      U     L     16.0
      BLD   102
      =     DB30.DBX    1.0
      U     L     16.0
      U     M      1.5
      =     DB30.DBX    1.1
NW 9 hab ich noch mal in FUP als Bils angehängt. Der FC 101 und FC 102 sind von http://www.sps-forum.de/showthread.php?t=30058. Danke dafür an PN/DP.

MfG
bastler
 

Anhänge

  • Flankenauswertung.jpg
    Flankenauswertung.jpg
    76,9 KB · Aufrufe: 43
Zuviel Werbung?
-> Hier kostenlos registrieren
Sobald eine Störung einläuft wird die Hupe angesteuert und direkt wieder ausgeschalten, also vor dem eigentlichen quittieren. Was mach ich denn da noch falsch?
Hallo bastler,

an Deinem Programmcode kann ich keinen Fehler erkennen (außer daß die Flankenbildung vor dem Setzen und Rücksetzen des M10.2 überflüssig ist).
Wenn der M10.2 schon vor dem Quittieren wieder rückgesetzt wird, dann muß eines der Quittierbits vom DB100 unbeabsichtigt auf 1 gegangen sein
oder wenigstens einer dieser Merker wird woanders nochmal beschrieben: M10.2, M10.3, M10.4, MW58, MW62, MW66, MW70

Bevor Du Dich an der Fehlersuche hier festbeißt, mein Vorschlag, Dein Hupen-Konzept nochmal zu überdenken.
Ich würde die Hupe nicht durch das Quittieren einer Störmeldung abschalten sondern durch eine extra-Taste.

Die Ansteuerung einer Störungshupe ist nicht ganz so trivial wie es auf den ersten Blick aussieht. Einerseits sollte die Störungshupe nicht ewig hupen,
sondern zeitbegrenzt. Andererseits sollte die Hupe schnell ausschaltbar sein, bevor eine Störmeldung quittiert wird, damit der Bediener die Störmeldung(en)
erst in Ruhe lesen kann, bevor er sie quittiert. Und das hohe C ist, wenn die Hupe nicht immer wieder neu losbrüllt, wenn eine Störung in schneller Folge
kommt und geht.

Wenn ich eine Störungshupe an einer Anlage habe, dann löse ich die Hupensteuerung gewöhnlich so:

Ich habe einen Merker "Sammelstörung", der aus einer einfachen Oder-Wordverknüpfung aller anstehenden Störungen gebildet wird.
Ich habe einen Merker "Neustörung", der gesetzt wird, wenn eine neue bisher unquittierte Störung kommt.
Die Hupe wird vom Merker "Neustörung" und eine anschließende Zeitbegrenzung angesteuert. Die Zeit ist einstellbar von 0s bis ...

Ich habe eine rote Leuchtdrucktaste
* die Lampe leuchtet dauernd, solange irgendeine Störung ansteht (Sammelstörung und nicht Neustörung)
* die Lampe blinkt bei Neustörung
* drücken dieser Taste rücksetzt Neustörung und schaltet damit die Hupe ab
* langes drücken dieser Taste >2s schaltet die Hupe und die Lampe ein, solange gedrückt (Hupentest, Bediener-Ruf)
Das lange Drücken dieser Taste nutze ich meist auch gleich als Lampentest für alle Meldeleuchten (>0,5s Lampentest, >2s Hupe ein).

Die Funktion der Leuchtdrucktaste kann auch rein am Touchpanel realisiert werden. Die Taste sollte dann aber egal aus welchem Bild schnell
gefunden werden, möglichst maximal ein Bildwechsel. Fast immer habe ich in der rechten oberen Ecke des Touchpanels eine Uhrzeitanzeige und
eine stilisierte Anlagen-Zustandsampel rot/gelb/grün und darüber eine unsichtbare Schaltfläche, die ein Bild aufruft, wo auch diese Taste
mit drauf ist.

Das Konzept kann man verfeinern, indem man der Hupe je nach "Meldeklasse" unterschiedliche Impulsfolgen bis zu "nicht hupen" aufmoduliert.

PS:
Die Flankenerkennungs-FC101 und FC102 kann man sehr leicht für die Verarbeitung von gleich 32 Bit (DWORD) modifizieren.
Wenn die Störungsbits zur HMI und die Quittierbits als Array of Word deklariert sind, dann ist eine Word-weise Verarbeitung wegen der Symbolik
aber besser.

Harald
 
Danke Harald für deine ausführliche Erklärung. Ich dachte ich hätte es fast geschafft, und jetzt soll ich alles nochmal überdenken:shock:. Du hast mit deinen Ausführungen völlig recht, und wenn ich es richtig verstanden habe, trennst du die eigentliche Störmeldeanzeige und die Signalisierung (Hupe) programmtechnisch gesehen, komplett von einander. Das ist sicherlich die bessere Wahl, als wie ich es jetzt machen wollte.

Nun mein Problem ist
Das Problem ist halt, dass ich kein Programmierer bin, und das ein oder andere nicht ganz so verstehe wie die Profis hier.
Ich werde es mal versuchen es so zu programmieren wie du es beschrieben hast.
Hättest du eventuell ein paar Codeschnipsel, das würde mir die Sache sicherlich erleichtern. Nicht falsch verstehn, ich will kein fertiges Programm, nur eine Starthilfe, denn ich will ja die ganze Sache auch lernen.

Schönes Wochenende
bastler
 
Hättest du eventuell ein paar Codeschnipsel, das würde mir die Sache sicherlich erleichtern. Nicht falsch verstehn, ich will kein fertiges Programm, nur eine Starthilfe, denn ich will ja die ganze Sache auch lernen.
Hallo bastler,

ich habe mal aus meinen Projekten ein Beispiel zusammenkopiert und auf 64 Meldungen gekürzt. Wenn Du Glück hast, dann habe
ich nichts vergessen und das Programm ist fast fertig. Du mußt aber noch Deine Meldungen zufügen.
Zu lernen gibt es trotzdem noch genug. Vor allem, wenn Du die AWL-Netzwerke verstehen willst. Dazu sind aber überreichlich
Kommentare von mir vorhanden. Am besten kann man lernen, wenn man dem Programmablauf zuschaut, z.B. mit PLCSIM.

Das Programmbeispiel tut im wesentlichen das, was ich im Beitrag #15 beschrieben habe inklusive Lampentest und Hupetest.
Aber auch noch etwas mehr.
Zum Beispiel gibt es einen Meldefilter, mit dem man Meldungen deaktivieren kann. Nützlich, wenn man Meldungen temporär
unterdrücken will oder z.B. Reserve-Abzweige hat, wo die Sicherung ausgeschaltet ist und man diesen absichtlichen
Sicherungsfall nicht als Störung gemeldet haben will.

Das Programm ist außerdem so geschrieben, daß man auch mehrere Panele anschließen kann und trotzdem nicht auf jedem Panel
die Meldungen quittieren muß. Wird auf irgendeinem Panel eine Meldung quittiert, dann wird das den anderen Panels mitgeteilt
und die Meldungen verschwinden auf allen Panels. (WinCCflex-Stichwort: "Quittiervariable Lesen" und "Quittiervariable Schreiben")
Man kann Meldungen auch im SPS-Programm quittieren (die entsprechende "Quittiervariable Lesen" auf 1 setzen).

Die Störungshupe kommt nur bei neuen Störungen und wird mit einem extra Quittiertaster abgestellt. Der Quittiertaster ist
auch als Schaltfläche auf dem Panel vorgesehen, die das Bit DB32.DBX0.0 setzt. Das Bit wird im Programm zurückgesetzt.
Die maximale Hupzeit kann von 0 (nicht hupen), 1s bis 998s hupen und 999=unbegrenzt hupen eingestellt werden.
Wenn das Quittieren einer Meldung am Panel implizit die Hupe abstellen soll (ohne den extra-Taster), dann müßte man noch
eine pos. Flankenerkennung auf alle Bits der "Quittiervariablen Lesen" einbauen (Array OPQuit DB30.DBX16.0 bis DBX23.7)
und in den Merker M1.0 "M_Quittiert" verknüpfen.

Die Störungslampe blinkt sobald eine neue Störung kommt, solange, bis mit dem Hupe-Quittiertaster quittiert wird. Auch wenn
alle Störungen wieder gegangen sind. So sieht man von weitem, daß es eine Störung gab, auch wenn das schon lange her ist.
Sind nach dem Hupe-Quittieren noch Störungen vorhanden, dann leuchtet die Störungslampe mit Dauerlicht.

Die Störungsmerker sind die Merker M100.0 bis M107.7. An diese Merker müssen die eigenen Störungen angebunden werden.
Dazu habe ich zwei Beispiele dabei:
- einfaches Zuweisen von garantiert langen Störungen (z.B. Motorschutzschalter, Sicherungsfall)
- gespeicherte Störmeldung für möglicherweise nur ganz kurze Störungen
Solange eine gespeicherte Störmeldung nicht am Panel quittiert ist, löst Gehen und wiederKommen der Störung die Hupe
nicht erneut aus. Welche Störung wie angebunden wird, muß man für jede Störung sinnvoll entscheiden.

Das Programm nutzt zum Blinken die Taktmerker der CPU. Es geht davon aus, daß in der HW-Konfig der CPU die Taktmerker
auf MB3 eingestellt sind.

Wie die Meldungen in WinCC flexible anzulegen sind und wie das Meldefenster und 2 Meldeanzeigen einzustellen sind ist in
den Programmkommentaren beschrieben.

Ich würde noch eine Funktion "Alle Meldungen löschen" einbauen, z.B. über eine Schaltfläche am Panel, besser auf eine
Hardware-Taste oder Tastenkombination legen. Für den Fall, daß durch Tippfehler im Programm ;) oder Defekt des Panels
bzw. Kommunikationsstörungen ein Störmerker ewig gesetzt bleibt. Dazu alle Störungsmerker M100.0 bis M107.7 rücksetzen
(auf 0 schreiben).

Harald
 

Anhänge

  • Errhupe.zip
    54,7 KB · Aufrufe: 80
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachtrag

Falls Du die Flankenerkennung für "Störung neu gekommen" suchst, die steckt hier:
Code:
//Filter aktive Meldungen + Flanke Meldung "kommt"      
      L     "ErrMsg_1-16"               //alle Meldungen jetzt = 1
      L     "DB_Meldungen".Ignore[1]    //ignore=1
      INVI                              //-> ignore=0
      UW                                //-> filtern
[COLOR="Blue"]      T     #ErrMsg_akt_1               //aktive Meldungen jetzt = 1
      L     "DB_Meldungen".ErrMsg[1]    //Meldungen vorher
      INVI                              //vorher = 0
      UW                                //-> neu = 1[/COLOR]
      U     <>0
      =     #Temp_Neustoer

//AKKU1 Bits=1: Meldung "kommt" (neu)
//-> die zugehörigen "OPQuit[x].y" löschen
//-> die anderen "OPQuit[x].y" beibehalten/übernehmen
      INVI                              //-> NICHT neu = 1
      L     "DB_Meldungen".OPQuit[1]    //Quit irgendein OP
      UW                                //nicht neue beibehalten
      T     "DB_Meldungen".OPQuit[1]    //neue löschen
      T     "DB_Meldungen".ErrMsg[5]    //OPQuit zu AQuit -> alle OP

[COLOR="blue"]      L     #ErrMsg_akt_1               //aktive Meldungen jetzt
      T     "DB_Meldungen".ErrMsg[1]    //-> Meldungen vorher + OP[/COLOR]

Harald
 
Hallo Harald

Vielen Dank für deine Mühe. Ich bin leider heute noch nicht dazu gekommen, mich in dein Programm einzuarbeiten, morgen werd ich mir aber die Zeit nehmen, und da werde ich dann sehen ob ich alles so verstehe. So wie du es beschrieben hast klingt das richtig professionell, das wäre ich nie darauf gekommen. Vielen Dank nochmal.

Viele Grüße
bastler
 
Hallo Leute,

Also ich hab das im TP177B folgendermassen gelöst:

die Bitmeldungen so konfiguriert, dass sie am TP nur solange anstehen, bis sie von der SPS wider auf 0 gehen, in der "Kopfzeile" einen normalen Button eingebaut, mit dem ich ein Quittierbit in der SPS setzen und den Rest in de SPS gelöst, dann hat man auch die Möglichkeit im bearbeitungszyklus die Hupe zu Quittieren. Das Quittierbit wird am Zyklusende bzw nach bearbeiten der Störbehandlung wider zurückgesetzt.
Das ist zwar ein bisschen aufwendiger als die fertige Meldungsfunktionen des TP zu nutzen, funktioniert aber wunderbar.

sg
winnman
 
Zurück
Oben