Codesys CTU Zähler + Doppelte Flankenerkennung :(

kcirtap123

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,
Ich möchte ganz schnell mein Problem schildern, bevor ich zur Frage komme. Ich studiere Chemie und muss wegen EINMALIG Codesys lernen. Wir hatten 3 Praktika ( je 4 Stunden). Dann sollten wir iwie eine ablaufsteuerung Programmieren. Und jetzt müssen wir eine Klausur schreiben... Wir haben keine Ahnung von IT. Wir hatten sowas noch nie. Deswegen überfodert uns das alle sehr. Ich habe eine probe Klausur, aber wir bekommen keine Lösungen. Ich möchte fragen ob das hier richtig ist. Bitte um Hilfe...
Mfg
 

Anhänge

  • IMAG0765.jpg
    IMAG0765.jpg
    594,5 KB · Aufrufe: 43
Hallo kcirtap123,

zunächst einmal ist natürlich irgendwie doof, dass Du wegen einer Aufgabe CODESYS "lernen" musst. Wie man in anderen Beiträgen im Forum sehen kann, kann die Arbeit mit dem Tool richtig Spaß machen, wenn man es wirklich benötigt (ist eben ein Tool, d.h. Werkzeug :)).

Wenn ich Deine Profs (oder von wem auch immer Du die Aufgabe hast) richtig verstehe, dann soll der Baustein Trigger5_AND abgeleitet sein, sinnvollerweise wohl vom Baustein "CTU", den es fix und fertig gibt. Der zählt ohnehin schon Flanken. Das bedeutet, Du brauchst Dir um die "Zählerei" nicht so viele Gedanken machen. Dafür soll in dem abgeleiteten Baustein auch die Verknüpfung der beiden Eingänge A und B enthalten sein. Sprich: keine Beschaltung vor dem Baustein, sondern in dem Baustein.

Dementsprechend würde ich den Code folgendermaßen gestalten:

Deklarationsteil:
Code:
FUNCTION_BLOCK Trigger5_AND
VAR_INPUT
    a, b: BOOL;
    c: BOOL;
END_VAR
VAR_OUTPUT
    Y: BOOL;
END_VAR
VAR
    Counter:CTU;            //Instanziieurng vom Counter-Baustein
    Trig1, Trig2: R_TRIG;    //Instanziierung der Flankenerkennung
    M: BOOL;
END_VAR

Rumpf:
Code:
Trig1(CLK:=A);                //Flankenerkennung von A
Trig2(CLK:=B);                //Flankenerkennung von B
M:= Trig1.Q AND Trig2.Q;    //Logisches AND der beiden auf Zwischenvariable

Counter(CU:= M, RESET:=C , PV:= 5);    //Zaehler aus der Verknpüfung starten, Reset mit Input C verknüpfen, Limit 5 fest einstellen
Y := Counter.Q ;            //Zaehlerergebnis auf den Ausgang legen

Damit enthält der Aufruf im Hauptbaustein nur den Baustein selbst und die Beschaltung der Eingangs- und Ausgangsvariablen.
 
Zurück
Oben