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

Ergebnis 1 bis 5 von 5

Thema: Ereignisgesteuerter Task wird nur zufällig ausgeführt

  1. #1
    Registriert seit
    29.06.2015
    Beiträge
    33
    Danke
    2
    Erhielt 7 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,
    ich beschäftige mich erst seit einem knappen Monat mit Codesys 3.5.

    Ich habe ein ganz simples Programm geschrieben um Ereignisgesteuerte Tasks zu verstehen.
    Dazu habe ich zwei Tasks erstellt:

    StartTask (Ruft PLC_PRG auf, zyklisch 20ms, Priorität 5)
    MotionTask (Ruft MotionTask auf, Ereignis, Globale Variable xMotionTaskStart, Priorität 1)

    Code:
    Inhalt PLC_PRG:
    MotionTaskStart();
    MotionTaskEnd();
    
    Inhalt MotionTaskStart:
    xMotionTaskStart:= TRUE;
    
    Inhalt MotionTaskEnd:
    xMotionTaskStart:= FALSE;
    
    Inhalt MotionTask:
    Zaehler:= Zaehler +1;

    Das alles lässt sich fehlerfrei erstellen. Das Programm läuft auch. Während ich hier schreibe schaffte StartTask 33000 Zyklen. MotionTask wurde nur 25 Mal aufgerufen.
    Wenn ich mich mit Prozedurschritt vorarbeite wird MotionTask jeden Zyklus aufgerufen. Deswegen verstehe ich nicht was hier falsch läuft.


    Noch eine kleine Frage hinterher: Wo versteckt sich AxisGroup.bSync aus Codesys 2.3? Das es AxisGroup nicht mehr gibt ist klar, die meisten Funktionen habe ich wiederfinden können. Die Flankenerkennung für den MotionTask soll nämlich das Empfangen des Sync-Telegramms sein, wie ich es aus 2.3 kenne.
    Zitieren Zitieren Ereignisgesteuerter Task wird nur zufällig ausgeführt  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Ich kenne Codesys sicher nicht genug, doch mir fällt auf:

    Soll xMotionTaskStart eine Art Freigabe für die Ausführung der ereignisgesteuerten Task sein?
    xMotionTaskStart wird nur eine extrem kurze Zeit TRUE, die Ereignisse müßten genau in dieser kurzen Zeitspanne zwischen MotionTaskStart() und MotionTaskEnd() auftreten, um xMotionTaskStart=TRUE zu sehen. (oder stehen die Ereignisse in einer Warteschlange bis xMotionTaskStart TRUE wird?)

    Wenn im Einzelschritt die PLC_PRG zwischen MotionTaskStart() und MotionTaskEnd() angehalten ist, dann sieht jedes Ereignis xMotionTaskStart=TRUE

    Mache doch mal in der MotionTask einen Aufruf-Zähler VOR der Auswertung von xMotionTaskStart.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    b4w3f ist offline Benutzer
    Themenstarter
    Registriert seit
    29.06.2015
    Beiträge
    33
    Danke
    2
    Erhielt 7 Danke für 6 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Mache doch mal in der MotionTask einen Aufruf-Zähler VOR der Auswertung von xMotionTaskStart.
    Der Task MotionTask wird immer dann ausgeführt wenn xMotionTaskStart eine steigende Flanke hat, also auf True gesetzt wird. Folglich kann MotionTask nichts tun VOR der Auswertung von xMotionTaskStart. Aber könnte es sein, dass die Flanke vom Taskmanager (mit dem ich als Nutzer ja nicht viel zu tun habe) erkannt wird, sollten zwischen True und False einige µs vergehen?
    Eben Ausprobiert mit 55µs zwischen MotionTaskStart und MotionTaskEnd. Viel länger wird mein Programm so oder so nicht brauchen. Weiterhin nur Zufall.

    Habe grade einen Wago 750-377 mit einer 750-430 angeklemmt. Wenn ich xMotionTaskStart auf einen Eingang Mappe wird jeder Aufruf erkannt, wenn ich das Signal an der Hardware auf True setzte. Egal wie schnell der PLC_PRG läuft. Da es später ja eh mit dem Sync-Telegramm der Motion-Motoren auslösen soll ist mir die Lösung des obigen Problems grad relativ egal und die Suche nach "AxisGroup.bSync" wird wieder relevant. Jemand eine Idee wie ich das Versenden des Synctelegrammes des Motionantriebs auf andere Weise erhalten kann?

  4. #4
    Registriert seit
    24.07.2013
    Beiträge
    421
    Danke
    1
    Erhielt 132 Danke für 111 Beiträge

    Standard

    Hallo,
    was verwendest du genau für eine V3.5 Steuerug. Das sollte eigentlich nicht notwendig sein.
    Du setzt eine zyklische Taskk auf mit z.b 4ms und stellst das im CANopenManager ein... die Cycle Period muss zum Motion Task Zyklus passen. (+ wie immer: die FB's nur in dieser Task aufrufen)
    Das war's schon, wenn deine SPS "echtzeifähig" genug ist geht das so.

    Wenn nicht wäre vielleicht SoftMotionLight eine Option. (Ebene ohne CNC und CAMing nur Ptp mt PLCopen fb's)

    Grüße
    Angehängte Grafiken Angehängte Grafiken
    Geändert von HausSPSler (11.07.2015 um 06:47 Uhr)
    Edwin Schwellinger
    3S-Smart Software Solutions GmbH

  5. Folgender Benutzer sagt Danke zu HausSPSler für den nützlichen Beitrag:

    b4w3f (12.07.2015)

  6. #5
    b4w3f ist offline Benutzer
    Themenstarter
    Registriert seit
    29.06.2015
    Beiträge
    33
    Danke
    2
    Erhielt 7 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Alles klar. Das hilft mir. Ich verwende einen Lenze 3200c ipc mit intel Atom. Der sollte Echtzeitfähig genug sein. Ich war mir nicht sicher warum genau AxisGroup.bSync verwendet wurde, das Programm wurde vor Jahren von extern in 2.3 geschrieben.

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 19.05.2015, 13:03
  2. Antworten: 1
    Letzter Beitrag: 06.08.2013, 19:24
  3. Script wird nicht ausgeführt
    Von Bensen83 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 18.08.2011, 08:12
  4. Sprung wird nicht ausgeführt
    Von plc_typ im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 01.07.2010, 09:39
  5. WinCC flex Script wird nicht ausgeführt
    Von geduldiger im Forum HMI
    Antworten: 21
    Letzter Beitrag: 05.07.2007, 17:35

Lesezeichen

Berechtigungen

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