Недавно заказчик поставил мне задачу запрограмировать этот контроллер движения:

Требовалось сделать следующее:

Входы 1 и 2 будут соединены с микроконтроллером

На входе 3 Установлена кнопка старт

На входе 4 Установлена кнопка стоп

Выход 1 соединён с микроконтроллером
________________________________________

1.При включении контроллера кнопкой 3 и наличии высокого уровня на входе 2, начинается вращение ШД в положительном направлении.

Если на входе 2 низкий уровень, то переходим к пункту 4

Если нажимется кнопка 4, то в любой момент выполнения программы, произойдёт выключения ЩД

2.Как только на входе 1 появляется высокий уровень, ШД останавливается, производится расчёт: сколько участков по 2мм. было пройдено от момента начала вращения ШД до остановки

3.Выход один начинает включаться ровно столько раз, сколько участко было пройдено, после этого производится переход к пункту 1


4.Начинается вращение ШД в отрицательном направлении.

5.Как только на входе 1 появляется высокий уровень, ШД останавливается, производится расчёт: сколько участков по 2мм. было пройдено от момента начала вращения ШД до остановки

6.Выход один начинает включаться ровно столько раз, сколько участко было пройдено, после этого производится переход к пункту 4
_________________________________________________________

Во вложенном файле сам текст программы.

Возможно, кому то будет полезным
_________________________________________________________
_________________________________________________________

# Версия прошивки V1.0. Автор Голышев Евгений. Дата создания 5.10.2013.


ON # если включена кнопка 3, включаем драйвер ШД

SET P_STEPS_MM, 160 # один миллиметр хода привода равен 160 шагам ШД при делении 1/8 шага

SET P_FEED_MAX, 4000 # максимальная скорость 4000мм/мин

SET P_ACC_TIME, 5 # время разгона до максимальной скорости 3 миллисекунды

SET P_BUT_START, 3 # назначаем кнопку 3 стартовой

SET P_BUT_STOP, 4 # назначаем кнопку 4 стоповой

SET POSITION, 0 # обнуляем переменную POSITION, выраженную в шагах привода

SET V1, 0 # обнуляем переменную 1

SET V2, 0 # обнуляем переменную 2

SET V3, 0 # обнуляем переменную 3

SET V4, 0 # обнуляем переменную 4


LAB2: SET V2, 0 # Метка 2. При приходе к этой метке пременная V2 обнуляется, эта переменная отвечает за счёт шагов

SET POSITION, 0 # обнуляем переменную POSITION

IF ([!INP2]) JMP LAB3: # если на входе 2 появился низкий уровень, переходим к метке 3

MOVE C(INP1) # начинаем вращать ШД в положительном направлении до тех пор, пока на входе 1 появился высокий уровень

SET V1, (POSITION/320) # делим количество пройденных ШД шагов на 320, получаем количество пройденных миллиметров, разделённых на 2. Записываем в переменную V1

LAB1: SET OUT1, 1 # Метка 1. Включаем выход 1

WAIT T(1) # ждём 1 миллисекунду

SET OUT1, 0 # выключаем выход 1

SET V2, (V2+1) # это счётчик количесва импульсов. Прибавляем к переменной V2 однёрку, в результате получаем новую переменную V2

IF (V2 = V1) JMP LAB2: # если переменная V2 будет равна V1, то переходим к метке 2, если неравны, то переходим к метке 1

JMP LAB1: # переход к метке 1


LAB3: SET V4, 0 # Метка 4. При приходе к этой метке пременная V4 обнуляется, эта переменная отвечает за счёт шагов

SET POSITION, 0 # обнуляем переменную POSITION

MOVE C(INP1) D(0) # начинаем вращать ШД в отрицательном направлении до тех пор, пока на входе 1 появился высокий уровень

IF (POSITION<0) SET POSITION, -POSITION # если текущая позиция ШД является отрицательной, то превравращаем её в положительную

SET V3, POSITION/320 # делим количество пройденных ШД шагов на 320, получаем количество пройденных миллиметров, разделённых на 2. Записываем в переменную V3

LAB4: SET OUT1, 1 # Метка 4. Включаем выход 1

WAIT T(1) # ждём 1 миллисекунду

SET OUT1, 0 # выключаем выход 1

SET V4, (V4 + 1) # это счётчик количесва импульсов. Прибавляем к переменной V4 однёрку, в результате получаем новую переменную V4

IF (V4 = V3) JMP LAB3: # если переменная V4 будет равна V3, то переходим к метке 3, если неравны, то переходим к метке 4

JMP LAB4: # переход к метке 4


OFF