SIMULINK6 S-Function 编程(M,C/C++语言)与模块封装技术(1)Simulink S函数概观

 

 

 

 

 

SIMULINK6 S-Function 编程

MC/C++语言)

与模块封装技术

 

 

 

 

 

 

 

 

丁竞渊 编译

上海大学计算机工程与科学学院

 

 

 

 

 

1. Simulink S函数概观

S-functionSystem function)是Simulink模块的计算机语言描述。可以用MC/C++AdaFortran 语言以MEX文件的形式编写。

S-function以特殊的方式与Simulink方程求解器交互。这种交互和Simulink内建模块的做法非常相似。S-function模块可以是连续、离散或者混合系统。

通过S-function,用户可以将自己的模块加入Simulink模型中。从而可以实现用户自定义的算法或者利用操作系统、硬件设备交互。

2. S函数工作机制

2.1 Simulink模块的数学描述

Simulink模块包括一系列输入、状态和输出。输出是采样时间、输入、模块状态的函数。

1.

下面的方程描述了输入、输出和状态的数学关系。

2.

2.2 仿真过程

Simulink模型的执行按下述几个步骤。首先是初始化阶段。在这一阶段Simulink将库模块集合到模型,传播宽度、数据类型和采样时间,评估模块参数,确定模块执行顺序,分配内存。然后是仿真阶段。此时Simulink进入一个仿真循环,循环的每次执行对应一个仿真步。在每个仿真步,Simulink按初始化阶段确定的顺序执行各个模块。对每个模块,Simulink计算模块在当前采样时间的状态、微分和输出。这将持续到仿真结束。图3描述了Simulink的仿真过程。

3.

2.3 S-function的回调(Callback)方法

S-function包括一系列的回调方法,用以执行每个仿真步骤所需的任务。在一个模型的仿真过程中,每个仿真步骤,Simulink将调用各S-function的适当方法。S-function执行的方法包括:

初始化:在首次仿真循环中执行。Simulink初始化S-function。在这一步骤中Simulink将:

初始化SimStruct,这是一种Simulink结构,包含了S-function的信息。

设置输入输出端口的个数和纬度。

设置模块的采样次数。

分配存储区域和数组长度。

计算下一采样点:如果定义了一个可变采样步长的模块,这一步将计算下一次采样点,也就是计算下一步长。

计算在主要时间步中的输出:这一步结束之后,模块的输出端口在当前时间步是有效的。

更新主要时间步中的离散状态:所有的模块在该回调方法中,必须执行一次每次时间步都要执行的活动,比如为下一次仿真循环更新离散状态。

● 积分:这用于具有连续状态的或者(和)具有非采样过零的模型。如果用户的S-function具有连续状态,Simulink在最小采样步长调用S-function的输出和微分部分。这也是Simulink之所以能计算S-function的状态。如果用户S-function(仅针对C MEX具有非采样过零,Simulink在最小采样步长调用S-function的输出和微分部分,这样可以确定过零点。

3. 编写M语言的S函数

M语言编写的S-function称为M-file S-functions,根据API版本不同,分为Level-2Level-1类型。Level-2 M-file S-function支持采用M语言实现具有全部功能的Simulink模块。Level-2 M-file S-function APIs 非常接近于C MEX-file S-functions,许多特性可以相同使用。所以本节只叙述适用于M-file S-function的部分。Level-1M-file S-function APIs是针对老版本的Simulink模块。

3.1 Level-2格式 M-File S-FunctionAPI

Level-2 M-file S-function APIs定义了,组成Level-2 M-file S-function所需要的,回调(Callback)方法的信号和基本功能。这些API的实现决定了模块的属性(端口、参数和状态等)和行为(模块作为模块输入、状态和参数的函数的输出)。通过适当实现S-function的一组回调方法,用户可以实现满足用户需求的模块类型。

3.2 S-Function模板

Simulink提供了M语言的模板方便用户编写S-function。模板包含了Level-2 类型的M-file S-function API回调方法的基本实现。这个模板被存放于下面目录:

<matlabroot>/toolbox/simulink/blocks/msfuntmpl.m

可以通过复制模板代码,编辑、增加的S-function回调方法,来实现用户需要的S-function模块。

3.3 Main方法

Level-2类型的M-file S-function中的main函数体,执行M-file S-function模块实例的初始化。在概念上Main函数类似于C-MEX S-functionsmdlInitializeSizes回调方法。Main函数执行的Setup任务包括下面步骤:

设置模块的输入输出端口个数。

设置端口的维度、数据类型、复杂性和采样时间等属性。

设置参数个数并检验参数的有效性。

通过S-function模块的运行时对象的RegBlockMethod方法,将各个模块方法注册到所用的本地M文件中的函数。

3.4 运行时对象

当调用Level-2类型的M-file S-function回调方法时,Simulink将一个Simulink.MSFcnRunTimeBlock类的对象作为一个参数传递到该回调方法。这个实例被称为S-function模块的运行时对象。对于Level-2类型的M-file S-function,模块运行时对象相当于C MEX-file S-function回调方法中的SimStruct结构。它使回调方法可以获取模块元素,如端口、参数、状态、工作数组等,的信息。这可以通过调用S-function模块运行时对象的方法,或获取/设置模块运行时对象的属性实现。

4. 编写C语言的S函数

4.1 C MEX-file S-function简介

定义了S-function模块的C MEX-file必须在仿真过程中向Simulink提供模型信息。在仿真中SimulinkODE求解器、MEX-file协作完成指定任务。这些任务包括:定义初始条件和模块特性,计算微分、离散状态和输出。

SimulinkC MEX-file S-function模块的交互仍是通过S-function的回调方法。每个回调方法执行一个预定义的,实现仿真所需功能的任务。S-function可以执行任何其实现的任务。一系列C MEX-file S-function实现的回调方法,都远大于M-file S-function

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值