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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Störungen gezielt loggen?

  1. #1
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits, habe mal wieder eine kleine Nuss, die es zu knacken gilt. (passend zu Weihnachten, hehe...)

    Ich werte in meinem Wago 750-841 ca. 50 digitale Störmeldungen (TRUE = Fehler) aus, die mir eine Anlage von Run in Stop setzen.

    Dazu verwende ich den Baustein ONTIME aus der OSCAT.LIB.

    Dieser schreibt die Häufigkeit und die Dauer des jeweiligen Eingangs mit, so lange der Enable-Eingang True ist/wird.

    Wie bekomme ich es nun hin, dass ich das mit dem fallenden Run-Signal der Anlage (Run = True = Anlage läuft) verknüpfe?

    Beispiel:
    Ich möchte nicht einen Not-Aus mitschreiben, der bei stehender Anlage geschlagen wird, oder einen Motorschutzschalter, der bei stehender Anlage auslöst.

    Aber wenn die Anlage läuft und ein ausgelöster Not-Aus oder eine abfallender Motorschutzschalter sorgt für einen Stop aus laufender Anlage, dann möchte ich das mitschreiben.



    Wie mache ich das, dass ich nur die für den Stop der Anlage ursächlichen Eingang so lange mitschreibe, wie er ansteht?
    Gruss

    McNugget
    Zitieren Zitieren Störungen gezielt loggen?  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    ich unterstelle mal, das Stop nicht Stop der CPU sondern Stop des Ablaufs ist ...
    In dem Fall hättest du ja einen "Merker" mit der Funktion "Anlage läuft". Diesen bräuchtest du dann m.E. nur in Verbindung mit deinem Fehler auswerten - das heißt : nur dann den Zustand mit-loggen, wenn Abschaltbedingung kommt und Anlage ist noch im "Run". Damit sperrst du dann auch automatisch jeden weiteren Auslöser ...

    Gruß
    LL

  3. #3
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Korrekt, im Moment gehe ich direkt mit dem DI der Steuerung auf den Enable Eingang von ONTIME.

    Aber der loggt nur, so lange ein Signal anliegt.

    Wie nehme ich die fallende Flanke von Run (ja klar Anlagen-Run und nicht CPU) als Auslöseereignis und behalte dann einen High Eingang am ONTIME??

    Ich stehe da etwas auf´m Schlauch...
    Gruss

    McNugget

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    ... vielleicht in etwa so :
    Code:
    if not Anlage_aktiv and Last_State_Anlage_aktiv then
       if Ereignis_1 then Merker_Ereignis_1 := true ;
       elsif Ereignis_2 then Merker_Ereignis_2 := true ;
       ... // hier stehen alle weiteren Bedingungen ...
       end_if 
    end_if ;
    Last_State_Anlage_aktiv := Anlage_aktiv ;
    
    if Anlage_aktiv then
       Merker_Ereignis_1 := false ;
       Merker_Ereignis_2 := false ;
    end_if ;
    Kannst du damit (Q'n'D) etwas anfangen ?

  5. #5
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hallo Larry, habe es in FUP gemacht.

    Dein Ansatz mit dem Merker hat mich etwas aufgeweckt. (Kopf ist wohl schon unter´m Tannenbaum.)

    Ich habe es jetzt mal so gelöst: (Siehe Anhang).

    Was denkst Du darüber?

    Ich müsste jetzt ja nur noch den Ausgang von RS_01 in jedem weiteren Netzwerk vor´s AND setzen, oder? (%IX4.13 ist die Run-Meldung der Anlage)

    Ginge das eleganter, oder ist das so ok?
    Angehängte Dateien Angehängte Dateien
    Gruss

    McNugget

  6. #6
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    ...in diesem Zusammenhang noch mal:


    Wie könnte man aus den 50 Einzelwerten für Ausfallanzahl eine Top-Ten in der Visu generieren, die sich Absteigend je nach Ausfallhäufigkeit aktualisiert?

    Das gleiche natürlich für die Ausfalldauer.

    Sehe ich das richtig, dass ich diese 50 Auswertungen besser in ein Array schreiben sollte, welches ich dann einmal nach der Spalte der Ausfallzyklen und dann nach der Gesamtdauer sortiere?

    Wie würde das in ST aussehen? kann ich die Eingänge der Steuerung in einer Schleife hochzählen lassen?

    Fragen über Fragen......
    Geändert von McNugget (23.12.2009 um 13:27 Uhr)
    Gruss

    McNugget

  7. #7
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hab´s jetzt mal so versucht und läuft nicht:

    Deklaration:
    PROGRAM Stoerlog_ST

    VAR_INPUT
    IN_1:BOOL; (*Störmeldeeingang Schliesser*)
    Reset: BOOL;
    RUN:BOOL; (*Run-Meldung der Abtriebe*)
    END_VAR

    VAR_OUTPUT
    Stoerungen: UDINT;
    Stoerdauer: TIME;

    END_VAR

    VAR
    Last_State_was_run: BOOL;
    Ontime_01:ONTIME;
    Seconds: UDINT;
    Cycles:UDINT;
    Merker_Ereignis_1: BOOL;

    END_VAR
    Anweisungsteil:
    IF NOT RUN AND Last_State_was_RUN THEN Merker_Ereignis_1 := TRUE ;

    ONTIME_01(IN:=Merker_Ereignis_1, seconds:=seconds, cycles:=cycles, rst:=reset);
    Stoerdauer:= SECOND_TO_TIME(SECONDS);


    END_IF ;


    Last_State_was_run := RUN ;

    IF RUN THEN Ontime_01.IN := FALSE ;
    END_IF ;

    IF Reset THEN Ontime_01.RST :=TRUE ;

    END_IF;
    Was ist denn so falsch daran?
    Gruss

    McNugget

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    ich beziehe mich mal auf dein Script des Beitrages #7.
    Wenn du den Aufruf der Ontime-Funktion ausserhalb des IF..THEN machst, dann sollte das funktionieren. Also in etwa so :
    Code:
    IF NOT RUN AND Last_State_was_RUN THEN Merker_Ereignis_1 := TRUE ;
    END_IF ;
    
    ONTIME_01(IN:=Merker_Ereignis_1, seconds:=seconds, cycles:=cycles, rst:=reset);
     Stoerdauer:= SECOND_TO_TIME(SECONDS);
    ... des weiteren ...
    Wenn du mit sehr vielen Meldungen und Ereignissen arbeiten möchtest, dann empfiehlt sich hier ein ARRAY - klar ...
    Ich würde hoier dann allerdings NICHT mit 50 (oder mehr) Aufrufen des Ontime arbeiten sondern mit da selber etwas zusammenbauen - so a la Fehler kommt, dann Uhrzeit merken, Fehler geht dann akt. Uhrzeit - gespeicherter Uhrzeit = Fehler-Dauer.

    Die Fehler-Zeiten könntest du hinterher z.B. mit Bubblesort (dies mal als Schlüsselwort in die Suche eingeben) auf- oder absteigend sortieren. Hierbei könntest du dann auch einen Fehler-Schlüssel mit-sortieren ...

    Komst du damit erstmal weiter ?

    Gruß
    LL

  9. #9
    Registriert seit
    11.12.2009
    Beiträge
    2.113
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Hallo,

    deine PDF ist verwirrend.

    Warum machst du es so kompliziert mit der Negativen Flanke und dem RS?

    Mach doch einfach

    Eingang_Der_Überwacht_wird (Negiert) UND
    Eingang_Anlage_Run

    Auf dem Baustein.

    Das ist aber nur eine kleine Codeverfeinerung... das mit dem Sortieren würde ich persönlich in nem Array machen, da rechnet es sich schneller.

    MfG

    Marcel

  10. #10
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen.

    @Matze: So wie Du es vorschlägst, hat es nicht mehr die Funktion, die ich bräuchte. Aber Recht hast Du, ich habe es hakelig gemacht.

    Ich muss loggen, wenn Eingang_Anlage_Run FALSE wird UND ein beliebiger Störmeldeeingang TRUE wird.

    (Sprich: welche Störmeldung führte zum Stillstand.)

    Ich weiss, dass das wie ich es im FUP gelöst habe, auch nicht optimal ist, aber es erfüllt erst mal die primitivsten Anforderungen.

    Ich bin leider immer noch hin und hergerissen zwischen FUP, mit dem man zwar vieles quick and dirty lösen kann, aber eben nicht elegant und ST, was mich noch Unmengen an Gehirnschmalz kostet.


    @Larry: Danke. Wenn das mit der ersten IF-Bedingung so liest, ist es klar.
    Ich mache es im Moment in der Tat mit über 50 Ontime-Aufrufen und weiss, dass das alles andere als schlank und effizient ist.

    Habe mir ein Array of Struct gemacht und in die Struktur schreibe ich Bezeichnung: Dauer; Fehlerhäufigkeit.

    Bubblesort habe ich mir schon mal vor einiger Zeit im WIKI angeschaut. Interessant ist es.
    Aber könnte es nicht eleganter sein, anhand der Struktur nach Spalte 2 oder 3 (je nachdem, was ich finden will) die Top-Ten, der Störungen zu generieren?

    Ich schaue mal, wie ich es mit einem selbst geschriebenem Multi-Ontime-Baustein hinbekomme.

    Oder kann ich vielleicht in eicher Schleife x-mal den Ontime-Abustein auftrufen und jeweils wieder mit neuen Parametern belegen?


    Dazu aber mal ein paar Fragen: Kann ich die physikalischen Eingänge des Wago-Controllers in einer Schleife hochzählen, um sie zu überwachen, oder geht das auch z. B. in einem Array, oder muss ich mit 55 Eingängen arbeiten?
    (Bin doch faul und will mir eintönige Vieltipperei ersparen. )

    Unglücklicherweise sitzen zwischen den Störmeldungen auch noch einige andere Sensorsignale (z. B. Anlage_Run).
    Kann ich bei einer Schleife, mit der ich hochzähle, einzelne Ziffern überspringen/ignorieren, oder muss ich erst eine neue Zuweisung ohne Lücken erstellen, bzw. nach dem Schreiben des Arrays die unwesentlichen Elemente ignorieren?
    Gruss

    McNugget

Ähnliche Themen

  1. Graph 7 gezielt Störmeldungen absetzen
    Von epy im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.06.2010, 19:11
  2. Gezielt nach Bausteinen suchen...
    Von petzi im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 17.06.2009, 13:24
  3. Aktionen auf HMI Loggen
    Von Rdata im Forum HMI
    Antworten: 4
    Letzter Beitrag: 04.03.2009, 10:06
  4. Daten Loggen
    Von thomasgull im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.08.2007, 08:43

Lesezeichen

Berechtigungen

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