4. Dewesoft自动化接口概览

Dewesoft的自动化能力并不是单一入口,而是围绕同一套测量内核向外暴露了多条控制通道。理解这些通道的差异,比记住某个函数名更重要:它们决定了你能否复用现有代码、能否接入CI流水线、能否在长时间无人值守测试中稳定运行。本节从“谁在控制、控制什么、怎么拿到数据”三个角度,对Dewesoft.NET API、Python集成、COM接口和内置脚本控制方式做一次横向梳理。

四条控制通道的定位

Dewesoft.NET API是面向Windows平台的托管接口,通常以DLL形式随DewesoftX安装。它适合用C#、VB.NET或F#编写独立的测试执行程序,能够直接操作项目、启动/停止采集、读取通道数据并写入文件。它的优势是类型安全、性能好、可深度集成到已有.NET测试框架中;代价是需要编译环境,部署时要保证目标机器上的Dewesoft版本与引用的程序集一致。

Python集成通常通过两种方式实现:一是用pythonnet加载Dewesoft.NET程序集,从而在Python里调用与C#相同的对象模型;二是通过Dewesoft提供的Python脚本环境或外部进程调用方式,让Python负责测试序列编排、数据处理和报告生成。Python路线的最大价值在于生态:numpy、pandas、matplotlib、pytest可以无缝衔接,适合算法验证、批量数据分析和快速原型。

COM接口是较早期的自动化方式,通过COM组件暴露Dewesoft的部分功能。它可以在VBA、LabVIEW、MATLAB、C++以及支持COM的Python环境中调用。COM接口的优点是跨语言门槛低、无需编译即可在Office或测试管理工具中驱动Dewesoft;缺点是接口粒度较粗、错误处理不如.NET直观,且对高吞吐数据读取的支持有限。

脚本控制方式指DewesoftX内置的脚本/公式/序列功能,例如在Setup中配置的公式通道、事件触发动作或内置脚本编辑器。它不依赖外部程序,直接在采集项目内部运行,适合做实时派生计算、条件触发、报警联动和简单的状态机控制。它的边界也很清楚:不适合承担复杂的测试流程编排、外部设备调度或大规模数据后处理。

Dewesoft 自动化接口:控制层 → 内核 → 数据出口 Dewesoft.NET API C# / VB.NET / F# 类型安全 · 高吞吐 Python 集成 pythonnet / 脚本环境 numpy · pandas · pytest COM 接口 VBA · LabVIEW · MATLAB 跨语言 · 粒度较粗 内置脚本 / 公式控制 项目内运行 · 实时派生 事件触发 · 报警联动 DewesoftX 测量内核 项目 · 采集 · 通道 · 触发 · 存储 实时数据流 通道值 · 时间戳 · 状态 用于在线判断与闭环 文件与项目数据 DXZ / DXD / 导出格式 用于离线分析与归档 外部工具链 CI · 报告 · 数据库 用于自动化流水线 选型速查 .NET API 深度集成 · 需编译 Python 快速原型 · 生态强 COM 跨语言 · 低门槛 内置脚本 实时 · 项目内闭环

从“控制什么”看差异

四条通道都能启动采集,但可控深度不同。.NET API和Python(经pythonnet)通常能访问到项目对象、通道对象、采集状态和事件回调,适合实现“配置—采集—判断—记录”的完整闭环。COM接口更多暴露应用级操作,例如打开项目、开始/停止采集、导出数据,对通道级实时读取的支持取决于版本和组件注册情况。内置脚本则运行在项目内部,能直接读写通道值、触发动作,但无法替代外部程序去调度其他仪器或管理测试序列。

一个常见的误区是“用Python就一定比COM好”。实际上,如果目标只是从Excel VBA里触发一次采集并导出CSV,COM可能只需十几行代码;而用Python走pythonnet,反而要处理程序集路径、版本匹配和线程模型。反过来,如果要做每秒数千点的实时判断,COM的调用开销和数据类型转换会成为瓶颈,此时.NET或Python直接调用对象模型更合适。

一个可执行的Python示例

下面示例假设已安装pythonnet,并且DewesoftX安装在默认路径。它演示了加载程序集、启动采集、读取一个通道值并停止采集的最小过程。参数为示例值,实际使用时需替换为你的项目路径和通道名。

import clr
import time

# 添加Dewesoft安装目录下的程序集引用(示例路径)
clr.AddReference(r"C:\Program Files\Dewesoft\DewesoftX\Dewesoft.App.dll")

from Dewesoft.App import Application

app = Application.Instance
app.OpenProject(r"D:\Tests\demo_project.dxz")
app.StartMeasurement()

# 等待采集稳定,示例等待2秒
time.sleep(2.0)

# 读取名为 "Torque" 的通道当前值(示例通道名)
value = app.GetChannelValue("Torque")
print(f"Torque = {value:.3f} N·m")

app.StopMeasurement()
app.SaveProject()

这段代码的关键判断点有三个:第一,AddReference的路径必须与实际安装一致,否则会在导入时抛出异常;第二,OpenProject之后要确认项目确实处于可采集状态,必要时检查app.IsReady之类的状态属性;第三,GetChannelValue返回的是瞬时值还是缓冲区最新值,取决于接口定义,做实时判断时应结合时间戳而不是盲目轮询。

选型建议与组合策略

实际项目中,四条通道往往不是互斥的。比较稳妥的组合是:用Python或.NET做外层测试序列编排和结果判定,用内置脚本做项目内的实时派生与触发,用COM作为与旧有LabVIEW或VBA工具的衔接层。这样既保留了自动化流水线的灵活性,又不会把实时性要求全部压在外层程序上。

如果团队已有pytest或unittest基础设施,优先考虑Python + pythonnet;如果测试程序需要长期稳定运行且对性能敏感,优先考虑.NET API;如果只是偶尔从Office工具触发一次采集,COM更省事;如果逻辑完全在采集项目内部,内置脚本是最轻量的选择。
无论选择哪条通道,都要固定Dewesoft版本并记录程序集或COM组件的注册信息。自动化脚本在开发机上能跑、在测试机上失败,最常见的原因就是版本不一致或权限不足。