注册 登录
ET创芯网论坛(EETOP) 返回首页

dongdong2016的个人空间 http://blog.eetop.cn/1519554 [收藏] [复制] [分享] [RSS]

日志

simulink简单记录---(12) [2018年11月14日]

已有 283 次阅读2018-11-14 19:54 |个人分类:simulink|系统分类:硬件设计

天气: 晴朗
心情: 正常
        1.S-function函数
        System function的简称,是对一个动态系统的计算机程序语言描述。
        S-function接收来自Simulink解法器的相关信息,并对解法器发出的命令做出适当的响应,这种交互作用类似simulink系统模块与解法器交互作用。
        在Matlab中,可以选择M文件,C或MEX文件编写。
        最广泛的用途是定制用户自己的simulink模块
        主要用来实现下面几个方面的功能:
        ①增加一个通用目标的模型
        ②使用S-function的模块来充当硬件的驱动
        ③在仿真中嵌入已经存在的C代码
        ④将系统表示成一系列的数学方程
        ⑤在simulink中使用动画
        
        2.常用概念
        直接馈通
        指输出(或者是对于变步长采样块的可变步长)直接受控于一个输入口的值。
        ②动态维矩阵
       S-function可编写成支持任意维的输入。当仿真开始时,根据驱动S-function的输入向量的维数动态确定实际输入的维数。
       M文件的S-function只可有一个输入端口,而且输入端口只能接受一维(向量)的信号输入。
       信号的宽度是可变的。在一个M文件的S-function内,如果要指示输入宽度是动态的,必须在数据结构sizes中相应的域值指定为-1,结构sizes是在调用mdlInitializeSizes时返回的一个结构。
       当S-function通过使用length(u)来调用时,可以确定实际输入的宽度。如果指定为0宽度,那么S-function模块中将不出现输入端口。
       如果块的其他特性,如输出数量、离散状态数量或连续状态数量,被指定为动态宽度,那么simulink会将这些向量定义为与输入向量具有相同的长度。
       ③采样时间和偏移量
       采样时间选项:
       连续采样时间:用于具有连续状态和/或非过零采样的S-function
       连续但微步长固定采样时间:需要在每一个主仿真步上执行,但在微步长内值不发生变化的S-function
       离散采样时间:如果S-function模块的行为是离散时间间隔的函数,那么可以定 义一个采样时间来控制simulink何时调用该模块。也可以定义一个偏移量来延迟每个采样时间点。偏移量的值不超过相应采样时间的值。
        采样时间点发生的时间:
        TimeHit=(n*period)+offset
        可变采样时间:采样时间间隔变化的离散采样时间。在每步仿真的开始,具有可变采样时间的S-function需要计算下一次采样点的时间。
        继承采样时间:从其输入块继承采样时间。
         一个块可以从以下几种块中继承采样时间:
        ①输入块 ;②输出块;③系统中最快的采样时间
        采样时间设置为继承:M文件中的S-function中使用-1作为采样时间,C的S-function中使用INHERITED_SAMPLE_TIME作为采样时间。
        采样时间是按照固定格式成对指定的:[采样时间,偏移时间]
        还可指定采样时间从驱动块继承而来,S-function只能有一个采样时间对

        3.S-function模块
         S-Function模块在User Defined Function库
         双击S-function模块,打开其参数设置对话框,设置S-Function参数
         S-function name(文件名)填写S-function不带扩展名的文件名,文件名文本框不能为空。
         S-function parameters(参数编辑框)文本框中填写S-function所需要的参数,参数并列给出,参数间以逗号分隔开。
         创建S-Function源代码,单击"Edit"按钮,即可打开源代码M文件的编辑窗口
         连接模块,进行仿真

         4.S-function工作原理
         S-function优点就是可以创建一个通用的模块,在模块中可以多次调用,在不同的场合下仅仅修改它的参数。
         仿真流程:
         S-function包括主函数和6个功能子函数
         mdlInitializeSizes初始化,定义S-function的基本特性,包括采样时间、连续或离散状态的初始条件和Sizes数组
         mdlDerivatives连续状态微分
         mdlUpdate离散状态更新
         mdlOutputs模块输出
         mdlGetTimeOfNextVarHit计算下次采样时刻
         mdlTerminate仿真结束
仿真过程中,通过Switch-case语句,根据不同阶段对应的flag值(仿真流程标志向量)来调用S-function的不同子函数,以完成对S-function模块仿真流程的控制。

         定义S-function的初始信息
         S-function的说明信息,这一部分主要是在mdlIntializeSizes子函数里完成。
         Sizes数组是S-function函数信息的载体,它的内部字段意义为:
         ①NumContStates:连续状态的个数(状态向量连续部分的宽度)
         ②NumDIscStates:离散状态的个数(状态向量离散部分的宽度)
         ③NumOutputs:输出变量的个数(宽度)
         ④NumInputs:输入变量的个数(宽度)
         ⑤DirFeedthrough:有无直接馈入,其是一个布尔代数,0或1两种,0代表没有
         ⑥NumSampleTimes:采样时间的个数,ts变量的行数
         字段代表的向量宽度为动态可变,则可以将它们赋值为-1
         由于S-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块进行合成或分解
         
         输入和输出的参量说明:
         默认的4个输入参量:t,x,u,flag,他们次序不能变动
         t代表仿真时间;x代表状态向量;u代表输入向量;flag是一个控制在每个仿真阶段调用哪一个子函数的参数;
         默认的4个输出参量:sys,x0,str,ts,他们次序不能变动
         sys是一个通用的返回参数,它的返回值取决于flag值; x0是初始状态值,这个返回参数只有在flag值为0时才有效;str没有任何意义;ts是一个m*2的矩阵,它的两列分别表示采样时间间隔和偏移。
        
        建立S-function可以分成两个分离的任务:
        ①初始化模块特性
        ②将算法放到合适的S-function子函数中去
           
          
        

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

关闭

站长推荐上一条 /3 下一条

关闭
关闭
X

小黑屋|手机版|Archiver|关于我们|联系我们|ET创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2019-5-22 21:04 , Processed in 0.024579 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部