Mian_Form.cs中相关的函数代码
负责人需求解读 PN型号比对BUG分析负责人原话把 GlobalVarFun.moduleType 修改成 result 里面的 pn大白话型号比对逻辑中右侧用于校验的「基准型号」用错变量。应当使用 TestResult 中保存的飞思卓具体型号PNSetup界面下拉框选中的型号不能使用GlobalVarFun.moduleType这个方案大类变量。三个PN/型号核心变量区分变量名赋值位置含义说明示例值GlobalVarFun.moduleTypeLogin_Form.cs:322登录界面下拉选择的模块方案大类QSFP/SFP/XFP/QSFPER1TestResult.fibertop_pnSetup_Form.cs:284设置界面下拉选中的飞思卓完整型号PNAccess查表、SQL查询的主键QFP‑MM85FG‑S1DCTestResult.pnTestQSFP.cs:736从光模块EEPROM/Flash偏移168读取16字节ASCII模块出厂烧录PN界面pn_textBox显示内容模块内部烧录的原始PN字符串关键代码对应位置Main_Form.cs:1492pn_textBox.Text TestResult.pn;界面左侧展示模块自身读出的PNSetup_Form.cs:284TestResult.fibertop_pn moduletype_comboBox.Text;用户手动选择的飞思卓目标型号Common.cs:27public static string moduleType QSFP;模块大类初始值为QSFPBUG根源分析 Main_Form.cs:2500‑2518代码两个分支做对称校验客户定制型号、飞思卓型号。if(cpn_checkBox.Checked)// 客户定制型号{// 模块读出PN VS 用户输入的定制PNif((pn_textBox.Text).Trim()!(cpn_textBox.Text).Trim())...}else// 飞思卓型号校验分支{// BUG位置if((pn_textBox.Text).Trim()!(GlobalVarFun.moduleType).Trim())...}客户定制分支逻辑完全正常模块PN 和 用户输入定制PN做比对飞思卓分支错误拿完整长型号和大类简写QSFP对比永远无法匹配必定进入goto RTN_POS。负责人所说result里面的pn指的是TestResult.fibertop_pn✅修复方案 Main_Form.cs 第2512行原代码if((pn_textBox.Text).Trim()!(GlobalVarFun.moduleType).Trim())修改为if((pn_textBox.Text).Trim()!(TestResult.fibertop_pn).Trim())修改完成后两个分支逻辑完全对称客户定制模块烧录PN vs 用户填写定制PNcpn_textBox.Text飞思卓模式模块烧录PN vs 设置界面下拉选择型号TestResult.fibertop_pn⚠️额外需要注意3个风险点1、EEPROM读取字符串带’\0’结束符TestResult.pn通过GetString(flash_data, 168, 16)读取16字节末尾存在空字符\0、空格。C#默认.Trim()不会清除\0会造成比对失败。建议优化写法.Trim(\0, ,\t,\r,\n)2、moduleOnline状态卡死副作用遗留问题校验失败跳转到goto RTN_POS时不会重置moduleOnline标志位。后续Tick周期还会进入「模块可能插入」异常分支需要手动重新点击开始测试。修复在RTN_POS:标签第一行增加moduleOnlinefalse;3、变量赋值时序确认Read_moduleInfo()2476行执行test.GetFlashInfo()完成TestResult.pn赋值之后才执行2512行PN比对变量数据就绪无问题。TestResult.fibertop_pn在Setup界面切换型号就完成赋值执行比对时一定存在有效值。✅待确认与改动清单⚠️口头跟负责人确认result里面的pn是否指TestResult.fibertop_pn如果指TestResult.pn代表模块PN自己和自己对比校验直接失效不符合业务需求。99%场景是fibertop_pn。需要修改两处Main_Form.cs 2512行GlobalVarFun.moduleType→TestResult.fibertop_pn核心修复负责人要求RTN_POS标签起始位置增加moduleOnline false;修复状态卡死问题确认理解无误后即可执行代码修改。以下是对FirstTestProcess()函数中if (GlobalVarFun.tx_test)发射测试代码块约2860行开始的逐段解释整体功能概述这段代码是QSFP光模块初测FirstTest流程中的发射端(Tx)调试部分负责对模块的发射通道进行波长校准、光功率调试、消光比调试、DDM校准等一系列操作。代码被拆分成两个for循环两个循环都是i 1实际只对通道0执行一次。第一个 for 循环波长/TOSA温度调试for(inti0;i1;i)步骤代码说明1TestSet.ch i;设置当前测试通道号仅通道02btnCHState.Text Tx通道 ...更新界面显示当前测试的Tx通道3光开关切换逻辑多模(MM)模块直接切换光开关到通道i1单模模块如果接了光开关就切光开关否则通过软件SoftTxCHEn(i)使能模块的Tx通道i4test.TxTempLookupTableCtrl(false)关闭发射端自动温度补偿查找表功能防止温补干扰调试过程。如果失败则报错返回5TOSA温度调试波长校准如果启用了GlobalVarFun.TOSATempEN•40G模块(EMLTestType0)调用AutoTestEML(min, max)用二分法调节TOSA温度寄存器值通过波长计86120C读取波长使波长逼近目标值•100G模块(EMLTestType!0)调用AutoTestEML_100GLR()这是一个更复杂的4通道波长校准流程会遍历4个通道分别检查波长然后找所有通道的TOSA温度公共可行区间并取中间值最后微调第二个 for 循环VON、光功率、消光比调试 校准写入for(inti0;i1;i)步骤代码说明1-4通道设置、界面更新、光开关切换、关闭温补与第一个循环重复执行相同的初始化操作通道选择、光开关切换、关闭温度补偿TOSA温度调试已注释掉这部分被注释掉了用//注释说明TOSA温度调试已移到第一个循环中独立完成避免重复执行5AutoSetVON()如果启用了GlobalVarFun.VONEN进行VONEML激光器负压/偏置电压调试通过二分法或取中值设置VON寄存器6TxDebugIsOKCheck()判断该通道是否已经调试过检查当前光功率、偏置电流、消光比、DDM误差、APC/MOD寄存器值是否都在合格范围内。如果界面勾选了强制重新调试(txMustDebug_checkBox)则直接返回false强制重新调试7TxPowerAutoSet()如果未调试过进行发射光功率自动调试根据配置选择不同方法线性计算法/二分法/定值法调节APC自动功率控制寄存器使光功率达到目标值8TxErAutoSet()进行发射消光比(ER)自动调试用二分法微调策略先二分查找大致MOD值再根据光功率和Bias偏大/偏小分多种情况进行微调使ER和功率同时达标9test.WriteTxCalData()写入发射校准参数到模块将调试好的校准系数写入模块Flash/寄存器10test.SaveTxDataAfterDebug()保存Tx调试参数保存APC、MOD、温度等调试结果到模块11Converted_analog_values()读取并更新界面上的DDM监控值温度、电压、偏置、Tx功率、Rx功率12DDM功率精度检查从模块读取DDM上报的Tx功率值test.GetTxPwr()与实际光功率计/眼图仪测量值对比如果偏差绝对值超过txPwrMaxErr默认1dB则判定失败13TxFinalTestCheck()已注释掉这是终测的发射参数最终检查在初测中不需要14进度更新标记需要保存记录到数据库更新进度条关键设计要点为什么拆成两个循环第一个循环专门做波长/温度校准这一步会改变TOSA温度影响所有通道的波长第二个循环在波长稳定后再做功率和消光比调试。代码注释掉了第二个循环中的TOSA温度调试部分正是因为它已在第一个循环完成。为什么循环是i 1而不是i 4这说明当前代码版本只测试通道0可能是单通道模块或者多通道的其他通道调试被暂时禁用/硬编码为单通道测试。从代码中可以看到数组下标都是[i]且buf数组支持4通道框架预留了4通道能力。调试方法可配置光功率调试支持3种方法线性计算/二分法/定值法消光比支持2种方法通过GlobalVarFun全局变量配置。错误处理每一步调试失败都会立即返回false将按钮置红色并提示请插入下一只模块不会继续后续步骤。

相关新闻

七、AI工程实践、插件化调试与软件交付

七、AI工程实践、插件化调试与软件交付

七、AI工程实践、插件化调试与软件交付(共8项)1.C中什么是大端、小端? 2.重载函数是否能够通过函数返回值的类型不同来区分? 3.在AI行业中,C/C编程中的动态库和静态库的含义是什么?两者之间什么差异&#x…

2026/10/24 7:06:06 阅读更多 →
BPF 打开文件统计

BPF 打开文件统计

在Linux系统里,想知道哪些文件实时被哪些程序打开,怎么办,于是开始学习BPF了。 ① 环境依赖检查与工具链安装 内核版本至少在4.18以上; 可以使用uname -r命令查看当前内核版本。当然版本过低,还得考虑升级内核或者选择兼容性的旧…

2026/11/4 20:11:12 阅读更多 →
Rust+Slint 实现的“DNA双螺旋”加载动画源码分享

Rust+Slint 实现的“DNA双螺旋”加载动画源码分享

RustSlint 实现的“DNA双螺旋”加载动画源码分享一、效果展示二、源码分享1、工程结构2、main.rs3、build.rs4、main.slint5、Cargo.toml三、实现原理1、 整体架构与数据流2、 核心动画原理:正弦波与径向摆动2.1、 位置与角度固定2.2 、半径计算函数2.3、 动画驱动3…

2026/11/12 1:18:18 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻