Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЕ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ В СИСТЕМЕ PROSYS.doc
Скачиваний:
107
Добавлен:
01.05.2014
Размер:
306.69 Кб
Скачать

7.3.3. Компиляция созданной lad в stl-представление

Компиляция LAD-диаграммы осуществляется по команде выхода из LAD-редактора (по нажатию [Esc]). Если LAD содержит ошибки, то появится соответствующее сообщение, и выход из редактора будет отменен. При отсутствии ошибок произойдет выход в командную строку.

Перед загрузкой полученного кода в ПЛК необходимо произвести еще одну операцию, обусловленную особенностью функционирования Системы Программирования. При компиляции LAD-диаграммы в STL-представление PROSYS не устанавливает точку входа в программу в коде STL. Для выполнения этой установки требуется произвести следующие действия.

  1. После компиляции LAD-диаграммы осуществляется вход в STL-редактор нажатием [F1 STL][Enter]. При входе в окне редактирования выводится скомпилированный код программы и в самой первой строке находится команда NOP (нет операции).

  2. Производится переход в режим редактирования вводом в командную строку номера редактируемой STL-строки (нулевая строка) с последующим нажатием [Enter]. Курсор переходит в первую строку STL-кода.

  3. Поверх команды NOP набивается команда перехода к подпрограмме:

JSR <name_lad>, где <name_lad> является именем откомпилированной LAD-диаграммы. Ввод заканчивается нажатием [Enter]. При этом курсор переходит на следующую строку.

  1. Производится вставка новой строки путем нажатия клавишной комбинации [Ctrl]+[Ins]. В строке расположения курсора помещается новая строка с записанной в нее командой NOP.

  2. Поверх команды NOP вписывается команда завершения программы END.

7.3.4. Загрузка полученного кода в плк

Загрузка кода LAD осуществляется способом, обычным для STL-программы: вводом команды RUN в командную строку; с этого момента доступны все средства STL-отладки.

7.3.5. Отладка lad

Отладку LAD-диаграммы можно проводить и с помощью специального LAD-отладчика, позволяющего визуально контролировать состояния путей и значения контактов LAD. Для этого, после загрузки оттранслированной LAD в ПЛК вышеописанным способом, необходимо вызвать LAD-редактор и выполнить в нем команду запуска LAD-отладчика нажатием клавиши [F1 RUN]. Не следует путать эту команду с аналогичной по написанию командой STL-редактора, которая набирается в командной строке. Команда STL-редактора загружает код программы в ПЛК на выполнение и вызывает процедуру тестирования состояния STL.

После активизации LAD-отладчика в окне редактирования отображается текущее состояние компонент LAD. Пути, находящиеся в состоянии логической 1, отображаются двойными линиями, в состоянии логического 0 - одинарными. Контакты, имеющие ненулевые значения, выводятся в инверсном видеорежиме, в противном случае - в обычном. Внутри функциональных блоков рядом с каждым из входов и выходов появляется небольшое окно, в которое выводится численное значение соответствующего входа или выхода FBK. Если LAD целиком не помещается на экране, то просмотр ее состояния осуществляется курсорными клавишами.

7.4. Основы программирования в терминах lad

Рассмотрим основные конструкции языка LAD на примере простой задачи логико-командного управления, реализуемой на ПЛК COMPACT PLC.

Один из вариантов реализации LAD приводится на рис.7.1.

Пусть информация с объекта управления (ОУ) поступает на цифровые входы I 040...I 043. Управляющее воздействие формируется на цифровом выходе O 058. Вход I 048 принимает информацию о состоянии ОУ, по которой определяется логическая функция управления. При низком уровне сигнала на I 048 воздействие формируется как not((I 040 and I 041) or (I 042 and I 043)), при высоком - not(I 040 xor I 041 xor I 042) and I 043. Кроме того, на выходы O 050...O 057 должен подаваться код с I 040...I 043, преобразованный в двоично-десятичную форму.

│ I 048

00──┤_├─────────────────────────────>>LBL1

│ I 040 I 041 F 100 O 058

01──┤_├─────────┤_├──────────┬────────────┤/├──────( )───

│ I 042 I 043 │

02──┤_├─────────┤_├──────────┘

03>>LBL1

│ I 048

04──┤/├──────────────────────────────>>LBL2

│ ┌─────┐

│ I 040 │ EXO │

05──┤_├────────┤ │

│ I 041 │ │

06──┤_├────────┤ │

│ │ │ ┌─────┐

│ I 042 │ │ │ AND │

07──┤_├────────┤ ▓───────────┤ │

│ │ │ │ │

│ I 043 └─────┘ │ │ O 058

08──┤_├──────────────────────────┤ ├──────────( )───

│ └─────┘

09>>LBL2

Рис.7.1

Строка 0 реализует условный переход по метке LBL1. Переход на строку 3 будет происходить при пребывании входного нормально разомкнутого контакта (цифрового входа I 048), с которого на контакт метки подается сигнал, в активном состоянии (логическая 1). В противном случае выполнение LAD будет продолжено со строки 2. Необходимо отметить, что в LAD "переход по метке назад" невозможен (генерируется ошибка трансляции).

Следующие две строки реализуют логическую функцию управления. Как и в обычной "железной" схемотехнике, последовательное соединение контактов соответствует И - соединению, а параллельное - ИЛИ. Инверсия осуществляется с использованием особого вида контакта - нормально замкнутого, инвертирующего проходящий сигнал. После инверсии сигнал выводится на выходной нормально разомкнутый контакт (выход O 058).

Фрагмент LAD со строки 4 по 9 по своей структуре аналогичен фрагменту LAD со строки 0 по 3. Вся разница между ними заключается в способе организации вычисления логической функции. Здесь применяются логические блоки, для каждого из которых могут быть индивидуально определены свое количество входов и необходимость их инверсии, а также необходимость инверсии выхода (признаком инверсии служит символ ▓ , см. блок EXO).

На основе вышеприведенного примера сформулируем несколько основных принципов построения LAD.

Если LAD содержит непустую строку, то эта строка должна иметь входной контакт, расположенный в крайнем левом столбце, причем этот контакт не должен быть меткой. Исключение составляют адресные контакты, которые являются входными по определению и могут начинать путь с любого столбца, за исключением выходного (последнего). Путь должен завершаться выходным контактом в последнем столбце. Исключение составляют контакты-метки, которые могут завершать путь в любом столбце или располагаться в первом столбце.

Остановимся подробнее на понятии контакта. Как было сказано ранее, контакты предназначены для представления в LAD ячеек памяти ПЛК, причем в зависимости от типа контакта это может быть отображение ячейки памяти данных для передачи байтовых сигналов, битовых или адреса метки памяти программ для организации условного выполнения фрагментов LAD. Определенные в Системе Программирования PROSYS типы контактов приведены в табл.7.1. В графе «Вид» представлено графическое обозначение контакта, в графе «Наименование» - его название, в графе «Примечания» - особенности ввода и функционирования. В графе «Вызов» указаны возможные способы ввода контактов в диаграмму. В квадратных скобках указывается нажимаемая клавиша (иногда с наименованием команды), например

[F2 CONTACT]. В угловых скобках дается условное обозначение вводимых с клавиатуры лексем. <predaddr> указывает на необходимость ввода символа предварительного выбора адреса, <addr> - на необходимость ввода адресного значения.

Таблица 7.1

Вид

Вызов

Наименование

Примечания

──┤_├──

[F2 CONTACT][F1]<predaddr>

<addr>[]

Нормально разомкнутый контакт

(входной элемент)

Загрузка содержимого указанного адреса

──()──

[F9]+[F2]<predaddr>

<addr>[]

Контакт выходного элемента

Сохранение

Должен находиться в последнем столбце LAD

──┤/├──

[F2 CONTACT][F2]<predaddr>

<addr>[]

[N] <predaddr> <addr>[]

[/] <predaddr> <addr>[]

Нормально замкнутый контакт ( отрицание)

Допустим ввод только адресов 1-битных ячеек (I, O, F, S, T)

───────

[F2 CONTACT][F3][Пробел]

Горизонтальный участок пути

Если курсор находится на пути, то выполнение этой команды приведет к его удалению

└──────

[F2 CONTACT][F4]

[V]

Соединение слева от курсора вверх к следующему пути

Если курсор находится на соединении, то выполнение этой команды приведет к его удалению

Продолжение табл. 7.1

Вид

Вызов

Наименование

Примечания

──────┘

[F2 CONTACT][F5]

[Ctrl][V]

Соединение справа от курсора вверх к следующему пути

То же

──(L)──

[F2 CONTACT][F6]<predaddr>

<addr>[]

[L]<predaddr><addr>[]

Контакт фиксации адреса 1-битной величины

Этот контакт может вызываться в последнем столбце LAD в сочетании с адресами

1-битных величин (F, O, S)

──(U)──

[F2 CONTACT][F7]<predaddr>

<addr>[]

[U]<predaddr><addr>[]

Контакт дефиксации адреса

1-битной величины

То же

──┤+├──

[F2CONTACT][F8][F]<addr>[]

[+][F]<addr>[]

Контакт генерации импульса по положительному фронту

Этот контакт может быть только флагом (F)

──┤-├──

[F2 CONTACT][F9]+[F1][F]

<addr>[]

[-] [F] <addr>[]

Контакт генерации импульса по отрицательному фронту

То же

──┤&├──

[F2 CONTACT][F9]+[F2][F]

<addr>[]

[&][F]<addr>[]

Контакт генерации импульса по положительному и отрицательному фронту

То же

──┤*├──

[F2 CONTACT][F9]+[F3]

<predaddr><addr>[]

[*]<predaddr><addr>[]

Контакт временного хранения

К этой функции нельзя обращаться из первого и последнего столбцов. Контакт может вызываться в сочетании с адресами F, R, O, S

──┤X├──

[F2 CONTACT][F9]+[F4]

<predaddr>

<addr>[]

[X]<predaddr><addr>[]

Контакт соотношения ИСКЛЮЧАЮЩЕЕ ИЛИ между путем и ячейкой памяти

_

[ADR ╟

[F2 CONTACT][F9]+[F5]

<predaddr><addr>[]

Контакт для передачи адреса ячейки в FBK

Адресный контакт может располагаться в любом столбце диаграммы, кроме последнего, и всегда является входным

[AL╟

[F2 CONTACT][F9]+[F6]

<label>[]

Контакт для передачи адреса метки <label> в FBK

Максимальная длина метки равна 4 символам; метка должна начинаться с буквы

Окончание табл. 7.1

Вид

Вызов

Наименование

Примечания

>MARKE

[F2CONTACT][F9]+[F7]

<marke>[]

Контакт для временного сохранения 1-байтного пути во внутренней памяти ПЛК

Метка <marke> может иметь максимальную длину 6 символов и должна присутствовать в LAD дважды: первый раз - как источник, второй раз - как приемник. Под меткой указывается номер строки, с которой она соединена передачей данных

>>LABEL

[F2 CONTACT][F9]+[F8]

<label>[]

Метка для реализации условного перехода

Максимальная длина метки равна 4 символам; метка должна начинаться с буквы. Под меткой указывается номер строки, с которой продолжается или прерывается обработка

Редактирование логических блоков имеет свои особенности. По умолчанию вводимый в LAD-диаграмму логический блок имеет два входа (выход всегда один). Для редактирования логического блока необходимо войти в него. Вход в блок осуществляется нажатиями клавиш перемещения совместно с клавишей [Alt]. Внутри логического блока курсор перемещается по элементам блока с помощью клавиш перемещения. Для выхода из блока необходимо вывести за его пределы курсор. При входе в блок становятся доступными команды работы с логическими блоками.

Рассмотрим теперь другой пример LAD-диаграммы. Пусть цифровой входной модуль E161 занимает в кассете ПЛК MIDICONTROL место 4. С объекта управления на цифровые входы поступают дискретные сигналы реакции объекта (один сигнал на 8 младших каналов, другой - на 8 старших). Необходимо произвести прием сигналов с выдачей большего на выходы цифрового модуля A161, расположенного в месте 5. Соответствующая LAD-диаграмма приведена на рис.7.2. Данная LAD включает в себя три стандартных функциональных блока BTOR, HSEL, RTOB (названия указаны внутри FBK в правом верхнем углу). FBK являются подпрограммами, параметры которым передаются через входы, а результаты вычислений снимаются с выходов. Исчерпывающее описание FBK с точки зрения пользователя включает в себя его четырехсимвольное имя (фактически является меткой перехода на STL-подпрограмму), описание назначения, имена входов и выходов с описанием назначения каждого из них, а также рекомендуемые типы контактов, сопрягаемых с входами и выходами FBK. Именно в такой форме описаны все FBK стандартных библиотек.

│ ┌────────────────┐

00 │ PACK BITS INTO │

│ │ DATA REGISTERS │

│ #00001 ├────────────────┤

01──┤ ├─────────┤ ENABLE BTOR │

│ #00000 │ │

02──┤ ├─────────┤ 8BITS │

│ I 040 │ │

03 [ADR ├─────┤ SOURCE │

│ R 1000 │ │

04 [ADR ├─────┤ DEST │

│ └────────────────┘

│ ┌────────────────┐

05 │ HIGH/LOW │

│ │ SELECTOR │

│ #00001 ├────────────────┤

06──┤ ├─────────┤ ENABLE HSEL │

│ R 1000 │ │ R 1005

07──┤ ├─────────┤ DATA A HIGH ├──────────────────( )───

│ R 1001 │ │

08──┤ ├─────────┤ DATA B LOW ├───

│ └────────────────┘

│ ┌────────────────┐

09 │ UNPACK DATA │

│ │REGISTERS TO BIT│

│ #00001 ├────────────────┤

10──┤ ├─────────┤ ENABLE RTOB │

│ #00001 │ │

11──┤ ├─────────┤ 8BITS │

│ R 1005 │ │

12 [ADR ├─────┤ SOURCE │

│ O 050 │ │

13 [ADR ├─────┤ DEST │

│ └────────────────┘

Рис.7.2

Стандартные библиотеки охватывают широкий диапазон областей применения - от драйверов модулей расширения ПЛК и классических операций и методов математической обработки до реализаций базовых алгоритмов управления. Обратной стороной этой универсальности является большой объем справочной информации (свыше 1000 с.). Поэтому ограничимся лишь представлением сведений по наиболее часто встречающимся при решении практических задач входам/выходам FBK:

ENABLE

Этот вход является флагом разрешения выполнения FBK: если равен 1, то FBK выполняется; при его равенстве 0 FBK не производит никаких действий. Может принимать данные с любого контакта, не являющегося меткой; не рекомендуется (хотя и не запрещается) применение адресных контактов.

8BITS

Вход. Определяет разрядность данных обрабатываемых FBK. Обычно включается в блоки обработки числовых массивов (BTOR, RTOB, LD## и т.п.). Если устанавливается в 1, то за единицу данных (например, элемент массива) принимается 8-битное (байтовое) значение; если вход равен 0, то обработка ведется над двухбайтными величинами. Рекомендуемые передающие контакты, как у ENABLE.

SOURCE, DEST

Входы применяются очень часто. Определяют ячейки памяти, из которых будет осуществляться выбор данных для обработки (SOURCE) или в которые будет помещен результат (DEST). В случае обработки массивов указывают на ячейку с наименьшим адресом.

В качестве примера описания FBK возьмем описание использованного в LAD-диаграмме блока HSEL, как оно представлено в стандартной библиотеке.

HSEL Выбор большего/меньшего числа (SYSTEM)

Функциональный блок HSEL используется для выбора большего и меньшего из двух 2-байтных чисел. Функциональный блок оперирует со значениями в представлении двоичного дополнения (в диапазоне от -32768 до 32767).

┌────────────────┐

│ HIGH/LOW │

│ SELECTOR │

├────────────────┤

1 ──┤ ENABLE HSEL │

│ │

│ │

2 ──┤ DATA A HIGH ├── 2

│ │

│ │

2 ──┤ DATA B LOW ├── 2

└────────────────┘

В табл.7.2 подробно описаны все входные и выходные параметры.

Таблица 7.2

Вход/

выход

Описание

Рекомендуемые типы адресов

ENABLE

Если ENABLE=1, то FBK будет выполняться. Выходы FBK будут определены в соответствии со спецификацией команды HSEL. Если ENABLE=0, то FBK не выполняется, а выходы FBK будут иметь следующие значения:

HIGH = DATA A; LOW = DATA B

R, F, I, O, #

DATA A

Первое сравниваемое 2-байтное значение в представлении двоичного дополнения (от -32768 до 32767)

R, #

DATA B

Второе сравниваемое 2-байтное значение в представлении двоичного дополнения (от -32768 до 32767)

R, #

HIGH

ENABLE=1 ... наибольшее из значений, заданных на входах DATA A и DATA B

ENABLE=0 ... HIGH = DATA A

R

LOW

ENABLE=1 ... наименьшее из значений, заданных на входах DATA A и DATA B

ENABLE=0 ... LOW = DATA B

R

Рассмотрим процесс функционирования приведенной LAD-диаграммы. Все функциональные блоки диаграммы выполняются безусловно на всем протяжении работы программы, т.к. ENABLE у всех FBK установлены в 1. Блок BTOR осуществляет прием данных с массива цифровых входов, имеющего начальный адрес I 040, и упаковку принимаемых битовых значений в регистры R 1000 и R 1001. Таким образом, значения цифровых входов I 040...I 047 будут упаковываться в регистр R 1000, а значения с I 048...I 04F - в регистр R 1001. Факт упаковки 16 бит определен низким уровнем входа 8BITS. После упаковки входных значений производится сравнение полученных байтовых величин модулем HSEL. Значения из регистров R 1000 ...

R 1001 подаются на входы DATA A и DATA B, а с выхода HIGH снимается большее из двух числовых значений и сохраняется в регистре R 1005 для последующей выдачи на цифровые выходы. И, наконец, последний FBK RTOB осуществляет распаковку значения, сохраненного в регистре R 1005, и выдачу распакованных битов на цифровые выходы O 050...O 057.