4. 平台总体架构设计
R&S汽车电子测试仪器自动化控制平台的核心挑战在于:既要兼容多种物理总线(LAN、USB、GPIB、CAN、LIN、FlexRay),又要屏蔽不同仪器(示波器、频谱仪、信号源、电源、CANoe等)的SCPI指令差异,同时还要让测试工程师用接近自然语言的方式编排测试序列。如果把这些需求全部塞进一个单体程序,任何一处改动都会牵动全局。因此平台采用五层分层架构,自上而下依次为:用户界面层、业务逻辑层、仪器驱动层、硬件接口层,以及贯穿各层的配置与数据管理层。
分层的本质是依赖倒置:上层只依赖下层暴露的抽象接口,不关心下层如何实现。例如业务逻辑层调用的是IScopeDriver.AcquireWaveform(),而不是直接拼写:WAV:SOUR CHAN1;:WAV:DATA?这样的SCPI命令。这样当仪器从RTO更换为RTP时,只需替换驱动层实现,业务逻辑与界面代码零改动。
各层职责与关键设计
硬件接口层是平台与物理世界的唯一接触点。它封装了VISA(Virtual Instrument Software Architecture)库的调用,向上提供统一的ITransport接口,包含Open()、Write(string)、Read()、Query(string)、Close()五个方法。无论底层是LAN上的VXI-11、USB-TMC还是GPIB,驱动层看到的都是同一个接口。该层还负责超时管理(默认5000ms)、重试策略(最多3次,间隔200ms)和连接状态心跳检测。
仪器驱动层是平台专业性的集中体现。每个仪器型号对应一个驱动类,实现该仪器类别的抽象接口。以示波器为例,IScopeDriver定义如下核心方法:
public interface IScopeDriver : IInstrumentDriver
{
void SetTimebase(double timePerDiv, double offset);
void SetChannel(int ch, bool enabled, double scale, double offset);
void SetTrigger(TriggerMode mode, double level, string source);
double[] AcquireWaveform(int ch, int maxPoints);
MeasurementResult Measure(int ch, MeasType type);
string GetIdentification();
}
RTO示波器驱动内部将SetTimebase(1e-3, 0)翻译为SCPI命令:TIM:SCAL 1e-3;:TIM:OFFS 0,而RTP驱动可能使用:TIM:SCAL和:TIM:POS。这种差异被完全封装在驱动层内部。驱动层还负责SCPI响应的解析与错误码映射,例如将-113 Undefined header转换为InstrumentCommandException。
业务逻辑层是测试流程的“大脑”。测试序列引擎将用户编排的测试步骤(如“设置电源12V → 等待100ms → 采集CAN报文 → 触发示波器单次采集 → 读取上升时间”)解析为可执行的任务图。每个步骤是一个TestStep对象,包含目标仪器、操作方法、参数字典、超时时间和失败处理策略(重试/跳过/终止)。引擎按顺序执行,遇到条件分支时根据前序测量结果动态决定下一步。测量数据管理模块负责将原始波形、频谱和总线报文缓存到内存队列,并支持按测试用例ID检索。
用户界面层采用MVVM模式,测试序列编辑器以树形结构展示步骤,支持拖拽排序和参数内联编辑;实时波形面板通过订阅业务逻辑层的事件总线获取最新测量数据,以20fps刷新;结果报表视图将判定结果(Pass/Fail)与测量值、限值、偏差百分比以表格和趋势图呈现。界面层不直接调用任何仪器驱动,所有操作都通过业务逻辑层的命令接口发起。
模块划分与接口契约
在五层架构基础上,平台进一步按功能域划分为若干模块。硬件接口层包含TransportModule(VISA封装)和DiscoveryModule(仪器发现与资源枚举)。仪器驱动层按仪器类别分为ScopeDriver、SpectrumDriver、SourceDriver、PowerDriver、BusToolDriver五个模块,每个模块内部再按型号细分。业务逻辑层包含SequenceEngine、DataManager、ResourceScheduler、ReportService四个模块。用户界面层包含SequenceEditor、WaveformViewer、ReportViewer、InstrumentMonitor四个模块。
模块间通过接口契约通信。例如SequenceEngine依赖IDataManager和IResourceScheduler,但不依赖具体实现。ResourceScheduler负责仪器资源的互斥锁定:当测试序列同时需要示波器和频谱仪时,调度器按优先级分配,避免两个测试用例争抢同一台仪器。调度器维护一个资源表,记录每台仪器的占用状态、当前持有者和等待队列。
配置与数据管理层
该层贯穿所有层级,提供三项核心能力:参数持久化(仪器地址、驱动配置、测试限值以JSON格式存储,支持版本回滚)、日志记录(每个SCPI命令的发送时间、响应内容和耗时写入环形缓冲区,保留最近10000条)、结果存储(测量数据以HDF5格式归档,支持按时间范围和测试用例检索)。配置层通过IConfigService接口向上层提供Get<T>(string key)和Set<T>(string key, T value)方法,内部使用内存缓存加文件持久化策略,读取延迟低于1ms。