Zähler CTUD aus der Standard.lib, tastzeiten der Eingänge?!

KingHelmer

Level-1
Beiträge
1.076
Reaktionspunkte
139
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe mir eine kleine Jalousiesteuerung programmiert, die einen CTUD zur Positionsbestimmung nutzt.
Dieser ist für das hochfahren und das Runterfahren jeweils aktiv und zählt über Pulse hoch, bzw. runter.
(Die Pulse werden nur als Flanke weitergegeben an den Zähler).

Diese Pulse kommen in sehr kurzen Abständen (am liebsten 10ms, wegen Genauigkeit) doch leider "bekommt der Zähler die Impulse so nicht mit".
Stelle ich den Abstand zwischen den Pulsen hoch auf 50ms kommen schon "mehr" an, aber immer noch nicht alle.
Ich denke daher, dass es eine Grenze geben muss bis zu welcher der CTUD noch arbeitet, habe diese aber nirgends herausfinden können.

Vielleicht kennt diese jemand und/oder kann mir sogar einen anderen Zähler empfehlen.

Im Notfall baue ich selbst einen, würde dennoch gerne einen Fertigen nehmen.

Danke und Grüße,
Flo
 
Eins vorneweg: Ich kann Deine Frage nicht konkret beantworten, ABER:

wie generierst Du die Impulse? Wenn die über einen Eingang kommen könnte das Nadelöhr auch dort liegen. Die meisten Eingänge haben eine maximale Frequenz (= Abtastrate) - für die Mitsubishi-Steuerungen hatten wir damals spezielle High-Speed-Eingangskarten für solche Fälle.

Vielleicht hilft Dir das als Denkansatz

Viele Grüße und
schönes Wochenende

Christian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich mich recht erinnere, haben die Zählerbausteine der Standard-Lib eine integrierte Flankenauswertung für die Zählimpulse. Wenn Du im 10 ms-Takt zählen willlst, darf Dein Programm also nur höchstens 5 ms pro Zyklus benötigen.
 
Ich kann da nur zustimmen.

Ich sehe zwei begrenzende Tatsachen:
- Abtastrate der Task
- Abtastrate der Eingänge

Mir wäre neu, dass die Bausteine der Standard.lib nicht z.B. auch mit 50µs betrieben werden könnten.
10 ms sollte also keine Herausforderung darstellen.
 
hier mal noch der angesprochene Programmausschnitt:

Code:
IF (xBlind_Up_Button OR xBlind_Up_Global OR  Instanz1_RS.Q1) AND NOT blind_limit_top THEN
xBlind_UP:= TRUE;
Blind_Going_Up:= TRUE;
ELSIF (xBlind_Down_Button OR xBlind_Down_Global OR Instanz2_RS.Q1) AND NOT blind_limit_bottom THEN
xBlind_DOWN:= TRUE;
Blind_Going_Down:= TRUE;
ELSE
xBlind_UP:= FALSE;
xBlind_DOWN:= FALSE;
Blind_Going_Up:= FALSE;
Blind_Going_Down:= FALSE;
END_IF;


Instanz1_BLINK(    ENABLE:=     Blind_Going_Up,
                    TIMELOW:=     T#50ms,
                    TIMEHIGH:=    T#50ms,
                    OUT=>            Pulse_Blink1 );

Instanz2_BLINK(    ENABLE:=     Blind_Going_Down,
                    TIMELOW:=     T#50ms,
                    TIMEHIGH:=    T#50ms,
                    OUT=>            Pulse_Blink2 );

Instanz1_R_TRIG(CLK:= Pulse_Blink1, Q=>rising_flank_count_up );
Instanz1_F_TRIG(CLK:= Pulse_Blink1, Q=>falling_flank_count_up );

Instanz2_R_TRIG(CLK:= Pulse_Blink2, Q=>rising_flank_count_Down );
Instanz2_F_TRIG(CLK:= Pulse_Blink2, Q=>falling_flank_count_Down);

Instanz1_CTUD(
    CU:= rising_flank_count_up OR falling_flank_count_up,
    CD:= rising_flank_count_down OR falling_flank_count_down,
    RESET:=FALSE,
    LOAD:= FALSE,
    PV:= 840,
    QU=> blind_limit_top,
    QD=> blind_limit_bottom,
    CV=> blind_current_position);

Fragt mich nicht warum ich es teilweise so sinnlos programmiert habe :ROFLMAO: Ist schon etwas älter.
Aber im Grunde sehe ich spontan keinen Grund, warum der Zähler nicht zählen sollte.

Der Taks wird zyklisch mit T#5ms aufgerufen.
"xBlind_Up_Button" und "xBlind_Up_Global OR" sind beides boolsche VAR_INPUT wobei "Button" mit einem Taster belegt ist also einer %IX und "Global" eine Variable aus der Visu ist.

Der Puls funktioniert beim Online Test, der Zähler zählt aber nicht wie er soll.

PS: Teste es momentan NUR in der Simulation, also ohne PLC.(Problem?)

Nutze eine WAGO 750-880.

Grüße,
Flo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei diesem "komischen" Simulations-Modus bin ich nicht sicher, wie schnell die Task dann wirklich läuft....und vor allem deterministish.
Der Entwicklungs-PC ist ja dann für das Echtzeitverhalten zuständig.

Aber um das alles auszuschließen, könntest du doch einfach mal nur ein kleines Programm mit den CTUD laufen lassen oder?
 
Hast du mal geschaut ob die beiden Variablen Blind_Going_Up und Blind_Going_Down zufällig mal gleichzeitig gesetzt sind?

Ansonsten könntest du probehalber mal den CTUD in 2 Counter (CTU und CTD) trennen und schauen ob die richtig zählen.

Läuft die Simulation auf der Wago oder auf deinem PC?
 
Momentan läuft die Simu auf meinem Rechner hier. Habe gerade nicht die Möglichkeit an der WAGO zu testen.
Ich hatte allerdings schon häufiger Probleme mit der Simulation, vielleicht erspare ich uns einen Haufen Spekulation, wenn ich einfach versuche, am Ende der Woche das Programm mal auf der SPS zum laufen zu bringen.

Melde mich spätestens dann wieder!

Flo
 
Zurück
Oben