тайм-аут ожидания команды от устройства линейной сцены с использованием Matlab

Я пытаюсь установить полнодуплексную последовательную связь между портом RS485 контроллера шагового двигателя и COM-портом моего ноутбука. Используемый мной кабель подключается к порту RS485 на контроллере и к порту USB на моем ноутбуке. Я использую сценарий Matlab для отправки и получения команд контроллеру для перемещения блока сцены по линейной шкале. Хотя я могу открыть последовательное соединение с устройством и отправить команды для продвижения блока сцены по линейной шкале, я не могу получить какое-либо ответное сообщение от контроллера. У меня есть следующий код в Matlab:

stage = serial('COM4', 'baudrate', 9600, 'terminator', 'CR');
fopen(stage)

%part below does not work and timeout happens
fprintf(stage,'@00VER')
pause(10)
out = fscanf(stage)

%part below works and I am able to move the block for 5 secs.
fprintf(stage, '@00HSPD=5000');
fprintf(stage, '@00J+');
pause(5);
fprintf(stage, '@00STOP');
pause(5);
fclose(stage)
delete(stage)
clear stage

Тайм-аут происходит, пока скрипт ожидает сообщения, как показано ниже:

Warning: Unsuccessful read: A timeout occurred before the Terminator was
reached.. 

out =

  0×0 empty char array

Было бы полезно, если бы кто-нибудь мог указать, как получить любое сообщение от контроллера, либо простое OK, либо версию, как я пытаюсь сделать в приведенном выше коде.

Я должен отметить, что я ссылался на следующие вопросы, но либо они не помогли, либо я не смог связать свою проблему с данным решением -

  1. Тайм-аут последовательной связи при длительном тайм-ауте кабеля
  2. USB-связь между Arduino и Unity: ошибка тайм-аута

person tauseef_CuriousGuy    schedule 07.02.2018    source источник


Ответы (1)


Есть некоторые детали для связи, которые вам нужно убедиться в документации устройства.

Во-первых, кажется, вы запрашиваете версию устройства. Убедитесь, что «@00VER» — это правильная команда, и нужен ли устройству терминатор для распознавания команды, например «\r»?

Во-вторых, убедитесь, что терминатор нужен, и если да, то правильно. Для отладки вы можете настроить порт, не используя «Терминатор», и прочитать порт, чтобы проверить, что вы получаете.

person Xiangrui Li    schedule 08.02.2018