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

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

Thema: Negative Flanke funktioniert nicht in FC ?

  1. #1
    Registriert seit
    18.04.2005
    Ort
    Fast an der Schweiz
    Beiträge
    856
    Danke
    208
    Erhielt 108 Danke für 76 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich habe mir einen FC gemacht, der intern bei einem fallenden signal ein Integer hochzählen soll.
    Der FC wird ca 100x aufgerufen. Die Daten für den FC übergebe ich via pointer und teilweise direkt.
    An und für sich funktioniert mein FC aber der Counter zählt permanent mit. Ich bin momentan leider
    am ende meines verständnisses ich habe den quellcode mal angeklemmt.
    Das problem entsteht im Netzwerk "Countup"
    Vermutlich lässt sich das im FC gar nicht realisieren.
    Das Signal "IL_ITEM" ist der ausschlaggebende punkt, ist das auf false soll der counter einen hochzählen.

    Code:
    FUNCTION "FC_IL" : VOID
    TITLE =
    { S7_language := '9(2) Englisch (Großbritannien)  03.11.2011  16:17:49' }
    VERSION : 0.1
    
    
    VAR_INPUT
      IL_ITEM : BOOL ;    //1=interlock OK
      BR_OFF : BOOL ;    //bridge off
    END_VAR
    VAR_IN_OUT
      IL_NO : POINTER ;    //Startadress of interlock db/bit
      BR_SIGNAL : BOOL ;    //Interlock bridget signal
      COUNTUP : INT ;    //Alarmcounter
    END_VAR
    VAR_TEMP
      DB_NR : WORD ;    //DB Nummer
      ADDR : DWORD ;    //DB.ADRR Nummer
      IL_INACTIVE : BOOL ;    
      IL_OK : BOOL ;    
      FLANK : BOOL ;    
      VALUE : WORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Pointer Read
          L     P##IL_NO; 
          LAR1  ; 
          L     W [AR1,P#0.0]; 
          T     #DB_NR; 
    
          AUF   DB [#DB_NR]; 
    
          L     D [AR1,P#2.0]; 
          T     #ADDR; 
    
          LAR1  ; 
          U      [AR1,P#1.1]; 
          =     #IL_INACTIVE; 
    
          U      [AR1,P#1.3]; 
          =     #FLANK; 
    
          L     W [AR1,P#0.0]; 
          T     #VALUE; 
    NETWORK
    TITLE =delete Bridged signal
    
          U     #BR_OFF; 
          R     #IL_INACTIVE; 
          R     #BR_SIGNAL; 
    NETWORK
    TITLE =
    
          O     #IL_ITEM; 
          O     #IL_INACTIVE; 
          =     #IL_OK; 
    NETWORK
    TITLE =
    
          U     #IL_INACTIVE; 
          S     #BR_SIGNAL; 
    NETWORK
    TITLE =Countup
    //#IL_OK
          U     #IL_OK; //<- der hier zählt ständig hoch soll aber nur bei fallender flanke zählen
          FN    #FLANK; 
          SPBNB _001; 
          L     1; 
          L     #COUNTUP; 
          +I    ; 
          T     #COUNTUP; 
    _001: NOP   0; 
    NETWORK
    TITLE =Reset Counter
    
          U(    ; 
          L     #COUNTUP; 
          L     32000; 
          >I    ; 
          )     ; 
          SPBNB _002; 
          L     0; 
          T     #COUNTUP; 
    _002: NOP   0; 
    NETWORK
    TITLE =
    
    //Schreibe Adressbereiche
    
          L     P##IL_NO; 
          LAR1  ; 
          L     W [AR1,P#0.0]; 
          T     #DB_NR; 
    
          AUF   DB [#DB_NR]; 
    
          L     D [AR1,P#2.0]; 
          T     #ADDR; 
    
          LAR1  ; 
          U     #IL_OK; 
          =      [AR1,P#1.0]; 
    
          U     #IL_INACTIVE; 
          UN    #IL_ITEM; 
          =      [AR1,P#1.2]; 
    
          U     #IL_INACTIVE; 
          =      [AR1,P#1.1]; 
    
          U     #FLANK; 
          =      [AR1,P#1.3]; 
    
          SET   ; 
          R      [AR1,P#0.0]; 
          R      [AR1,P#0.1]; 
          R      [AR1,P#0.2]; 
          R      [AR1,P#0.3]; 
          R      [AR1,P#0.4]; 
          R      [AR1,P#0.5]; 
          R      [AR1,P#0.6]; 
          R      [AR1,P#0.7]; 
          R      [AR1,P#1.4]; 
          R      [AR1,P#1.5]; 
          R      [AR1,P#1.6]; 
          R      [AR1,P#1.7]; 
    END_FUNCTION
    Code:
     RTFM ! Read The F..ing Manual
    Arbeitet mit : Step7 V5.5 SPx / WinCC Flex 2008 SPx / Intouch / Winmod /TIA V14 (abgestürzt...Zitat der Hotline : "Sie dürfen nicht so viel rumdrücken....." TIA, so isses halt)

    ║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
    1334566890111
    Zitieren Zitieren Negative Flanke funktioniert nicht in FC ?  

  2. #2
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Zitat Zitat von Waelder Beitrag anzeigen
    Das Signal "IL_ITEM" ist der ausschlaggebende punkt, ist das auf false soll der counter einen hochzählen.

    Code:
    //#IL_OK
          U     #IL_OK; //<- der hier zählt ständig hoch soll aber nur bei fallender flanke zählen
          FN    #FLANK; 
          SPBNB _001; 
          L     1; 
          L     #COUNTUP; 
          +I    ; 
          T     #COUNTUP; 
    _001: NOP   0; 
    Das Bit FN #FLANK; -ist das eine temporäre Variable?

    Wenn ja, solltest Du aus dem FC einen FB machen und das Ding als STATISCHE Variable definieren.
    Das Grauen lauert in der Zwischenablage !!

  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

    Ich würde an Deiner Stelle ausprobieren, was passiert, wenn Du #FLANK zu einem INOUT machst und direkt beschaltest.
    Gruß
    Michael

  4. Folgender Benutzer sagt Danke zu M-Ott für den nützlichen Beitrag:

    Waelder (11.11.2011)

  5. #4
    Avatar von Waelder
    Waelder ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.04.2005
    Ort
    Fast an der Schweiz
    Beiträge
    856
    Danke
    208
    Erhielt 108 Danke für 76 Beiträge

    Standard

    Danke Dir schonmal vorab aber meines wissens habe ich mir die Variable via Pointer aus einem Integer aus einem DB gezogen langt das nicht ? siehe mein code

    Code:
    VAR_INPUT
      IL_ITEM : BOOL ;    //1=interlock OK
      BR_OFF : BOOL ;    //bridge off
    END_VAR
    VAR_IN_OUT
      IL_NO : POINTER ;    //Startadress of interlock db/bit
      BR_SIGNAL : BOOL ;    //Interlock bridget signal
      COUNTUP : INT ;    //Alarmcounter
    END_VAR
    VAR_TEMP
      DB_NR : WORD ;    //DB Nummer
      ADDR : DWORD ;    //DB.ADRR Nummer
      IL_INACTIVE : BOOL ;    
      IL_OK : BOOL ;    
      FLANK : BOOL ;    
      VALUE : WORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Pointer Read
          L     P##IL_NO; 
          LAR1  ; 
          L     W [AR1,P#0.0]; 
          T     #DB_NR; 
    
          AUF   DB [#DB_NR]; 
    
          L     D [AR1,P#2.0]; 
          T     #ADDR; 
    
          LAR1  ; 
          U      [AR1,P#1.1]; 
          =     #IL_INACTIVE; 
    
          U      [AR1,P#1.3]; 
          =     #FLANK; 
    
          L     W [AR1,P#0.0]; 
          T     #VALUE;
    Code:
     RTFM ! Read The F..ing Manual
    Arbeitet mit : Step7 V5.5 SPx / WinCC Flex 2008 SPx / Intouch / Winmod /TIA V14 (abgestürzt...Zitat der Hotline : "Sie dürfen nicht so viel rumdrücken....." TIA, so isses halt)

    ║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
    1334566890111

  6. #5
    Registriert seit
    26.05.2009
    Beiträge
    541
    Danke
    35
    Erhielt 78 Danke für 69 Beiträge

    Standard

    Aber IL_OK ist ne temporäre Variable.

    Das mit den temporären Variablen ist so eine Sache.
    Da ist man sich nie sicher ob sie 0 oder 1 sind.

    Vielleicht klappt das mit deinem Pointer auch nicht.
    Das sieht man aber nicht.

    Gruß wolder

    Edit: übersehen. Die beschreibst IL_OK bevor du sie abfragst. Versuch das mal mit nem FB und leg die Flanke in den statischen Bereich.
    Geändert von wolder (10.11.2011 um 16:24 Uhr)
    Wenn du denkst du denkst, dann denkst du nur, dass du denkst, denn beim Denken der Gedanken, kommt dir der Gedanke, dass das Denken der Gedanken ein gedankenloses Denken ist

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Was übergibst du denn da an den Pointer ?
    Das müßte, so wie ich es sehe, ja mindestens ein Wort sein ...?
    Ich muss allerdings auch gestehen, dass ich diese Vorgehensweise für "ein wenig befremdlich" halte ...

    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Waelder (10.11.2011)

  9. #7
    Avatar von Waelder
    Waelder ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.04.2005
    Ort
    Fast an der Schweiz
    Beiträge
    856
    Danke
    208
    Erhielt 108 Danke für 76 Beiträge

    Standard

    Befremdlich klaro geb ich zu . .. nun ja ich mach nicht so viel mit Pointers.
    Der Baustein erfüllt(e) seinen Zweck voll und ganz bis dahin aber der Zähler wurde nun neu eingebaut und nervt mich nun halt.

    Ja richtig ein Wort lese ich ein. Ich benutze dann die Bits im Wort um zu schalten usw. Die ganzen Resets
    am ende sollen nur vermeiden, dass ein falscher wert angezeigt wird.

    Er soll bei einem fallenden signal am Eingang +1 hochzählen an einer anderen stelle im Programm wird das ausgewertet ob sich der wert nach oben ändert und dann eine meldung ausgegeben.
    Anderst müsste ich ca 100 Signale mit negativen Flanken auswerten und auf "oder" schalten das wäre mir dann zu blöd.
    Die "Bitchen" sind halt leider nicht nebeneinander.
    Code:
     RTFM ! Read The F..ing Manual
    Arbeitet mit : Step7 V5.5 SPx / WinCC Flex 2008 SPx / Intouch / Winmod /TIA V14 (abgestürzt...Zitat der Hotline : "Sie dürfen nicht so viel rumdrücken....." TIA, so isses halt)

    ║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
    1334566890111

  10. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Waelder Beitrag anzeigen
    Er soll bei einem fallenden signal am Eingang +1 hochzählen an einer anderen stelle im Programm wird das ausgewertet ob sich der wert nach oben ändert und dann eine meldung ausgegeben.
    Anderst müsste ich ca 100 Signale mit negativen Flanken auswerten und auf "oder" schalten das wäre mir dann zu blöd.
    Die "Bitchen" sind halt leider nicht nebeneinander.
    Sorry ... das verstehe ich nicht.
    Erklär mal genauer. Im Moment sehe ich da nicht DEN Vorteil zu dem von z.B. M-Ott vorgeschlagenen Weg ...

    Gruß
    Larry

  11. #9
    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

    Ganz schön viel Aufwand für ein einziges Bit, da gibt es auch andere Möglichkeiten.
    Liegen die Bits in regelmäßigen Abständen oder unregelmäßig verteilt?
    Gruß
    Michael

  12. #10
    Avatar von Waelder
    Waelder ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.04.2005
    Ort
    Fast an der Schweiz
    Beiträge
    856
    Danke
    208
    Erhielt 108 Danke für 76 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Alle Bits regelmässig, ich werd meinen FC wohl umbauen und dieses Bit direkt einlegen...
    Anbei mal die struktur meines DBs, der ist mit UDTs aufgebaut und enthält ca
    100 mal diese informationen.
    Ich lese dann immer das erste bit via pointer ein

    Der Aufbau des Wortes ist wie folgt :

    Code:
    TYPE "IL_UDT"
    { S7_language := '9(2) Englisch (Großbritannien)  13.10.2011  18:40:06' }
    VERSION : 0.1
    
    
      STRUCT     
       IL_NO : BOOL ;    //Interlock number
       RES7 : BOOL ;    
       RES8 : BOOL ;    
       RES9 : BOOL ;    
       RES10 : BOOL ;    
       RES11 : BOOL ;    
       RES12 : BOOL ;    
       RES13 : BOOL ;    
       ON : BOOL ;    //IL OK
       INAKT : BOOL ;    //IL inactive
       BR_OK : BOOL ;    //IL bridged and not OK
       FL : BOOL ;    //Internal Bit Flanke
       RES2 : BOOL ;    
       RES3 : BOOL ;    
       RES4 : BOOL ;    
       RES5 : BOOL ;    
      END_STRUCT ;    
    END_TYPE
    Code:
     RTFM ! Read The F..ing Manual
    Arbeitet mit : Step7 V5.5 SPx / WinCC Flex 2008 SPx / Intouch / Winmod /TIA V14 (abgestürzt...Zitat der Hotline : "Sie dürfen nicht so viel rumdrücken....." TIA, so isses halt)

    ║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
    1334566890111
    Zitieren Zitieren Ok ?  

Ähnliche Themen

  1. Negative Flankenauswertung funktioniert nicht
    Von Flacla im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 10.11.2011, 20:08
  2. TwinCat ST - negative Flanke
    Von Gerri im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.02.2011, 16:18
  3. zweite Negative Flanke schaltet nicht durch?
    Von Hans.S im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 30.11.2009, 09:07
  4. Positive Flanke von LOGO! funktioniert nicht
    Von godi im Forum Sonstige Steuerungen
    Antworten: 9
    Letzter Beitrag: 12.10.2007, 10:09
  5. Negative Flanke, wie projektieren?
    Von Anonymous im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 17.01.2005, 16:16

Lesezeichen

Berechtigungen

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