2016-11-20 128 views
2

我正在使用modbus协议与我的程序进行通信。当从从主沾到寄存器1的信号,他开始功能Python中的中断函数

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中的中断。

问:如何创建此中断?

回答

0

不幸的是,我不知道arduino中的任何类似的python函数像中断。

如果你想停止这个程序中使用:

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) 

这不是即时的,但如果你需要更准确,你可以在time.sleep()

range()增加值和减少值