Hallo, ich hoffe ich bin hier richtig.
Ich bin Anfänger und benötige einen rumpf (als Vorlage).
Ich möchte ein Python Script starten. Dieses Stript soll eine Hauptschleife haben in der nicht geschied (sleep 1) , jedoch soll aus dieser Schleife ( im sleep ) 2 mal je Sekunde zu einen bestimmten Programmteil gespungen werden. Also 2 mal je sekunde unterbrochen werden. Ist wohl ein klassischer Timer Interrupt.
Wie wird der aufgebaut ?
Beispiel:
Timer Initialisieren
Sprungziel bei Timer event
Timer aktivieren
Hauptschleife
End
Sprungziel Timer_event
Return
Ich habe schon viel gegooglet, aber nicht vernünftiges gefunden!
Code ist für Python 3
Danke für eine Antwort
Gruss Günni
Timer Interrupt
@Fileplayer: Timer-Interrupt und Sprungziel sind Begriffe die eher aus hardwarenahen Sprachen kommen und nicht aus Hochsprachen.
Wenn in der Hauptschleife nichts ausser einem `sleep()` geschieht, warum kann man dieses `sleep()` dann nicht durch Code ersetzen der alle halbe Sekunde eine Funktion aufruft die das tut was Du machen möchtest?
Beschreib doch mal Dein eigentliches Problem welches Du lösen möchtest statt einer Lösung von der Du denkst dass das die richtige wäre. Und nur zur Sicherheit: Du verwendest hier kein GUI-Toolkit‽ Denn dann sehen Lösungen für „alle x Sekunden etwas machen” nochmal anders aus und sind auch von Toolkit von Toolkit leicht verschieden.
Wenn in der Hauptschleife nichts ausser einem `sleep()` geschieht, warum kann man dieses `sleep()` dann nicht durch Code ersetzen der alle halbe Sekunde eine Funktion aufruft die das tut was Du machen möchtest?
Beschreib doch mal Dein eigentliches Problem welches Du lösen möchtest statt einer Lösung von der Du denkst dass das die richtige wäre. Und nur zur Sicherheit: Du verwendest hier kein GUI-Toolkit‽ Denn dann sehen Lösungen für „alle x Sekunden etwas machen” nochmal anders aus und sind auch von Toolkit von Toolkit leicht verschieden.
-
- User
- Beiträge: 8
- Registriert: Dienstag 18. August 2015, 11:10
Ja, das will ich machen:
und NEIN ist kein GUI
Das Hauptprogramm (die Hauptschleife) macht schon noch was (berechnen usw.) und diese Tätigkeit soll
10 mal je Sekunde (immer für alle sekunden in der das Programm läuft) unterbrochen werden. In der Unterbrechung sollte ein definierter Programmteil abgearbeitet werden (dauert ca. 1/20 Sekunde).
In der Unterbrechung soll folgendes gemacht werden (ist Progtechnisch aber schon gelöst) ==>
------------------------------------------
UDP lesen (wenn was vorhanden)
Eingänge einlesen
Logisch bearbeiten
Ausgänge ausgeben
gegebenfalls Ausgänge forcen
UDP versenden (wenn erforderlich)
-----------------------------------------
and so on...
Ist erstmal eine klassische SPS.
Ich brauche also ein Hauptprogramm ( while True:) und ein Programmteil welches alle 100 ms aufgerufen wird. Die brauchen nicht, können aber syncron laufen (werden sie aber meistens nicht).
Danke
Gruss Günni
und NEIN ist kein GUI
Das Hauptprogramm (die Hauptschleife) macht schon noch was (berechnen usw.) und diese Tätigkeit soll
10 mal je Sekunde (immer für alle sekunden in der das Programm läuft) unterbrochen werden. In der Unterbrechung sollte ein definierter Programmteil abgearbeitet werden (dauert ca. 1/20 Sekunde).
In der Unterbrechung soll folgendes gemacht werden (ist Progtechnisch aber schon gelöst) ==>
------------------------------------------
UDP lesen (wenn was vorhanden)
Eingänge einlesen
Logisch bearbeiten
Ausgänge ausgeben
gegebenfalls Ausgänge forcen
UDP versenden (wenn erforderlich)
-----------------------------------------
and so on...
Ist erstmal eine klassische SPS.
Ich brauche also ein Hauptprogramm ( while True:) und ein Programmteil welches alle 100 ms aufgerufen wird. Die brauchen nicht, können aber syncron laufen (werden sie aber meistens nicht).
Danke
Gruss Günni
@Fileplayer: Das klingt nach nebenläufiger Programmierung. Also einen weiteren, parallelen Programmablauf mittels `threading`-Modul. Allerdings musst Du vorsichtig sein mit zeitlichen Garantien. So wirklich exakt wird das nicht werden. Mit einem normalen Betriebssystem nicht und mit einer dynamischen, interpetierten Hochsprache schon gar nicht. Du musst also mit Verzögerungen und ”jitter” rechnen.
-
- User
- Beiträge: 8
- Registriert: Dienstag 18. August 2015, 11:10
Ja, gut, aber wie ?
@Fileplayer: Wie was jetzt genau? Du kannst mit dem `threading`-Modul mit der `Thread`-Klasse eine Funktion oder Methode asynchron ausführen lassen oder eine Unterklasse von `Thread` schreiben und dort die `run()`-Methode implementieren.