Мой опыт програмирования PLC1Xi
Недавно заказчик поставил мне задачу запрограмировать этот контроллер движения:
Требовалось сделать следующее:
Входы 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