"""模拟环境中的基础读写示例""" from line_laser_modbus import LineLaserClient, ModeCommand, Pose6D, SerialConfig from line_laser_modbus.simulator import SimulatedModbusBackend def main() -> None: """演示不连接硬件时如何使用客户端""" # 模拟后端实现了客户端需要的最小 Modbus 接口 # 这让开发和测试可以在没有串口和控制器的机器上运行 backend = SimulatedModbusBackend() # 端口名在模拟模式下不会真正打开 # 这里保留 SIM 只是让配置含义更清晰 config = SerialConfig(port="SIM") # 客户端支持上下文管理器 # 进入 with 时连接后端退出 with 时关闭后端 with LineLaserClient(config, backend=backend) as client: print("初始状态", client.read_status().name) # write_mode 会直接写寄存器不做状态机校验 # 如果业务需要遵守协议切换规则可以使用 switch_mode client.write_mode(ModeCommand.ONLINE_TRACKING) print("当前模式", client.read_mode().name) # 目标示教位姿和纠偏量都使用 Pose6D 表达 # 字段顺序固定为 X Y Z A B C target_pose = Pose6D(100.0, 20.0, 30.0, 0.0, 15.0, 90.0) correction = Pose6D(1.0, 0.0, -0.5, 0.0, 0.0, 2.0) client.write_target_pose(target_pose) client.write_correction(correction) # 模拟后端提供便捷读取方法 # 真实设备运行时通常由控制器消费这些寄存器 print("模拟目标位姿", backend.target_pose()) print("模拟纠偏量", backend.correction()) if __name__ == "__main__": main()