2016-11-20 25 views
2

私はプログラムと通信するためにmodbusプロトコルを使用しています。スレーブは、彼が機能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) 

を開始レジスタ1に、マスタからの信号を取得すると、私は私が数秒間レジスタ2に状態を変更すると、この時間の後、それが停止した時に配置するために戻ってくる必要があり、この機能を停止します。 これはすぐに行われるはずなので、これは通常の「if」であることを確認することはできません。 arduinoで同様の割り込みが必要です。

質問:どのようにこの割り込みを作成できますか?

答えて

0

Unfortunatelly私は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) 

それはすぐにではないですが、あなたはより多くの正確な必要がある場合、あなたはrange()で価値を高め、time.sleep()

に値を減らすことができます
関連する問題