我使用Matlab作为PI(比例积分)控制器。我正试图通过.txt
文件控制“虚拟机器人”代理。模拟代理在.txt
文件中写入错误。我通过Matlab运行它并通过代理读取的第二个.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
答案 0 :(得分:0)
您是否正在使用文本文件在机器人和matlab之间建立通信?
你的问题没有正确陈述,因为它没有说“哪里”是机器人:它是一个远程的mcu,还是一些在你自己/另一台电脑上运行的代码?
在第一种情况下,我强烈建议使用串行接口。
在第二种情况下,使用套接字(更强大/更灵活,更多代码)或类似管道(不知道如何在matlab中干净地完成)。 使用文件进行沟通只是一种不好的做法。