Несколько месяцев назад я реализовал функцию, которая отправляет данные из Matlab на захват Weiss WSG50. Это роботизированный захват, который использует двоичные коды в качестве команд. Я установил соединение с помощью функции tcpip. Я написал свои команды и отправил их с помощью «fwrite» как данные uint8 на захват. Мой объект tcpip является клиентом. Гриппер сервер. Успешный захват отлично выполняет команду. Пока здесь все работает так, как я ожидал.
Беда начинается, когда я пытаюсь получить данные обратно от захвата. Захват реагирует сообщением awnser на каждую отправленную команду (может быть более одного сообщения). Но мой «BytesAvailable» остается пустым.
Я знаю, что это может быть сложно воспроизвести, потому что может потребоваться доступ к захвату. Но в конечном итоге я делаю что-то принципиально неправильное при настройке объекта TCPIP. Я уже пытался использовать «tcpclient», но с этой функцией отправка также не работает.
%% WORKING PART
%Preparing the gripper
gripper = tcpip('172.16.6.72',1000);
gripper.OutputBufferSize = 3000;
gripper.ByteOrder = 'littleEndian';
gripper.Timeout = 1;
fopen(gripper);
%Command
release = [170; 170; 170; 38; 8; 0; 0; 0; 160; 64; 0; 0; 210; 67; 0; 0];
release = hex2dec(release);
fwrite(gripper, uint8(release), 'uint8');
fclose(gripper);
%% NOT WORKING PART
readdata = fread(gripper,gripper.BytesAvailable);
Если «BytesAvailable» пусто, абсолютно понятно, что это не работает. Нет данных нет чтения. Мой вопрос: это проблема с захватом или я делаю что-то совершенно неправильно с конфигурацией объекта tcpip?
Я сомневаюсь, что fread(gripper,...) сможет выполниться после того, как программа выполнит fclose(gripper). Попробуйте переместить fclose после fread.





Вместо этого я бы попытался использовать собственные библиотеки Java. Код Java может быть встроен в код Matlab. Для низкоуровневой сетевой связи обычно лучше подходят функции Java.