Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Zählwerte bis in den mehrstelligen Millionenbereich

2005-10-26
2007-07-27
  • B.wieschendorf - 2005-10-26

    Hallo,

    ich bin im Rahmen meiner Diplomarbeit dabei mich in CoDeSys einzuarbeiten, deshalb auch noch ein bißchen unbedarft.

    Zu meiner Aufgabenstellung gehört es unter anderem, die Schaltspiele von Ventilen mitzuschreiben. Dabei können Schaltspielzahlen von von mehreren Millionen auftreten.

    Da meines Wissens die Standardzähler CTU,CTD,CTUD nur 16bit zur Verfügung haben bin ich also damit schnell am Ende.

    Eine Möglichkeit wäre sicher die Zähler zu kaskadieren aber wie wird dann die Ausgabe realisiert?

    Ich wäre für jede Antwort dankbar!

    Viele Grüße und danke im vorraus.

    Björn

     
  • Anonymous - 2005-10-26

    Originally created by: Bernhard Werner

    Hallo,

    Sie können einen eigenen Zähler mit selbstgewähltem Bereich in Nullkommanix selber schreiben: hier der Code für CTU:

    IF RESET THEN

    CV := 0;
    

    ELSIF CU AND (CV < 16#FFFFFFFF) THEN

    cv := cv + 1;
    

    END_IF

    Q := (CV >= PV);

    Einfach PV und CV als DWORD deklarieren und fertig.

    Das ist auch performanter als zu kaskadieren.

    mit freundlichem Gruss,

    Bernhard Werner

     
  • Anonymous - 2005-11-11

    Originally created by: Gast

    Flankenbildung für CU nicht vergessen, sonst zählt er in jedem Scan hoch und nicht wie man vielleicht erwarten würde bei jeder Flanke des Bits.

     
  • Math - 2007-07-25

    Hallo miteinander

    Konnte obigen code für meinen Energiezähler verwenden. Nun ist aber der externe Impuls etwas lang und der Counter zählt 4 - 5 Schritte hoch.

    Wie kann ich den Counter nun dazu bringen, dass er pro Impuls nur um 1 erhöht? Kriege das mit der Flanke in ST nicht auf die Reihe...

    Besten Dank ür einen Tip!

     
  • gravieren - 2007-07-25

    Hi

    Zitat:
    Wie kann ich den Counter nun dazu bringen, dass er pro Impuls nur um 1 erhöht? Kriege das mit der Flanke in ST nicht auf die Reihe...

    w www.oscat.de w

     
  • Rolf-Geisler - 2007-07-26

    Hallo,

    das geht auch ohne oscat mit den Bordmitteln von CoDeSys.

    Die IEC deklariert den Standardbaustein R_TRIG (Trigger steigende Flanke). Baustein instanziieren wie gewohnt, Ergebnisbit auswerten und dann zählen:

    VAR_INPUT
      ixCount : BOOL;
    END_VAR
    VAR
      Trigger : R_TRIG;
      Count : DINT;
    END_VAR
    Trigger (CLK := ixCount);
    IF Trigger.Q
    THEN Count := Count+1;
    END_IF
    

    Diese Lösung hat den Charme, dass sie über die Windows-Zwischenablage auch nach STEP7-SCL oder nach Multiprog portiert werden kann. Ob dort die oscat läuft, weiss ich nicht. R_TRIG und die übrigen IEC-Standardbausteine werden aber in jedem Falle auch von den genannten Systemen unterstützt.

    Gruß Rolf

     
  • Math - 2007-07-27

    Besten Dank ! Funktioniert nun einwandfrei!

    Gruss Math

     

Log in to post a comment.