Посылка команд блоку управления ШД SMSD-4.2
 

Посылка команд блоку управления ШД SMSD-4.2

Автор Liohich, 11 октября 2016, 10:26:58

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

Liohich

Здравствуйте!
Пожалуйста, помогите разобраться с особенностями передачи команд контроллеру  SMSD-4.2, с которыми я столкнулся. Не могу понять, является это особенностью контроллера или компьютера и передачи данных по COM-порту.

Задача - написание программы для управления одним ШД, которая 1) может программировать блок SMSD-4.2 для управления ШД по определенному алгоритму и запускать алгоритм, 2) управлять ШД в режиме DIrect Control

Программа написана и заработала: блок SMSD-4.2 получает команды, присылает верный ответ, ШД вращается. Т.е. протокол обмена работает, Но:
При программировании контроллера, т.е. при отправке по COM-порту длинной последовательности команд, в ответ приходит несуразица. Например, при отправке последовательности LD1*BG*EN*DL*AL0*SD500*MV200*DS*ED* (200 шагов со скоростью 500) одним словом в ответ приходит следующее:
LD1*E10*BG*E10*EN*DL*AE10*E16*L0*SD500*E10* (ответ одинаковый как для моей программы, так и для COM Port Toolkit 4)
Видно, что команды LD1 и BG контроллером отработаны, а затем - произошло что-то мне непонятное. Соответственно, в памяти блока нужная мне последовательность команд не сохранилась (считываю при помощи RB1*)
При этом если я отправляю ту же последовательность команд не одним словом сразу, а покомандно, с большим интервалом (порядка 5 с) между командами, то блок SMSD-4.2 обрабатывает все команды без ошибок, присылает верное эхо и E10*. Программа записывается в память верно.

Как я понял, ошибка возникает при отправке длинных слов, состоящих из большого количества команд, и не обязательно при программировании контроллера. Например, в режиме DIrect control при отправке команды типа EN*DL*AL0*SD500*MV200*DS* приходит несуразный ответ и ШД не вращается
Значит, должны существовать ограничения на что-то из списка:
- объем буфера обмена между компьютером и контроллером в байтах?
- количество команд, записываемых в буфер команд контроллера?
- минимальное время между двумя командами для контроллера?
- что-то еще...

Помогите, пожалуйста, разобраться с этой особенностью передачи данных блоку SMSD-4.2, чтобы оптимизировать свой алгоритм.
Налицо недостаток знаний матчасти. На форуме подобного вопроса не нашел

Administrator

Добрый день!
После отправки каждой команды необходимо дожидаться ответа от контроллера о том, что команда принята.
Если Вы отправляете сразу строку команд, контроллер не успевает их обработать - новая команда приходит, когда он еще обрабатывает предыдущую.
Лучше создавайте массив или множество с командами и отправляйте их последовательно одну за другой. Передавать их нужно по одной, после получения ответа об успешном принятии команды E10* можно передавать следующую команду.

Liohich