# Erster Zyklus nach Neustart



## Dirty Harry (8 April 2009)

Hallo Gemeinde,

ich arbeite mich in gerade Beckhoff ein.

Wie ist unter Beckhoff oder allgemein CoDeSys der erste Zyklus nach einem Neustart der SPS detektierbar? 
Bei S7 würde ich die Programmierung vom OB100 oder die Auswertung der Variable OB1_SCAN1 anwenden.
Danke für die Hilfe.

Harry


----------



## Bührer (8 April 2009)

Ich mache das immer über eine Variable. Diese Variable ist initialisiert mit False. Nachdem ich meine Initalisierung gemacht habe schalte ich sie um auf True in ST sieht das so aus.

VAR
  StartUpDone:BOOL:=FALSE;
END_VAR


if StartUpDone=FALSE THEN
     Die zu erledigende Arbeit
     StartUpDone:=TRUE;
end_if

Gruss
Thomas


----------



## Cerberus (8 April 2009)

Würde ich auch so machen. Solange diese Variable dann false ist, bist du sicher noch im ersten Zyklus. Musst halt natürlich die Auswertung vor der If-Schleife machen.


----------



## Dirty Harry (8 April 2009)

Hallo Thomas, Hallo Cerberus

Danke für die Tipps, einfach und einleuchtend. Werde ich auch so machen.

Gruß
Harry


----------



## Zickenbändiger (8 April 2009)

Hallo 

für eine selbstkreierte Variable kannst du aber auch auf die Systemvariable
SystemTaskInfoArr[1].FirstCycle zurückgreifen.

Gruß


----------



## Dirty Harry (8 April 2009)

Hallo

ich vermutete schon dass es eine entsprechende Systemvariable geben sollte.

Danke auch für diesen Tipp.

Gruß
Harry


----------



## MarkusP (10 April 2009)

Zickenbändiger schrieb:


> für eine selbstkreierte Variable kannst du aber auch auf die Systemvariable
> SystemTaskInfoArr[1].FirstCycle zurückgreifen.



Aufpassen: funktioniert jedoch NICHT beim Umschalten des SPS-Programmes von STOP auf START, sondern nur beim Hochstarten des Systems. Bin da mal ziemlich übel darübergestolpert. Wir lösten das Problem damals über die System-Ticks.

Frohe Ostern ! (hoffentlich ohne Software-Eier)


----------



## Kieler (20 November 2020)

Bührer schrieb:


> Ich mache das immer über eine Variable. Diese Variable ist initialisiert mit False. Nachdem ich meine Initalisierung gemacht habe schalte ich sie um auf True in ST sieht das so aus.
> 
> VAR
> StartUpDone:BOOL:=FALSE;
> ...




Die Idee finde ich Klasse. Ich habe sie gleich in meinem aktuellen CODESYS 3.5 Projekt ausprobiert. Leider funktioniert es zumindest bei einfachen Stop/Start nicht. Hat noch jemand eine andere Idee, wie einen Neustart erfassen kann?


----------



## JSEngineering (20 November 2020)

Kieler schrieb:


> Die Idee finde ich Klasse. Ich habe sie gleich in meinem aktuellen CODESYS 3.5 Projekt ausprobiert. Leider funktioniert es zumindest bei einfachen Stop/Start nicht. Hat noch jemand eine andere Idee, wie einen Neustart erfassen kann?




Ein "einfacher Stop/Start" ist ja bekannt als "Warmstart" und soll ja genau das bewirken: Programm wird da fortgesetzt, wo es aufgehört hat. Für welchen Zweck möchtest Du den Warmstart detektieren?

Ich kenne die Beckhoff nicht, aber kannst Du Dir ggf. einen Task anlegen, der ereignisgesteuert aufgerufen wird beim Warmstart? Entspräche dem OB bei Siemens...


----------



## holgermaik (20 November 2020)

Man kann in Codesys bei bestimmten Systemereignissen einen seperaten Taskaufruf machen. z.B. "PrepareStart" (führt einen Code aus bevor der Controller in Run versetzt wird um z.B. Variablen zu initialisieren)
Das ganze geschieht in der Taskkonfiguration. Habe eben kein Codesys da. wenn du es nicht findest kann ich heute Abend ein Bild machen.




Holger


----------



## Kieler (20 November 2020)

JSEngineering schrieb:


> Ein "einfacher Stop/Start" ist ja bekannt als "Warmstart" und soll ja genau das bewirken: Programm wird da fortgesetzt, wo es aufgehört hat. Für welchen Zweck möchtest Du den Warmstart detektieren?



Du hast natürlich recht. Ich benötige mein Neustart Signal, eigentlich nur nach einem Spannungsausfall.


----------

