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

CoCoSim(2020): 连接Simulink与Lustre生态的模型检测框架

github中,CoCoSim项目提供了基于契约的Simulink模型组合验证。这里将介绍CoCoSim框架。

在高安全领域,系统的开发往往采用模型驱动设计,Simulink/Stateflow凭借直观的图形化建模能力和丰富的工具链支持,成为行业内的主流选择。然而,随着系统复杂度提升,如何确保模型从需求到代码的语义一致性,并通过严格的形式化验证排查潜在风险,成为开发过程中的关键挑战。

CoCoSim框架作为一款开源工具,它不仅能实现Simulink/Stateflow模型到同步编程语言Lustre的语义转换,还能集成Kind 2等形式化模型检查工具,打通 “建模-转换-验证” 的全流程。

CoCoSim :连接Simulink与同步编程生态

CoCoSim提供了Simulink与同步编程生态之间的桥梁:​

  • 语义转换:将Simulink/Stateflow模型转换为等价的Lustre代码;​
  • 全流程工具集成:不仅支持模型转换,还整合了形式化验证(如Kind 2)、代码生成(如LustreC生成C/Rust代码)、测试用例生成(如LustreT)等工具;​
  • 开源与可扩展:作为开源框架,CoCoSim支持用户通过API自定义转换规则和工具链,适配不同领域的需求。

CoCoSim的功能架构如下

在这里插入图片描述

Simulink到Lustre的语义转换

CoCoSim对Simulink模型的转换并非语法映射,而是基于形式化语义分析,确保转换后的Lustre代码与原模型行为一致。过程主要分为三个关键步骤:

模型预处理

Simulink模型中可能包含复合模块或非标准块,CoCoSim首先会对模型进行预处理:​

  • 将复杂模块拆解为基础块,确保每个块的行为可被映射;​
  • 区分虚拟子系统和原子子系统,保留模型的执行语义;​
  • 检查模型的合法性,避免隐式语义导致的验证漏洞。

形式化语义定义:Simulink与Lustre的行为一致性

CoCoSim为Simulink的离散块子集定义了形式化语义,并与Lustre的语义建立对应关系:

  • 单周期模型:Simulink中离散模型的执行基于固定时间步长,这与Lustre中基于抽象时钟的周期性计算语义匹配。CoCoSim将Simulink的每个子系统转换为Lustre的节点,每个原子块转换为Lustre的方程;​
  • 多周期模型:CoCoSim通过公共基准时钟(Common Base Clock),将所有模块的周期和偏移量转换为基准时钟的整数倍,再通过Lustre的时钟算子(when、merge)实现多周期数据交互,确保语义一致性。

层次化映射:保留模型结构,提升可追溯性

为了方便后续的验证结果分析和代码调试,CoCoSim 采用层次化转换策略:​

  • Simulink的每个Subsystem对应Lustre的一个Node,子系统间的信号交互对应Lustre节点的输入输出;​
  • Simulink中的注释、信号名等信息会被保留到Lustre代码中,同时生成可追溯性报告,将Lustre代码的每一行与原Simulink模块关联,便于定位问题。

例如,一个包含Sum和UnitDelay的Simulink子系统,转换后的Lustre代码如下

node Simulink_Subsystem(in1: real) returns (out1: real);
var sum_val: real;
letsum_val = in1 + pre(sum_val);out1 = sum_val;
tel

集成Kind2,实现形式化模型检查

转换为Lustre代码后,CoCoSim的下一步是借助形式化验证工具排查模型中的潜在缺陷。其中,Kind2作为SMT-based模型检查工具,是CoCoSim的验证后端之一,能够验证Lustre模型的安全性、活性等属性。

CoCoSim 的其他关键能力:代码生成、测试用例生成

除了Simulink-Lustre转换和Kind 2验证,CoCoSim还支持从验证后的模型生成安全可靠的代码,形成 “建模-验证-代码生成” 的开发闭环。

代码生成:从Lustre到C/Rust的转换

  • LustreC后端:将验证通过的Lustre模型转换为结构化的C代码,保留原模型的层次结构,便于后续集成到嵌入式平台;​
  • Kind2的Rust代码生成:Kind2不仅能验证模型,还能直接从Lustre模型生成内存安全、并发安全的Rust代码。

测试用例生成:LustreT辅助验证完整性

CoCoSim集成的LustreT工具,可基于Lustre模型生成测试用例,补充形式化验证的覆盖范围:​

  • 基于覆盖准则:如MC/DC,生成满足特定覆盖要求的测试用例,确保模型的关键逻辑被充分测试;​
  • 基于变异的测试:生成变异模型,再生成能区分原模型与变异模型的测试用例,评估测试集的有效性。

参考

详细内容,可参考Hamza Bourbouh, Pierre-Loïc Garoche, Thomas Loquen, Éric Noulard, Claire Pagetti. CoCoSim, a code generation framework for control/command applications An overview of CoCoSim for multiperiodic discrete Simulink models. 10th European Congress on Embedded Real Time Software and Systems (ERTS 2020), Jan 2020, Toulouse, France. ffhal-02441334f

http://www.dtcms.com/a/430616.html

相关文章:

  • 第2篇|风机设计的基本原则:从“会弯的高楼”到“会自救的系统”
  • SpringSecurity详解
  • [linux仓库]深入解析Linux动态链接与动态库加载:理解背后的原理与技巧
  • 异步日志系统
  • 自监督学习在医疗AI中的技术实现路径分析(中)
  • QoS之拥塞管理两种配置方法
  • tp框架做网站的优点郑州品牌策划设计公司
  • 浅析 AC 自动机
  • Docker常见问题与解决
  • Rokid手势识别技术深度剖析
  • java web搭建商城购物车
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 6--基础知识 2--常用元素定位 2
  • 从“端到端”到“人到人”:一种以需求直接满足为核心的新一代人机交互范式
  • C到C++(Num015)
  • 做关于车的网站有哪些网页布局的方式有哪些
  • 图漾相机C++语言---Sample_V1(4.X.X版本)完整参考例子(待完善)
  • Python数据挖掘之基础分类模型_支持向量机(SVM)
  • Java-Spring 入门指南(十六)SpringMVC--RestFul 风格
  • 益阳网站制作公司地址高端装饰公司网站设计
  • 产生式规则在自然语言处理深层语义分析中的演变、影响与未来启示
  • K230基础-摄像头的使用
  • 【文件读写】绕过验证下
  • 谷歌官方网站注册12306铁路网站开发语言
  • 深度学习基础知识-深度神经网络基础
  • pycharm找不到Tencent Cloud CodeBuddy如何安装[windows]?pycharm插件市场找不到插件如何安装?
  • 【开题答辩全过程】以 SpringbootVueUniapp农产品展销平台为例,包含答辩的问题和答案
  • C++中的小数及整数位填充
  • DuckDB 的postgresql插件无法访问GooseDB
  • 电子商务软件网站建设的核心网站布局模板
  • 从Nginx到Keepalived:反向代理高可用的技术闭环——Nginx、Keepalived、VIP与VRRP的深度联动解析