找回密码
 注册
关于网站域名变更的通知
查看: 290|回复: 2
打印 上一主题 下一主题

[仿真讨论] 请教Matlab关于S函数多输入和多输出的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-19 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
要编写一个s函数,有两个输入,三个输出,输入为参考电流Is和电角度angle,输出为三相电流Ia,Ib,Ic,问:
4 G0 B6 v! V, B1、函数的外部使用MUX模块将Is和angle连接起来一同接入s-function函数模块吗?5 C# t1 C; B/ I, U, {; J1 l
2、此函数的s-function parameter怎么设置?(Is和angle外部的子系统计算结果给定)- X. r2 @# D# t3 K( V# I$ Y' Q
3、对于函数程序中的所涉及的五个参数如何声明?(我的这个老说我没定义Is)+ ~# G. W$ b- R9 _5 }# _
function [sys,x0,str,ts] = test_0105(t,x,u,flag,Is,angle)5 X( Z! ?% |; L. S4 ]- G) [8 u
switch flag,0 ~5 G. h$ k! l4 Q  I. A6 D
case 0,
. A2 S+ L5 C0 J% y[sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes;
9 A2 l9 J& U2 P: J# O# I, F% m; m% Scase 1,
9 c0 _  `. S1 j6 @4 wsys=mdlDerivatives(t,x,u);1 u1 f- }2 B, t) u+ D% ]

6 P7 {0 S8 g" T. rcase 2,
0 [7 o6 q/ f. e" X+ psys=mdlUpdate(t,x,u);
8 U% h1 j5 ?2 X2 _
) c0 [5 t$ E6 h9 b/ c/ D% O$ ]case 3,0 g: t$ b  U: N
sys=mdlOutputs(t,x,u,Is,angle);
4 N, Y+ D5 p+ ]6 s* K
1 h# ^: K' i6 s2 Xcase 4,
4 L* d" O3 h6 }4 \3 c6 msys=mdlGetTimeOfNextVarHit(t,x,u);' |( H5 I3 f6 Y$ U8 s8 `, i# j' u
case 9,
* s2 ~5 f7 B/ b8 [  k: P) P+ Nsys=mdlTerminate(t,x,u);
; @6 E' j# O$ n$ R* U) {
% e( T! i1 o" [; V# @2 w) Ootherwise& j" X" G6 `; S1 M9 `
error(['Unhandled flag = ',num2str(flag)]);
+ v" B3 a; k$ [" uend7 R; r0 x# y4 N5 E, N2 \! C2 q
function [sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes
- N9 q( ^; F1 p4 ysizes = simsizes;6 f. ~: H6 B2 b$ |  }6 H; Y5 a
sizes.NumContStates = 0;
- j" n( j3 H! I! rsizes.NumDiscStates = 0;" G( d# }9 \7 c: D: n$ ~+ C
sizes.NumOutputs = 3;
0 ?! F" C% `  P! fsizes.NumInputs = 2;& z3 ?; a2 n* \; s1 v3 Y
sizes.DiRFeedthrough = 1;4 j+ U0 H; P, J
sizes.NumSampleTimes = 1; % at least one sample time is needed; h# P+ p3 C# a
sys = simsizes(sizes);6 x) @# b* f" V  ^8 H$ U
function [Ia,Ib,Ic]=mdlOutputs(t,x,u,Is,angle)
. Y( ^4 H4 z* X! t. c8 z6 ]pos=angle-floor(angle/2/pi)*2*pi;
6 l2 u. b# j% u& F+ I/ U" ]6 Zif pos<pi/3
5 K0 F; ?- w/ _/ n+ A' U5 y* ?Ia=Is;Ib=-Is;Ic=0;
. M9 f8 Q. E( n9 m/ V" ^! Gelseif pos<2*pi/3& z' Q" ^7 v4 z; m
Ia=Is;Ib=0;Ic=-Is;
: m* \3 K1 |, d( ]8 r5 gelseif pos<pi
, s3 L5 ~; F' @7 f- UIa=0;Ib=Is;Ic=-Is;4 U8 A& l7 w( C" C% c; X  {
elseif pos<4*pi/34 y" a$ Z/ M. A  z
Ia=-Is;Ib=Is;Ic=0;
9 r( h! Q) I% c& `& Welseif pos<5*pi/37 q' k0 O& `* Y9 I
Ia=-Is;Ib=0;Ic=Is;: x8 {7 r4 A7 I4 T" N. O$ N- `: M
else
2 G, ?, k" g1 u4 z# W3 kIa=0;Ib=-Is;Ic=Is;
) t5 g; z  Y4 pend
6 i- |8 W; E  V1 u

该用户从未签到

2#
发表于 2022-8-19 17:16 | 只看该作者
MATLAB 7.0/Simulink 6.0建模仿真开发与高级工程应用: K) O0 O. c9 N- L8 J! R
simulink 动态系统与仿真基础
( @$ D8 |# c# Z! _+ A% [! f这两本书讲S-FUN比较不错。可以看下。- g& }1 q' E3 e1 _! Q, Z
如果要深入学习S-FUN,只能去看MATLAB的帮助文档,没有其他的什么好办法。
: n* M. T; y; w& H! t还有,用simulink的要点是尽量使用已有的系统提供的模块来构建自己所需的模块,虽然这样可能看上去使用的模块多,但是你自己编写的S-FUN在效率上肯定比不上系统提供的模块,所以还是组合比自己写好。# g6 `; c: |! m0 Y$ y+ s+ g& L
并且S-FUN只能编写单输入单输出的模块,局限太大。你还可以研究下Simulink Embeded Function,这个模块里面可以写代码,和MATLAB基本一样,而且支持生成多输入多输出系统。不过要版本高一点的Simulink才支持这个模块。4 q6 P* g/ D8 U1 g

该用户从未签到

3#
发表于 2022-8-19 17:38 | 只看该作者
再看看别人是怎么说的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-21 09:51 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表