QSFPER1开发文档1

QSFPER1自动测试功能开发操作文档

文档目的

在现有QSFP自动测试工程内,新增QSFPER1(ER1)模块自动校准流程;基于接口+继承架构扩展,区分普通QSFP与QSFPER1硬件操作,实现Rx VAgc调节、APC调节、BER闭环校准、眼图判定、Flash校准数据保存整套自动化流程。

架构核心规范

  1. ModuleTest:顶层接口,定义所有模块必须具备的功能
  2. QSFP:普通QSFP基础实现类
  3. QSFPER1 : QSFP:ER1模块扩展子类,实现ER1专属寄存器操作
  4. Main_Form:负责测试流程调度、仪器交互(衰减器、BER、眼图仪、光功率计)、界面逻辑
  5. 重要禁忌 :不要直接复制UI按钮button_Click完整代码;UI代码包含滑块、弹窗MessageBox,只提取纯粹寄存器操作逻辑封装进类。

一、手动操作 → 自动程序方法映射表

手动界面操作 自动程序对应方法说明
点击读取 SetDebugPWD() 进入调试模式
调节RxVagc 新增 SetRxVagc(UInt16 value)
读取BER 复用现有BER仪表调用函数
关闭/打开Tx SoftTxDis() / SoftTxCHEn()
调节APC SetTxApcBias(UInt16 value)
读取Rx ADC GetRxADC()
读取Tx ADC GetTxADC()
光功率校准 读取光功率计数值,运算后写入模块校准寄存器
写入Flash ER1专属Flash保存命令

现状说明:工程已有SetDebugPWD()SetTxApcBias()GetRxADC()GetTxADC()禁止重复编写,直接复用

二、开发分步操作步骤

步骤1:在公共接口 ModuleTest 增加ER1专属方法

文件路径:Common.csModuleTest 接口

追加接口定义:

复制代码
bool SetRxVagc(UInt16 setVal);
bool SaveER1Calibration();

关键原理

Main_Form中全局变量类型为ModuleTest(面向接口编程);

只有接口声明方法,主程序才能通过 test.SetRxVagc(xxx) 调用子类实现;

强制约束:所有实现类(QSFP、QSFPER1)都必须实现这两个方法,编译才不会报错。

普通QSFP类实现方案:直接写占位方法,返回false,不改动原有业务流程。

步骤2:新建类文件 TestQSFPER1.cs

命名空间:FibertopTest_Common

类定义:继承QSFP基类

复制代码
namespace FibertopTest_Common
{
    public class QSFPER1 : QSFP
    {
        /// <summary>
        /// ER1 设置RxVagc
        /// 硬件:ER1 Page06,地址0x9B + 当前通道
        /// </summary>
        public bool SetRxVagc(UInt16 setVal)
        {
            // 使用工程现有I2C接口 + 通道选择逻辑
            return false; // 先占位调试,寄存器调试完成替换真实逻辑
        }

        /// <summary>
        /// 保存ER1校准数据至Flash
        /// 硬件:ER1 Page06,写入0x83 = 0x02
        /// </summary>
        public bool SaveER1Calibration()
        {
            return false; // 先占位调试
        }
    }
}

注意事项

原手动工程TestQSFPER1.cs不能直接拷贝:

手动工程使用独立仪表接口,和自动工程ModuleTest接口不兼容。

若需要访问基类私有成员i2cSelectTable()

方案A:将私有修饰符改为protected

方案B:直接把ER1底层寄存器读写逻辑下沉到QSFP基类

步骤3:登录窗体增加模块类型实例化分支

文件:Login_Form.cs

找到模块实例化代码,按下拉框文本区分创建对象:

复制代码
if (type_comboBox.Text == "QSFPER1")
{
    GlobalVarFun.mTest = new QSFPER1() as ModuleTest;
}
else if (type_comboBox.Text == "QSFP")
{
    GlobalVarFun.mTest = new QSFP() as ModuleTest;
}

配套核查:

  1. 下拉框Item内确认存在字符串QSFPER1
  2. 后台数据库参数配置与ER1模块匹配

步骤4:Main_Form 实现自动测试流程 FirstTestProcess()

仪器调用硬性规则:衰减器、BER仪、眼图仪、光功率计必须复用现有工程封装方法,禁止凭空新建接口 (例如禁止直接手写IBerAnalyzer.ReadBer()

4.1 Rx接收校准流程

复制代码
if (!test.SetDebugPWD())
    return false;

// 4通道轮询Rx校准
for (int ch = 0; ch < 4; ch++)
{
    TestSet.ch = ch;
    // 1. RxVagc 从约170起始迭代调节
    // 2. 每次修改Vagc后读取BER
    // 3. 闭环调节直到 BER < 1e-4

    // 4. 设置衰减器 -6dBm,读取光功率计、RxADC
    // 5. 设置衰减器 -8dBm,读取光功率计、RxADC
    // 6. 两点数据计算Rx校准参数
}
// 循环结束后执行:保存Rx校准数据、写入Flash

4.2 Tx发射校准流程

复制代码
test.SetDebugPWD();
test.SoftTxDis(true);
test.SoftTxDis(false);

// 4通道轮询Tx校准
for (int ch = 0; ch < 4; ch++)
{
    TestSet.ch = ch;
    // 1. APC Bias从约160起始调节
    // 2. 读取眼图仪 TDECQ、Outer ER
    // 3. 闭环判定条件:TDECQ < 3.5 && Outer ER > 4.0

    // 4. 读取光功率计、TxADC
    // 5. 计算Tx校准参数
}
// 循环结束后执行:保存Tx校准数据、写入Flash

三、推荐迭代开发顺序(分步调试,降低排错难度)

原则:完成一步编译、联调一次,不要一次性写完整套流程

  1. 实现并基础测试 SetDebugPWD() 连通性
  2. 实现 SetRxVagc(),通过读取寄存器确认硬件值真实变化
  3. 搭建RxVagc + BER闭环调节循环
  4. 实现 -6dBm / -8dBm 两点Rx功率校准采集
  5. 实现APC调节 + 眼图指标判定逻辑
  6. 调试校准数据运算逻辑
  7. 最后启用Flash写入功能(Flash频繁擦写有硬件风险,放到最后)

四、分层规范(排错核心准则)

复制代码
TestQSFPER1.cs  → 只负责【模块I2C寄存器读写、硬件指令】
Main_Form.cs    → 只负责【测试流程调度、仪表控制、数据运算、判定逻辑】

分层优势:故障快速定位

  • 调节数值不生效 → 查I2C寄存器层(QSFPER1类)
  • BER/眼图指标不达标 → 查流程、仪表、算法逻辑(Main_Form)

五、常见坑提前规避

  1. ❌ 不要复制UI按钮内带MessageBox、滑块控件操作的代码,只提取寄存器操作
  2. ❌ 不要直接移植旧手动工程的TestQSFPER1(两套仪表接口不互通)
  3. ❌ 接口新增方法后,忘记给普通QSFP增加占位实现,直接编译报错
  4. ❌ 先调试Flash写入;Flash调试前置容易造成模块非必要反复擦写
  5. ❌ 通道切换逻辑遗漏,轮询4通道时忘记更新当前通道选择

如果你需要,我可以把这份文档导出为markdown文本,或者进一步生成可以直接复制进VS的接口、类框架代码。

相关推荐
瀚高PG实验室1 天前
SQL优化案例:使用分区表优化SQL查询性能
linux·服务器·数据库·sql·microsoft·postgresql
编码者卢布1 天前
【Azure Key Vault】资源组被误删后,如何恢复 Azure Key Vault?
microsoft·flask·azure
海盗12342 天前
微软技术周报 · 2026-08-11~2026-08-18
人工智能·microsoft·.net
Zaimmm2 天前
临床文献智能检索哪家强?2026年主流AI循证平台深度测评与推荐
大数据·人工智能·microsoft
Leinwin2 天前
微软MAI-Code-1.1-Flash技术解读:Token效率提升25%,CLI与.NET全面升级
microsoft·.net
淡海水2 天前
01-08-运行时-虚方法分派与接口调用的底层实现
linux·windows·microsoft·c#·虚方法·vtable·vsd
ONLYOFFICE2 天前
微软365停止支持,如何实现无痛切换?
microsoft·开源·onlyoffice
circuitsosk3 天前
AI输出的“质检员”:构建智能体质量评估、异常检测与人工兜底的三层防线
人工智能·python·microsoft·正则表达式·langchain
TunerT_TQ3 天前
Microsoft 微软 Fluent UI 源码静态评测:从工程结构、测试线索到交付治理的完整解读
microsoft·开源·github