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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
要编写一个s函数,有两个输入,三个输出,输入为参考电流Is和电角度angle,输出为三相电流Ia,Ib,Ic,问:% b8 }/ g. c: \' c/ I1 H) t
1、函数的外部使用MUX模块将Is和angle连接起来一同接入s-function函数模块吗?
& w  r- x& a3 i3 s; T2、此函数的s-function parameter怎么设置?(Is和angle外部的子系统计算结果给定)
, ^  C4 y" S& x' G3、对于函数程序中的所涉及的五个参数如何声明?(我的这个老说我没定义Is)
! r( ~, R. e0 \* w- ffunction [sys,x0,str,ts] = test_0105(t,x,u,flag,Is,angle)
2 v( ?* K' V- B8 B& Q8 `1 N1 Tswitch flag,( J0 q8 h9 t# M7 s  Z  i) ~0 }
case 0,; x6 o) Y! h+ Q$ A
[sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes;3 G! V6 m$ h2 T2 K7 `; h8 ?
case 1,
. y7 j5 s7 s% r8 q* t8 ]. `! Tsys=mdlDerivatives(t,x,u);
2 Y  A+ E7 h4 s0 B6 b" G! l  f9 d/ C1 V
case 2,
4 y& I$ `' f2 X$ I* Asys=mdlUpdate(t,x,u);* u' V2 p8 e- N3 i

- s- c1 `9 f! j+ z! Kcase 3,# T+ a; v2 A  Z1 l1 v
sys=mdlOutputs(t,x,u,Is,angle);  D7 V3 U0 p9 M' c. ?; q

3 q$ q4 {# l2 [) l8 ^case 4,/ y6 h. Z' s9 t1 X
sys=mdlGetTimeOfNextVarHit(t,x,u);
% c9 _0 o4 m$ g4 q- xcase 9,
( f  |: C1 N/ h2 rsys=mdlTerminate(t,x,u);
* \/ X( `/ O: |: ^& {. h
- N$ `; ]8 O8 {3 ~  _otherwise0 d& Z$ H* V# |
error(['Unhandled flag = ',num2str(flag)]);
; B' N; f( ~5 K4 ?end
/ D1 F- g& C; g; sfunction [sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes1 y) I' {1 Q0 j, i/ ?
sizes = simsizes;
9 n" c! x, C- _# t; ssizes.NumContStates = 0;8 F5 e. T* n9 ?  z4 u( o, |: w; U3 M
sizes.NumDiscStates = 0;& R' P- b; I: g
sizes.NumOutputs = 3;
, F% R8 d% a0 q% H* }9 xsizes.NumInputs = 2;
; ?$ {% h7 O& i3 }5 nsizes.DiRFeedthrough = 1;& V0 Y$ @. C2 N1 t. P3 u
sizes.NumSampleTimes = 1; % at least one sample time is needed0 z! C# S* [1 N  q# F) l6 y, z
sys = simsizes(sizes);8 ^& M( r$ `7 J$ ^+ J
function [Ia,Ib,Ic]=mdlOutputs(t,x,u,Is,angle)+ ~5 s9 o) |# R  f9 d: k$ z6 x
pos=angle-floor(angle/2/pi)*2*pi;
' e9 u: S* \: w2 P+ G0 Mif pos<pi/3& W" @0 v8 k6 Q: N; n- G9 o
Ia=Is;Ib=-Is;Ic=0;# O1 c! K1 u) Y1 c+ W, `
elseif pos<2*pi/3# J( F& M' {% X! G$ z* i
Ia=Is;Ib=0;Ic=-Is;' M( P5 k1 K& Q) e/ f8 l
elseif pos<pi
: p/ T2 p6 r: k' I7 U4 Y( r1 cIa=0;Ib=Is;Ic=-Is;  i$ v) t+ R$ T2 B+ ~* X0 a
elseif pos<4*pi/3- @: F" }& h# H( m# k* M% a
Ia=-Is;Ib=Is;Ic=0;
1 l5 g% z$ h9 w7 l7 T2 welseif pos<5*pi/39 v0 f0 t8 C- K$ }
Ia=-Is;Ib=0;Ic=Is;0 l' W6 T  p, [( }$ }! g: w
else- Y- w5 U# S  T9 d9 v9 T) ?
Ia=0;Ib=-Is;Ic=Is;
( t: L* N. E5 E( R3 m# Uend* \0 [! P4 C) W( w( U; i

该用户从未签到

2#
发表于 2022-8-19 17:16 | 只看该作者
MATLAB 7.0/Simulink 6.0建模仿真开发与高级工程应用
" Z* ^' B+ x6 Fsimulink 动态系统与仿真基础
% t- a: y& o! a1 |# V3 N# `4 e这两本书讲S-FUN比较不错。可以看下。$ v  a2 J! w6 B6 C# q
如果要深入学习S-FUN,只能去看MATLAB的帮助文档,没有其他的什么好办法。
6 r( L% Y% v5 _0 q( j还有,用simulink的要点是尽量使用已有的系统提供的模块来构建自己所需的模块,虽然这样可能看上去使用的模块多,但是你自己编写的S-FUN在效率上肯定比不上系统提供的模块,所以还是组合比自己写好。
% d6 k6 E- d8 A- p  v- F6 Q; w并且S-FUN只能编写单输入单输出的模块,局限太大。你还可以研究下Simulink Embeded Function,这个模块里面可以写代码,和MATLAB基本一样,而且支持生成多输入多输出系统。不过要版本高一点的Simulink才支持这个模块。5 k% O6 F$ y  |7 B: y3 g

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-13 00:50 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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