- 增加送丝机及两种焊枪的启动选择,未启用时保留原有简化外设 - 实现外设串口协议、工艺缓存与导入、参数保存、报警输入和独立供电 - 提供外设 WebSocket 状态及控制接口,按连接管理按钮持有和碰撞故障释放 - 添加外设卡片、静态光斑、监控输入与故障操作,统一布局并保存展开状态 - 添加外设协议与固件联动用例,以及点射收尾期间再次出光的回执回归用例 - 整理协议边界及测试条目,记录旧款焊枪驱动和电源报警未被固件转发的现状 - BREAKING CHANGE: 自定义平台实例化 BoardWebSocketServer 时需提供 ExternalDevices 依赖
30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
"""解析可选外部设备,保持未启用时的既有仿真路径"""
|
|
from dataclasses import dataclass
|
|
|
|
from scripts.environment import setting
|
|
from scripts.settings import as_boolean
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ExternalDevices:
|
|
"""一次启动使用的固定设备组合,不向浏览器缓存写入配置"""
|
|
wire: bool = False
|
|
laser: int = 0
|
|
|
|
def __post_init__(self):
|
|
if self.laser not in (0, 1, 2):
|
|
raise ValueError('Laser profile must be 0, 1 or 2')
|
|
|
|
@classmethod
|
|
def resolve(cls, wire=None, laser1=None, laser2=None):
|
|
"""逐项使用显式参数覆盖环境设置,拒绝同一 RS485 接口上的双焊枪"""
|
|
values = [value if value is not None else as_boolean(setting('H723_' + name, 'false'))
|
|
for name, value in (('WIRE', wire), ('LASER1', laser1), ('LASER2', laser2))]
|
|
if values[1] and values[2]:
|
|
raise ValueError('--laser1 and --laser2 cannot be enabled together; use --no-laser1/--no-laser2 to override .env')
|
|
return cls(values[0], 1 if values[1] else 2 if values[2] else 0)
|
|
|
|
def monitor_commands(self):
|
|
"""在 CPU 启动前选择设备,默认组合不改变旧送丝机状态"""
|
|
return f'sysbus.externalDevices Configure {str(self.wire).lower()} {self.laser}\n'
|