FMI在仿真软件SkyEye中的应用

1.仿真技术的困境

随着科技的发展,我国在安全攸关领域对于嵌入式软件的应用日益广泛,并且对于软硬件的性能及可靠性等方面要求变得更高。面对各种复杂的系统设计所提供的设计和分析手段也逐渐完善,其中仿真技术在近几年越来越受到重视,其在西方发达国家的多个工业领域中,都得到了广泛的应用。

仿真技术的成熟应用为复杂的系统设计提供了贯穿V流程的全生命周期的分析手段,它可以作为实物实验的有效补充手段,能够在仿真可信度较高的情况下有效降低实物实验的次数,大大节省成本并提高实验效率。但是仿真技术发展至今,在取得工程应用认可的同时,也出现了一些不足和亟待改善的地方,例如下图所示。

▲图1. 仿真工具碎片化

亟待解决的问题:

1)目前全国各单位部门都有自己的仿真工具,这些仿真工具可能是自己开发的可能是采购的,样式五花八门,协议各有不同,如果不是事先设计好,很难相互联合仿真,造成了工具碎片化的问题,这就很可能要投入很多的精力去解决这些模型的重用和维护等问题,引起严重的成本浪费。

2)在联合仿真的过程中,供应商也要解决代码的知识产权保护问题,如何让别人在不接触模型代码的情况下完成联合仿真也成为了亟待解决的问题。

2.什么是FMI

为解决上述问题,欧洲仿真届提出了FMI标准,FMI标准的全称是Functional Mock-up Interface,它是一个不依赖于工具的标准,其通过XML文件和已编译的C代码的组合来同时支持动态模型的模型交换(Model Exchange)联合仿真(Co-Simulation)

系统集成商和供应商都遵循FMI标准,供应商各自的仿真模型通过FMI标准生成FMU模型交给集成商,集成商可以使用FMU联合仿真软件快速构建系统模型,不用再提前开发定制接口。同时,FMI标准也提供了FMU模型导出加密的方法,供应商也不用担心产品泄密等安全问题。

▲图2.基于FMI标准的系统集成环境

FMI标准包含两种模型重用的方式:Model Exchange(模型交换)Co-Simulation(联合仿真)。模型交换不包含求解器,只包含输入/输出接口以及模型的相关信息。联合仿真则包含求解器,这是两者之间的主要区别。

▲图3.模型交换方式

其中联合仿真又包含三种模式,分别是代码导出方式工具耦合方式分布式方式

(1) 代码导出方式:

导出的FMU文件脱离原导出工具,使用时无需原导出工具的License限制,主控软件可以同时控制多个FMU模型求解。

▲图4.代码导出方式

(2) 工具耦合方式:

导出的FMU文件绑定原导出工具的License,FMU文件只作为联合仿真的接口封装和数据对接,模型的实际求解还在原导出工具中,中控软件与从属软件只负责各自的求解。

▲图5.工具耦合方式

(3) 分布式方式:

除包含工具耦合方式的所有特点外,还可以在多个平台进行联合仿真。

▲图6.分布式方式

3.FMI在SkyEye中的应用

迪捷软件的软件测试和仿真工具SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,支持用户通过拖拽的方式对硬件进行行为级别的仿真和建模。

目前SkyEye采用分布式方式创建的FMU模型,将FMI封装的模型库通过网络的方式与远端的SkyEye进行通讯。SkyEye仿真嵌入式硬件环境运行嵌入式软件进行求解等操作。

创建FMU模型主要需要实现包含了描述模型接口信息和数据的XML文件、实现模型动态行为功能的C代码或二进制文件和其他用户希望包含在FMU中的文件和数据。

XML文件描述了FMU 模型的版本、ID、输入、输出等信息,需要实现如下图中节点信息。

▲图7.XML文件描述

C代码或二进制文件实现了模型的控制行为等接口,需要按照要求实现如下图中所有函数。

▲图8.FMI函数信息

在上述函数中实现了对SkyEye的操作如时间控制、值的获取、设置值、重启等操作。

4.总结

FMI为集成商和供应商提供了一套统一的接口标准,解决了工具碎片化导致的各种问题。迪捷软件的SkyEye对于FMI标准的支持也极大的方便了客户的集成仿真。SkyEye能根据实际的工程需求实现更多的应用场景,满足客户的更多集成需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#ovalshape_【原创】C# 实现拖拉控件改变位置与大小(SamWang)(附源代码下载)

前言:很多时候我们需要在运行时,动态地改变控件的位置以及大小,以获得更好的布局。比如说实际项目中的可自定义的报表、可自定义的单据等诸如此类。它们有个特点就是允许客户或者二次开发人员设计它们需要的界面设置功能。本人以前也做过可自…

jmeter提取mysql数据_通过jmeter读取数据库数据,并取值作为请求的入参

为提升测试技能,督促自己学习。故写了这篇文章。测试小白一枚,最近感觉达到了自己认为的瓶颈期。总是有想法,想突破,但是无从入手。工具类用过fiddler、jmeter、charels、postman..大体接口测试工具,均多多少少使用过。…

如何快速上手mysql_mysql快速上手3

上一章给大家说的是数据库的视图,存储过程等等操作,这章主要讲索引,以及索引注意事项,如果想看前面的文章,url如下:索引简介索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)…

c mysql 免安装版_MySQL5.6免安装版环境配置图文教程

MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行。但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。很多人下了zip格式的解压发现没有setup.exe,面对一堆文件一头雾水,不知如何安装。下面小编将介…

MDL锁导致mysql夯住_MySQL MetaData Lock 案例分享

前言:今天开发童鞋遇到一个奇怪的问题,在测试环境里面执行drop database dbname发现一直夯住不动,等了很久也没有执行,于是问题就到我这里了一、什么是MetaData Lock?MetaData Lock即元数据锁,在数据库中元…

docker 分布式管理群集_Coolpy7分布式物联网MQTT集群搭建

Coolpy7分布式技术,支持多个Coolpy7 Core提供跨数据中心(多活)模式组建群集,支持群集零手动维护(基于Gossip分布式协议作为群集节点状态维护)。Coolpy7从版本号V7.3.2.3开始支持本功能。请到Coolpy7之github项目release下载相关版本https://github.com/C…

vue 数值 拼接字符串_【Vue原理】Compile - 白话版

写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 【2.5.17】如果你觉得排版难看,请点击 下面链…

gpio驱动蜂鸣器出现破音_五款蜂鸣器驱动电路原理图

蜂鸣器驱动电路图一:典型的蜂鸣器驱动电路,蜂鸣器驱动电路一般包含:一个三极管、一个蜂鸣器、一个续流二极管、一个滤波电容。1、蜂鸣器:发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声&am…

mysql 多项式_mysql主从复制原理及实现

一.主从复制原理利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最…

idea创建web项目运行报404错误_使用IDEA新建Web工程启动报404的错误

新换了一个项目组被人吐槽配置文件都能写错,所以打算从头开始一步步搭建一个项目,包含ssm基础框架、mongodb工具类、redis工具类、jsf配置、log配置等今天先来搭建一个web工程。工程搭建好运行时发现404我们都知道,一般404都是由于请求资源的…

java md2_GitHub - edzjx/Md2Crypto

此项目来源一个字谜解体过程一个程序猿在自己的微信公众号里出了一个字谜。其中用到了MD2加密算法,这是各很古老的加密算法。从网上搜到作者92年发布的C代码还能正常执行。此项目介绍解题过程,和使用C,C#,Java,Python3来测试代码。文章结构破…

java stringbuffer原理_深入理解Java:String

在讲解String之前,我们先了解一下Java的内存结构。一、Java内存模型按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。JVM主要管理两种类型内存:堆和非堆,堆…

java dubbo jsf_cubelink

cubelink概要设计[TOC]1. 撰写记录更新时间内容作者2017-08-23 08:39:31撰写参数回调章节内容林斌2017-08-22 21:26:52增加了异步响应和异步回调章节林斌2017-08-22 14:36:36确定文档结构和大致框架林斌2. 设计目标设计一个具备治理,监控,服务发现能力的…

python 的案例实战_python案例实战之一

分析思路:1、明确分析目标;2、导入库、导入数据;3、简单查看下数据行列、整体情况;4、数据清洗;5、确定维度和指标;6、分析并作图1、查看整体数据情况1.1引入使用的库import numpy as npimport pandas as p…

java数据结构期末复习_java数据结构复习02

1.递归问题1.1计算阶乘packageinterview.recursion;importjava.util.Scanner;public classFact {public static voidmain(String[] args) {System.out.println("请输入n的值:");Scanner in newScanner(System.in);int n in.nextInt();int num fact(n);Sys…

java中methods方法_java中Class.getMethod方法

Method Class.getMethod(String name, Class>... parameterTypes)的作用是获得对象所声明的公开方法该方法的第一个参数name是要获得方法的名字,第二个参数parameterTypes是按声明顺序标识该方法形参类型。person.getClass().getMethod("Speak", null)…

centos6 yum快速安装mysql_centos6.10 yum安装mysql 5.6-Go语言中文社区

一、检查系统是否安装其他版本的MYSQL数据#yum list installed | grep mysql#yum -y remove 文件名二、安装及配置# wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm# rpm -ivh mysql-community-release-el6-5.noarch.rpm# yum repolist all | grep mysq…

二叉树两节点距离java,求二叉树中两个节点的最远距离

问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节…

php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?

以往写cli下运行的业务或者测试代码,总是新建文件,面向过程编写代码。几次之后,cli目录下好多文件,即便勉强在一个cli测试文件中写了一个类,也是让其中的一个方法自启动,要测试别的方法,总是要修…

php中gd为什么是乱码的,php gd库中文乱码怎么解决?

php gd库中文乱码怎么解决?,中文,乱码,字符,选项,字体php gd库中文乱码怎么解决?易采站长站,站长之家为您整理了php gd库中文乱码怎么解决?的相关内容。解决方法:1、网站整站使用UTF8编码,如果已使用GB2312…