Среда программирования Alpha-Programming
1. Блок FLICKER – генератор. Он предназначен для получения последовательности прямоугольных импульсов с задаваемыми параметрами. Блок имеет один дискретный вход (рис. 3.1), подачей сигнала ON на который запускается режим генерации.
Рис. 3.1
Генерированная импульсная последовательность выделяется на дискретном выходе блока. Временные параметры импульсов (длительности импульсов и пауз между ними) задаются в окне описания блока в диапазоне (0 ÷ 32767) × 100ms. Если в этом окне выбрать кнопку Details, на экране отображаются варианты дополнительного задания режимов генерации блока.
Флажок Continuous(непрерывный, длительный)устанавливают тогда, когда хотят, чтобы генерация происходила постоянно, пока во включенном состоянии будет находиться сигнал I 01. Если в непрерывной работе генератора нет необходимости, то продолжительность его “колебаний” можно ограничить. Для этого предусмотрены две возможности: задать либо число «отрабатываемых» периодов в диапазоне от 0 до 32767 (Cycles Count), либо время генерации (Time Count), равное любому устанавливаемому числу в диапазоне от 0 до 32767 × 100ms. Правила задания режимов генерации для обоих только – что названных случаев поясняются следующими двумя вкладками.
В первом случае импульсы длительностью 1сек и паузой между ними тоже 1сек будут формироваться в течение 20 периодов, после чего генератор прекратит работу. Во втором – несимметричные по длительности импульсы (4сек) и паузы (2сек) будут получаться в течение 14 секунд, после чего генерация выключится.
Блок FLICKER кроме дискретного имеет ещё и аналоговый выход, наличие которого делает доступными для наблюдения и отображения на экране следующие параметры:
· On Flicker и Off Flicker –установленные значения длительностей импульсов и пауз между ними;
· Cur On Flicker и Cur Off Flicker – текущие значения, отражающие динамику их отработки;
· количество циклов или время генерации(Cycle or Time) и их текущие значения (Cur Cycle or Time).
Любая из этих характеристик может быть отображена на экране контроллера.
2. Блок COUNTER - накапливающий (нереверсивный) счётчик. Он подсчитывает количество импульсов, поступающих на дискретный вход, до значения, которое указывается в поле Number OF COUNTS окна описания блока.
После окончания счёта состояние дискретного выхода переключается в ON, счёт прекращается. Это состояние сохраняется до тех пор, пока на вход CL(Close)не будет подан импульс сброса.
Аналоговый выход блока может быть использован для отображения на экране установленного значения коэффициента счёта (COUNT) и его текущего значения (Cur COUNT).
3. Блок DISPLAY используется для отображения характеристик и хода процесса в контроллере. Чтобы познакомиться с правилами применения блока, составим “программу”, изображённую на рис.3.2.
Рис.3.2
Начальными установками в блоках заданы: непрерывная генерация FLICKER c параметрами: tи =5×100ms, tп =5×100ms; коэффициент счёта блока COUNTER равен 45. Сигнал по входу I 01 управляет подачей разрешения (по линиям 1, 2 и 3) на отображение выводимых параметров. Счётчик после 45 импульсов, поступивших с генератора, переустановит свой выход в ON и включит нагрузку Q 02. Только подача сигнала сброса на вход CL (CLOSE) от дискретного входа I 04 возвращает счётчик B 05 в исходное состояние.
Особенностью отображения информации на экранах дисплеев в α – Programming является то, что в программу надо вызвать столько блоков DISPLAY, сколько параметров требуется отобразить.
В рассматриваемом примере будем отображать три параметра:
§ пояснительный текст;
§ установленное значение коэффициента счёта;
§ текущее состояние счёта.
В программе блок B 01 использован для отображения пояснительного текста. Содержание текста вводится в окне User Option при установленном флажке String(строка)и только латинским шрифтом. Текст выберем так, чтобы он содержал название отображаемого блока и указание на текущее значение параметра (IST=) и его разрешённое значение (SOLL=).
Набранный текст с помощью курсора (он ставится в строке String перед сдвигаемым фрагментом текста) и клавиши ПРОБЕЛ сдвигается на требуемые позиции информационного поля экрана. Начальная позиция расположения текста задаётся номерами столбца (X=3) и строки (Y=1) в поле Starting position of Text.Поскольку отображаемый текст вводится в окно описания блока при его вызове в программу, а не передаётся откуда-то извне, аналоговый вход B 01 не используется.
Заслуживает внимания назначение начальных номеров расположения отображаемой информации для блоков B 02 и B03. Блок B 02 запрограммирован на отображение текущего значения счёта Cur Count в третьей строке информационного табло. Средой программирования числовое значение Cur Count предусмотрено отображать пятью десятичными знаками (красный цвет, строка 3).
В четвёртой строке отображается установленное значение коэффициента счёта, т.е. Count, и отведено для этого поле из шести позиций (показано синим цветом). И вот здесь естественно возникает вопрос о том, какое значение X целесообразно и допустимо указать в поле Starting position of Text.
Номера стартовых позиций. Надо учитывать, что длина строки содержит десять позиций и превышать этот размер нельзя. В рассматриваемом примере X=5, фрагмент текста “ IST= ” занимает 4 левых позиции; пять отображаемых знаков расположатся на 5, 6, 7, 8 и 9 позициях и ещё одна , десятая, остаётся в запасе. Если установить X=6, отображаемое число сместится на одну клетку вправо, но всё равно формат не будет нарушен. Но вот если взять X=7, правый знак числа должен будет расположиться на 11 позиции, что недопустимо, поэтому среда программирования не позволит это сделать. Практически все комментарии программы по поводу введённых значений X вызваны именно нарушением правил расположения отображаемого числа.
Обратим внимание на строку 4. Последний символ текста (знак равенства после SOLL) оказался закрытым полем расположения первого символа уставки. Помешает ли это работе блока?
§ Прежде всего, если значение уставки – целое и не очень большое число (не требует много знаков для отображения), программа после нескольких отказов ввести неудобное для неё значение X может перейти на пятизначный формат отображения, как и в строке 3.
§
Если отображается, допустим, число 87 (требуется 2 позиции), его в пятизначном формате можно представить как 00087. Поскольку эти три нуля никто не собирается отображать, получаются три свободные позиции, допускающие дополнительные возможности в расположении первого знака отображаемого числа.
В приведённом примере при X = 3 наблюдается явное наложение полей отображения текста и числа. Тем не менее, индикация счёта на экране (справа) выглядит вполне приемлемо. Выбор X = 4 приведёт к смещению числовых значений вправо на одну позицию, при X = 5 –на две позиции. Вид экрана на следующей иллюстрации при X = 6
свидетельствует о том, что дальнейшее увеличение X недопустимо.
Влияние управляющих входов.Это дискретные входы блоков DISPLAY. Работа блоков индикации и содержание отображаемой информации зависят от того, поданы или нет сигналы на эти входы, выполнены или нет линии подключения 1, 2, 3 (рис.3.2) этих входов к источникам сигналов.
· Если сигналы разрешения поданы, т.е. входы всех блоков DISPLAY подключены к I 01, а I 01 находится в состоянии ON, то отображение всех трёх характеристик процесса нормальное.
· Если сигналы разрешения поданы (линии 1, 2, 3), но I 01 находится в состоянии OFF, то экран отображает только дату и время.
· Если ввод всех данных закончен (все установки сделаны), но после этого связь дискретных входов всех блоков DISPLAY с I 01 разорвана, то отображение всех характеристик процесса нормальное.
· Если I 01 подключен только к B 01 (линий 2 и 3 нет), то при I 01 в состоянии ON отображение процесса нормальное, а если I 01 находится в состоянии OFF, то отображения текста не будет, отображаться будут только уставка и текущее значение.
· Если к I 01 подключены B 02 и B 03, а B 01 - нет, то при I 01, установленном в состояние ON, отображение процесса на экране будет нормальное, а при I 01 в состоянии OFF текст будет на экране, но цифры отображаться не будут.
В качестве выводов по блоку DISPLAY:
§ использование блоков DISPLAY без подключения дискретного входа обеспечивает устойчивую индикацию, но очень ограниченного числа параметров;
§ только подачей разрешающих сигналов можно значительно расширить число отображаемых параметров и вызывать их индикацию в произвольной последовательности.
,
4. Блок Up / Down COUNTER - реверсивный счётчик. Блок имеет четыре дискретных входа. Импульсы, поступающие на верхний вход (Command Up), увеличивают содержимое счётчика. Если импульсы поступают на второй сверху вход (Сommand Dw), то они уменьшают содержимое счётчика. В этом просматривается отличие Up / Down COUNTER от реверсивных счётчиков, рассмотренных в разделе 2.1, которые имели единственный вход для подачи последовательности подсчитываемых импульсов и дополнительный вход, управляющий направлением счёта.
Подсчитываемые импульсы могут приходить на тот или другой входы в произвольном порядке. Но для этого их необходимо разносить во времени, т.к. при одновременном поступлении одинакового уровня сигналов на оба входа счётчик на них не реагирует.
Средний вход (CL) предназначен для сброса содержимого счётчика в ноль (Reset to 0). В отличие от него самый нижний дискретный вход (Reset to Preset)при поступлении на него сигнала сбрасывает содержимое счётчика на предустановленное значение.
§ Предварительная установка коэффициента счёта может быть осуществлена через окно описания блока путём ввода в окне Number Of Countsлюбогочисла от –32768 до 32767.
§ Если аналоговый вход к чему-либо подключен, то роль значения уставки будет выполнять Sig.Analog.Val, т.е. значение аналогового сигнала, действующего на входе. Строго говоря, это не совсем предустановка, она может плавно регулироваться извне программы и контроллера. Это позволяет внешними сигналами управлять параметрами переключения выходного сигнала блока, сравнивать содержимое блока с любым текущим мгновенным значением.
Работа выходов блока. Дискретный выход переключается из OFF (пока насчитано меньше, чем введена уставка) в ON при достижении счёта уставки. Переключение выходной цепи не означает прекращения счёта – он будет продолжаться независимо ни от чего. Если Sig.Analog.Val. введён равным 26, то при достижении числа импульсов, пришедших с входа Command Up, выход блока перейдёт в ON, но счёт может продолжиться дальше (допустим, до 40). Если теперь импульсы пойдут по входу Command Dw, счёт реверсируется, а выход блока возвратится в состояние OFF при значении счёта, равном 25.
На аналоговом выходе можно контролировать два вида сигналов: установленное UD Count и текущее Cur UD Count значения. Убедиться в этом можно, если подвергнуть проверке работу блока Up / Down COUNTER (рис. 3.3) в режиме моделирования (симуляции) .
Рис.3.3
5. Блок COMPARE - компаратор, используемый для сравнения сигналов с задаваемыми значениями или друг с другом.
Верхний вход – дискретный. Он может быть разрешающим, если он подключен к источнику сигнала (I 01) и сигнал имеет уровень ON. При отключенном сигнале (уровне OFF) блок перестаёт выполнять сравнение. Если исключить линию подключения входа к источнику I 01, блок будет выполнять все виды сравнения, предусмотренные средой программирования.
Блок компаратора имеет два аналоговых входа. Если эти блоки подключены к источникам аналогового сигнала, то верхний вход задаёт текущее значение параметра, т.е. того, что сравнивается, а нижний – определяет уровень, с которым этот сигналсравнивается.
В том случае, если самый нижний аналоговый вход не подключен, порог сравнения задаётся из окна описания блока в режиме предустановки.
Рис.3.4
На рис.3.4 показано, как компаратор формирует выходной сигнал, если функцией сравнения задано «равенство» (верхний случай), или «не меньше» (нижний вариант).
На данный момент обозначился ещё один набор блоков, применимость которых есть смысл проиллюстрировать на примере, заимствованном в одной из программ, разработанной выпускником кафедры Д. А. Тереховым.
Пример 1 на применение реверсивного счётчика.На экране контроллера, установленного и работающего на объекте, как правило, отображается вся необходимая информация. Часто возникает необходимость внести в неё какие-либо коррективы, поэтому надо обеспечить максимум удобства для этого: пояснительные надписи, перемещаемые указатели, доступ к программе не с компьютера, а с клавиатуры контроллера – т.е. всё то, что облегчает навигацию по информационному полю экрана.
В этом примере мы ограничимся частной задачей: обеспечим круговое перемещение указателя в пределах трёх строк экрана: второй, третьей и четвёртой.
Рис. 3.5
Каждой строке экрана на рис. 3.5 соответствует свой блок DISPLAY: второй строке – B 08, третьей строке – B 09, а четвёртой – B 10. В каждом из блоков текстом введён один и тот же символ: >, но координаты расположения его для каждого блока будут несколько отличаться: X = 5, Y = 2 для B 08; X = 5, Y = 3 для B 09; X = 5, Y = 4 для B 10. Остаётся теперь добиться, чтобы при каждом нажатии кнопки K05 активное (ON) состояние выходных линий F01 переключалось с B 08 на B 09, с B 09 на B10, с B 10 на B 08 и так далее по циклу. Переключающиеся линии будут «подсвечивать» стрелочный указатель на второй, третьей, четвёртой строках, создавая видимость его циклического перемещения. Если нажимать не K05, а K06, направление перемещения указателя должно измениться на обратное. Отмеченное переключение линий с одного блока DISPLAY на другой должна обеспечить некая структура, которая на рис. 3.5 обозначена как функция пользователя User Func. Как должна быть организована эта функция, чтобы соответствовать своему назначению? К выяснению того, что может собой представлять эта функция пользователя, сейчас как раз самое время перейти.
Прежде всего, функция пользователя должна иметь два входа и три выхода, и все они дискретные. Это потребуется для описания
формата окна вызываемой функции пользователя - User Func.
Выполним действия по « вводу» User Func на поле размещения программы. В раскрывшемся меню укажем типы и количества требуемых входов и выходов создаваемой функции пользователя и получим окно ( его контур образует рамку на рис.3.6) для размещения в нём её программного содержания.
Управление поочерёдной индикацией трёх строк потребует трёх разрешающих сигналов, переключающихся «по кругу»: B08 –B 09 – B10 – B 08 - … . Для обеспечения этого можно использовать счётчик со счётом на 3 и сбросом в исходное состояние. При использовании нереверсивного счётчика (COUNTER) проще всего получить указатель, “бегающий” в одну сторону. У него сброс в 0, поэтому достаточно обеспечить порядок переключения: 0 – 1 – 2 - (если 3, то сброс в 0) – 1 - … .
Перемещение указателя в обоих направлениях лучше выполнить на реверсивном Up / Down COUNTER счётчике и компараторах. Так как один из его входов сброса – это сброс в 0, а другой – в предустановленное значение, которое может быть любым, примем, что накопленное содержимое счётчика может принимать одно из трёх значений: 0 , 1 или 2.
Управление переключением выходных сигналов. На выходе функции пользователя компаратор B 04 выполняет операцию сравнения по принципу: Cur UD Count = 0. Поэтому, когда на аналоговом выходе B 01 счётчика будет 0, компаратор B 04 выдаст сигнал ON на своём выходе. Этот сигнал разрешит индикацию указателя на второй строке экрана. Аналогично этому будет разрешено отображение указателя и на третьей, и на четвёртой строках, так как в компаратор B 05введено:Cur UD Count = 1,а в компаратор B 07-соответственно: Cur UD Count=2.Всё это будет устойчиво работать, если обеспечить изменение содержимого счётчика и по циклу: 0 - 1 - 2 - 0 - 1 – 2 - 0… и (для обратного направления) по циклу: 2 – 1 – 0 – 2 – 1 – 0 – 2 - … .
Рис.3.6
Управление работой счётчика осуществляется для того, чтобы счётчик позволял циклически считать в последовательности 2 – 1 – 0 – 2 – 1 - …, или в обратном порядке. На рисунке 3.6 это обеспечивают компараторы B 02 и B 03 совместно с входами сброса счётчика B 01. Значение, в которое переустанавливается счётчик сигналом на входе Reset to Preset, введено равным 2. Когда управление идёт по вычитающему входу (K06 и Ip02), содержимое B 01, уменьшаясь, принимает значения 2, потом 1, потом 0, и, когда оно дойдёт до ( - 1), сработает B 03 и переустановит счётчик на 2 и так далее по циклу.
При встречном управлении (K05 и Ip01), когда накопленное значение счётчика, изменяясь от 0, достигнет значения 3, компаратор B 02 сработает и по входу CL сбросит счётчик в нуль.
Иллюстрацию некоторых применений реверсивных счётчиков и компараторов на этом можно завершить. Если ввести в α – Programming пример, приведённый на рис. 3.5, с составом функции пользователя в соответствии с рис. 3.6 и проверить полученное в режиме моделирования, можно убедиться в устойчивом перемещении указателя.
Пример 2. Последовательно наращивая функциональную полноту программы, рассмотренной в предыдущем примере, наделим её способностью изменять текущее содержимое счётчиков, задающих значения опорных сигналов. Эти сигналы предназначены для использования их в качестве уставок на срабатывание, с которыми будут сравниваться текущие значения контролируемых параметров управляемого объекта,
Допустим, что в счётчиках B 13, B 14 и B 15 (рис.3.7) хранятся числа 100, 200 и 300 соответственно. Будем считать, что сценарий управления объектом, реализованный программой, составлен следующим образом. Если некоторый параметр (уровень, давление, расход или что–то другое) принимает значение меньше 100, то надо включить какой – то агрегат (пусть это будет насос). Если за заданное время после включения насоса регулируемый параметр не достиг значения 200 (насос не справляется или неисправен), надо включить ещё один насос. А когда параметр достигнет значения 300, надо всё выключить.
Заметим, что управляемый параметр всё время сравнивается с «уставками», т.е. с установленными значениями некоторых опорных уровней и по результатам сравнения (больше или меньше 100; больше или меньше 200 и т.д.) принимаются решения о том, что делать.
Вероятнее всего, выбранные значения уставок (100, 200, 300) Вас могут не устроить, и появится необходимость их изменить. Причин для этого много: желание перенастроить работу объекта, параметры объекта поменялись и т. д. Чтобы сделать процедуру коррекции уставок удобной и комфортной во всех условиях её проведения, попробуем создать программу для этого и назовем её: «Управляемый корректор установленных значений».
По аналогии с рис.3.5 будем ориентироваться на три выходных канала, управляемый указатель построим на базе нереверсивного счётчика COUNTER.
Рис.3.7
В программе на рис. 3.7 выбор строки, в которой расположен корректируемый параметр, осуществляется кнопкой K 05. Функция пользователя F 01 (рис.3.8) выполняет задачу, сходную с той, которую выполняет функция, изображённая на рис. 3.6. Однонаправленное перемещение указателя связано с содержимым счётчика в последовательности: 0 – 1 – 2 – (если 3, то сброс в 0) – 1 - ... В остальном обе функции совпадают и по выполняемым задачам и по введённым в блоки установкам. Блоки B 08, B 09, B 10 и B 12 обеспечивают индикацию указателя строки.
Рис.3.8
Блоками, формирующими уставки, использованы реверсивные счётчики B 13 ÷ B 15, по одному на каждую из трёх строк. В них заносятся начальные значения уставок (те самые значения 100, 200 и 300, которые упоминались раньше), и в которые блоки переводятся активным сигналом с кнопки B 25 – сигналом сброса в предустановленное значение.
Рис.3.9
Две совершенно одинаковые функции пользователя F 02 и F 03 выполнены в соответствии с рис.3.9. Выходы первой поданы на входы суммирования каждого из счётчиков, а выходы F 03 – на входы вычитания. Их назначение состоит в том, чтобы подать импульсы (от K 03) на увеличение или ( от K 04) - на уменьшение содержимого соответствующего счётчика.
Построены они просто: импульсы изменения содержимого счётчиков подаются одновременно на входы всех трёх конъюнкторов (рис.3.9). На какой выход пройдут эти импульсы – зависит от того, на каком конъюнкторе будет активным верхний вход. Три верхних входа на рис. 3.9 поочерёдно переключаются сигналами выбора строки. Если, как это изображено на рис. 3.9, выбран верхний вход, сигналы добавления или уменьшения могут быть переданы только на верхний счётчик B 13.
Если блоки DISPLAY с номерами B 22 ÷ B 24 настроить на отображение уставки, т. е. Count, каждый из них будет индицировать неизменное, введённое в него, значение уставки. Чтобы сделать возможным отображать скорректированное значение, блоки надо настраивать на Cur Count. Существует возможность кнопки управления перенести в окно мониторинга и наблюдать процесс без необходимости переключения окон:
6. Блок ZONE COMPARE - сравнение зон. Блок оценивает попадание значения входного сигнала в задаваемую зону.
Рис. 3.10
Верхняя граница зоны (Large value) задаётся по самому нижнему аналоговому входу, нижняя граница (Small value) – по второму снизу входу. Анализируемый входной сигнал (Operated value) подаётся на верхний аналоговый вход. Дискретный вход – как обычно, разрешающий.
Если нижние два входа (или один из них) не подключены, границы зоны можно задать из окна описания блока. На ошибочный ввод значения нижней границы, превышающего значение верхней границы зоны, пакет может ответить протестным комментарием.
Селективными кнопками в окне диалога можно установить один из режимов: ON in the zone или OFF in the zone.Поумолчанию установлен первый режим.
7. Блоки выполнения арифметических функций. Их нет в среде программирования контроллеров α, но они реализованы в контроллерах α – 2 .
Все блоки этой группы имеют одинаковое число входов и выходов, их типы и расположение. Их графические отображения отличаются лишь обозначением внутри прямоугольника видом выполняемой блоком функции.
Все блоки выполняют действия с двумя входными переменными Aи B. Результат операции обозначается через Y :
.
Следует считать, что переменная A подаётся на верхний аналоговый вход, переменная B – на самый нижний вход.
Если на входы каждого из четырёх блоков подавать одни и те же сигналы A = 47, B = 5, то форматы выдачи результатов и условия их получения ясны из приводимой таблицы.
Форма выдачи результата отличается только у блока деления, который указывает значения частного (в примере Q = 9) и остатка (R = 2).
Ещё одно замечание по работе блоков: если дискретный вход блока (сигнал I 01) ни к чему не подключен, любой из блоков выполняет назначенную ему операцию постоянно.
Рис.3.11
Пример отображения результата деления. При введённых значениях A = 47, B = 5 блок деления не даёт результат в виде десятичного с дробью числа, а типовой для него формат вывода (частное и остаток) может оказаться неудобным. На рис. 3.11 блок B 02 отдельно отображает частное Q ( это надо выбрать из двух предлагаемых вариантов в диалоговом окне «частное /остаток») с исходным положением текста X =5, Y =1. Остаток R от деления ( это тоже надо задать в окне описания B 08) вводится сомножителем A в блок B 08, умножается там на 10 (этот сомножитель вводится из окна диалога, поэтому переменная B на вход блока не подключена). Полученное значение 10 × R= 2 × 10 = 20 блоком B 09 делится на B = 5, и полученный результат (частное), равный 4, является числом десятых долей в дробной части результата деления.
Блок B 10 установлен на отображение частногопри X = 7, Y=1; блок B 13 отображает текстом разделительную запятую при X = 7 и Y = 1, смещенную на требуемое для неё место. В итоге получается отображение частного не в виде отдельного представления целой его части и остатка, а единым значением в десятичном представлении.
Вариант решения, правда, не самый удачный, но уж больно хотелось показать, что блоки B 02 и B 08 подключены к одному и тому же выходу блока B 03, но «снимают» с него разные параметры: дисплей – частное Q, а блок умножения – остаток R.
Естественно, что и эту задачу можно решить проще. Для этого изменим последовательность действий и применённые настройки блоков (рис.3.12). В самом начале умножим делимое A в десять раз (если результат надо отразить на экране с точностью до сотой, то умножать надо на 100). Полученное на выходе B 01 произведение
Рис. 3.12
делится блоком B 02 на делитель (переменную B) , а режим отображения результата устанавливается как для частного, выводимого в отношении 1 / 10 ( поле Display Ratio на рис. 3.13).
Дата добавления: 2016-07-29; просмотров: 3460;