python中的中断函数
Interrupt function in python
我正在使用 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 上更改状态几秒钟后停止此功能,此后它应该回到停止时的位置。
它应该是立即的,所以我无法检查这是正常的"if"。
它应该类似于arduino中的中断。
问题:如何创建这个中断?
不幸的是,我不知道任何类似的 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()
中的值
我正在使用 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 上更改状态几秒钟后停止此功能,此后它应该回到停止时的位置。 它应该是立即的,所以我无法检查这是正常的"if"。 它应该类似于arduino中的中断。
问题:如何创建这个中断?
不幸的是,我不知道任何类似的 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()