diff --git a/ADP电路图/ADP (1).pdf b/ADP电路图/ADP (1).pdf new file mode 100644 index 0000000..6e79020 Binary files /dev/null and b/ADP电路图/ADP (1).pdf differ diff --git a/ADP电路图/ADP设备接线图.xlsx b/ADP电路图/ADP设备接线图.xlsx new file mode 100644 index 0000000..28e5ab4 Binary files /dev/null and b/ADP电路图/ADP设备接线图.xlsx differ diff --git a/TestingModule/ViewModels/StepsManagerViewModel.cs b/TestingModule/ViewModels/StepsManagerViewModel.cs index 8df45a3..ecc6b3a 100644 --- a/TestingModule/ViewModels/StepsManagerViewModel.cs +++ b/TestingModule/ViewModels/StepsManagerViewModel.cs @@ -380,6 +380,12 @@ namespace TestingModule.ViewModels UnsubscribeStepCollections(); SubscribeStepCollections(); + // 通知 UI 刷新 DisplaySteps(导航状态虽然引用同一 Program,但集合实例已变) + RaisePropertyChanged(nameof(MainDisplaySteps)); + RaisePropertyChanged(nameof(ErrorDisplaySteps)); + RaisePropertyChanged(nameof(MainCurrentProgram)); + RaisePropertyChanged(nameof(ErrorCurrentProgram)); + // 集合被整体替换后,对新集合重新编号 Application.Current?.Dispatcher.BeginInvoke(new Action(() => { diff --git a/generate_adp_tests.py b/generate_adp_tests.py new file mode 100644 index 0000000..26ee9c0 --- /dev/null +++ b/generate_adp_tests.py @@ -0,0 +1,729 @@ +""" +ADP 测试项 (.adp) 文件生成器 +根据 ADP 电路图设备拓扑自动生成电性能测试项文件 +""" +import json +import uuid +import os + +OUTPUT_DIR = r"D:\ADP\子程序" + +# ============================================================ +# 设备ID - 全部设为null,在ADP软件中配置实际设备后自动匹配 +# ============================================================ + +# CancellationToken 类型 +CT_TYPE = "System.Threading.CancellationToken, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" + +def uid(): + return str(uuid.uuid4()) + +def make_param(name, type_str, value, category=0, is_save=False, is_output=False): + """创建参数对象""" + return { + "ID": uid(), + "IsVisible": True, + "Name": name, + "Type": type_str, + "Category": category, + "IsGlobal": False, + "InitialValue": None, + "Value": value, + "LowerLimit": None, + "UpperLimit": None, + "Result": True, + "IsUseVar": False, + "IsSave": is_save, + "VariableName": None, + "VariableID": None, + "IsOutputToReport": is_output + } + +def make_ct_param(): + return make_param("ct", CT_TYPE, None) + +def make_result_param(name="Result", type_str="System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", value=""): + return make_param(name, type_str, value, category=1, is_save=True, is_output=True) + +def make_method_step(name, method_name, full_name, device_id, params, is_used=True, description=None): + """创建方法步骤""" + return { + "ID": uid(), + "IsUsed": is_used, + "Index": 0, # Will be set later + "Name": name, + "StepType": "方法", + "Method": { + "Name": method_name, + "FullName": full_name, + "DeviceID": device_id, + "Parameters": params + }, + "SubProgram": None, + "LoopCount": None, + "LoopStartStepId": None, + "OKExpression": None, + "GotoSettingString": "", + "OKGotoStepID": None, + "NGGotoStepID": None, + "Description": description + } + +def make_delay_step(seconds, name=None, is_used=True): + """创建延时步骤""" + return make_method_step( + name or f"延时{seconds}秒", + "Delay_s", + "Command.Delay", + None, + [ + make_param("second", "System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(seconds)), + make_ct_param() + ], + is_used=is_used + ) + +def make_loop_start(count, name="循环开始", is_used=True): + """创建循环开始步骤""" + return { + "ID": uid(), + "IsUsed": is_used, + "Index": 0, + "Name": name, + "StepType": "循环开始", + "Method": { + "Name": None, + "FullName": None, + "DeviceID": None, + "Parameters": [ + make_param("循环次数", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", None) + ] + }, + "SubProgram": None, + "LoopCount": count, + "LoopStartStepId": None, + "OKExpression": None, + "GotoSettingString": "", + "OKGotoStepID": None, + "NGGotoStepID": None, + "Description": None + } + +def make_loop_end(loop_start_step, name="循环结束", is_used=True): + """创建循环结束步骤""" + return { + "ID": uid(), + "IsUsed": is_used, + "Index": 0, + "Name": name, + "StepType": "循环结束", + "Method": None, + "SubProgram": None, + "LoopCount": None, + "LoopStartStepId": loop_start_step["ID"], + "OKExpression": None, + "GotoSettingString": "", + "OKGotoStepID": None, + "NGGotoStepID": None, + "Description": None + } + +def set_indices(steps): + """设置步骤索引""" + for i, step in enumerate(steps): + step["Index"] = i + 1 + return steps + +def make_program(steps, parameters=None, devices=None): + """创建完整的程序文件""" + return { + "ID": uid(), + "StepCollection": set_indices(steps), + "Parameters": parameters or [], + "Devices": devices or [] + } + +# ============================================================ +# 1. 设备初始化 +# ============================================================ +def gen_device_init(): + steps = [] + + # --- IT7800E 交流源初始化 --- + steps.append(make_method_step("交流源-重置设备", "重置设备", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()])) + steps.append(make_method_step("交流源-清除错误", "清除错误队列和状态字节", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()])) + steps.append(make_method_step("交流源-查询设备标识", "查询设备标识", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("交流源-切换远程控制", "切换远程控制模式", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()])) + steps.append(make_method_step("交流源-设置AC模式", "设置电源模式", "DeviceCommand.Devices.IT7800E", None, [ + make_param("模式", "DeviceCommand.Devices.PowerCouplingMode, DeviceCommand", "AC"), + make_ct_param() + ])) + steps.append(make_method_step("交流源-关闭输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # --- N69200 高压直流负载初始化 --- + steps.append(make_method_step("高压负载-重置设备", "重置设备", "DeviceCommand.Devices.N69200", None, [make_ct_param()])) + steps.append(make_method_step("高压负载-清除错误", "清除错误队列和状态字节", "DeviceCommand.Devices.N69200", None, [make_ct_param()])) + steps.append(make_method_step("高压负载-查询设备标识", "查询设备标识", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_method_step("高压负载-设置CC模式", "设置负载模式", "DeviceCommand.Devices.N69200", None, [ + make_param("模式", "DeviceCommand.Devices.N69200+DeviceWorkMode, DeviceCommand", "CC"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # --- SPAW7000 功率分析仪初始化 --- + steps.append(make_method_step("功率分析仪-重置设备", "重置设备", "DeviceCommand.Devices.SPAW7000", None, [make_ct_param()])) + steps.append(make_method_step("功率分析仪-清除错误", "清除错误队列和状态字节", "DeviceCommand.Devices.SPAW7000", None, [make_ct_param()])) + steps.append(make_method_step("功率分析仪-查询设备标识", "查询设备标识", "DeviceCommand.Devices.SPAW7000", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("功率分析仪-设置电压量程300V", "设置电压量程", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("range", "DeviceCommand.Devices.SPAW7000+VoltageRange, DeviceCommand", "V_300"), + make_ct_param() + ])) + steps.append(make_method_step("功率分析仪-设置电流量程10A", "设置电流量程", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("range", "DeviceCommand.Devices.SPAW7000+CurrentRange, DeviceCommand", "A_10"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # --- SDS2000X_HD 示波器初始化 --- + steps.append(make_method_step("示波器-重置设备", "重置设备", "DeviceCommand.Devices.SDS2000X_HD", None, [make_ct_param()])) + steps.append(make_method_step("示波器-清除状态", "清除状态", "DeviceCommand.Devices.SDS2000X_HD", None, [make_ct_param()])) + steps.append(make_method_step("示波器-查询设备标识", "查询设备标识", "DeviceCommand.Devices.SDS2000X_HD", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("示波器-开启CH1", "设置通道开关", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("enable", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + steps.append(make_method_step("示波器-设置触发模式AUTO", "设置触发模式", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("mode", "DeviceCommand.Devices.SDS2000X_HD+TriggerMode, DeviceCommand", "AUTO"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # --- N36600 低压直流电源初始化 --- + steps.append(make_method_step("低压电源-设置电压12V", "设置电压", "DeviceCommand.Devices.N36600", None, [ + make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "12.000"), + make_ct_param() + ])) + steps.append(make_method_step("低压电源-设置电流2A", "设置电流", "DeviceCommand.Devices.N36600", None, [ + make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "2.000"), + make_ct_param() + ])) + steps.append(make_method_step("低压电源-关闭输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒-等待设备就绪")) + + return make_program(steps) + +# ============================================================ +# 2. IO板卡测试 +# ============================================================ +def gen_io_test(): + steps = [] + + # 测试8个工位的IO控制 + for station in range(1, 9): + # 单相充电-开启 + steps.append(make_method_step( + f"{station}#工位-单相充电开启", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, # IOBoardGroup 无DeviceID(组合设备) + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "单相充电"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ] + )) + steps.append(make_delay_step(0.5, f"延时0.5秒")) + + # 单相充电-关闭 + steps.append(make_method_step( + f"{station}#工位-单相充电关闭", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "单相充电"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ] + )) + steps.append(make_delay_step(0.5, f"延时0.5秒")) + + # 抛负载-开启 + steps.append(make_method_step( + f"{station}#工位-抛负载开启", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "抛负载"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ] + )) + steps.append(make_delay_step(0.5, f"延时0.5秒")) + + # 抛负载-关闭 + steps.append(make_method_step( + f"{station}#工位-抛负载关闭", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "抛负载"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ] + )) + steps.append(make_delay_step(0.5, f"延时0.5秒")) + + # 短路测试-开启 + steps.append(make_method_step( + f"{station}#工位-短路测试开启", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "短路测试"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ] + )) + steps.append(make_delay_step(0.5, f"延时0.5秒")) + + # 短路测试-关闭 + steps.append(make_method_step( + f"{station}#工位-短路测试关闭", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "短路测试"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ] + )) + steps.append(make_delay_step(0.5, f"延时0.5秒")) + + # 蜂鸣器测试 + for station in range(1, 9): + steps.append(make_method_step( + f"{station}#工位-蜂鸣器开启", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "蜂鸣器报警"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ] + )) + steps.append(make_delay_step(2, "蜂鸣器响2秒")) + for station in range(1, 9): + steps.append(make_method_step( + f"{station}#工位-蜂鸣器关闭", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "蜂鸣器报警"), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ] + )) + + return make_program(steps) + +# ============================================================ +# 3. 低压直流电源测试 (N36600) +# ============================================================ +def gen_lv_dc_test(): + steps = [] + + # 输出电压精度测试 - 多个电压点 + test_voltages = [5.0, 12.0, 24.0, 36.0, 48.0] + + for v in test_voltages: + steps.append(make_method_step(f"设置输出电压{v}V", "设置电压", "DeviceCommand.Devices.N36600", None, [ + make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{v:.3f}"), + make_ct_param() + ])) + steps.append(make_method_step(f"开启输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + steps.append(make_delay_step(2, f"延时2秒-稳定")) + + # 读取实际电压 + step_v = make_method_step(f"读取实际电压", "查询实际电压", "DeviceCommand.Devices.N36600", None, [ + make_ct_param(), + make_result_param("Result", value="") + ]) + steps.append(step_v) + + # 读取实际电流 + steps.append(make_method_step(f"读取实际电流", "查询实际电流", "DeviceCommand.Devices.N36600", None, [ + make_ct_param(), + make_result_param("Result", value="") + ])) + + # 读取实际功率 + steps.append(make_method_step(f"读取实际功率", "查询实际功率", "DeviceCommand.Devices.N36600", None, [ + make_ct_param(), + make_result_param("Result", value="") + ])) + + steps.append(make_method_step(f"关闭输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + return make_program(steps) + +# ============================================================ +# 4. 交流电源测试 (IT7800E) +# ============================================================ +def gen_ac_source_test(): + steps = [] + + # 交流输入源测试 - 设置不同电压和频率 + test_configs = [ + (110, 50), (220, 50), (220, 60), (230, 50), (240, 60) + ] + + for voltage, freq in test_configs: + steps.append(make_method_step(f"设置交流电压{voltage}V 频率{freq}Hz", "设置电源模式", "DeviceCommand.Devices.IT7800E", None, [ + make_param("模式", "DeviceCommand.Devices.PowerCouplingMode, DeviceCommand", "AC"), + make_ct_param() + ])) + steps.append(make_method_step(f"设置电压{voltage}V", "设置交流电压", "DeviceCommand.Devices.IT7800E", None, [ + make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{voltage:.2f}"), + make_ct_param() + ])) + steps.append(make_method_step(f"设置频率{freq}Hz", "设置频率", "DeviceCommand.Devices.IT7800E", None, [ + make_param("频率", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{freq:.2f}"), + make_ct_param() + ])) + steps.append(make_method_step("开启交流输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + steps.append(make_delay_step(3, "延时3秒-稳定")) + + # 测量 + steps.append(make_method_step("查询实际电压", "查询实际电压", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("查询实际电流", "查询实际电流", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("查询实际功率", "查询实际功率", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("查询实际频率", "查询实际频率", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("查询功率因数", "查询功率因数", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + + steps.append(make_method_step("关闭交流输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(2, "延时2秒")) + + return make_program(steps) + +# ============================================================ +# 5. 效率测试 (SPAW7000 + N69200) +# ============================================================ +def gen_efficiency_test(): + steps = [] + + # 效率测试流程: + # 1. 交流源供电给DUT + # 2. DUT输出到高压直流负载 + # 3. 功率分析仪测量输入/输出功率 + # 4. 计算效率 = 输出功率/输入功率 + + # 设置功率分析仪通道 + steps.append(make_method_step("功率分析仪-设置通道1电压量程", "设置电压量程", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("range", "DeviceCommand.Devices.SPAW7000+VoltageRange, DeviceCommand", "V_300"), + make_ct_param() + ])) + steps.append(make_method_step("功率分析仪-设置通道1电流量程", "设置电流量程", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("range", "DeviceCommand.Devices.SPAW7000+CurrentRange, DeviceCommand", "A_10"), + make_ct_param() + ])) + + # 设置负载为CC模式 + steps.append(make_method_step("高压负载-设置CC模式", "设置负载模式", "DeviceCommand.Devices.N69200", None, [ + make_param("模式", "DeviceCommand.Devices.N69200+DeviceWorkMode, DeviceCommand", "CC"), + make_ct_param() + ])) + + # 不同功率点效率测试 + load_currents = [1.0, 2.0, 5.0, 10.0, 15.0, 20.0] + for current in load_currents: + steps.append(make_method_step(f"设置负载电流{current}A", "设置恒电流CC", "DeviceCommand.Devices.N69200", None, [ + make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{current:.4f}"), + make_ct_param() + ])) + steps.append(make_method_step("高压负载-开启输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + steps.append(make_delay_step(3, "延时3秒-稳定")) + + # 功率分析仪读取输入功率 + steps.append(make_method_step("读取输入电压", "查询实际电压", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_ct_param() + ])) + steps.append(make_method_step("读取输入电流", "查询实际电流", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_ct_param() + ])) + steps.append(make_method_step("读取输入功率", "查询实际功率", "DeviceCommand.Devices.SPAW7000", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_ct_param() + ])) + + # 高压负载读取输出功率 + steps.append(make_method_step("读取输出电压", "查询实际电压", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("读取输出电流", "查询实际电流", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("读取输出功率", "查询实际功率", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()])) + + steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + return make_program(steps) + +# ============================================================ +# 6. 纹波测试 (SDS2000X_HD) +# ============================================================ +def gen_ripple_test(): + steps = [] + + # 纹波测试:用示波器测量DUT输出的电压纹波 + # 示波器CH1连接到DUT输出端 + + # 示波器设置 + steps.append(make_method_step("示波器-开启CH1", "设置通道开关", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("enable", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + steps.append(make_method_step("示波器-设置CH1电压档位50mV", "设置通道电压档位", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_param("volts", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "0.0500"), + make_ct_param() + ])) + steps.append(make_method_step("示波器-设置触发模式AUTO", "设置触发模式", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("mode", "DeviceCommand.Devices.SDS2000X_HD+TriggerMode, DeviceCommand", "AUTO"), + make_ct_param() + ])) + steps.append(make_method_step("示波器-设置水平时基", "设置水平时基", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("scale", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "0.000010"), + make_ct_param() + ])) + + # 设置负载并测量纹波 + load_currents = [1.0, 5.0, 10.0, 15.0, 20.0] + for current in load_currents: + steps.append(make_method_step(f"设置负载电流{current}A", "设置恒电流CC", "DeviceCommand.Devices.N69200", None, [ + make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{current:.4f}"), + make_ct_param() + ])) + steps.append(make_method_step("高压负载-开启输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + steps.append(make_delay_step(3, "延时3秒-波形稳定")) + + # 测量纹波 + steps.append(make_method_step("测量CH1电压峰峰值", "查询实际电压峰峰值", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_ct_param() + ])) + steps.append(make_method_step("测量CH1电压RMS", "查询实际电压均方根", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"), + make_ct_param() + ])) + + # 截图保存 + steps.append(make_method_step(f"保存波形截图-{current}A", "获取屏幕图像并保存", "DeviceCommand.Devices.SDS2000X_HD", None, [ + make_param("saveFilePath", "System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"D:\\ADP\\纹波截图\\{current}A_纹波.png"), + make_ct_param() + ])) + + steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + return make_program(steps) + +# ============================================================ +# 7. 保护测试 (N36600 OVP/OCP + N69200) +# ============================================================ +def gen_protection_test(): + steps = [] + + # === 低压电源OVP测试 === + steps.append(make_method_step("低压电源-设置OVP阈值", "设置过压保护值", "DeviceCommand.Devices.N36600", None, [ + make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "60.000"), + make_ct_param() + ])) + steps.append(make_method_step("低压电源-使能OVP", "设置电压保护使能", "DeviceCommand.Devices.N36600", None, [ + make_param("启用", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + + # === 低压电源OCP测试 === + steps.append(make_method_step("低压电源-设置OCP阈值", "设置过流保护值", "DeviceCommand.Devices.N36600", None, [ + make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "10.000"), + make_ct_param() + ])) + steps.append(make_method_step("低压电源-使能OCP", "设置电流保护使能", "DeviceCommand.Devices.N36600", None, [ + make_param("启用", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"), + make_ct_param() + ])) + + # === 高压负载OVP测试 === + steps.append(make_method_step("高压负载-设置OVP阈值", "设置过压保护值_OVP", "DeviceCommand.Devices.N69200", None, [ + make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "500.000"), + make_ct_param() + ])) + + # === 高压负载OCP测试 === + steps.append(make_method_step("高压负载-设置OCP阈值", "设置过流保护值_OCP", "DeviceCommand.Devices.N69200", None, [ + make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "30.000"), + make_ct_param() + ])) + + # === 高压负载OPP测试 === + steps.append(make_method_step("高压负载-设置OPP阈值", "设置过功率保护值_OPP", "DeviceCommand.Devices.N69200", None, [ + make_param("功率", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "5000.000"), + make_ct_param() + ])) + + # === 交流源OVP设置 === + steps.append(make_method_step("交流源-设置OVP阈值", "设置过压保护_OVP", "DeviceCommand.Devices.IT7800E", None, [ + make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "280.00"), + make_ct_param() + ])) + + # === 交流源OCP设置 === + steps.append(make_method_step("交流源-设置OCP阈值", "设置过流保护_OCP", "DeviceCommand.Devices.IT7800E", None, [ + make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "30.000"), + make_ct_param() + ])) + + steps.append(make_delay_step(1, "延时1秒-保护参数设置完成")) + + # 查询所有保护状态确认 + steps.append(make_method_step("低压电源-查询错误信息", "查询错误信息", "DeviceCommand.Devices.N36600", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("高压负载-查询报警事件", "查询报警事件信息", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()])) + steps.append(make_method_step("交流源-查询错误信息", "查询错误信息", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()])) + + return make_program(steps) + +# ============================================================ +# 8. 设备关机 +# ============================================================ +def gen_shutdown(): + steps = [] + + # 安全关机流程:先关负载,再关电源 + + # 关闭高压直流负载 + steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # 关闭交流源 + steps.append(make_method_step("交流源-关闭输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # 关闭低压直流电源 + steps.append(make_method_step("低压电源-关闭输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [ + make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ])) + steps.append(make_delay_step(1, "延时1秒")) + + # 关闭所有工位继电器 + for station in range(1, 9): + for action in ["单相充电", "抛负载", "短路测试"]: + steps.append(make_method_step( + f"{station}#工位-关闭{action}", + "执行台架动作Async", + "DeviceCommand.Devices.IOBoardGroup", + None, + [ + make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)), + make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", action), + make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"), + make_ct_param() + ] + )) + + # 设备切换本地模式 + steps.append(make_method_step("交流源-切换本地模式", "切换本地控制模式", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()])) + steps.append(make_method_step("低压电源-切换本地模式", "切换本地控制模式", "DeviceCommand.Devices.N36600", None, [make_ct_param()])) + + steps.append(make_delay_step(2, "延时2秒-关机完成")) + + return make_program(steps) + +# ============================================================ +# 主生成逻辑 +# ============================================================ +if __name__ == "__main__": + os.makedirs(OUTPUT_DIR, exist_ok=True) + + files = { + "01-设备初始化.adp": gen_device_init, + "02-IO板卡测试.adp": gen_io_test, + "03-低压直流电源测试.adp": gen_lv_dc_test, + "04-交流电源测试.adp": gen_ac_source_test, + "05-效率测试.adp": gen_efficiency_test, + "06-纹波测试.adp": gen_ripple_test, + "07-保护测试.adp": gen_protection_test, + "08-设备关机.adp": gen_shutdown, + } + + for filename, gen_func in files.items(): + filepath = os.path.join(OUTPUT_DIR, filename) + data = gen_func() + with open(filepath, 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=4) + step_count = len(data["StepCollection"]) + print(f"[OK] {filename} ({step_count} steps)") + + print(f"\nAll files generated in: {OUTPUT_DIR}")