Тайм-аут ожидания команды от устройства линейной сцены с использованием 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 ответ
Есть некоторые детали для связи, которые вы должны убедиться в документации устройства.
Во-первых, кажется, вы запрашиваете версию устройства. Убедитесь, что "@00VER" является правильной командой, и требуется ли устройству терминатор для распознавания команды, например "\r"?
Во-вторых, убедитесь, что терминатор необходим, и, если это так, исправьте. Для отладки вы можете настроить порт, не используя терминатор, и прочитать его, чтобы проверить, что вы получите.