Hallo,
ich hab da mal ne Frage an die Programmierprofis:
Wie würdet ihr das machen, bzw. wie macht es der Programmierer?
Ich habe da ein Programm, das ich in C geschrieben hab - und das vereinfacht ausgedrückt:
zyklisch über das Netz auf ein PLC ( Siemens SPS ) zugreift, dort bestimmte Speicherbereiche ausliest,
die gefundenen Daten aufbereitet, in eine SQL Datenbank schiebt - und sich beendet.
Dieses Programm wird von cron aller 5 Minuten gestartet.
Da es beim Ablauf des PLC-read aber bedingte Wartezeiten gibt ( z.B. Datenbereich x kann erst gelesen
werden, wenn die vom PLC gesteuerte Maschine einen bestimmten Zustand hat... ist es rein theoretisch
möglich, dass das Programm länger als 5 Minuten laufen würde - und cron somit eine 2.task parallel
starten würde.
D.h. das Programm mit cron stur nach 5 Min zu starten ist letztendlich keine so gute Idee.
Wie löst man das?
1. Einmal natürlich, indem cron statt des Programms ein shellscript startet, dass schaut ob das Teil noch
läuft, die PID herausfindet - und dann je nachdem, entweder ein kill ausführt oder mit dem Start
noch wartet.
2. ein kleines weiteres c-programm schreibt, dass in einer endlosschleife mit sleep(300) und
'system' das eigentliche c-programm startet, die pid sich merkt und somit den startzyklus
überwacht und steuert
3. das eigentliche c-programm modifizieren, in einer endlosschleife laufen lassen und eventuell mit fork
kindprozesse zeit- und situationsbedingt zu starten.
( vor der 3. Variante hab ich etwas Bammel, weil ich im Programm oft mit malloc() Memory für
irgendwelche String-Geschichten reserviere - und nicht ganz sicher bin, ob mit free() wirklich immer
alles freigegeben wird.)
Gebt mir mal bitte nen Tipp - welcher Weg günstig wäre.
ich hab da mal ne Frage an die Programmierprofis:
Wie würdet ihr das machen, bzw. wie macht es der Programmierer?
Ich habe da ein Programm, das ich in C geschrieben hab - und das vereinfacht ausgedrückt:
zyklisch über das Netz auf ein PLC ( Siemens SPS ) zugreift, dort bestimmte Speicherbereiche ausliest,
die gefundenen Daten aufbereitet, in eine SQL Datenbank schiebt - und sich beendet.
Dieses Programm wird von cron aller 5 Minuten gestartet.
Da es beim Ablauf des PLC-read aber bedingte Wartezeiten gibt ( z.B. Datenbereich x kann erst gelesen
werden, wenn die vom PLC gesteuerte Maschine einen bestimmten Zustand hat... ist es rein theoretisch
möglich, dass das Programm länger als 5 Minuten laufen würde - und cron somit eine 2.task parallel
starten würde.
D.h. das Programm mit cron stur nach 5 Min zu starten ist letztendlich keine so gute Idee.
Wie löst man das?
1. Einmal natürlich, indem cron statt des Programms ein shellscript startet, dass schaut ob das Teil noch
läuft, die PID herausfindet - und dann je nachdem, entweder ein kill ausführt oder mit dem Start
noch wartet.
2. ein kleines weiteres c-programm schreibt, dass in einer endlosschleife mit sleep(300) und
'system' das eigentliche c-programm startet, die pid sich merkt und somit den startzyklus
überwacht und steuert
3. das eigentliche c-programm modifizieren, in einer endlosschleife laufen lassen und eventuell mit fork
kindprozesse zeit- und situationsbedingt zu starten.
( vor der 3. Variante hab ich etwas Bammel, weil ich im Programm oft mit malloc() Memory für
irgendwelche String-Geschichten reserviere - und nicht ganz sicher bin, ob mit free() wirklich immer
alles freigegeben wird.)
Gebt mir mal bitte nen Tipp - welcher Weg günstig wäre.