基于S函数的simulink仿真

打印 上一主题 下一主题

主题 1279|帖子 1279|积分 3837

基于S函数的simulink仿真

S函数可以用盘算机语言来形貌动态系统。在控制系统筹划中,S函数可以用来形貌控制算法、自适应算法和模子动力学方程
S函数中使用文本方式输入公式和方程,适合复杂动态系统的数学形貌,并且在仿真过程中可以对仿真参数举行更精确的形貌、
1.1 S函数简介

S函数是系统函数(system function)的简称。可以用MATLAB代码、C、C++等语言来编写S函数。
1.2 S函数的使用步骤

步骤如下:

  • 创建S函数源文件
  • 在动态系统的simulink模子框图中添加S-function模块,并且举行正确设置
  • 在simulink模子框图中按照定义好的功能毗连输入输出端口
1.3 S函数的基本功能及重要参数设定

S函数的基本功能及重要参数设定如下:

  • S函数功能模块:各种功能模块完成不同的使命,这些功能模块(函数)称为仿真例程或回调函数(call - back functions),包括初始化(initialization)、导数(mdlDerivative)、输出(mdlOutput)等。
  • NumContStates体现S - 函数形貌的模块中连续状态的个数。
  • NumDiscStates体现离散状态的个数。
  • NumOutputs和NumInputs分别体现模块输出和输入的个数。
  • 直接馈通(dirFeedthrough)为输入信号是否在输出端出现的标识,取值为0或1。比方,形如                                        y                            =                            k                            ×                            u                                  y = k×u                     y=k×u的系统必要输入(即直接反馈),其中,                                        u                                  u                     u是输入,                                        k                                  k                     k是增益,                                        y                                  y                     y是输出,形如等式                                        y                            =                            x                            ,                                       x                               ˙                                      =                            u                                  y = x,\dot{x}=u                     y=x,x˙=u的系统不必要输入(即不存在直接反馈),其中,                                        x                                  x                     x是状态,                                        u                                  u                     u是输入,                                        y                                  y                     y为输出。
  • NumSampleTimes为模块采样周期的个数,S函数支持多采样周期的系统。 除了sys外,还应设置系统的初始状态变量                                                   x                               0                                            x_0                     x0​、说明变量str和采样周期变量                                                   t                               s                                            t_s                     ts​。                                                   t                               s                                            t_s                     ts​变量为双列矩阵,其中每一行对应一个采样周期。对连续系统和单个采样周期的系统来说,该变量为                                        [                                       t                               1                                      ,                                       t                               2                                      ]                                  [t_1,t_2]                     [t1​,t2​],                                                   t                               1                                            t_1                     t1​为采样周期,                                                   t                               1                                      =                            −                            1                                  t_1 = - 1                     t1​=−1体现继续输入信号的采样周期,                                                   t                               2                                            t_2                     t2​为偏移量,一样寻常取为0。对连续系统来说,                                                   t                               s                                            t_s                     ts​取为                                        [                            −                            1                            ,                            0                            ]                                  [-1,0]                     [−1,0]。
1.4 S函数形貌实例

在控制系统筹划中,S函数可以用于控制器、自适应律和模子形貌。
以模子                                   J                                   θ                            ¨                                  =                         u                         +                         d                         (                         t                         )                              J\ddot{\theta}=u+d(t)                  Jθ¨=u+d(t)为例,其中,                                   u                              u                  u为控制输入,                                   d                         (                         t                         )                              d(t)                  d(t)为加在控制输入端的扰动,模子输出为                                   θ                         和                                   θ                            ˙                                       \theta和\dot{\theta}                  θ和θ˙,即转动角度和角速率,                                   J                              J                  J为转动惯量,该模子可以形貌如下:
                                                                                                          x                                           ˙                                                      1                                                                                                                       =                                                       x                                           2                                                                                                                                                         x                                           ˙                                                      2                                                                                                                       =                                                       1                                           J                                                      (                                        u                                        +                                        d                                        (                                        t                                        )                                        )                                                                                \begin{align*} \dot{x}_1&=x_2\\ \dot{x}_2&=\frac{1}{J}(u + d(t)) \end{align*}                     x˙1​x˙2​​=x2​=J1​(u+d(t))​
其中:                                             x                            1                                  =                         θ                         ,                                   x                            2                                  =                                   θ                            ˙                                       x_1=\theta ,x_2=\dot{\theta}                  x1​=θ,x2​=θ˙
1 首先,初始化Initialization函数
接纳S函数来形貌动力学方程,可选取1输人2输出系统,如果角度和角速率的初始值取零,则模子初始化参数写为[0,0],模子初始化S函数形貌如下:(见模板)

2 微分方程形貌的mdlDerivative函数
该函数可用于形貌微分方程并实现数值求解。在控制系统中,可以采样该函数来形貌被控对象和自适应律等,并通过Simulink环境下选择数值分析方法来实现对模子的数值求解
取                                   J                         =                         2                         ,                         d                         (                         t                         )                         =                         s                         i                         n                         t                              J=2,d(t)=sint                  J=2,d(t)=sint,则接纳S函数可以实现模子角度和角速率的求解,形貌如下:
  1. function sys=mdlDerivatives(t,x,u)
  2. J=2;
  3. dt=sin(t);
  4. ut=u(1);
  5. sys(1)=x(2);
  6. sys(2)=1/J*(ut+dt);
  7. sys = [dx1;dx2];
复制代码

3 用于输出的mdlOutput函数
S函数的mdlOutput函数通常用于形貌控制器或模子的输出。接纳S函数的mdlOutput模块来形貌模子角度和角速率的输出:
  1. function sys=mdlOutputs(t,x,u)
  2. sys(1) = x(1);
  3. sys(2) = x(2);
复制代码

最后,给出S函数模板
  1. function [sys,x0,str,ts,simStateCompliance] = plant(t,x,u,flag,pa)
  2. %SFUNTMPL General MATLAB S-Function Template
  3. %   With MATLAB S-functions, you can define you own ordinary differential
  4. %   equations (ODEs), discrete system equations, and/or just about
  5. %   any type of algorithm to be used within a Simulink block diagram.
  6. %
  7. %   The general form of an MATLAB S-function syntax is:
  8. %       [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)
  9. %
  10. %   What is returned by SFUNC at a given point in time, T, depends on the
  11. %   value of the FLAG, the current state vector, X, and the current
  12. %   input vector, U.
  13. %
  14. %   FLAG   RESULT             DESCRIPTION
  15. %   -----  ------             --------------------------------------------
  16. %   0      [SIZES,X0,STR,TS]  Initialization, return system sizes in SYS,
  17. %                             initial state in X0, state ordering strings
  18. %                             in STR, and sample times in TS.
  19. %   1      DX                 Return continuous state derivatives in SYS.
  20. %   2      DS                 Update discrete states SYS = X(n+1)
  21. %   3      Y                  Return outputs in SYS.
  22. %   4      TNEXT              Return next time hit for variable step sample
  23. %                             time in SYS.
  24. %   5                         Reserved for future (root finding).
  25. %   9      []                 Termination, perform any cleanup SYS=[].
  26. %
  27. %
  28. %   The state vectors, X and X0 consists of continuous states followed
  29. %   by discrete states.
  30. %
  31. %   Optional parameters, P1,...,Pn can be provided to the S-function and
  32. %   used during any FLAG operation.
  33. %
  34. %   When SFUNC is called with FLAG = 0, the following information
  35. %   should be returned:
  36. %
  37. %      SYS(1) = Number of continuous states.
  38. %      SYS(2) = Number of discrete states.
  39. %      SYS(3) = Number of outputs.
  40. %      SYS(4) = Number of inputs.
  41. %               Any of the first four elements in SYS can be specified
  42. %               as -1 indicating that they are dynamically sized. The
  43. %               actual length for all other flags will be equal to the
  44. %               length of the input, U.
  45. %      SYS(5) = Reserved for root finding. Must be zero.
  46. %      SYS(6) = Direct feedthrough flag (1=yes, 0=no). The s-function
  47. %               has direct feedthrough if U is used during the FLAG=3
  48. %               call. Setting this to 0 is akin to making a promise that
  49. %               U will not be used during FLAG=3. If you break the promise
  50. %               then unpredictable results will occur.
  51. %      SYS(7) = Number of sample times. This is the number of rows in TS.
  52. %
  53. %
  54. %      X0     = Initial state conditions or [] if no states.
  55. %
  56. %      STR    = State ordering strings which is generally specified as [].
  57. %
  58. %      TS     = An m-by-2 matrix containing the sample time
  59. %               (period, offset) information. Where m = number of sample
  60. %               times. The ordering of the sample times must be:
  61. %
  62. %               TS = [0      0,      : Continuous sample time.
  63. %                     0      1,      : Continuous, but fixed in minor step
  64. %                                      sample time.
  65. %                     PERIOD OFFSET, : Discrete sample time where
  66. %                                      PERIOD > 0 & OFFSET < PERIOD.
  67. %                     -2     0];     : Variable step discrete sample time
  68. %                                      where FLAG=4 is used to get time of
  69. %                                      next hit.
  70. %
  71. %               There can be more than one sample time providing
  72. %               they are ordered such that they are monotonically
  73. %               increasing. Only the needed sample times should be
  74. %               specified in TS. When specifying more than one
  75. %               sample time, you must check for sample hits explicitly by
  76. %               seeing if
  77. %                  abs(round((T-OFFSET)/PERIOD) - (T-OFFSET)/PERIOD)
  78. %               is within a specified tolerance, generally 1e-8. This
  79. %               tolerance is dependent upon your model's sampling times
  80. %               and simulation time.
  81. %
  82. %               You can also specify that the sample time of the S-function
  83. %               is inherited from the driving block. For functions which
  84. %               change during minor steps, this is done by
  85. %               specifying SYS(7) = 1 and TS = [-1 0]. For functions which
  86. %               are held during minor steps, this is done by specifying
  87. %               SYS(7) = 1 and TS = [-1 1].
  88. %
  89. %      SIMSTATECOMPLIANCE = Specifices how to handle this block when saving and
  90. %                           restoring the complete simulation state of the
  91. %                           model. The allowed values are: 'DefaultSimState',
  92. %                           'HasNoSimState' or 'DisallowSimState'. If this value
  93. %                           is not speficified, then the block's compliance with
  94. %                           simState feature is set to 'UknownSimState'.
  95. %   Copyright 1990-2010 The MathWorks, Inc.
  96. %
  97. % The following outlines the general structure of an S-function.
  98. %
  99. switch flag,
  100.   %%%%%%%%%%%%%%%%%%
  101.   % Initialization %
  102.   %%%%%%%%%%%%%%%%%%
  103.   case 0,
  104.     [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  105.   %%%%%%%%%%%%%%%
  106.   % Derivatives %
  107.   %%%%%%%%%%%%%%%
  108.   case 1,
  109.     sys=mdlDerivatives(t,x,u,pa);
  110.   %%%%%%%%%%
  111.   % Update %
  112.   %%%%%%%%%%
  113.   case 2,
  114.     sys=mdlUpdate(t,x,u);
  115.   %%%%%%%%%%%
  116.   % Outputs %
  117.   %%%%%%%%%%%
  118.   case 3,
  119.     sys=mdlOutputs(t,x,u);
  120.   %%%%%%%%%%%%%%%%%%%%%%%
  121.   % GetTimeOfNextVarHit %
  122.   %%%%%%%%%%%%%%%%%%%%%%%
  123.   case 4,
  124.     sys=mdlGetTimeOfNextVarHit(t,x,u);
  125.   %%%%%%%%%%%%%
  126.   % Terminate %
  127.   %%%%%%%%%%%%%
  128.   case 9,
  129.     sys=mdlTerminate(t,x,u);
  130.   %%%%%%%%%%%%%%%%%%%%
  131.   % Unexpected flags %
  132.   %%%%%%%%%%%%%%%%%%%%
  133.   otherwise
  134.     DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
  135. end
  136. % end sfuntmpl
  137. %
  138. %=============================================================================
  139. % mdlInitializeSizes
  140. % Return the sizes, initial conditions, and sample times for the S-function.
  141. %=============================================================================
  142. %
  143. function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
  144. %
  145. % call simsizes for a sizes structure, fill it in and convert it to a
  146. % sizes array.
  147. %
  148. % Note that in this example, the values are hard coded.  This is not a
  149. % recommended practice as the characteristics of the block are typically
  150. % defined by the S-function parameters.
  151. %
  152. sizes = simsizes;
  153. sizes.NumContStates  = 2;
  154. sizes.NumDiscStates  = 0;
  155. sizes.NumOutputs     = 2;
  156. sizes.NumInputs      = 1;
  157. sizes.DirFeedthrough = 0;
  158. sizes.NumSampleTimes = 1;   % at least one sample time is needed
  159. sys = simsizes(sizes);
  160. %
  161. % initialize the initial conditions
  162. %
  163. x0  = [0,0];
  164. %
  165. % str is always an empty matrix
  166. %
  167. str = [];
  168. %
  169. % initialize the array of sample times
  170. %
  171. ts  = [0 0];
  172. % Specify the block simStateCompliance. The allowed values are:
  173. %    'UnknownSimState', < The default setting; warn and assume DefaultSimState
  174. %    'DefaultSimState', < Same sim state as a built-in block
  175. %    'HasNoSimState',   < No sim state
  176. %    'DisallowSimState' < Error out when saving or restoring the model sim state
  177. simStateCompliance = 'UnknownSimState';
  178. % end mdlInitializeSizes
  179. %
  180. %=============================================================================
  181. % mdlDerivatives
  182. % Return the derivatives for the continuous states.
  183. %=============================================================================
  184. %
  185. function sys=mdlDerivatives(t,x,u,pa)
  186. k=pa.k;
  187. m=pa.m;
  188. x1=x(1);
  189. x2=x(2);
  190. dx1=x2;
  191. dx2=-k/m*x1^3+u/m;
  192. sys = [dx1;dx2];
  193. % end mdlDerivatives
  194. %
  195. %=============================================================================
  196. % mdlUpdate
  197. % Handle discrete state updates, sample time hits, and major time step
  198. % requirements.
  199. %=============================================================================
  200. %
  201. function sys=mdlUpdate(t,x,u)
  202. sys = [];
  203. % end mdlUpdate
  204. %
  205. %=============================================================================
  206. % mdlOutputs
  207. % Return the block outputs.
  208. %=============================================================================
  209. %
  210. function sys=mdlOutputs(t,x,u)
  211. sys = x;
  212. % end mdlOutputs
  213. %
  214. %=============================================================================
  215. % mdlGetTimeOfNextVarHit
  216. % Return the time of the next hit for this block.  Note that the result is
  217. % absolute time.  Note that this function is only used when you specify a
  218. % variable discrete-time sample time [-2 0] in the sample time array in
  219. % mdlInitializeSizes.
  220. %=============================================================================
  221. %
  222. function sys=mdlGetTimeOfNextVarHit(t,x,u)
  223. sampleTime = 1;    %  Example, set the next hit to be one second later.
  224. sys = t + sampleTime;
  225. % end mdlGetTimeOfNextVarHit
  226. %
  227. %=============================================================================
  228. % mdlTerminate
  229. % Perform any end of simulation tasks.
  230. %=============================================================================
  231. %
  232. function sys=mdlTerminate(t,x,u)
  233. sys = [];
  234. % end mdlTerminate
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表