|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 eecsseudl 于 2013-4-29 10:04 编辑
Matlab:vb如何调用m文件
我在网上查了,有好几种方法,有一种是说把m文件换成dll文件再调用,但必须在原有m程序中加上function函数,这个我还真的不知道怎么加。有哪位对vb如何调用m文件的知识比较熟悉的话,指点指点吧!
或者说有没有其他方法?给个步骤什么的吧。谢谢咯……
(我的m源程序)
%Single Neural Adaptive PID Controller
clear all;
close all;
clc;
x=[0,0,0]';
K=0.03;
xiteP=2000;
xiteI=0.045;
xiteD=10;
%Initilizing kp,ki and kd
kp_1 =0.4565;
ki_1 = 0.0185;
kd_1 =0.8214;
sys=tf(0.08,[64000,4800,120,1,0],'inputdelay',2);
dsys=c2d(sys,1,'zoh');
[num,den]=tfdata(dsys,'v');
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;u_6=0;
y_1=0;y_2=0;y_3=0;y_4=0;
error_1=0;error_2=0;
ts=1;
for k=1:1:7000
time(k)=k*ts;
rin(k)=sin(0.1*pi*k*ts);
rin(k)=1;
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3-den(5)*y_4+num(2)*u_3+num(3)*u_4+num(4)*u_5+num(5)*u_6;
error(k)=rin(k)-yout(k);
kp(k)=kp_1+xiteP*error(k)*u_1*(2*error(k)-error_1);
ki(k)=ki_1+xiteI*error(k)*u_1*(2*error(k)-error_1);
kd(k)=kd_1+xiteD*error(k)*u_1*(2*error(k)-error_1);
x(1)=error(k)-error_1; %P
x(2)=error(k); %I
x(3)=error(k)-2*error_1+error_2; %D
wadd(k)=abs(kp(k))+abs(ki(k))+abs(kd(k));
w11(k)=kp(k)/wadd(k);
w22(k)=ki(k)/wadd(k);
w33(k)=kd(k)/wadd(k);
w=[w11(k),w22(k),w33(k)];
u(k)=u_1+K*w*x; %Control law
if u(k)>100
u(k)=100;
end
if u(k)<-100
u(k)=-100;
end
error_2=error_1;
error_1=error(k);
%Update parameters
u_6=u_5;u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_4=y_3;y_3=y_2;y_2=y_1;y_1=yout(k);
kp_1=kp(k);
kd_1=kd(k);
ki_1=ki(k);
end
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
figure(2);
plot(time,error,'r');
xlabel('time(s)');ylabel('error');
figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
figure(4);
subplot(411);
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp');
subplot(412);
plot(time,ki,'r');
xlabel('time(s)');ylabel('ki');
subplot(413);
plot(time,kd,'r');
xlabel('time(s)');ylabel('kd');
|
|