Программрование SMSD-4.2 в режиме контроллера
 

Программрование SMSD-4.2 в режиме контроллера

Автор Alex_san, 17 ноября 2011, 19:17:38

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

Alex_san

SMSD-4.2 работает в режиме контроллера.
Пишу свою программу управления шаговыми двигателями.
Есть 2 кнопки: ПУСК и СТОП.

После нажатия на ПУСК для запуска двигателя посылаю в COM порт последовательно следующие команды:

LD1*
BG*
EN*
DL*
AL500*
SS100*
SD1500*
MV*
ED*
ST1*

После чего двигатель плавно запускается с ускорением 500 до 1500 шагов/с при непрерывном вращении.

Далее необходимо после нажатия на кнопку СТОП плавно остановить двигатель. Как это можно сделать при работающем двигателе??? Сейчас посылаю команду ST1*? но при этом он резко останавливается, что нежелательно.

И еще вопрос, можно ли используя данный контроллер, посылать не по одной команде в порт, а набор команд???

Administrator

Чтобы осуществить плавную остановку, можно использовать внешний вход (ВХ1 или ВХ2) и команду непрерывного движения до прихода сигнала на вход (MH или ML). После команды ML (или MH) добавить отрицательное ускорение, количество шагов, достаточное для плавной остановки и конечную скорость.

Контроллер должен обработать каждую из полученных команд, протокол обмена предполагает получение ответа от контроллера после получения каждой команды. Удобнее всего написать функцию, осуществляющую передачу всех нужных команд в порт из буфера, а сама функция пусть занимается необходимой выборкой по одной команде из буфера и следит за очередностью направления обмена данными (чтобы в порт не отправлялись команды в тот момент, когда контроллер отправляет ответ на предыдущую команду).

Alex_san

Спасибо за ответ.
Накопились еще вопросы:

1.   Какова роль команд EN и DS? Пробовал с ними как в примере выше, так и без них - разницы не нашел. В частности в  паспорте SMSD.42.001ПС таблица 6 пункт 18 сказано, что команда DS «..снимает питание с обмоток двигателя». Я ее вставил между командами MV* и ED*, однако после выполнения программы двигатель находится в режиме удержания (на обмотки подается постоянное напряжение).
2.   Есть ли нерегламентированные команды позволяющие сбрасывать SMSD4.2? (имитирующие нажатие на кнопку «СБРОС»). Можно ли определить, что блок находится в дежурном режиме и готов к принятию команд?
3.   Как можно программно определить, что двигатель работает/не работает. Сейчас для распознавания того, что двигатель уже остановился, использую чтение с COM порта до прихода команды «E14*», однако эта команда приходит только 1 раз и после последующих чтений данных с COM порта определить что программа выполнена невозможно.

wwman

В контроллере имеется вход "0" и вход управления "Поиск 0". Как происходит управление по этим входам? Имеются ли программные команды, которые работают с этими входами?

wwman

В контроллере имеется вход "0" и вход управления "Поиск 0". Как происходит управление по этим входам? Как выбирается скорость и направление движения? Имеются ли программные команды, которые работают с этими входами?

Administrator

1. EN и DS - снять или подать питание на обмотки.
Команда MV* - бесконечное движение, блок никогда не доберется ни до одной из команд, записанных после MV*.
2. Недокументированных команд нет. Определить, что блок находится в дежурном режиме, можно по цветовому индикатору и по последнему ответу контроллера.
3. По последнему ответу из порта E14*.  Одно завершение программы соответствует одному ответу из порта E14*. Если после этого никаких команд в порт не отправлялось и других данных из порта не приходило, значит, блок все еще находится в дежурном режиме.

Сигнал "Поиск 0" инициирует начало непрерывного движения до прихода сигнала на вход "0".
Аналогичная команда в программе - HM*

wwman

В каком направлении и с какой скоростью будет происходить движение по сигналу "Поиск 0" ?

Administrator

Скорость 1000 шагов/сек, направление зависит от подключения обмоток.

Alex_san

Можно ли послать команду снятия напряжения обмоток (DS) после команды ST1, которая в свою очередь останавливает двигатель после непрерывного движения?

Administrator

Нет, команда DS должна быть прописана в наборе команд, отправляемых в блок до команды ST1

Alex_san

Спасибо Вам за ответы.

Столкнулся вот с такой проблемой: двигатель стоит в системе перемещение которой ограничивают аварийные конечники, которые предварительно подключил к выводу EN блока SMSD 4.2.
Ситуация такая  - тележка приводимая в движение шаговым двигателем доезжает до аварийного конечника (аварийная ситуация, которая может быть вызвана тем что во время непрерывного движения управляющий компьютер отключился и тд). Аварийный конечник замыкает вывод EN на землю и блок останавливает двигатель. До этого момента все хорошо. Далее я сбрасываю блок, нажатием на "СБРОС", блок переходит в дежурный режим и готов к принятию команд, но так ака контакт EN замкнут, то блок не реагирует на команды, пока я не разомкну эту цепь, а ее разомкнуть можно только если тележка съедет с аварийного конечника.

Много написал, но надеюсь Вам понятна суть моей проблемы...

Nata

Цитата: Administrator от 02 декабря 2011, 11:17:29
3. По последнему ответу из порта E14*.  Одно завершение программы соответствует одному ответу из порта E14*. Если после этого никаких команд в порт не отправлялось и других данных из порта не приходило, значит, блок все еще находится в дежурном режиме.

в smc программе после завершения программы идет E14*, потом еще какой-то нечитаемый символ - это что такое?
если, например, выполнить команду RD1* или LD1*, то в конце только ED*, нечитаемых символов нет

andrewvorobey

Цитата: Nata от 06 июня 2013, 18:41:54
Цитата: Administrator от 02 декабря 2011, 11:17:29
3. По последнему ответу из порта E14*.  Одно завершение программы соответствует одному ответу из порта E14*. Если после этого никаких команд в порт не отправлялось и других данных из порта не приходило, значит, блок все еще находится в дежурном режиме.

в smc программе после завершения программы идет E14*, потом еще какой-то нечитаемый символ - это что такое?
если, например, выполнить команду RD1* или LD1*, то в конце только ED*, нечитаемых символов нет


Символ-точка. Посылается при остановке двигателя командой ST1*

Administrator

Мы перепроверим, но этот недочет должен был быть исправлен уже довольно давно. Когда Вы покапали SMSD-4.2?

Nata

Здравствуйте!
извините, у нас SMSD-1.5k (покупали в прошлом году), просто не хотела заводить новую тему, но не подумала, что модели разные

Возникает после успешного завершения исполняемой программы. Вот что возвращает- "ST1*E10*E14*нечитаемый символ"