MAB建模规范介绍

前言

MAB建模规范(Model-Based Design Across MathWorks Products)是MathWorks公司制定的用于提高MATLAB和Simulink模型可读性、可维护性和可重用性的建模规范。该规范涵盖了模型结构、命名约定、注释、代码生成等方面的内容。

① 主要目标

MAB建模规范的主要目标包括:

  • 提高模型的可读性,使模型更容易理解和维护。
  • 提高模型的可维护性,使模型更容易修改和更新。
  • 提高模型的可重用性,使模型可以更容易地应用于其他项目。

② 主要内容

MAB建模规范的主要内容包括:

  • 模型结构:规定了模型的整体结构和组织方式。
  • 命名约定:规定了模型中各种元素的命名规则。
  • 注释:规定了模型中注释的格式和内容。
  • 代码生成:规定了模型代码生成的规则和方法。

MAB建模规范适用于所有使用MATLAB和Simulink进行建模的人员,包括工程师、科学家、研究人员和学生。遵循MAB建模规范可以帮助您创建更清晰、更易于理解和维护的模型。

1 模型结构

模型结构是指模型的整体组织方式。良好的模型结构可以使模型更容易理解和维护。MAB建模规范对模型结构提出了以下建议:

  • 模型应划分为多个子系统,每个子系统代表一个特定的功能或行为。
  • 子系统应按照层次结构组织,上位子系统调用下位子系统。
  • 子系统之间应使用明确的接口进行通信。

示例

假设我们要创建一个汽车模型。我们可以将模型划分为以下子系统:

  • 动力系统: 负责模拟发动机的行为。
  • 传动系统: 负责模拟变速箱和传动轴的行为。
  • 悬架系统: 负责模拟悬架和轮胎的行为。
  • 制动系统: 负责模拟制动系统的行为。
  • 转向系统: 负责模拟转向系统的行为。

这些子系统可以按照以下层次结构组织:

车辆
├── 动力系统
│   ├── 发动机
│   └── 变速箱
└── 传动系统├── 传动轴└── 差速器

子系统之间可以使用明确的接口进行通信。例如,动力系统可以提供一个接口,供传动系统获取发动机的转速和扭矩。

以下是另一个示例:

假设我们要创建一个飞机模型。我们可以将模型划分为以下子系统:

  • 飞行控制系统: 负责控制飞机的飞行姿态。
  • 推进系统: 负责模拟发动机的行为。
  • 气动系统: 负责模拟飞机的气动特性。
  • 结构系统: 负责模拟飞机的结构特性。

这些子系统可以按照以下层次结构组织:

飞机
├── 飞行控制系统
│   ├── 飞行员
│   └── 自动驾驶仪
└── 推进系统├── 发动机└── 燃油系统

子系统之间可以使用明确的接口进行通信。例如,飞行控制系统可以提供一个接口,供推进系统获取飞机的飞行速度和高度。

2 命名约定

命名约定是指模型中各种元素的命名规则。良好的命名约定可以使模型更容易理解和维护。MAB建模规范对命名约定提出了以下建议:

  • 模型中的所有元素都应使用有意义的名称。
  • 名称应遵循驼峰式命名法,首字母小写,其余字母根据单词边界大小写。
  • 应避免使用缩写和特殊字符。

示例

MAB建模规范对模型中的各种元素都规定了命名规则。以下是几个命名约定的示例:

模块

  • 模块名应以动词开头,描述模块的功能。
  • 模块名应使用驼峰式命名法,首字母小写,其余字母根据单词边界大小写。
  • 应避免使用缩写和特殊字符。

示例:

模块名:* 加法器* 低通滤波器* PID控制器错误示例:* 模块名:add* 模块名:LPF* 模块名:PID_Ctrl

信号

  • 信号名应以名词开头,描述信号的含义。
  • 信号名应使用驼峰式命名法,首字母小写,其余字母根据单词边界大小写。
  • 应避免使用缩写和特殊字符。

示例:

信号名:* 输入信号* 速度* 温度错误示例:* 信号名:in* 信号名:vel* 信号名:tempC

参数

  • 参数名应以名词开头,描述参数的含义。
  • 参数名应使用驼峰式命名法,首字母小写,其余字母根据单词边界大小写。
  • 应避免使用缩写和特殊字符。

示例:

参数名:* 增益* 截止频率* 采样时间错误示例:* 参数名:gain* 参数名:fc* 参数名:Ts

子系统

  • 子系统名应以名词开头,描述子系统的功能。
  • 子系统名应使用驼峰式命名法,首字母小写,其余字母根据单词边界大小写。
  • 应避免使用缩写和特殊字符。

示例:

子系统名:* 控制系统* 数据采集* 图像处理错误示例:* 子系统名:Ctrl* 子系统名:DataAcq* 子系统名:ImageProc

MAB建模规范的命名约定可以帮助您创建更清晰、更易于理解和维护的模型。

3 注释

注释是指对模型元素的解释性说明。良好的注释可以使模型更容易理解和维护。MAB建模规范对注释提出了以下建议:

  • 模型中的所有元素都应添加注释。
  • 注释应解释元素的功能和行为。
  • 注释应使用清晰易懂的语言。

示例

1. 模型注释

模型注释应说明模型的总体功能和行为。例如:

Matlab


> % This model simulates the behavior of a simple pendulum.
> 
> % The model consists of a pendulum, a spring, and a damper.
> 
> % The pendulum is attached to the spring and damper by a hinge.
> 
> % The spring and damper are attached to the ground.
> 
> % The model is initialized with the pendulum at rest.
> 
> % The model is simulated for 10 seconds.
> 
> % The results of the simulation are plotted.

2. 子系统注释

子系统注释应说明子系统的功能和行为。例如:

Matlab

% This subsystem implements the pendulum dynamics.% The subsystem takes the pendulum's position and velocity as inputs.% The subsystem outputs the pendulum's acceleration.% The subsystem uses the following equations to calculate the acceleration:%   a = -g * sin(theta)%   where:%     a is the acceleration%     g is the acceleration due to gravity%     theta is the pendulum's angle

3. 模块注释

模块注释应说明模块的功能和行为。例如:

Matlab

% This module calculates the pendulum's acceleration.% The module takes the pendulum's position and velocity as inputs.% The module outputs the pendulum's acceleration.% The module uses the following equations to calculate the acceleration:%   a = -g * sin(theta)%   where:%     a is the acceleration%     g is the acceleration due to gravity%     theta is the pendulum's angle

4. 信号注释

信号注释应说明信号的含义和用途。例如:

Matlab

% This signal represents the pendulum's position.% The signal is a real number that represents the pendulum's angle in radians.% The signal is positive when the pendulum is to the right of the vertical axis.% The signal is negative when the pendulum is to the left of the vertical axis.

5. 参数注释

参数注释应说明参数的含义和用途。例如:

Matlab

% This parameter represents the pendulum's length.% The parameter is a real number that represents the pendulum's length in meters.% The parameter must be a positive number.

6. 其他注释

除了上述注释类型之外,还可以使用其他注释来解释模型的其他方面,例如:

  • 模型的作者和版本信息
  • 模型的测试和验证信息
  • 模型的使用说明

总之,注释是MAB建模规范的重要组成部分。使用清晰易懂的注释可以帮助您创建更易于理解和维护的模型。

4 代码生成

代码生成是指将模型转换为可执行代码的过程。良好的代码生成规范可以确保生成的代码具有良好的可读性和可维护性。MAB建模规范对代码生成提出了以下建议:

  • 模型应遵循MAB代码生成规范,以便生成可读性和可维护性良好的代码。
  • 代码生成规范规定了代码的格式、命名约定和注释等。

示例

示例1:使用Simulink Function子系统生成C代码

Simulink Function子系统可以用于将Simulink模型中的部分功能封装成一个C函数。该函数可以被其他Simulink模型或外部应用程序调用。

为了便于代码生成,MAB建模规范规定了Simulink Function子系统的以下建模规范:

  • 子系统名称应以“Fcn”开头,后跟功能的简要描述。
  • 子系统内部应使用原子模块,避免使用复杂的模型结构。
  • 子系统的所有输入和输出端口都应添加注释,说明端口的信号类型和含义。

示例2:使用Stateflow生成C代码

Stateflow是一种用于建模状态机的工具。Stateflow可以用于描述系统的状态行为,并生成相应的C代码。

为了便于代码生成,MAB建模规范规定了Stateflow模型的以下建模规范:

  • 状态机应划分为多个子状态机,每个子状态机代表一个特定的状态行为。
  • 状态机应使用清晰易懂的图表进行表示。
  • 状态机中的所有状态和转换都应添加注释,说明状态和转换的含义。

示例3:使用Simulink Coder生成嵌入式代码

Simulink Coder可以用于将Simulink模型生成嵌入式C代码。该代码可以部署到嵌入式系统上运行。

为了便于代码生成,MAB建模规范规定了Simulink模型的以下建模规范:

  • 模型应使用固定步长仿真。
  • 模型应避免使用全局变量。
  • 模型应使用数据字典来定义数据类型和常量。

总结

MAB建模规范是MATLAB和Simulink建模的重要参考。遵循MAB建模规范可以帮助您创建更清晰、更易于理解和维护的模型。

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

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

相关文章

Linux命令行精粹:提升开发效率的必备指南

**Linux命令行精粹:提升开发效率的必备指南** Linux操作系统以其强大的命令行工具而闻名,为开发者提供了丰富的功能,从文件管理到系统监控,再到网络配置,Linux命令行工具无所不能。本文将为你介绍Linux中不可或缺的常…

深度学习算法优化流程

深度学习算法的一般优化流程,具体的实施方法和步骤可能会根据具体任务和数据的特点而有所不同,优化流程通常包括以下几个主要步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作…

.md转pdf

1、使用vscode安装Markdown PDF Markdown PDF 打开预览转pdf,同目录下自动生成pdf文件

【Educoder数据挖掘实训】冗余值的处理

【Educoder数据挖掘实训】冗余值的处理 开挖 这个题就比较容易了,实训里的要求写的也比较清楚。 主要是讲解了 d r o p _ d u p l i c a t e s drop\_duplicates drop_duplicates函数,该函数补全如下: DataFrame.drop_duplicates(subsetNone…

3DEXPERIENCE Works八大核心优势分析

云技术正在加速普及,助力各行各业数字化转型。根据IDC 2023年12月发布的报告,2023年全球云计算市场规模达到3329亿美元,同比增长19.4%。其中,公有云市场规模达到2587亿美元,同比增长21.5%;私有云市场规模达到742亿美元…

Spring Test 常见错误

前面我们介绍了许多 Spring 常用知识点上的常见应用错误。当然或许这些所谓的常用,你仍然没有使用,例如对于 Spring Data 的使用,,有的项目确实用不到。那么这一讲,我们聊聊 Spring Test,相信你肯定绕不开对…

hot100 -- 普通数组

目录 🎂最大子数组和 O(n) 暴力 O(n) 动态规划 🚩合并区间 O(nlogn) 排序 🌼轮转数组 O(n) 辅助数组 O(n) 环状替换 O(n) 数组翻转 🌼除自身以外数组的乘积 O(n) 前缀和 时间O(n) 空间O(1) 🌙缺失的…

【MySQL】数据库的操作(2)

【MySQL】数据库的操作(2) 目录 【MySQL】数据库的操作(2)创建表查看表结构修改表删除表 作者:爱写代码的刚子 时间:2024.3.5 前言:本篇博客将介绍数据库中表的基本操作 创建表 由于使用了不同的…

「Mybatis实战八」:Mybatis的dao层开发使用 - 传统开发方式

一、传统开发方式 1、基础工程代码 数据库环境 CREATE DATABASE mybatis_db; USE mybatis_db; CREATE TABLE user ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(32) NOT NULL COMMENT 用户名称, birthday DATETIME DEFAULT NULL COMMENT 生日, sex CHAR(1) DEFAUL…

【2024】利用python爬取csdn的博客用于迁移到hexo,hugo,wordpress...

前言 博主根据前两篇博客进行改进和升级 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读955次,点赞6次,收藏19次。定义一个json配置文件方便管理现在文件只有用户名称,后续可加配置读取用户名称,并且将其拼接成csdn个人博客链接ty…

Gitlab 安装部署

目录 1、Jenkins 结合 Gitlab 构建 CI/CD 环境 CI/CD 介绍 CI/CD 流程 Jenkins 简介 GitLab 简介 项目部署方式 CI系统的工作流程 2、搭建 GitLab 安装 GitLab 配置 GitLab 修改root密码 访问 GitLab 开机自启 3、使用 GitLab 管理 GitLab 关闭 GitLab 注册功能…

Git问题处理汇总

问题1: 出现:Permission denied (publickey).fatal: Could not read from remote repository. 原因:服务器公钥(publickey)未添加至github, 所以无法识别。因而需要获取本地电脑公钥,然后登录github账号&a…

基于SpringBoot+Apache POI的前后端分离外卖项目-苍穹外卖(十九)

数据导出 1. 工作台1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.2.1 Controller层1.2.2 Service层接口1.2.3 Service层实现类1.2.4 Mapper层 1.3 功能测试 2. Apache POI2.1 介绍2.2 入门案例2.2.1 将数据写入Excel文件2.2.2 读取Excel文件中的数据 3. 导出运营数据Excel…

交友盲盒系统PHP开源的盲盒源码

源码介绍: 交友盲盒系统是一款基于PHP开发的开源免费盲盒系统,旨在为用户提供一个充满乐趣和惊喜的社交体验。该系统具有丰富的功能和灵活的扩展性,可以轻松地满足各种线上交友、抽奖活动等场景的需求。 安装说明: PHP版本&…

iptables中的SNAT、DNAT与Firewalld

目录 引言 一、SNAT与DNAT简介 (一)SNAT 1.SNAT的工作原理 2.SNAT的应用 (二)DNAT 1.DNAT的工作原理 2.DNAT的应用 二、实现NAT转换 (一)实现SNAT 1.配置网关服务器 2.修改网关 3.设置SNAT规则…

【leetcode】删除链接的倒数第N个节点

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* param {number} n* return {ListNode}*/ var removeNthFromEnd fun…

Linux内核基础 -- usermodehelper_disable函数

摘要 本文介绍了Linux内核usermodehelper_disable函数的作用、使用场景以及代码示例。 关键词 Linux内核 usermodehelper udev mdev 一、简介 在Linux内核中,usermodehelper_disable函数用于禁止用户空间程序通过udev或mdev等用户空间工具来管理内核模块。 二…

Java面试题总结8:springboot

Spring Boot自动配置原理 importConfigurationSpring spi 自动配置类由各个starter提供,使用ConfigurationBean定义配置类,放到META-INF/spring.factories下 使用Spring spi扫描META-INF/Spring.factories下的配置类 如何理解Spring Boot中Starter …

【刷题1】LeetCode 41. 缺失的第一个正数 java题解

https://leetcode.cn/problems/first-missing-positive/description/?envTypestudy-plan-v2&envIdtop-100-liked 置换 class Solution {public int firstMissingPositive(int[] nums) {int lennums.length;//nums[i]属于[1,len]for(int i0;i<len;i){while(nums[i]>…

java集合常见的错误

一、码出高效&#xff1a; 集合是开发中需要修改最多的地方&#xff0c;如&#xff1a;从数据库中取出多条数据是 List 结构&#xff0c;然后需要在 Service 进行层层处理&#xff0c;最终为前端展示提供 vo 对象&#xff0c;所以&#xff0c;很多集合使用的规范一定要弄明白。…