""" 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}")