2017-07-17 159 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")