730 lines
38 KiB
Python
730 lines
38 KiB
Python
"""
|
|
ADP 测试项 (.adp) 文件生成器
|
|
根据 ADP 电路图设备拓扑自动生成电性能测试项文件
|
|
"""
|
|
import json
|
|
import uuid
|
|
import os
|
|
|
|
OUTPUT_DIR = r"D:\ADP\子程序"
|
|
|
|
# ============================================================
|
|
# 设备ID - 全部设为null,在ADP软件中配置实际设备后自动匹配
|
|
# ============================================================
|
|
|
|
# CancellationToken 类型
|
|
CT_TYPE = "System.Threading.CancellationToken, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"
|
|
|
|
def uid():
|
|
return str(uuid.uuid4())
|
|
|
|
def make_param(name, type_str, value, category=0, is_save=False, is_output=False):
|
|
"""创建参数对象"""
|
|
return {
|
|
"ID": uid(),
|
|
"IsVisible": True,
|
|
"Name": name,
|
|
"Type": type_str,
|
|
"Category": category,
|
|
"IsGlobal": False,
|
|
"InitialValue": None,
|
|
"Value": value,
|
|
"LowerLimit": None,
|
|
"UpperLimit": None,
|
|
"Result": True,
|
|
"IsUseVar": False,
|
|
"IsSave": is_save,
|
|
"VariableName": None,
|
|
"VariableID": None,
|
|
"IsOutputToReport": is_output
|
|
}
|
|
|
|
def make_ct_param():
|
|
return make_param("ct", CT_TYPE, None)
|
|
|
|
def make_result_param(name="Result", type_str="System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", value=""):
|
|
return make_param(name, type_str, value, category=1, is_save=True, is_output=True)
|
|
|
|
def make_method_step(name, method_name, full_name, device_id, params, is_used=True, description=None):
|
|
"""创建方法步骤"""
|
|
return {
|
|
"ID": uid(),
|
|
"IsUsed": is_used,
|
|
"Index": 0, # Will be set later
|
|
"Name": name,
|
|
"StepType": "方法",
|
|
"Method": {
|
|
"Name": method_name,
|
|
"FullName": full_name,
|
|
"DeviceID": device_id,
|
|
"Parameters": params
|
|
},
|
|
"SubProgram": None,
|
|
"LoopCount": None,
|
|
"LoopStartStepId": None,
|
|
"OKExpression": None,
|
|
"GotoSettingString": "",
|
|
"OKGotoStepID": None,
|
|
"NGGotoStepID": None,
|
|
"Description": description
|
|
}
|
|
|
|
def make_delay_step(seconds, name=None, is_used=True):
|
|
"""创建延时步骤"""
|
|
return make_method_step(
|
|
name or f"延时{seconds}秒",
|
|
"Delay_s",
|
|
"Command.Delay",
|
|
None,
|
|
[
|
|
make_param("second", "System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(seconds)),
|
|
make_ct_param()
|
|
],
|
|
is_used=is_used
|
|
)
|
|
|
|
def make_loop_start(count, name="循环开始", is_used=True):
|
|
"""创建循环开始步骤"""
|
|
return {
|
|
"ID": uid(),
|
|
"IsUsed": is_used,
|
|
"Index": 0,
|
|
"Name": name,
|
|
"StepType": "循环开始",
|
|
"Method": {
|
|
"Name": None,
|
|
"FullName": None,
|
|
"DeviceID": None,
|
|
"Parameters": [
|
|
make_param("循环次数", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", None)
|
|
]
|
|
},
|
|
"SubProgram": None,
|
|
"LoopCount": count,
|
|
"LoopStartStepId": None,
|
|
"OKExpression": None,
|
|
"GotoSettingString": "",
|
|
"OKGotoStepID": None,
|
|
"NGGotoStepID": None,
|
|
"Description": None
|
|
}
|
|
|
|
def make_loop_end(loop_start_step, name="循环结束", is_used=True):
|
|
"""创建循环结束步骤"""
|
|
return {
|
|
"ID": uid(),
|
|
"IsUsed": is_used,
|
|
"Index": 0,
|
|
"Name": name,
|
|
"StepType": "循环结束",
|
|
"Method": None,
|
|
"SubProgram": None,
|
|
"LoopCount": None,
|
|
"LoopStartStepId": loop_start_step["ID"],
|
|
"OKExpression": None,
|
|
"GotoSettingString": "",
|
|
"OKGotoStepID": None,
|
|
"NGGotoStepID": None,
|
|
"Description": None
|
|
}
|
|
|
|
def set_indices(steps):
|
|
"""设置步骤索引"""
|
|
for i, step in enumerate(steps):
|
|
step["Index"] = i + 1
|
|
return steps
|
|
|
|
def make_program(steps, parameters=None, devices=None):
|
|
"""创建完整的程序文件"""
|
|
return {
|
|
"ID": uid(),
|
|
"StepCollection": set_indices(steps),
|
|
"Parameters": parameters or [],
|
|
"Devices": devices or []
|
|
}
|
|
|
|
# ============================================================
|
|
# 1. 设备初始化
|
|
# ============================================================
|
|
def gen_device_init():
|
|
steps = []
|
|
|
|
# --- IT7800E 交流源初始化 ---
|
|
steps.append(make_method_step("交流源-重置设备", "重置设备", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()]))
|
|
steps.append(make_method_step("交流源-清除错误", "清除错误队列和状态字节", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()]))
|
|
steps.append(make_method_step("交流源-查询设备标识", "查询设备标识", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("交流源-切换远程控制", "切换远程控制模式", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()]))
|
|
steps.append(make_method_step("交流源-设置AC模式", "设置电源模式", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("模式", "DeviceCommand.Devices.PowerCouplingMode, DeviceCommand", "AC"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("交流源-关闭输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# --- N69200 高压直流负载初始化 ---
|
|
steps.append(make_method_step("高压负载-重置设备", "重置设备", "DeviceCommand.Devices.N69200", None, [make_ct_param()]))
|
|
steps.append(make_method_step("高压负载-清除错误", "清除错误队列和状态字节", "DeviceCommand.Devices.N69200", None, [make_ct_param()]))
|
|
steps.append(make_method_step("高压负载-查询设备标识", "查询设备标识", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("高压负载-设置CC模式", "设置负载模式", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("模式", "DeviceCommand.Devices.N69200+DeviceWorkMode, DeviceCommand", "CC"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# --- SPAW7000 功率分析仪初始化 ---
|
|
steps.append(make_method_step("功率分析仪-重置设备", "重置设备", "DeviceCommand.Devices.SPAW7000", None, [make_ct_param()]))
|
|
steps.append(make_method_step("功率分析仪-清除错误", "清除错误队列和状态字节", "DeviceCommand.Devices.SPAW7000", None, [make_ct_param()]))
|
|
steps.append(make_method_step("功率分析仪-查询设备标识", "查询设备标识", "DeviceCommand.Devices.SPAW7000", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("功率分析仪-设置电压量程300V", "设置电压量程", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("range", "DeviceCommand.Devices.SPAW7000+VoltageRange, DeviceCommand", "V_300"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("功率分析仪-设置电流量程10A", "设置电流量程", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("range", "DeviceCommand.Devices.SPAW7000+CurrentRange, DeviceCommand", "A_10"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# --- SDS2000X_HD 示波器初始化 ---
|
|
steps.append(make_method_step("示波器-重置设备", "重置设备", "DeviceCommand.Devices.SDS2000X_HD", None, [make_ct_param()]))
|
|
steps.append(make_method_step("示波器-清除状态", "清除状态", "DeviceCommand.Devices.SDS2000X_HD", None, [make_ct_param()]))
|
|
steps.append(make_method_step("示波器-查询设备标识", "查询设备标识", "DeviceCommand.Devices.SDS2000X_HD", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("示波器-开启CH1", "设置通道开关", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("enable", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("示波器-设置触发模式AUTO", "设置触发模式", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("mode", "DeviceCommand.Devices.SDS2000X_HD+TriggerMode, DeviceCommand", "AUTO"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# --- N36600 低压直流电源初始化 ---
|
|
steps.append(make_method_step("低压电源-设置电压12V", "设置电压", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "12.000"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("低压电源-设置电流2A", "设置电流", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "2.000"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("低压电源-关闭输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒-等待设备就绪"))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 2. IO板卡测试
|
|
# ============================================================
|
|
def gen_io_test():
|
|
steps = []
|
|
|
|
# 测试8个工位的IO控制
|
|
for station in range(1, 9):
|
|
# 单相充电-开启
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-单相充电开启",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None, # IOBoardGroup 无DeviceID(组合设备)
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "单相充电"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(0.5, f"延时0.5秒"))
|
|
|
|
# 单相充电-关闭
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-单相充电关闭",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "单相充电"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(0.5, f"延时0.5秒"))
|
|
|
|
# 抛负载-开启
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-抛负载开启",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "抛负载"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(0.5, f"延时0.5秒"))
|
|
|
|
# 抛负载-关闭
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-抛负载关闭",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "抛负载"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(0.5, f"延时0.5秒"))
|
|
|
|
# 短路测试-开启
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-短路测试开启",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "短路测试"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(0.5, f"延时0.5秒"))
|
|
|
|
# 短路测试-关闭
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-短路测试关闭",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "短路测试"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(0.5, f"延时0.5秒"))
|
|
|
|
# 蜂鸣器测试
|
|
for station in range(1, 9):
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-蜂鸣器开启",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "蜂鸣器报警"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
steps.append(make_delay_step(2, "蜂鸣器响2秒"))
|
|
for station in range(1, 9):
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-蜂鸣器关闭",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", "蜂鸣器报警"),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 3. 低压直流电源测试 (N36600)
|
|
# ============================================================
|
|
def gen_lv_dc_test():
|
|
steps = []
|
|
|
|
# 输出电压精度测试 - 多个电压点
|
|
test_voltages = [5.0, 12.0, 24.0, 36.0, 48.0]
|
|
|
|
for v in test_voltages:
|
|
steps.append(make_method_step(f"设置输出电压{v}V", "设置电压", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{v:.3f}"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step(f"开启输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(2, f"延时2秒-稳定"))
|
|
|
|
# 读取实际电压
|
|
step_v = make_method_step(f"读取实际电压", "查询实际电压", "DeviceCommand.Devices.N36600", None, [
|
|
make_ct_param(),
|
|
make_result_param("Result", value="")
|
|
])
|
|
steps.append(step_v)
|
|
|
|
# 读取实际电流
|
|
steps.append(make_method_step(f"读取实际电流", "查询实际电流", "DeviceCommand.Devices.N36600", None, [
|
|
make_ct_param(),
|
|
make_result_param("Result", value="")
|
|
]))
|
|
|
|
# 读取实际功率
|
|
steps.append(make_method_step(f"读取实际功率", "查询实际功率", "DeviceCommand.Devices.N36600", None, [
|
|
make_ct_param(),
|
|
make_result_param("Result", value="")
|
|
]))
|
|
|
|
steps.append(make_method_step(f"关闭输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 4. 交流电源测试 (IT7800E)
|
|
# ============================================================
|
|
def gen_ac_source_test():
|
|
steps = []
|
|
|
|
# 交流输入源测试 - 设置不同电压和频率
|
|
test_configs = [
|
|
(110, 50), (220, 50), (220, 60), (230, 50), (240, 60)
|
|
]
|
|
|
|
for voltage, freq in test_configs:
|
|
steps.append(make_method_step(f"设置交流电压{voltage}V 频率{freq}Hz", "设置电源模式", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("模式", "DeviceCommand.Devices.PowerCouplingMode, DeviceCommand", "AC"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step(f"设置电压{voltage}V", "设置交流电压", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{voltage:.2f}"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step(f"设置频率{freq}Hz", "设置频率", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("频率", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{freq:.2f}"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("开启交流输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(3, "延时3秒-稳定"))
|
|
|
|
# 测量
|
|
steps.append(make_method_step("查询实际电压", "查询实际电压", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("查询实际电流", "查询实际电流", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("查询实际功率", "查询实际功率", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("查询实际频率", "查询实际频率", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("查询功率因数", "查询功率因数", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
|
|
steps.append(make_method_step("关闭交流输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(2, "延时2秒"))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 5. 效率测试 (SPAW7000 + N69200)
|
|
# ============================================================
|
|
def gen_efficiency_test():
|
|
steps = []
|
|
|
|
# 效率测试流程:
|
|
# 1. 交流源供电给DUT
|
|
# 2. DUT输出到高压直流负载
|
|
# 3. 功率分析仪测量输入/输出功率
|
|
# 4. 计算效率 = 输出功率/输入功率
|
|
|
|
# 设置功率分析仪通道
|
|
steps.append(make_method_step("功率分析仪-设置通道1电压量程", "设置电压量程", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("range", "DeviceCommand.Devices.SPAW7000+VoltageRange, DeviceCommand", "V_300"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("功率分析仪-设置通道1电流量程", "设置电流量程", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("range", "DeviceCommand.Devices.SPAW7000+CurrentRange, DeviceCommand", "A_10"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# 设置负载为CC模式
|
|
steps.append(make_method_step("高压负载-设置CC模式", "设置负载模式", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("模式", "DeviceCommand.Devices.N69200+DeviceWorkMode, DeviceCommand", "CC"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# 不同功率点效率测试
|
|
load_currents = [1.0, 2.0, 5.0, 10.0, 15.0, 20.0]
|
|
for current in load_currents:
|
|
steps.append(make_method_step(f"设置负载电流{current}A", "设置恒电流CC", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{current:.4f}"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("高压负载-开启输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(3, "延时3秒-稳定"))
|
|
|
|
# 功率分析仪读取输入功率
|
|
steps.append(make_method_step("读取输入电压", "查询实际电压", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("读取输入电流", "查询实际电流", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("读取输入功率", "查询实际功率", "DeviceCommand.Devices.SPAW7000", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# 高压负载读取输出功率
|
|
steps.append(make_method_step("读取输出电压", "查询实际电压", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("读取输出电流", "查询实际电流", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("读取输出功率", "查询实际功率", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()]))
|
|
|
|
steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 6. 纹波测试 (SDS2000X_HD)
|
|
# ============================================================
|
|
def gen_ripple_test():
|
|
steps = []
|
|
|
|
# 纹波测试:用示波器测量DUT输出的电压纹波
|
|
# 示波器CH1连接到DUT输出端
|
|
|
|
# 示波器设置
|
|
steps.append(make_method_step("示波器-开启CH1", "设置通道开关", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("enable", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("示波器-设置CH1电压档位50mV", "设置通道电压档位", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_param("volts", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "0.0500"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("示波器-设置触发模式AUTO", "设置触发模式", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("mode", "DeviceCommand.Devices.SDS2000X_HD+TriggerMode, DeviceCommand", "AUTO"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("示波器-设置水平时基", "设置水平时基", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("scale", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "0.000010"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# 设置负载并测量纹波
|
|
load_currents = [1.0, 5.0, 10.0, 15.0, 20.0]
|
|
for current in load_currents:
|
|
steps.append(make_method_step(f"设置负载电流{current}A", "设置恒电流CC", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"{current:.4f}"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("高压负载-开启输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(3, "延时3秒-波形稳定"))
|
|
|
|
# 测量纹波
|
|
steps.append(make_method_step("测量CH1电压峰峰值", "查询实际电压峰峰值", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("测量CH1电压RMS", "查询实际电压均方根", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("channel", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "1"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# 截图保存
|
|
steps.append(make_method_step(f"保存波形截图-{current}A", "获取屏幕图像并保存", "DeviceCommand.Devices.SDS2000X_HD", None, [
|
|
make_param("saveFilePath", "System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", f"D:\\ADP\\纹波截图\\{current}A_纹波.png"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 7. 保护测试 (N36600 OVP/OCP + N69200)
|
|
# ============================================================
|
|
def gen_protection_test():
|
|
steps = []
|
|
|
|
# === 低压电源OVP测试 ===
|
|
steps.append(make_method_step("低压电源-设置OVP阈值", "设置过压保护值", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "60.000"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("低压电源-使能OVP", "设置电压保护使能", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("启用", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# === 低压电源OCP测试 ===
|
|
steps.append(make_method_step("低压电源-设置OCP阈值", "设置过流保护值", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "10.000"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_method_step("低压电源-使能OCP", "设置电流保护使能", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("启用", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "true"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# === 高压负载OVP测试 ===
|
|
steps.append(make_method_step("高压负载-设置OVP阈值", "设置过压保护值_OVP", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "500.000"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# === 高压负载OCP测试 ===
|
|
steps.append(make_method_step("高压负载-设置OCP阈值", "设置过流保护值_OCP", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "30.000"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# === 高压负载OPP测试 ===
|
|
steps.append(make_method_step("高压负载-设置OPP阈值", "设置过功率保护值_OPP", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("功率", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "5000.000"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# === 交流源OVP设置 ===
|
|
steps.append(make_method_step("交流源-设置OVP阈值", "设置过压保护_OVP", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("电压", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "280.00"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
# === 交流源OCP设置 ===
|
|
steps.append(make_method_step("交流源-设置OCP阈值", "设置过流保护_OCP", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("电流", "System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "30.000"),
|
|
make_ct_param()
|
|
]))
|
|
|
|
steps.append(make_delay_step(1, "延时1秒-保护参数设置完成"))
|
|
|
|
# 查询所有保护状态确认
|
|
steps.append(make_method_step("低压电源-查询错误信息", "查询错误信息", "DeviceCommand.Devices.N36600", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("高压负载-查询报警事件", "查询报警事件信息", "DeviceCommand.Devices.N69200", None, [make_ct_param(), make_result_param()]))
|
|
steps.append(make_method_step("交流源-查询错误信息", "查询错误信息", "DeviceCommand.Devices.IT7800E", None, [make_ct_param(), make_result_param()]))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 8. 设备关机
|
|
# ============================================================
|
|
def gen_shutdown():
|
|
steps = []
|
|
|
|
# 安全关机流程:先关负载,再关电源
|
|
|
|
# 关闭高压直流负载
|
|
steps.append(make_method_step("高压负载-关闭输入", "设置DC输入", "DeviceCommand.Devices.N69200", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# 关闭交流源
|
|
steps.append(make_method_step("交流源-关闭输出", "设置DC输出", "DeviceCommand.Devices.IT7800E", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# 关闭低压直流电源
|
|
steps.append(make_method_step("低压电源-关闭输出", "设置DC输出", "DeviceCommand.Devices.N36600", None, [
|
|
make_param("开启", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]))
|
|
steps.append(make_delay_step(1, "延时1秒"))
|
|
|
|
# 关闭所有工位继电器
|
|
for station in range(1, 9):
|
|
for action in ["单相充电", "抛负载", "短路测试"]:
|
|
steps.append(make_method_step(
|
|
f"{station}#工位-关闭{action}",
|
|
"执行台架动作Async",
|
|
"DeviceCommand.Devices.IOBoardGroup",
|
|
None,
|
|
[
|
|
make_param("台架序号", "System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", str(station)),
|
|
make_param("动作", "DeviceCommand.Devices.功能动作, DeviceCommand", action),
|
|
make_param("开关状态", "System.Boolean, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", "false"),
|
|
make_ct_param()
|
|
]
|
|
))
|
|
|
|
# 设备切换本地模式
|
|
steps.append(make_method_step("交流源-切换本地模式", "切换本地控制模式", "DeviceCommand.Devices.IT7800E", None, [make_ct_param()]))
|
|
steps.append(make_method_step("低压电源-切换本地模式", "切换本地控制模式", "DeviceCommand.Devices.N36600", None, [make_ct_param()]))
|
|
|
|
steps.append(make_delay_step(2, "延时2秒-关机完成"))
|
|
|
|
return make_program(steps)
|
|
|
|
# ============================================================
|
|
# 主生成逻辑
|
|
# ============================================================
|
|
if __name__ == "__main__":
|
|
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
|
|
files = {
|
|
"01-设备初始化.adp": gen_device_init,
|
|
"02-IO板卡测试.adp": gen_io_test,
|
|
"03-低压直流电源测试.adp": gen_lv_dc_test,
|
|
"04-交流电源测试.adp": gen_ac_source_test,
|
|
"05-效率测试.adp": gen_efficiency_test,
|
|
"06-纹波测试.adp": gen_ripple_test,
|
|
"07-保护测试.adp": gen_protection_test,
|
|
"08-设备关机.adp": gen_shutdown,
|
|
}
|
|
|
|
for filename, gen_func in files.items():
|
|
filepath = os.path.join(OUTPUT_DIR, filename)
|
|
data = gen_func()
|
|
with open(filepath, 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
step_count = len(data["StepCollection"])
|
|
print(f"[OK] {filename} ({step_count} steps)")
|
|
|
|
print(f"\nAll files generated in: {OUTPUT_DIR}")
|