2016-11-20 126 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()增加值和減少值