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

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

Thema: Zähler für Dumi

  1. #1
    Registriert seit
    10.01.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Erst mal will mich kurz vorstellen.
    bin 36 und Schlosser. Und programmiere nur so zum Spaß.

    Ich brauch eine Zähler wie CTU nur er mus weiter Zählen als 32767

    Wie geht das.

    MFG
    Genius
    Zitieren Zitieren Zähler für Dumi  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Mit der Flanke des Triggersignales einen INT um jeweils 1 erhöhen.

  3. #3
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Dann bau dir einen eigenen Zähler-FB der ein DWORD verwendet:

    Bsp in ST:

    Code:
    VAR_INPUT
      CU :BOOL;
      Reset :BOOL;
    END_VAR
    VAR_OUTPUT
      Q :BOOL;
      CV :DWORD;
    END_VAR
    VAR
      M :BOOL;
    END_VAR
    
    (*Aufaddieren bei steigender Flanke an CU*)
    IF CU and not M THEN
      CV := CV+1;
    END_IF
    
    M := CU; (*Flankermerker setzen*)
    
    (*Reset Zähler*)
    IF Reset THEN
      CV:=0;
    END_IF
    
    Q := CV = 16#FFFFFFFF; (*Signal bei Erreichen des DWORD End-Werts*)
    Ich weiss jetzt nicht wie sich der offizielle CTU beim erreichen des Endwertes verhält. Bleibt der auf dem Wert bis ein reset kommt, oder springt er automatisch auf 0 zurück (überlauf)?
    Der Zähler im Beispiel läuft einfach über und springt auf 0 zurück.
    Geändert von MasterOhh (10.01.2016 um 20:06 Uhr) Grund: Ein WORD beim DWORD vergessen ^^
    Sänd from mei Kombjudder mitse Dastadurr.

  4. #4
    Genius2222 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.01.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wie weit Zählt der Zähler?

    Änderung ich hab ihn getestete und gesehen er geht nur bis 10.

    Wieso das?
    Geändert von Genius2222 (10.01.2016 um 19:38 Uhr)

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Genius2222 Beitrag anzeigen
    Wie weit Zählt der Zähler?
    Mit DWORD kann man bis 4.294.967.295 zählen (0 bis DW#16#FFFFFFFF). (DWORD ist eigentlich nicht korrekt, es müßte ein DINT oder UDINT verwendet werden.)

    Änderung ich hab ihn getestete und gesehen er geht nur bis 10.
    Dann hast Du irgendwas falsch gemacht. Hast Du den Baustein als FB programmiert oder als Function?

    Harald
    Geändert von PN/DP (10.01.2016 um 19:51 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Die Zählvariablen in den Standard-Bausteinen sind alle vom Typ WORD, deswegen habe ich das DWORD genommen. Mit UDINT geht es aber genauso.
    Sänd from mei Kombjudder mitse Dastadurr.

  7. #7
    Genius2222 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.01.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So hab den Fehler gefunden.
    Aber wie bekomme ich es hin das der Zähler nach neustart der Steuerung gespeichert bleibt?
    Beim CTU konnte ich ja die Variablen Deklarieren.

  8. #8
    Registriert seit
    26.11.2012
    Ort
    Gummersbach
    Beiträge
    502
    Danke
    18
    Erhielt 71 Danke für 69 Beiträge

    Standard

    wenn Du o.g. Code verwendest hast Du doch im oberen Teil ebenfalls Variablen deklariert - wo ist da der Unterschied zu dem fertigen Baustein?
    Ganz kurz ganz hell
    ganz lange ganz dunkel....

  9. #9
    Genius2222 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.01.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das es nicht geht.
    ich habe den Merker mit "RETAIN" und "PERSISTENT" Deklariert.
    und die selbe Einstellung ist beim CTU gegangen.

  10. #10
    Registriert seit
    26.11.2012
    Ort
    Gummersbach
    Beiträge
    502
    Danke
    18
    Erhielt 71 Danke für 69 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja, der unterschied liegt daran, das Du den CTU mit einer Variable von außen beschaltest - diese ist im Hauptprogramm deklariert oder global.
    Interne Variablen einer Funktion oder eines Unterprogramms sind aber nur in diesem bekannt.

    Die Variable CV ist als Var_out deklariert - damit stellt sie (bei FUP-Darstellung) einen Ausgang aus dem Funktionsblock zur Verfügung an denen Du Deine Variable (nennen wir sie mal ZÄHLWERT) schreibst, in die das Ergebnis geschrieben werden soll. Diese Ergebnis-Variable ZÄHLWERT könnte man speichernd machen, das hat aber zur Folge, das in Deiner Variable ZÄHLWERT beim Wiederanlauf ein Wert drin steht, Dein Zähler aber bei null startet...
    Beim nächsten schreiben auf die Variable wird diese auf den aktuellen Wert des Zählers gesetzt - ist also keine Lösung für Dein Problem.

    Um das Problem besser zu verstehen:
    Versuch mal die Variable CV global zu deklarieren und dann als Retain bzw. Persistent. Dann solltest Du diese Variable direkt weiterverwenden können in anderen Programmteilen und der Zähler sollte beim Wiederanlauf den Wert noch haben.
    Problematisch bei dieser Lösung ist, das Du den Schreibzugriff auf CV dann nicht auf bestimmte Programmteile (z.B. Deinen Zähler) beschränken kannst - d.h. wenn irgendein anderes Code-Schnippsel auf die Variable CV SCHREIBEND zugreift, so zerhaut es Dir den Zähler.

    Ich denke die "sauberste" Lösung wäre, CV global zu machen und damit den aktuellen Wert über den Spannungsausfall zu retten - gleichzeitig im Zähler eine Out-Variable zu haben, die den Wert von CV abbildet. Damit kannst Du außerhalb des Zählers mit Deiner Variable ZÄHLWERT weiterarbeiten.
    ABER: Wenn Du das Programm kopierst, weil Du einen zweiten, unabhängigen Zähler brauchst musst Du zwingend CV umbenennen - sonst greifen alle Deine Zähler auf die selbe globale Variable zu...

    Ich hoffe das hat ein klein wenig weitergeholfen
    Ganz kurz ganz hell
    ganz lange ganz dunkel....

Ähnliche Themen

  1. Step 7 Zähler für Freigaben über Nockenschalter
    Von DelphiFG im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.02.2014, 09:36
  2. remanenter Zähler in Mitsubishi FX3U für Betriebsstundenzähler
    Von solo_nico im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 24.10.2012, 17:36
  3. Step 7 Zeit für Zähler verwenden
    Von slot23 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 17.04.2012, 21:07
  4. Startbefehl für Zähler
    Von breno im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.04.2009, 23:10
  5. Anschluß für schnelle Zähler
    Von agoschina im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 18.04.2006, 21:10

Lesezeichen

Berechtigungen

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