车辆数字座舱与 BMCLI 数据接入示例
本示例提供两个可以分别运行的入口:数字座舱用于体验视觉与交互,基础只读页面用于获取 BMCLI 信号。全部页面资源来自本地。
| 入口 | 内容 | 数据来源 |
|---|---|---|
| cockpit/index.html | 车速仪表、方向盘、档位、转向灯、60 秒曲线与 CSV 导出 | 明确标注的模拟数据,无需硬件 |
| web/index.html | VehicleStatus 基础只读信号页与停更提示 | BMCLI Web API,需按下文准备台架 |
先打开数字座舱
Section titled “先打开数字座舱”请使用现代浏览器直接打开 cockpit/index.html,即可运行教程截图中的页面,无需安装前端依赖。车速刻度与方向盘由 SVG 绘制,曲线由 Canvas 绘制。
页面支持切换模拟工况、暂停与继续观察,以及导出当前曲线的 CSV。方向盘、档位与转向灯展示对应工况的状态。模拟数据按 20 Hz 生成,曲线显示最近 60 秒,并预填一段模拟历史;浏览器绘制频率与数据频率分开处理。?snapshot=1 可打开固定截图工况。
接入项目时,可保留显示组件,将模拟数据源替换为 BMCLI 信号。请按项目 DBC 绑定车速、档位、方向盘及转向灯,确认名称、单位、枚举与转角方向;待配置的组件显示“未配置”。真实曲线使用接口提供的实际样本及时间。
连接 BMCLI 基础只读页面
Section titled “连接 BMCLI 基础只读页面”基础只读页面在请求完成后约隔一秒读取最新值,便于轻量观察总线信号。
以下命令从 bmcli-tutorial-series 目录运行,假设已确认接收通道为 10357/0、Classic CAN 500 kbit/s,且台架允许本端使用 120 Ω 终端。实际项目可按 Bench 和接线调整;团队共用分析仪时,通过约定的全局硬件锁协调使用。
检查现有 daemon;仅在没有可用会话时启动一个不带通道的 daemon,再打开本任务通道:
bmcli daemon status --format=json# 无可用 daemon 时执行下一条;已有共享会话可以复用bmcli daemon startbmcli channel open --channel=10357/0 --mode=listen-only ` --nbitrate=500 --dbitrate=500 --termination=120 --format=jsonbmcli database load --file=examples/02-from-bus-to-signals/network/vehicle-demo.dbc ` --name=tutorial-vehicle-demo --format=jsonbmcli web start --listen=127.0.0.1:18080 ` --web-root=examples/05-web-dashboard/web --history-capacity=4096本机 /api/v1/openapi.json 提供信号计划的请求字段,可据此创建计划。下面对应 channel/database/message/history_capacity 这组字段;已有匹配计划时复用,不重复创建:
$dashboardApi = 'http://127.0.0.1:18080/api/v1'Invoke-RestMethod "$dashboardApi/signals"$dashboardPlan = @{ channel = '10357/0' database = 'tutorial-vehicle-demo' message = 'VehicleStatus' history_capacity = 4096} | ConvertTo-JsonInvoke-RestMethod "$dashboardApi/signals/plans" -Method Post ` -ContentType 'application/json' -Body $dashboardPlan浏览器打开 http://127.0.0.1:18080/。存在多个同名报文计划时,用返回的 plan_id 指定 ?plan=...。台架上需有独立的正常发送节点;页面不自行制造流量。重启 Web 后检查计划是否仍在,必要时重建。
信号数据接口
Section titled “信号数据接口”GET /api/v1/signals/latest 与 GET /api/v1/signals/history 通过 plan 和 signal 选择数据。history 使用 after 指定上次读到的样本序号,首次可从 0 开始。若返回 409 表示所需历史已过期,可记录 oldest_available/newest_available 及缺口,再用 after=oldest_available-1 继续读取。web start --web-root 的相对路径按调用者当前目录解析。
- 首次取得缓存值不立即亮绿灯;确认车速和档位的样本序号继续增加后,才标为实时。
- 数据质量异常、服务/计划不可用、连续 3 秒没有新序号,分别提示。显示旧值时保留异常状态。
- 曲线保留最近 60 秒被页面观察到的有效新样本,横轴为浏览器观察时间;断线或停更处显示曲线间断。
- Gear 优先使用返回的枚举文本,备用 P/R/N/D 映射只匹配随文 DBC。
- 刷新页面重新积累历史。完整记录、游标补齐、SSE 重连和长期存储属于后续扩展。
只删除本任务创建的信号计划,停止本任务启动的 Web,关闭本任务打开的通道并释放团队硬件锁;复用的共享 daemon 继续保留运行。删除计划可调用 DELETE /api/v1/signals/plans/{plan_id}。
无需硬件的页面状态检查:在本目录执行 node test-dashboard.cjs。该检查通过模拟 API 响应验证页面状态,适合在连接台架之前运行。
继续完善应用
Section titled “继续完善应用”可以在这两套页面源码上继续增加报文操作、实验记录和业务页面,再按正文方案交付桌面安装包或云端应用。