wie lang ist die SPS-Zyklusdauer?

Sara
2009-04-15
2009-04-21
  • Sara - 2009-04-15

    Hallo ihrs,

    ist der SPS-Zyklus eigentlich immer konstant oder variiert der abhängig vom zu bearbeitenden Code?

    Wie kann man die derzeitige Maximallänge rausfinden? Gibt's irgendwo die Maximalzeit, über der ein Zyklus nie sein darf?

    Ich benutze die Soft-SPS von CoDeSys.

    Danke schonmal!

    Viele Grüße

    Sara

     
  • gravieren - 2009-04-15

    Hi

    Zitat:
    ist der SPS-Zyklus eigentlich immer konstant oder variiert der abhängig vom zu bearbeitenden Code?

    Je mehr Code, je mehr "schleifen" . . .

    desto länger die Zykluszeit.

    Wie kann man die derzeitige Maximallänge rausfinden?

    Bei der Soft-SPS weiss ich es NICHT.

    Da gibt es bestimmt auch irgendwo eine Anzeige.

    Oder schau mal hier.

    http://www.magnia.de/index.php?option=c ... &Itemid=44

    Gibt's irgendwo die Maximalzeit, über der ein Zyklus nie sein darf?

    Die maximale Zeit kannst du dir in der CPU einstellen.

    Thema Watch-Dog oder so.

    Maximalzeit ?

    Anlagen/Anforderungsspezifisch.

    Hast du z.b. eine Zykluszeit von 10 sekunden, musst du im

    Worst-Case deinen Bedientaster 10 sekunden lange drücken, bevor

    die "Eingabe" erfasst wird.

    Ist NICHT gerade "Echtzeit"

     
  • Rolf-Geisler - 2009-04-15

    Hi Sara,

    die Zykluszeit - Zeit von Aufruf zu Aufruf eines SPS-Programms - hängt davon ab, wie das Programm in die Taskverwaltung eingebunden ist.

    CoDeSys kennt unter anderem freilaufende und zeitgesteuerte Tasks. Die freilaufenden fangen vorn wieder an, wenn sie durchgelaufen sind. Diese Zykluszeit variiert in Abhängigkeit vom abgearbeiteten Code.

    Zeitgesteuerte Tasks werden immer mit der in der Taskkonfiguration angegebenen Zykluszeit aufgerufen - vorausgesetzt, keine Task mit höherer Priorität belegt gerade die CPU. Nur die eine Task mit der höchsten Priorität wird wirklich genau im festgelegten Zyklus aufgerufen, die anderen können abweichen.

    Ob die CoDeSys Soft-SPS das genau so macht wie hier beschrieben, weiss ich nicht. Arbeite nur gelegentlich damit, dann kommt es mir aber nicht auf die Zykluszeit an, sondern auf die interne Logik. Zumindest einige Derivate von CoDeSys, namentlich TwinCAT von Beckhoff, verhält sich aber wie beschrieben.

    Um die Maximallänge eines Programmteiles herauszufinden, kannst Du die Funktion TIME() benutzen (leere Klammern beachten). Sie gibt bei jedem Aufruf den Zeitstempel der CPU zurück, millisekunden-genau. Speicherst Du den Rückgabewert beim Eintritt in einen Baustein und rufst Du TIME() am Ende noch mal auf, kanst Du die Differenz bilden und hast die Laufzeit dieses Programmteiles. Das gleiche kannst Du machen in einem zyklisch aufgerufenen Programmteil, um den aktuellen Taskzyklus zu messen.

    Hoffe das hilft Dir weiter

    Gruss Rolf

     
  • Sara - 2009-04-16

    Hi Karl und Rolf,

    ich danke euch für die hilfreichen Antworten!

    Ich benutze keine Tasks, sondern nur das PLC_PRG mit Zusatzbausteinen (FUN, FB, PRG). Ich schätze mal, dass man das PLC_PRG mit einer freilaufenden Task vergleichen kann, die noch irgendwo n Watchdog hat. Richtig?

    Ich habe mal die TIME()-Funktion wie folgt im PLC_PRG ausprobiert:

    differenz: TIME;

    (1. Codezeile:)

    differenz := TIME();

    (letzte Codezeile:)

    differenz := TIME() - differenz;

    Komischerweise habe ich jedoch nur bei Breakpoints oder Einzelschrittbetrieb einen Wert in "differenz" stehen (je nachdem wie schnell ich so rumklicker.)

    Aber wenn ich das normal laufen lasse, steht nur

    differenz = T#0ms

    Ist das realistisch, dass das Programm in 0 ms durchläuft? Kann man genauer messen? Mir erscheint das irgendwie suspekt...

    Danke euch!

    Sara

     
  • SPSstudent - 2009-04-16

    Du kannst es auch mit einem großen Array of Time versuchen. Erhöhe einfach die Indexvariable bei jedem Aufruf von PLC_PRG und schreibe den Time-Wert in ein neues Arrayelement. Und dann kannst du dir die Einträge genauer anschauen. Wenn sich die Millisekunden z.B. erst nach 3 Arrayelementen ändert, hast du tatsächlich eine Zykluszeit im Nanosekundenbereich.

     
  • Sara - 2009-04-16

    Hi SPSstudent,

    danke für den Tip. Hab ich gleich mal ausprobiert.

    Sehr komisch... Dabei kommt raus, dass meine Zykluszeit bei konstant 62,5 ms liegt.

    Irgendwie muss das mit der Differenz vorher nicht geklappt haben, was mir ein Rätsel ist...

    Aber danke, jetzt weiß ich wenigstens Bescheid.

    Sind 62 ms viel/wenig/normal/egal? Wie ist das bei euch?

    Sara

     
  • SPSstudent - 2009-04-16

    Schau dir auch mal in der Hilfe das Thema "Taskkonfiguration im Online Modus" (und die Taskkonfiguration unter Ressourcen) an. Das ist eigentlich genau das, was du suchst und besser geeignet wie diese Zeitberechnungen im Programm.

     
  • bschuster - 2009-04-16

    Hallo

    öffne doch mal den PLC-Browser und gib ? ein (online).

    Wenn dann in der Liste, hängt von der SPS ab, der Befehl "tsk" erscheint, probier den doch mal.

     
  • Sara - 2009-04-16

    Hallo ihr,

    danke für die Antworten. ich probier das mal aus.

    Sara

     
  • Sara - 2009-04-20

    Hallo Boris,

    ich hab das mal so gemacht wie du empfohlen hast: im Online-Modus auf Ressourcen und PLC-Browser, in der Eingabezeile "?" eingegeben und auf Enter gedrückt.

    Es erschien lediglich ein "?" unter der Eingabezeile.

    Wenn ich "tsk" eingebe, ebenso.

    Meintest du das so? Dann läuft das wohl mit meiner SPS nicht...

    Grüße

    Sara

     
  • Sara - 2009-04-20

    So, und hier meine 3. Antwort in Folge - diesmal an SPSstudent:

    Danke für den Tipp. Hab ich gemacht.

    Aber: Das funzt nur bei Tasks - und ich hab ja keine. Ich lass ja alles über das PLC_PRG laufen, das nicht wie eine Task behandelt wird. Und da kann er mir demzufolge nix anzeigen.

    Schade eigentlich. Hätt mich schon interessiert wie das aussieht.

    Trotzdem danke!

    Grüße

    Sara

     
  • Erik Böhm - 2009-04-20

    Mahlzeit

    Mal ne ganz blöde Frage: Warum machst du dann den Aufruf von PLC_PRG nicht über eine Task ?

    Gruss

    Erik

     
  • Sara - 2009-04-20

    Hi Erik,

    könnte man wahrscheinlich machen, brauch man ja aber nicht. deswegen spar ich mir das.

    Wenn das die einzige Möglichkeit ist, die Zykluszeit zu sehen, wäre das allerdings eine Alternative.

    Grüße

    Sara

     
  • bschuster - 2009-04-21

    Hallo Sara,

    ich gehe davon aus, dass Du die V2.3 mit der PLCWinNT verwendest.

    Meine Tests ergeben:

    -bei Verwendung von Tasks werden die Task-Infos im PLC-Browser angezeigt, benamt mit den Tasknamen

    • ohne Verwendung von Tasks wird bei Aufruf von "tsk" folgendes angezeigt:

    tsk

    Number of Tasks: 1

    Task 0: DefaultTask, ID: 6

    Cycle count: 179

    Cycletime: 1 ms

    Cycletime (min): 1 ms

    Cycletime (max): 1 ms

    Cycletime (avg): 1 ms

    Status: RUN

    Mode: CONTINUE


    Priority: 1

    Intervall: 10 ms

    Event: NONE


    Function pointer: 16#011203FA

    Function index: 58

    d.h. auch ohne Verwendung wird das, was ich erwarte angezeigt, als Defaulttask.

    Läuft Deine SPS ?

     
  • Erik Böhm - 2009-04-21

    Moin

    Schon mal die Suchen Funktion (Suchwort: Zykluszeit) im >Forum benutzt ?

    Da findet sich z.B. das hier

    l viewtopic.php?t=192&highlight=zykluszeit l

    Gruss

    Erik

     
  • Sara - 2009-04-21

    Hallo Boris,

    ja ich benutze die Version 2.3.9.10 mit der PLCWinNT. Es geht so, wie du es beschrieben hast (ich hatte vorher die SPS nicht laufen).

    Angehängt ist ein Bild von der Ausgabe von "tsk".

    Allerdings verstehe ich nicht, warum die Zykluszeit mit konstant 1ms wiedergegeben wird, da ca. 50 Zyklen pro Sekunde laufen - das wären dann ca. 20 ms für 1 Zyklus. (Hab bei Cycle count mal die Differenz bei 1 Sek ermittelt.)

    ?!

    Grüße

    Sara

    IMG: PLC_Browser_tskoutput.png

     
  • Sara - 2009-04-21

    Hi Erik,

    ja, hatte vorher schonmal gesucht. Das muss mir irgendwie durch die Lappen gegangen sein...

    Vielen Dank!

    Grüße

    Sara

     

Log in to post a comment.