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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
要编写一个s函数,有两个输入,三个输出,输入为参考电流Is和电角度angle,输出为三相电流Ia,Ib,Ic,问:
, J9 L, e" ~3 a0 X1、函数的外部使用MUX模块将Is和angle连接起来一同接入s-function函数模块吗?6 K4 i- s5 @; K1 b5 I& i
2、此函数的s-function parameter怎么设置?(Is和angle外部的子系统计算结果给定)
; |/ V3 E: k3 e* n3、对于函数程序中的所涉及的五个参数如何声明?(我的这个老说我没定义Is)6 Q8 U+ _7 z4 `" {0 p9 z0 u
function [sys,x0,str,ts] = test_0105(t,x,u,flag,Is,angle)
; f; b  B) k/ h- b2 x! eswitch flag,7 }9 |! L) i( ^  w
case 0,
* L/ M4 a# A. H$ Z) ^2 x: a2 j% A[sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes;
% u& k) B0 m9 R  E1 P1 B0 M  Lcase 1,
4 ?! d# I7 J3 G1 e( h7 n. X5 V2 {/ Asys=mdlDerivatives(t,x,u);; y# s8 t; }: J3 v0 s  o
8 m1 U2 u5 ^9 t, |
case 2,5 I1 r" p! X  p- w) y
sys=mdlUpdate(t,x,u);' ^0 I% Z" S, u. n
4 Z8 J1 W$ @" \& ^. Q
case 3,
) c" |7 f; ]" |& T, I+ ^sys=mdlOutputs(t,x,u,Is,angle);
  Y( m, r$ k! V% c- t0 o
& k3 W& J8 G. B1 g1 b2 Bcase 4,4 R4 k; U6 G& u) e3 C
sys=mdlGetTimeOfNextVarHit(t,x,u);
& R9 l! u3 h# P$ N' C6 D) ]* Tcase 9,- ~% T! p0 E! X
sys=mdlTerminate(t,x,u);
8 d) S, k& f  B/ C3 p2 w2 k5 I: V- }$ W8 R( @
otherwise
+ {- R" [2 I+ Herror(['Unhandled flag = ',num2str(flag)]);
- q2 j) Z( |) B" c- @end9 y. g# M5 V# k% Q' ~  s  d
function [sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes
4 F* }; v% n4 ^0 E8 G, k3 ?" ksizes = simsizes;
3 Z$ u% |2 ~9 @! ?1 c2 u; Ksizes.NumContStates = 0;& q) f' L& q+ `. m
sizes.NumDiscStates = 0;
* H! C4 p5 ]. Y" M- Asizes.NumOutputs = 3;2 ^, q8 `; S2 \; Y+ s9 \9 F% k
sizes.NumInputs = 2;
) S0 ]6 _$ S) osizes.DiRFeedthrough = 1;
/ P1 d8 P5 R: e" c" Bsizes.NumSampleTimes = 1; % at least one sample time is needed
; i: Q7 W4 L2 l1 Y5 d9 }0 `- O: ysys = simsizes(sizes);2 ?& B- m0 K3 u
function [Ia,Ib,Ic]=mdlOutputs(t,x,u,Is,angle)$ f7 T6 J1 W! ]5 U2 g9 y+ X5 I
pos=angle-floor(angle/2/pi)*2*pi;
" W2 k8 ]2 f5 z' D4 `. ?if pos<pi/3) b( c* D1 c+ H
Ia=Is;Ib=-Is;Ic=0;) J- B8 F' e/ k& z# g  C
elseif pos<2*pi/3! u  N, z( O5 O! b  K
Ia=Is;Ib=0;Ic=-Is;" l. J+ W1 }- N' b2 h& G
elseif pos<pi7 s# Q$ J5 a$ P7 ^& f7 ?
Ia=0;Ib=Is;Ic=-Is;
- ~6 K9 L+ X8 u% Z! ]$ Q0 qelseif pos<4*pi/3
- K* E; f5 b) L9 l' hIa=-Is;Ib=Is;Ic=0;$ l/ B* ^+ T. F  ~
elseif pos<5*pi/3, `0 A6 l- D2 F8 O; O
Ia=-Is;Ib=0;Ic=Is;
: N& ~( u" l* {! b, @4 uelse! u# W6 \3 y* U6 L
Ia=0;Ib=-Is;Ic=Is;
* r$ K4 |6 ^# [& O0 Rend4 Q9 p# n! x3 F6 _1 c/ `

该用户从未签到

2#
发表于 2022-8-19 17:16 | 只看该作者
MATLAB 7.0/Simulink 6.0建模仿真开发与高级工程应用
  J: V& M9 p# @* [: b, N" X! `simulink 动态系统与仿真基础7 @% M4 d4 ^1 g
这两本书讲S-FUN比较不错。可以看下。' n: A' g6 M1 g; r6 e* C
如果要深入学习S-FUN,只能去看MATLAB的帮助文档,没有其他的什么好办法。- N: z' R0 m4 `+ L/ ~0 y; z
还有,用simulink的要点是尽量使用已有的系统提供的模块来构建自己所需的模块,虽然这样可能看上去使用的模块多,但是你自己编写的S-FUN在效率上肯定比不上系统提供的模块,所以还是组合比自己写好。* Y3 x3 x/ K( o# J6 q
并且S-FUN只能编写单输入单输出的模块,局限太大。你还可以研究下Simulink Embeded Function,这个模块里面可以写代码,和MATLAB基本一样,而且支持生成多输入多输出系统。不过要版本高一点的Simulink才支持这个模块。9 z( W) t, G$ H, V6 R; y* \4 N

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-11 18:36 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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