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

Ergebnis 1 bis 2 von 2

Thema: Flankenauswertung in Step7

  1. #1
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.202
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Frage:
    Ich will in Step7 eine Flankenauswertung für ein Eingangswort realisieren. Muß ich
    das für jedes Bit einzeln machen oder geht das auch für alle Bits gleichzeitig?
    Wenn man eine Aufgabenstellung klar in Umgangsprache ausdrücken kann,
    dann findet sich auch leicht der passende Algorithmus zur Lösung.

    positive Flanke:
    Ist ein Bit jetzt 1 und war im Zyklus vorher 0 ?
    Code:
    Positive Flanke
    Einzelbit             16 Bit auf einmal      16 Bit Beispiel
    //Flankenerkennung
    U  #Bit_jetzt         L  #Bits_jetzt         L  EW 12
    UN #Bit_vorher        L  #Bits_vorher        L  MW 12
                          INVI                   INVI
                          UW                     UW
    =  #Flanke_Pos        T  #Flanken_Pos        T  MW 14
    //jetzt-Zustand für nächsten Zyklus merken
    U  #Bit_jetzt         L  #Bits_jetzt         L  EW 12
    =  #Bit_vorher        T  #Bits_vorher        T  MW 12
    negative Flanke:
    Ist ein Bit jetzt 0 und war im Zyklus vorher 1 ?
    Code:
    Negative Flanke
    Einzelbit             16 Bit auf einmal      16 Bit Beispiel
    //Flankenerkennung
    UN #Bit_jetzt         L  #Bits_jetzt         L  EW 16
                          INVI                   INVI
    U  #Bit_vorher        L  #Bits_vorher        L  MW 16
                          UW                     UW
    =  #Flanke_Neg        T  #Flanken_Neg        T  MW 18
    //jetzt-Zustand für nächsten Zyklus merken
    U  #Bit_jetzt         L  #Bits_jetzt         L  EW 16
    =  #Bit_vorher        T  #Bits_vorher        T  MW 16
    Für Einzelbits gibt es die speziellen Operationen FP und FN, die machen das genau so,
    inklusive merken des Zustands "vorher". Deshalb benötigen diese Operationen einen
    Hilfsmerker, der den Zustand "Bit_vorher" speichert.
    Code:
    Positive Flanke       Negative Flanke
    U  #Bit_jetzt         U  #Bit_jetzt
    FP #Bit_vorher        FN #Bit_vorher
    =  #Flanke_Pos        =  #Flanke_Neg
    • INVI negiert die unteren 16 Bits im AKKU1 ("dreht" alle Bits um)
    • einen Befehl "LN Word" (Lade Not Word) analog "UN Bit" gibt es nicht,
      als Ersatz dafür nimmt man "L Word" und anschließend "INVI"
    • UW verknüpft die unteren 16 Bits in AKKU1 mit den unteren 16 Bits im AKKU2 "UND".
      Das "UND"-Verknüpungsergebnis für jedes Bit liegt danach in den unteren 16 Bits im AKKU1.
    • für 32 Bit auf einmal sind die Operationen INVI und UW durch INVD und UD zu ersetzen


    Gruß
    PN/DP
    Zitieren Zitieren Flankenauswertung in Step7  

  2. Folgende 4 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Kotonaru (17.01.2013),nutellahase (08.05.2014),snowkopp (19.09.2009),Thommi1969 (09.09.2010)

  3. #2
    Avatar von PN/DP
    PN/DP ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.202
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja, das kann man auch in FUP programmieren. Das produziert aber viel zusätzlichen
    Code für die FUP-Darstellbarkeit, wenn es in 1 Netzwerk passen soll.
    Man kann den Code natürlich auch auf 3 Netzwerke aufteilen.
    (wegen der Typprüfung INT <> WORD wird hier INVI durch XOW ersetzt)

    Code:
    positive Flankenerkennung 16 Bit
              +--------+
              | WXOR_W |
          ...-|EN      |
              |        |
         MW12-|IN1  OUT|-#Temp_Word   +--------+
              |        |              | WAND_W |
    W#16#FFFF-|IN2  ENO|--------------|EN      |
              +--------+              |        |
                                 EW12-|IN1  OUT|-MW14         +--------+
                                      |        |              |  MOVE  |
                           #Temp_Word-|IN2  ENO|--------------|EN   OUT|-MW12
                                      +--------+              |        |
                                                         EW12-|IN   ENO|-
                                                              +--------+
    Code:
    positive Flankenerkennung 16 Bit, etwas kürzer
              +--------+              +--------+
       M0.1   |   &    |              | WXOR_W |
     "IMMER1"-|        |-+------------|EN      |
              +--------+ |            |        |
                         |       MW12-|IN1  OUT|-#Temp_Word
                         |            |        |
                         |  W#16#FFFF-|IN2  ENO|-
                         |            +--------+
                         |
                         |            +--------+
                         |            | WAND_W |
                         +------------|EN      |
                         |            |        |
                         |       EW12-|IN1  OUT|-MW14
                         |            |        |
                         | #Temp_Word-|IN2  ENO|-
                         |            +--------+
                         |
                         |            +--------+
                         |            |  MOVE  |
                         +------------|EN   OUT|-MW12
                                      |        |
                                 EW12-|IN   ENO|-
                                      +--------+
    Code:
    negative Flankenerkennung 16 Bit
              +--------+
              | WXOR_W |
          ...-|EN      |
              |        |
         EW16-|IN1  OUT|-#Temp_Word   +--------+
              |        |              | WAND_W |
    W#16#FFFF-|IN2  ENO|--------------|EN      |
              +--------+              |        |
                           #Temp_Word-|IN1  OUT|-MW18         +--------+
                                      |        |              |  MOVE  |
                                 MW16-|IN2  ENO|--------------|EN   OUT|-MW16
                                      +--------+              |        |
                                                         EW16-|IN   ENO|-
                                                              +--------+
    Code:
    negative Flankenerkennung 16 Bit, etwas kürzer
              +--------+              +--------+
       M0.1   |   &    |              | WXOR_W |
     "IMMER1"-|        |-+------------|EN      |
              +--------+ |            |        |
                         |       MW12-|IN1  OUT|-#Temp_Word
                         |            |        |
                         |  W#16#FFFF-|IN2  ENO|-
                         |            +--------+
                         |
                         |            +--------+
                         |            | WAND_W |
                         +------------|EN      |
                         |            |        |
                         |       EW12-|IN1  OUT|-MW14
                         |            |        |
                         | #Temp_Word-|IN2  ENO|-
                         |            +--------+
                         |
                         |            +--------+
                         |            |  MOVE  |
                         +------------|EN   OUT|-MW12
                                      |        |
                                 EW12-|IN   ENO|-
                                      +--------+
    Schöner und kompakter sieht die Darstellung in FUP aus, wenn man für die Flankenerkennung
    extra FC schreibt.

    FC101 für positive Flankenerkennung 16 Bit
    Code:
    FUNCTION "P_FLANKE_W" : VOID
    TITLE =positive Flankenerkennung 16 Bit
    AUTHOR : PN_DP
    VERSION : 0.1
    
    VAR_INPUT
      IN : WORD ;   //zu untersuchendes Word
    END_VAR
    VAR_OUTPUT
      OUT : WORD ;  //Ergebnisword mit den Flanken-Bits
    END_VAR
    VAR_IN_OUT
      HM : WORD ;   //Hilfsmerker: IN vorher
    END_VAR
    BEGIN
    NETWORK
          L     #IN; 
          L     #HM; 
          INVI  ; 
          UW    ; 
          T     #OUT; 
    
          L     #IN; 
          T     #HM; 
    END_FUNCTION
    Code:
    positive Flankenerkennung 16 Bit mit FC101 in FUP
         +--------------+
         |    FC101     |
         | "P_FLANKE_W" |
     ...-|EN            |
         |              |
    EW12-|IN         OUT|-MW14
         |              |
    MW12-|HM         ENO|-
         +--------------+
    FC102 für negative Flankenerkennung 16 Bit
    Code:
    FUNCTION "N_FLANKE_W" : VOID
    TITLE =negative Flankenerkennung 16 Bit
    AUTHOR : PN_DP
    VERSION : 0.1
    
    VAR_INPUT
      IN : WORD ;   //zu untersuchendes Word
    END_VAR
    VAR_OUTPUT
      OUT : WORD ;  //Ergebnisword mit den Flanken-Bits
    END_VAR
    VAR_IN_OUT
      HM : WORD ;   //Hilfsmerker: IN vorher
    END_VAR
    BEGIN
    NETWORK
          L     #IN; 
          INVI  ; 
          L     #HM; 
          UW    ; 
          T     #OUT; 
    
          L     #IN; 
          T     #HM; 
    END_FUNCTION
    Code:
    negative Flankenerkennung 16 Bit mit FC102 in FUP
         +--------------+
         |    FC102     |
         | "N_FLANKE_W" |
     ...-|EN            |
         |              |
    EW16-|IN         OUT|-MW18
         |              |
    MW16-|HM         ENO|-
         +--------------+
    Zitieren Zitieren Gibt es die 16-Bit-Flankenerkennung auch in FUP ?  

  4. Folgende 6 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    friendo (30.06.2015),nutellahase (08.05.2014),Prox (04.12.2010),snowkopp (19.09.2009),Thommi1969 (09.09.2010),Topse (12.01.2010)

Ähnliche Themen

  1. Sprungfunktionen und Flankenauswertung
    Von thomasgull im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 09.05.2010, 15:26
  2. Flankenauswertung wortweise
    Von pinolino im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 13.07.2009, 12:40
  3. Flankenauswertung in AWL
    Von NW-Trader im Forum Programmierstrategien
    Antworten: 14
    Letzter Beitrag: 06.10.2008, 13:33
  4. Flankenauswertung mit Graph
    Von Mujo im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.09.2007, 18:57
  5. PNOZmulti - Flankenauswertung
    Von Onkel Dagobert im Forum Sonstige Steuerungen
    Antworten: 18
    Letzter Beitrag: 29.03.2006, 21:54

Lesezeichen

Berechtigungen

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