|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
大家好,最近一直在忙仿真,用到单神经元PID控制,在MATLAB中可以用S函数搭建其模型(见附件),但在pscad中用fortran语言不太会,请求高手指点,很急!各位朋友帮帮忙!下面是在MATLAB中的单神经元PID的S函数编写的文件,结合。- function [sys,x0,str,ts] =Sfunction(t,x,u,flag,yita,K), B# b! w/ J/ L' V
- % function [sys,x0,str,ts] =Sfunction(t,x,u,flag,K)4 ?& o" w9 T( f
- switch flag,
8 j; F5 R2 h/ [9 q9 R% b/ w
( i) v# A* J! q" l- case 0,
; ?+ V' k% w- ]/ p - [sys,x0,str,ts]=mdlInitializeSizes;
) f, F$ C/ R+ j1 ^ - case {1,4,9},! w4 T+ h3 d( L' b8 @; j {
- sys=[];4 g, L$ ]6 e% k2 F
- case 2,0 H- E, r7 |& P/ _' a$ P
- % sys=mdlUpdate(t,x,u);
9 F) w& J6 f0 V - sys=mdlUpdate(t,x,u,yita);
: z' E* E8 l, R" w( [1 |- L# Q
2 ^" p/ C L5 F- case 3,! |& |* R5 ~, }! a( [9 T* W
- sys=mdlOutputs(t,x,u,K);
& W, h. r+ }. V' K( V - otherwise
* ~6 X! ]. s" U' N0 x9 G - error(['Unhandled flag = ',num2str(flag)]);
- s& |8 f. R# Q- ]/ i - end
' E% j' y2 N' I& r3 J - * x ^7 Q2 h0 T7 Z0 p+ n0 [+ c6 m
- function [sys,x0,str,ts]=mdlInitializeSizes()
( D& s5 h- M( `5 e# e, j2 B - 4 `' K0 a1 ~/ U2 M: w) D
- sizes = simsizes;. N5 ~5 M: k3 M( ~/ [1 }: d& U
- sizes.NumContStates = 0;
" E! j7 x n+ s) P3 E' |9 @2 N6 a! g4 ] - sizes.NumDiscStates = 3;/ M, M: E6 q1 q6 q, ~3 K5 k5 \
- sizes.NumOutputs = 4;
" Z Q0 a+ @1 j4 f - sizes.NumInputs = 4;* `! n" v1 d0 H6 b# L$ V. c+ [( L
- sizes.DirFeedthrough = 1;
. |5 o/ e( d8 K! ~ - sizes.NumSampleTimes = 1; 6 G3 u6 f; a! Y; ~ w3 q5 h! }2 t
- sys = simsizes(sizes);/ F; V* \+ r9 N4 ~: g) C9 Q
- 7 u" p, T0 a& Q5 z
- x0 = [9;0.01;0];$ ]9 O5 [8 z3 a( t. B
1 b# X# p! h9 X3 Q$ V- str = [];. }6 f9 m1 ^/ X( P7 D: s/ W
7 F( }3 o, v5 E4 h7 O/ V) L- ts = [-1 0];: o P5 [$ `8 }0 h
9 o8 P4 u* K) q8 {- function sys=mdlUpdate(t,x,u,yita)
* N7 i; i3 o$ O6 ]# I5 x" d& B0 }/ C - % function sys=mdlUpdate(t,x,u)
9 G" N6 [* ~3 Z$ a9 d3 v - sys=x+yita*u(1)*u(4)*(2*u(1)-u(2));& @3 e! |: c: r2 {( V6 h
- * V: o, m3 C) j8 H) g4 Q. _4 B
- function sys=mdlOutputs(t,x,u,K) 3 Y" L* c% V' D/ D7 Q3 L6 D# o
- xx=[u(1)-u(2) u(1) u(1)+u(3)-2*u(2)];
) F& r1 e/ ~* o% B J* t& ~# a - sys =[u(4)+K*xx*x/sum(abs(x));x/sum(abs(x))];
3 j! J: b4 d6 U/ v$ f
复制代码 |