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

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

Thema: Maximale Lebenssdauer eines Bit innerhalb eines 24h Zyklus messen und anzeigen lassen

  1. #1
    Registriert seit
    16.05.2014
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    wie im Titel bereits beschrieben möchte ich die maximale Lebensdauer eines "1" Signals möglichst mit geringem Programmaufwand in Erfahrung bringen.

    Beschreibung :
    Eine Altsandklappe belegt einen ini. sofern Sand über ein Band läuft,
    bei unterschiedlichen Sandsorten belegt der Ini mal länger und mal kürzer.
    Der Messzyklus sollte knapp 24h laufen, der "höchst gemessene Wert" somit immer gespeichert bleiben.

    Von der Idee her bin ich soweit, über einen Vorwärts Zähler ein Takt mit dem Signal zu verunden und den selbigen als UN dem Zähler einen Reset auf null zu geben, nur würde er ja dann das Ergebnis gleich mit platt machen. Daher würde ich eine Palette an Vergleichern dahinter setzen mit Unterschiedlichen Zählerständen um somit die Häufigkeit an Ergebnissen etwas einzuschränken.

    Nur, gibt es vllt noch eine weit aus bessere Lösung?

    Bin für Rat dankbar.

    Grüße
    Zitieren Zitieren Maximale Lebenssdauer eines Bit innerhalb eines 24h Zyklus messen und anzeigen lassen  

  2. #2
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.494
    Danke
    502
    Erhielt 1.145 Danke für 738 Beiträge

    Standard

    Es gibt eine Routine die nennt sich Bubblesort. Da findest du hier im Forum gute Beispiele. Dies scheint mir perfekt für deine Anwendung zu sein.
    Früher gab es Peitschen .... heute Terminkalender

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    "Weitaus bessere" Standard-Lösung:
    Solange das Signal 1 ist die Zeit zählen (#OB1_PREV_CYCLE aufsummieren oder 100ms-Takt oder Taktmerker oder OB35)
    Wenn Signal fallende Flanke dann Zählerstand mit bisherigem MaxWert vergleichen. Wenn größer, dann Zählerstand als neuen Maxwert übernehmen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.494
    Danke
    502
    Erhielt 1.145 Danke für 738 Beiträge

    Standard

    Ja Harald...... das natürlich viel einfacher........ (bist du nicht auf dem Forumstreffen ?)
    Früher gab es Peitschen .... heute Terminkalender

  5. #5
    Tyler ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.05.2014
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das klingt nach der perfekten Lösung, bin allerdings eher in S5 oder Roth/Iropa am programmieren, mit S7 fehlt mir der Umgang die richtigen Bausteine zu finden.
    Könntest du mir das noch einmal bitte genauer formulieren?

    Liebe Grüße
    und vielen dank schon mal im voraus.

    Grüße

  6. #6
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Du benötigst keine weiteren Bausteine, sondern musst
    nur addieren lassen und vergleichen.


    Der OB1 enthält in seiner Variablendeklaration die
    letzte Zykluszeit.
    Die summierst du auf, solange dein Sensor belegt
    ist und speicherst die Summe.
    Durch einen Vergleich mit der vorherigen gespeicherten
    Summe entscheidest du, ob der aktuell aufsummierte
    Wert grösser oder kleiner ist.

    Wenn grösser, dann den vorherigen Wert überschreiben.
    Wenn kleiner, den vorherigen Wert behalten.

    Bei Tageswechsel (Uhrzeit und Tages-Code sind auch
    im OB1 enthalten) fängst du wieder von neuem an.


    Ebenso geht es mit einem der Taktmerker, die du in
    den CPU-Eigenschaften festlegen kannst.

    Wenn dein Sensor belegt ist und dein gewählter
    Taktmerker =1 wird, mit einer Flanke dein Zählergebnis
    erhöhen.
    Anschliessend wieder der Vergleich und Ergebnis speichern
    wie oben beschrieben.


    Mit dem OB35 löst du eine zyklische Bearbeitung in festen
    Zeitintervallen aus.
    Auch hier kannst du bei jedem Aufruf aufaddieren solange
    dein Sensor belegt ist.
    Alles weitere wie oben beschrieben.


    Such dir eine Variante aus und poste dein Ergebnis. Es wird dir
    dann auch sicher geholfen !
    kind regards
    SoftMachine

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Oooch, für die paar Programmzeilen braucht man doch keinen Baustein...
    Nach der tollen Beschreibung von SoftMachine habe ich mal ein paar Varianten programmiert.
    (Das nächste mal wird aber nicht mehr vorgesagt. )


    Zunächst im OB1: OB1_PREV_CYCLE als DINT global verfügbar machen
    Code:
          L     #OB1_PREV_CYCLE             //Cycle time of previous OB1 scan (milliseconds)
          T     "diOB1_PREV_CYCLE"
          NOP   0                           //(damit das als MOVE in FUP/KOP darstellbar ist)
    Die nachfolgenden Beispiele im OB1 oder in einem vom OB1 aufgerufenen FC oder FB programmieren.

    A) Eine Variante in FUP/KOP (*) wie in Beitrag #3 vorgeschlagen:
    Code:
          U     E      0.0
          =     L     22.0
          U     L     22.0
          SPBNB _001
          L     "diAktZeitms"
          L     "diOB1_PREV_CYCLE"
          +D    
          T     "diAktZeitms"
    _001: NOP   0
          U     L     22.0
          FN    M     10.0
          =     L     22.1
          U     L     22.1
          U(    
          L     "diAktZeitms"
          L     "diMaxZeitms"
          >D    
          )     
          SPBNB _002
          L     "diAktZeitms"
          T     "diMaxZeitms"
    _002: NOP   0
          U     L     22.1
          SPBNB _003
          L     0
          T     "diAktZeitms"
    _003: NOP   0
    B) Eine Variante in FUP/KOP (*) mit mitlaufender Übernahme eines neuen MaxWertes:
    Code:
          U     E      0.0
          =     L     22.0
          U(    
          U     L     22.0
          SPBNB _004
          L     "diAktZeitms"
          L     "diOB1_PREV_CYCLE"
          +D    
          T     "diAktZeitms"
          UN    OV
          SAVE  
          CLR   
    _004: U     BIE
          )     
          U(    
          L     "diAktZeitms"
          L     "diMaxZeitms"
          >D    
          )     
          SPBNB _005
          L     "diAktZeitms"
          T     "diMaxZeitms"
    _005: NOP   0
          U     L     22.0
          NOT   
          SPBNB _006
          L     0
          T     "diAktZeitms"
    _006: NOP   0
    C) Eine reine AWL-Variante: (die gefällt mir am besten )
    Code:
          U     E      0.0                  //Initiator belegt?
          SPB   CNT                         //ja, springe zu zählen
    //nein, Initiator nicht belegt: Zeitzähler löschen
          L     0
          T     "diAktZeitms"
          SPA   CNTE                        //nichts weiter zu tun
    
    //Initiator belegt: MessZeit zählen
    CNT:  L     "diAktZeitms"
          L     "diOB1_PREV_CYCLE"
          +D    
          T     "diAktZeitms"
    //aktuelle MessZeit > bisheriger MaxWert ?
          L     "diMaxZeitms"
          >D    
          SPBN  CNTE                        //nein, nichts tun
    //ja, aktueller Zeitwert als neuer Maxwert übernehmen
          TAK                               //"diAktZeitms" in AKKU1 holen
          T     "diMaxZeitms"               //und als neuer MaxWert übernehmen
    
    CNTE: SET
    D) Und in SCL:
    Code:
        IF NOT xSignal THEN
            diAktZeitms := 0 ;
        ELSE
            diAktZeitms := diAktZeitms + diOB1_PREV_CYCLE ;
            IF diAktZeitms > diMaxZeitms THEN
                diMaxZeitms := diAktZeitms ;
            END_IF;
        END_IF;
    Symbole der Variablen:
    Code:
    diOB1_PREV_CYCLE  MD12  DINT  Dauer letzter OB1-Zyklus in ms
    diAktZeitms       MD16  DINT  Dauer der laufenden Messung in ms
    diMaxZeitms       MD20  DINT  bisheriger MaxZeitWert in ms
    Die Varianten zählen in ms, der DINT-Zähler "diAktZeitms" reicht für eine Messdauer > 24 Tage
    Zum Starten einer neuen Messreihe einfach 0 in "diMaxZeitms" schreiben.

    Zum übernehmen der FUP/KOP-Varianten die Ansicht im Editor auf AWL stellen, den Code von hier kopieren und in ein leeres Netzwerk einfügen. Dann die Ansicht auf FUP oder KOP umstellen. Voilà!

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Maximale Dauer eines Signals ermitteln  

  8. #8
    Tyler ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.05.2014
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also echt Klasse Leute
    Ich fahr gleich auf arbeit und werd dann berichten für welche der Varianten ich mich entschieden habe.

    Bin leider nur gemeiner kleiner Elektriker der niemals einen S7 Kurs bekommen hat, tipps und Kniffe kenne ich nur aus Erfahrung oder eben Büchern.

    Also vielen Dank mal bis dahin,
    Tyler
    Geändert von Tyler (17.05.2014 um 04:45 Uhr)

  9. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Aus eigener Erfahrung kann ich berichten und behaupten, ein S7 Kurs ist nicht notwendig.

    Zumindest habe ich bisher auch keinen besucht ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    wobpac (02.09.2015)

  11. #10
    Registriert seit
    13.04.2008
    Ort
    Großraum KA
    Beiträge
    963
    Danke
    52
    Erhielt 128 Danke für 112 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @ vierlagig
    so isses !!!

    peter(R)
    The difference between theory and practice in practice is bigger than
    the difference between theory and practice in theory.

  12. Folgender Benutzer sagt Danke zu peter(R) für den nützlichen Beitrag:

    wobpac (02.09.2015)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 11.08.2010, 22:09
  2. maximale grösser der HD eines Lifebook c1410
    Von maxi im Forum PC- und Netzwerktechnik
    Antworten: 1
    Letzter Beitrag: 14.01.2009, 10:54
  3. Antworten: 1
    Letzter Beitrag: 24.03.2007, 14:16
  4. Antworten: 2
    Letzter Beitrag: 03.04.2006, 07:05
  5. Problem mit Timer und Zähler innerhalb eines FC
    Von Anonymous im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 01.06.2004, 09:43

Lesezeichen

Berechtigungen

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