Лекция №5.
Тема: “Основные понятия SCADA-систем TRACE MODE. Канал в Trace Mode. Процедуры. Языки разработки алгоритмов. Язык инструкций TechnoIL. Язык функциональных блоков FBD.”
5.1 Основные понятия SCADA-систем TRACE MODE
ПРОЕКТ системы управления – это совокупность всех математических и графических элементов системы, функционирующих на различных операторских станциях и контроллерах одной АСУ ТП, объединенных информационными связями и единой системой архивирования. Проект может быть масштабным (сотни узлов), а может включать в себя только один контроллер или одну операторскую станцию. Под проектом в TRACE MODE понимается вся совокупность данных и алгоритмов функционирования распределенной АСУ (АСУТП и/или T-FACTORY), заданных средствами TRACE MODE. Итогом разработки проекта является создание файлов, содержащих необходимую информацию об алгоритмах работы АСУ. Эти файлы затем размещаются на аппаратных средствах (компьютерах и контроллерах) и выполняются под управлением исполнительных модулей TRACE MODE. Составная часть проекта, размещаемая на отдельном компьютере или в контроллере и выполняемая под управлением одного или нескольких исполнительных модулей TRACE MODE, называется узлом проекта.
УЗЕЛ – любое устройство в рамках проекта, в котором запущено программное обеспечение TRACE MODE, реализующее серверные функции. Это может быть контроллер, операторская станция или архивная станция. В проекте не может быть более 128 узлов. В общем случае размещение узла на том же аппаратном средстве, на котором он должен исполняться под управлением монитора, не является обязательным – мониторы могут загружать узлы с удаленных аппаратных средств.
БАЗА КАНАЛОВ – совокупность всех каналов, математических объектов, FBD-программ и IL-программ, созданных для каждого конкретного узла.
ОБЪЕКТ БАЗЫ КАНАЛОВ – совокупность любых каналов, которой приписан определенный набор свойств и атрибутов. Среди последних можно назвать имя, графический идентификатор, флаг подчинения: родитель, потомок. Оформленные группы каналов могут быть подчинены друг другу и создавать таким образом иерархические структуры.
ДРАЙВЕРЫ обмена – драйверы, используемые мониторами TRACE MODE для взаимодействия с устройствами, протоколы обмена с которыми не встроены в мониторы.
5.2 Канал в Trace Mode
Канал (базовое понятие системы) – это структура, состоящая из набора переменных и процедур, имеющая настройки на внешние данные, идентификаторы и период пересчета ее переменных. Идентификаторами канала являются: имя, комментарий и кодировка. Например, имя канала, связанного с пятым каналом платы аналогового ввода, расположенной в первом посадочном месте контроллера, будет AI_-pе01-0005. Кроме того, каждый канал имеет числовой идентификатор, используемый внутри системы для ссылок на этот канал. Среди переменных канала выделяются четыре основных значения: входное (In), аппаратное (A), реальное (R) и выходное (Q). С помощью настроек входное значение канала связывается с источником данных, а выходное – с приемником.
В зависимости от направления движения информации, т.е. от внешних источников (данные с контроллеров, УСО или системные переменные) в канал или наоборот, каналы подразделяются на входные (тип INPUT) и выходные (тип OUTPUT).
Входной канал запрашивает данные у внешнего источника (контроллер, другой МРВ и пр.) или значение системных переменных (счетчик ошибок, длина архива и пр.). Полученное значение поступает на вход канала и далее пересчитывается в аппаратное и реальное значения. Аппаратное значение у каналов типа INPUT формируется масштабированием (логической обработкой для дискретных каналов) входных значений. Используемые процедуры обеспечивают первичную обработку данных (исправление ошибок датчиков, масштабирование, коррекция температуры холодных спаев термопар и т. д.). Выходные значения в в каналах типа INPUT не используются.
Выходной канал передает данные приемнику. Приемник может быть внешним (значение переменной в контроллере, в другом МРВ и пр.) или внутренним - одна из системных переменных (номер проигрываемого звукового файла, номер экрана, выводимого на монитор, и пр.). И внешние и внутренние приемники данных связываются с выходными значениями каналов. У каналов типа OUTPUT их входное значение формируется одним из следующих способов: процедурой управление данного канала; процедурами управление или трансляция других каналов; метапрограммой на языке Техно IL; Каналом удаленного узла (например, по сети); оператором с помощью управляющих графических форм. У каналов типа OUTPUT аппаратное значение получается из реального процедурой трансляция. Аппаратные значения каналов имеют такое название, поскольку в них удобно получать величины унифицированных сигналов, с которыми работает аппаратура ввода/вывода (4-20 мА, 0-10 В и пр.). Реальные значения предназначены для хранения значений контролируемых параметров или сигналов управления в реальных единицах (например, кг/час, оС, % и пр.). Выходное значение определено только для каналов типа OUTPUT. Оно пересчитывается из аппаратного значения. Данные из внешних устройств записываются в каналы, данные из каналов посылаются на внешние устройства. В каналы оператор заносит управляющие сигналы. Значения из каналов записываются в архивы, операторские отчеты и т.п. В каналах осуществляется преобразование данных. Меняя значения на системных каналах, можно управлять выводимой на экран информацией, звуковыми сигналами и т.д., т.е. всей системой.
Подтип канала указывает класс источников или приемников данных, с которыми будет связываться канал. Для каналов типа INPUT подтип характеризует получаемую ими информацию (АНАЛОГ – значение АЦП, считанное с платы УСО, СИСТЕМНЫЙ – состояние системы, СВЯЗЬ – данные с удаленных узлов проекта и пр.). Каналы OUTPUT имеют тот же набор подтипов, что и каналы INPUT. Однако для них подтип определяет класс приемников, а не источников данных (АНАЛОГ – значение ЦАП, СИСТЕМНЫЙ – состояние системы, СВЯЗЬ – значения управляемых каналов на удаленных узлах проекта и пр.). Всего существует шестнадцать подтипов каналов. Все они могут задаваться как для входных, так и для выходных каналов. Подтип канала задает класс источников или приемников данных. Кроме того, подтип канала определяет также количество его дополнительных настроек. Уточнение источника или приемника в рамках заданного подтипом класса осуществляется с помощью дополнения к подтипу. Последний уровень адресации источника или приемника данных осуществляется с помощью настроек канала.
Границы шкалы указывают возможный диапазон изменения контролируемого параметра. Например, если датчик позволяет измерять давление в диапазоне от 0 до 10 кгс/см2 , то его показания, лежащие вне данного диапазона, являются заведомо недостоверными. Если задать для канала границы шкалы, то при выходе за них его реального значения может автоматически формироваться признак недостоверности данных. Эта информация может быть доведена до оператора и зафиксирована в архивах.
5.3 Процедуры.
Входное значение канала преобразуется в аппаратное, реальное и выходное с помощью процедур. Процедурами канала являются:
масштабирование (умножение и смещение),
фильтрация (подавление пиков, апертура и сглаживание),
логическая обработка (предустановка, инверсия, контроль сочетаемости),
трансляция (вызов внешней программы),
управление (вызов внешней программы).
Порядок следования и содержание процедур может меняться в зависимости от типа канала (входной или выходной, аналоговый или дискретный).
Процедура масштабирование используется только в каналах, работающих с аналоговыми переменными. Она включает в себя две операции: умножение и смещение. Последовательность этих операций меняется в зависимости от типа канала:
- у каналов типа INPUT входное значение умножается на заданный множитель и к полученному результату добавляется величина смещения. Результат присваивается аппаратному значению канала.
- у каналов типа OUTPUT к аппаратному значению добавляется величина смещения, затем эта сумма умножается на заданный множитель, а результат присваивается выходному значению канала.
Процедура трансляция определена для всех каналов независимо от их типа и вида представления. У входных каналов процедура трансляции преобразует аппаратное значение в реальное, а для выходных – наоборот. Для этого вызывается FBD-программа. Вызываемая программа выбирается при настройке процедуры. При настройке процедуры входные и выходные аргументы выбранной программы связываются с атрибутами текущего канала, а также любых других каналов из текущей базы. Поэтому процедура трансляции одного канала может также использоваться для формирования значений других каналов.
Набор процедур в канале зависит от формата данных. Каналы, работающие с аналоговыми переменными, используют следующие процедуры масштабирование, трансляцию, фильтрацию и управление. В каналах, обрабатывающих дискретные параметры, используются логическая обработка, трансляция и управление.
Фильтрация – процедура, которая присутствует только у аналоговых каналов. Набор выполняемых ею операций отличается для входных и выходных каналов. У каналов типа INPUT фильтрация выполняется после процедуры трансляции до формирования реального значения. Фильтрация включает в себя следующие операции: подавление случайных всплесков в тракте измерения; подавление малых колебаний значения канала; экспоненциальное сглаживание; контроль шкалы – отслеживание выхода реального значения канала за установленные границы шкалы. У каналов типа OUTPUT данная процедура формирует реальное значение по входному значению. При этом выполняются следующие операции: ограничение скорости изменения реального значения; подавление малых колебаний значения канала; экспоненциальное сглаживание; контроль шкалы – обрезание величины управляющего воздействия до границ шкалы канала.
Управление – процедура, которая определена для всех каналов. Она реализует функцию управления. С ее помощью можно вызвать FBD-программу, в которой можно запрограммировать требуемые алгоритмы управления. В качестве аргументов программе могут передаваться значения и атрибуты любых каналов из текущей базы. Эти аргументы могут быть как входными, так и формируемыми. Формально процедура управления связана с каналом только циклом пересчета. Она может вообще никак не участвовать в формировании его значений, а управлять другими каналами. Такая ситуация часто наблюдается при использовании процедуры «Управление» на каналах типа INPUT.
Кроме основных значений, канал имеет дополнительные переменные: шесть границ, гистерезис, настройки процедур обработки, начальные параметры, флаги архивирования. Переменные, настройки и идентификаторы канала образуют список его атрибутов.
Часть из них задается в редакторе базы каналов и не может быть изменена в реальном времени. Другие могут иметь начальные значения и доступны для изменения.
5.4 Языки разработки алгоритмов
Информационные потоки в ТРЕЙС МОУД настраиваются с помощью каналов. Тип, подтип и другие характеристики каналов определяют источники или приемники данных (контроллеры, платы УСО, удаленные узлы, системные переменные и пр.). В каналах предусмотрена первичная и выходная обработка данных. Все остальные задачи по обработке данных и управлению разрабатываются в виде отдельных программ. Для этого предусмотрены два языка: Техно FBD и Техно IL. Они реализуют стандарт МЭК-1131 и имеют большое количество дополнительных функций.
Язык Техно FBD предназначен для разработки алгоритмов в виде диаграмм функциональных блоков. Созданные на нем программы могут вызываться из процедур каналов. Программы на Техно IL записываются в виде последовательности инструкций. Этот язык позволяет программировать функциональные блоки для языка Техно FBD и создавать метапрограммы, которые запускаются параллельно с пересчетом базы каналов.
5.4.1 Язык инструкций TechnoIL
Язык инструкций (Техно IL) - это текстовый язык ТРЕЙС МОУД для разработки программ, реализующих функции обработки данных и управления. Он является расширением IL-языка международного стандарта IEC 1131-3.
Техно IL реализует синтаксис языка инструкций IEC 1131-3. Разработанные и отлаженные в ТРЕЙС МОУД IL-программы могут использоваться другими инструментальными средствами программирования контроллеров. Однако если такая задача не стоит, то можно использовать расширенные возможности Техно IL по оформлению программ. Эти возможности включают в себя более простой и интуитивный синтаксис, дополнительные функции и операторы, а также использование двухадресного режима.
Тип программы определяет способ ее вызова, а также ограничения, которые накладываются на количество и типы доступных переменных и операторов. Он может принимать следующие значения:
FB – программирование блока для Техно FBD;
PRG – метапрограмма.
Первый из них используется при создании новых блоков для языка Техно FBD. Тип PGR устанавливается для метапрограмм, запускаемых параллельно с пересчетом базы каналов.
Для каждой IL-программы определены два имени: основное и дополнительное. Они вводятся в соответствующих полях диалога Техно IL. Текст обоих имен IL-программы может включать в себя 7 любых символов кроме пробелов.
Первое из них используется для идентификации программы. Оно выводится во всех списках редактора базы каналов при ссылках на IL-программы.
Назначение дополнительного имени зависит от типа программы. Для типа программы FB оно задает название функции блока и выводится в его верхней части. Если IL-программа имеет тип PRG, то дополнительное имя используется для задания номера программы. Он может быть установлен от 0 до 15.
Чтобы использовать IL-программу, ее надо оттранслировать и добавить в проект. Для этого следует загрузить требуемую программу в диалог Техно IL и нажать ЛК на кнопке Трансляция.
При обнаружении ошибок в тексте программы в окно сообщений будет выводиться соответствующая информация. Если трансляция программы прошла успешно, то в окне сообщений появится строка сообщение OK и снимается блокировка с кнопки Добавить.
Чтобы облегчить поиск ошибок в окно сообщений можно вывести дамп трансляции. Для этого надо выполнить команду Дамп из меню Правка. Дамп содержит коды оттранслированных строк программы и их тексты. При наличии ошибки вместо кода трансляции выводится соответствующее сообщение.
Текст IL-программы представляет собой последовательность инструкций. Каждая инструкция включает в себя описатель действия и операнды. Максимальное количество инструкций одной программы равно 12000. К основным понятиям языка Техно IL относятся:
Переменные;
Константы;
Операнды;
Операции;
Функции;
Метки;
Операторы;
Комментарии.
Рассмотрим подробно каждое из этих понятий.
Техно IL позволяет использовать несколько типов переменных. Их имена имеют следующую структуру: первый символ определяет тип переменной, далее без пробела следует ее номер. Для различных типов переменных определены следующие идентификаторы:
I - входные переменные;
Q - выходные переменные;
E - статические переменные;
W - статические глобальные переменные;
F - динамические переменные.
Количество доступных в программе переменных разного типа определяется типом IL-программы.
Кроме описанных типов, в Техно IL используются еще две системные переменные: result - аккумулятор (X); CMP - признак истинности.
Входные переменные (I) являются входными аргументами IL-программы. В зависимости от типа программы назначение переменных этого типа несколько меняется. В программах типа FB эти переменные порождают входы создаваемого блока. Например, если в программе используется переменная данного типа с номером 5 (I5) и таких переменных с большими номерами нет, то блок будет иметь шесть функциональных входов. При этом переменная I5 будет получать значения с последнего функционального входа, а I0 – с первого. В IL-программе типа FB можно использовать до 13 переменных типа I (максимальный номер - 12). При этом их суммарное количество с выходными переменными (Q) не должно превышать 15. В программе типа PRG входные переменные могут связываться с атрибутами каналов. Не связанные с каналами переменные типа I могут использоваться как свободные для хранения промежуточных результатов. Максимальное количество переменных этого типа равно 256 (максимальный номер - 255). Механизм связывания переменных IL-программы с атрибутами каналов описан ниже.
Выходные переменные (Q) являются выходными аргументами IL-программы. Их использование зависит от типа программы. В программах типа FB эти переменные порождают выходы блока. Например, если в программе используется переменная Q5, и таких переменных с большими номерами нет, то созданный блок будет иметь шесть выходов. При этом переменная Q5 будет формировать значение на шестом выходе, а переменная Q0 - на первом выходе. Количество выходов блока определяется старшим номером переменной данного типа. При отсутствии в программе переменных с меньшими номерами входы под них все равно создаются. Максимальное количество выходных переменных в IL-программе типа FB равно 8 (максимальный номер – 7). Их суммарное количество со входными переменными (I) не должно превышать 15. В IL-программах типа PRG переменные данного типа используются для формирования значений атрибутов каналов текущего узла. Не связанные с каналами выходные переменные могут использоваться как свободные. Максимальное количество этих переменных в программах типа PRG равно 256 (максимальный номер - 255). Механизм связывания переменных IL-программы с атрибутами каналов описан ниже.
Статические переменные (E) используются при необходимости сохранять результаты вычислений между двумя вызовами программы. Их количество, доступное в одной программе, зависит от ее типа. В IL-программе типа FB максимальное число статических переменных равно 4 (максимальный номер - 3). Для программ типа PRG это количество составляет 256. Однако надо учитывать, что эти переменные являются общими для всех метапрограмм одного узла. Поэтому их можно использовать для обмена данными между программами. Значения статических переменных можно также контролировать и формировать в FBD-программах. Для этого используются соответствующие функциональные блоки из раздела Пересылки (EREAD и WRTE).
Статические глобальные переменные (W) узла операторской станции или глобального регистратора таких переменных можно использовать до 1024, в контроллере их может быть до 256, а в узле Лагуна – до 32. Глобальные переменные можно использовать в любых IL- и FBD-программах. Их значения можно считывать в реальном времени из файлов, передавать по сети, запрашивать по OPC, а так же отображать и управлять ими с помощью форм отображения. Для получения значений глобальных переменных в FBD-программах используются блоки WREAD и AREAD из раздела Пересылки. Для формирования значений глобальных переменных предназначен блок WRTW из того же раздела. Считыванием значений этих переменных из файла управляет блок WFILE, а передачей по сети – NSND. Для настройки форм отображения на глобальную переменную надо в списке объектов указать объект W_Global, а в списке каналов выбрать нужную переменную.
Динамические переменные (F) не сохраняют свои значения между вызовами программы. Поэтому их можно использовать только как вспомогательные при организации вычислений. Количество динамических переменных не зависит от типа программы и составляет 255.
В языке Техно IL используются две системные переменные: result – аккумулятор (X); CMP – признак истинности. Первая из них используется при одноадресной записи операций. В этом случае она является вторым операндом и в нее записывается результат. Для явного вызова этой переменной используется идентификатор X. Использование аккумулятора определено стандартом МЭК 1131-3, в соответствии с которым все операции являются одноадресными и выполняются с использованием аккумулятора. Переменная CMP формируется операциями сравнения и оператором TEST (см. ниже). Она может принимать значения истинно или ложно и используется операторами условного перехода.
В метапрограммах можно связать переменные I и Q с атрибутами каналов. Для этого в тексте программы надо создать раздел описания связей. Он должен располагаться за словом PROGRAM, начинаться строкой VAR_IN_OUT и заканчиваться – END_VAR. Между этими строками размещаются строки описания соответствия. Они имеют следующий формат:
<переменная> <имя канала> <атрибут>
В них сначала записывается имя переменной, затем через пробел - имя канала и после этого, опять через пробел, - обозначение атрибута (обозначение атрибутов канала см. Приложение Г). Если указать разные имена каналов или атрибутов переменным разных типов с одинаковым номером, то в обоих случаях будет использоваться последняя по списку настройка.
В тексте программ можно использовать константы. Константы могут быть двух типов:
целые числа в диапазоне от –127 до 127;
любые другие числа.
Эти константы могут записываться в десятеричном и в шестнадцатеричном виде. Шестнадцатеричная константа начинается с 0х. Ограничений на число констант первого типа не накладывается. Поэтому их в программе может быть любое количество. Максимальное число констант второго типа для программ типа FB равно 10, а для PRG – 40. Совпадающие по значению константы считаются за одну. Например, если константа 10.5 применена три раза, то считается, что использована только одна константа. Каждая инструкция программы содержит оператор и операнды. Оператор задает действие, которое надо выполнить с операндами. В качестве операндов в IL-программе могут использоваться все описанные выше переменные, кроме CMP, а также константы. Значение операнда HEX-формата, задаваемого константой, не может быть больше 0xFF (255).
Операции в TechnoIL. Язык Техно IL позволяет выполнять с операндами арифметические и логические операции, а также операции сравнения. Почти все они имеют два обозначения: символьное и мнемоническое.
Все операции языка инструкций международного стандарта МЭК 1131-3 являются одноадресными. В них используется только один операнд. Вторым является аккумулятор (переменная result). В аккумулятор же помещается результат выполнения операции. Техно IL поддерживает одноадресный и двухадресный режимы. В этом последнем программа выглядит нагляднее и получается компактнее. Здесь в операции участвуют два операнда, а результат ее выполнения записывается в первый из них. В соответствии со стандартом все операции имеют только мнемоническое обозначение. Техно IL допускает использование также более наглядного символьного обозначения операций. В дальнейшем описании операций приводятся оба обозначения.
В соответствии со стандартом в строке записывается сначала мнемоническое обозначение операции, затем через пробел – операнд. Техно IL позволяет использовать два операнда и мнемоническое или символьное обозначение операции. Кроме того, обозначение операции может быть помещено между операндами.
Например, операция сложения переменной Q1 с переменной I2 с записью результата в первую из них в соответствии со стандартом записывается следующим образом:
LD Q1
ADD I2
ST Q1
В Техно IL эта операция может быть записана так же, а может - существенно компактнее:
ADD Q1 I2
или
+ Q1 I2
или
Q1 + I2
В одной строке программы можно записать несколько операций. В этом случае их следует разделять символом “;”.
Техно IL поддерживает следующие арифметические операции:
-
Символьное обозначение
Мнемоническое обозначение
Описание
+
ADD
Сложить операнды;
-
SUB
Вычесть из первого операнда второй;
*
MUL
Умножить операнды;
/
DIV
Разделить первый операнд на второй;
%
MOD
Получить остаток от деления операндов;
**
POW
Возвести первый операнд в степень, заданную вторым операндом;
=
MOVE
Присвоить первому операнду значение второго.
Результат выполнения операции заносится в первый операнд. Если в операции указан только один операнд, то он воспринимается как второй, а в качестве первого используется значение аккумулятора.
Программы на Техно IL позволяют выполнять следующие логические операции с операндами:
-
Символьное обозначение
Мнемоническое обозначение
Описание
&
AND
Логическое умножение;
|
OR
Логическое сложение;
^
XOR
Исключающее логическое сложение;
ANDN
Логическое умножение первого операнда на инвертированное значение второго;
ORN
Логическое сложение первого операнда с инвертированным значением второго;
XORN
Исключающее логическое сложение первого операнда с инвертированным значением второго.
Эти операции выполняются побитно над значениями соответствующих битов операндов.
Из операций сравнения в Техно IL реализованы следующие:
-
Символьное обозначение
Мнемоническое обозначение
Описание
==
EQ
Сравнение на равенство;
>
GT
Сравнение на "больше";
>=
GE
Сравнение на "больше или равно";
<
LT
Сравнение на "меньше";
<=
LE
Сравнение на "меньше или равно";
!=
NE
Сравнение на неравенство;
TEST
Сравнение на равенство 0 логического умножения операндов.
Эти операции сравнивают значение первого операнда со вторым на соответствующее условие. По результатам формируется значение переменной CMP. Оно будет истинно при выполнении условия и ложно в противном случае. Эта переменная анализируется в операторах условного перехода (JMPC, JMPN, GOTOC, GOTON).
Если в операции указан только один операнд, то он воспринимается как второй. А в качестве первого используется аккумулятор.
Функции в TechnoIL. В Техно IL существует два типа функций. Первые из них выполняют вычисления над значением указанного для них операнда и присваивают результат ему же. Если указать два операнда, то функция применяется к значению второго операнда, а результат запишется в первый. Эти функции имеют следующий синтаксис:
<функция> <операнд1> [<операнд2>]
Ниже приводится перечень первого типа.
-
SQRT
квадратный корень;
LOG
десятичный логарифм;
LN
натуральный логарифм;
EXP
экспонента;
SIN
синус;
COS
косинус;
TAN
тангенс;
ASIN
арксинус;
ACOS
арккосинус;
ATAN
арктангенс;
NOT (!)
если операнд равен 0, то возвращается значение 1, иначе - 0;
INV (~)
побитовая инверсия;
ABS
абсолютное значение;
CHGSIGN
смена знака;
SIGN
если операнд меньше 0, то возвращается значение 1, иначе - 0;
Второй тип – это функции времени. Они формируют значение операнда и имеют следующий синтаксис <операнд1> = <функция>
К этим функциям относятся следующие:
-
TM.SEC
текущая астрономическая секунда;
TM.MIN
текущая астрономическая минута;
TM.HOUR
текущий астрономический час;
TM.MDAY
текущий день месяца;
TM.MON
текущий номер месяца (начиная с 1);
TM.YEAR
текущий год;
TM.WDAY
день недели (1 – воскресенье, 7 - суббота);
TM.YDAY
текущий день года (начиная с 0);
TM.CLK
время, прошедшее с запуска программы (tick).
Метки. Метки предназначены для реализации условных и безусловных переходов и могут вставляться перед любой инструкцией программы. Они не влияют на выполнение инструкций и имеют синтаксис:
Mnn:
где
nn – номер метки.
При ссылках на метку символ “:” должен отсутствовать. Количество меток, доступных в программах типа FB, не может быть больше 5, а в программах типа PRG – 40.
Операторы.
В языке Техно IL реализованы следующие операторы:
оператор подстановки имен переменных;
операторы обмена с аккумулятором;
операторы обмена с портами ввода/вывода;
операторы условных переходов;
оператор безусловного перехода;
условный оператор;
операторы циклов;
операторы работы с таймерами;
операторы обмена с файлами данных;
операторы вызова функциональных блоков;
оператор завершения программы.
Оператор #DEFINE. Этот оператор позволяет использовать в тексте IL-программы любые имена для входных и выходных переменных типа I и Q. Оператор #DEFINE имеет следующий синтаксис:
#DEFINE <операнд> <name>,
где
операнд – имя переменной в терминах идентификаторов I и Q,
name – мнемоническое имя. В файле с расширением def и в заголовке FBD-блока отображаются только первые три символа мнемонического имени.
Операторы обмена с аккумулятором. Существует два оператора, предназначенных для обмена данными с переменной result (аккумулятор): LD <операнд> и ST <операнд>. Первый из них записывает в аккумулятор значение операнда. Второй – копирует значение аккумулятора в указанный операнд.
Операторы обмена с портами ввода/вывода. Эти операторы позволяют обмениваться с портами ввода/вывода. Это делает возможной разработку драйверов обмена с УСО без использования дополнительных инструментальных средств. Существует три оператора Техно IL, предназначенных для работы с портами ввода/вывода. Они имеют следующий синтаксис:
BASEPORT <операнд>
INP <операнд1> <операнд2>
OUTP <операнд1> <операнд2>
Оператор BASEPORT по значению операнда устанавливает базового адреса порта.
Оператор INP предназначен для чтения данных из порта. В первый его операнд записывается считанное значение. Второй задает смещение порта относительно базового адреса. Оператор OUTP записывает данные в порт. Он также использует два операнда. Первый из них содержит посылаемое в порт значение. Второй задает смещение порта относительно базового адреса.
Операторы условных переходов. Техно IL поддерживает три оператора условных переходов. Они имеют следующий синтаксис:
JMPC <метка>
JMPN <метка>
JMPX <метка>
Первый из них осуществляет переход на указанную метку при значении истина переменной CMP, второй – при значении ложь, а последний – значение аккумулятора отличном от 0.
Операторы безусловных переходов. Этот оператор осуществляет переход на указанную метку, независимо ни от каких условий. Он имеет следующий синтаксис:
JMP <метка>
Здесь, как и для условных операторов, можно вместо JMP использовать обозначение GOTO.
Условный оператор. Этот оператор имеет следующий синтаксис:
IF
<текст программы>
THEN
<текст программы>
ELSE
<текст программы>
END_IF
Текст программы между словами IF и THEN должен содержать операции, формирующие значение переменной CMP. Она анализируется после выполнения этого фрагмента. В случае ее истинности выполняется фрагмент программы между ключевыми словами THEN и ELSE. В противном случае - между ELSE и END_IF. Максимальное количество условных операторов в одной программе равно 254. При этом количество вложений не ограничивается.
Операторы циклов. В Техно IL существуют два оператора циклов, оператор завершения цикла и оператор перехода на конец цикла.
Первый оператор цикла записывается следующим образом:
WHILE <операнд>
<текст программы>
END_WHILE
Здесь фрагмент программы между строками начала и конца цикла будет выполняться, пока значение операнда не станет равно 0.
Второй оператор цикла проверяет значения операнда на равенство 0 не в его начале, а в конце цикла. Он имеет следующий синтаксис:
REPEAT
<текст программы>
UNTIL <операнд>
Следующий оператор управляет выходом из циклов:
BREAK
При его выполнении работа цикла завершается и выполняется следующая после цикла инструкция.
Следующий оператор позволяет перейти на конец цикла без выполнения оставшегося текста программы: CONTINUE .
Оператор завершения программы. Этот оператор завершает выполнение программы. Он может присутствовать в любом ее месте и обязательно в конце. Этот оператор имеет следующий синтаксис: EXIT [1]
Наличие после оператора цифры 1 для программ типа FB является указанием не изменять значения выходов при завершении. В программах типа PRG наличие 1 после оператора EXIT игнорируется.
Операторы работы с таймерами. Чтобы делать временные засечки в одной программе можно использовать до 32 таймеров. Для управления ими и контроля их значения, предусмотрены два оператора. Первый из них используется для включения таймера и задания ему временной уставки. Он выглядит следующим образом:
SETTMR <операнд1> <операнд2>
Здесь операнд1 задает номер таймера (от 0 до 31), а операнд2 - величину уставки. Значение уставки задается в прерываниях системного таймера (tick).
Второй оператор контролирует превышение значением таймера величины его уставки. Он имеет следующий синтаксис:
CHECKTMR <операнд>
Если значение таймера больше величины уставки, то переменной CMP присваивается значение истина. Номер контролируемого таймера указывается значением операнда.
Операторы обмена с файлами данных. Техно IL позволяет формировать значения переменных типа W, считывая их из файлов, и сохранять их в файлы. Для этого предусмотрены три оператора.
READ <операнд1> <операнд2>
WRITE <операнд1> <операнд2>
PRINT <операнд1> <операнд2>
Оператор READ предназначен для считывания переменных типа W из файла. При выполнении этого оператора считываются переменные, начиная с номера 0 до переменной с номером, заданным в операнд1. Значение второго операнда указывает файл, из которого будут считываться данные. Этот файл должен иметь текстовый формат. Его имя формируется следующим образом:
W<число>.txt ,
где число – значение второго операнда.
Каждая строка файла должна содержать два числа, разделенных пробелом. Первое число – это номер переменной, а второе – ее значение. Таких строк в файле может быть неограниченное количество. При выполнении оператора READ переменной присваивается последнее в файле значение с соответствующим номером.
В любом месте текста программы может быть вставлен комментарий. Он должен начинаться с символов "(*" и заканчиваться на той же строке символами "*)". После символов открытия комментария до начала его текста должен присутствовать хотя бы один пробел. После завершения текста комментария до символов его закрытия также должен присутствовать хотя бы один пробел. Текст комментария может располагаться на нескольких строках.
Вместо символов скобок в ограничителях текста комментария допускается использование символа «/».
5.4.2 Язык функциональных блоков FBD
FBD-программа разрабатывается размещением функциональных блоков в рабочем поле и соединением их в одну диаграмму. Рассмотрим детально основные понятия языка Техно FBD, компоненты FBD-программ и операции по их созданию и отладке. Переменные FBD-программы могут быть внутренние или внешние. Внешние переменные называются аргументами. Суммарное количество переменных в одной программе не может превышать 254. Каждая переменная имеет числовой индекс, который используется при ссылках на нее. Индексы переменных выводятся радом с аргументами и константами в диалоге Реквизиты при подключении программы к каналу. Они могут быть изменены при редактировании программы. Элементарным звеном FBD-программ является функциональный блок. Блок - это графическое изображение вызова одной из функций. Это могут быть либо стандартные, встроенные в систему функции, либо разработанные пользователем. Изображение функционального блока приведено на следующем рисунке.
Каждый функциональный блок имеет следующие атрибуты: выполняемая функция, номер, входы, выходы. Функция блока определяет действия, выполняемые с его входами при формировании значений выходов. Ее наименование выводится в верхней части блока. Функция блока выбирается перед его размещением. Для этого используется диалог Меню FBD, показанный на следующем рисунке.
Каждый блок в зависимости от выполняемой им функции имеет определенное количество входов и выходов. Входы всегда расположены слева, а выходы - справа. Вход блока может быть связан с переменной или константой, а может быть свободным. Последние не учитываются при его пересчете. На диаграмме они выводятся ярко-зеленым цветом. Назначение входов и выходов блока определяется его функцией. Исключением является первый вход. Он всегда управляет пересчетом блока. Далее он будут называться входом запуска/блокировки (RUN), а остальные – функциональными. Эти входы и выходы блоков имеют обозначения, включающие в себя до трех символов.
В режим эмуляции программы рядом с каждым входом и выходом выводится его значение. При этом для входов выводимые значения заменяют их обозначения.
Вид представления входа/выхода
Существует два вида представления данных для входов и выходов функциональных блоков: FLOAT; HEX. Первый предназначен для работы с аналоговыми переменными, представленными числом с плавающей точкой одинарной точности, а второй - с целыми 16-битовыми переменными. При связывании входов и выходов, имеющих разный вид представления, данные преобразуются автоматически. Тип входа/выхода определяет переменную, с которой он будет связан. Это может быть либо внутренняя переменная, либо константа, либо внешняя переменная – аргумент. Входы и выходы блоков могут иметь один из следующих типов: свободен; блок; константа; аргумент.
Тип Свободен устанавливается автоматически для всех незадействованных входов. Этот тип недоступен для установки вручную. Тип Блок устанавливается для всех выходов при размещении блока. Вход или выход, имеющий данный тип, связан с внутренней переменной программы. Этот тип автоматически устанавливается для входа, связанного с выходом любого блока. Тип Константа может быть задан только для входа. Такой вход имеет фиксированное значение и не может меняться в процессе выполнения программы. Вход или выход типа аргумент при вызове программы связывается с внешними переменными. Такими переменными являются атрибуты каналов.
Для разработки и отладки FBD-программ предусмотрено специальное окно редактора базы каналов. Вход в него осуществляется нажатием ЛК на соответствующей иконке панели инструментов, командой FBD-программы из меню Окна или нажатием сочетания клавиш ALT-3. Существует три режима работы в окне редактирования FBD-программ:
редактирование связей;
размещение блоков;
эмуляция работы программы.
Режим устанавливается в диалоге управления редактированием. Он называется Меню FBD и появляется на экране при входе в окно редактирования FBD-программ. Вид этого диалога показан на следующем рисунке.
Все функции, которые могут быть установлены добавлением в FBD-программу блокам, разбиты на следующие 18 разделов. Функция блока устанавливается в диалоге Меню FBD. Здесь сначала выбирается функциональный раздел. После этого на кнопках диалога появляются названия функций этого раздела. Нажатие ЛК на любой из них задает ее функцию размещаемым блокам. Рассмотрим теперь функции каждого из перечисленных разделов.
Логические функции.
Инверсия (!). Блок, реализующий эту функцию, имеет один функциональный вход и один выход. Значение входа анализируется на равенство 0. Если это равенство выполняется, то выходу присваивается значение 1, в противном случае – 0.
Групповая инверсия (_!). Этот блок имеет четыре функциональных входа и четыре выхода. Каждому входу соответствует один выход. В этой паре они работают как один описанный выше блок (!).
Побитовая инверсия (~). Этот блок имеет один функциональный вход. При отработке блока осуществляется побитовая инверсия значения входа. Результат присваивается единственному выходу блока.
Логическое сложение (|). Для этого блока определены четыре функциональных входа и один выход. Выход принимает значение, равное 1, если хотя бы один из входов отличен от 0. При равенстве всех входов 0 выход блока также принимает значение 0.
Логическое умножение (&). Эта функция проверяет на равенство 0 значения четырех функциональных входов блока. При отличии всех входов от 0 значение выхода устанавливается равным 1, в противном случае – 0.
Побитовое логическое сложение (_|). Для данного блока определены два функциональных входа и один выход. Значение выхода получается побитовым логическим сложением двух входов.
Побитовое логическое умножение (_&). Данный блок имеет два функциональных входа и один выход. Значение выхода формируется как результат побитового логического умножения входов.
Побитовое исключающее или (_^). Значение выхода этого блока формируется как результат побитового сложения по XOR значений его функциональных входов.
Сдвиг вправо (>>). Этот блок осуществляет побитовое смещение вправо значения первого функционального входа и присваивает выходу полученный результат. Величина смещения в битах задается вторым входом.
Сдвиг влево (<<). Этот блок смещает влево значения первого функционального входа и присваивает полученное значение выходу. Величина смещения в битах задается значением второго входа.
Распаковка битов (UPV). Значения восьми выходов данного блока формируются значениями битов его младшего байта входа INW. Он должен иметь тип HEX. При этом младший бит формирует выход QB0, а старший – QB7.
Упаковка битов (PB). Этот блок собирает значения восьми входов в одно выходное значение. При отличии любого входа от 0 соответствующий ему бит выхода будет равен 1, в противном случае - 0. Входу IB0 соответствует младший бит выходного значения, а IB7 – старший.
Распаковка байтов (HLB). Значение выхода QLB данного блока формируется младшим байтом входа INP, а QHB – старшим. Вид представления входа INP должен быть HEX.
Упаковка байтов (WHL). Этот блок реализует упаковку значений двух его входов в соответствующие байты выхода. Вход ILB определяет значение младшего байта выхода, а IHB – старшего.
Выделение бита (TEST). Функцией этого блока является присвоение величины указанного бита входного значения выходу. На вход INW подается значение, из которого будет выделяться бит. Он должен иметь тип HEX. Номер бита задается входом NB. Его значению 0 соответствует младший бит, а значению 15 - старший.
Установка бита (SB). Данный блок устанавливает в 1 значение указанного бита во входном значении и присваивает результат выходу. Вход INP должен иметь тип HEX. На него подается модифицируемое значение. Вход NB задает номер бита. При его равенстве 0 модифицируется младший бит, а при 15 - старший.
Сброс бита (RB). Этот блок устанавливает в 0 указанный бит входного значения и присвоение результата выходу. Модифицируемое значение подается на вход INP данного блока, а номер обнуляемого бита - на NB.
Арифметические функции.
Сложение (+2). Данный блок складывает значения входов AD1 и AD2. Полученная величина присваивается выходу SUM.
Вычитание (-). Этот блок вычитает значения входа AS из значения входа AD и присваивает результат выходу.
Умножение (*). Этот блок выполняет операцию умножения его двух функциональных входов и присваивает результат выходу.
Деление (//). Данный блок делит значение входа DVD на значение входа DVS и присваивается результат выходу.
Остаток от деления (%). Блок, реализующий эту функцию, присваивает выходу величину остатка от деления значения входа DVD на значение входа DVS.
Возведение в степень (**). Этот блок возводит значения входа INP в степень, заданную значением входа IND. Полученный результат присваивается выходу.
Сложение четырех элементов (+4). Работа этого блока аналогична работе блока (+2). Однако здесь осуществляется сложение четырех функциональных входов.
Абсолютное значение (ABS). Этот блок имеет только один функциональный вход. Он присваивает выходу абсолютное значение входа.
Инверсия знака (_-Х). Этот блок, в отличие от предыдущего, не отбрасывает знак входной величины, а инвертирует его.
Целая часть (FLOOR). Функция этого блока заключается в присвоении целой части значения входа INP величине выхода. Не стоит путать эту функцию с округлением до целого. Для округления потребуется два блока, как показано на следующем рисунке.
Обратная величина (1/х). Выходу этого блока присваивается величина, полученная при делении 1 на значение входа INP.
Квадратный корень (SQRT). Этот блок имеет один функциональный вход и один выход. Выходу присваивается значение, равное квадратному корню от входа.
Возведение в квадрат (Х**2). Данный блок осуществляет возведение в квадрат значения, поданного на его вход, и присваивает это значение выходу.
Сумма квадратов (HYPOT). Этот блок имеет два функциональных входа и один выход. Выходу присваивается значение, равное сумме квадратов значений входов.
Масштабирование (SCALE). Этот блок реализует функцию масштабирования со смещением. На вход INP подается преобразуемое значение, на MUL - коэффициент пропорциональности, а на ADD - смещение.
Тригонометрические функции.
Этот раздел включает в себя 8 блоков, реализующих вычисление следующих функций: вычисление синуса (SIN); вычисление косинуса (COS); вычисление тангенса (TAN); вычисление арктангенса (ATAN); вычисление арксинуса (ASIN); вычисление арккосинуса (ACOS); вычисление арктангенса отношения (_ATAN); преобразование полярных координат в декартовы (PDT). Блоки, реализующие первые 6 функций, имеют один функциональный вход и один выход. Выходу присваивается результат выполнения соответствующей функции. Значение входов первых трех блоков считается заданным в радианах. Блоки, реализующие обратные преобразования (арксинус, арккосинус и арктангенс), выходное значение также формируют в радианах.
Вычисление арктангенса отношения (_ATAN). Данный блок отличается от остальных в этом функциональном разделе дополнительным входом. Дело в том, что этот блок перед вычислением арктангенса осуществляет операцию деления первого функционального входа на второй. Частное от этого деления используется в качестве аргумента для функции арктангенса.
Преобразование полярных координат в декартовы (PDT). На вход IL этого блока подается длина, а на IA – угол в радианах. На выходе QX формируется значение координат по оси абсцисс, а на QY - по оси ординат.
Алгебраические функции.
Вычисление экспоненты (EXP). Значению выхода присваивается результат вычисления экспоненциальной функции от величины входа INP.
Вычисление натурального логарифма (LN). Данный блок имеет один функциональный вход и один выход. Здесь вычисляется натуральный логарифм от величины входа, а полученный результат присваивается выходу.
Вычисление десятичного логарифма (LOG). Работа этого блока аналогична предыдущему. Только здесь вычисляется не натуральный, а десятичный логарифм.
Полином второй степени (POL). Данный блок реализует функцию преобразования – полином второй степени. На его вход K2 подается величина коэффициента при члене полинома второй степени, на вход K1 –при первой степени, на ADD – свободного члена и на INP – преобразуемое значение.
Расчет статистических характеристик (STAT). Этот блок вычисляет четыре характеристики. На выход MIN подается минимальное значение, на MAX – максимальное значение, на AVR –среднее значение, на SUM – сумма. На вход INP данного блока подается анализируемое значение. При подаче на вход CLR значения, отличного от 0, на всех выходах устанавливается значение, поданное на вход. Величина суммы не является интегралом. Она просто увеличивается на значение первого входа на каждом такте пересчета блока.
Перевод в проценты (t%). Эта функция переводить входную величину в проценты по отношению к заданному диапазону. Для ввода входной величины и границ диапазона используются три входа. На вход MIN подается минимальное значение диапазона, на INP - преобразуемое значение и на MAX - максимальное значение диапазона.
Перевод из процентов (f%). Данный блок переводит в реальную величину значение, заданное в процентах по отношению к установленному диапазону.
Среднее по трем точкам (AVR3). Значение выхода этого блока формируется как средняя величина от значений входов. Блок суммирует все входы (задействованные и незадействованные) и делит сумму на 3.
Среднее по восьми точкам (AVR8). Этот блок вычисляет среднее значение по входам IN1 , …, IN8, имеющим тип аргумент, константа или блок. В отличие от блока AVR3 данный блок суммирует только задействованные (несвободные) входы и делит сумму на количество таких входов (от 1 до 8).
Скользящее среднее (AVRT). Этот блок имеет один функциональный вход и один выход. Значение выхода формируется как средняя величина его функционального входа за последние четыре такта пересчета.
Интеграл (INTG). Данный блок интегрирует входную величину. Приращение интеграла на каждом пересчете определяется по среднему значению за такт. Время при интегрировании исчисляется в секундах. Интегрируемое значение подается на вход INP. При подаче на вход CLR отличного от нуля значения из него вычитается 1, и результат присваивается выходу.
Производная по двум точкам (DIFF). Данный блок рассчитывает значение производной как отношение приращения входа блока за такт пересчета ко времени такта. Время такта при этом измеряется в секундах.
Округление (NDGT). Этот блок округляет величину, поданную на вход INP, до заданной точности. Вход NDG используется для управления точностью округления. Его значения задают следующие режимы округления:
-2 – округление до сотен;
-1 – округление до десятков;
0 – округление до целых;
1 – округление до первого разряда после запятой;
2 – округление до второго разряда после запятой;
3 – округление до третьего разряда после запятой;
4 – округление до четвертого разряда после запятой.
Блок линейной интерполяции (LINTER). Данный блок реализует линейную интерполяцию величины, поданной на его вход INP. Таблицы точек для преобразования описываются в файле itabl.cfg. Он должен располагаться в директории проекта и имеет следующий формат:
QTABL=M
TABL00=N0
X1 Y1
X2 Y2
…….
XN0 YN0
…….
TABL<M-1>=NM-1
X1 Y1
X2 Y2
…….
XNM-1 YNM-1
где
M – количество таблиц, используемых в проекте (максимум 99);
Ni – количество узловых точек в i-й таблице (максимум 124);
X – входное значение;
Y – выходное значение.
Таблица выбирается входом SEL. При его отрицательном значении выходу присваивается величина из столбца X или Y одной из таблицы, номер строки в которой определяется значением входа INP. Номер таблицы и ее столбца следующим образом зависит от значения входа SEL: нечетные числа (-1, -3, -5 и т.д.) выбирают столбцы X таблиц 00, 01, 02 и т.д. соответственно, а четные (-2, -4, -6 и т.д.) – столбцы Y этих таблиц.
Функции сравнения.
Равенство (==). В случае равенства значений входов IN1 и IN2 этого блока значение его выхода устанавливается равным 1. В противном случае - 0.
Неравенство (<>). Отличие этого блока от предыдущего заключается в том, что его выход равен 1 при неравенстве входов, а 0 – при равенстве.
Больше (>). Значение выхода этого блока устанавливается равным 1, если вход IN1 больше входа IN2. В противном случае выход равен 0.
Меньше (<). Выход этого блока равен 1 если значение входа IN1 меньше значения IN2, а 0 - в противном случае.
Больше или равно (>=). Эта функция работает так же, как функция Больше. Но значение 1 будет сформировано на выходе блока и при равенстве входов.
Меньше или равно (<=). Этот блок формирует на выходе значение 1 при равенстве его входов IN1 и IN2.
Равенство нулю (==0). Работа этого блока аналогична блоку Равенство. Однако здесь вместо значения второго входа используется 0.
Неравенство нулю (<>0). Выход этого блока равен 1 при отличии его входа IN1 от 0.
Знаковая функция (SIGN). Выход SN+ блока равен 1 при положительном значении входа, а SN- - при отрицательном. Значение входа 0 обнуляет оба выхода.
Анализ на совпадение (CMP). Этот блок сравнивает значение входа INP с входами PD1, ..., PD6. Выходу присваивается номер входа, величина которого совпадает с входом INP. При этом входу PD1 соответствует значение 1, а PD6 – 6. При отсутствии совпадения величина выхода не меняется.
Анализ на совпадение (CMPN). Если значение входа INP не равно значению входа PD, то увеличивается на 1 значение выхода QT. Если QT превышает значение входа PT, то величина второго выхода (QE) устанавливается равной 1. Значения выходов QT и QE сбрасываются в 0 при каждом изменении входа INP.
Анализ на совпадение (CMPE). Данный блок работает так же, как и предыдущий. Однако здесь условием увеличения выхода QT является равенство анализируемого значения (вход INP) уставке (вход PD), а сброс выходов в 0 осуществляется при каждой ситуации неравенства INP и PD.
Управление по астрономическому времени (ALARM). Данный блок формирует на выходе 1 если астрономическое время совпадает с временем, заданном его входами. Это значение удерживается в течение одной секунды, затем выход обнуляется. При этом вход MON задает номер месяца, DAY – день месяца, DOF – день недели (от 1 – 7, первый день недели - воскресенье), H – час, M – минуту и S – секунду. Если хотя бы один параметр (вход MON, DAY, H, M, S) не совпадает, выход равен нулю. При формировании выходного сигнала, свободные и нулевые величины входов не учитываются.
Функции выбора.
Выбор из двух (SEL). Выход блока формируется значением одного из входов IN0 или IN1. Вход, адресуемый на выход, выбирается по входом IG. Если он равен 0, то на выход адресуется IN0, а если отлично от 0, то IN1.
Выбор из пяти (nSEL). Выход NUM этого блока показывает номер одного из входов I0…I4, значение которого адресуется на выход VAL. Коммутацией управляют входы REG и BLK. Если значение REG равно 0, на выход передается меньшее из входных значений, если 1 – большее. Первые 5 битов числа, поданного на вход BLK, определяют участие входов в выборе. Если бит равен 0, соответствующий ему по номеру вход рассматривается, 1 – игнорируется. Если входом BLK заблокированы все 5 сигнальных входов, значение выхода NUM равно -2.
Выбор максимального (MAX). Этот блок имеет два функциональных входа и один выход. На выход подается большее из входных значений.
Выбор минимального (MIN). Эта функция похожа на предыдущую. Разница заключается в том, что на выход подается меньшее из двух входных значений.
Ограничение (LIMIT). Этот блок ограничивает входную величину по заданным границам. Если значение попадает в заданный диапазон, то оно передается на выход без искажения. В противном случае передается значение нарушенной границы. Вход MIN задает значение нижней границы, MAX - верхней. Контролируемая величина подается на вход INP.
Выбор из трех (MUX). Данный блок коммутирует на выход один из трех входов. Номер этого входа задается значением входа NUM. Оно указывает, какой из коммутируемых входов направить на выход. При этом значение 0 задает выбор входа IN0, 1 – IN1, 2 – IN2. Если величина входа NUM принимает любое другое значение, то на текущем такте пересчета значение выхода блока не меняется.
Выбор из семи (MUX7). Работа данного блока полностью аналогична описанному выше блоку MUX. Отличие заключается в том, что данный блок позволяет осуществить коммутацию не трех, а семи входов.
Интервал (NLIM). На выходе этого блока формируется номер интервала, в который попало анализируемое значение. Оно подается на вход INP. Входы MIN и MAX задают границы, разбивающие диапазон изменения на три интервала. Диапазону между границами соответствует номер интервала 0, выше верхней границы - 1, ниже нижней - 2.
Запаздывание (LTN). Данный блок реализует звено чистого запаздывания. На выход Q0 подается текущее значение входа, на Q1- значение входа на предыдущем такте, на Q2 - два такта назад, на Q3 - три такта назад.
Триггеры и счетчики.
Импульс по включению (rTRIG).Этот блок формирует импульс длиной в один такт при подаче на его вход значения, отличного от 0. Другими словами, он формирует импульс по переднему фронту входного сигнала.
Импульс по выключению (fTRIG). Работа этого блока отличается от предыдущего тем, что единичный импульс формируется при установке входного сигнала равным 0, то есть по заднему фронту. Работа этого блока демонстрируется на следующем рисунке.
Триггер с приоритетом по установке (SR). Данный блок реализует функцию триггера. Его выходу присваивается значение 1, если величина входа INS равна 1. Для сброса значения выхода в 0 на вход INR подать значение 1. Приоритетным является вход INS. Поэтому если оба входа равны 1, то значение выхода будет равно 1.
Триггер с приоритетом по сбросу (RS). Этот блок, как и предыдущий, реализует функцию триггера. Однако для него приоритетным является сброс. Если оба входа блока равны 1, то на выходе будет 0.
Нарастающий счетчик (CTU). Функцией данного блока является подсчет количества тактов, в течение которых значение контролируемой величины было отлично от 0, и сравнение этого количества с заданной уставкой. Для реализации этой функции предусмотрены три функциональных входа и два выхода. На вход INP подается контролируемое значение. Вход CLR используется для смещения текущего значения счетчика. Отличное от 0 значение, поданное на этот вход, уменьшается на 1, и результат присваивается выходу QT. Третий функциональный вход (PV) предназначен для задания уставки счетчика. Если текущее значение счетчика превысит эту величину, то выходу блока QE будет присвоено значение 1. Текущее значение счетчика присваивается выходу QT. Оно увеличивается на 1 при каждом пересчете блока, когда вход INP был отличен от 0.
Убывающий счетчик (CTD). Этот блок, как и предыдущий, подсчитывает количество тактов, когда контролируемая величина (INP) была отличена от 0. Он имеет то же самое количество входов и выходов. Их функциональное назначение практически совпадает. Однако здесь значение счетчика не увеличивается, а уменьшается на единицу при выполнении данного условия. Начальным значением для счетчика является величина уставки (PV). При подаче на вход CLV величины, отличной от 0, ее уменьшенное на 1 значение вычитается из величины входа PV, и полученный результат присваивается выходу QT. Выходу QE присваивается значение 1 после того, как текущее значение счетчика станет меньше 0.
Семафор (SEMA). Данный блок реализует функцию, похожую на триггер с приоритетом по установке (SR). Отличие в алгоритме работы этого блока заключается в том, что отработка триггера по установке 1 на выходе осуществляется с задержкой на один такт. Сброс выхода в 0 осуществляется на том же такте, на котором будет сформировано отличное от 0 значение второго входа, при условии равенства 0 первого входа.
Комплексный счетчик (CTUD). Этот блок сочетает в себе функции нарастающего и убывающего счетчиков. Он имеет пять функциональных входов и три выхода. На рисунке показано назначение входов и выходов данного блока. Наличие значения, отличного от 0, на входе INH увеличивает значение счетчика на 1. Вход INL имеет обратное назначение: наличие на нем ненулевого значения уменьшает величину счетчика на 1. При ненулевых значениях обоих входов приоритетным будет первый, увеличивающий значение счетчика. Следующие два входа используются для сброса счетчика на 0 или (CLR) на значение уставки (CLV). Последний вход (PV) предназначен для задания величины уставки. На первом выходе блока (Q>V) формируется значение 1, если текущая величина счетчика равна или превышает значение уставки. Второй выход (Q<0) устанавливается в 1, когда значение счетчика становится меньше 0. Текущее значение счетчика присваивается третьему выходу блока (QT).
Комплексный счетчик 2 (_CTUD). Этот блок почти полностью аналогичен предыдущему за одним исключением. Значение счетчика остается неизменным при ненулевых значениях на его первом и втором входах одновременно.
Импульс произвольной длительности (TP). Этот блок предназначен для формирования импульсов заданной длительности. Он имеет два функциональных входа и два выхода. Изменение значения входа INP с 0 на любое положительное значение является сигналом на формирование импульса. Вход PT предназначен для задания длины импульса. Она устанавливается в тактах пересчета. Импульс формируется на выходе блока QI. Выход QT используется для вывода значения счетчика тактов, прошедших с момента начала формирования импульса. После завершения формирования импульса этот выход сохраняет свое значение до начала следующего импульса.
Задержка на включение (TON). Этот блок реализует запаздывание по формированию управляющего сигнала при команде на включение (перевод из 0 в 1). На вход INP подается сигнал управления. Если этот сигнал отличен от 0, то включается внутренний счетчик тактов пересчета. Как только этот счетчик станет равен значению входа PT, выходу QI будет присвоено значение 1. Текущее значение внутреннего счетчика подается на выход QT. При обнулении входа INP значение выхода QI становится равным 0 на том же такте пересчета.
Задержка на выключение (TOFF). Функция этого блока отличается от предыдущего формированием задержки не на установку 1 на выходе, а на ее сброс. При подаче на вход INP значения, отличного от 0, на его выходе QI формируется 1 на том же такте. Однако после того, как на вход управления будет подано значение 0, значение выхода сразу не изменится. Оно будет удерживаться равным 1 еще несколько тактов пересчета. Это количество тактов задается значением входа PT.
Генераторы.
Битовый меандр (G01). Данный блок осуществляет генерацию значений 0 и 1 на своем выходе. Причем на каждом такте пересчета осуществляется замена одного значения другим.
Бегущая единица (G1). Этот генератор имеет один выход типа HEX. Значение этого выхода содержит 8 бит. При работе генератора один из битов его выхода равен 1, а остальные - 0. На каждом такте пересчета единица смещается в следующий разряд. При достижении максимального разряда единица переходит в младший разряд.
Случайная величина в диапазоне [0, 1] (_RND1). Выход данного блока на каждом такте является случайной величиной с равномерным законом распределения в диапазоне от 0 до 1.
Случайная величина в диапазоне [0, 1000] (_RND2). Этот блок работает так же, как и предыдущий, но формирует случайное значение в диапазоне от 0 до 1000.
Линейно нарастающий сигнал (PILA). Данный блок генерирует значения выхода по линейной зависимости от количества тактов пересчета. На каждом такте выход увеличивается на 1. После достижения заданной величины амплитуды, значение выхода обнуляется. Величина амплитуды задается значением входа PV данного блока.
Единица с заданной вероятностью (GP01). Выход этого функционального блока может принимать значение 0 или 1 случайным образом. Вероятность, с которой будет формироваться значение 1, задается значением входа PRB. Величина, подаваемая на этот вход, должна быть целым и лежать в диапазоне от 0 до 1000. Этим границам соответствуют значения вероятности 0 и 1.
Последовательность единиц с заданной вероятностью (GPT0). Выход этого блока также может принимать два значения: 0 и 1. Вероятность появления значения 1 на выходе блока задается значением входа PRB. Вход PT задает продолжительность импульса – число тактов пересчета, в течение которых значение выхода должно оставаться равным 1 после ее появления в первый раз. Вход PRB может принимать значения от 1 до 10000. Этим границам соответствуют вероятности появления 1 на выходе 10-7 и 10-3.
Астрономическое время (TIME). Этот блок имеет три выхода. Значение выхода SEC равно текущей астрономической секунде, MIN - минуте, HR - часу.
Астрономическая дата (DATE). Этот блок имеет три выхода. На выходе DAY генерируется текущее значение дня месяца, на выходе MON - номер месяца, а на выходе YR – текущий год.
Период вызова программы (TSTEP). Этот блок измеряет период вызова данной программы в секундах с точностью до миллисекунды.
Синусоидальный сигнал (GSIN). Этот функциональный блок позволяет осуществить генерацию синусоидального сигнала. Сигнал генерируется в диапазоне от -1 до 1. Период колебаний синуса задается в секундах значением входа PT. Следующий рисунок демонстрирует работу данного блока.
Регулирование.
Звено PID (PID). Этот блок формирует выходное значение по ПИД-закону от величины, поданной на его вход INP. Формула вычисления выходного значения выглядит следующим образом:
Q := KP * INP + KD * (INP - INP1)/dt + S KI *INP i*dt
где
-
Q
выход блока;
INP
значение входа на текущем такте пересчета;
INP1
значение входа на предыдущем такте пересчета;
INP i
значение входа на i-м такте пересчета;
n
общее число тактов пересчета;
dt
время между тактами пересчета;
KP
коэффициент при пропорциональной составляющей;
KD
коэффициент при дифференциальной составляющей;
KI
коэффициент при интегральной составляющей.
Для ввода значений настроек используются три входа: KP - коэффициент при пропорциональной составляющей, KD - при дифференциальной, KI - при интегральной. Модуль подаваемого на вход KI отрицательного значения передается на выход. Далее при подаче на вход KI неотрицательного значения регулирование начинается с установленной величины. Для ограничения величины управляющего воздействия используются входы блока MIN и MAX. Первый из них задает нижний предел управления, а второй – верхний. Если величина управления выходит за любую из этих границ, то выходу присваивается величина соответствующего входа и перестает накапливаться интегральная составляющая закона регулирования. Данный блок вычисляет величину управления по значению рассогласования регулируемой величины и задания, которое надо вычислять с помощью отдельного функционального блока.
Адаптивное регулирование. APID. Данный блок позволяет организовать регулирование по PID-закону с автоматическим вычислением настроек регулятора. Блок APID имеет семь функциональных входов и шесть выходов. Его входы имеют следующее назначение:
ADP – вход управления. Значение этого входа определяет следующие режимы работы блока:
0 – регулирование с использованием настроек, поданных на входы KP, KI и KD;
1 – вычисление настроек регулятора;
2 – сброс всех результатов вычислений (значения настроек на выходах блока, критическая частота и амплитуда генератора);
3 – сброс критической частоты и амплитуды;
4 – установка режима нефорсированного управления, т.е. изменение задания не отрабатывается в пропорциональной и дифференциальной составляющих. В этом случае переходный процесс более затянут, но сокращается величина динамической погрешности. По умолчанию регулятор работает в этом режиме;
5 – установка режима форсированного управления, т.е. при смене задания произойдет скачок по управлению;
10 – регулирование с использованием вычисленных настроек, сформированных на выходах KP, KI и KD;
ZDN – задания регулятору;
INP – значение регулируемого параметра;
KP – коэффициент при пропорциональной составляющей;
KD – коэффициент при дифференциальной составляющей;
KI – коэффициент при интегральной составляющей;
AMP – ограничения на амплитуды. Положительное значение – на амплитуду сигнала, добавляемого к выходу регулятора (по умолчанию 10, минимальная – 4), а отрицательное – на колебания выхода объекта (по умолчанию 1, минимальная – 0.5). При старте МРВ значение этого входа должно быть положительным (задавать ограничение амплитуды на входе объекта).
На выходы данного блока подаются следующие величины:
Q – величина управляющего воздействия;
KP – коэффициент при пропорциональной составляющей;
KD – коэффициент при дифференциальной составляющей;
KI – коэффициент при интегральной составляющей;
STS – индикатор текущего состояния адаптации.
Критерием вычисления настроек является минимизация среднеквадратичной ошибки регулирования. Для настройки регулятора на вход объекта подается пробный гармонический сигнал. При этом амплитуда колебаний регулируемого параметра удерживается в пределах от 0.3% до 1%. Получаемые настройки обеспечивают переходные процессы с малой степенью колебательности. Реализованный алгоритм является помехоустойчивым. Он работает даже в том случае, если дисперсия шума в несколько раз превышает амплитуду пробных колебаний выходного сигнала. При настройке он исключает появление неустойчивых режимов. Быстродействие процесса самонастройки алгоритма управления зависит от уровня шумов и неслучайных возмущений, действующих на объект управления. При равенстве входа ADP 0 или 10 блок реализует функцию PID-регулятора. В первом случае используются настройки на входах KP, KD, KI, а во втором – на выходах с теми же именами (значения полученные при адаптации). Для перехода в режим адаптации (определение оптимальных настроек регулятора) следует присвоить входу ADP значение 1. При этом процесс регулирования осуществляется параллельно с процессом настройки. Индикатором хода настройки регулятора является величина выхода STS.
