设备命令修改
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 177 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 142 KiB |
@@ -0,0 +1,47 @@
|
||||
===== Sheet: Sheet1 (45行x16列) =====
|
||||
集成化测试系统:ACP交流源适应性系统控制接线图(三工位系统)
|
||||
注:以下操作是在执行就地系统合上断路器(QF1、)后按下SB1启动按钮后仪器设备得电后才能操作。
|
||||
序号 | 对应设备 | | IO输入口 | 控制对应中间继电器 | 对应输出元件通断/吸合 | 功能 | | | | 备注
|
||||
1 | 1#产品 | IO继电器模块 1# | Y1 | KA2-1 | KM2 | Y1输出控制KA2-1执行,KM2吸合,产品充电(三相) | | | | 对应控制1# (低压直流电源)/电子锁/温度检测/CC/CP信号。
|
||||
2 | | | Y2 | KA3-1 | KM3 | Y2输出控制KA3-1执行,KM3吸合,产品放电(三相)
|
||||
| | | Y3 | KA4-1 | KL30通断 | Y3输出控制KA4-1执行KL30通断
|
||||
| | | Y4 | KA5-1 | KL15通断 | Y4输出控制KA5-1执行KL15通断
|
||||
| | | Y5 | KA6-1 | 电子锁60Ω电阻 | Y5输出控制KA6-1执行电子锁信号通断(60Ω)
|
||||
| | | Y6 | KA7-1 | 温度检测1KΩ电阻 | Y6输出控制KA7-1执行温度检测信号通断(1KΩ)
|
||||
3 | | | Y7 | KA8-1 | CC信号串1KΩ电阻 | Y7输出控制KA8-1执行CC信号通断(1KΩ)
|
||||
4 | | | Y8 | KA9-1 | CP信号串1KΩ电阻 | Y8输出控制KA9-1执行CP信号通断(1KΩ)
|
||||
5 | | | Y9 | KA10-1 | CC信号串680Ω电阻 | Y9输出控制KA10-1执行CC信号通断(680Ω)
|
||||
6 | | | Y10 | KA11-1 | CC信号串220Ω电阻 | Y10输出控制KA11-1执行CC信号通断(220Ω)
|
||||
7 | | | Y11 | KA12-1 | CC信号串100Ω电阻 | Y11输出控制KA12-1执行CC信号通断(100Ω)
|
||||
8 | | | Y12 | KA13-1 | CC信号空载 | Y12输出控制KA13-1执行CC信号通断(100Ω)
|
||||
13 | | | Y13 | KA14-1 | 蜂鸣器 1#响应 | Y13输出控制KA14-1执行蜂鸣器1#信号通断
|
||||
15 | 2#产品 | IO继电器模块 2# | Y1 | KA2-2 | KM4 | Y2输出控制KA2-2执行,KM4吸合,产品充电(三相) | | | | 对应控制2# (低压直流电源)/电子锁/温度检测/CC/CP信号。
|
||||
16 | | | Y2 | KA3-2 | KM5 | Y2输出控制KA3-2执行,KM5吸合,产品放电(三相)
|
||||
| | | Y3 | KA4-2 | KL30通断 | Y3输出控制KA4-2执行KL30通断
|
||||
| | | Y4 | KA5-2 | KL15通断 | Y4输出控制KA5-2执行KL15通断
|
||||
17 | | | Y5 | KA6-2 | 电子锁60Ω电阻 | Y5输出控制KA6-2执行电子锁信号通断(60Ω)
|
||||
18 | | | Y6 | KA7-2 | 温度检测1KΩ电阻 | Y6输出控制KA7-2执行温度检测信号通断(1KΩ)
|
||||
19 | | | Y7 | KA8-2 | CC信号串1KΩ电阻 | Y7输出控制KA8-2执行CC信号通断(1KΩ)
|
||||
20 | | | Y8 | KA9-2 | CP信号串1KΩ电阻 | Y8输出控制KA9-2执行CP信号通断(1KΩ)
|
||||
21 | | | Y9 | KA10-2 | CC信号串680Ω电阻 | Y9输出控制KA10-2执行CC信号通断(680Ω)
|
||||
22 | | | Y10 | KA11-2 | CC信号串220Ω电阻 | Y10输出控制KA11-2执行CC信号通断(220Ω)
|
||||
23 | | | Y11 | KA12-2 | CC信号串100Ω电阻 | Y11输出控制KA12-2执行CC信号通断(100Ω)
|
||||
24 | | | Y12 | KA13-2 | CC信号空载 | Y12输出控制KA13-2执行CC信号通断(100Ω)
|
||||
25 | | | Y13 | KA14-2 | 蜂鸣器 2#响应 | Y13输出控制KA14-2执行蜂鸣器2#信号通断
|
||||
28 | 3#产品 | IO继电器模块 3# | Y1 | KA2-3 | KM6 | Y1输出控制KA2-3执行,KM6吸合,产品充电(三相) | | | | 对应控制3# (低压直流电源)/电子锁/温度检测/CC/CP信号。
|
||||
29 | | | Y2 | KA3-3 | KM7 | Y2输出控制KA3-3执行,KM7吸合,产品放电(三相)
|
||||
30 | | | Y3 | KA4-3 | KL30通断 | Y3输出控制KA4-3执行KL30通断
|
||||
31 | | | Y4 | KA5-3 | KL15通断 | Y4输出控制KA5-3执行KL15通断
|
||||
32 | | | Y5 | KA6-3 | 电子锁60Ω电阻 | Y5输出控制KA6-3执行电子锁信号通断(60Ω)
|
||||
33 | | | Y6 | KA7-3 | 温度检测1KΩ电阻 | Y6输出控制KA7-3执行温度检测信号通断(1KΩ)
|
||||
34 | | | Y7 | KA8-3 | CC信号串1KΩ电阻 | Y7输出控制KA8-3执行CC信号通断(1KΩ)
|
||||
35 | | | Y8 | KA9-3 | CP信号串1KΩ电阻 | Y8输出控制KA9-3执行CP信号通断(1KΩ)
|
||||
36 | | | Y9 | KA10-3 | CC信号串680Ω电阻 | Y9输出控制KA10-3执行CC信号通断(680Ω)
|
||||
37 | | | Y10 | KA11-3 | CC信号串220Ω电阻 | Y10输出控制KA11-3执行CC信号通断(220Ω)
|
||||
38 | | | Y11 | KA12-3 | CC信号串100Ω电阻 | Y11输出控制KA12-3执行CC信号通断(100Ω)
|
||||
39 | | | Y12 | KA13-3 | CC信号空载 | Y12输出控制KA13-3执行CC信号通断(100Ω)
|
||||
40 | | | Y13 | KA14-3 | 蜂鸣器 3#响应 | Y13输出控制KA14-3执行蜂鸣器2#信号通断
|
||||
41 | | | Y14 | KA15-3 | KM8 | Y14输出控制KA15-3执行KM8抛负载通断 | | | | HV
|
||||
42 | | | Y15 | KA16-3 | KM9 | Y15输出控制KA16-3执行KM9短路测试
|
||||
43 | | | Y16 | KA17-3 | KM10 | Y16输出控制KA17-3执行KM10短路测试 | | | | LV
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""分析 D:\ACP 下所有 .ACP 测试项/子程序的结构。"""
|
||||
import json, os, glob
|
||||
|
||||
def walk_steps(steps, depth, out):
|
||||
for s in steps:
|
||||
st = s.get("StepType")
|
||||
name = s.get("Name")
|
||||
ind = " " * depth
|
||||
if st == "方法":
|
||||
m = s.get("Method") or {}
|
||||
full = m.get("FullName", "?")
|
||||
cls = full.split(".")[-1]
|
||||
params = []
|
||||
for p in (m.get("Parameters") or []):
|
||||
if p.get("Category") == 0: # Input
|
||||
v = p.get("Value")
|
||||
if p.get("IsUseVar"):
|
||||
v = f"${p.get('VariableName')}"
|
||||
params.append(f"{p.get('Name')}={v}")
|
||||
out.append(f"{ind}[方法] {name} <- {cls}({', '.join(params)})")
|
||||
elif st == "子程序":
|
||||
out.append(f"{ind}[子程序] {name}")
|
||||
sp = s.get("SubProgram")
|
||||
if sp and sp.get("StepCollection"):
|
||||
walk_steps(sp["StepCollection"], depth + 1, out)
|
||||
elif st == "循环开始":
|
||||
lc = s.get("LoopCount")
|
||||
out.append(f"{ind}[循环开始] 次数={lc}")
|
||||
elif st == "循环结束":
|
||||
out.append(f"{ind}[循环结束]")
|
||||
elif st == "跳转":
|
||||
out.append(f"{ind}[跳转] {name} expr={s.get('OKExpression')}")
|
||||
else:
|
||||
out.append(f"{ind}[{st}] {name}")
|
||||
|
||||
dirs = [r"D:\ACP\测试项", r"D:\ACP\子程序"]
|
||||
for d in dirs:
|
||||
for fp in sorted(glob.glob(os.path.join(d, "*.ACP"))):
|
||||
print("=" * 70)
|
||||
print("FILE:", os.path.basename(fp))
|
||||
with open(fp, encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
out = []
|
||||
walk_steps(data.get("StepCollection") or [], 0, out)
|
||||
# 只打印前 60 行,避免过长
|
||||
for line in out[:60]:
|
||||
print(line)
|
||||
if len(out) > 60:
|
||||
print(f"... (共 {len(out)} 步,已省略)")
|
||||
# 参数
|
||||
print(" -- Parameters --")
|
||||
for p in (data.get("Parameters") or []):
|
||||
print(f" {p.get('Name')} = {p.get('Value')}")
|
||||
@@ -0,0 +1,215 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
极电子程序测试项转换脚本
|
||||
将极电子程序的 .ats 文件转换为我的项目的 .ats 文件
|
||||
|
||||
设备映射关系:
|
||||
- EA3040_40C → ANEVH80(水冷机,占位符)
|
||||
- IT6724C → IT6724C(直流源)
|
||||
- PSB11500_60 → PSB11500_60(交流源/负载)
|
||||
- SQ0090G1D1 → SQ0090G1D1(三相交流源)
|
||||
- IOBoardCard → IOBoardGroup(占位符,只传台架序号)
|
||||
- TSMasterCAN.CAN → TSMasterCAN.CAN(相同)
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import uuid
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
# 输入输出路径
|
||||
INPUT_DIR = Path(r"C:\Users\kk\Desktop\ACP\极电子程序")
|
||||
OUTPUT_DIR = Path(r"D:\ACP\测试项\极电子对应")
|
||||
|
||||
# 设备映射
|
||||
DEVICE_MAPPING = {
|
||||
"DeviceCommand.Device.EA3040_40C": "DeviceCommand.Device.ANEVH80", # 水冷机(占位符)
|
||||
"DeviceCommand.Device.IT6724C": "DeviceCommand.Device.IT6724C",
|
||||
"DeviceCommand.Device.PSB11500_60": "DeviceCommand.Device.PSB11500_60",
|
||||
"DeviceCommand.Device.SQ0090G1D1": "DeviceCommand.Device.SQ0090G1D1",
|
||||
"DeviceCommand.Device.IOBoardCard": "DeviceCommand.Device.IOBoardGroup", # IO板卡(占位符)
|
||||
"TSMasterCAN.CAN": "TSMasterCAN.CAN",
|
||||
}
|
||||
|
||||
# 方法映射(ANEVH80 占位符方法)
|
||||
ANVH80_METHOD_MAPPING = {
|
||||
"Set_RemoteMode": "Placeholder_SetRemoteMode",
|
||||
"Set_Voltage": "Placeholder_SetVoltage",
|
||||
"Set_Current": "Placeholder_SetCurrent",
|
||||
"Set_Power": "Placeholder_SetPower",
|
||||
"ON": "Placeholder_ON",
|
||||
"OFF": "Placeholder_OFF",
|
||||
}
|
||||
|
||||
# IOBoardGroup 占位符方法
|
||||
IOBOARDGROUP_METHOD_MAPPING = {
|
||||
"WriteMultiIO": "Placeholder_WriteMultiIO",
|
||||
"WriteSingleIO": "Placeholder_WriteSingleIO",
|
||||
"ReadMultiIO": "Placeholder_ReadMultiIO",
|
||||
"ReadSingleIO": "Placeholder_ReadSingleIO",
|
||||
}
|
||||
|
||||
|
||||
def generate_guid():
|
||||
"""生成新的 GUID"""
|
||||
return str(uuid.uuid4())
|
||||
|
||||
|
||||
def transform_parameter(param, add_station_var=False):
|
||||
"""转换参数格式"""
|
||||
new_param = {
|
||||
"ID": generate_guid(),
|
||||
"IsVisible": param.get("IsVisible", True),
|
||||
"Name": param.get("Name", ""),
|
||||
"Type": param.get("Type", ""),
|
||||
"Category": param.get("Category", 0),
|
||||
"IsGlobal": param.get("IsGlobal", False),
|
||||
"InitialValue": param.get("InitialValue"),
|
||||
"Value": param.get("Value"),
|
||||
"LowerLimit": param.get("LowerLimit"),
|
||||
"UpperLimit": param.get("UpperLimit"),
|
||||
"Result": param.get("Result", True),
|
||||
"IsUseVar": param.get("IsUseVar", False),
|
||||
"IsSave": param.get("IsSave", False),
|
||||
"VariableName": param.get("VariableName"),
|
||||
"VariableID": param.get("VariableID"),
|
||||
"IsOutputToReport": param.get("IsOutputToReport", False),
|
||||
}
|
||||
return new_param
|
||||
|
||||
|
||||
def transform_method(method, step_name=""):
|
||||
"""转换方法"""
|
||||
if method is None:
|
||||
return None
|
||||
|
||||
full_name = method.get("FullName", "")
|
||||
method_name = method.get("Name", "")
|
||||
|
||||
# 设备映射
|
||||
new_full_name = DEVICE_MAPPING.get(full_name, full_name) if full_name else None
|
||||
|
||||
# 方法映射(占位符)
|
||||
if new_full_name and "ANEVH80" in new_full_name:
|
||||
new_method_name = ANVH80_METHOD_MAPPING.get(method_name, method_name)
|
||||
elif new_full_name and "IOBoardGroup" in new_full_name:
|
||||
new_method_name = IOBOARDGROUP_METHOD_MAPPING.get(method_name, method_name)
|
||||
else:
|
||||
new_method_name = method_name
|
||||
|
||||
# 转换参数
|
||||
new_params = []
|
||||
for param in method.get("Parameters", []):
|
||||
new_param = transform_parameter(param)
|
||||
new_params.append(new_param)
|
||||
|
||||
new_method = {
|
||||
"Name": new_method_name,
|
||||
"FullName": new_full_name,
|
||||
"DeviceID": method.get("DeviceID"),
|
||||
"Parameters": new_params,
|
||||
}
|
||||
|
||||
return new_method
|
||||
|
||||
|
||||
def transform_step(step):
|
||||
"""转换步骤"""
|
||||
new_step = {
|
||||
"ID": generate_guid(),
|
||||
"IsUsed": step.get("IsUsed", True),
|
||||
"Index": step.get("Index", 1),
|
||||
"Name": step.get("Name", ""),
|
||||
"StepType": step.get("StepType", "方法"),
|
||||
"Method": None,
|
||||
"SubProgram": None,
|
||||
"LoopCount": step.get("LoopCount"),
|
||||
"LoopStartStepId": step.get("LoopStartStepId"),
|
||||
"OKExpression": step.get("OKExpression"),
|
||||
"GotoSettingString": step.get("GotoSettingString", ""),
|
||||
"OKGotoStepID": step.get("OKGotoStepID"),
|
||||
"NGGotoStepID": step.get("NGGotoStepID"),
|
||||
"Description": step.get("Description"),
|
||||
}
|
||||
|
||||
# 转换方法
|
||||
if step.get("Method"):
|
||||
new_step["Method"] = transform_method(step["Method"], step.get("Name", ""))
|
||||
|
||||
# 转换子程序
|
||||
if step.get("SubProgram"):
|
||||
sub_program = step["SubProgram"]
|
||||
new_sub_steps = []
|
||||
for sub_step in sub_program.get("StepCollection", []):
|
||||
new_sub_step = transform_step(sub_step)
|
||||
new_sub_steps.append(new_sub_step)
|
||||
|
||||
new_step["SubProgram"] = {
|
||||
"ID": generate_guid(),
|
||||
"StepCollection": new_sub_steps,
|
||||
"Parameters": [transform_parameter(p) for p in sub_program.get("Parameters", [])],
|
||||
"Devices": sub_program.get("Devices", []),
|
||||
}
|
||||
|
||||
return new_step
|
||||
|
||||
|
||||
def transform_program(program):
|
||||
"""转换整个程序"""
|
||||
new_steps = []
|
||||
for step in program.get("StepCollection", []):
|
||||
new_step = transform_step(step)
|
||||
new_steps.append(new_step)
|
||||
|
||||
new_program = {
|
||||
"ID": generate_guid(),
|
||||
"StepCollection": new_steps,
|
||||
"Parameters": [transform_parameter(p) for p in program.get("Parameters", [])],
|
||||
"Devices": program.get("Devices", []),
|
||||
}
|
||||
|
||||
return new_program
|
||||
|
||||
|
||||
def process_file(input_file, output_file):
|
||||
"""处理单个文件"""
|
||||
print(f"处理: {input_file.name}")
|
||||
|
||||
# 读取文件(支持 UTF-8 BOM)
|
||||
with open(input_file, 'r', encoding='utf-8-sig') as f:
|
||||
program = json.load(f)
|
||||
|
||||
# 转换
|
||||
new_program = transform_program(program)
|
||||
|
||||
# 写入文件
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(new_program, f, ensure_ascii=False, indent=2)
|
||||
|
||||
print(f" -> 已生成: {output_file.name}")
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
# 创建输出目录
|
||||
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# 获取所有 .ats 文件
|
||||
ats_files = list(INPUT_DIR.glob("*.ats"))
|
||||
|
||||
print(f"找到 {len(ats_files)} 个 .ats 文件")
|
||||
print(f"输出目录: {OUTPUT_DIR}")
|
||||
print()
|
||||
|
||||
# 处理每个文件
|
||||
for input_file in ats_files:
|
||||
output_file = OUTPUT_DIR / input_file.name
|
||||
process_file(input_file, output_file)
|
||||
|
||||
print()
|
||||
print(f"完成!共处理 {len(ats_files)} 个文件")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,38 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""将 ACP.pdf 逐页渲染为 PNG,并把 Excel 接线图导出为文本。"""
|
||||
import fitz
|
||||
import openpyxl
|
||||
import os
|
||||
|
||||
pdf_path = r"C:\Users\kk\Desktop\ACP\ACP电路图\ACP.pdf"
|
||||
xlsx_path = r"C:\Users\kk\Desktop\ACP\ACP电路图\ACP硬件接线图.xlsx"
|
||||
out_dir = r"C:\Users\kk\Desktop\ACP\ACP电路图\_pages"
|
||||
os.makedirs(out_dir, exist_ok=True)
|
||||
|
||||
# ---- 渲染 PDF ----
|
||||
doc = fitz.open(pdf_path)
|
||||
mat = fitz.Matrix(2.0, 2.0) # 2倍缩放,保证清晰度
|
||||
for i, page in enumerate(doc):
|
||||
pix = page.get_pixmap(matrix=mat)
|
||||
png_path = os.path.join(out_dir, f"page_{i+1:02d}.png")
|
||||
pix.save(png_path)
|
||||
print(f"saved {png_path}")
|
||||
doc.close()
|
||||
|
||||
# ---- 导出 Excel ----
|
||||
wb = openpyxl.load_workbook(xlsx_path, data_only=True)
|
||||
txt_path = os.path.join(out_dir, "接线图.txt")
|
||||
with open(txt_path, "w", encoding="utf-8") as f:
|
||||
for sheet_name in wb.sheetnames:
|
||||
ws = wb[sheet_name]
|
||||
f.write(f"===== Sheet: {sheet_name} ({ws.max_row}行x{ws.max_column}列) =====\n")
|
||||
for row in ws.iter_rows(values_only=True):
|
||||
cells = ["" if c is None else str(c).strip() for c in row]
|
||||
# 去掉行尾空单元格
|
||||
while cells and cells[-1] == "":
|
||||
cells.pop()
|
||||
if not cells:
|
||||
continue
|
||||
f.write(" | ".join(cells) + "\n")
|
||||
f.write("\n")
|
||||
print(f"saved {txt_path}")
|
||||
@@ -0,0 +1,280 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""生成 D:\\ACP\\测试项\\AC侧电流检测.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, 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)])
|
||||
|
||||
|
||||
# 程序变量
|
||||
VAR_RATED_VOLT = guid() # 额定输入电压
|
||||
VAR_RATED_FREQ = guid() # 额定频率
|
||||
VAR_25PCT_POWER = guid() # 25%负载功率
|
||||
VAR_50PCT_POWER = guid() # 50%负载功率
|
||||
VAR_75PCT_POWER = guid() # 75%负载功率
|
||||
VAR_100PCT_POWER = guid() # 100%负载功率
|
||||
VAR_PW_CHANNEL = guid() # 功率分析仪通道号
|
||||
VAR_STABLE_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_25PCT_POWER, "IsVisible": True, "IsEditable": True, "Name": "25%负载功率",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_50PCT_POWER, "IsVisible": True, "IsEditable": True, "Name": "50%负载功率",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_75PCT_POWER, "IsVisible": True, "IsEditable": True, "Name": "75%负载功率",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_100PCT_POWER, "IsVisible": True, "IsEditable": True, "Name": "100%负载功率",
|
||||
"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_STABLE_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_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(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_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启动", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 三、负载(S7200)初始化 ----
|
||||
steps.append(s7200_step(11, "设置为远程模式", "设置为远程模式", []))
|
||||
steps.append(s7200_step(12, "设置负载工作模式CC", "设置负载工作模式",
|
||||
[param("模式", ENUM_LOAD_MODE, 0)])) # CC=0
|
||||
|
||||
# ---- 四、25%负载点测试 ----
|
||||
steps.append(s7200_step(13, "设置CC模式电流(25%负载)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="25%负载功率", var_id=VAR_25PCT_POWER)]))
|
||||
steps.append(s7200_step(14, "打开通道(25%负载)", "设置通道开关",
|
||||
[param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", True)]))
|
||||
steps.append(delay_step(15, "等待25%负载稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(16, "测量25%负载输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、50%负载点测试 ----
|
||||
steps.append(s7200_step(17, "设置CC模式电流(50%负载)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="50%负载功率", var_id=VAR_50PCT_POWER)]))
|
||||
steps.append(delay_step(18, "等待50%负载稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(19, "测量50%负载输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 六、75%负载点测试 ----
|
||||
steps.append(s7200_step(20, "设置CC模式电流(75%负载)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="75%负载功率", var_id=VAR_75PCT_POWER)]))
|
||||
steps.append(delay_step(21, "等待75%负载稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(22, "测量75%负载输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 七、100%负载点测试 ----
|
||||
steps.append(s7200_step(23, "设置CC模式电流(100%负载)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="100%负载功率", var_id=VAR_100PCT_POWER)]))
|
||||
steps.append(delay_step(24, "等待100%负载稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(25, "测量100%负载输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 八、收尾 ----
|
||||
steps.append(s7200_step(26, "关闭负载通道", "设置通道开关",
|
||||
[param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", False)]))
|
||||
steps.append(chroma_step(27, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(28, "配置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(29, "清除状态", "清除状态", []))
|
||||
|
||||
program = {
|
||||
"ID": guid(),
|
||||
"StepCollection": steps,
|
||||
"ErrorStepCollection": [],
|
||||
"Parameters": program_params,
|
||||
}
|
||||
|
||||
out_path = r"D:\ACP\测试项\AC侧电流检测.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测试负载点:")
|
||||
print(" - 25% 额定负载")
|
||||
print(" - 50% 额定负载")
|
||||
print(" - 75% 额定负载")
|
||||
print(" - 100% 额定负载")
|
||||
@@ -0,0 +1,281 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""生成 D:\\ACP\\测试项\\AC侧电压检测.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"
|
||||
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 pw8001_step(index, name, method_name, params):
|
||||
return method_step(index, name, "DeviceCommand.Device.PW8001", 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)])
|
||||
|
||||
|
||||
# 程序变量
|
||||
VAR_RATED_VOLT = guid() # 额定输入电压
|
||||
VAR_UPPER_VOLT = guid() # 输入电压上限
|
||||
VAR_LOWER_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_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_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, 100.0),
|
||||
param("step2", DOUBLE_TYPE, 100.0),
|
||||
param("step3", DOUBLE_TYPE, 100.0)]))
|
||||
|
||||
# ---- 三、额定电压测试点 ----
|
||||
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, 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(9, "启动List输出(额定电压)", "启动List输出", []))
|
||||
steps.append(delay_step(10, "等待额定电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(11, "测量额定电压点实际电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 四、上限电压测试点 ----
|
||||
steps.append(chroma_step(12, "配置List交流起始电压(上限)", "配置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(13, "配置List交流结束电压(上限)", "配置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(14, "等待上限电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(15, "测量上限电压点实际电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、下限电压测试点 ----
|
||||
steps.append(chroma_step(16, "配置List交流起始电压(下限)", "配置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(17, "配置List交流结束电压(下限)", "配置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(18, "等待下限电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(19, "测量下限电压点实际电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 六、恢复额定电压 ----
|
||||
steps.append(chroma_step(20, "配置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(21, "配置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(delay_step(22, "等待额定电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
|
||||
# ---- 七、收尾 ----
|
||||
steps.append(chroma_step(23, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(24, "配置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(25, "清除状态", "清除状态", []))
|
||||
|
||||
program = {
|
||||
"ID": guid(),
|
||||
"StepCollection": steps,
|
||||
"ErrorStepCollection": [],
|
||||
"Parameters": program_params,
|
||||
}
|
||||
|
||||
out_path = r"D:\ACP\测试项\AC侧电压检测.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测试点:")
|
||||
print(" - 额定输入电压点")
|
||||
print(" - 输入电压上限点")
|
||||
print(" - 输入电压下限点")
|
||||
@@ -0,0 +1,253 @@
|
||||
# -*- 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']}")
|
||||
@@ -0,0 +1,211 @@
|
||||
# -*- 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 pw8001_step(index, name, method_name, params):
|
||||
return method_step(index, name, "DeviceCommand.Device.PW8001", 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)])
|
||||
|
||||
|
||||
# 程序变量
|
||||
VAR_RATED_VOLT = guid() # 额定输入电压
|
||||
VAR_RATED_FREQ = guid() # 额定频率
|
||||
VAR_PW_CHANNEL = guid() # 功率分析仪通道号
|
||||
VAR_STABLE_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_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_STABLE_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("源", "System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "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_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(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_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输出", []))
|
||||
|
||||
# ---- 三、等待OBC启动并稳定在额定负载 ----
|
||||
steps.append(delay_step(10, "等待OBC启动稳定(额定负载)", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 四、功率分析仪测量输入电流(有效值) ----
|
||||
steps.append(pw8001_step(11, "测量输入电流有效值", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、收尾 ----
|
||||
steps.append(chroma_step(12, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(13, "配置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(14, "清除错误队列", "清除错误队列", []))
|
||||
|
||||
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']}")
|
||||
@@ -0,0 +1,253 @@
|
||||
# -*- 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_ACQ_MODE = "DeviceCommand.Devices.TekAcquisitionMode, DeviceCommand, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
|
||||
ENUM_MEAS_TYPE = "DeviceCommand.Devices.TekMeasurementType, 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 tek_step(index, name, method_name, params):
|
||||
return method_step(index, name, "DeviceCommand.Devices.TektronixMSO", 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_RATED_FREQ = guid() # 额定频率
|
||||
VAR_OSC_CHANNEL = guid() # 示波器电流通道号
|
||||
VAR_MEAS_NUM = guid() # 测量项编号
|
||||
VAR_SCREENSHOT_PATH = guid() # 截图保存路径
|
||||
VAR_TEST_COUNT = 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_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_OSC_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_MEAS_NUM, "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_SCREENSHOT_PATH, "IsVisible": True, "IsEditable": True, "Name": "截图保存路径",
|
||||
"Type": STRING_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_TEST_COUNT, "IsVisible": True, "IsEditable": True, "Name": "测试次数",
|
||||
"Type": INT_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
]
|
||||
|
||||
steps = []
|
||||
|
||||
# ---- 一、示波器初始化(峰值检测模式) ----
|
||||
steps.append(tek_step(1, "设置采集模式为峰值检测", "设置采集模式",
|
||||
[param("模式", ENUM_ACQ_MODE, 1)])) # PEAKdetect=1
|
||||
steps.append(tek_step(2, "设置水平刻度(20ms/div)", "设置水平刻度",
|
||||
[param("秒每格", DOUBLE_TYPE, 0.02)])) # 20ms/div 捕获冲击波形
|
||||
steps.append(tek_step(3, "设置记录长度", "设置记录长度",
|
||||
[param("长度", "System.Int64, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", 10000)]))
|
||||
|
||||
# ---- 二、添加冲击电流最大值测量 ----
|
||||
steps.append(tek_step(4, "开启测量项", "开启测量项",
|
||||
[param("测量项编号", INT_TYPE, use_var=True,
|
||||
var_name="测量项编号", var_id=VAR_MEAS_NUM)]))
|
||||
steps.append(tek_step(5, "设置测量类型为MAXimum", "设置测量类型",
|
||||
[param("测量项编号", INT_TYPE, use_var=True,
|
||||
var_name="测量项编号", var_id=VAR_MEAS_NUM),
|
||||
param("类型", ENUM_MEAS_TYPE, 4)])) # MAXimum=4
|
||||
steps.append(tek_step(6, "设置测量源为电流通道", "设置测量源",
|
||||
[param("测量项编号", INT_TYPE, use_var=True,
|
||||
var_name="测量项编号", var_id=VAR_MEAS_NUM),
|
||||
param("源名称", STRING_TYPE, use_var=True,
|
||||
var_name="示波器电流通道号", var_id=VAR_OSC_CHANNEL)]))
|
||||
|
||||
# ---- 三、交流源设置额定输入(初始0V,准备突然施加) ----
|
||||
steps.append(chroma_step(7, "初始化三相List模式(单次循环)", "初始化三相List模式",
|
||||
[param("loopCount", INT_TYPE, "1")]))
|
||||
steps.append(chroma_step(8, "配置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(9, "配置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)]))
|
||||
# 初始电压设为0V,准备突然施加额定电压
|
||||
steps.append(chroma_step(10, "配置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(11, "配置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(12, "配置List执行时间(快速上升)", "配置List执行时间Async",
|
||||
[param("step1", DOUBLE_TYPE, 10.0), # 10ms 快速上升
|
||||
param("step2", DOUBLE_TYPE, 10.0),
|
||||
param("step3", DOUBLE_TYPE, 10.0)]))
|
||||
|
||||
# ---- 四、启动示波器采集,然后突然施加额定电压 ----
|
||||
steps.append(tek_step(13, "启动示波器采集", "设置采集状态",
|
||||
[param("运行", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", True)]))
|
||||
steps.append(delay_step(14, "等待示波器就绪", 100))
|
||||
steps.append(chroma_step(15, "启动List输出(突然施加额定电压)", "启动List输出", []))
|
||||
|
||||
# ---- 五、等待冲击电流事件完成,读取最大值 ----
|
||||
steps.append(delay_step(16, "等待冲击电流事件完成", 500))
|
||||
steps.append(tek_step(17, "查询冲击电流最大值", "查询测量项当前值",
|
||||
[param("测量项编号", INT_TYPE, use_var=True,
|
||||
var_name="测量项编号", var_id=VAR_MEAS_NUM)]))
|
||||
|
||||
# ---- 六、保存波形截图 ----
|
||||
steps.append(tek_step(18, "保存冲击电流波形截图", "保存屏幕截图",
|
||||
[param("上位机文件路径", STRING_TYPE, use_var=True,
|
||||
var_name="截图保存路径", var_id=VAR_SCREENSHOT_PATH)]))
|
||||
|
||||
# ---- 七、收尾 ----
|
||||
steps.append(tek_step(19, "停止示波器采集", "设置采集状态",
|
||||
[param("运行", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", False)]))
|
||||
steps.append(chroma_step(20, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(21, "配置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(22, "清除错误队列", "清除错误队列", []))
|
||||
|
||||
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']}")
|
||||
@@ -0,0 +1,247 @@
|
||||
# -*- 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']}")
|
||||
@@ -0,0 +1,306 @@
|
||||
# -*- 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")
|
||||
@@ -0,0 +1,269 @@
|
||||
# -*- 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_VOLT_LOWER = guid() # OBC输出电压下限
|
||||
VAR_VOLT_UPPER = guid() # OBC输出电压上限
|
||||
VAR_LOAD_LOWER = guid() # 达到下限电压的负载电流
|
||||
VAR_LOAD_UPPER = guid() # 达到上限电压的负载电流
|
||||
VAR_PW_CHANNEL = guid() # 功率分析仪通道号
|
||||
VAR_HOLD_TIME = 60000 # 1min = 60000ms (固定值)
|
||||
|
||||
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_VOLT_LOWER, "IsVisible": True, "IsEditable": True, "Name": "OBC输出电压下限",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_VOLT_UPPER, "IsVisible": True, "IsEditable": True, "Name": "OBC输出电压上限",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_LOAD_LOWER, "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_LOAD_UPPER, "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},
|
||||
]
|
||||
|
||||
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
|
||||
|
||||
# ---- 四、调节负载使输出电压为下限值 ----
|
||||
steps.append(s7200_step(13, "设置CC模式电流(达到下限电压)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="达到下限电压的负载电流", var_id=VAR_LOAD_LOWER)]))
|
||||
steps.append(s7200_step(14, "打开通道(加载至下限电压)", "设置通道开关",
|
||||
[param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", True)]))
|
||||
steps.append(delay_step(15, "等待输出电压稳定在下限", 3000))
|
||||
steps.append(pw8001_step(16, "测量下限电压点输出电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
steps.append(delay_step(17, "下限电压持续运行1min", VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(18, "记录下限电压最大值", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、调节负载使输出电压为上限值 ----
|
||||
steps.append(s7200_step(19, "设置CC模式电流(达到上限电压)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="达到上限电压的负载电流", var_id=VAR_LOAD_UPPER)]))
|
||||
steps.append(delay_step(20, "等待输出电压稳定在上限", 3000))
|
||||
steps.append(pw8001_step(21, "测量上限电压点输出电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
steps.append(delay_step(22, "上限电压持续运行1min", VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(23, "记录上限电压最大值", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 六、收尾 ----
|
||||
steps.append(s7200_step(24, "关闭负载通道", "设置通道开关",
|
||||
[param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", False)]))
|
||||
steps.append(chroma_step(25, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(26, "配置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(27, "清除状态", "清除状态", []))
|
||||
|
||||
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测试点:")
|
||||
print(" - OBC输出电压下限:调节负载使输出电压达到下限,持续运行1min")
|
||||
print(" - OBC输出电压上限:调节负载使输出电压达到上限,持续运行1min")
|
||||
print("\n注意:需要用户根据OBC规格填写输出电压上下限及对应的负载电流值")
|
||||
@@ -0,0 +1,240 @@
|
||||
# -*- 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"
|
||||
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 pw8001_step(index, name, method_name, params):
|
||||
return method_step(index, name, "DeviceCommand.Device.PW8001", 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)])
|
||||
|
||||
|
||||
# 程序变量
|
||||
VAR_PHASE_VOLT = guid() # 相电压
|
||||
VAR_FREQ = guid() # 额定频率
|
||||
VAR_PHASE_DEVIATION = guid() # 相位偏差角度(如5°)
|
||||
VAR_PW_CHANNEL = guid() # 功率分析仪通道号
|
||||
VAR_STABLE_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_PHASE_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_PHASE_DEVIATION, "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_STABLE_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, 100.0),
|
||||
param("step2", DOUBLE_TYPE, 100.0),
|
||||
param("step3", DOUBLE_TYPE, 100.0)]))
|
||||
|
||||
# ---- 三、正常相位测试(基准) ----
|
||||
# 三相正常相位:L1=0°, L2=120°, L3=240°
|
||||
steps.append(chroma_step(5, "配置List起始角度(正常相位)", "配置List起始角度Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 120.0),
|
||||
param("step3", DOUBLE_TYPE, 240.0)]))
|
||||
steps.append(chroma_step(6, "配置List交流起始电压(额定)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相电压", var_id=VAR_PHASE_VOLT),
|
||||
param("step2", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相电压", var_id=VAR_PHASE_VOLT),
|
||||
param("step3", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相电压", var_id=VAR_PHASE_VOLT)]))
|
||||
steps.append(chroma_step(7, "配置List交流结束电压(额定)", "配置List交流结束电压Async",
|
||||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相电压", var_id=VAR_PHASE_VOLT),
|
||||
param("step2", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相电压", var_id=VAR_PHASE_VOLT),
|
||||
param("step3", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相电压", var_id=VAR_PHASE_VOLT)]))
|
||||
steps.append(chroma_step(8, "启动List输出(正常相位)", "启动List输出", []))
|
||||
steps.append(delay_step(9, "等待正常相位稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(10, "测量正常相位输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 四、相位偏差+5°测试 ----
|
||||
# L1=0°+5°=5°, L2=120°+5°=125°, L3=240°+5°=245°
|
||||
steps.append(chroma_step(11, "配置List起始角度(+5°偏差)", "配置List起始角度Async",
|
||||
[param("step1", DOUBLE_TYPE, use_var=True,
|
||||
var_name="相位偏差角度", var_id=VAR_PHASE_DEVIATION),
|
||||
param("step2", DOUBLE_TYPE, 125.0),
|
||||
param("step3", DOUBLE_TYPE, 245.0)]))
|
||||
steps.append(delay_step(12, "等待+5°偏差稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(13, "测量+5°偏差输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、相位偏差-5°测试 ----
|
||||
# L1=0°-5°=-5°(或355°), L2=120°-5°=115°, L3=240°-5°=235°
|
||||
steps.append(chroma_step(14, "配置List起始角度(-5°偏差)", "配置List起始角度Async",
|
||||
[param("step1", DOUBLE_TYPE, -5.0),
|
||||
param("step2", DOUBLE_TYPE, 115.0),
|
||||
param("step3", DOUBLE_TYPE, 235.0)]))
|
||||
steps.append(delay_step(15, "等待-5°偏差稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(16, "测量-5°偏差输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 六、恢复正常相位 ----
|
||||
steps.append(chroma_step(17, "配置List起始角度(恢复正常)", "配置List起始角度Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 120.0),
|
||||
param("step3", DOUBLE_TYPE, 240.0)]))
|
||||
steps.append(delay_step(18, "等待恢复正常", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 七、收尾 ----
|
||||
steps.append(chroma_step(19, "停止输出(电压归零)", "配置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, "配置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(21, "清除状态", "清除状态", []))
|
||||
|
||||
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测试相位点:")
|
||||
print(" - 正常相位:L1=0°, L2=120°, L3=240°")
|
||||
print(" - +5°偏差:L1=5°, L2=125°, L3=245°")
|
||||
print(" - -5°偏差:L1=-5°, L2=115°, L3=235°")
|
||||
@@ -0,0 +1,267 @@
|
||||
# -*- 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_RATED_FREQ = guid() # 额定频率
|
||||
VAR_RATED_POWER = guid() # OBC额定功率
|
||||
VAR_50PCT_POWER = guid() # 50%负载功率
|
||||
VAR_300W_OR_5PCT = guid() # 300W或5%功率(取大者)
|
||||
VAR_PW_CHANNEL = guid() # 功率分析仪通道号
|
||||
VAR_STABLE_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_RATED_POWER, "IsVisible": True, "IsEditable": True, "Name": "OBC额定功率",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_50PCT_POWER, "IsVisible": True, "IsEditable": True, "Name": "50%负载功率",
|
||||
"Type": DOUBLE_TYPE, "Category": 0, "Value": None, "LowerLimit": None,
|
||||
"UpperLimit": None, "Result": True, "IsUseVar": False,
|
||||
"VariableName": None, "VariableID": None},
|
||||
{"ID": VAR_300W_OR_5PCT, "IsVisible": True, "IsEditable": True, "Name": "300W或5%功率(取大者)",
|
||||
"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_STABLE_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 = []
|
||||
|
||||
# ---- 一、功率分析仪初始化(IEC模式,包含功率因数测量) ----
|
||||
steps.append(pw8001_step(1, "设置测试模式IEC", "设置测试模式_IEC", []))
|
||||
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_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(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_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启动", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 三、负载(S7200)设置:50%负载点测试 ----
|
||||
steps.append(s7200_step(11, "设置为远程模式", "设置为远程模式", []))
|
||||
steps.append(s7200_step(12, "设置负载工作模式CC", "设置负载工作模式",
|
||||
[param("模式", ENUM_LOAD_MODE, 0)])) # CC=0
|
||||
steps.append(s7200_step(13, "设置CC模式电流(50%负载)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="50%负载功率", var_id=VAR_50PCT_POWER)]))
|
||||
steps.append(s7200_step(14, "打开通道(50%负载)", "设置通道开关",
|
||||
[param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", True)]))
|
||||
steps.append(delay_step(15, "等待50%负载稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 四、测量50%负载点的功率因数 ----
|
||||
steps.append(pw8001_step(16, "测量50%负载有功功率", "查询功率_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
steps.append(pw8001_step(17, "测量50%负载功率因数", "发送自定义命令",
|
||||
[param("命令", STRING_TYPE, ":MEAS:PF?")]))
|
||||
steps.append(delay_step(18, "记录50%负载数据", 1000))
|
||||
|
||||
# ---- 五、切换到300W或5%负载点测试 ----
|
||||
steps.append(s7200_step(19, "设置CC模式电流(300W或5%负载)", "设置CC模式电流",
|
||||
[param("电流", DOUBLE_TYPE, use_var=True,
|
||||
var_name="300W或5%功率(取大者)", var_id=VAR_300W_OR_5PCT)]))
|
||||
steps.append(delay_step(20, "等待300W/5%负载稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 六、测量300W或5%负载点的功率因数 ----
|
||||
steps.append(pw8001_step(21, "测量300W/5%负载有功功率", "查询功率_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
steps.append(pw8001_step(22, "测量300W/5%负载功率因数", "发送自定义命令",
|
||||
[param("命令", STRING_TYPE, ":MEAS:PF?")]))
|
||||
steps.append(delay_step(23, "记录300W/5%负载数据", 1000))
|
||||
|
||||
# ---- 七、收尾 ----
|
||||
steps.append(s7200_step(24, "关闭负载通道", "设置通道开关",
|
||||
[param("开关", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", False)]))
|
||||
steps.append(chroma_step(25, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(26, "配置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(27, "清除错误队列", "清除错误队列", []))
|
||||
|
||||
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判定标准:")
|
||||
print(" - 50%负载点:功率因数 ≥ 0.99")
|
||||
print(" - 300W或5%负载点:功率因数 ≥ 0.9")
|
||||
@@ -0,0 +1,256 @@
|
||||
# -*- 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']}")
|
||||
@@ -0,0 +1,299 @@
|
||||
# -*- 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"
|
||||
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 pw8001_step(index, name, method_name, params):
|
||||
return method_step(index, name, "DeviceCommand.Device.PW8001", 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)])
|
||||
|
||||
|
||||
# 程序变量
|
||||
VAR_RATED_VOLT = guid() # 额定输入电压
|
||||
VAR_FREQ = guid() # 额定频率
|
||||
VAR_LIMIT_VOLT = guid() # 限压保护阈值(预期值)
|
||||
VAR_STEP_VOLT = 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_LIMIT_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_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},
|
||||
{"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, 100.0),
|
||||
param("step2", DOUBLE_TYPE, 100.0),
|
||||
param("step3", DOUBLE_TYPE, 100.0)]))
|
||||
|
||||
# ---- 三、额定电压启动OBC ----
|
||||
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, 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(9, "启动List输出(额定电压)", "启动List输出", []))
|
||||
steps.append(delay_step(10, "等待OBC启动稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(11, "测量额定电压点输入电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 四、逐步升压至限压阈值(示例:额定+5%、+10%、+15%...) ----
|
||||
# 这里使用固定示例值,实际需要根据用户填写的额定电压和步进值计算
|
||||
# 假设额定220V,步进10V,测试点:231V(105%)、242V(110%)、253V(115%)、264V(120%)
|
||||
steps.append(chroma_step(12, "升压至105%额定电压", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 231.0),
|
||||
param("step2", DOUBLE_TYPE, 231.0),
|
||||
param("step3", DOUBLE_TYPE, 231.0)]))
|
||||
steps.append(chroma_step(13, "保持105%额定电压", "配置List交流结束电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 231.0),
|
||||
param("step2", DOUBLE_TYPE, 231.0),
|
||||
param("step3", DOUBLE_TYPE, 231.0)]))
|
||||
steps.append(delay_step(14, "等待105%电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(15, "测量105%电压点输入电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
steps.append(chroma_step(16, "升压至110%额定电压", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 242.0),
|
||||
param("step2", DOUBLE_TYPE, 242.0),
|
||||
param("step3", DOUBLE_TYPE, 242.0)]))
|
||||
steps.append(chroma_step(17, "保持110%额定电压", "配置List交流结束电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 242.0),
|
||||
param("step2", DOUBLE_TYPE, 242.0),
|
||||
param("step3", DOUBLE_TYPE, 242.0)]))
|
||||
steps.append(delay_step(18, "等待110%电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(19, "测量110%电压点输入电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
steps.append(chroma_step(20, "升压至115%额定电压", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 253.0),
|
||||
param("step2", DOUBLE_TYPE, 253.0),
|
||||
param("step3", DOUBLE_TYPE, 253.0)]))
|
||||
steps.append(chroma_step(21, "保持115%额定电压", "配置List交流结束电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 253.0),
|
||||
param("step2", DOUBLE_TYPE, 253.0),
|
||||
param("step3", DOUBLE_TYPE, 253.0)]))
|
||||
steps.append(delay_step(22, "等待115%电压稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(23, "测量115%电压点输入电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
steps.append(chroma_step(24, "升压至120%额定电压(限压点)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 264.0),
|
||||
param("step2", DOUBLE_TYPE, 264.0),
|
||||
param("step3", DOUBLE_TYPE, 264.0)]))
|
||||
steps.append(chroma_step(25, "保持120%额定电压(限压点)", "配置List交流结束电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 264.0),
|
||||
param("step2", DOUBLE_TYPE, 264.0),
|
||||
param("step3", DOUBLE_TYPE, 264.0)]))
|
||||
steps.append(delay_step(26, "等待限压点稳定", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
steps.append(pw8001_step(27, "测量限压点输入电压", "查询电压_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、降压恢复额定电压 ----
|
||||
steps.append(chroma_step(28, "降压至额定电压", "配置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(29, "保持额定电压", "配置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(30, "等待恢复正常", var_name="各电压点保持时间ms", var_id=VAR_HOLD_TIME))
|
||||
|
||||
# ---- 六、收尾 ----
|
||||
steps.append(chroma_step(31, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(32, "配置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(33, "清除状态", "清除状态", []))
|
||||
|
||||
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测试电压点(示例,220V系统):")
|
||||
print(" - 额定电压:220V (100%)")
|
||||
print(" - 105%额定:231V")
|
||||
print(" - 110%额定:242V")
|
||||
print(" - 115%额定:253V")
|
||||
print(" - 120%额定:264V (限压测试点)")
|
||||
print("\n注意:步骤12-27的电压值为示例(220V系统),请根据实际额定电压和限压阈值调整")
|
||||
@@ -0,0 +1,257 @@
|
||||
# -*- 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"
|
||||
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 pw8001_step(index, name, method_name, params):
|
||||
return method_step(index, name, "DeviceCommand.Device.PW8001", 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)])
|
||||
|
||||
|
||||
# 程序变量
|
||||
VAR_RATED_VOLT = guid() # 额定相电压
|
||||
VAR_FREQ = guid() # 额定频率
|
||||
VAR_UNBALANCE_PCT = guid() # 电压不平衡度(%)
|
||||
VAR_PW_CHANNEL = guid() # 功率分析仪通道号
|
||||
VAR_STABLE_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_UNBALANCE_PCT, "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_STABLE_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, 100.0),
|
||||
param("step2", DOUBLE_TYPE, 100.0),
|
||||
param("step3", DOUBLE_TYPE, 100.0)]))
|
||||
steps.append(chroma_step(7, "配置List起始角度(标准120°)", "配置List起始角度Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 120.0),
|
||||
param("step3", DOUBLE_TYPE, 240.0)]))
|
||||
|
||||
# ---- 三、正常电压测试(基准) ----
|
||||
# 三相额定电压:L1=L2=L3=额定
|
||||
steps.append(chroma_step(8, "配置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(9, "配置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(10, "启动List输出(额定平衡电压)", "启动List输出", []))
|
||||
steps.append(delay_step(11, "等待额定电压稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(12, "测量额定平衡电压输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 四、5%电压不平衡测试(L1相降低5%) ----
|
||||
# 假设额定220V,5%不平衡=11V,L1=209V,L2=L3=220V
|
||||
# 这里使用固定值示例,实际需要根据用户填写的额定电压和不平衡度计算
|
||||
steps.append(chroma_step(13, "配置List交流起始电压(5%不平衡-L1降低)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 209.0), # 220V * 0.95 = 209V
|
||||
param("step2", DOUBLE_TYPE, 220.0),
|
||||
param("step3", DOUBLE_TYPE, 220.0)]))
|
||||
steps.append(chroma_step(14, "配置List交流结束电压(5%不平衡-L1降低)", "配置List交流结束电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 209.0),
|
||||
param("step2", DOUBLE_TYPE, 220.0),
|
||||
param("step3", DOUBLE_TYPE, 220.0)]))
|
||||
steps.append(delay_step(15, "等待5%不平衡电压稳定", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
steps.append(pw8001_step(16, "测量5%不平衡电压输入电流", "查询电流_不含变比",
|
||||
[param("通道号", INT_TYPE, use_var=True,
|
||||
var_name="功率分析仪通道号", var_id=VAR_PW_CHANNEL)]))
|
||||
|
||||
# ---- 五、恢复正常电压 ----
|
||||
steps.append(chroma_step(17, "配置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(18, "配置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(delay_step(19, "等待恢复正常", var_name="稳定等待时间ms", var_id=VAR_STABLE_TIME))
|
||||
|
||||
# ---- 六、收尾 ----
|
||||
steps.append(chroma_step(20, "停止输出(电压归零)", "配置List交流起始电压Async",
|
||||
[param("step1", DOUBLE_TYPE, 0.0),
|
||||
param("step2", DOUBLE_TYPE, 0.0),
|
||||
param("step3", DOUBLE_TYPE, 0.0)]))
|
||||
steps.append(chroma_step(21, "配置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(22, "清除状态", "清除状态", []))
|
||||
|
||||
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测试电压点:")
|
||||
print(" - 额定平衡电压:L1=L2=L3=额定")
|
||||
print(" - 5%不平衡电压:L1=95%额定,L2=L3=额定(示例:209V/220V/220V)")
|
||||
print("\n注意:步骤13-14的电压值为示例(220V系统),请根据实际额定电压调整")
|
||||