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

Ergebnis 1 bis 7 von 7

Thema: Programmcide optimieren

  1. #1
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    habe mal eine frage an die Profis unter euch. Habe mir einen Baustein geschrieben, mit dem man die Quittierbits, welche bei WinCC flexible (Quittierbits lesend) und bei WinCC bei jeder Störmeldung gesetzt werden, wenn diese Quittiert wird. Also mit der ACK Taste. Wir haben einen Kunden, der möchte die Einzelquttierung dieser Systeme nutzte. Nun ist es mit bei der letzten Anlage immer wieder vorgekommen, das diese Quittiertbit gesetzt wurde und auch das Triggerbit für die jeweilige Störmeldung abgelöscht hat, aber wenn man z.B. beim wieder einsichern des Motorschutzes oder der Sicherung einen kleinen Wackelkontakte hatte. Also der Eingang nochmal ganz kurz von high auf low ging, so bekamm es das Bediengerät nicht mehr mit das die Störmeldung erneut gekommen ist. Ich könnte also das Quittierbit nicht mehr setzte. Musste also das Störmeldebit händisch zurücksetzte. Habe hier auch mal mti dem Support von Siemens gesprochen, sie rieten mir, dass ich diese Quittierbit verzögert rücksetzten soll. Also so 1 bis 2 Sekunden, nachdem das Störbit (Triggerbit für die Störung) gegangen ist. Sie konnten mir allerdings keinen Vorschlag leifern, wie dies bei ca 1000 Störmeldung am einfachsten zu realisieren ist. Nun hab ich mich mal selbst ans Werk gemacht und mir einen Baustein dafür geschrieben, der jedes einzelnen Quittierbit verzögert zurücksetzt, wenn das jeweilige Triggerbit nicht mehr vorhanden ist. Das funktioniert auch soweit ganz gut. Nur bin ich mit der Zykluszeit dieses Bauusteines nicht ganz zu frienden. Momentan braucht der Baustein für 1120 Störmeldebit ca. 7-11ms auf einer neuer 315 PN/ DP V3.2. Das ist mir noch zu Langsam. Habe alledings schon optimiert, wo ich konnte. Nun meine Frage an euch Profis. Schaut auch diesen Baustein mal an. Vielleicht seht ihr noch Optimierungsbedarf oder seht Dingen, die man anders schreiben muss um Zykluszeit zu sparen.
    Danke schon mal an Euere Hilfe.
    Angehängte Dateien Angehängte Dateien
    MfG

    Hubert

    \"Never change a running system. \"
    Zitieren Zitieren Programmcide optimieren  

  2. #2
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Hubert,

    ich kann und will mich zu später Stunde nicht in deinen Code reindenken. Ich kann dir jedoch verraten, wie es funktioniert, auch bei deinem Problem mit dem Wackler.

    Folgender SCL-Schnippsel zeigt, wie ich die Störmeldungen quittiere. Wichtig ist daß die Quittierbits im Programm zurück gesetzt werden, wenn eines der Quittierbits vorher gesetzt war und wenn die Störung beseitigt ist. Dann ist quasi alles im Urzustand. Man hat dann auch alle Meldezustands-Kombinationen in Flexible.

    Code:
    //*** Störung "SPEICHERND" und Quittierbits zurücksetzen
    IF ((STOERMELDE_DB.DX[ByteIndex+32, BitIndex] AND NOT QUITT_TAKT) OR STOERMELDE_DB.DX[ByteIndex+64, BitIndex]) AND NOT SM_INTERN THEN
       STOERMELDE_DB.DX[ByteIndex+32, BitIndex] := FALSE;
       STOERMELDE_DB.DX[ByteIndex+64, BitIndex] := FALSE;
       STOERMELDE_DB.DX[ByteIndexNormal+96, BitIndex] := FALSE;
    END_IF;
    - ab Adresse 32 stehen die QBits "SCHREIBEN"
    - ab Adresse 64 stehen die QBits "LESEN"
    - ab Adresse 96 stehen die gespeicherten Meldungen
    - QUITT_TAKT ist der Quittiertaster über Hardware
    - SM_INTERN ist das Meldeereignis, z.Bsp. ein Motorschutzschalter

    Du mußt also nur beim Quittieren die Quittierbits zurück setzen. Und natürlich erst dann, wenn ein Quittierbit gesetzt ist und wenn die Störungsursache behoben ist.

    Die freundlichen Mitarbeiter vom Support lernen das vielleicht auch noch irgendwann .

    Damit funktioniert übrigens auch die Meldegruppen-Quittierung korrekt.


    Gruß, Onkel
    Geändert von Onkel Dagobert (14.05.2013 um 23:24 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. #3
    Avatar von hubert
    hubert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo Onkel,

    genauso hab ich es ja vorher auch gemacht. Nur hatte ich das Problem.
    Sicherung löst aus. Es wird das entsprechnede Triggerbit in der SPS gesetzt und am HMI Taucht die Meldung auf.
    Nun wird die mit Hilfe der Einzelquittierung die Meldung als gesehen quittiert und gleichzeitig wird das entsprechende Quittierbit gesetzt. Sicherung hat noch immer ausgelöst. Es wird also das Triggerbit Störung zurückgesetzt. Allerdings bleibt durch das Vorrangige Setzten die Störung weiter anstehend. Nun wird die Sicherung wieder eingelegt und hier gibt sich z.B. beim einlegen der Kleine Wackel. Des Hilfkontakt melden an die SPS für z.B. 200ms OK und geht dann für ein oder mehr SPS Zyklen wieder weg bevor wer wieder OK meldet. Das Triggerbit wird kurz zurückgesetzt und gleich wieder gesetzt. Allerdings bekommt das HMI dieses kommen Ereignis die Störmeldung nicht mehr mit. Du das Zurücksetzten der Störmeldung nach OK wird auch das Triggerbit abgelöscht. Und hier liegt der Hund begraben. Darum hab ich mir das mit der Verzögerung ausgedacht. Das Eigenartige ist, die Anlagenbetreiber bekommen das ja nicht immer hin. Nur ab und zu.
    Ich habe dann als Notlösung einen Sammelquittiertaster eingepflegt, wo alle Quittierbit mal gesetzt werden. So hab ich garnantiert, das alle behoben Störungen behoben sind.
    Habe mir deinen Code auch schon angeschaut nicht schlecht. Aber ich Versuche es wenn es möglich ist solche Dinge Zentral zu machen. Könntest du dir vlt. nicht meinen Baustein anschauen. Vlt. findest du noch was, was man noch verbesser könnte.
    MfG

    Hubert

    \"Never change a running system. \"

  4. #4
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Hubert,

    Zitat Zitat von hubert Beitrag anzeigen
    .. Nun wird die mit Hilfe der Einzelquittierung die Meldung als gesehen quittiert und gleichzeitig wird das entsprechende Quittierbit gesetzt...
    So weit ok, das macht Flexible.

    Zitat Zitat von hubert Beitrag anzeigen
    .. Sicherung hat noch immer ausgelöst. Es wird also das Triggerbit Störung zurückgesetzt...
    Nein, das Triggerbit (gespeicherte Meldung) darf erst zurück gesetzt werden, wenn die Sicherung wieder drinn ist.

    Zitat Zitat von hubert Beitrag anzeigen
    .. Allerdings bleibt durch das Vorrangige Setzten die Störung weiter anstehend...
    Nur zum Verständnis, das Setzen muß im Programmablauf vor dem Rücksetzen erfolgen! Schon irgendwie "vorrangig", aber nicht wie allgemein von einem RS-Glied bekannt. Das Rücksetzen kommt im Programm nach dem Setzen, ist jedoch mit dem Setzen, bzw. mit dem Störungsereignis, verriegelt.


    Gruß, Onkel
    Geändert von Onkel Dagobert (15.05.2013 um 01:17 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  5. #5
    Avatar von hubert
    hubert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo Onkel,

    ja das ist schon soweit Richtig. Aber es ist doch so, wenn das Setzte nach dem Rücksetzten kommt, dann könnte ich mir zumindest das doppelschreiben der Störungsursache sparren. Was ich meine ist folgendes.
    Code:
    UN ST_MS // Trigger-Bit für die Störung ans Panel
    R ST_MS_QBit // Quittierubgsbit vom Panel
    
    U ST_MS_QBit // Quittierungsbit vom Panel
    R ST_MS //  // Trigger-Bit für die Störung ans Panel
    
    
    UN E_MS // Störungsursache
    S ST_MS  // Trigger-Bit für die Störung ans Panel
    Hier wird doch Sichergestellt, dass das Quittierbit vom Panel erst zurück gesetzt wird, wenn die Störungsursache behoben ist. Soll heißen, das Quittierbit vom Panel wird erst im nächsten SPS Zyklus abgelöscht.
    Oder habe ich hier was falsche verstenden?
    MfG

    Hubert

    \"Never change a running system. \"

  6. #6
    Avatar von hubert
    hubert ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo Miteinander,

    hat keinen eine Idee, wie man das noch schneller bzw. kürzer hinbekommt?
    MfG

    Hubert

    \"Never change a running system. \"

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich mache das seit 100 Jahren so:


    Code:
    FUNCTION FC 110 : VOID
    TITLE =Störmeldung
    
    AUTHOR : Ralle
    FAMILY : SYSTEM
    NAME : STM_SYS
    VERSION : 1.2
    
    
    VAR_INPUT
      Stoermeldung : BOOL ;	
      Freigabe : BOOL ;	
      Ack : BOOL ;	//Quitt Fehler
    END_VAR
    VAR_IN_OUT
      Stoerbit : BOOL ;	
      Quittierbit_OP : BOOL ;	
      Quittierbit_SPS : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =Funktion zum auswerten der Störungen
    
          UN    #Freigabe; 
          R     #Stoerbit; 
          R     #Quittierbit_OP; 
          R     #Quittierbit_SPS; 
          BEB   ; 
    NETWORK
    TITLE =Störung
    
          U(    ; 
          U(    ; 
          O     #Quittierbit_OP; 
          O     #Quittierbit_SPS; 
          )     ; 
          R     #Stoerbit; 
          U     #Stoermeldung; 
          S     #Stoerbit; 
          U     #Stoerbit; 
          )     ; 
          NOT   ; 
          UN    #Stoermeldung; 
          UN    #Quittierbit_SPS; 
          R     #Quittierbit_OP; 
    NETWORK
    TITLE =Ack
    
          O     #Ack; 
          O     ; 
          U     #Quittierbit_SPS; 
          U     #Stoerbit; 
          UN    #Stoerbit; 
          =     #Quittierbit_SPS; 
    END_FUNCTION
    Zumindest in Flexible gibt es damit keine Probleme, bei WinCC trage ich für die beiden Quittierbits,dzwei Mal die selbe Variable an.
    Man kann zentral alles quittieren (Ack) oder die Fehlermeldung einzeln quittieren über das OP.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Tänzeregelung mit PID Self Tuner optimieren
    Von Markus14054 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.02.2012, 02:07
  2. Optimieren des Regelbaustein FB 58
    Von bra_elo im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 29.07.2009, 02:27
  3. Laufzeit F Programm optimieren
    Von mitchih im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.02.2009, 07:28
  4. Beckhoff-system Latenzen optimieren
    Von Beta6 im Forum CODESYS und IEC61131
    Antworten: 14
    Letzter Beitrag: 23.10.2008, 13:34
  5. Antworten: 5
    Letzter Beitrag: 14.03.2008, 22:48

Stichworte

Lesezeichen

Berechtigungen

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