Тайм-аут ожидания команды от устройства линейной сцены с использованием 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: ошибка тайм-аута

1 ответ

Решение

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

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

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

Другие вопросы по тегам