257 lines
14 KiB
Python
257 lines
14 KiB
Python
# -*- 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"
|
||
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 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))])
|
||
|
||
|
||
# 程序变量(Parameters 中 Category=0,供步骤绑定)
|
||
VAR_RATED_VOLT = guid() # 额定输入电压
|
||
VAR_UPPER_VOLT = guid() # 输入电压上限
|
||
VAR_LOWER_VOLT = guid() # 输入电压下限
|
||
VAR_FREQ = guid() # 额定频率
|
||
VAR_HOLD_TIME = guid() # 各电压点保持时间(ms)
|
||
VAR_STEP_VOLT = guid() # 电压步进值
|
||
|
||
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_UPPER_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_LOWER_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_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},
|
||
{"ID": VAR_STEP_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},
|
||
]
|
||
|
||
steps = []
|
||
|
||
# ---- 一、初始化交流源 ----
|
||
steps.append(chroma_step(1, "初始化三相List模式(单次循环)", "初始化三相List模式",
|
||
[param("loopCount", INT_TYPE, "1")]))
|
||
steps.append(chroma_step(2, "配置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(3, "配置List执行时间", "配置List执行时间Async",
|
||
[param("step1", DOUBLE_TYPE, 100.0),
|
||
param("step2", DOUBLE_TYPE, 100.0),
|
||
param("step3", DOUBLE_TYPE, 100.0)]))
|
||
|
||
# ---- 二、额定电压启动OBC ----
|
||
steps.append(chroma_step(4, "配置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(5, "配置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(6, "启动List输出(额定电压)", "启动List输出", []))
|
||
steps.append(delay_step(7, "等待OBC启动稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||
|
||
# ---- 三、逐步升压至上限 ----
|
||
steps.append(chroma_step(8, "升压至上限电压", "配置List交流起始电压Async",
|
||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压上限", var_id=VAR_UPPER_VOLT),
|
||
param("step2", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压上限", var_id=VAR_UPPER_VOLT),
|
||
param("step3", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压上限", var_id=VAR_UPPER_VOLT)]))
|
||
steps.append(chroma_step(9, "保持上限电压", "配置List交流结束电压Async",
|
||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压上限", var_id=VAR_UPPER_VOLT),
|
||
param("step2", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压上限", var_id=VAR_UPPER_VOLT),
|
||
param("step3", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压上限", var_id=VAR_UPPER_VOLT)]))
|
||
steps.append(delay_step(10, "上限电压保持时间", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||
|
||
# ---- 四、逐步降压至下限 ----
|
||
steps.append(chroma_step(11, "降压至下限电压", "配置List交流起始电压Async",
|
||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压下限", var_id=VAR_LOWER_VOLT),
|
||
param("step2", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压下限", var_id=VAR_LOWER_VOLT),
|
||
param("step3", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压下限", var_id=VAR_LOWER_VOLT)]))
|
||
steps.append(chroma_step(12, "保持下限电压", "配置List交流结束电压Async",
|
||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压下限", var_id=VAR_LOWER_VOLT),
|
||
param("step2", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压下限", var_id=VAR_LOWER_VOLT),
|
||
param("step3", DOUBLE_TYPE, use_var=True,
|
||
var_name="输入电压下限", var_id=VAR_LOWER_VOLT)]))
|
||
steps.append(delay_step(13, "下限电压保持时间", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||
|
||
# ---- 五、恢复额定电压 ----
|
||
steps.append(chroma_step(14, "恢复额定电压", "配置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(15, "额定电压保持", "配置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(delay_step(16, "额定电压保持时间", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||
|
||
# ---- 六、收尾 ----
|
||
steps.append(chroma_step(17, "停止输出", "配置List交流起始电压Async",
|
||
[param("step1", DOUBLE_TYPE, 0.0),
|
||
param("step2", DOUBLE_TYPE, 0.0),
|
||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||
steps.append(chroma_step(18, "配置List交流结束电压(0V)", "配置List交流结束电压Async",
|
||
[param("step1", DOUBLE_TYPE, 0.0),
|
||
param("step2", DOUBLE_TYPE, 0.0),
|
||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||
steps.append(chroma_step(19, "清除错误队列", "清除错误队列", []))
|
||
|
||
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']}")
|