新的多线程测试模块
新项目框架搭建总结一、已创建完整文件结构QSFP_AutoTester/ ├── Drivers/ ← 驱动层从旧项目搬过来 你新写的 │ ├── OTP12Driver.cs ← ✅ 你写的直接复用 │ ├── SFP_EVB_Heater.cs ← ✅ 你写的直接复用 │ ├── I2C_Heater.cs ← ✅ 你写的直接复用 │ └── Keysight86120C.cs ← ✅ 波长计驱动OTP没有波长计需要保留 │ ├── Models/ ← 数据模型 │ ├── HardwareConfig.cs ← 核心OTP各槽位板卡映射OPM/VOA/ERM/SWITCH/BERT │ └── GlobalConfig.cs ← 精简自旧 Common.cs去掉串口/GPIB/并口 │ ├── Module/ ← 模块驱动 │ └── QsfpModule.cs ← 从旧 TestQSFP.cs 搬来需修改命名空间 │ ├── Services/ ← 业务逻辑层 │ ├── HardwareService.cs ← 统一封装所有硬件操作每个模块线程持有一个实例 │ └── AttenuatorHelper.cs ← 衰减器校准点管理 │ ├── Workers/ ← 多线程工作单元 │ └── ModuleTestWorker.cs ← 一个线程测一个模块含测试流程骨架 │ ├── Utils/ ← 工具类 │ ├── BitHelper.cs ← ✅ 从旧 Bit.cs 搬来 │ └── SimpleLogger.cs ← ✅ 从旧 SimpleLogger.cs 搬来bug已修 │ └── TestEngine.cs ← 管理4个Worker并发运行二、新架构核心设计思路1. HardwareConfig.cs — 整个项目最重要文件该文件是项目硬件资源映射字典你现场实测的硬件槽位对应关系全部固化在此。示例硬件映射配置// 测试模块1硬件通道分配光开关:SLOT-11,输入1→输出2光功率计:SLOT-05,通道1衰减器Tx:SLOT-07,通道1衰减器Rx:SLOT-09,通道1误码仪:SLOT-01// 测试模块3硬件通道分配光开关:SLOT-12,输入1→输出2光功率计:SLOT-05,通道3衰减器Tx:SLOT-08,通道3衰减器Rx:SLOT-10,通道3误码仪:SLOT-03优势后续现场硬件接线调整仅修改此文件映射关系无需改动业务流程数千行代码。2. HardwareService.cs — 硬件操作统一入口每个模块测试线程独立实例化HardwareService(moduleIndex)后续硬件调用极简无需手动操作槽位hw.SwitchToModule();// 自动查表切换对应通道光开关hw.ReadTxPower();// 自动查表定位板卡、通道读取发射功率hw.SetTxAttenuation(10.0);// 自动查表切换衰减器槽位设置衰减值对比旧代码无需重复手写otp12.SetSlot(05)、otp12.SetSlot(11)这类槽位切换代码。3. 4线程并行测试架构TestEngine.Start()内部并发逻辑for(intslot1;slot4;slot){varworkernewModuleTestWorker(slot,otp12,heater);tasks[slot-1]Task.Run(()worker.RunAsync(cts.Token));}功能同时启动4条独立线程同步测试4个槽位光模块互不干扰。4. 硬件资源并发安全性分析硬件资源并发是否安全原因说明加热台✅ 安全共用一条TCP连接指令携带槽位参数区分模块OTP-12综合测试仪✅ 安全共用TCP连接通过SetSlot指定独立板卡通道光开关 SWD2-02✅ 安全4个模块分配独立通道无抢占冲突衰减器 VOA✅ 安全共8路独立通道4模块各占用Tx/Rx两路误码仪 BE2-03✅ 安全4块独立硬件板卡单模块独占一台光功率计 OPM-04⚠️ 存在冲突仅单块板卡4通道同一时间仅支持读取一路功率⚠️ 光功率计并发冲突解决方案旧代码为串行测试无并发问题4线程并行会出现资源抢占需加线程锁限制访问// HardwareService 内部定义静态全局锁privatestaticreadonlyobject_opmLocknewobject();publicfloatReadTxPower(){SwitchToModule();// 切换光开关操作无冲突无需加锁Thread.Sleep(200);lock(_opmLock)// 锁住光功率计访问同一时刻仅单线程进入{_otp12.SetSlot(05);varresult_otp12.OPM_ReadPower(channel);returnfloat.TryParse(result,outvarpwr)?pwr:-100f;}}短板加锁后读取功率环节退化为串行优化思路错开4线程功率读取时机模块测功率时其他线程执行消光比、I2C读写、衰减器调节等无冲突步骤。三、当前待完成任务按优先级排序第一步适配 QsfpModule.cs 编译环境旧TestQSFP.cs大量依赖旧全局类GlobalVarFun.XXX需全部替换为新项目GlobalConfig.XXX。第二步迁移旧版调试算法逻辑ModuleTestWorker.cs内测试函数目前为空壳逻辑从旧项目Main_Form对应函数复制迁移RxApdDebug()— 来源旧AutoTestRxAPD()RxLosDebug()— 来源旧RxLosAutoSet()TxPowerDebug()— 来源旧AutoSetTxPower_MethodB()TxErDebug()— 来源旧AutoSetTxEr_MethodA()迁移要求原有算法逻辑完全不变仅将底层仪器调用替换为_hw.XXX()统一接口。第三步开发全新UI界面新建WinForm窗口界面布局4个槽位独立面板分别展示测试进度条、设备状态、实时运行日志。四、分阶段工作安排今日任务打开HardwareConfig.cs对照车间实际硬件接线核对全部槽位映射配置打开HardwareService.cs逐行校验每个硬件方法对应的OTP底层SCPI指令是否匹配。明日任务修改QsfpModule.cs文件命名空间替换所有GlobalVarFun引用为新项目GlobalConfig编写简易控制台测试程序验证HardwareService能否正常读取光功率数值。本周整体目标完成RxApdDebug/RxLosDebug/TxPowerDebug/TxErDebug四大调试算法迁移单线程完整跑通单槽位光模块初测全流程改造代码实现4槽位多线程并发测试。