把 BMCLI 融入工程系统:从测试平台到生产现场
BMCLI 不仅能支撑独立工具,也能作为设备通信服务,融入已有的测试平台和生产系统。本篇以 LabVIEW 多通道老化工站为例,介绍怎样复用总线能力,连接现场操作、自动测试与结果归档。
设想产线需要为一批控制器进行老化测试。工站连接多台 BUSMUST 分析仪,每路对应一件待测 ECU,LabVIEW 已负责供电时序、扫码和老化计时。现在需要补上多通道 CAN 观察、指定 UDS 读取、异常日志与单件判定。BMCLI 管理设备和通信任务,LabVIEW 继续组织生产流程,AI 帮助生成两者之间的适配与结果处理逻辑。
界面可以保留 LabVIEW 的前面板,也可以另做 Web 监测页;两者使用同一套设备服务与工位状态。MES 接收产品与工单结果,ERP 等系统通过企业已有业务接口衔接,按项目提供的字段和认证信息完成适配。
下面先从一个工位的调用与结果讲起,再说明多工位扩展。按实际通道数量、采集负载和测试并发配置工站,并在目标主机与设备组合上检查运行表现。
图 13-1 产品流程留在工站,设备与持续通信交给 BMCLI。工程关系示意。
给 AI 的输入:描述集成要求
Section titled “给 AI 的输入:描述集成要求”输入是平台调用与报告接口说明、产品测试资料及 Bench。下面要求 AI 生成集成适配层和接入方案;现有生产平台本身及其接口资料由项目提供。
我们有一套 LabVIEW 老化工站,已经负责扫码、供电和老化计时。请使用 BMCLI 接入多台分析仪与多路待测 ECU,台架通道、产品编号、CAN 检查和指定 UDS 读取项都在项目资料中。保留 LabVIEW 原有界面与流程,生成外部进程调用、JSON/JSONL 解析和结果归档的接入方案,明确每路任务状态、超时与取消处理。先在一条已确认通道上验证,再按工位配置扩展并测量实际负载。长时间采集由 BMCLI 后台任务完成,界面不等待长命令阻塞。每件产品分别生成结果,通过我提供的 MES 接口上传工单与序列号关联的摘要;上传失败先本地保存。本次交付适配说明、调用示例、数据约定和工站流程方案,Web 看板作为后续扩展。
AI 可以先用固定响应测试适配器,再接入真实 BMCLI。这样,进程错误、JSON 解析和业务判断就有了各自清楚的位置。
成品与效果:每件产品都有独立的老化状态
Section titled “成品与效果:每件产品都有独立的老化状态”目标工站在 LabVIEW 中按产品显示通道、老化进度、通信状态和结果入口。下表给出界面与数据的设计对应关系,随文 Python 适配器演示其中的命令调用与结果处理。
| 工站显示 | 数据来自哪里 | 操作价值 |
|---|---|---|
| 工单、产品序列号、工位 | LabVIEW 业务配置 | 将结果归到正确产品 |
| 通道与通信状态 | BMCLI 任务状态、接收统计 | 找到异常所在通道 |
| 版本与诊断结果 | 指定 UDS 读取 | 核对当前被测软件 |
| 老化进度与判定 | 工站计时及产品规则 | 分别记录各件产品结果 |
| 日志与上传状态 | 本地归档、MES 返回值 | 通信结束后仍可追查 |
实现解析:BMCLI 在成品中承担的工作
Section titled “实现解析:BMCLI 在成品中承担的工作”下面结合关键调用说明应用的实现方式。AI 生成的程序将这些调用组织成完整流程,并处理返回结果与任务收尾。
三种接入方式,各有合适的位置
Section titled “三种接入方式,各有合适的位置”| 接口 | 适合的应用 | 主要特点 |
|---|---|---|
| CLI JSON/JSONL | Python、LabVIEW、MATLAB、工位测试程序 | 用外部进程调用承接明确任务 |
| Web API | 工程面板、业务服务、多工位系统 | 共享信号、历史与实时流,总线服务与业务服务分离 |
| 远程 BMAPI | 现有 BMAPI 上位机 | 沿用公开远程接口,在可信网络访问分析仪 |
LabVIEW:接入老化工站的执行循环
Section titled “LabVIEW:接入老化工站的执行循环”单次诊断读取或状态查询可由 System Exec 调用 CLI,接收退出码、标准输出与错误输出,再解析 JSON 交给产品判定逻辑。多路工位使用各自逻辑通道与产品上下文,避免把上一件产品的结果带到下一件。持续采集采用后台任务或独立工作进程,LabVIEW 的界面循环只更新状态。需要长期显示信号时,可用 HTTP Client VI 访问 /api/v1/health、/api/v1/signals/latest 和 /api/v1/signals/history。
将耗时调用放在采集循环,界面循环只处理结果,页面操作会更流畅。需要逐样本数据时,再考虑历史游标或 SSE/WebSocket 接入。
System Exec 的命令字符串可以从简短查询开始。下面展示调用形态,aging-slot-01 是工站 Bench 中由项目定义的逻辑通道:
# 取得当前工站的台架配置,核对产品与设备通道绑定。bmcli bench show --format=json# 在已准备好的工位通道采集三秒,返回记录供 LabVIEW 解析。bmcli message recv --channel=aging-slot-01 --duration=3 --format=jsonlLabVIEW 将退出码作为调用结果检查,再按记录类型解析标准输出。长时老化采用持续任务与状态查询,短时采集只是验证接口的起点。
同一调用约定的 Python 示例
Section titled “同一调用约定的 Python 示例”随文适配器只使用 Python 标准库。最简单的调用是:
from bmcli_adapter import Bmcli
# 选择工位对应的项目配置,后续使用其中的逻辑网络名。bm = Bmcli(project=r"D:\vehicle-project")# 调用 BMCLI 版本查询,将 JSON 解析为字典。version = bm.run("version")print(version["version"])
# 短时采集三秒,返回记录供工站检查;长期采集使用后台任务。records = bm.capture("vehicle-can", duration=3)for record in records: print(record)第一项返回结构化版本信息;第二项在已准备好的通道上采集三秒,再返回 JSONL 记录。返回内容可能包含报文、状态和统计,应用可按记录类型分别处理。
使用效果可以概括为:
| 情况 | 调用方得到什么 |
|---|---|
| 正常 JSON 返回 | Python 字典,可直接访问字段 |
| BMCLI 报告错误 | BmcliError,包含错误码、说明和详情 |
| 客户端等待超时 | TimeoutExpired,由应用决定如何处理 |
| 短时采集完成 | JSONL 记录列表,供统计或报告使用 |
适配器与测试可直接查看。运行 python smoke_adapter.py 就能完成不访问总线的版本检查;硬件采集则在 Bench 和通道准备好后进行。
Python:保留一个薄适配层
Section titled “Python:保留一个薄适配层”# 以参数数组查询 Bench,分别保留退出码、标准输出与错误输出。completed = subprocess.run( ["bmcli", "bench", "show", f"--project={project}", "--format=json"], capture_output=True, text=True, encoding="utf-8", timeout=10, shell=False,)参数数组让含空格的路径和普通输入按原样传递;JSON 让调用方直接读取字段。BMCLI 的错误信息也继续保留,便于上层给出明确提示。
随文 capture 采用短时内存缓冲,采集结束后才返回。长期或高负载应用可进一步使用流式读取或日志文件。客户端超时后,设备操作可能仍在继续,应用可查询相关任务状态,再安排恢复与收尾。
MATLAB:保留分析与模型环境
Section titled “MATLAB:保留分析与模型环境”MATLAB 可以通过外部进程调用获取 BMCLI 的 JSON 结果,再转换为自身的数据结构;需要长期数据时,也可以由配套服务接入 Web 历史或实时流。已有算法、绘图和数据分析流程可以继续保留。
进程或网络接入适合实验编排与数据交换。模型固定步长内的硬实时 I/O,可结合项目的实时执行平台组织。
远程 BMAPI:沿用已有上位机
Section titled “远程 BMAPI:沿用已有上位机”BMCLI 的 remote-bmapi 服务可以让已有上位机通过网络访问现场分析仪:
# 在可信测试网启动远程 BMAPI 服务,供既有客户端访问设备。bmcli remote-bmapi start --channel=10356/0,10357/0 ` --target=<客户端IPv4> --advertise=<本机测试网IPv4> ` --name=lab-gateway# 查询远程转发、丢弃和错误计数。bmcli remote-bmapi status --format=json# 停止本次远程服务并释放相应监听资源。bmcli remote-bmapi stopremote-bmapi 负责远程访问分析仪,gateway 则表示上一章的信号网关,负责信号解析、映射与输出。两项服务分别解决设备接入和数据适配问题。
将占位地址替换为实际测试网地址后,已有 BMAPI 客户端可以通过远程接口连接。服务使用 UDP 3502/2502,部署在可信隔离网络;跨网访问通过提供认证和加密的 VPN 或受控隧道保护。
复用已有 daemon 时,远程 BMAPI 服务导出该会话中所有已打开的通道。启动前核对这份通道清单,按本次共享范围准备会话。
从单个工位,扩展到工程平台
Section titled “从单个工位,扩展到工程平台”在更大的系统中,可以保持这样一组分工:
| 系统部分 | 负责什么 |
|---|---|
| 现场 BMCLI | 设备会话、总线协议、持续任务与结构化状态 |
| 工位应用 | 执行产品用例、关联序列号、处理取消与本地异常 |
| 中央业务服务 | 工单、权限、任务分配、结果存储与报表 |
| 用户界面 | 呈现工况、操作入口与结果,适配不同角色 |
BMCLI 提供设备通信基础,生产平台组织业务流程与现场保护。上线时按目标吞吐、并发、断电恢复和权限策略检查整套系统。业务增长时可以扩展业务服务,总线处理继续复用已有接口。
把共享资源管理好
Section titled “把共享资源管理好”CLI、Web 和远程 BMAPI 服务可以复用同一 daemon 的接收链路。上层程序记录自己创建的采集、回放和服务,退出时按所有权清理,就能与其他工具更好地协作。
使用硬件发送任务时,保存 txtask add 返回的 handle,在应用的 finally 中通过 txtask remove --handle=... 删除该任务,再查询列表确认释放结果。这样可按任务管理共享设备资源。
channel claim 保护配置和持久任务,普通发送及被动观察仍可共享。团队台架的整体独占需求,则继续通过约定的全局硬件锁协调。把这些规则封装进适配层,业务代码仍然可以保持简单。
进一步探索:从接口接入到系统复用
Section titled “进一步探索:从接口接入到系统复用”这个案例还可以继续完善,也可以延伸到更多工作中。您可以从感兴趣的一项出发,与 AI 讨论下一步的实现。
将产品用例接入工位流程
Section titled “将产品用例接入工位流程”可以请 AI 将第三篇的用例集接到现有扫码和工单入口,让每次 BMCLI 操作都关联产品编号、用例编号与当前工位。参考实现是在业务流程中调用薄适配层,保存结构化结果和相关日志,再按平台原有接口上传。不同产品的差异放入用例与台架配置,工单系统继续承担自己熟悉的工作。总线测试由此成为生产流程的一部分,也保留了从报告回溯到具体要求的路径。
给老化工站增加 Web 总览
Section titled “给老化工站增加 Web 总览”保留 LabVIEW 执行流程的同时,可以请 AI 另做 Web 总览,按工位呈现产品状态、趋势与异常日志。每台现场主机管理自己的 Bench、设备会话和 BMCLI 任务,中央服务汇总状态与报告。AI 生成的工位服务使用统一的任务与结果格式,将实际端口差异留在现场配置中。需要显示实时工况时,页面经业务服务取得相应工位数据,持续收发仍在现场执行。这样增加工位主要是部署与配置,而不是为每台设备重写一套协议接入。
至此,这套系列从接入一条总线,走到了组织一个工程系统。最后的结语回顾了这条路径,也提供了继续阅读和交流的入口。
以下文档介绍本篇涉及的接口;具体参数可通过本机 JSON Help 查询。