ich habe alle verfügbaren Beispiele wie z.B. "Events with the mainloop()" , "Cyclic with python code" sowie Beiträge vom Zyklusüberschreiten auf dem Forum gelesen und trotzdem konnte mein Problem nicht lösen.
Ich bekomme regelmäßig einen Fehler mit Zyklusüberschreitung, egal ob die Zykluszeit auf 20ms oder auf 500ms eingestellt ist. Es gibt auch keine Information aus welchem Teil des Programm der Fehler kommt.
Trotz meines relativ großen Programm, benütze ich nur sehr selten die time.sleep() Funktion. Die Laufzeit des Programm sollte deshalb nicht das Problem sein.
Das Programm ist zu groß um es ganze zu zeigen, deswegen schicke ich einfach seine Struktur, vielleicht ist das genug um einen Fehler zu erkennen.
Die erste Datei ist vom RevPi:
Code: Select all
import revpimodio2
class RevPi:
def __init__(self):
try:
self.revpi = revpimodio2.RevPiModIO(autorefresh=True, debug=True)
self.revpi.cycletime = 250
self.revpi.mainloop(blocking=False)
except:
print('Can not create revpi instantion')
def set_output(self, output, value):
try:
if output == 1:
self.revpi.io.O_1.value = value
elif output == 2:
self.revpi.io.O_2.value = value
elif output == 3:
self.revpi.io.O_3.value = value
elif output == 4:
self.revpi.io.O_4.value = value
else:
return -2
return 0
except:
print('Der Ausgang konnte nicht aufgestellt werden')
return -3
def get_input(self, input):
try:
if input == 1:
value = self.revpi.io.I_1.value
elif input == 2:
value = self.revpi.io.I_2.value
elif input == 3:
value = self.revpi.io.I_3.value
elif input == 4:
value = self.revpi.io.I_4.value
else:
return -2
return value
except:
print('Der Eingang konnte nicht gelesen werden')
return -3
Code: Select all
# Thread to monitor the status of the power supply
def thread_netzteil_pruefung():
while True:
if revpi.get_input(1):
netzteil_status_ok = True
else:
netzteil_status_ok = False
# Thread to control the LED lamp
def thread_lamp_output():
while True:
if connection_ok and netzteil_status_ok and automatik_ein:
revpi.set_output(1, True)
else:
revpi.set_output(1, False)
# Class initialisation
revpi = RevPi()
# Creating threads
thread_netzteil = Thread(target=thread_netzteil_pruefung)
thread_lamp = Thread(target=thread_lamp_output)
# Launching threads
thread_netzteil.start()
thread_lamp.start()
# Main part of the program
# Endless loop
while True:
if step == 0:
if revpi.get_input(2):
step = 10
if step == 10:
revpi.set_output(1, True)
step = 20
delay = 0
if step == 20:
#Wait 2sec realized with 0.05 sleep until 2sec reached
time.sleep(0.05)
delay = delay + 0.05
if delay > 2:
step = 30
if step == 30:
# end of the sequence
revpi.set_output(1, False)
step = 0
Was kann das Überschreiten verursachen? Wie ich gesagt habe - ist das ganz egal ob die Zykluszeit auf 20ms oder 400ms eingestellt ist.
Danke im Voraus für eure Unterstützung!!!
Gruß