ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从零到一搭好航天任务控制系统:Open MCT × YAMCS 遥测可视化与指令下发实战

从零到一搭好航天任务控制系统:Open MCT × YAMCS 遥测可视化与指令下发实战

从零到一搭好航天任务控制系统:Open MCT × YAMCS 遥测可视化与指令下发实战

【免费下载链接】openmctA web based mission control framework.项目地址: https://gitcode.com/gh_mirrors/op/openmct

Open MCT 是 NASA 开源的 Web 任务控制前端框架,YAMCS 是专注遥测与指令处理的开源任务控制系统后端。Open MCT 与 YAMCS 的集成,就是一套完整航天任务控制系统的核心:遥测可视化曲线实时滚动、历史数据可回溯、指令在浏览器里一键下发。跟到第 3 节末尾,你的浏览器里就有一条随时间滚动的遥测曲线。

🛰️ 一次在轨联调:三路遥测,一个安全模式开关

某次在轨联调,地面站要同时盯住三路温度、电压遥测,还得随时准备切到安全模式。先对齐两个词:遥测(telemetry)可以理解成设备的实时体检数据,温度和电压这类状态持续上报;指令(command)是反方向,从地面发给设备的操作命令。

靠人手盯几个终端窗口、靠喊话传数,出问题时反应链太长。把 Open MCT 摆在前端、YAMCS 摆在后端,这条链路就顺了:前端一块屏看全部,后端负责收数据、存历史、执行指令。

分工速览:Open MCT 画界面,YAMCS 管数据

Open MCT 强项是把曲线、仪表盘、表格这些视图组件拼成一块控制台,但它自己不产生数据。YAMCS 干的是后端活:收遥测包、解析参数、归档历史、校验并执行指令。说白了,前端只管画,后端只管算。

Open MCT 负责YAMCS 负责
把遥测画成曲线、仪表盘、表格等视图采集设备上报的遥测包,按参数解析
布局组织、时间导播、告警通知等交互历史数据持久化,提供归档查询
承载指令下发界面,把操作变成请求校验指令模板,执行并回执

任务控制系统搭建:第一条遥测曲线跑通

你手里需要 Node 14+、npm 6+、Git,以及一份 JRE 8+(跑 YAMCS 用)。先把 Open MCT 拉下来并启动,这一步装好前端依赖并跑起本地开发服务器:

git clone https://gitcode.com/gh_mirrors/op/openmct cd openmct && npm install && npm start

浏览器打开 http://localhost:8080 能看到空白控制台,说明前端就绪。再开一个终端,把官网下载的 YAMCS 包解压后直接启动,它的 simulator 实例会持续吐出演示用遥测包:

cd yamcs-<version> && bin/yamcs-server.sh

前后端各自都活着了,中间缺一根线——社区维护的 openmct-yamcs 插件就是这根线,构建后放进 Open MCT 的插件目录:

git clone <openmct-yamcs 仓库> cd openmct-yamcs && npm install && npm run build cp -r dist/ ../openmct/src/plugins/yamcs

然后写插件的连接参数,解决"连哪个实例、读哪个包"的问题,新建src/plugins/yamcs/config.js:

export default { yamcs: { url: 'http://localhost:8090', instance: 'simulator', processor: 'realtime', packet: 'simulator.tlm.PACKET1' } };

最后把插件挂到应用里。在src/MCT.js的插件注册区加上:

import YamcsPlugin from './plugins/yamcs'; mct.install(YamcsPlugin({ yamcsUrl: 'http://localhost:8090', instance: 'simulator' }));

重新加载页面,在左侧树里找到 YAMCS 同步下来的遥测对象,创建一条 Plot 视图把它们拖进去。到这一步,浏览器里已经有一条随时间滚动的实时曲线了。

能力解锁:遥测可视化与指令下发的三个进阶

曲线跑通了,剩下三件事:看、动、防。

让数据被看见:实时遥测可视化与历史数据回溯

实时滚动依赖底部的时间导播(Time Conductor)——它就是一条控制"现在看哪个时间段"的滑杆。接入 YAMCS 后把它切到 REAL-TIME 模式,曲线会跟着最新遥测持续前进:

复盘时切回 FIXED TIMESPAN(固定时间跨度)模式,框选故障发生的几分钟,同一套视图就变成回放器:

要自定义某条曲线的取数与样式,在src/plugins/charts/的视图配置里声明 series 即可:

const plotConfig = { type: 'line', series: [{ source: 'yamcs://simulator/realtime/simulator.tlm.PACKET1.param1', color: 'rgb(75,192,192)', label: 'Parameter 1' }] };

时间跨度很长的查询走 YAMCS 的归档接口,按起止时间取参数:

yamcsClient.archiveQuery({ instance: 'simulator', start: start.toISOString(), end: end.toISOString(), parameters: ['simulator.tlm.PACKET1.param1'] });

让操作可执行:指令模板加载与一键下发界面

指令不手敲。先从 YAMCS 拉模板,参数名、类型、默认值一次到位:

const templates = await yamcsClient.getCommandTemplates('simulator', 'commands');

发送界面用 Open MCT 的表单组件搭(见src/api/forms/),核心只有一个方法——校验通过后把参数原样交给 YAMCS 执行:

sendCommand() { this.yamcsClient.sendCommand( 'simulator', this.command.name, this.arguments); }

让异常不被忽视:实时告警订阅怎么接

盯屏幕不如让系统喊你。订阅 YAMCS 的事件流,命中 ALARM 就走 Open MCT 的通知接口(src/api/notifications/)弹窗:

yamcsClient.subscribeToEvents('simulator', (event) => { if (event.type !== 'ALARM') return; notificationService.notify({ title: '遥测告警', message: `参数 ${event.parameter} 超限: ${event.value}`, severity: 'critical' }); });

阈值本身在 YAMCS 侧定义,前端只负责把越限事件推到顶栏,值班的人不用一直盯曲线。

上生产前 checklist:构建产物、压缩 CDN、存储与安全

  • 构建产物:npm run build:prod产出dist/,交给 Nginx 这类静态服务器托管,别拿开发服务器直接对外。
  • 压缩与 CDN:给静态资源开 Gzip/Brotli,JS、字体、图片挂 CDN,首屏加载时间能砍一大半。
  • 存储选型:遥测量大就换 YAMCS 的 PostgreSQL 后端做归档,Open MCT 前端只放界面配置这类轻对象。
  • 安全:指令下发接口不要裸露公网,加认证和角色控制;操作留审计日志,告警按 severity 分级,critical 才推顶栏通知。
  • 连接监控:前端到 YAMCS 的 WebSocket 要有断线重连和提示,避免控制台断流后界面无任何异常表现。

延伸方向:多实例、AI 预测与移动端

单机链路跑通后,自然的下一步是把插件层抽象出实例列表,同一块屏同时接多个 YAMCS 实例做多任务协同。再往前,可以基于归档数据做遥测预测分析,把故障苗头在越限之前找出来。移动端适配则是把现有布局按窄屏重排,让值班状态随时带在身上。

【免费下载链接】openmctA web based mission control framework.项目地址: https://gitcode.com/gh_mirrors/op/openmct

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表