Функция прерывания в питоне
Я использую протокол Modbus для связи с моей программой. Когда ведомый получает сигнал от ведущего на регистр 1, он запускает функцию
def main():
#Create the server
server = modbus_rtu.RtuServer(serial.Serial(PORT))
server.start()
slave_1 = server.add_slave(1)
slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 2)
slave_1.set_values('0', 0, 0) #set value on the begining
slave_1.set_values('0', 1, 0) #set value on the begining
while True:
register_1 = slave_1.get_values('0', 0, 1)
register_2 = slave_1.get_values('0', 1, 1)
if register_1[0] == 1:
time.sleep(3)
slave_1.set_values('0', 0, 1)
time.sleep(3)
slave_1.set_values('0', 0, 0)
Я хочу остановить эту функцию, когда я изменяю состояние в регистре 2 на несколько секунд, по истечении этого времени он должен вернуться на место, когда он был остановлен. Это должно быть немедленно, поэтому я не могу проверить это нормально "если". Это должно быть похоже на прерывание в Arduino.
Вопрос: Как я могу создать это прерывание?
1 ответ
Решение
К сожалению, я не знаю ни одной подобной функции Python, как прерывание в Arduino.
Если вы хотите остановить эту программу, используйте:
if register_1[0] == 1:
for i in range(300): #for 300ms
if register_2[0] == 1:
__STOP_PROGRAM__
time.sleep(0.1) #sleep 1ms
slave_1.set_values('0', 0, 1)
for i in range(300): #for 300ms
if register_2[0] == 1:
__STOP_PROGRAM__
time.sleep(0.1) #sleep 1ms
slave_1.set_values('0', 0, 0)
Это не сразу, но если вам нужно более точное, вы можете увеличить значение в range()
и уменьшить значение в time.sleep()