# -*- coding: utf-8 -*- """生成 D:\\ACP\\测试项\\输出电流范围测试.ACP""" import json import uuid CT_TYPE = "System.Threading.CancellationToken, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" INT_TYPE = "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" DOUBLE_TYPE = "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" STRING_TYPE = "System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" ENUM_LOAD_MODE = "DeviceCommand.Devices.S7200负载模式_枚举, DeviceCommand, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" ZERO_GUID = "00000000-0000-0000-0000-000000000000" def guid(): return str(uuid.uuid4()) def param(name, ptype, value=None, use_var=False, var_name=None, var_id=None): return { "ID": guid(), "IsVisible": True, "IsEditable": True, "Name": name, "Type": ptype, "Category": 0, "Value": value, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": use_var, "VariableName": var_name, "VariableID": var_id, } def ct_param(): return param("ct", CT_TYPE) def method_step(index, name, full_name, method_name, params): return { "ID": guid(), "IsUsed": True, "Index": index, "Name": name, "StepType": "方法", "Method": { "Name": method_name, "FullName": full_name, "Parameters": params + [ct_param()], }, "SubProgram": None, "LoopCount": None, "LoopStartStepId": None, "OKExpression": None, "GotoSettingString": "", "OKGotoStepID": ZERO_GUID, "NGGotoStepID": ZERO_GUID, "Description": None, } def chroma_step(index, name, method_name, params): return method_step(index, name, "DeviceCommand.Devices.Chroma61800", method_name, params) def s7200_step(index, name, method_name, params): return method_step(index, name, "DeviceCommand.Devices.S7200", method_name, params) def pw8001_step(index, name, method_name, params): return method_step(index, name, "DeviceCommand.Device.PW8001", method_name, params) def delay_step(index, name, ms=None, var_name=None, var_id=None): if var_name and var_id: return method_step(index, name, "Command.Delay", "Delay_ms", [param("millisecond", INT_TYPE, use_var=True, var_name=var_name, var_id=var_id)]) else: return method_step(index, name, "Command.Delay", "Delay_ms", [param("millisecond", INT_TYPE, str(ms))]) # 程序变量 VAR_RATED_VOLT = guid() # 额定输入电压 VAR_FREQ = guid() # 额定频率 VAR_PW_CHANNEL = guid() # 功率分析仪通道号 VAR_HOLD_TIME = guid() # 各电压点保持时间ms program_params = [ # 标准系统参数(Category=2) {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "台架序号", "Type": INT_TYPE, "Category": 2, "Value": 1, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "CAN通道", "Type": INT_TYPE, "Category": 2, "Value": 0, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "示波器通道1", "Type": INT_TYPE, "Category": 2, "Value": 0, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "示波器通道2", "Type": INT_TYPE, "Category": 2, "Value": 0, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "功率分析仪通道1", "Type": INT_TYPE, "Category": 2, "Value": 0, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "功率分析仪通道2", "Type": INT_TYPE, "Category": 2, "Value": 0, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, # 测试项可调变量(Category=0)- 用户手动填值 {"ID": VAR_RATED_VOLT, "IsVisible": True, "IsEditable": True, "Name": "额定输入电压", "Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": VAR_FREQ, "IsVisible": True, "IsEditable": True, "Name": "额定频率", "Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": VAR_PW_CHANNEL, "IsVisible": True, "IsEditable": True, "Name": "功率分析仪通道号", "Type": INT_TYPE, "Category": 0, "Value": None, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": VAR_HOLD_TIME, "IsVisible": True, "IsEditable": True, "Name": "各电压点保持时间ms", "Type": INT_TYPE, "Category": 0, "Value": None, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, ] steps = [] # ---- 一、功率分析仪初始化 ---- steps.append(pw8001_step(1, "设置测试模式WIDE", "设置测试模式_WIDE", [])) steps.append(pw8001_step(2, "设置同步源U1", "设置同步源", [param("源", STRING_TYPE, "U1")])) # ---- 二、交流源设置额定输入 ---- steps.append(chroma_step(3, "初始化三相List模式(单次循环)", "初始化三相List模式", [param("loopCount", INT_TYPE, "1")])) steps.append(chroma_step(4, "配置List起始频率(额定)", "配置List起始频率Async", [param("step1", DOUBLE_TYPE, use_var=True, var_name="额定频率", var_id=VAR_FREQ), param("step2", DOUBLE_TYPE, use_var=True, var_name="额定频率", var_id=VAR_FREQ), param("step3", DOUBLE_TYPE, use_var=True, var_name="额定频率", var_id=VAR_FREQ)])) steps.append(chroma_step(5, "配置List结束频率(额定)", "配置List结束频率Async", [param("step1", DOUBLE_TYPE, use_var=True, var_name="额定频率", var_id=VAR_FREQ), param("step2", DOUBLE_TYPE, use_var=True, var_name="额定频率", var_id=VAR_FREQ), param("step3", DOUBLE_TYPE, use_var=True, var_name="额定频率", var_id=VAR_FREQ)])) steps.append(chroma_step(6, "配置List交流起始电压(额定)", "配置List交流起始电压Async", [param("step1", DOUBLE_TYPE, use_var=True, var_name="额定输入电压", var_id=VAR_RATED_VOLT), param("step2", DOUBLE_TYPE, use_var=True, var_name="额定输入电压", var_id=VAR_RATED_VOLT), param("step3", DOUBLE_TYPE, use_var=True, var_name="额定输入电压", var_id=VAR_RATED_VOLT)])) steps.append(chroma_step(7, "配置List交流结束电压(额定)", "配置List交流结束电压Async", [param("step1", DOUBLE_TYPE, use_var=True, var_name="额定输入电压", var_id=VAR_RATED_VOLT), param("step2", DOUBLE_TYPE, use_var=True, var_name="额定输入电压", var_id=VAR_RATED_VOLT), param("step3", DOUBLE_TYPE, use_var=True, var_name="额定输入电压", var_id=VAR_RATED_VOLT)])) steps.append(chroma_step(8, "配置List执行时间", "配置List执行时间Async", [param("step1", DOUBLE_TYPE, 100.0), param("step2", DOUBLE_TYPE, 100.0), param("step3", DOUBLE_TYPE, 100.0)])) steps.append(chroma_step(9, "启动List输出(额定输入)", "启动List输出", [])) steps.append(delay_step(10, "等待OBC启动", 5000)) # ---- 三、负载(S7200)初始化 ---- steps.append(s7200_step(11, "设置为远程模式", "设置为远程模式", [])) steps.append(s7200_step(12, "设置负载工作模式CC", "设置负载工作模式", [param("模式", ENUM_LOAD_MODE, 0)])) # CC=0 # ---- 四、测试点1:250Vdc ---- steps.append(s7200_step(13, "设置CC模式电流(250Vdc最大电流)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, 67.0)])) # 三相模式最大67A steps.append(s7200_step(14, "打开通道(加载至250Vdc)", "设置通道开关", [param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", True)])) steps.append(delay_step(15, "等待250Vdc稳定", 3000)) steps.append(pw8001_step(16, "测量250Vdc点输出电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) steps.append(delay_step(17, "250Vdc持续运行", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME)) steps.append(pw8001_step(18, "记录250Vdc最大电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) # ---- 五、测试点2:300Vdc ---- steps.append(s7200_step(19, "设置CC模式电流(300Vdc最大电流)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, 67.0)])) steps.append(delay_step(20, "等待300Vdc稳定", 3000)) steps.append(pw8001_step(21, "测量300Vdc点输出电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) steps.append(delay_step(22, "300Vdc持续运行", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME)) steps.append(pw8001_step(23, "记录300Vdc最大电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) # ---- 六、测试点3:350Vdc ---- steps.append(s7200_step(24, "设置CC模式电流(350Vdc最大电流)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, 67.0)])) steps.append(delay_step(25, "等待350Vdc稳定", 3000)) steps.append(pw8001_step(26, "测量350Vdc点输出电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) steps.append(delay_step(27, "350Vdc持续运行", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME)) steps.append(pw8001_step(28, "记录350Vdc最大电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) # ---- 七、测试点4:400Vdc ---- steps.append(s7200_step(29, "设置CC模式电流(400Vdc最大电流)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, 67.0)])) steps.append(delay_step(30, "等待400Vdc稳定", 3000)) steps.append(pw8001_step(31, "测量400Vdc点输出电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) steps.append(delay_step(32, "400Vdc持续运行", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME)) steps.append(pw8001_step(33, "记录400Vdc最大电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) # ---- 八、测试点5:450Vdc ---- steps.append(s7200_step(34, "设置CC模式电流(450Vdc最大电流)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, 67.0)])) steps.append(delay_step(35, "等待450Vdc稳定", 3000)) steps.append(pw8001_step(36, "测量450Vdc点输出电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) steps.append(delay_step(37, "450Vdc持续运行", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME)) steps.append(pw8001_step(38, "记录450Vdc最大电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) # ---- 九、测试点6:500Vdc ---- steps.append(s7200_step(39, "设置CC模式电流(500Vdc最大电流)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, 67.0)])) steps.append(delay_step(40, "等待500Vdc稳定", 3000)) steps.append(pw8001_step(41, "测量500Vdc点输出电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) steps.append(delay_step(42, "500Vdc持续运行", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME)) steps.append(pw8001_step(43, "记录500Vdc最大电流", "查询电流_不含变比", [param("通道号", INT_TYPE, use_var=True, var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)])) # ---- 十、收尾 ---- steps.append(s7200_step(44, "关闭负载通道", "设置通道开关", [param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", False)])) steps.append(chroma_step(45, "停止输出(电压归零)", "配置List交流起始电压Async", [param("step1", DOUBLE_TYPE, 0.0), param("step2", DOUBLE_TYPE, 0.0), param("step3", DOUBLE_TYPE, 0.0)])) steps.append(chroma_step(46, "配置List交流结束电压(0V)", "配置List交流结束电压Async", [param("step1", DOUBLE_TYPE, 0.0), param("step2", DOUBLE_TYPE, 0.0), param("step3", DOUBLE_TYPE, 0.0)])) steps.append(pw8001_step(47, "清除状态", "清除状态", [])) program = { "ID": guid(), "StepCollection": steps, "ErrorStepCollection": [], "Parameters": program_params, } out_path = r"D:\ACP\测试项\输出电流范围测试.ACP" with open(out_path, "w", encoding="utf-8") as f: json.dump(program, f, ensure_ascii=False, indent=2) # 校验 with open(out_path, encoding="utf-8") as f: data = json.load(f) print(f"已生成: {out_path}") print(f"步骤数: {len(data['StepCollection'])}, 参数数: {len(data['Parameters'])}") print("\n需要手动填写的变量参数:") for p in data["Parameters"]: if p["Category"] == 0: print(f" - {p['Name']} ({p['Type'].split(',')[0].split('.')[-1]})") print("\n步骤流程:") for s in data["StepCollection"]: print(f" {s['Index']:>2}. {s['Name']}") print("\n测试电压点(250Vdc - 500Vdc):") print(" - 250Vdc:最大持续输出电流 ≤ 67A(三相)/ ≤ 22A(单相)") print(" - 300Vdc:最大持续输出电流 ≤ 67A(三相)/ ≤ 22A(单相)") print(" - 350Vdc:最大持续输出电流 ≤ 67A(三相)/ ≤ 22A(单相)") print(" - 400Vdc:最大持续输出电流 ≤ 67A(三相)/ ≤ 22A(单相)") print(" - 450Vdc:最大持续输出电流 ≤ 67A(三相)/ ≤ 22A(单相)") print(" - 500Vdc:最大持续输出电流 ≤ 67A(三相)/ ≤ 22A(单相)") print("\n电流精度要求:") print(" - 0~10A:误差 ≤ ±0.2A") print(" - 10A以上:误差 ≤ ±2%") print("\n注意:步骤13-43的电流值当前为67A(三相模式),单相模式请改为22A")