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

Results 1 to 3 of 3

Thread: Flankenauswertung in Step7

  1. #1
    Join Date
    22.06.2009
    Location
    Färöer
    Posts
    16,394
    Danke
    1,353
    Erhielt 4,826 Danke für 3,902 Beiträge

    Default


    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
    Reply With Quote Reply With Quote 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
    PN/DP's Avatar
    PN/DP is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    22.06.2009
    Location
    Färöer
    Posts
    16,394
    Danke
    1,353
    Erhielt 4,826 Danke für 3,902 Beiträge

    Default

    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|-
         +--------------+
    Reply With Quote Reply With Quote 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)

  5. #3
    PN/DP's Avatar
    PN/DP is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    22.06.2009
    Location
    Färöer
    Posts
    16,394
    Danke
    1,353
    Erhielt 4,826 Danke für 3,902 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Unterbrechungsfeste Variante für 32 Bit mit Sammelanzeige in AWL:
    Code:
    FUNCTION "P_FLANKE_D" : DWORD
    TITLE =positive Flankenerkennung 32 Bit mit Sammelanzeige
    AUTHOR : PN_DP
    VERSION : 0.1
    
    VAR_INPUT
      IN : DWORD ;   //zu untersuchendes DWord
    END_VAR
    VAR_OUTPUT
      OUTX : BOOL ;   //Sammelanzeige irgendein Bit hat eine Flanke
    END_VAR
    VAR_IN_OUT
      HM : DWORD ;   //Hilfsmerker: IN vorher
    END_VAR
    BEGIN
    NETWORK
          L     #HM;
          L     #IN;
          T     #HM;
          TAK   ;
          INVD  ;
          UD    ;
          T     #RET_VAL; //ErgebnisDword mit den Flanken-Bits
          U     <>0;
          =     #OUTX;    //Sammelanzeige irgendein Bit hat eine Flanke
          SAVE  ;         //Sammelanzeige auch an ENO
    
    END_FUNCTION
    ... und in TIA SCL:
    Code:
    FUNCTION "P_FLANKE_D" : DWord
    TITLE = positive Flankenerkennung 32 Bit mit Sammelanzeige
    { S7_Optimized_Access := 'TRUE' }
    AUTHOR : PN_DP
    VERSION : 0.1
    
       VAR_INPUT
          IN : DWord;   // zu untersuchendes DWord
       END_VAR
       VAR_OUTPUT
          OUTX : Bool;   // Sammelanzeige irgendein Bit hat eine Flanke
       END_VAR
       VAR_IN_OUT
          HM : DWord;   // Hilfsmerker: IN vorher
       END_VAR
       VAR_TEMP
          temp_IN : DWord;
          temp_OUTD : DWord;
       END_VAR
    
    BEGIN
    
        // im Ergebnis-DWord sind die Bits = 1, deren zugehöriges IN-Bit eine steigende Flanke hat
        // Sammelanzeige an OUTX und ENO: irgendein IN-Bit hat eine steigende Flanke
    
        #temp_IN := #IN;
        #temp_OUTD := #temp_IN AND NOT (#HM);  //Ermittlung positive Flanken
        #HM := #temp_IN;
    
        #P_FLANKE_D := #temp_OUTD;        //ErgebnisDword mit den Flanken-Bits
        ENO := #OUTX := #temp_OUTD <> 0;  //Sammelanzeige irgendein Bit hat eine Flanke
    
    END_FUNCTION
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.
    'Funktioniert nicht' ist keine Fehlerbeschreibung

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Similar Threads

  1. Step 5 Flankenauswertung?
    By s7king in forum Simatic
    Replies: 1
    Last Post: 08.08.2017, 10:22
  2. Flankenauswertung
    By Naruna in forum Simatic
    Replies: 10
    Last Post: 11.03.2013, 07:39
  3. Flankenauswertung
    By Ralle_1971 in forum Simatic
    Replies: 2
    Last Post: 09.11.2012, 15:54
  4. Flankenauswertung
    By Techniker1907 in forum Simatic
    Replies: 23
    Last Post: 08.11.2011, 09:26
  5. PNOZmulti - Flankenauswertung
    By Onkel Dagobert in forum Sonstige Steuerungen
    Replies: 18
    Last Post: 29.03.2006, 21:54

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •