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

Ergebnis 1 bis 4 von 4

Thema: "Einmalig startbare" Tasks mit TwinCAT möglich?

  1. #1
    Registriert seit
    25.08.2008
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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...
    Zitieren Zitieren "Einmalig startbare" Tasks mit TwinCAT möglich?  

  2. #2
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    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?

  3. #3
    speedix ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.08.2008
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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
    Zitieren Zitieren Danke, dann hab ich wohl alles richtig gemacht...  

  4. #4
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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?

Ähnliche Themen

  1. Beckhoff Twincat "Hilfe" installieren
    Von patti_9000 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 25.08.2011, 15:57
  2. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  3. Antworten: 0
    Letzter Beitrag: 14.10.2010, 11:24
  4. Ist eine "universelle" Profibus Slave möglich?
    Von JesperMP im Forum Feldbusse
    Antworten: 8
    Letzter Beitrag: 17.03.2008, 10:38
  5. Antworten: 2
    Letzter Beitrag: 29.10.2005, 17:59

Lesezeichen

Berechtigungen

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