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

Ergebnis 1 bis 6 von 6

Thema: Frage zu FB

  1. #1
    Registriert seit
    05.07.2004
    Ort
    Hamburg
    Beiträge
    105
    Danke
    139
    Erhielt 14 Danke für 12 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo und guten Tag
    Ich möchte beim fahren eines Zylinders wissen, wann keine Bewegung mehr stattfindet.
    Dann soll nach Ablauf einer gewissen Zeit die momentane Position als Nullpunkt übernommen werden.

    Meine bisherigen Ergebnisse:

    Code:
    FUNCTION_BLOCK FB 2
    TITLE =Nullpunktübernahme
    VERSION : 0.1
     
    VAR_INPUT
      Taktmerker : BOOL ; //Taktmerker der CPU
      Start : BOOL ; //Startbedingung
      Wert_Weg : REAL ; //Wegpunkt des FA's
      Multiplkator : REAL ; //Wert_Weg mal diesen Wert (besseres Rechnen)
      Zeit_OK : INT ; //Nach wieviel Sekunden Nullpunktübernahme
    END_VAR
    VAR_OUTPUT
      Weg_gut : BOOL ; //Weg kann übernommen werden
    END_VAR
    VAR
      Weg_positiv : REAL ; //Wegpunkt bei positiver Flanke
      Weg_negativ : REAL ; //Wegpunkt bei negativer Flanke
      HM_Flanke_pos : BOOL ; //Hilfsmerker positive Flanke
      HM_Flanke_neg : BOOL ; //Hilfsmerker negative Flanke
      intern_Zeit : INT ; //interne Zeit abgelaufen
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          UN    #Start; //wenn kein Nullpunkt übernommen werden soll
          R     #Weg_gut; //Rücksetzte Nullpunkt übernommen Bit
          L     0;      //  L 0 
          T     #intern_Zeit; //setze Zeit auf Null 
          SPB   ende; //Springe zum Ende
     
     
          U     #Taktmerker; //Wenn Taktmerker pos
          U     #Start;  //und Nullpunkt soll übernommen werden
          SPBN  test; //wenn nicht springe zum negativ
     
          L     #Wert_Weg; //lade aktuellen Wegpunkt
          T     #Weg_positiv; //transfer
          SPA   gut; 
    test: UN    #Taktmerker; 
          U     #Start; 
          SPBN  ende; 
          L     #Wert_Weg; 
          T     #Weg_negativ; 
          SPA   gut; 
    gut:  L     #Weg_positiv; 
          L     #Weg_negativ; 
          ==R   ; 
          SPBN  ende; 
          U     #Taktmerker; 
          FP    #HM_Flanke_pos; 
          U     #HM_Flanke_pos; 
          L     #intern_Zeit; 
          +     1; 
          T     #intern_Zeit; 
          L     #intern_Zeit; 
          L     #Zeit_OK; 
          ==I   ; 
          SPBN  ende; 
          =     #Weg_gut; 
    ende: NOP   0; 
     
     
    END_FUNCTION_BLOCK
    Die Erfassung des Weges klappt wie von mir erwünscht aber:
    Die Bearbeitung bleibt bei U #Taktmerker; stehen.
    Was mache ich da nicht richtig

    der_iwan
    Zitieren Zitieren Frage zu FB  

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

    Standard

    Code:
     U     #Taktmerker;        
    FP    #HM_Flanke_pos;       
     U     #HM_Flanke_pos;       
     L     #intern_Zeit; <-- wird immer bearbeitet, unabhängig vom VKE       
    +     1;        
    T     #intern_Zeit;        
    L     #intern_Zeit;        
    L     #Zeit_OK;        
    ==I   ;        
    SPBN  ende;        
    =     #Weg_gut;  ende: NOP   0;
    _______________________________--

  3. #3
    der_iwan ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.07.2004
    Ort
    Hamburg
    Beiträge
    105
    Danke
    139
    Erhielt 14 Danke für 12 Beiträge

    Standard

    Hallo und vielen Danl für deine Antwort, aber:
    #intern_Zeit
    bleibt immer bei 1 stehen

    der_iwan

  4. #4
    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

    Zitat Zitat von der_iwan Beitrag anzeigen
    Hallo und vielen Danl für deine Antwort, aber:
    #intern_Zeit
    bleibt immer bei 1 stehen

    der_iwan
    joah, weil:
    Code:
    *
          UN    #Start; //wenn kein Nullpunkt übernommen werden soll
          R     #Weg_gut; //Rücksetzte Nullpunkt übernommen Bit
          L     0;      //  L 0 
          T     #intern_Zeit; //setze Zeit auf Null 
          SPB   ende; //Springe zum Ende
    bei jedem aufruf #interne_Zeit auf 0 gesetzt wird... 0+1 = 1 ... das flackern bekommste gar nich mit
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    der_iwan ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.07.2004
    Ort
    Hamburg
    Beiträge
    105
    Danke
    139
    Erhielt 14 Danke für 12 Beiträge

    Standard

    Ich habe die Änderung:
    Code:
     U     #Taktmerker;        
    FP    #HM_Flanke_pos;       
     U     #HM_Flanke_pos;       
     L     #intern_Zeit; <-- wird immer bearbeitet, unabhängig vom VKE       
    +     1;        
    T     #intern_Zeit;        
    L     #intern_Zeit;        
    L     #Zeit_OK;        
    ==I   ;        
    SPBN  ende;        
    =     #Weg_gut;  ende: NOP   0;
    mal zum schauen so geändert:
    Code:
    //      U     #Taktmerker
          U     M      1.7
    //      FP    #HM_Flanke_pos
          FP    M    156.0
    //      U     #HM_Flanke_pos
          U     M    156.0
    //    L     #intern_Zeit                // <-- wird immer bearbeitet, unabhängig vom VKE       
          L     MW   234
          +     1
    //  T     #intern_Zeit
          T     MW   234
          L     #intern_Zeit
          L     #Zeit_OK
          ==I   
          SPBN  ende
          =     #Weg_gut
    Da mein Taktmerker Mx.7 ist müsste doch alle zwei Sekunden sich der Wert von #intern_zeit um 1 erhöhen, oder?
    Das macht er aber nicht, er erhöht sich rasend schnell.

    @ vierlagig
    aber er soll doch nur die 0 dahin schreiben wenn die Startbedingung nicht erfüllt ist?
    Startbedingung ist aber immer erfüllt

    der_iwan

  6. #6
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    also 1.

    wenn du eine flanke baust:

    Code:
    *
         U     #xTrigger
         FP    #xHelpFlag
    dann ist das VKE der flankenAUSWERTUNG das der flankenoperation. d.h. obigen code so weiter verwenden:

    Code:
    *
         U     #xTrigger
         FP    #xHelpFlag
         SPB   irgendwohin
    macht, dass bei positiver flanke an "#xTrigger" "irgendwohin" gesprungen wird.

    bei deinen konstrukten, zur veranschaulichung nochmal aufgeschrieben:

    Code:
    *
         U     #xTrigger
         FP    #xHelpFlag
         U     #xHelpFlag
    wird das VKE durch den flanken-hilfsmerker gebildet, dieser dient bei einer flankenauswertung aber nun mal dazu den wert von #xTrigger aus dem aktuellen zyklus für den nächsten zyklus bereitzustellen bzw. den letzten wert für den aktuellen zyklus und damit für den vergleich mit #xTrigger(neu) zur verfügung zu stellen, damit überhaupt eine flanke gebildet werden kann. soll heißen: wenn #xTrigger über mehrere zyklen true ist, dann ist es #xHelpflag auch, da es immer den aktuellen wert repräsentiert.

    und 2.

    lade und transferbefehle sind VKE-unabhängig, d.h. sie müssen übersprungen werden, wenn sie nicht ausgeführt werden sollen.

    z.B.:
    Code:
    *
         U     #xTrigger
         FP    #xHelpFlag
         SPBN  irgendwohin
         L      0
         T      #iDestination
    ermöglicht, dass die 0 nur bei einer positiven flanke an #xtrigger in #iDestination transferiert wird.
    Geändert von vierlagig (09.06.2011 um 14:55 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Frage
    Von waldy im Forum Stammtisch
    Antworten: 15
    Letzter Beitrag: 29.10.2010, 20:17
  2. frage mpi
    Von mortus im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.05.2009, 20:26
  3. Antworten: 15
    Letzter Beitrag: 09.04.2009, 20:57
  4. s7 frage
    Von maresic.s im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.08.2005, 13:59
  5. Antworten: 4
    Letzter Beitrag: 18.05.2005, 18:49

Lesezeichen

Berechtigungen

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