start_button_Click() 批量自动测试按钮代码完整解析

start_button_Click() 批量自动测试按钮代码完整解析

start_button_Click() 批量自动测试按钮代码完整解析笔记

一、函数整体定位

本函数是批量自动测试模式的切换开关逻辑,界面上同一个按钮承担「启动批量调试 / 停止批量调试」双重功能,依靠全局布尔变量autoTestCtrl区分当前状态:

  1. 点击「开始批量调试」(autoTestCtrl == false,停止态)
    • 从全局配置加载全套测试参数并同步展示到界面;
    • 根据模块型号自动匹配对应光功率调试算法;
    • 执行全流程前置校验:仪器连通性、参数上下限合法性、数据库连接、功能配套设备;
    • 全部校验无报错后,开启自动批量模式,工人仅需循环插拔模块,程序自动识别并执行初测/终测。
  2. 点击「停止批量调试」(autoTestCtrl == true,运行态)
    • 关闭自动测试开关,恢复界面控件可编辑状态,结束自动插测循环。

二、逐段代码详细拆解

段1:历史废弃注释代码(版本迭代留存)

//TestSet.txapc_Min = Convert.ToUInt16(GlobalVarFun.apc_min.ToString().Trim());//TestSet.txapc_Max = Convert.ToUInt16(GlobalVarFun.apc_max.ToString().Trim());//TestSet.txmod_Min = Convert.ToUInt16(GlobalVarFun.mod_min.ToString().Trim());//TestSet.txmod_Max = Convert.ToUInt16(GlobalVarFun.mod_max.ToString().Trim());
说明

早期版本中,APC/MOD电流调试区间在此处从全局变量赋值给测试结构体TestSet
后续架构调整,参数统一从配置文件/Access数据库初始化,本段逻辑废弃;
保留注释为版本回溯使用,便于开发人员查看历史实现思路。

段2:规格参数同步展示至界面文本框

txpwr_min_textBox.Text=TestSet.txPwr_Min.ToString("F1");txpwr_max_textBox.Text=TestSet.txPwr_Max.ToString("F1");bias_min_textBox.Text=TestSet.bias_Min.ToString("F1");bias_max_textBox.Text=TestSet.bias_Max.ToString("F1");er_min_textBox.Text=TestSet.txEr_Min.ToString("F1");er_max_textBox.Text=TestSet.txEr_Max.ToString("F1");
文本框绑定参数含义单位
txPwr发射平均光功率上下限dBm
bias激光器APC偏置电流上下限mA
er发射消光比ER合格区间dB
  • ToString("F1"):数值格式化,统一保留1位小数,界面展示规整;
  • 数据源:结构体TestSet,参数预加载自配置窗体Setup_Form或本地Access配置库;
  • 业务作用:产线操作人员启动前可视化核对当前测试规格,确认参数方案无误。

段3:DDM误差容限全局配置加载

//TestSet.rxlos_Min = Convert.ToUInt16(GlobalVarFun.los_min.ToString().Trim());//TestSet.rxlos_Max = Convert.ToUInt16(GlobalVarFun.los_max.ToString().Trim());rxPwrMaxErr=(float)(GlobalVarFun.rx_cal_num);// 接收光功率DDM允许误差txPwrMaxErr=(float)(GlobalVarFun.tx_cal_num);// 发射光功率DDM允许误差erValMaxErr=(float)(GlobalVarFun.ER_cal_num);// 消光比允许误差
  1. LOS阈值上下限赋值逻辑已迁移至其他初始化位置,本段注释留存;
  2. 三类校准误差阈值从全局配置读取,全流程复用:
    • rxPwrMaxErr:接收DDM上报光功率与仪器真值最大允许偏差(典型±1dB);
    • txPwrMaxErr:发射DDM光功率上报误差上限;
    • erValMaxErr:消光比实测值与标准值允许偏差;
  3. 使用场景:初测校准判定、终测精度校验环节做合格阈值比对。

段4:TX预加重默认值、眼图波形叠加点数赋值

TestResult.txpeVal=(Byte)(GlobalVarFun.tx_pe);TestResult.waveforms_count=Convert.ToInt32(GlobalVarFun.waveforms_num);
  1. txpeVal
    TX预加重(Pre-emphasis)出厂默认补偿系数,存入测试结果结构体,初测完成后写入模块寄存器,补偿PCB高速信号高频损耗;
  2. waveforms_count
    眼图仪86100D波形叠加累计数量;数值越大,平均降噪后眼图波形越稳定、测量精度越高,但单次眼图采集耗时更长;
    该参数是终测眼图模板功能前置校验的判断依据。

段5:按模块封装类型自动切换光功率调试算法

if(GlobalVarFun.moduleType=="QSFP"){GlobalVarFun.txpwr_debug_method=0x00;// 默认:线性计算法if(GlobalVarFun.cob_ld){// 0x00:线性计算法 apc-->uw & bias// 0x11: 普通二分法 apc-->dBm// 22: 定值法 COB-LDGlobalVarFun.txpwr_debug_method=0x11;// COB-LD封装用二分法// 0x00:普通二分法 0x11: 逐步逼近法 for COB-LDGlobalVarFun.txer_debug_method=0x00;}}
算法区分逻辑
  1. 标准普通QSFP(txpwr_debug_method = 0x00线性法)
    假设激光器DAC电流与输出光功率呈近似线性正比,通过一次比例运算直接算出目标DAC值,调试速度快,适配线性度良好的普通TOSA器件。
  2. COB-LD板上芯片封装(cob_ld = true
    COB封装激光器P-I发光曲线非线性严重,线性法精度不足,切换二分迭代搜索法0x11;消光比ER调试统一使用普通二分法0x00
设计优势

一套测试程序通过全局标识自动适配多硬件工艺模块,无需修改核心测试流程,兼容性更强。

段6:终测专属眼图模板前置校验

if(GlobalVarFun.testType=="finalTest"){if((TestResult.waveforms_count>=100)&&(eyeMaskIsOpened==false)){MessageBox.Show("眼图模板未打开,不能进行眼图累计点测试,请重新连接86100! 请确认!!!","警告",...);return;}}
  1. 判断规则:波形叠加数≥100代表本次流程需要执行眼图模板Mask质检;若眼图仪模板功能未开启,弹窗告警直接拦截启动;
  2. 初/终测差异化逻辑:
    • 初测核心目标是参数整定,波形允许临时超标,不强制校验眼图模板;
    • 终测为出厂出货质检,波形必须完全符合行业协议模板规范,因此增加强制校验关卡。

段7:调试参数上下限合法性校验(防御性编程)

if((TestSet.txapc_Max<TestSet.txapc_Min)||(TestSet.txmod_Max<TestSet.txmod_Min)||(TestSet.rxlos_Max<TestSet.rxlos_Min)){MessageBox.Show("APC/MOD/LOS调试范围设置错误(max<min)! 请确认!!!","警告",...);return;}

校验三组核心DAC搜索区间:APC偏置电流、MOD调制电流、LOS告警阈值;
若配置时人工填反数值(最大值 < 最小值),直接终止启动,避免调试循环逻辑异常、硬件DAC超区间烧毁器件。

段8:本地Access配置数据库连通校验

if(GlobalVarFun.access_connect_status==false){MessageBox.Show("Access数据库连接失败! 请确认!!!","警告",...);return;}

两套数据库分工:

  • Access本地库(.mdb):存储测试方案、规格阈值、调试区间配置;
  • SQL Server服务端库:存储每一只模块完整生产测试记录,用于出厂追溯;
    配置库断开则所有参数无法读取,禁止启动测试。

段9:接收Rx通道配套仪器、参数前置校验

if(autoTestCtrl==false)// 当前为停止状态,本次点击动作是启动批量测试{if(GlobalVarFun.rx_ddm_test){// 9.1 DDM校准必备硬件校验:光衰减器 + 光功率计if((GlobalVarFun.optoAtt_connected==false)||(GlobalVarFun.optoMeter_connected==false)){MessageBox.Show("请先连接光衰减器和光功率计!","警告",...);return;}// 9.2 全量参数合法性校验标记if(GlobalVarFun.testDataIsOK==false){MessageBox.Show("测试参数设置异常,无法启动批量测试! 请先进行 参数设置校验 !!!",...);return;}// 9.3 灵敏度测试必备误码仪BERT校验if(GlobalVarFun.sen_test){if(GlobalVarFun.pssbert_connected==false){MessageBox.Show("使用灵敏度测试,请先连接误码仪!","警告",...);return;}}}}
  1. DDM校准硬件要求:
    • 光衰减器:多档位精准衰减光功率,生成标准校准光信号;
    • 光功率计:读取真实光功率真值,作为DDM系数计算基准;
  2. testDataIsOK校验标记:操作人员在配置界面完成参数填写后,必须执行「参数设置校验」,全部规格合法后该标识才会置true,防止错误配置流入产线;
  3. 灵敏度测试硬性依赖BERT误码仪:产生PRBS测试码、长期统计比特误码率,无设备则无法判定弱光接收性能。

段10:发射Tx通道仪器连通性分层校验

if(GlobalVarFun.tx_test){// 10.1 眼图仪86100D连通校验(初测强制,终测宽松)if(GlobalVarFun.instrument_connected==false){if(GlobalVarFun.testType=="firstTest"){MessageBox.Show("请先连接眼图仪!","警告",...);return;}else{MessageBox.Show("终测:发射只测试发光功率,不进行发射眼图参数测试!!!","提示",...);// 终测无眼图仪仅提示,不拦截流程}}// 10.2 光功率采集方式二选一校验if(GlobalVarFun.optoMeter_connected==false&&GlobalVarFun.power_use_DAC==false){MessageBox.Show("请先连接光功率计!","警告",...);return;}// 10.3 DAC估算功率模式必须配套眼图仪if(GlobalVarFun.power_use_DAC==true&&GlobalVarFun.instrument_connected==false){MessageBox.Show("使用眼图仪测试发光功率,请先连接眼图仪!","警告",...);return;}}
  1. 眼图仪差异化规则:
    • 初测强制连接:ER消光比自动调试需要仪器实时测量数值,无设备无法完成整定;
    • 终测可无设备:仅用光功率计校验平均功率,ER通过寄存器参数间接复核,仅弹窗提示不阻断;
  2. 发射功率两种采集模式,必须满足至少一种:
    • 外接光功率计实测:精度高,量产标准方案;
    • DAC数值估算:依靠寄存器电流换算功率,速度快、精度偏低;
      两种设备均未连接则无法获取功率,拦截启动;
  3. DAC估算模式附加约束:ER消光比仍需眼图仪测量,因此该模式下仪器不可缺失。

段11:全部校验通过,切换至自动批量运行状态

GlobalVarFun.sql_record_status=GlobalVarFun.sql_connect_status;autoTestCtrl=true;// 标记自动测试运行中btnSetup.Enabled=false;// 禁用参数设置按钮start_button.BackColor=Color.GreenYellow;// 主按钮变色start_button.Text="停止批量调试";// 切换按钮文字Startautoset_button.BackColor=Color.Orange;// 单测提示灯变色Startautoset_button.Text="自动批量测试启动,请插入模块......";txMustDebug_checkBox.Enabled=false;// 锁定调试选项复选框
状态变更逻辑
  1. sql_record_status:同步SQL数据库连接状态,仅数据库正常连通时才允许存储测试记录;
  2. autoTestCtrl = true核心开关:后台轮询逻辑持续检测模块I2C在位信号,识别到新模块自动执行初/终测流程;
  3. UI锁定防护:批量运行期间禁用参数设置、调试选项,防止操作人员中途修改配置导致测试异常;
  4. 多控件变色+文字提示,给产线直观视觉反馈,明确当前等待插模块状态。
批量自动运行循环流程
启动批量模式(autoTestCtrl=true) ↓ 循环检测模块硬件在位信号 ├─ 检测到模块插入 → 自动执行FirstTestProcess / FinalTestProcess ├─ 测试完成(红绿提示区分OK/NG) ├─ 检测到模块拔出 └─ 回到等待插入状态,持续循环

段12:else分支 — 停止自动批量测试

else// autoTestCtrl == true,当前处于运行态,点击执行停止逻辑{autoTestCtrl=false;// 关闭自动测试总开关btnSetup.Enabled=true;// 恢复设置按钮可编辑start_button.BackColor=Color.Gray;// 主按钮置灰start_button.Text="开始批量调试";// 还原按钮文字Startautoset_button.BackColor=Color.OrangeRed;Startautoset_button.Text="自动批量测试已停止......";txMustDebug_checkBox.Enabled=true;// 解锁调试复选框}
  1. autoTestCtrl = false关闭自动插测循环,不再响应模块插入信号;
  2. 全部UI控件恢复初始可操作状态,允许修改测试参数;
  3. 补充说明:停止指令不会强行中断当前正在运行的模块测试,需等待单模块测试流程执行完毕后才会完全退出自动模式。

三、启动前置校验汇总对照表

序号校验项目触发校验条件校验失败处理逻辑
1眼图模板功能开启校验终测流程 + 波形叠加数≥100弹窗警告,直接阻止启动
2APC/MOD/LOS区间合法性每次启动批量测试必检弹窗警告,直接阻止启动
3Access本地配置库连通每次启动批量测试必检弹窗警告,直接阻止启动
4光衰减器+光功率计连通开启Rx DDM校准功能弹窗警告,直接阻止启动
5全局参数校验标记testDataIsOK开启Rx通道测试弹窗警告,直接阻止启动
6BERT误码仪连通校验开启接收灵敏度sen_test弹窗警告,直接阻止启动
786100D眼图仪连通校验开启Tx发射测试 + 流程为初测弹窗警告,直接阻止启动
8光功率采集设备二选一校验开启Tx发射测试弹窗警告,直接阻止启动
9DAC估算模式配套眼图仪Tx测试 + 启用DAC估算功率弹窗警告,直接阻止启动

四、项目配套仪器设备总表

仪器名称连通标识变量产线测试用途
光衰减器optoAtt_connectedDDM校准、灵敏度测试,精准调节输入光功率
光功率计optoMeter_connected读取光功率真值,DDM校准、发射功率判定基准
BERT误码仪pssbert_connected生成PRBS码型、统计误码率,接收灵敏度测试必备
Keysight 86100D眼图仪instrument_connected测量ER、抖动、眼高眼宽、眼图模板质检、初测ER整定
光路光开关optoSwitch_connected4通道光路自动切换
SQL Server数据库sql_connect_status存储每只模块完整生产测试记录,用于出厂追溯
Access本地配置库access_connect_status存储测试规格、调试区间、全局参数配置

五、代码整体设计亮点总结

  1. Toggle切换按钮设计
    单按钮复用,依靠autoTestCtrl布尔状态区分启停,简化界面布局,降低操作人员学习成本。
  2. 多层前置安检关卡
    启动前逐项校验仪器、参数、数据库,提前拦截配置/硬件故障,避免测试中途报错、产线节拍浪费。
  3. 全局配置灵活适配
    通过GlobalVarFun各类功能开关,一套程序兼容普通QSFP、COB-LD多封装模块,区分初测/终测两套质检逻辑。
  4. 全链路防御性编程
    参数上下限反向校验、硬件连通性校验,规避人工配置失误、仪器断连造成硬件损坏、批量不良流出。
  5. 差异化初/终测约束
    针对调试阶段、出货质检阶段设计不同仪器强制规则,兼顾调试灵活性与出厂质量管控标准。
  6. 多算法自适应调度
    内置线性法、二分法光功率调试算法,自动根据模块封装工艺切换,适配不同激光器硬件特性。