# -*- 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" BOOL_TYPE = "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" ENUM_SRC_MODE = "DeviceCommand.Devices.S7200直流源模式_枚举, DeviceCommand, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 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 s7200_step(index, name, method_name, params): return method_step(index, name, "DeviceCommand.Devices.S7200", method_name, params) def chroma_step(index, name, method_name, params): return method_step(index, name, "DeviceCommand.Devices.Chroma61800", method_name, params) def delay_step(index, name, ms): return method_step(index, name, "Command.Delay", "Delay_ms", [param("millisecond", INT_TYPE, str(ms))]) # 程序变量(Parameters 中 Category=0,供步骤绑定) VAR_LOAD_CURRENT = guid() # 满载电流(100%负载) VAR_FULL_HOLD_MS = guid() # 满载保持时间ms VAR_ZERO_HOLD_MS = 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_LOAD_CURRENT, "IsVisible": True, "IsEditable": True, "Name": "满载电流", "Type": DOUBLE_TYPE, "Category": 0, "Value": 100.0, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": VAR_FULL_HOLD_MS, "IsVisible": True, "IsEditable": True, "Name": "满载保持时间ms", "Type": INT_TYPE, "Category": 0, "Value": 100, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, {"ID": VAR_ZERO_HOLD_MS, "IsVisible": True, "IsEditable": True, "Name": "空载保持时间ms", "Type": INT_TYPE, "Category": 0, "Value": 100, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, ] steps = [] # ---- 一、交流源:额定输入(三相 380V/50Hz,持续输出) ---- steps.append(chroma_step(1, "初始化三相List模式(无限循环)", "初始化三相List模式", [param("loopCount", INT_TYPE, "0")])) steps.append(chroma_step(2, "配置List起始频率(额定50Hz)", "配置List起始频率Async", [param("step1", DOUBLE_TYPE, 50.0), param("step2", DOUBLE_TYPE, 50.0), param("step3", DOUBLE_TYPE, 50.0)])) steps.append(chroma_step(3, "配置List交流起始电压(额定380V)", "配置List交流起始电压Async", [param("step1", DOUBLE_TYPE, 380.0), param("step2", DOUBLE_TYPE, 380.0), param("step3", DOUBLE_TYPE, 380.0)])) steps.append(chroma_step(4, "配置List交流结束电压(额定380V)", "配置List交流结束电压Async", [param("step1", DOUBLE_TYPE, 380.0), param("step2", DOUBLE_TYPE, 380.0), param("step3", DOUBLE_TYPE, 380.0)])) steps.append(chroma_step(5, "配置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(6, "启动List输出(额定输入)", "启动List输出", [])) steps.append(delay_step(7, "等待输入稳定", 3000)) # ---- 二、负载(S7200):CC 模式预置 100% 满载电流,斜率最大 ---- steps.append(s7200_step(8, "设置为远程模式", "设置为远程模式", [])) steps.append(s7200_step(9, "清除保护状态", "清除保护状态", [])) steps.append(s7200_step(10, "设置直流源工作模式CC", "设置直流源工作模式", [param("模式", ENUM_SRC_MODE, 0)])) # VOLTage=0? 见说明 # 说明: S7200直流源模式_枚举 CC 不在该枚举,负载模式用 设置负载工作模式 steps.pop() # 撤销上一步,改用负载模式枚举 steps.append(s7200_step(10, "设置负载工作模式CC", "设置负载工作模式", [param("模式", ENUM_LOAD_MODE, 0)])) # CC=0 steps.append(s7200_step(11, "设置CC模式电流(100%满载)", "设置CC模式电流", [param("电流", DOUBLE_TYPE, use_var=True, var_name="满载电流", var_id=VAR_LOAD_CURRENT)])) steps.append(s7200_step(12, "上升斜率设为负载最大能力", "发送自定义命令", [param("指令", "System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "CURRent:SLEW MAX")])) steps.append(s7200_step(13, "打开通道(100%负载)", "设置通道开关", [param("开关", BOOL_TYPE, True)])) steps.append(delay_step(14, "等待负载稳定", 1000)) # ---- 三、循环 5000 次:0% ↔ 100% 跳变 ---- loop_start_id = guid() loop_start_step = { "ID": loop_start_id, "IsUsed": True, "Index": 15, "Name": "循环开始", "StepType": "循环开始", "Method": { "Name": None, "FullName": None, "Parameters": [ {"ID": guid(), "IsVisible": True, "IsEditable": True, "Name": "循环次数", "Type": INT_TYPE, "Category": 0, "Value": 5000, "LowerLimit": None, "UpperLimit": None, "Result": True, "IsUseVar": False, "VariableName": None, "VariableID": None}, ], }, "SubProgram": None, "LoopCount": 5000, "LoopStartStepId": None, "OKExpression": None, "GotoSettingString": "", "OKGotoStepID": ZERO_GUID, "NGGotoStepID": ZERO_GUID, "Description": "负载0%与100%跳变冲击 5000次", } steps.append(loop_start_step) steps.append(s7200_step(16, "跳变至0%负载(断开通道)", "设置通道开关", [param("开关", BOOL_TYPE, False)])) steps.append(method_step(17, "空载保持", "Command.Delay", "Delay_ms", [param("millisecond", INT_TYPE, use_var=True, var_name="空载保持时间ms", var_id=VAR_ZERO_HOLD_MS)])) steps.append(s7200_step(18, "跳变至100%负载(接通通道)", "设置通道开关", [param("开关", BOOL_TYPE, True)])) steps.append(method_step(19, "满载保持", "Command.Delay", "Delay_ms", [param("millisecond", INT_TYPE, use_var=True, var_name="满载保持时间ms", var_id=VAR_FULL_HOLD_MS)])) loop_end_step = { "ID": guid(), "IsUsed": True, "Index": 20, "Name": "循环结束", "StepType": "循环结束", "Method": None, "SubProgram": None, "LoopCount": None, "LoopStartStepId": loop_start_id, "OKExpression": None, "GotoSettingString": "", "OKGotoStepID": ZERO_GUID, "NGGotoStepID": ZERO_GUID, "Description": None, } steps.append(loop_end_step) # ---- 四、收尾 ---- steps.append(s7200_step(21, "关闭负载通道", "设置通道开关", [param("开关", BOOL_TYPE, False)])) steps.append(s7200_step(22, "清除保护状态", "清除保护状态", [])) steps.append(chroma_step(23, "清除错误队列", "清除错误队列", [])) 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'])}") for s in data["StepCollection"]: print(f" {s['Index']:>2}. [{s['StepType']}] {s['Name']}")