"Einmalig startbare" Tasks mit TwinCAT möglich?

speedix

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe das Problem, daß ich eine PWM über die Beckhoff Oversampling-Klemme EL2262 ausgeben will. Das funktioniert im Prinzip auch prima, wenn ich einen Task definiere, an der Klemme den entsprechenden Oversampling-Faktor einstelle.

ABER: In meinem Fall brauche ich das Siganl nur zur Synchronisation, das Tastverhältnis bleibt immer konstant bei 50%. Ich bräuchte also eigentlich gar keine zyklische Aktualisierung, sondern müßte nur einmal bei Programmstart die Klemme "befüllen" und dann nie wieder anfassen!

Geht so was? Die Klemme muss natürlich auch weiter immer schön ihre PWM synchron zum Bustakt ausgeben...
 
1. Event-Tasks gibt's bei Beckhoff nicht.
2. Wird ein EtherCAT-Slave nicht mehr zyklisch mit Prozessdaten versorgt (z.B. wenn die zugeordnete Task stoppt), schlägt in der Klemme ein Watchdog zu und löscht die Prozessdaten.

Aber wieso der Aufwand mit der Task?
Die EL2262 ist doch eine Digitalklemme, deren Oversampling-Faktor in der Konfig eingestellt wird. Die Task-Zykluszeit ist von dir auch fest vorgegeben.
Wenn du also z.B. 1ms Task-Zykluszeit hast und 10-fach Oversampling, musst du in deiner Task 10 Ausgangs-Bits füttern (z.B. ARRAY [1..10] OF BOOL).
Dieses Array beschreibst du einfach fest in deinem Programm und gut is. Die Klemme wird dann zyklisch immer mit den selben Werte gefüttert.

Hab ich deine Aufgabe richtig durchschaut?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, dann hab ich wohl alles richtig gemacht...

Vielen Dank schon mal für dir schnelle Antwort!

> 1. Event-Tasks gibt's bei Beckhoff nicht.

Das hatte ich befürchtet... :)

> 2. Wird ein EtherCAT-Slave nicht mehr zyklisch mit Prozessdaten
> versorgt (z.B. wenn die zugeordnete Task stoppt), schlägt in der Klemme
> ein Watchdog zu und löscht die Prozessdaten.

Genau das ist mein Problem... sobald der Watchdoch zugeschlagen hat, ist das Ausgangssignal 0... und dann hört die PWM auf und ich hab nen Kurzschluss.

> Aber wieso der Aufwand mit der Task? Die EL2262 ist doch eine
> Digitalklemme, deren Oversampling-Faktor in der Konfig eingestellt wird.
> Die Task-Zykluszeit ist von dir auch fest vorgegeben.
> Wenn du also z.B. 1ms Task-Zykluszeit hast und 10-fach Oversampling,
> musst du in deiner Task 10 Ausgangs-Bits füttern (z.B. ARRAY [1..10] OF
> BOOL).

Genau so hab ich es gemacht. Allerdings ist meine Applikation generell extrem zeitkritisch. Wenn ich die Klemme zusammen mit meinem Reglertask aktualisiere, dann "vergisst" sie ab und zu mal Werte, da offenbar der Task nicht immer abgearbeitet werden kann, in der Zwischenzeit wird dann für ein paar Takte hintereinander "0" ausgegeben. Das ist aber der GAU, daher hab ich einen extra-Task eingerichtet, der die höchste Priorität hat und nur die PWM-Ausgabe aktualisiert. So läuft es, und es werden immer alle Werte ausgegeben. NUR: Dieser Extra-Task frisst natürlich CPU-Zeit, auch wenn er im Grunde nichts macht... jedenfalls zeigt mir TwinCat da eine Laufzeit >0 an.

Hier der Code:
Code:
PROGRAM PWM_prog

VAR CONSTANT
    PWM_length: SINT := 20;
END_VAR

VAR_OUTPUT
    PWM_seq AT %Q*: ARRAY [1..PWM_length] OF BOOL;
END_VAR

VAR
    Initlevel: SINT := 0;
    k: SINT;
END_VAR

IF Initlevel = 0 THEN
    FOR k := 1 TO PWM_length BY 2 DO
        PWM_seq[k] := TRUE;
        PWM_seq[k+1] := FALSE;
    END_FOR
    Initlevel := 1;
END_IF
 
Anders geht es aber nicht.

Fahrt ihr extrem kleine Zykluszeiten oder habt ihr ne kleine CPU, dass der Prozessor so ausgelastet ist, dass einige Zyklen "überschritten" werden?
Was sagt der Überschreitungszähler für die Task?

Bei der Oversampling-Klemme hat man ja die Möglichkeit, längere SPS-Zyklen zu fahren und dafür eine höhere Oversampling-Rate zu nutzen.
Welche Samplingraten habt ihr?
 
Zurück
Oben