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

Ergebnis 1 bis 6 von 6

Thema: Timer Problem in State Maschine (AWL)

  1. #1
    Registriert seit
    24.02.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hab mir jetzt innerhalb von wenigen Wochen komplett AWL beigebracht und programmier grade eine doch sehr komplexe Steuerung mit mehreren State Maschines und vielen Timer abläufen.
    Ich muss sagen das ich anfangs etwas Assembler geschädigt war und manche abläufe in der SPS fehl interpretiert habe. Inzwischen läuft das wie am schnürchen nur mit den Timern habe ich immer wieder probleme.

    Eine Statemaschine wertet z.B. den Öldruck Sensor eines Verdichters aus. Wenn der Verdichter gestartet ist dauert es ca 5s (soviel Zeit geben wir ihm derzeit) bis der Öldruck da sein MUSS.
    Hier wird GAS Verdichtet kein ÖL. Wenn der Öldruck nicht da ist hat der Verdichter wohl ein defekt.

    State 0
    = Idle - warten auf Verdichter start, bei verdichter start zu state 1 und timer laden
    State 1 = wait - warten bis timer abgelaufen dann zu State 2, zurück springen bei "verdichter aus" zu State 0.
    State 2 = check - Verdichter läuft nun und der Öldruck muss da sein. Ist er ist nicht sprung zu State 3. Ansonsten Idlen und beim Verdichter stopp wieder in State 0 Springen.
    State 3 = FehlerMeldung liegt an und bei Service Bestätigung wieder in State 0 Springen

    Funktioniert Prima, bis auf den Timer. Der funktioniert beim ersten starten, aber beim 2ten mal bleib ich im state 1 hängen da der Timer nicht abläuft.

    nochma zum ablauf des timers:
    Wenn Verdichter gestartet wird lade ich schon im State 0 den Timer, im state 1 wird auf das ablaufen gewartet und im 2 und 3 ist er nicht mehr relevant.
    Spring ich das 2te mal in State 0 und löse Verdichter start aus läd der Timer aus irgendeinem grund nicht.
    Soll ich im State 0 vllt abfragen ob der Timer schonmal geladen wurde und ihn nur resetten?!
    Also ganz schlau werd ich daraus nicht.

    Was bewirkt den R T 1 und FR T 1 genau?
    Ist bei FR der Timer dann wie beim ersten starten und beim R einfach "zwangs-abgelaufen"??

    wär über eure hilfe sehr dankbar.


    achso ich poste mal den State 0 dazu.
    Code:
           L    #STATE_OIL                   // sprungerverteiler anfang
           SPL  err                          // error unterprogramm aufrufen
           SPA  OIL0                         // IDLE
           SPA  OIL1                         // WAIT
           SPA  OIL2                         // CHECK
           SPA  OIL3                         // FAIL
    err   :NOP  1                            // sprungverteiler ende
           SPA  OILE
    
    OIL0  :NOP  1                            // STATE 0 IDLE
           UN   E       124.0                // Abfrage ob Verdichter gestartet ist
           SPB  OILE                         // wenn nicht zum Ende der FSM springen und alles belassen
           SET
           L    1                            // Nächsten Starte Laden
           T    #STATE_OIL                   // In State Variable Laden
           SET
           R    T         1
           FR   T         1
           L    S5T#5S
           SS   T         1                  // wenn zeit abgelaufen geht Timer auf 1
           NOP  1
           NOP  1
           NOP  1
           SPA  OILE                         // Rausspringen
    Hatte da schon einiges Probiert. Deshalb steht da jetzt auch R und FR drin und 2x SET
    Zitieren Zitieren Timer Problem in State Maschine (AWL)  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    das Problem bei einem Timer (ganz generell) ist, dass er immer eine Ausschalt-Flanke mitbekommen möchte. Das kann er bei dir nicht, da er nach (ersten) Ablauf ja übersprungen wird. Du mußt den Timer außerhalb der bedingten Bearbeitung programmieren sodaß er immer mitläuft - dann gehts.

    Gruß
    Larry

  3. #3
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Wenn Du mal auf KOP/FUP umstellst und dann links in der Liste den S_SEVERZ wählst und dann F1 drückst, dann bekommst Du eine Erklärung für die Parameter. Ich denke das Hauptproblem ist, dass in Deinem Gesamtprogramm (leider nicht erkennbar) der Timer nicht die ganze Zeit bearbeitet wird, deshalb fehlen ihm wahrscheinlich die nötigen Flanken.
    Mit dem FR kenne ich mich nicht so gut aus (ich verwende den nie), aber ich schätze, dass die Flanke vom FR ausgwertet wird und er, wenn man ihn - so wie Du - auf Dauer-1 setzt, unwirksam wird.
    Gruß
    Michael

  4. #4
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Code:
           L    #STATE_OIL                   // sprungerverteiler anfang
           SPL  err                          // error unterprogramm aufrufen
           SPA  OIL0                         // IDLE
           SPA  OIL1                         // WAIT
           SPA  OIL2                         // CHECK
           SPA  OIL3                         // FAIL
    err   :NOP  1                            // sprungverteiler ende
           SPA  OILE
    
    OIL0  :NOP  1                            // STATE 0 IDLE
           UN   E       124.0                // Abfrage ob Verdichter gestartet ist
           SPB  OILE                         // wenn nicht zum Ende der FSM springen und alles belassen
           SET
     S M_TimerSteuern
           L    1                            // Nächsten Starte Laden
           T    #STATE_OIL                   // In State Variable Laden
           
           SPA  OILE                         // Rausspringen
    .
    .
    U M_TimerSteuern  //Außerhalb des Verteilers (SPL) Zeit ansteuern
    L S5T#5s
    SE T1
    U T1
    = blabla
    R  M_TimerSteuern
    

    Zeiten in Sprungverteilern ist nicht das Wahre. Du bist genau einen Zyklus im State 0. Da ja sofort State 1 eingetragen wird ( L 1 T #STATE_OIL )

    So ähnlich würd ichs machen.

    PS: im Anhang der FR-Beitrag
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg fr.jpg (275,1 KB, 23x aufgerufen)

  5. #5
    debauer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    okey danke
    Habt mir schon weiter geholfen. Zumindest fürs Verständniss.
    Werde es morgen Mittag an der Hardware Testen.

  6. #6
    debauer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es hat funktioniert
    warn klares verständniss Problem.
    Meine jetzige Lösung:

    Code:
         U    #timerstart
           L    S5T#5S
           SS   T         1
           NOP  1
           NOP  1
           NOP  1
           SET
           R    #timerstart
    
           L    #STATE_OIL                   // sprungerverteiler anfang
           SPL  err                          // error unterprogramm aufrufen
           SPA  OIL0                         // IDLE
           SPA  OIL1                         // WAIT
           SPA  OIL2                         // CHECK
           SPA  OIL3                         // FAIL
    err   :NOP  1                            // sprungverteiler ende
           SPA  OILE
    
    OIL0  :NOP  1                            // STATE 0 IDLE
           SET
           R    T         1
           UN   E       124.0                // Abfrage ob Verdichter gestartet ist
           SPB  OILE                         // wenn nicht zum Ende der FSM springen und alles belassen
           L    1                            // Nächsten Starte Laden
           T    #STATE_OIL                   // In State Variable Laden
           SET
           S    #timerstart
           SET
           SPA  OILE                         // Rausspringen
    So Funktioniert die Test FSM nun, jetzt kann ichs in die Hauptsteuerung einpflegen

Ähnliche Themen

  1. Antworten: 63
    Letzter Beitrag: 22.07.2011, 07:41
  2. problem mit timer
    Von linuxluder im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 06.11.2007, 16:41
  3. Timer Problem !!!
    Von Ma_su im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 04.04.2006, 15:12
  4. Problem mit FB, Timer und Bezeichnung
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.10.2004, 13:58
  5. Timer problem
    Von spooki01 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.07.2003, 10:49

Lesezeichen

Berechtigungen

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