Files
Uni-Lab-OS/unilabos/devices/laiyu_liquid_test/driver_status_test.py

59 lines
1.9 KiB
Python

import logging
from xyz_stepper_driver import (
ModbusRTUTransport,
ModbusClient,
XYZStepperController,
MotorAxis,
)
logger = logging.getLogger("XYZStepperCommTest")
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
def test_xyz_stepper_comm():
"""仅测试 Modbus 通信是否正常(并输出寄存器数据,不做电机运动)"""
port = "/dev/ttyUSB1"
baudrate = 115200
timeout = 1.2 # 略长避免响应被截断
logger.info(f"尝试连接 Modbus 设备 {port} ...")
transport = ModbusRTUTransport(port, baudrate=baudrate, timeout=timeout)
transport.open()
client = ModbusClient(transport)
ctrl = XYZStepperController(client)
try:
logger.info("✅ 串口已打开,开始读取三个轴状态(打印寄存器内容) ...")
for axis in [MotorAxis.X, MotorAxis.Y, MotorAxis.Z]:
addr = ctrl.axis_addr[axis]
try:
# # 在 get_status 前打印原始寄存器内容
# regs = client.read_registers(addr, ctrl.REG_STATUS, 6)
# hex_regs = [f"0x{val:04X}" for val in regs]
# logger.info(f"[{axis.name}] 原始寄存器 ({len(regs)} 个): {regs} -> {hex_regs}")
# 调用 get_status() 正常解析
status = ctrl.get_status(axis)
logger.info(
f"[{axis.name}] ✅ 通信正常: steps={status.steps}, speed={status.speed}, "
f"current={status.current}, status={status.status.name}"
)
except Exception as e_axis:
logger.error(f"[{axis.name}] ❌ 通信失败: {e_axis}")
except Exception as e:
logger.error(f"❌ 通讯测试失败: {e}")
finally:
transport.close()
logger.info("🔌 串口已关闭")
if __name__ == "__main__":
test_xyz_stepper_comm()