2017-07-17 39 views
0

modbus_tkライブラリを使用して、PythonでModbus-RTUスレーブを作成しようとしています。以下は私がそれを動作させるようにしている基本的なコードです。Python:スレーブモードでmodbus_tkが応答しない

import modbus_tk 
import modbus_tk.defines as cst 
from modbus_tk import modbus_rtu 
import serial 

PORT = 'COM1' 
modbusServ = 
modbus_rtu.RtuServer(serial.Serial(PORT),baudrate=9600, 
        bytesize=8, parity='N', stopbits=1, xonxoff=0) 
print("start") 
try: 
    modbusServ.start() 
    print("receiver module started") 
    slave_1 = modbusServ.add_slave (1) 
    slave_1.add_block ("a",cst.ANALOG_INPUTS,200, 7) 
    slave_1.set_values ("a",200,range(7)) 
    slave_2 = modbusServ.add_slave(2) 
    slave_2.add_block ("b",cst.HOLDING_REGISTERS,200,7) 
    slave_2.set_values("b",200,range(7)) 
    slave_5 = modbusServ.add_slave(5) 
    slave_5.add_block("c",cst.COILS,0,7) 
    slave_5.set_values("c",0,range(1)) 

    while True: 
     slave_1.set_values ("a",200,1) 
     slave_1.set_values ("a",201,2) 
     slave_1.set_values ("a",202,3) 
     slave_1.set_values ("a",203,4) 
     slave_1.set_values ("a",204,5) 
     slave_1.set_values ("a",205,6) 
     slave_1.set_values ("a",206,7) 
finally: 
    print("ideally do not come here") 

コードが実行されると、私は別のマスターからいくつかの読取り問合せをしています(私はマスターがクエリを作っているCOMポートに監視することができる)が、スレーブは、クエリに対する応答を与えていません。

その他の情報

platform: windows 7, 64-bit 
Python version: 3.5.2, 64-bit 
modbus_tk versoin: 0.5.7 

は、私が行方不明ですいくつかのことはありますか?または任意の提案。

答えて

0

お客様のwhile Trueループは常にデータを更新しており、すべてのCPUを使用します。

私はこのループで少し遅れを取ろうとします。何かのように

import modbus_tk 
import modbus_tk.defines as cst 
from modbus_tk import modbus_rtu 
import serial 
import time # add this 

PORT = 'COM1' 
modbusServ = modbus_rtu.RtuServer(serial.Serial(PORT),baudrate=9600, 
       bytesize=8, parity='N', stopbits=1, xonxoff=0) 
print("start") 
try: 
    modbusServ.start() 
    print("receiver module started") 
    slave_1 = modbusServ.add_slave (1) 
    slave_1.add_block ("a",cst.ANALOG_INPUTS,200, 7) 
    slave_1.set_values ("a",200,range(7)) 
    slave_2 = modbusServ.add_slave(2) 
    slave_2.add_block ("b",cst.HOLDING_REGISTERS,200,7) 
    slave_2.set_values("b",200,range(7)) 
    slave_5 = modbusServ.add_slave(5) 
    slave_5.add_block("c",cst.COILS,0,7) 
    slave_5.set_values("c",0,range(1)) 

    while True: 
     slave_1.set_values ("a",200,1) 
     slave_1.set_values ("a",201,2) 
     slave_1.set_values ("a",202,3) 
     slave_1.set_values ("a",203,4) 
     slave_1.set_values ("a",204,5) 
     slave_1.set_values ("a",205,6) 
     slave_1.set_values ("a",206,7) 
     time.sleep(0.1) # small delay to let the communication thread doing his job 
finally: 
    print("ideally do not come here") 
関連する問題