0

PI (比例積分) コントローラーとして Matlab を使用しています。ファイル経由で「仮想ロボット」エージェントを制御しようとしてい.txtます。シミュレートされたエージェントは、エラーをファイルに書き込み.txtます。これを Matlab で実行し、エージェントが読み取る 2 つ目のファイルを介して速度を設定.txtします。すべてリアルタイムです。

問題は、エージェントが使用しているときに Matlab がエラー ファイルを読み込もうとすることがあり (少なくともそれが起こっていると思います)、次のエラー メッセージが表示されることです。

??? Error using ==>
rfinputs>LocalTimeRespCheck at 421
Final time must be a positive
number.

Error in ==> PI_REG at 42
[v,t]=lsim(pid_d,E,t);

それを回避し、毎回完全に同期させる方法はありますか? 私が使用しているコードは次のとおりです (E.txtはエラー ファイル、V.txtはスピード ファイルです)。

clc, clear all, close all

Kp=1.3;                         
Ki=0.32;                       
Kd=0;                           
Ts=0.008;                       

pid_c = tf([Kd Kp Ki],[1 0]);   
pid_d = c2d(pid_c,Ts);          

fid=fopen('E.txt');
r=textscan(fid,'%f','\r\r');
fclose(fid);
E=r{1};

while length(E)<2464

s = dir('C:\Robot_1\E.txt');

if s.bytes == 0
pause(0.003)

else
fid=fopen('E.txt');
r=textscan(fid,'%f','\r\r');
fclose(fid);

E=r{1};                         %E is error in mm

t=[0:Ts:(length(E)-1)*Ts];

[v,t]=lsim(pid_d,E,t);

v;

V=v(length(E))                  %V is speed in mm/s

fid=fopen('V.txt','w');
fprintf(fid,'%V6.4f\n',V);      
fclose(fid);

end
end
4

1 に答える 1