概述
目录
前言
1、命名
1.1 字符
1.3 系统、子系统、模块、信号线命名
1.4 变量名称的一致性
2、simulink模型外观
2.1 信号线外观
2.2 基础模块外观
3、Simulink基础模块使用
3.1 数字运算与逻辑运算模块
3.2 Delay模块
3.3 带开关函数的模块(Switch, Multiport Switch, Index Vector)
3.4 from、goto模块
3.5 Product模块
3.6 Merge模块
3.7 控制器内禁用的模块
前言
刚开始工作接触建模开发那会儿,天天就只琢磨功能怎么实现,怎么能更深入更好的利用上里面自带的这些块块,从没好好关注建模规范。直到从零建立模型开发的时候,从建立建模规范开始,仔细研读了MAAB,那时候还是第四版,去年又更了第五版改成MAB,细细了解的时候,虽然很多东西很基础,但也领会到其中的一些妙处,基础的东西可以统一开发人员的建模风格,另外一些甚至可以作为建模指导。
建模的方式千千种,很多方式都能实现一个功能,但首先大家风格最好统一利于集成和维护,另外,一些建模方式容易引起意外的错误,即使是熟悉建模的人员也可能忽视这些。所以我都建议模型开发人员,无论资深或新手入门,都要重视建模规范。当然,MAB内容很多而且全英文,这里总结一些基础的、常用的建模规则,不使用S function之类的应该够用。
分为三篇吧,分别为Simulink 、Stateflow、模型结构。
1、命名
1.1 字符
可使用:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 _
字符长度为3到63个字符。
1.3 系统、子系统、模块、信号线命名
1)没有空白间隔,没有回车
2)不以一个数字开始
3)信号线、总线、参数名称无控制字符(用来控制显示和打印的特殊字符,包括回车(CR)、退出(ESC)、制表符(TAB)等)
4)单字节下划线不作为第一个或最后一个字符,不允许有两个连续下划线
5)模型的输入输出口(包括bus、goto等)一定要有明确的命名
6)不使用MATLAB使用的任何保留词、函数名称或运算符名称,如'eps','Enf','intmax','intmin','NaN','pi','realmax','realmin','true','false','inf'
MATLAB关键词 ,如'break', 'case', 'catch', 'classdef', 'continue', 'else', 'elseif', 'end', 'for','function', 'global', 'if', 'otherwise', 'parfor', 'persistent', 'return', 'spmd', 'switch', 'try', 'while'
7)不使用MATLAB自动编码中保留的任何词,如const、TRUE、FALSE、 infinity, nil, double, single, or, enum
1.4 变量名称的一致性
输入输出模块、goto/from模块、信号线、子系统端口标签名称,直接连接到相同信号的名称应是一致的。然而,连接一个库的子模块、可重复利用的子模块(建议封装)是例外。
2、simulink模型外观
2.1 信号线外观
1)信号流向要从左到右流动。
2)输入端口应放置在图的左侧,左对齐;输出端口应放置在图的右侧,右对齐
3)如果可避免,信号线不应互相交叉。
4)信号线不应穿过任何模块。
5)信号线在单个分支点不应分出超过2个以上的支线(不允许十字交叉连接),避免难以区分信号交叉的情况。
2.2 基础模块外观
1)尽量不改变模型库中模型的大小使用,图标中显示的任何文本(例如可调参数、文件名、方程式)必须是可读的。
如下为错误示例:
2)若参数较长不好显示出来,模型点击右键properties->block annotaiton,使它显示在模块外面,如:
3)显示对模块名称有功能要求以及模块名称有重要意义的模块的块名称,且模块的名称应该放在该模块的下面,如
4)Triggered和enabled模块必须放在子系统的上三分之一处
5)Delay以外的所有模块不应旋转或翻转,包括子系统,如下错误示例:
6)模型不得带有未连接的输入输出的子系统、基本模块或信号线。可以输入连接接地模块,输出连接终止符模块。如下:
3、Simulink基础模块使用
3.1 数字运算与逻辑运算模块
1)执行数字运算的模块不可以用于执行逻辑运算。不能将数字运算结果连接到等待逻辑值的Enable Port模块。如下错误示例:
2)执行逻辑运算的模块不可以用于执行数字运算, Logical Operator输入必须为boolean数据类型。如下错误示例:
3)布尔值不应用于关系运算,布尔值不应与数值(0,1,~)或逻辑值(true,false)进行比较。如如下错误示例:
如下正确示例:
3.2 Delay模块
当采用Delay模块(例如Unit Delay 块)来防止横跨子系统的反馈回路中的代数环时,必须把它们放置在该子系统的外面。如下错误示例:
3.3 带开关函数的模块(Switch, Multiport Switch, Index Vector)
1)为了信号流的可视性,输入选择u2~=0选项,且u2需为boolean。
2)数据端口和输出端口使用相同的数据类型
如:
3.4 from、goto模块
1)为了信号流的可视性,尽量少使用Goto和From模块,不可避免信号交叉时可以使用。
3.5 Product模块
1)Product模块乘除过程中输入信号的类型相同
3.6 Merge模块
1)在条件子系统和Merge模块之间应不设置模块。merge的输入信号必须来自一个条件执行子系统,否则会仿真报错。如下错误示例:
3.7 控制器内禁用的模块
1)通过输入showblockdatatypetable命令,可以显示一个支持代码生成的模块的清单。其他的自己去MAAB找下,不支持生成代码的、不符合规范的都有讲
2)禁用Abs模块
为避免有符号整数数据饱和时出现如下情况:
3)禁用值为1的Gain模块进行数据类型转换,改用Data Type Conversion模块
最后
以上就是单身小虾米为你收集整理的Matlab模型开发之——从建模规范开启旅程1 Simulink前言1、命名 2、simulink模型外观3、Simulink基础模块使用的全部内容,希望文章能够帮你解决Matlab模型开发之——从建模规范开启旅程1 Simulink前言1、命名 2、simulink模型外观3、Simulink基础模块使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复