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

SCADE One - 弥合基于模型设计与传统编程之间的鸿沟

Scade One是继Scade Suite version 6 自2008年起发展近20年后的首次主要改进版本。在Scade One首版次发布数月前,Scade团队发布了一系列介绍Scade One的博客。本篇Scade One – Bridging the Gap between Model-Based Design and Traditional Programming是其中的一部分。在后面的内容中,将复述博客中的要点。更多内容,可参考Scade One – Bridging the Gap between Model-Based Design and Traditional Programming

概述

SCADE One弥合了基于模型设计与传统编程之间的鸿沟。在本篇博客的后续内容中,将展示以下核心要点:
• 对于控制或系统工程师,SCADE One能通过框图符号进行可视化软件开发。无需具备编程背景,也不必了解C语言等底层语言的复杂性与陷阱,即可构建安全可靠的软件。
• 对于软件工程师,将会欣喜地发现SCADE One基于一种形式化的领域专用编程语言。可以使用文本化表示(或图文混合方式),并可使用文本编辑器应有的全套服务。该语言汲取通用编程语言的灵感,提供高级功能,不仅能开发传统控制软件,还可用于任务软件与无人控制的自主系统软件的开发。

Swan:专为嵌入式软件设计的领域专用语言

SCADE One的建模基于名为Swan的领域专用编程语言,专为实时安全可靠的嵌入式软件设计。该语言凝聚了同步语言领域数十年的研究成果(包括学术语言Lustre),并继承了历代SCADE语言版本(直至SCADE Suite目前使用的SCADE 6)的技术积淀。

这种设计有何优势?
• Swan是声明式数据流语言:只需描述"做什么",而非"如何做"。代码生成器会自动创建实现模型行为的高效C代码。实践证明,这种方法比手动编写C代码更不易出错。
• Swan是高级/领域专用语言:内置逻辑时间、并发等概念,以及状态机等构造,让设计者能轻松描述复杂的反应式行为。
• Swan是具备形式化定义的语言:模型行为定义明确,不受工具版本或代码生成选项影响。可对模型属性(如数值溢出或除零错误)进行形式化验证,还能执行类型检查等静态分析确保模型正确性。
• Swan专为安全嵌入式软件设计:通过语言构造天然保证内存边界、响应时间限定、数组越界防护等特性。不同于其他方案,无需安全子集或编码规则约束。这使得非编程专家也能轻松使用,规避C/C++等通用语言的潜在陷阱。

一种语言,两种标记法表达

Swan提供两种建模方式:

  1. 使用框图。使用框图构造模型。对控制工程师而言,使用框图是进行控制率设计的标准标记法。
  2. 使用文本。如同使用文本编程语言进行编程。

• 图文混编:文本表达式或文本块可嵌入框图任意位置。您可根据偏好自由选择文本、框图或混合表达。例如:状态机用框图展示状态迁移更直观,而复杂算术表达式则更适合文本呈现。
• 统一语言内核:所有模型均支持图文双向转换,且采用统一的序列化格式。

从设计、调试到验证的所有环节,图文模型均能获得同等支持。建模环境为每种方式提供专属功能:
• 框图支持自动布局与智能参考线,呈现优雅视图
• 文本编辑具备语法高亮与自动补全功能

无论是习惯基于模型仿真工具的控制工程师,还是熟悉集成开发环境(IDE)的软件工程师,都能在SCADE One中即刻找到熟悉的工作体验。

Swan的核心特性

作为SCADE Suite中SCADE 6语言的进化版,Swan不仅优化了既有功能,更通过新特性应对现代建模与编程工具的挑战。

可视化编程语言的常见缺陷是框图容易变得杂乱无章。Swan引入group概念来简化和规整框图。

SCADE 6一样,Swan融合编程语言最佳实践与基于模型的方法。例如SCADE 6支持创建可复用的通用库,而Swan更进一步引入受Ada启发的接口概念,实现模块接口与实现的分离——这在架构设计阶段尤为实用。接口还可控制模块内声明的可见性。这对软件工程师虽属常规操作,但在其他基于模型工具中却鲜见实现。

Swan支持操作丰富的数据类型和结构。除SCADE 6已有的数组和结构体外,新增variant类型(又称tagged union),允许在同一数据流或结构中存储不同类型值。

针对迭代模型设计,Swan推出了比SCADE 6迭代器更直观的新型for循环结构,适用于数组/矩阵运算(如下文矩阵乘法示例)或数据结构遍历。

这些新构造使Swan能创建和操作复杂数据结构,从而区别于其他基于模型工具,更接近通用编程语言的表达能力。这意味着能在更多应用场景(不仅限于传统控制领域)利用SCADE One缩短开发周期的优势。

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

相关文章:

  • 【学Rust写CAD】31 muldiv255函数(muldiv255.rs)
  • 设计模式简述(三)工厂模式
  • 《C语言代码解析与应用:数组操作的两种实现》
  • ctfshow VIP题目限免 版本控制泄露源码2
  • LeetCode详解之如何一步步优化到最佳解法:20. 有效的括号
  • 配置ASP.NET Core+NLog配置日志示例
  • 基于 FPGA 的分秒计数器
  • 如何实现两个视频融合EasyCVR平台的数据同步?详细步骤指南
  • 爬虫练习案例
  • zk基础—5.Curator的使用与剖析二
  • 打造高效英文单词记忆系统:基于Python的实现与分析
  • $R^n$超平面约束下的向量列
  • 游戏引擎学习第206天
  • React框架的Hooks实现原理
  • MicroPython 开发ESP32应用教程 之 WIFI简单应用 :时间同步、天气信息获取,ST7735 TFT屏驱动及任意中文字符显示
  • Linux制作deb安装包
  • 卡尔曼滤波器浅聊
  • windows 常用命令总结
  • MySQL表的增删改查基础版
  • 【大模型深度学习】如何估算大模型需要的显存
  • JavaScript基础--09-流程控制语句:选择结构(if和switch)
  • 文件系统-inode/软硬件连接(未完结)
  • 用 Python 制作仓库自动化指南
  • Kotlin协程机制
  • 解析keras.layers.Layer中的权重参数
  • Linux内核——段描述符详解
  • SeaTunnel系列之:Apache SeaTunnel编译和安装
  • 《SQL赋能人工智能:解锁特征工程的隐秘力量》
  • python基础-11-调试程序
  • DrissionPage高级技巧:从爬虫到自动化测试