Matlab txt文件读取错误

Matlab txt文件读取错误,matlab,controller,pid,synchronize,Matlab,Controller,Pid,Synchronize,我使用Matlab作为PI(比例积分)控制器。我正试图通过.txt文件控制一个“虚拟机器人”代理。模拟代理在.txt文件中写入错误。我通过Matlab运行它,并通过第二个.txt文件设置速度,代理实时读取该文件 问题是,有时Matlab试图在代理使用错误文件时读取错误文件(至少我认为是这样),我收到以下错误消息: ??? Error using ==> rfinputs>LocalTimeRespCheck at 421 Final time must be a positive n

我使用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,全部清除,全部关闭
Kp=1.3;
Ki=0.32;
Kd=0;
Ts=0.008;
pid_c=tf([Kd-Kp-Ki],[10]);
pid_d=c2d(pid_c,Ts);
fid=fopen('E.txt');
r=文本扫描(fid,'%f','\r\r');
fclose(fid);
E=r{1};

当长度(E)时,您正在使用文本文件在robot和matlab之间建立通信

你的问题没有正确表述,因为它没有说“机器人在哪里”:它是一个远程mcu,还是在你自己/另一台电脑上运行的一些代码

在第一种情况下,我强烈建议使用串行接口

在第二种情况下,使用套接字(更健壮/灵活,有大量代码)或类似管道的东西(不知道如何在matlab中干净地完成)。
使用文件进行通信是一种糟糕的做法。

我应该提到的是,fanucs RoboGuide的虚拟机器人如果可能的话,尝试使用套接字
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