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

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 60

Thema: Zähler in SCL

  1. #1
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    mein Zähler in SCL funktioniert nur, wenn ich "TAKT" als Eingangsparameter deklariere. Sobald ich diesen als Statische Variable deklariere, zählt der Zähler nicht mehr! Warum ist das so; wo liegt mein Fehler?

    Folgende Variablen habe ich deklariert:


    VAR_INPUT
    Eingang: BOOL;
    SET : BOOL;
    RESET : BOOL;
    END_VAR

    VAR_OUTPUT
    Dual_Zaehlwert : WORD;
    BCD_Zaehlwert : WORD;
    Ausgang : BOOL;
    END_VAR

    VAR
    TAKT : BOOL;
    fm : BOOL;
    END_VAR

    Code:
    // Neg. Flanke
     
    IF NOT Eingang AND fm THEN
       TAKT := 1;
    END_IF;
    fm := Eingang;
     
    // Aufwärtszähler
     
    BCD_Zaehlwert:= S_CU (C_NO := Z1,
                          CU   := TAKT,
                          S    := SET,
                          PV   := 3,
                          R    := RESET,
                          CV   := Dual_Zaehlwert,
                          Q    := Ausgang);
    Vielen Dank für eine Erklärung...
    LG
    spirit
    Zitieren Zitieren Zähler in SCL  

  2. #2
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard

    Weil dein Takt keine Flanke ist, sondern du den fix auf "1" Schreibst, wenn die Bedingung "NOT Eingang AND fm" mal erfüllt wurde.
    Wenn du Takt als IN-Parameter hast schreibst, dann wird "Takt" dadurch wieder "0".

    a) Für eine Flanke brauchst du kein IF ... THEN sonder nur "Takt := NOT Eingang AND fm ;"
    b) Für einen S5-Zähler wie du ihn hier verwendest, bräuchtest du überhaupt keine Flanke, das mach der Zähler schon selbst.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  3. #3
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von MSB Beitrag anzeigen
    Weil dein Takt keine Flanke ist, sondern du den fix auf "1" Schreibst, wenn die Bedingung "NOT Eingang AND fm" mal erfüllt wurde.
    Wenn du Takt als IN-Parameter hast schreibst, dann wird "Takt" dadurch wieder "0".

    Mfg
    Manuel
    Vielen Dank für deine Erklärungen Manuel!

    1) Das heißt also, dass in diesem Fall TAKT nach einmaliger Erfüllung immer auf 1 bleiben würde, wenn er als Temp-Variable deklariert wurde?

    2) Nur, warum wird TAKT dann wieder 0, wenn er als IN-Parameter deklariert ist - ist da das Speicherverahlten anders?
    LG
    spirit

  4. #4
    Registriert seit
    09.08.2006
    Beiträge
    3.642
    Danke
    912
    Erhielt 661 Danke für 543 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    1) Das heißt also, dass in diesem Fall TAKT nach einmaliger Erfüllung immer auf 1 bleiben würde, wenn er als Temp-Variable deklariert wurde?
    Code:
    VAR 
    TAKT : BOOL;
    fm : BOOL; 
    END_VAR
    TAKT ist keine temporäre sondern eine (lokale) statische Variable.
    Wenn TAKT temporär wäre (was keine gute Idee ist), wäre der Inhalt undefiniert wenn Du die Avriable nicht in jedem Bausteinaufruf vor der ersten Verwendung beschreiben würdest.

    Gruß.

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    2) Nur, warum wird TAKT dann wieder 0, wenn er als IN-Parameter deklariert ist - ist da das Speicherverahlten anders?
    MSB meint hier, dass du bei deiner S_CU-Beschaltung an Stelle deiner Variablen "Takt" auch gleich die IN-Variable "Eingang" verwenden kannst / solltest ...

    Gruß
    Larry

  6. #6
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von ducati Beitrag anzeigen
    TAKT ist keine temporäre sondern eine (lokale) statische Variable.
    Gruß.
    Ja Danke ducati... war ein Schreibfehler. In meinem Ausgangspost #1 hatte ich ja geschrieben, dass es eine Statische Variable ist.

    Zitat Zitat von MSB Beitrag anzeigen
    Weil dein Takt keine Flanke ist, sondern du den fix auf "1" Schreibst, wenn die Bedingung "NOT Eingang AND fm" mal erfüllt wurde.
    Wenn du Takt als IN-Parameter hast schreibst, dann wird "Takt" dadurch wieder "0".

    Mfg
    Manuel
    1) Das heißt also, dass in diesem Fall TAKT nach einmaliger Erfüllung immer auf 1 bleibt, wenn er als Temp-Variable deklariert wurde?

    2) Nur, warum wird TAKT dann wieder 0, wenn er als IN-Parameter deklariert ist - ist da das Speicherverahlten anders?
    LG
    spirit

  7. #7
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    MSB meint hier, dass du bei deiner S_CU-Beschaltung an Stelle deiner Variablen "Takt" auch gleich die IN-Variable "Eingang" verwenden kannst / solltest ...

    Gruß
    Larry
    Danke Larry,

    mir ist halt nur nicht klar, warum es funktioniert, wenn ich TAKT als IN-Variable deklariere und es nicht funktioniert, wenn ich TAKT als Statische Variable deklariere.

    Durch meinen Fehler, TAKT fest auf 1 zu schreiben, müssten doch die Auswirkungen bei beiden Variablen die gleichen sein, oder nicht?
    LG
    spirit

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Ähh ...

    was wolltest du noch mit diesem Doppelpost bewirken ?

    Warum legst du "Eingang" nicht auf den Zähler (an Stelle von Takt) ? Welchen Grund hat das ?

    Wenn "Takt" die IN-variable wäre (das Speicherverhalten ist hier nicht anders wie bei einer STAT-Variablen), dann hättest du ja (vermutlich) einen Eingang (o.ä.) daran geschaltet - und der ändert seinen Zustand ja auch vielleicht wieder. Sonst wäre das Zählen eventuell Unsinn (wenn das zu zählende Signal permanent ist).

    Schreib doch vielleicht mal etwas mehr zu deinem Vorhaben ...

    Gruß
    Larry

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    1) Das heißt also, dass in diesem Fall TAKT nach einmaliger Erfüllung immer auf 1 bleibt, wenn er als Temp-Variable deklariert wurde?
    Als Temp-Var ist Takt dann einfach völlig undefiniert. Er könnte immer auf 1 bleiben, wenn kein anderer Baustein deines Programmes zufällig Daten in diesem für Temp-Variablen genutzten Speicherbereich ablegt, kann aber auch sein, dass ab und an genau das passiert und Takt dann wieder mal 0 ist. Also so nicht.
    Zitat Zitat von spirit Beitrag anzeigen
    2) Nur, warum wird TAKT dann wieder 0, wenn er als IN-Parameter deklariert ist - ist da das Speicherverahlten anders?
    Immer wenn der Baustein im Zyklus durchlaufen wird, wird die Eingangsvariable wieder eingelesen, liegt also außen eine Variable an, die 0 ist, ist Takt auch wieder 0. Du kannst zwar intern Takt beschreiben, aber das wird natürlich nicht nach "außen" weitergereicht, denn darum ist es ja eine INPUT.

    PS. Ich würde mir lieber mal die Zähler aus der IEC-Library ansehen, die fest eingebauten Zähler der SPS machen in einem FB eigentlich nicht wirklich Sinn. Besser eine Variable als IEC-Zähler, in STAT (VAR) deklarieren und damit arbeiten, dann kannnst du den FB später auch in mehrfachen Aufrufen nutzen, wenn nötig.
    Geändert von Ralle (16.07.2013 um 14:45 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... ich hatte jetzt vorausgesetzt, dass die Prinzipien des Verhaltens der Schnittstelle (IN , IN_OUT , OUT) bekannt sind ...

Ähnliche Themen

  1. SCL Zähler/Timerproblem
    Von bayernburn im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 14.06.2012, 08:18
  2. Betriebsstunden Zähler / max. Zähler Anzahl.
    Von superkato im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.12.2010, 16:38
  3. SCL Zähler...ewiges problem^^
    Von Chris_the_new im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.10.2009, 09:59
  4. Zähler in SCL
    Von Felse im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 09.03.2009, 16:49
  5. Maximalzählwert Zähler S7-300 + maximale Zähler CPU
    Von DennisBerger im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 02.07.2007, 10:54

Lesezeichen

Berechtigungen

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