当前位置: 首页 > news >正文

基于软件在环的飞控机建模仿真

安全关键系统(Safety-Critical System,SCS)是指由于某些行为或组合行为能够引发整体系统失效,继而导致财物损失、人员受伤等严重影响的系统,诸多安全关键领域如航空航天、核电系统、医疗设备、交通运输等领域的系统都属于安全关键系统,而这些系统中大部分核心功能是由软件实现的。

当前正处于“工业4.0”与“中国制造2025”的时代,随着时代发展进程不断加速,软件功能也越来越强大、复杂性越来越高。近几十年来,由软件失效导致安全关键系统失效进而引发重大事故的情况屡见不鲜:

  • 1996年,NASA发射Ariane5运载火箭在发射37秒后就被迫自行引爆,原因为控制飞行的软件发生了故障:在64位浮点数跳至16位浮点数的过程中发生了整数溢出问题。本次事故造成了高达25亿美元的经济损失。

  • 2009年,空客公司的A330-200型客机测速仪结冰,其飞控软件仍提供了错误的攀升信号。由于软件未设定飞机的高度上限,最终导致飞机坠毁,祖上228名机组人员及乘客无一生还,其中包含9名中国乘客。

  • 2018年10月以及2019年3月波音公司的两起737Max飞机先后坠毁的事件导致了包括机组人员在内的346人死亡,中美欧等多个国家将该飞机列为禁飞机型,波音公司因此遭受了上亿美元的损失。通过后续的事故调查,主要原因在于不完善的软件设计和不合格的适航审查。

如何进一步提高机载软件安全性,一直是航空航天领域重要的研究方向。

机载软件安全性是指通过软件验证减少机载软件生命周期内的错误,直到软件错误在可控范围内,进而保证软件在使用过程中不具备引发系统危害的能力。软件安全性分析是指对特定飞行危害发生的所有途径和因素进行分析建模,得到危害场景的模型进行分析,识别机载软件中可能造成严重后果的潜在危害,同时确定消除或降低危害的方法。

机载软件的安全性需从两个方面思考:

  1. 开展软件安全性分析及验证工作:从系统的安全性分析出发获得系统安全需求,识别其中由软件导致的危险,从而获取软件的安全规约,用于对软件进行形式化验证,保证软件设计的正确性。
  2. 开展机载软件的适航目标符合性验证工作:将适航认证标准与软件实现的功能相结合,确定软件的安全等级,分配相应的适航目标,在软件开发过程证明软件满足相应的适航目标来确保软件的安全性。

飞控系统作为飞机机载系统的核心,是安全关键关联度最高的机载系统软件之一。飞控系统包括纷繁复杂的飞行控制软件,主要完成飞行传感器数据处理、飞行姿态控制和余度管理任务,对保证飞机安全性和可靠性起着关键作用,但是现实中与飞控软件相关的研发测试过程依旧举步维艰。其主要原因是硬件设备研发成本高且周期长,并且软件程序研发和测试过程严重依赖于实体硬件,同时也缺乏有效的调试手段,无法快速、高效、准确地定位问题,导致软件研发陷入冗长的周期循环中。为应对飞控系统软件(特别是多核和多节点的复杂系统)的开发测试困境,仿真模拟技术应运而生。

数字化与工业相结合诞生了数字孪生技术。应用数字孪生技术搭建一套虚实同步的飞控系统,建立传感器、样机与仿真模型同步运行的方式方法,即可将飞控机的逻辑控制模式应用在虚拟模型中,解决复杂嵌入式系统的硬件平台在成本、可用性、可控性、可调试性、可检测性、容错检错测试等方面的问题。

天目全数字实时仿真软件SkyEye是基于可视化建模的硬件行为级仿真平台。基于SkyEye搭建的虚拟飞控机板卡可实现飞控软件程序烧录及运行功能,虚拟飞控机与硬件实物测试效果一致,满足飞控软件功能和性能要求,同时具备“软件在环”技术验证效果。项目还可与Keil、FMU环境集成仿真,进行计算周期精度验证与控制数据解算验证,解决飞控领域的安全关键问题。

▲SkyEye基于软件在环的飞控机建模仿真案例

相关文章:

  • 国外有哪些知名的CG网站?CG平台及云渲染平台
  • Kettle根据分类实现Excel文件拆分——kettle开发31
  • 视频格式转换avi格式怎么弄?分享视频转换方法
  • sqlcoder:7b sqlcoder:15b sqlcoder:70b 有什么区别呢?
  • 直接使用Three.js的 Shape和ExtrudeGeometry创建带孔几何体实现挖孔效果
  • Go模板页面浏览器显示HTML源码问题
  • 百度OCR初探-python
  • 怎么提升机器人外呼的转化效率
  • linux网络编程poll笔记
  • 实验12 路由重分布
  • STL-常用容器
  • Elastic 索引结构-倒排索引
  • 【AI绘画】Stable Diffusion 3开源
  • Linux3(进程 编辑文件 用户管理 网络)
  • C#A类调用B类的方法,在方法中更新B类的控件
  • angular2 简述
  • canvas 五子棋游戏
  • download使用浅析
  • ES6 学习笔记(一)let,const和解构赋值
  • go语言学习初探(一)
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • MySQL数据库运维之数据恢复
  • pdf文件如何在线转换为jpg图片
  • React-redux的原理以及使用
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Zepto.js源码学习之二
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 大型网站性能监测、分析与优化常见问题QA
  • 翻译--Thinking in React
  • 回流、重绘及其优化
  • 聚类分析——Kmeans
  • 驱动程序原理
  • 设计模式走一遍---观察者模式
  • 听说你叫Java(二)–Servlet请求
  • 优秀架构师必须掌握的架构思维
  • 大数据全解:定义、价值及挑战
  • # C++之functional库用法整理
  • # 透过事物看本质的能力怎么培养?
  • ### RabbitMQ五种工作模式:
  • #define,static,const,三种常量的区别
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)斐波那契Fabonacci函数
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)SpringBoot3---尚硅谷总结
  • (转)拼包函数及网络封包的异常处理(含代码)
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net Stream篇(六)
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?