Ошибка чтения файла Matlab.txt

Я использую 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
1 ответ

вы используете текстовые файлы для установления связи между роботом и матлабом?

Ваш вопрос неверно указан, поскольку он не говорит "where" является роботом: это удаленный mcu или какой-либо код, запущенный на вашем собственном/другом ПК?

В первом случае я настоятельно рекомендую использовать последовательный интерфейс.

во втором случае используйте сокет (более надежный/гибкий и много кода для него) или что-то вроде труб (не знаю, как это сделать в Matlab чисто). Использование файлов для общения - это просто плохая практика.

licensed under cc by-sa 3.0 with attribution.