Регистрация
 
Добро пожаловать на форум об электродвигателях!

Программрование SMSD-4.2 в режиме контроллера
Прочитано 17527 раз
* 17 Ноября 2011, 19:17:38
SMSD-4.2 работает в режиме контроллера.
Пишу свою программу управления шаговыми двигателями.
Есть 2 кнопки: ПУСК и СТОП.

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

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

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

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

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

Записан


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

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

Записан


* 24 Ноября 2011, 11:34:55
#2
Спасибо за ответ.
Накопились еще вопросы:

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

Записан


* 27 Ноября 2011, 21:50:54
#3
В контроллере имеется вход "0" и вход управления "Поиск 0". Как происходит управление по этим входам? Имеются ли программные команды, которые работают с этими входами?

Записан


* 29 Ноября 2011, 15:26:13
#4
В контроллере имеется вход "0" и вход управления "Поиск 0". Как происходит управление по этим входам? Как выбирается скорость и направление движения? Имеются ли программные команды, которые работают с этими входами?

Записан


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

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

Записан


* 02 Декабря 2011, 16:39:21
#6
В каком направлении и с какой скоростью будет происходить движение по сигналу "Поиск 0" ?

Записан


* 02 Декабря 2011, 18:20:09
#7
Скорость 1000 шагов/сек, направление зависит от подключения обмоток.

Записан


* 02 Декабря 2011, 18:23:49
#8
Можно ли послать команду снятия напряжения обмоток (DS) после команды ST1, которая в свою очередь останавливает двигатель после непрерывного движения?

Записан


* 02 Декабря 2011, 18:26:31
#9
Нет, команда DS должна быть прописана в наборе команд, отправляемых в блок до команды ST1

Записан


* 08 Декабря 2011, 16:26:56
#10
Спасибо Вам за ответы.

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

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

Записан


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

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

Записан


* 20 Июня 2013, 14:45:11
#12
3. По последнему ответу из порта E14*.  Одно завершение программы соответствует одному ответу из порта E14*. Если после этого никаких команд в порт не отправлялось и других данных из порта не приходило, значит, блок все еще находится в дежурном режиме.

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


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

Записан


* 20 Июня 2013, 16:15:54
#13
Мы перепроверим, но этот недочет должен был быть исправлен уже довольно давно. Когда Вы покапали SMSD-4.2?

Записан


* 21 Июня 2013, 09:26:17
#14
Здравствуйте!
извините, у нас SMSD-1.5k (покупали в прошлом году), просто не хотела заводить новую тему, но не подумала, что модели разные

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

Записан