if (Ch = 0) and (Ch1 = 1) then
' Если сменился канал, то обнулить переменную счетчик
' и сбросить таймер.
outputi 7,1
F = 1
C = 0
end if
end if
if Ch0 = 1 then
Ch = 0
' Сохранение номера активного канала в виртуальном
' тэге.
end if
if Ch1 = 1 then
Ch = 1
end if
B = 0
' Сбросить признак начала исполнения стратегии
if F = 1 then
C = C + 1
' Выполнение паузы
outputi 0,0
outputi 1,0
else
outputi 0,Ch0
outputi 1,Ch1
end if
if (F = 1) and (C >= Ti) then
F = 0
' Пауза закончена
end if
End Sub
При этом рекомендуется в предварительном сценарии обнулить виртуальные тэги “Count” и “Flag”, а “Begin” установить в единицу.
2. Загрузите файл стратегии upr1_!.gni., найдите отличие ее от предыдущей. Запустите стратегию и проанализируйте ее работу .
В данной стратегии реализуется следующицй алгоритм управления двигателем : определенное время двигатель вращается в одну сторону, затем наступает пауза (двигатель останавливается), по завершении паузы двигатель вращается в противоположную сторону. Причем, продолжительность вращения в обе стороны -одинакова.
В основу задачи (рисунок 54) положен “Блок бейсик-сценария” (SCR1) и два таймера: один считает время вращения (ET1), второй время паузы (ET2). Виртуальный тэг “DO”, принимающий значения 0 и 1, показывает состояние одного дискретного управляющего канала, состояние же второго управляющего канала вычисляется по первому путем применения логической операции “Not”.
Седьмой выход блока SCR1, на момент паузы равный 0, а во время вращения равный единице, логически складывается с обоими управляющими выходами, что позволяет останавливать двигатель на время паузы.
Далее один из каналов умножается на минус единицу, и полученное значение складывается со значением другого выхода для рисования на форме отображения временной циклограммы (рисунок 55).
Функция “Блока бейсик-сценария” (SCR2) состоит в защите двигателя от появления высокого уровня сигнала на обоих управляющих выходах. “Блок ТЭГ” (BBTN1) связан с кнопкой «Сигналы на двигатель» формы отображения, которая, будучи в ненажатом состояние блокирует передачу сигналов на блок дискретного ввода-вывода.
Рисунок 54 - Окно редактора задач
На форму отображения (рисунок -55) выведены два индикатора, отображающие состояние таймеров и инкрементные регуляторы, передающие в стратегию значения продолжительности вращения и паузы (в 0,1 сек). Кроме того, там представлены циклограмма и индикаторы направлния вращения .
Рисунок 55 - Форма отображения
Текст “Блока бейсик-сценария” (SCR1):
Sub SCR1()
dim T1 as Tag
dim T2 as Tag
dim N1 as Tag
dim N2 as Tag
dim F as Tag
dim D as Tag
dim P as Tag
set T1 = GetTag("TASK1","ET1")
' Таймер времени вращения двигателя
set T2 = GetTag("TASK1","ET2")
' Таймер паузы
set N1 = GetTag("DISP1","NCTL1")
' Значение времени вращения
set N2 = GetTag("DISP1","NCTL2")
' Значение времени паузы
set F = GetTag("VIRTASK","FLAG")
set D = GetTag("VIRTASK","DO")
' Номер канала на котором в данный момент высокий
' уровень дискретного сигнала: 0 - первый; 1 - второй
set P = GetTag("VIRTASK","PAUSE")
' Признак паузы
outputi 0,0
outputi 1,0
' Сигнал на счет таймерам
F = 0
if P = 0 then
outputi 1,1
' если не пауза, то сброс таймера паузы
if (T1 >= N1) then
F = 1
outputi 1,1
P = 1
outputi 7,0
' время вращения закончилось: сброс первого таймера,
' установка признака паузы и блокирование управляющих
' сигналов с 7-го выхода
if D = 0 then
D = 1
else
D = 0
end if
' Смена номера активного канала
end if
end if
if (P = 1) and (F = 0) then
outputi 0,1
' если пауза, то сброс таймера движения
if (T2 >= N2) then
outputi 0,1
outputi 7,1
P = 0
' время паузы закончилось: сброс таймера паузы,
' сброс признака паузы и разблокирование с 7-го
' выхода управляющих сигналов
end if
end if
End Sub
Виртуальные тэги “Flag” и “DO” должны быть обнулены в предварительном сценарии, а “Pause” установлен в единицу.
Задание
2. Загрузите файл стратегииupr2_!.gni., найдите отличие ее от предыдущей. Запустите стратегию и проанализируйте ее работу .
3. Измените вышеупомянутые стратегии так, чтобы движение двигателя осуществлялось следующим образом: указанное время движения двигатель вращается в одну сторону, затем останавливается на время паузы, после которой опять вращается в ту же сторону тот же период времени; после остановки следует вращение в противоположную сторону, которое повторяется через очередную паузу.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.