You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ModBusTCP服务器在目标设备启动即关闭,请求技术排查帮助

问题:ModBusTCP服务器部署到目标设备后启动即关闭

我编写了一个测试ModBusTCP数据传输的简易服务器程序,在IP为192.168.43.102的个人电脑上测试正常,但部署到IP为192.168.43.103的设备后,服务器启动后立即关闭,无法排查原因,恳请帮助。

目标设备上运行的代码

from pyModbusTCP.server import ModbusServer
from time import sleep

# Create an instance of ModbusServer
server = ModbusServer("192.168.43.103", 502, no_block=True)

try:
    print("Start server...")
    server.start()
    print("Server is online")
    state = [0, 0]
    while True:
        # Read input from user
        reg0 = int(input("Enter value for Register 0: "))
        reg1 = int(input("Enter value for Register 1: "))

        # Write to DataBank
        server.data_bank.set_holding_registers(0, [reg0])
        server.data_bank.set_holding_registers(1, [reg1])

        # Check if state has changed
        if state != server.data_bank.get_holding_registers(1):
            state = server.data_bank.get_holding_registers(1)
            print("Value of Register 1 has changed to " + str(state[0]))

        sleep(0.5)

except:
    print("Shutdown server...")
    server.stop()
    print("Server is offline")

运行截图

服务器启动后立即关闭的运行界面


排查建议
  • 验证目标设备的绑定IP:用ifconfig(Linux)或ipconfig(Windows)查看设备实际网卡IP,确认192.168.43.103是当前设备的有效IP,避免绑定不存在的网卡地址导致启动失败。
  • 检查端口权限:502属于1024以下的系统端口,部分系统非root/管理员用户无法直接使用。尝试以管理员/root权限运行程序,或临时修改端口为1024以上(如5020)测试。
  • 捕获具体异常信息:当前代码的except块未明确捕获异常,无法得知崩溃原因。修改代码打印异常详情:
    except Exception as e:
        print(f"错误详情: {str(e)}")
        print("Shutdown server...")
        server.stop()
        print("Server is offline")
    
  • 同步pyModbusTCP版本:确认目标设备与测试电脑的pyModbusTCP版本一致,不同版本可能存在兼容性问题,可执行pip install pyModbusTCP --upgrade同步版本。
  • 测试无交互运行:如果目标设备是无桌面的嵌入式设备/服务器,input()函数会因无标准输入直接触发异常退出。可注释掉用户输入代码,改用自动生成测试值验证服务器是否能正常运行:
    # 替换原while循环内容
    while True:
        reg0 = int(time.time() % 100)
        reg1 = int(time.time() % 200)
        server.data_bank.set_holding_registers(0, [reg0])
        server.data_bank.set_holding_registers(1, [reg1])
        if state != server.data_bank.get_holding_registers(1):
            state = server.data_bank.get_holding_registers(1)
            print("Value of Register 1 has changed to " + str(state[0]))
        sleep(0.5)
    

内容的提问来源于stack exchange,提问作者ᅠWOlF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:42:23