Timer Interrupt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fileplayer
User
Beiträge: 8
Registriert: Dienstag 18. August 2015, 11:10

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
BlackJack

@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.
Fileplayer
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
BlackJack

@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.
Fileplayer
User
Beiträge: 8
Registriert: Dienstag 18. August 2015, 11:10

Ja, gut, aber wie ?
BlackJack

@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.
Antworten