首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: modbus_tk在从属模式下不响应

Python: modbus_tk在从属模式下不响应
EN

Stack Overflow用户
提问于 2017-07-17 19:09:07
回答 1查看 770关注 0票数 0

我正在尝试使用modbus_tk库在python中创建Modbus-RTU从站。下面是我试图让它工作的基本代码。

代码语言:javascript
复制
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端口上监视主机正在进行查询),但从主机没有对该查询做出任何响应。

其他信息

代码语言:javascript
复制
 platform: windows 7, 64-bit
 Python version: 3.5.2, 64-bit
 modbus_tk versoin: 0.5.7

我是不是漏掉了什么?或者任何建议。

EN

回答 1

Stack Overflow用户

发布于 2018-01-26 16:06:00

您的while True循环不断地更新数据,可能会占用所有的CPU。

我会尝试在这个循环中有一个小的延迟。就像这样

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45142680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档