Files
ACP/ACP电路图/gen_freq_range.py
T
2026-08-06 14:04:28 +08:00

254 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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"
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, var_name=None, var_id=None):
return method_step(index, name, "Command.Delay", "Delay_ms",
[param("millisecond", INT_TYPE, use_var=True,
var_name=var_name, var_id=var_id)])
# 程序变量(Parameters 中 Category=0,供步骤绑定)
VAR_RATED_VOLT = guid() # 额定输入电压
VAR_RATED_FREQ = guid() # 额定频率
VAR_UPPER_FREQ = guid() # 频率上限
VAR_LOWER_FREQ = 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_RATED_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_UPPER_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_LOWER_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},
]
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, 100.0),
param("step2", DOUBLE_TYPE, 100.0),
param("step3", DOUBLE_TYPE, 100.0)]))
steps.append(chroma_step(3, "配置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(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)]))
# ---- 二、额定频率启动OBC ----
steps.append(chroma_step(5, "配置List起始频率(额定)", "配置List起始频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ)]))
steps.append(chroma_step(6, "配置List结束频率(额定)", "配置List结束频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ)]))
steps.append(chroma_step(7, "启动List输出(额定频率)", "启动List输出", []))
steps.append(delay_step(8, "等待OBC启动稳定", var_name="各频率点保持时间ms", var_id=VAR_HOLD_TIME))
# ---- 三、升频至上限 ----
steps.append(chroma_step(9, "升频至频率上限", "配置List起始频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="频率上限", var_id=VAR_UPPER_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="频率上限", var_id=VAR_UPPER_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="频率上限", var_id=VAR_UPPER_FREQ)]))
steps.append(chroma_step(10, "保持频率上限", "配置List结束频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="频率上限", var_id=VAR_UPPER_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="频率上限", var_id=VAR_UPPER_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="频率上限", var_id=VAR_UPPER_FREQ)]))
steps.append(delay_step(11, "频率上限保持时间", var_name="各频率点保持时间ms", var_id=VAR_HOLD_TIME))
# ---- 四、降频至下限 ----
steps.append(chroma_step(12, "降频至频率下限", "配置List起始频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="频率下限", var_id=VAR_LOWER_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="频率下限", var_id=VAR_LOWER_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="频率下限", var_id=VAR_LOWER_FREQ)]))
steps.append(chroma_step(13, "保持频率下限", "配置List结束频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="频率下限", var_id=VAR_LOWER_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="频率下限", var_id=VAR_LOWER_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="频率下限", var_id=VAR_LOWER_FREQ)]))
steps.append(delay_step(14, "频率下限保持时间", var_name="各频率点保持时间ms", var_id=VAR_HOLD_TIME))
# ---- 五、恢复额定频率 ----
steps.append(chroma_step(15, "恢复额定频率", "配置List起始频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ)]))
steps.append(chroma_step(16, "额定频率保持", "配置List结束频率Async",
[param("step1", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step2", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ),
param("step3", DOUBLE_TYPE, use_var=True,
var_name="额定频率", var_id=VAR_RATED_FREQ)]))
steps.append(delay_step(17, "额定频率保持时间", var_name="各频率点保持时间ms", var_id=VAR_HOLD_TIME))
# ---- 六、收尾 ----
steps.append(chroma_step(18, "停止输出(电压归零)", "配置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, "配置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(20, "清除错误队列", "清除错误队列", []))
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']}")