SMSD-9.0 Не понимаю логики ответов на команды в COM-порт.
 

SMSD-9.0 Не понимаю логики ответов на команды в COM-порт.

Автор Illivion, 10 июля 2012, 16:57:56

« назад - далее »

Illivion

Здравствуйте. Нужна помощь.

Я управляю работой двигателя, записывая и запуская программы через последовательный порт.
Вот так все работает идеально:
LD1* /* команды программы 1 */ ED*
ST1* // Запустили
ST1* // Остановили

LD1* /* команды программы 2 */ ED*
ST1* // Запустили
ST1* // Остановили

и так далее...

Я решил ввести в приложение тест устройства (чтобы можно было проверить отзывчивость устройства перед основным запуском). Для этого я открываю порт, шлю команду RD1*, получаю ответ RD1*E10** (странный на мой взгляд, хотя и с Success'ом) и закрываю порт. Когда же я после этого пытаюсь загрузить и запустить основную программу, я получаю вот такой результат (часть лога из программы, думаю понятно):

[10.29.12 16:29:40] Открываем порт контроллера двигателя.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: RD1*.
[10.29.12 16:29:40] Ответ на команду: RD.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: LD1*.
[10.29.12 16:29:40] Ответ на команду: LD.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: BG*.
[10.29.12 16:29:40] Ответ на команду: BG*E16*.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: EN*.
[10.29.12 16:29:40] Ответ на команду: EN.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: AL0*.
[10.29.12 16:29:40] Ответ на команду: AL.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: SD70*.
[10.29.12 16:29:40] Ответ на команду: SD.
[10.29.12 16:29:40] Записываем в порт контроллера двигателя команду: DR*.
[10.29.12 16:29:41] Ответ на команду: DR.
[10.29.12 16:29:41] Записываем в порт контроллера двигателя команду: MV*.
[10.29.12 16:29:41] Ответ на команду: MV.
[10.29.12 16:29:41] Записываем в порт контроллера двигателя команду: ED*.
[10.29.12 16:29:41] Ответ на команду: ED.
[10.29.12 16:29:41] Записываем в порт контроллера двигателя команду: ST1*.
[10.29.12 16:29:41] Ответ на команду: ST.

Я получаю какое-то эхо, хотя в ответах должны быть ответы-результаты выполнения. Двигатель, соответственно, тоже стоит. Есть подозрение, что после RD1* нужно выполнить что-то еще, прежде чем закрывать порт, т.к. RD1* переводит контроллер в какой-то другой режим.

Подскажите пожалуйста, в чем дело.

Administrator

Вероятнее всего проблема в том, что Вы не считываете до конца все данные, отправляемые контроллером в порт после команды RD1*
По команде RD1* блок отправляет его эхо, ответ E10* и список всех команд, которые в данный момент хранятся в памяти привода.
Проверьте в Вашем модуле приема/передачи данных, не стоит ли буфер с ограничением количества принимаемых из порта байт.
Или не ставите ли Вы жесткое ограничение на количество байт, считываемых из порта.