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

Ergebnis 1 bis 5 von 5

Thema: Zähler in St Programmieren

  1. #1
    Registriert seit
    19.04.2016
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich bin noch blutiger Anfänger was das programmieren in st angeht.
    daher hoffe ich es kann mir hier jemand weiter helfen.

    Ich habe vor einen zähler zu bauen der ein byte von 0 bis huntert hoch oder runter zählt durch drücken 2 er tasten am display. (key 1 und key 2 )
    und duch drücken von Key3 wird ein fester wert (werkseinstellung) in den zähler geschrieben.

    in fup mit dem Baustein ctud ist das für mich kein problem, doch da ich den zähler als retain schreiben will geht das mit ctud nicht, da bei 20 benötigten zählern der retain speicher nicht reicht, deshalb habe ich vor mir selber im st eine art stud zu schreiben, nur bis jetzt ohe erfolg.

    PROGRAM Begrenzung_Durchfluss1_STVAR
    impulse1 :TP;
    impulse2 :TP;




    zaehler: BYTE;
    zaehler100: BOOL;
    END_VAR
    IF impulse1.Q THEN zaehler :=zaehler-1;END_IF


    IF impulse2.Q THEN zaehler :=zaehler+1;
    END_IF
    IF zaehler=100 THEN zaehler100 TRUE


    impulse1 (in:= key_f1 AND NOT zaehler100, pt:= t#10ms);


    impulse2 (in:= key_f2, pt:= t#10ms);

    Unbenannt.jpg

    ich hoffe mir kann jemand weiter helfen.
    danke schon mal dafür.
    Gruß Pascal
    Zitieren Zitieren Zähler in St Programmieren  

  2. #2
    Registriert seit
    13.06.2008
    Beiträge
    182
    Danke
    15
    Erhielt 25 Danke für 22 Beiträge

    Standard

    Hallo Pascal,

    der ST Code ist zwar noch etwas übersichtlich aber ich versuch mal ein paar Ideen zu geben.
    Der Zähler muss so aufgebaut werden, dass er nur bei der Flanke deines Signals zählt.
    Dementsprechend musst du dafür auch eine Flankenauswertung durchführen. Sonst würde das Programm bei einer Task-Zykluszeit von 2 ms z.B. hier 5 statt 1 hoch zählen.
    Entweder du bastelst diese Flankenauswertung selbst über einen Merker oder du benutzt ein R_Trig.
    Über den R_Trig.Q kannst du dann den Zähler in die jeweilige Richtung zählen. (Vorher vielleicht noch abfragen ob der Zähler bereits an einem seiner Limits ansteht)

    Gruß L.T.

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard

    Zitat Zitat von p.sasse Beitrag anzeigen
    in fup mit dem Baustein ctud ist das für mich kein problem, doch da ich den zähler als retain schreiben will geht das mit ctud nicht, da bei 20 benötigten zählern der retain speicher nicht reicht, deshalb habe ich vor mir selber im st eine art stud zu schreiben
    Hallo Pascal,

    dann nimm Dir den CTUD als Vorbild und programmiere Dir Deinen eigenen angepassten CTUD_100-Baustein.
    Das könnte etwa so aussehen:
    Code:
    FUNCTION_BLOCK CTUD_100
    VAR_IN
      CU : Bool;
      CD : Bool;
      RESET : Bool;
      LOAD : Bool;
      PV : INT;
    END_VAR
    VAR_OUT
      CV : INT;
    END_VAR
    
    VAR RETAIN
      zaehler: BYTE;
    END_VAR
    VAR
      HM_up : Bool;
      HM_dn : Bool;
    END_VAR
    
      IF CU AND NOT HM_up AND zaehler < 100 THEN
        zaehler := zaehler + 1;
      END_IF
    
      IF CD AND NOT HM_dn AND zaehler > 0 THEN
        zaehler := zaehler - 1;
      END_IF
    
    //  IF LOAD ...
    
      IF RESET THEN
        zaehler := 0;
      END_IF
    
      HM_up := CU;
      HM_dn := CD;
    
      CV := BYTE_TO_INT(zaehler);
    Das Programmieren des Setzens auf einen Vorgabewert und Kommentare dranschreiben habe ich Dir gelassen

    Ob es für Retain reicht, einfach VAR RETAIN zu deklarieren weiß ich nicht. (Ich kenne Codesys nicht genug.)
    Eventuell mußt Du ein globales RETAIN-Byte als VAR_IN_OUT an den Baustrein übergeben.
    PS: Die Größe des Retain-Speichers kann man irgendwo einstellen.


    Zitat Zitat von p.sasse Beitrag anzeigen
    IF zaehler=100 THEN zaehler100 TRUE
    Sowas ist Mist, weil bei solchen unvollständigen Sachen der zaehler100 nach einmaliger Zuweisung für immer TRUE bleiben wird.
    Besser:
    Code:
      zaehler100 := (zaehler = 100);  //oder:  zaehler100 := (zaehler >= 100);
    
    //falls für obigen CTUD_100 auch Ausgänge QD und/oder QU benötigt werden:
      QD := (zaehler = 0);
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    p.sasse ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.04.2016
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    Danke euch beiden für die schnelle Antwort, leider kommen ich heute nicht mehr dazu es zu testen, bin schon wieder an einem anderem projekt auf der arbeit .
    ich melde mich morgen, ob ich es hin bekommen habe.

    gruß pascal

  5. #5
    p.sasse ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.04.2016
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.
    So habe es gerade so programmiert, und es klappt wunderbar, es reicht auch bei codesys den zähler so alt retain zu deklarieren.
    danke noch mal, ihr habt mir gut weiter geholfen.
    gruß pascal

Ähnliche Themen

  1. Zähler selber programmieren
    Von iceman0815 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 26.11.2010, 08:07
  2. Zähler programmieren
    Von googy im Forum Simatic
    Antworten: 70
    Letzter Beitrag: 27.07.2010, 13:19
  3. S7-200 Zähler programmieren
    Von Sven P im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.06.2009, 09:50
  4. Zähler Funktion Programmieren
    Von Tschembolino im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 12.12.2007, 17:12
  5. s7 zähler programmieren
    Von martinbross im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 23.11.2004, 08:37

Lesezeichen

Berechtigungen

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