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

“数字孪生”:为什么要仿真嵌入式系统?

01.仿真是什么?

仿真的概念非常广泛,但归根结底都是使用可控的手段来模仿真实的情况,通常应用于现实世界中实施难度大甚至是无法实践的事物。

众所周知,嵌入式系统通常是形式多样的、面向特定应用的软硬件综合体,无论是软件还是硬件都必须被高效率地设计,量体裁衣、去除冗余,具备低功耗、小体积、高集成度等特点,且通常有着高实时性、高可靠性的要求。

在嵌入式系统复杂程度飙升的当下,仿真已成为研发嵌入式系统或解决嵌入式系统中所出现的问题的主流解决方案。具备以下条件的嵌入式系统格外适合应用仿真:

  • 硬件尚在开发中/开发速度慢,较为稀缺
  • 硬件制作成本较为高昂
  • 对安全性、可靠性要求非常高

在此情形下应用仿真,可以带来以下好处:

  • 提前进行软件开发、测试和调试
  • 测试与硬件相连的其他设备
  • 大幅节约成本
  • ……

举个简单的例子来理解仿真:

综上,仿真可被应用于嵌入式系统前期设计到后期生产、维护的全生命周期。对嵌入式系统进行仿真的过程是“数字孪生”中的重要一环。数字孪生是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射,从而反映相对应的实体装备的全生命周期过程[1]。数字孪生体是仿真应用新巅峰,在数字孪生体成熟度的每个阶段,仿真都扮演着不可或缺的角色。

02.仿真的优势

提高效率

嵌入式系统开发人员在进行开发时,如果没有实际设备支撑,就无法测试软件的正确性与合理性,而采用仿真工具便可调试算法的逻辑部分,更侧重于可能存在的物理限制或错误。独立于硬件的深度测试可大大提升嵌入式系统的开发效率并缩短开发周期。

控制测试环境

对嵌入式系统进行仿真可使测试环境高效可控。仿真环境可被随时重置并快速生成新的测试结果,无需等待冗长的硬件重置或调整,且全数字的仿真环境不会受到外界因素的影响,结果更为真实可靠。在上文彩色小球实验中,出现数据收集不足、连接中断、被输入无效数据时,便可应用仿真来解决问题。

提升调试能力

在嵌入式系统出现问题时,由于仿真不受外界物理因素的影响,因此可以更快速地确定问题来源是软件还是硬件。如果在使用嵌入式设备和模拟器进行测试时发生错误,则可能表明算法存在问题。如果错误仅在设备上进行测试时发生,则可能表示硬件存在问题。

下表为《航空机载软件全数字仿真测试系统的设计与实现》一文中,对于某音频设备软件动态测试数据对比情况。可以看到,在测试用例数量和发现的软件问题数量等同的情况下,全数字仿真测试的执行耗时和回归测试耗时相比于全物理测试环境均显著减少。该全数字仿真测试使用了天目全数字实时仿真软件SkyEye。

▲表1 某音频设备软件动态测试数据对比[2]

03.“数字孪生”——仿真工具选择

虽然仿真是开发嵌入式系统的绝佳工具,但如果仿真工具不精准,所做的任何测试都会适得其反,不但无法缩短开发周期,还有可能拖长原定计划。选择一个适合自己的仿真工具是应用仿真的前提。

SkyEye,中文全称天目全数字实时仿真软件,是仿真嵌入式目标系统的虚拟平台,能够完全仿真目标系统中的CPU(Central Processing Unit,中央处理器)、寄存器、内存、外设接口,如图所示:

▲SkyEye功能图

在SkyEye上运行嵌入式软件,可以获得在真实目标系统上进行运行的相同效果。SkyEye还支持多个功能,如支持检查点分析:通过插入检查点,能够保存软件运行状态,支持运行状态的回放分析,便于软件问题的定位;支持访问目标系统状态:测试人员很难对真实物理硬件的寄存器、状态寄存器进行跟踪和控制,但通过SkyEye进行仿真,目标系统的内部状态清晰可见,对排查问题十分有帮助。

案例分析:SkyEye in 数字孪生卫星

本案例展示了如何应用SkyEye搭建卫星数字样机。首先通过系统级的架构分析与子系统拆分,建立不同模块对应的仿真模型,由SkyEye对嵌入式处理器及外设进行仿真。随后通过仿真软总线将各类分布式模型联合起来,即可完成数字卫星的搭建。将在真实卫星中运行产生的孪生数据放在“数字卫星”中进行超实时仿真,并通过可视化应用服务表现出来,用户可根据仿真结果分析预测真实卫星的未来走向,进行下一步决策并优化物理实体。

[1]《关于数字孪生与仿真技术关系的几点思考》http://www.uml.org.cn/modeler/202105314.asp?artid=24022

[2]《航空机载软件全数字仿真测试系统的设计与实现》,刘超,卢希,冯飞,王月波

相关文章:

“数字孪生”:为什么要仿真嵌入式系统?

​01.仿真是什么? 仿真的概念非常广泛,但归根结底都是使用可控的手段来模仿真实的情况,通常应用于现实世界中实施难度大甚至是无法实践的事物。 众所周知,嵌入式系统通常是形式多样的、面向特定应用的软硬件综合体,无…...

Java基础知识总结(上)

Java基础知识总结 1. Java语言的特点 简单易学,相较于python等语言具有较好的严谨性以及报错机制; 面向对象(封装,继承,多态),Java中所有内容都是基于类进行扩展的,由类创建的实体…...

MySQL 2:MySQL约束

一、定义 约束(constraint),即表中数据的限制条件。在表设计中加入约束的目的是保证表中记录的完整性和有效性。 比如user表,有些列(手机号)的值不能为空,有些列(身份证号&#xff…...

C4--Vivado添加列表中不存在的FLash器件2023-02-10

以华邦SPI FLASH W25Q128JVEIQ为例进行说明。(其他Flash添加步骤一致) 1.本地vivado安装目录D:\Softwares\xlinx_tools\Vivado\2020.2\data\xicom下,找到xicom_cfgmem_part_table.csv文件,这个表与vivado hardware manager中的器…...

php代码审计

准备工作 了解CMS的基本信息 该CMS使用的是什么设计模式?该CMS每个目录大概负责的功能(视图、缓存、控制器等)。该CMS处理请求的基本流程是如何走的?以及在系统中使用的全局过滤函数是如何对数据进行处理的? 代码审计方法 敏感函数回溯 …...

接口测试入门,如何划分接口文档

1.首先最主要的就是要分析接口测试文档,每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定,里面缺少的内容自己需要与开发进行确认。 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面。 a.具体的一个业…...

数据库学习第二天

第7章 系统预定义函数 函数:代表一个独立的可复用的功能。 和Java中的方法有所不同,不同点在于:MySQL中的函数必须有返回值,参数可以有可以没有。 MySQL中函数分为: (1)系统预定义函数&…...

NODE => CORS跨域资源共享学习

1.CORS跨域资源共享 cors是Express的一个第三方中间件。通过安装和配置cors中间件,可以很方便地解决跨域问题 运行npm install cors 安装中间件使用const cors require(‘cors’) 导入中间件在路由之前调用 app.use(cors()&#…...

golang rabbitMQ 生产者复用channel以及生产者组分发策略

引用的是rabbitMQ官方示例的库:github.com/rabbitmq/amqp091-go在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的,所以就要去实现如何复用这些连接,并要做到高效并可靠。预期效果:项目初始化…...

掌握了这项技能的性能测试师,90%都升职加薪了

初入职场的新人该怎么做才能让自己快速成长?在公司一直做着手工测试,如何才能提升自己,避免陷入“只涨年龄不涨经验”的尴尬?做为一名软件测试工程师,我们不得不去面对这些问题,有的人找到了答案&#xff0…...

linux中crontab定时任务导致磁盘满和云监控未报警的的坑

一个后台开发者,兼职运维工作中,配置linux中crontab定时任务,导致磁盘满和云监控未报警的问题的坑。 1.磁盘满 使用命令 df -h2.问题排查 2.1排查日志 命令 cat /var/log/messages日志文件的默认路径是:/var/log 下面是几个…...

vscode中安装python运行调试环境

在运行代码之前,需要到微软商店下载安装python环境,35m,都是自动的。 1、安装python 的extensions插件。 ctrlshiftx 输入 python 后点击 install 按钮。 2、新建文件夹spider文件夹。 3、在新建文件夹spider下新建文件spider.py源代码。…...

【微服务】微服务架构超强讲解,通俗易懂

微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA(service oriented architecture)和微服务的区别1、SOA喜欢重用,微服务喜欢重写2、SOA喜欢水平服务,微…...

内核中的竞态产生的原因和解决方法

产生原因: 由于多进程对临界资源的抢占 根本原因: 1、对于单核处理器而言,内核支持抢占就会出现竞态 2、对于多核处理器而言,是核与核的竞态 3、进程与中断间存在竞态 4、arm开发板不会出现中断与中断间的竞态(目前&am…...

【微服务】Elasticsearch文档索引库操作(二)

🚗Es学习第二站~ 🚩Es学习起始站:【微服务】Elasticsearch概述&环境搭建(一) 🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 一.索引库操作 索引库就类似数据库表,mapping映射就类…...

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型 【论文原文】:DEGREE A Data-Efficient Generation-Based Event Extraction Mode 【作者信息】:I-Hung Hsu , Kuan-Hao Huang, Elizabeth Boschee &#xff…...

C++类和对象(下)

✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定,然后把…...

Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注,必回关 一、线程池的四种拒绝策略: CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。 一般并发比较小,性能要求不高,不允许失败。 但是,由于…...

Node=>Express中间件分类 学习4

1.中间件分类 应用级别的中间件路由级别的中间件错误级别的中间件Express 内置的中间件第三方的中间件 通过app.use()或app.get()或app.post()绑定到app实力上的中间件,叫做应用级别的中间件 …...

在阿里当外包,是一种什么工作体验?

上周和在阿里做外包的朋友一起吃饭,朋友吃着吃着,就开启了吐槽模式。 他一边喝酒一边说,自己现在做着这份工作,实在看不到前途。 看他状态不佳,问了才知道,是手上的项目太磨人。 他们现在做的项目&#…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...