Текст
                    Московский государственный технический университет
имени Н.Э. Баумана
Учебное пособие
Н.П. Деменков
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
ПРОМЫШЛЕННЫХ
КОНТРОЛЛЕРОВ
Издательство МГТУ имени Н.Э. Баумана


МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. Н.Э. БАУМАНА Н.П. Деменков ЯЗЫКИ ПРОГРАММИРОВАНИЯ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ Под редакцией К.А. Пупкова Рекомендовано редсоветом МГТУ им. Н.Э. Баумана в качестве учебного пособия Москва Издательство МГТУ им. Н.Э. Баумана 2004
УДК 62.529(075.8) ББК 32.965 Д30 Рецензенты: В.И. Попов, Г.И. Ревунков Деменков Н.П. Д 30 Языки программирования промышленных контроллеров: Учебное пособие / Под ред. К.А. Пупкова. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2004. - 172 с.: ил. ISBN 5-7038-2608-Х В учебном пособии содержится краткое описание языков про- граммирования промышленных контроллеров в соответствии с ме- ждународным стандартом IEC 61131-3. Для студентов, изучающих курсы «Управление в технических системах», «Управляющие ЭВМ и комплексы», «Проектирование систем управления производственными процессами», «Алгоритми- ческое и программное обеспечение систем управления». Ил. 89. Табл. 7. Библиогр. 7 назв. УДК 62.529(075.8) ББК 32.965 Учебное пособие выпущено при финансовой поддержке ЗАО «Шнейдер Электрик» Николай Петрович Деменков ЯЗЫКИ ПРОГРАММИРОВАНИЯ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ Учебное пособие Редактор О. М. Королева Корректор Л. И. Малютина Компьютерная верстка А.Ю. Ураловой Подписано в печать. 18.11.2004. Формат 60x84/16. Бумага офсетная. Печ. л. 10,75. Усл. печ. л. 10,0. Уч.-изд. л. 9,86. Тираж 300 экз. Изд. № 37. Заказ Издательство МГТУ им. Н.Э. Баумана. 105005, Москва, 2-я Бауманская ул., 5. ISBN 5-7038-2608-Х © МГТУ им. Н.Э. Баумана, 200-
ВВЕДЕНИЕ Автоматические регуляторы, или программируемые логиче- ские контроллеры (ПЛК), являются широко распространенными средствами автоматизации в составе локальных и распределенных систем контроля и управления [1]. Термином ПЛК обозначают устройства, осуществляющие пре- образование, обработку, хранение информации и выработку ко- манд управления или управляющих/регулирующих воздействий, реализованные на базе микропроцессорной техники и являющиеся по сути специализированными управляющими вычислительными комплексами для работы в локальных и распределенных системах управления в реальном масштабе времени [2]. Требования, предъявляемые к ПЛК, разнообразны, так как ПЛК используются для всевозможных видов деятельности (рабо- чими, технологами, инженерами). ПЛК может представлять собой либо целый, неделимый продукт, поставляемый одним производи- телем, либо несколько продуктов - составных частей, поставляе- мых одним или разными производителями. По функциональному назначению в ПЛК можно выделить следующие основные части: процессор, осуществляющий прием, обработку и выдачу инфор- мации; устройство сопряжения процессора с объектом (УСО), уст- ройство сопряжения процессора с человеком-оператором и про- граммное обеспечение (ПО). Языки программирования ПЛК во многом определяются кон- кретными приложениями, а также требованиями современных сложных распределенных систем управления. Историческое развитие ПЛК привело к возникновению разных решений, связанных с конкретным производителем и в той или иной степени удовлетворяющих общим стандартам (DIN 19239, 19237, 40719 Part 6 и VDI 2880). Однако элементы языков, несмот- ря на похожесть, у разных производителей отличались, существо- ва*1И машинно-зависимые особенности языков, которые приходи- лось учитывать. 3
Для решения этой проблемы Международная электротехниче-1 екая комиссия (МЭК) - всемирная организация, с 1906 года разра- батывающая международные стандарты в области электротехники, электроники, телекоммуникаций и средств информационных тех- нологий - основала в 1975 году рабочий комитет 65А для разра- ботки стандарта для ПЛК, который в 1993 году принял на ПЛК международный стандарт IEC 1131 (в наст&ящее время действует ТЕС 61131-3), третья часть которого имеет дело с языками для ПЛК [3]. В него вошли пять языков: LD (Ladder Diagram) - вариант класса языков релейно- контактных схем; FBD (Functional Block Diagram) - аналогичен функциональной схеме электронного устройства с использованием логических эле- ментов; SFC (Sequential Function Chart) - язык диаграммного типа, ана- логичный блок-схемам алгоритмов; ST (Structured Text) - текстовый высокоуровневый язык обще- го назначения, по синтаксису напоминает Паскаль; IL (Instruction List) - текстовый язык низкого уровня, по син- таксису напоминает Ассемблер. Языки LD и FBD являются данью традициям (т. е. аппаратным аналогам этих языков - релейным схемам и функциональным схе- мам электронных устройств на базе логических элементов типа И, ИЛИ, НЕ ит. д.). Язык LD - графический язык, основанный на принципах ре- лейно-контактных схем (элементами релейно-контактной логики являются: контакты, обмотки реле, вертикальные и горизонталь- ные перемычки и др.) с возможностью использования большого количества различных функциональных блоков. Язык релейных схем существует со времен Т. Эдисона и адап- тирован к ПЛК в начале 70-х годов прошлого века. Впервые поя- вился в пакетах программирования ПЛК компаний Allen-Bradly и Modicon [4]. Символика этого языка была заимствована из проек- тирования в области электротехники. Достоинствами языка LD являются: представление программы в виде электрического потока (близок специалистам по электротехни- ке), наличие простых правил, использование только булевых выра- жений. Язык LD имеет большой круг пользователей, рационален для ручной оптимизации специфических критических мест кода. Язык FBD - это полностью графический язык высокого уров- ня, обеспечивающий управление потоками данных, включающих 4
типы Позволяет использовать очень мощные алгоритмы про- ВСе вызовом функций и функциональных блоков, имеет большую гГблиотеку блоков, удовлетворяет непрерывным динамическим пессам, хорош для сложных вещей подобно ПИД-регуляторам /ПИД - пропорционально-интегрально-дифференциальный регуля- тор, PID-регулятор), массивам и т. д. PFBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть соединены между собой, FBD более эффективен для представления структур- ной информации, чем язык релейно-контактных схем. FBD замечателен для небольших приложений. Язык IL является языком низкого (машинного) уровня, что су- щественно облегчает, например, условный или безусловный вызов функциональных блоков и функций, выполнение назначений и условных или безусловных переходов внутри секции, похож на Ассемблер. Язык 1L позволяет создавать высокоэффективные и оптимизированные функции. Его можно рекомендовать для напи- сания наиболее критических мест в программе. Ассемблероподобные языки использовались для программиро- вания компьютеров в 50-е годы XX века и все еще предлагаются некоторыми изготовителями ПЛК, особенно программистами, поддерживающими микроРС. Корни языка IL лежат в языке STEPS компании Siemens [4]. IL можно программировать с помо- щью любого текстового редактора. Язык ST является языком высокого уровня (типа Паскаля). Был популярен в середине 70-х годов XX века для сложных компью- терных приложений. Служит для создания процедур со сложной логикой. Может использоваться как в главных программах, так и в теле функции или FBD, а также для описания действий внутри элементов редакторов SFC или Flow Chart. Обладает высокой чи- табельностью исходного кода: ключевые слова, такие, как AND, OR, NOT, IF, THEN, ELSE, WHILE (и т. д.) легко понимаемы; прост в сопровождении, если имена переменных понятны, имеют- ся комментарии, код хорошо структурирован. Язык SFC предложен в 1979 году (его прототипом является язык Grafcet компании Telemecanique, стандарт IEC 848) как графический язык, предназначенный для описания функций последовательных °перации и позволяющий яснэе и однозначное определение желае- мого поведения системы ynpj пения. Отличается строгим математи- ческим определением, (каждг е операционное состояние может быть Декодировано с очень небольшим анализом). Удобен для описания 5
как последовательных процессов, так и пакетных или параллельных процессов, легко комбинируется с другими языками (язык специфи- каций). Обеспечивает улучшение понимания оборудования при фор- мировании модели приложения. Обладает развитыми механизмами синхронизации. Использует простые динамические правила. Диагностика языка SFC позволяет обнаружить ошибки проекта до того, как приложение тестируется в режиме Online. Интерактивно анимируемый язык SFC также служит для облегчения диагностики оборудования и ошибок системы управления и после ввода в дейст- вие. Использование языка SFC как диагностического инструмента может уменьшать среднее время устранения таких неполадок. SFC широко принят как стандарт в Европе. Языки SFC и ST, в паре составляющие полную и завершенную среду для программирования ПЛК, не всегда удовлетворяют поль- зователей, например, из-за быстродействия или невозможности дос- тупа к системным ресурсам, что заставляет прибегать к использова- нию языков типа С, который не входит в стандарт ЕС 61131-3 (далее - стандарт). Стандарт определяет языки программирования, синтаксис, вид объектов, структуру ПО, объявление переменных. Стандарт описывает детально синтаксис языков программиро- вания, поэтому пользователь найдет один и тот же синтаксис во всех пакетах, поддерживающих стандарт, будь то пакет ISaGRAF компании CJ International или пакет Concept компании Schneider Electric. Графическое представление прикладных программ - это типичная особенность программирования ПЛК. Текстовые языки широко используются при программировании компьютеров. Программирование логики ведется с применением языков SFC, LD, FBD, Е, ST, а также дополнительных интерактивных редакто- ров для описания переменных, определений и конфигурации вво- да/вывода. Все языки программирования контроллеров взаимоувязаны - для них стандарт определяет единые модели ПО, связных функ- циональных блоков и модель собственно программирования. Стандартизированы общие элементы этих языков и, прежде всего, используемые символы, типы данных и переменные. Определены функции и функциональные блоки, их декларации, наборы стан- дартных функций и функциональных блоков, понятия программ на этих языках. Стандарт определяет и такие общие элементы, как конфигурации, ресурсы, пути доступа, задачи. Все это даст воз- можность программирования на любом из этих языков с обеспече- 6
нием генерации кодов единой программы. Языки программирова- ния определены в стандарте таким образом, что допускают разра- ботку приложений на их смеси, которая впоследствии собирается в единую исполняемую программу. Кроме того, стандарт открыт для использования других языков программирования. И наконец, в стандарте рассмотрена специфика каждого из языков. Требования к языкам программирования для ПЛК: наглядное описание автоматизируемых технологических про- цессов (ТП) и дальнейшая отладка в терминах исходного описания; мобильность - способность к переносу на различные аппарат- ные и операционные платформы; эффективное исполнение программы в реальном времени (РВ). Наглядность описания определяется характером объекта и сле- дующими задачами по управлению объектом. 1. Задачи параллельной обработки большого числа логических контуров (сотен и тысяч) с обработкой исполнительных действий при наступлении тех или иных событий. В основе логического контура лежит проверка истинности логической функции от не- скольких переменных, а событие равнозначно истинности этой функции. Задачи такого рода характерны, например, для таких технологических объектов, как электростанции, химические про- изводства и производства по переработке нефти [5]. Задача адек- ватно и наглядно описывается системой булевых уравнений. Все языки стандарта, за исключением SFC, хорошо подходят для опи- сания подобных задач, поскольку они или содержат в себе средст- во представления булевых функций (языки IL, ST), или являются графической формой их отображения (языки LD, FBD). 2. Задачи управления процессом, проходящим в своем разви- тии через ряд состояний (шагов, стадий). Переход от одного со- стояния к другому происходит по событиям, формируемым по сигналам датчиков процесса. Такие задачи управления возникают, например, при управлении транспортно-складскими системами, агрегатными станками, робототехническими комплексами, харак- терны они и для объектов, перечисленных в п. 1, в частности, при пуске и останове турбины и др. Задачи данного типа наиболее на- глядно представляются автоматными моделями. В стандарте такая модель строится с использованием языка SFC (разметка состоя- нии, логика управления) и любого другого языка (описание дейст- в и, связанных с состоянием, и событий, предписывающих смену состояний). Заметим, что подобные задачи могут быть полностью представлены с помощью других языков стандарта, например язы- 7
ка FBD с использованием элементов памяти - триггеров, но в этом случае автоматная модель будет выражена неявно. 3. Задачи автоматического регулирования (ПИД-законы, не- четкое управление и т. д.) встречаются практически везде. Здесь, как правило, используются библиотеки заранее разработанных компонентов - графических блоков для языков LD и FBD и под- программ для языков ST и IL. 4. Задачи управления распределенными технологическими объектами, оптимизационные, а также задачи, связанные с интел- лектуальным анализом данных. Задачи такого типа решаются в сложных технологических объектах типа химических производств. Здесь в качестве средств адекватного описания могут использо- ваться языки ST, универсальные типа С, C++, Паскаль, сценарные типа Visual Basic, объектно-ориентированные типа Java. Мобильность языков, т. е. способность к переносу на различ- ные аппаратные и операционные платформы, может поддержи- ваться для языков стандарта в случае использования пакета от од- ного разработчика. Это связано с невозможностью сосуществова- ния в одной разработке программ на одинаковых языках от разных поставщиков, так как требования стандарта IEC 61131-3 носят ре- комендательный характер, а значит, приводят к различиям в реа- лизации языков у разных производителей. Эффективное исполнение в РВ дает ответ, насколько быстро сможет отреагировать система управления (ПЛК) на происшедшее событие. Обычно используется понятие «временной цикл», т. е. заранее задаваемый интервал времени, например, в диапазоне 10...300 мс, в течение которого ПЛК сможет гарантированно отреа- гировать на входное воздействие. Для обеспечения более быстрой реакции служат так называемые инициативные сигналы, которые об- рабатываются по прерыванию (от десятков до сотен микросекунд). Для широкого круга приложений задача обеспечения требуе- мого временного цикла решается достаточно легко благодаря вы- сокому быстродействию процессоров, используемых в ПЛК. На- пример, в контроллерах Modicon применяютс я процессоры компа нии Intel от Intel 286 до Pentium. Тем не менее здесь есть одна про- блема: неэффективное использование процессора при управлений объектами, в которых осуществляется в основном обработка логи- ческой информации, при которой используется только один разряд из 32. Если найти решение этой проблемы, то по крайней мере можно будет понизить класс применяемого процессора, что вы- годно по экономическим соображениям. 8
Согласно требованиям стандарта, не предопределенные объек- ты должны иметь имя и тип, объявленные программистом, предо- пределенные объекты распределяются на три зоны: зону памяти (%М), зону входов (%1) и зону выходов (%Q). Объектами могут быть: биты (X), байты (В), слова (W), двойные слова (D), «длин- ные» слова (L) - 64 бита Ограничения стандарта: не фиксируется имя задач; размер графического редактора оставляется на выбор пользователя; нет минимального количества функций, готовых к реализации, но если используется имя по стандарту (функциональный блок и т. п.), то оно должно соответствовать стандарту; сервисные утилиты и средства разработки и отладки приложения (редакторы, языки, документирование и т. п.) не определены; нет точных правил вы- полнения программы (например, для функциональных блоков); не описана конвертируемость языков. Сертификат ЕС 61131—3 на сегодня не существует, нет определенного «класса соответствия». Каждый разработчик, объявивший свое соответствие норме, дол- жен представить документацию таблиц соответствия, а также спи- сок дополнительных расширений. Преимущества стандарта для конечных пользователей состоят в том, что уменьшается стоимость обучения, пользовательские приложения однородны, структура программ идентична, исполь- зуются предопределенные объекты и т. п. Разнообразие стандарт- ных языков позволяет каждую функцию приложения запрограм- мировать наиболее подходящим для данной задачи языком. Следование стандарту позволяет разработчикам ПЛК обеспе- чить соответствие разработки техническим требованиям, предъяв- ляемым потребителями, и даже ввести дополнительные функции, что не могут сделать мелкие поставщики ПО. Изучение методологии проектирования систем автоматическо- го и автоматизированного управления на основе современных ин- формационных технологий, составной частью которых являются языки программирования ПЛК, - необходимый элемент в подго- товке специалистов по системам управления. Пгш посо^ии описывается синтаксис языков программирования ПС на примере пакета Concept [6,7]. На кафедре «Системы авто- матического управления» МГТУ им. Н.Э. Баумана накоплен опре- деленный опыт по применению Concept при выполнении студен- Ми кафедры в течение ряда лет курсовых и дипломных работ. 9
1. ЯЗЫК ФУНКЦИОНАЛЬНЫХ БЛОК-СХЕМ - FBD Язык FBD (Function Block Diagram) - это графический язык программирования высокого уровня, обеспечивающий управление потоками данных всех типов. Позволяет использовать очень мощ- ные алгоритмы простым вызовом функций и функциональных блоков. Удовлетворяет непрерывным динамическим процессам. Замечателен для небольших приложений. Хорош для сложных ве- щей подобно ПИД регуляторам, массивам и т. д. Имеет большую] библиотеку 6hokob.FBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть соединены между собой, FBD является более эффективным для представления структурной информации, чем язык релейно- контактных схем. Объекты языка FBD: EFB (Elementary Function Block) - элементарные функции и элементарные функциональные блоки; они находятся в библиоте- ках. Логика обработки в EFB (программа) написана на языке С и не может быть изменена в редакторе FBD. Изменять можно только параметры блоков; DFB (Derived Function Block) - функции и функциональные блоки пользователя; они конструируются пользователем из EFB; UDEFB (User Defined Elementary Function Block) - разработан-] ные пользователем на языке С; они оформляются как объекты библиотек. Для EFB, DFB и UDEFB принято общее обозначение - FFB.I Каждый из перечисленных объектов представляет собой подпро-1 грамму, которая помещается в одну из библиотек, используемых при разработке программы работы ПЛК. Таким образом обеспечи-1 вается возможность вызова и хранения FFB в форме библиотек. Разработка программы для ПЛК осуществляется с помощью гра-1 фического редактора FBD посредством формирования блок-схемы из перечисленных выше FFB, которые объединяются друг с другом ли- бо посредством внешних (фактических) параметров FFB (перемен- ные, соответствующие входам и выходам pFB), т. е. таблично, либа непосредственно линиями связи - графическими связями. РедактироЧ вание обычно выполняется с помощью мыши или клавиатуры. Последовательность (очередность) обработки отдельных FFB в программе (в каждой FBD-секции) определяется потоком данных] внутри секции. 10
Теоретически каждая секция может включать любое число FFB соответственно, любое число входов и выходов. Однако жела- тельно разделить сложную программу на ряд логических единиц, т е. на различные секции. В дополнение к перечисленным выше объектам языка FBD ре- дактор позволяет поместить текст (комментарий) в секцию FBD. ADDDINT 1 Д.Элементарные функции и функциональные блоки — EFB Графическое изображение элементарной Function функции приведено на рис. 1.1. Функция имеет несколько входов и один выход. Входы всегда расположены слева, выходы - справа. Назначение функции (ADDDINT) отображается внутри блока, а обозначение имени экземпляра функции, представля- ющего собой функциональный номер (.6.5), - над блоком. Функ- циональный номер не может быть изменен, он всегда имеет вид .n.m где ,п - порядковый номер секции; .т - порядковый номер функции. Функции не имеют внутренних состояний (условий) - это ком- бинационные схемы. Одним и тем же значениям входных величин будут соответствовать одни и те же значения величин на выходе для всех (неоднократных) исполнений функций. Например, функ- ция сложения двух величин обеспечивает тот же самый результат при каждом (неоднократном) исполнении. Графическое изображение элементарного функционального блока приведено на рис. 1.2. С левой стороны располагаются вхо- ды, с правой - выходы. Назначение функционального блока (CTU DINT) представляется внутри блока, а обозначение имени экземпляра, представ- ляющего собой его функциональный номер (FВ1_3_6), - над блоком. Имя экземпляра FFB устанавливается автоматически, хотя и может редакти- роваться в диалоговом окне свойств FFB. Мя экземпляра должно быть уникальным По всему проекту, при этом следует пом- Function block FBL3 6 CTUJOINT CU ” Q R CV PV Рис. 1.2 11
нить, что не существует различия между символами верхнего и нижнего регистров. Если назначаемое имя экземпляра уже суще- ствует, то об этом будет выдано предупреждение, тогда необходи- мо выбрать другое имя. Имя экземпляра EFB должно формироваться в соответствии со стандартом (соглашением) IEC 61131—3 на имена, в противном случае будет выдано сообщение об ошибке. Автоматически выбранное имя экземпляра FFB будет всегда иметь структуру: FBInm где FBI означает, что речь идет об экземпляре функционального блока; п - порядковый номер секции в программе; m - порядковый номер FFB-объекта в секции. Функциональные блоки (например, цифровые автоматы, по- следовательностные схемы) могут иметь различные состояния. Одним и тем же значениям входных величин могут соответство- вать различные значения на выходе для различных (неоднократ- ных) исполнений функциональных блоков. Например, при одних и тех же значениях входа (единичные импульсы) счетчика значения выхода будут различными, т. е. будут увеличиваться по отноше- нию к предыдущему, если счетчик суммирующий, и уменьшаться, если счетчик вычитающий. Все FFB могут быть вызваны с дополнительными (необязатель- ными) формальными параметрами: EN (входом) и ENO (выходом). Конфигурирование (включение или выключение) параметров EN и ENO осуществляется в диалоговом окне Property (свойства) FFB, которое вызывается посредством команд Object, Property (Объекты, Свойства), или двойным нажатием левой клавиши (ЛК) мыши на изображении FFB. Если FFB вызывается с параметрами EN/ENO и при этом значе- ние EN равно нулю, то алгоритмы, определяемые FFB, не будут вы- полняться. В этом случае значение ENO автоматически устанавлива-| ется равным 0. Если же значение EN равно 1, то алгоритмы, опреде- ляемые FFB, будут выполнены. После выполнения этих алгоритмов без ошибок значение ENO автоматически устанавливается равным 1. Если же возникает ошибка во время выполнения этих алгоритмов, то значение ENO будет установлено равным 0. Поведение FFB одинаково как в случае вызова FFB с EN = 1, так и при вызове без параметров EN /ENO. 12
1.2. Производные функциональные блоки - DFB Derived Function Block Пользовательские (или производные) функциональные блоки DFB являются функциональными блоками, которые сконструиро- ваны пользователем из EFB-объектов в среде Concept-DFB. В DFB не существует различий между функцией и функцио- нальным блоком. Не принимая во внимание их внутреннюю струк- туру, к ним всегда обращаются как к функциональным блокам. Графическое изображение функ- ционального блока типа DFB при- ведено на рис. 1.3. Входы всегда расположены слева, выходы - справа. Назначение DFB (ЕХАМР) представляется внутри блока, а обозначение имени экземпляра DFB (FBI 3 7) - над блоком. Имя экземпляра устанавливается автоматически, но оно может редак- FBI 3 7 ЕХАМР INI OUT1 IN2 OUT2 IN3 Рис. 1.3 тироваться в диалоговом окне свойств DFB. Имя экземпляра должно быть уникальным во всем проекте. Если вводимое имя совпадает с уже существующим, то будет выдано предупреждение, тогда необходимо будет выбрать другое имя. Имя экземпляра должно соответствовать стандарту на имена, в противном случае будет выдано сообщение об ошибке. Автоматически созданное имя экземпляра будет всегда иметь структуру FBInm где FBI - блок DFB; п - порядковый номер секции; m - порядко- вый номер DFB-объекта в секции. При программировании DFB имеется различие между двумя типами переменных: внутренними переменными и входны- ми/выходными переменными. Внутренними переменными являются переменные, которые используются только внутри логики DFB. Эти переменные могут быть изменены только в среде Concept-DFB. Такое изменение за- тем применяется ко всем экземплярам создаваемого DFB. Разре- шенные типы переменных: нелокализованные (неразмещенные) переменные, нелокализованные многоэлементные (структурные) переменные, константы и литералы. Нелокализованные переменные, нелокализованные многоэле- ментные переменные и константы объявляются в редакторе пере- менных (Variable Editor). 13
Входные и выходные переменные требуются, чггобы передавать значения в DFB или принимать значения из DFB. Эти два типа пере- менных также называются формальными параметрами. Переменные обнаруживаются блоком DFB и представляются в FBD-редакторе как входы/выходы. Имя формального параметра (имя входа/выход а), тип данных и позиции входов/выходов (для FBD-редактора) на DFB оп- ределяются в редакторе переменных. Для входных переменных мо- жет быть определено дополнительное начальное значение. Входные переменные, т. е. входы, в FBD-редакторе располагаются всегда слева на DFB, а выходные переменные, т. е. выходы, всегда справа на DFB. Разрешается до 32 входных и до 32 выходных переменных. Ширина значка DFB будет автоматически корректироваться к длине имен входов/выходов. Входные и выходные переменные являются всегда нелокализованными переменными. Во время выполнения программы значения фактических параметр ров передаются в программу DFB через формальные параметры и за- тем распределяются. Значения этих формальных параметров опреде- ляются значениями фактических параметров, которые связаны с соот- ветствующим входом/выходом DFB. Фактическими параметрами мен гут быть прямые адреса, локализованные переменные, нелокализован- ные переменные, локализованные многоэлементные переменные, де- локализованные многоэлементные переменные, компоненты много] элементных переменных, константы или литералы. Это позволяет не только вызывать несколько раз один и тот же DFB, но и назначать ка- ждому экземпляру DFB его фактические параметры. UDEFB - это условное обозначение для разрабатываемых поль- зователем элементарных функций и функциональных блоков; их раз- работка осуществляется с использованием дополнительного средств С Toolkit и программируются они на языке С+—. Эти UDEFB могу использоваться пакетом Concept в качестве элементов его библиотек. Concept не делает различий между UDEFB и EFB. 1.3. Создание программы на языке FBD Создайте новую секцию, выберите язык FBD и введите имя секцщ (до 32 символов), которое должно быть уникальным для всего проект и должно удовлетворять соглашениям стандарта ЕС 61131-3 по име- ни, в противном случае появится сообщение об ошибках. СогласпГ стандарту, только символы позволяются как первый символ имен эк земпляра. В результате описанных выше действий появится поле дИ размещения блоков из 23 строк и 30 столбцов. 14
В редакторе FBD на фоне плоскости окна видна некоторая ло- ическая сетка. В процессе конфигурирования каждый FFB раз- мешается в ячейках этой сетки. Если FFB помещаются вне ячейки сетки или в случае перекрытия их с другими FFB, то появляется сообщение об ошибке и FFB не будет размещен в этой ячейке. Внешние параметры, задаваемые в явном виде на входах/выходах FFB могут пересекаться другим объектом, но не должны нару- шать границы ячеек сетки. Чтобы вставить FFB в секцию, достаточно набрать команду меню Objects ® Select FFB.... Диалоговое окно FFBs from Library будет открыто. С помощью командной кнопки Library... ||^[ в этом диалоговом окне осуществляется выбор библиотеки, из кото- рой будут выбираться FFB. Для отображения уже созданных DFB, чтобы выбрать один из них, используется командная кнопка DFB. Теперь поместите выбранный FFB в секцию. Если линия связи, обеспечивающая соединение с другим FFB, зафиксирована, то это соединение будет контролироваться редак- тором FBD. Если же подобное соединение запрещено, то будет выдано сообщение о его запрещении и линия связи не будет сге- нерирована. В процессе формирования связей между FFB допус- каются перекрытия и перекрещивания с другими связями и FFB. Базируясь на логике программы, входу/выходу FFB с помощью редактора переменных можно назначить: переменную, константу, литерал, прямой адрес (рис. 1.4). Рис. 1.4 15
Нелокализованная переменная, назначаемая входу/выходуд может использоваться как маркер, т. е. для создания контуров или для передачи значений между различными секциями. С помощью локализованной переменной, связанной с конкрет- ным адресом, входу/выходу может быть назначен сигнал вво- да/вывода аппаратного обеспечения. Константа может быть перемещена в другие секции. Чтобы просмотреть список всех объявленных переменных или входов/выходов и сделать выбор из этого списка, используйте ко- мандную кнопку Lookup. Если переменная не была объявлена, используйте командную кнопку Variable Editor... для того, чтобы вызывать диалоговое окно для объявления нелокализованных переменных, констант, вход- ных или выходных параметров. В этом окне можно объявить имя, тип данных, начальное значение и/или комментарий для нелокали- зованных переменных. Для констант объявляется имя, тип данных, значение и в случае необходимости комментарий. Текстовые объекты не могут перекрываться с FFB, но могут пе- рекрываться с линиями связи. Текстовые объекты не занимают па- мять в ПЛК, потому чего они, как правило, не загружаются в ПЛК. 1.4. Пример Составим программу на языке FBD, реализующую систему' управления перемещением горизонтального крана. Имеется три дискретных входа системы управления («кнопки! без памяти»): ON LE - начать перемещение влево; ON RI - начать перемещение вправо; STOP - остановить движение. Имеется два выхода для исполнительных механизмов: MOT LE - перемещение крана влево; MOT RI - перемещение крана вправо. Двигаясь в одном направлении, кран не воспринимает команду изменения направления перемещения. Чтобы изменить направле- ние перемещения, кран необходимо остановить. Одновременная подача единичных значений на выходы не до-, пускается. Время перемещения крана в каждом направлении нужно кон- тролировать. Перемещение влево должно прекращаться через 5 с, а перемещение вправо - через 10 с. 16
1Л Г-4 Q 5 Ph р^^ребуется запрограммировать предложенную задачу на языке Один из вариантов решения представлен на рис. 1.5. 17
2. ЯЗЫК ЛЕСТН ИЧНОЙ ДИАГРАММЫ - LD Язык LD (Ladder Diagram) - графический язык, основанный на принципах релейно-контактных схем (элементами релейно- контактной логики являются: контакты, обмотки реле, вертикал! ные и горизонтальные перемычки и др.) с возможностью исполь зования большого количества различных функциональных блоков. Язык релейных схем существует со времен Т. Эдисона и адаптере ван к ПЛК в начале 70-х годов прошлого века. Символика этог языка была заимствована из проектирования в области электро- техники. Достоинствами языка LD являются: представление программ! в виде электрического потока (близок специалистам по электро» технике), наличие простых правил, использование только булевых выражений. Он имеет большой круг пользователей, рационале для ручной оптимизации специфических критических мест кода. Структура LD-секции соответствует ступеням для действий переключателей реле. Объекты языка программирования LD обеспечивают средства для структурирования организационной единицы ПЛК (секции) некоторое количество контактов, катушек и FFB. Эти объект! взаимосвязаны через фактические параметры или связи. Порядок обработки индивидуальных объектов в LD-секции! определяется потоком данных внутри секции. Ступени, под- ключенные к левой шине питания, обрабатываются сверху вниз (соединение к левой шине питания). Ступени внутри секции, которые не зависят друг от друга, обрабатываются в порядке размещения. Теоретически каждая секция может содержать любое числ< объектов, которые означают любое число входов и выходов Од- нако желательно подразделить всю программу на ряд логически! модулей, т. е. на различные секции. Секции LD могут быть преобразованы в FBD-секции с помо- щью команды меню File ® Export... ® Program: IEC-Text для экс- 18
та затем в языки ST или 1L, затем они могут быть переимпор- пованы командой меню File ® Import ® Program: IEC text. Пре- образование FBD-секций в LD-секции невозможно 2.1. Элементы языка LD Контакты. Контактом является LD-элемент, который пере- дает состояние горизонтальной связи левой стороны горизон- тальной связи на правой стороне. Это состояние - результат бу- левой AND-операции состояния горизонтальной связи с левой стороны с состоянием ассоциированной переменной или прямого адреса. Контакт не изменяет значение связанной перемен- I ной или прямого адреса. Г"”’'"""' г"""""'"' В нормально разомкнутых контактах * (рис. 2.1) состояние левой связи копи- руется к правой связи, если связанная Рис. 2.1 булева переменная находится в состоянии ON. Иначе состояние пра- вой связи будет OFF. В нормально замкнутых контактах (рис. 2.2) состояние левой связи копи- I IN1 руется к правой связи, если связанная I................... булева переменная находится в сос- | ' ’ тоянии OFF. Иначе состояние правой связи будет OFF. Рис. 2.2 В контактах для обнаружения передних фронтов (рис. 2.3) правая связь устанавливается в состояние ON для одного про- граммного цикла, если имеется переход связанной булевой переменной из сос- тояния OFF в ON, и левая связь I........... I**! 's л находится в состоянии ON в это же самое | время. Иначе правая связь будет в сос- тоянии OFF. Рис. 2.3 В контактах для обнаружения задних фронтов (рис. 2.4) правая связь устанавливается в состояние ON для одного про- граммного цикла, если имеется переход связанной булевой переменной из сос- I тояния ON в OFF, и левая связь находит- ....." ся в состоянии ON в это же самое ' время. Иначе состояние правой связи бУДет OFF. Рис> 2,4 19
Катушки. Катушка является LD-элементом, который передает I состояние горизонтальной связи на левой стороне неизменяемым! горизонтальной связи на правой стороне. В этом процессе состоя-1 ние связанной переменной или прямого адреса будет сохранено. I мн ост ® катушках (рис. 2.5) состояние ле- I вой связи копируется к связанной буле-1 вой переменной и к правой связи. Катушки обычно следуют за коитак-1 тами или блоками EFB, но они могут! также сопровождаться контактами. В инвертированных катушках (рис. 2.6) состояние левой связи J копируется к правой связи. Инвертиро-1 ванное состояние левой связи копирует- I ся к связанной булевой переменной. Ес-1 ли левая связь находится в состоянии! OFF, правая связь будет также в состоя- нии OFF и связанная переменная будет в состоянии ON. В установленных катушках (рис. 2.7) состояние левой связи 1 копируется к правой связи. Связанная! булева переменная устанавливается в состояние ON, если левая связь находит- ся в состоянии ON, иначе она остается! неизменной. Связанная булева перемен- ная может быть сброшена с катушкой! сброса. 1 В катушках сброса (рис. 2.8) состояние левой связи копируется! к правой связи. Связанная булева пере- менная устанавливается в состояние OFF, если левая связь находится в со- стоянии ON, иначе она остается неиз4 менной. Связанная булева переменная может быть установлена с катушкой ус- тановленной. В катушках для обнаружения передних фронтов (рис. 2.9) состояние левой связи копируется к правой связи. Связанная булева пере- менная будет установлена в состояние ON для одного программного цикла- если имеется переход левой связи и* состояния OFF в ON. Рис. 2.5 nil Рис. 2.6 XW1 ©err J I----- Рис. 2.7 mi OUT -| I---- Рис. 2.8 ИИ OUT J |---(F\ Рис. 2.9 20
В катушках для обнаружения задних Фронтов (рис. 2.10) состояние левой свя- I Зи копируется к правой связи. Связанная I—I г~к9'— ------- булева переменная будет установлена в состояние ON для одного программного цикла, если имеется переход левой связи Рис*2,10 из состояния ON в OFF. фактические параметры. Когда программа выполняется, через фактические параметры пересылаются значения из процесса или от других фактических параметров до контакта или на вход FFB. После обработки эти значения перемещаются к фактическим параметрам катушек и выходов FFB. В контактах и катушках фактические пара- метры могут быть прямыми адресами, локализованными (размещен- ными) переменными или нелокализованными (неразмещенными) переменными. На входах/выходах FFB фактические параметры могут быть прямыми адресами, размещенными переменными, неразмещен- ными переменными, константами или литералами. Для контактов и катушек типом данных фактического пара- метра должен быть тип данных BOOL. На входах/выходах FFB типы данных фактических параметров должны соответствовать типу данных ввода/вывода. Единственным исключением являются обобщенные входы/выходы FFB, где тип данных определяется формальным параметром. Связь. Связями являются соединения между контактами, ка- тушками и блоками FFB. Несколько связей могут быть соединены с контактом, катушкой или выходом FFB. Пункты любого такого соединения отмечаются жирной точкой. Типы данных соединенных входов/выходов должны совпадать. Связи могут быть отредактированы в режиме Select. Разреша- ется перекрытие другими объектами. При размещении контактов и катушек горизонтальные связи автоматически связываются со смежными, несвязанными контак- тами или катушками, если контакты или катушки и входы/выходы FFB находятся на той же самой вертикали. Связь с шиной питания УДет установлена, только если контакт помещен поблизости. Ес- ли катушка или контакт помещены на уже существующую гори- зонтальную связь, она будет автоматически разорвана, и контакт или катушка вставлены (это не применимо к команде Move). При Размещении фактических параметров они могут накладываться на Другой объект, но не нарушать рамки фрейма секции. Если соеди- Ие с другим объектом установлено через одну связь, эта связь 21
будет проверена. Если соединение не разрешено, то появляется сообщение и связь не будет сгенерирована. При удалении контактов или катушек любые присоединенные контакты или катушки будут также удалены. Те же самые условия используются здесь при их размещении. Связи не могут использоваться для конфигурации контуров,! потому что невозможно однозначно определить порядок обработ-' ки в секции. Контуры должны быть созданы с помощью фактиче- ских параметров. Горизонтальные связи автоматически устанавливаются после размещения. Частным случаем связи является вертикальная связь. Верти- кальная связь используется как логическое ИЛИ. Эта форма свя- зывания по ИЛИ позволяет связать 32 входа (контакта) и 64 выхо- да (катушек, связей). Интерактивные функции. Редактор LD предлагает два режи-1 ма анимации: анимация двоичных переменных и связей; анимация выбранных объектов. Эти режимы также доступны при отображении DFB-блока. Режим анимации выбранных объектов отображает текущее сиг- нальное состояние выбранных контактов, катушек, связей, пере- менных, многоэлементных переменных и литералов в окне редакто- ра и активизируется командой меню Online ® Animate selected. Если левая шина питания, контакт, катушка, связь красного цвета, то левая шина питания, контакт, катушка, связь (двоичная) соответственно имеют значение 0. Если левая шина питания, контакт, катушка, связь зеленого цвета, то левая шина питания, контакт, катушка, связь (двоичная) । соответственно имеют значение 1. Связь желтого цвета передает многоэлементную переменную (ото- бражение значений вызывается двойным щелчком мыши по связи). Переменная с желтым фоном - многоэлементная переменная (отображение значений с двойным щелчком на переменной). Числовое значение на входе/выходе FFB (желтый фон) - теку- щее значение переменных. Числовое значение на связи (желтый фон) — значение, в на- стоящее время передаваемое связью. При выборе числового значения на входе/выходе FFB будут' отображаться имя переменной, ее прямой адрес (если он имеется) и комментарий. 22
побранные объекты остаются выбранными даже после подачи ой команды Animate Selected, чтобы поддержать эти объекты ^я^удуш^0 чтения или для ПРОСТОГО изменения объектной рас- печатки* Сигнальные состояния двоичных связей могут также отоора- жаться с помощью команды Online ® Animate booleans. 2.2. Создание программы на языке LD Для создания программы на языке LD необходимо создать новую LD-секцию и ввести имя секции. Появится информационное поле для размещения элементов языка LD на 230 строк и 52 столбца. Имя секции (до 32 символов) должно быть уникальным для всего проекта и должно удовлетворять соглашениям стандарта по имени, в противном случае появится сообщение об ошибках. Если введенное имя секции уже существует, Вы будете предупреждены, и должны выбрать другое имя. В LD-редакторе фон окна является логической сеткой, которая показывает так называемую левую шину питания на левой сторо- не. Эта левая шина питания соответствует фазе (L-шина) ступени. Как и в ступени, только те объекты LD (контакты, катушки), кото- рые соединены с источником питания, т. е. подключены к левой шине питания, будут отредактированы во время программирова- ния секции LD. Правая шина питания, которая соответствует нейтральному проводнику, оптически не отображается. Но внут- ренне все катушки и выходы FFB подключены к ней, что обеспе- чивает протекание тока. Чтобы вставить контакт или катушку в секцию, нужно открыть главное меню Objects и выбрать желаемые контакт или катушку. Контакты и катушки могут также быть выбраны в инструменталь- ной панели. Поместите контакты или катушки в секцию. Чтобы вставить FFB в секцию, выберите команду меню Objects ® Select FFB.... Диалоговое окно FFBs from Library будет открыто. Используйте командную кнопку Library... в этом диалоговом окне, чтобы найти библиотеку, из которой можно выбрать FFB. Вы мо- жете также использовать ко аандную кнопку <DFB> для отобра- жения созданных блоков DF 3, чтобы выбрать один из них. Теперь поместите выбранный FFB ь секцию. Во время размещения объекты выравниваются в растре сетки. При размещении объектов снаружи фрейма секции или при перекры- 23
вании другим объектом появится сообщение об ошибках, и объект не будет размещен. При размещении контактов и катушек они автома- тически связываются со смежными, несвязанными контактами и ка- тушками (максимум 3 растровых единицы), если контакт или катуш- ка находится на той же самой вертикали. Связь с шиной питания бу- дет установлена, только если контакт помещен поблизости. Если ка- тушка или контакт помещены в уже существующую горизонтальную связь, то она автоматически будет разорвана и контакт или катушка! вставлены. Если размещаются фактические параметры, они могут накладываться на другой объект, но не так, чтобы нарушить границу фрейма секции. Если связь служит как соединение с другим объек- том, это соединение будет проверено. Если соединение не разрешено, то появится сообщение, и связь не будет сгенерирована. После того как все блоки FFB будут размещены, закройте диа- логовое окно. Используйте команду Objects ® Selection Mode, чтобы активи- зировать режим Mode и перемещать контакты, катушки и блок FFB к выбранной позиции. Используйте команду Objects ® Link, чтобы активизировать режим соединения и установить соединения между контактами, катушками и блоками FFB. Установите соединение между контак- тами, блоками FFB и левой шиной питания. При создании связей разрешаются перекрытия другими связя- ми и объектами и пересечения с ними. Если выбран блок FFB, его комментарий будет отображаться в первом столбце строки стату-1 са. Если выбран фактический параметр, его имя (если оно есть), его прямой адрес и его комментарий будут отображаться в первом столбце строки статуса. Несвязанные контакты, катушки и входы/выходы FFB имеют по умолчанию значение 0. В дополнение к объектам, рассмотренным выше, текст также может быть помещен в LD-секцию. Размер этого текстового объ- екта зависит от длины текста. В зависимости от размера текста размер объекта может быть расширен на большее количество мо- дулей сетки в вертикальном, а также в горизонтальном направле- нии. Текстовым объектам не разрешено накладываться на другие объекты, хотя они могут накладываться на связи. Текстовые объекты не занимают место в ПЛК, потому что текст, как правило, не загружается в ПЛК. Теперь используйте команду Objects ® Selection Mode, чтобы повторно активизировать режим выбора, и дважды щелкните 24
ой по контакту или катушке. Откроется диалоговое окно р nerties: LD object, в котором контакту или катушке может быть .даиачен фактический параметр. В зависимости от логики программы контакту или катушке и входам/выходам FFB могут быть назначены: переменная (локализованная или нелокализованная); константа; литерал; прямой адрес. 2.3. Пример По условию задачи в (см. разд. 1.4) создать схему на языке LD. Возможное решение задачи представлено на рис. 2.11. Рис. 2.11 25
3. ЯЗЫК СПИСКА ИНСТРУКЦИЙ - п. Текстовый язык IL (Instruction List) относится к ассемблеропо- добным языкам, т. е. к языкам низкого (машинного) уровня, что существенно облегчает, например, вызов функциональных блоков и функций «условно» или «безусловно», выполнение назначений и условных или безусловных переходов внутри секции. Язык 1L позволяет создавать высокоэффективные и оптимизи- рованные функции. Его можно рекомендовать для написания наи- более критических мест в программе. Ассемблероподобные языки использовались для программиро- вания компьютеров в 50-е годы прошлого века и все еще предла- гаются некоторыми изготовителями ПЛК, особенно программи- стами, поддерживающими микроРС. Программу можно написать с помощью любого текстового редактора. При вводе ключевых слов, разделителей и комментариев в ре- дакторе предусмотрена непосредственная по буквам проверка. При обнаружении ключевого слова, разделителя или комментария они идентифицируются через цветовое оттенение. При введении не- санкционированных ключевых слов (назначений или операторов) они будут также идентифицироваться через цветовое оттенение. Согласно стандарту IEC 61131—3 ключевые слова должны быть введены в символах верхнего регистра. Пробелы и метки табуляции не влияют на синтаксис, они мо- гут использоваться везде. Генерация объектного кода вместе с проверкой синтаксиса бу дет выполняться, когда секция закрыта. Любые найденные ошибки затем отображаются в окне сообщений. Однако проверка синтак- сиса может также осуществляться во время создания программы или блока DFB командой Project ® Analyze Section. 3.1. Команды (инструкции) языка IL Список инструкций составлен из последовательности команд. Каждая команда начинается в новой ячейке и состоит из операто- ра (в случае необходимости с модификатором) и (если требуется для 26
тветствующей операции) сопровождается одним или несколькими С° андами (рис. 3.11 Если используется несколько операндов, они ° еляются запятыми. Команде может предшествовать метка с двоеточием. Команда может сопровождаться комментарием. 1_аЦе1 Operators J^pperarids ЯЛ Modifier (’contact actuatorД л and contact actua; :(*'-Сап--оП^*К.:’. J;; comments Рис. 3.1 Язык IL - так называемый аккумуляторно-ориентированный язык, т. е. каждая команда использует или изменяет текущее со- держимое аккумулятора (тип временной памяти). Стандарт IEC 61131-3 маркирует этот аккумулятор как результат. Список команд должен всегда начинаться с оператора LD (ко- манда загрузки аккумулятора) и заканчиваться оператором сохра- нения ST. Пример сложения: LD 10 ADD 25 ST А Пример показывает загрузку литерала 10 в аккумулятор, до- бавление литерала 25 и внесение результата в переменную А. Содержимое переменной и аккумулятора теперь 35. Любая после- дующая команда работала бы с содержимым аккумулятора 35, ес- ли она не начинается с LD. Операции сравнения также всегда касаются аккумулятора. Бу- лев результат сравнения вносится в аккумулятор, следовательно, это является текущим содержанием аккумулятора. Пример сравнения: LDB GT 10 В примере значение переменной В загружено в аккумулятор и сравнивается с литералом 10. Если В меньше или равно 10, содер- 27
жимое аккумулятора равно О (FALSE). Если В больше чем 10, со- держимое аккумулятора есть 1 (TRUE). Операнды. Операндом может быть литерал, переменная структурированная переменная, элемент структурированной пере- менной, выход FB/DFB или прямой адрес. Когда осуществляется доступ к массивам переменных (ARRAY), элемент указателя допускает только литералы и пере- менные типа ANYJNT. Пример сохранения: LDvarl[i] ST var2.otto[4] В табл. 3.1 приведены заданные по умолчанию типы данных прямого адреса. Таблица 3.1 Вход Выход Заданные по умолчанию типы данных Возможные типы данных %1Х,%1 %QX,%Q BOOL BOOL %1В %QB BYTE BYTE %IW %QW INT INT, UINT, WORD %ID %QD REAL REAL, DINT, UDINT, TIME I Назначение типов данных, отличных от заданных по умолча- нию типов данных прямого адреса, должно выполняться через яв- ное объявление (VAR...ENDVAR). В пакете Concept объявление VAR...END VAR не может использоваться для объявления пере- менных. Объявление переменных очень легко выполнить через редактор переменных. Операнд и текущее содержимое аккумулятора должны иметь одинаковый тип данных. Если необходимо обработать операнды различных типов данных, сначала выполняется преобразование типов. Исключением является тип данных TIME вместе с арифме- тическими операторами MUL и DIV. Эти два оператора позволяют обработать операнд типа данных TIME вместе с операндом типа данных ANYJNUM. В этом случае результат этих команд иметь тип данных TIME. Пример преобразования: LDil INTTOREAL ADDr4 ST гЗ будет 28
В примере целая переменная il преобразована в вещественную переменную прежде, чем она добавлена к вещественной перемен- ной г4. Пример умножения: LDt2 MULi4 STtl В примере переменная времени t2 умножена на целую пере- менную i4, а результат сохраняется в переменной времени 11. Модификаторы. Модификаторы проводят выполнение пред- шествующего оператора. Модификатор N используется, чтобы инвертировать побитно значение операнда. Модификатор N может применяться только к операндам типа данных ANYBIT. Пример модификатора N: LD А ANDNB ST С В примере С = 1, если А - 1 и В = 0. Модификатор С используется, чтобы выполнить соответствующую команду, если значение аккумулятора равно 1 (TRUE). Модификатор С может применяться только к операндам типа данных BOOL. Пример модификатора С: LD А AN D В JMPC START В примере переход к START выполняется, только если А = 1 (TRUE) и В = 1 (TRUE). Если модификатор С объединен с модификатором N, соответ- с,вующая команда выполняется, только если значение аккумуля- ТоРа равно булеву 0 (FALSE). Пример CN: LDa and в JMPCN start 29
В примере переход к START выполняется, только если А = d (FALSE) и/или В = О (FALSE). Модификатор (левая круглая скобка) используется, чтобы за. держать оценку операнда до появления оператора (правая круглая скобка). Число операций правой круглой скобки должно быть рав. ным числу модификаторов левой круглой скобки. Круглые скобки могут быть вложенными. Пример: LD А AND В AND( С ORD ) STE В примере Е будет равно 1 если С и/или D равны 1, а А и В равны 1. Этот же пример может также программироваться следующим образом: LD А AND В AND( LDC OR D ) STE Операторы. Оператор является символом для арифметической или логической операции, которая будет выполнена, или для вы- зова функции. Операторы являются обобщенными, т. е. они автоматичеСМ корректируются к типу данных операнда. Операторы языка программирования IL приведены в табл. 3 ь 30
Таблица 3.2 Опера' top Модифи- катор Возможные операнды Значение оператора LD N Литерал, переменная, прямой адрес типа дан! тых AN Y Загружает значение операнда в аккумулятор ST N Переменная, прямой адрес типа данных ANY Сохраняег значение аккумулятора в операнде S Нет Переменная, прямой адрес типа данных BOOL Устанавливает операнд в 1, если содержимое аккумулятора равно 1 R Нет Переменная, прямой адрес типа данных BOOL Устанавливает операнд в 0, если содержимое аккумулятора равно 1 AND N,N(,( Литерал, переменная, прямой адрес типа данных ANY_BIT Логическое AND OR N,N(,( Литерал, переменная, прямой адрес типа данных ANYBIT Логическое OR XOR N, N(, ( Лит ерал, переменная, прямой адрес типа данных ANY_ВГГ Логическое исклю- чающее OR ADD ( Ли терал, переменная, прямой адрес типа данных ANY_NLJM или TIME Сложение SUB ( Литерал, переменная, прямой адрес типа данных ANY NUM или TIME Вычитание MUL ( Литерал, переменная, прямой адрес типа данных ANY_NUM или TIME Умножение DIV ( Литерал, переменная, прямой адрес типа данных ANY_NUM или TIME Деление GT ( Литерал, переменная, прямой адрес типа данных ANY ELEM Сравнение, т. е. > GE ( Литерал, переменная, прямой адрес типа данных ANY_ELEM Сравнение, т. е. > _EQ ( Литерал, переменная, прямой адрес типа данных ANY_ELEM Сравнение, т. е. ~ NE ( Литерал, переменная, прямой адрес типа данных ANY_ELEM Сравнение, т. е. < > LE ( Литерал, переменная, прямой адрес типа данных ANY ELEM Сравнение, т. е. < LT ( Литерал, переменная, прямой адрес типа данных ANY_ELEM Сравнение, т. е. < IMP C, CN Метка Переход на метку CAL C.CN FBNAME (имя экземпляра) Вызов функционально- го блока или DFB TUNC- JVAMe Нет Литерал, переменная, прямой адрес (тип данных подчинен функции) Выполнение функции ) Нет Нет Редактирование отсро- ченных действий 31
Оператор LD используется, чтобы загрузить значение операнда в аккумулятор. Длина данных аккумулятора автоматически кор. ректируется к типу данных операнда при его выполнении. То же самое применяется к типам данных пользователя. Пример LD: LDA ADD В ST Е Здесь загруженный операнд может быть инвертирован с помо- щью модификатора N (только если операнд имеет тип данных; ANYBIT). Оператор ST используется, чтобы сохранить текущее значение аккумулятора в операнде. Тип данных операнда должен соответство- вать типу данных аккумулятора. Пример ST: LDA ADD В STE Последующее вычисление с результатом этого примера зави- сит от того, используется или нет оператор LD после ST: LDA ADD В STE STX SUB 3 STY Операнд, который будет сохранен, может быть инвертирован с помощью модификатора N (только если операнд имеет тип данных ANY BIT). Оператор S используется, чтобы установить значение операнда равным 1, если текущее содержимое аккумулятора булева 1. Пример S: LDA SOUT 32
д примере значение OUT будет равно 1, если А = 1. g большинстве случаев оператор S используется в паре с one- „а,сброса R (триггер). Е Пример Rb. lda sout ldc ROUT Пример показывает RS-триггер (доминирующий сброс). Оператор R используется, чтобы установить операнд в 0, если текущее содержимое аккумулятора булева 1. Пример R: LDA ROUT В примере значение OUT будет равно 0, если А = 1. В большинстве случаев, оператор R используется в паре с опе- ратором установки S (flip-flop). Пример SR: LD А ROUT LDC SOUT Пример показывает SR-триггер (доминирующая установка). С помощью оператора AND получают логическую связь И ме- жду содержимым аккумулятора и операндом. Пример AND: LDA AND В AND С STD В примере значение D будет равно 1, если А, В и 33
С помощью оператора OR получают логическую связь ИЛИ между содержимым аккумулятора и операндом. Пример OR: LDA ORB ORC STD В примере значение D будет равно 1, если А, В или С равны 1. С типами данных BYTE и WORD связывание происходит по- разрядно. Операнд OR может использоваться с модификаторами N и/или левой скобкой ( ( ). С помощью оператора XOR получают логическую исключи- тельную связь ИЛИ между содержимым аккумулятора и операндом. Пример XOR: LDA XORB STD В примере значение D будет равно 1, если А или В равны 1. Если А и В имеют одинаковое состояние (оба равны 0 или 1), D будет равно 0. Если связаны больше чем два операнда, результат с нечетным! номером единичных состояний будет равен 1, а с четным номером единичных состояний будет равен 0. Пример XOR: LD А XORB XORC XORD XORE STF В примере переменная F будет равна 1, если 1-я, 3-я или 5-Я переменные равны 1. Переменная F будет равна 0, если 0-я, 2-я или 4-я переменные равны 1. 34
С типами данных BYTE и WORD связывание происходит по- доператор XOR может использоваться с модификаторами N я/или левой скобкой ( ( ). С помощью оператора ADD значение операнда добавляется к содержимому аккумулятора. Пример ADD: LDA ADD В ADD С STD Пример соответствует формуле D = А + В + С. Оператор ADD может использоваться с модификатором левой круглой скобкой ((). С помощью оператора SUB значение операнда вычитается из содержимого аккумулятора. Пример SUB: LDA SUB В SUB С STD Пример соответствует формуле D = А - В - С. Оператор SUB может использоваться с модификатором левой круглой скобкой ( ( ). С оператором MUL содержимое аккумулятора умножается на значение операнда. Пример MUL: EDA MUL В MULC STD Пример соответствует формуле D = А • В С. В общем случае операнд и текущее содержимое аккумулятора л°ДЖны иметь одинаковый тип данных. Исключением является Тип Данных TIME вместе с MUL. В этом случае содержимое акку- 35
мулятора типа данных TIME может быть обработано вместе с one. рандом типа данных ANY NLJM. После выполнения списка ко- манд содержимое аккумулятора будет иметь тип данных TIME, Пример MUL: LDt2 MUL i4 ST tl В примере переменная времени t2 умножается на целую пере- менную 14, а результат будет сохранен в переменной времени tl. Оператор MUL может использоваться с модификатором левой круглой скобки ( ( ). С помощью оператора DIV содержание аккумулятора делится на значение операнда. Пример DIV: LD А DIVB DIVC STD Пример соответствует формуле D = А / В / С. В общем случае операнд и текущее содержимое аккумулятора должны иметь одинаковый тип данных. Исключением являегся тип данных TIME вместе с DIV. В этом случае содержимое акку- мулятора типа данных TIME может быть обработано вместе с one рандом типа данных ANY_NUM. После выполнения списка ко- манд содержимое аккумулятора будет иметь тип данных TIME. Пример DIV: LDt2 DIV i4 ST tl В примере переменная времени t2 делится на целую перемен ную i4, а результат будет сохранен в переменной времени tl. Оператор DIV может использоваться с модификатором левой круглой скобки ( ( ). Оператор GT (больше чем) сравнивает содержимое аккуму лятора с содержимым операнда. Если содержимое аккумулятора больше, чем содержимое операнда, результатом будет булев* 36
нйца. Если содержимое аккумулятора меньше, чем содержимое операнда или равно ему, то результатом будет булев нуль. Пример GT: LDA GT10 STD В примере операнд D будет равен 1, если А больше, чем 10, иначе 0. Оператор GT может использоваться с модификатором левой круглой скобки ((). Оператор GE (больше чем или равно) сравнивает содержи- мое аккумулятора с содержимым операнда. Если содержимое аккумулятора больше, чем содержимое операнда или равно ему, то результатом будет булева единица. Если содержимое акку- мулятора меньше, чем содержимое операнда, результат равен булеву нулю. Пример GE: LD А GE10 STD В примере операнд D будет равен 1, если А больше, чем 10 или равно 10, иначе 0. Оператор GE может использоваться с модификатором левой круглой скобки ((). Оператор EQ (равно) сравнивает содержимое аккумулятора с содержимым операнда. Если содержимое аккумулятора равно со- держимому операнда, результатом будет булева единица. Если содержимое аккумулятора не равно содержимому операнда, ре- зультатом будет булев нуль. Пример EQ: LDA EQ 10 STD В примере значение D будет равно 1, если А = 10, иначе 0. Оператор EQ может использоваться с модификатором левой кРУглой скобки ((). 37
Оператор NE (не равно) сравнивает содержимое аккумулятора с содержимым операнда. Если содержимое аккумулятора не равно содержимому операнда, результатом будет булева единица. Если содержимое аккумулятора равно содержимому операнда, резуль- татом будет булев нуль. Пример NE: LD А NE 10 STD В примере значение D будет равно 1, если А ф- 10, иначе 0. Оператор NE может использоваться с модификатором левой круглой скобки ( ( ). Оператор LE (меньше чем или равно) сравнивает содержимое аккумулятора с содержимым операнда. Если содержимое аккуму- лятора меньше содержимого операнда или равно содержимому операнда, результатом будет булева единица. Если содержимое аккумулятора больше, чем содержимое операнда, результатом бу- дет булев нуль. Пример LE: LDA LE 10 STD В примере значение D будет равно 1, если А меньше чем 10 или равно 10, иначе 0. Оператор LE может использоваться с модификатором левой круглой скобки ( ( ). Оператор LT (меньше чем) сравнивает содержимое аккумуля- тора с содержимым операнда. Если содержимое аккумулятора меньше, чем содержимое операнда, результатом будет булева еди- ница. Если содержимое аккумулятора больше содержимого опе- ранда или равно ему, то результатом будет булев нуль. Пример LT: LDA LT10 STD В примере значение D будет равно 1, если А меньше, чем 14 иначе 0. 38
Оператор LT может использоваться с модификатором левой круглой скобки ( ( ). Оператор JMP (переход или прыжок) выполняет условный или безусловный переход к метке. Метка идентифицирует целевую команду. Целевая команда может быть помещена выше или ниже команды прыжка. Переход в другие секции не позволяется. Пере- ход может быть только на начало выражений, потому что иначе неопределенное значение может обнаружиться в аккумуляторе. Оператор JMP может использоваться с модификаторами С и CN (только если операнд имеет тип данных ANY_BIT). Пример JMPC: start: LD А AND В ORC STD JMPC start Оператор CAL вызывает функциональный блок или блок DFB условно или безусловно. Оператор CAL может использоваться с модификаторами С и CN (только если операнд имеет тип данных ANY_BIT). Оператор FUNCNAME (имя функции) используется, чтобы выполнить функцию. Оператор правой круглой скобки используют, чтобы начать редактирование отсроченного оператора. Число действий правой круглой скобки должно быть равно числу модификаторов левой круглой скобки. Круглые скобки могут быть вложены. Пример: LDA AND В AND(C ORD ) STE В примере значение Е будет равно 1, если С и/или D равны 1, а л и В равны 1 39
Метка. Метки используются как назначения для переходов. Метка должна всегда быть первым элементом строки. Метка (д0 32 символов) должна быть уникальна во всем проекте или в DFB, нет никакого различия между верхним и нижним регист- рами. Метка должна удовлетворять соглашениям стандарта по имени. Метки отделяются от следующей команды двоеточием ( : ). Метки позволяются только в начале выражений, потому что неопределенное значение может обнаружиться в аккумуля- торе. Пример метки перехода: start2: LD А ST counter.CU LDB ST counter.R LDC ST counter .PV CAI. counter JMPCN start4 startl: LD A AND В ORC STD JMPC start3 LDA ADDE IMP start5 start3: CAL counter ( CU:=A R:=B PV:=C ) JMP startl start4: JMPC startl start5: 40
Пример демонстрирует возможные команды назначения пере- хода: первая LD-команда вызова блоков FB/DFB с назначением входного параметра (ссылка на start2); «нормальная» LD-команда (ссылка на startl); команда CAL, которая не работает с назначениями входного параметра (ссылка на start3); JMP instruction (ссылка на start4); конец списка команд (ссылка на start5). Команда VAR.. .ENDVAR. Команда VAR предназначена для объявления используемых функциональных блоков и для объявления прямых адресов, если они не должны использоваться с заданным по умолчанию типом данных. В пакете Concept команда VAR не может применяться для объявления переменных. Объявление переменных очень легко вы- полняется через редактор переменных. Команда END VAR идентифицирует конец объявления. Команда VAR...END_VAR вводится только один раз в начале секции. Все блоки FB/DFB и используемые прямые адреса, кото- рые отличаются от заданного по умолчанию типа данных, должны быть здесь объявлены. Объявление блоков FB/DFB и прямых адресов применяется только к текущей секции. Если тот же самый тип FFB или тот же самый адрес должен также использоваться в другой секции, тип FFB или адрес соответственно должен быть объявлен снова в этой секции. Объявление функциональных блоков и блоков DFB. Перед вызовом функционального блока или блока DFB он должен быть объявлен с использованием команд VAR и END VAR. В этом объявлении каждому применяемому экземпляру блока FB/DFB назначается имя. Имя экземпляра должно быть уникально для все- го проекта; нет никакого различия между заглавными или строч- ными буквами. Имя экземпляра должно удовлетворять соглашени- ям стандарта по имени или появится сообщение об ошибках. Тип функционального блока, например CTDJDINT, ROL WORD, ^N-REAL, будет введен после имени экземпляра. Для обобщенных типов функциональных блоков (например, иХ, SEL) не имеется никакого обозначения типа данных. Оно Удет определено типом данных фактических параметров. Если тактические параметры состоят из литералов, для функционально- блока будет принят тип данных INT. 41
Любое число имен экземпляра может быть объявлено для бло- ков FB/DFB. Пример объявления функциональных блоков и DFB приведены на рис. 3.2. leafInstance VAR , -v- RAHP UP, RAMP DOWS, RAMP X TOM ; COUNT s CTUJDISrr ; “ / C1OCK 5 SYSCLOCK ; / Pulse : TON ; ' EBD_VAR\. *4. VAR AT %OW1:WURD ; AT %H15:imrr ; АТ ЮМ5;!)ПГГ : АТ МГ04:ПИЕ ; ПЮ_УАК Рис. 3.3 Рис. 3.2 Объявление прямых адресов. В этом объявлении каждому используемому прямому адресу, который имеет тип данных, отли- чающийся от заданного по умолчанию типа данных, назначается тип данных по выбору. Пример объявление прямых адре- сов приведен на рис. 3.3. Вызовы функциональных бло- ков и блоков DFB. Чтобы найти имена доступных функциональных I блоков и блоков DFB, нужно обра- титься к библиотекам блоков. Суще- ствуют три способа для вызова функционального блока и блока DFB: оператором с CAL и списком входных параметров; оператором CAL и загрузкой или сохранением входных параметров; с помощью входных операторов. Если функциональный блок не имеет входов или входы не бу- дут параметрированы, функциональный блок должен все равно вызываться прежде, чем его выходы могут использоваться. Каждый экземпляр FB/DFB может вызываться только один раз. Оператор CAL со списком входных параметров. Функ- циональные блоки и DFB могут вызываться командой, состоя- щей из команды CAL, следующей за аменем экземпляра FB/DFB и списка распределения значений (фактических пара- метров) к формальным параметрам в круглых скобках. Порядок распечатки формальных параметров в обращении функциональ- ного блока не имеет значения. Список фактических параметров 42
может иметь конец строки сразу же после запятой. Не требует- ся чтобы всем формальным параметрам были присвоены значе- ния. Если формальному параметру не задано значение, началь- ное значение, определенное в редакторе переменных, будет ис- пользоваться при выполнении функционального блока. Если начальное значение не было определено, будет использоваться значение по умолчанию (0). Команда CAL (..) завершает назначение параметров функцио- нального блока и DFB. После этого передача значений в FB/DFB больше невозможна. Теперь могут считываться только выходные значения. Примеры CAL со списком входных параметров приведены на рис. 3.4 и 3.5. Name pf instance f FC СИ. CLOCK CAL COTWT(C»s-CI.OCK.CLK3r R:-^IXJ.O, PVt-lpp) CAL Pulse (IB: -COUST.Q, FT: tl> COUrr.Q \ Actualparameters Рис. 3.4 Оператор CAL с загрузкой и сохранением входных пара- метров. Функциональные блоки и DFB могут вызываться спи- ском команд, состоящим из команд загрузки фактических пара- метров, сохранения в формальных параметрах и вызова команды CAL. Порядок загрузки и сохранения параметров не имеет значе- ния. Список фактических параметров может иметь конец строки сразу же после запятой. Не требуется, чтобы всем формальным параметрам были заданы значения. Если формальному параметру не присвоено значение, начальное значение, определенное в редак- торе переменных, будет \спользо- ваться при выполнении £ункцио- Нального блока. Если тачальное значение не было определено, бу- дет использоваться значение по Ум°лчанию (0). CM CLOCK см сошпч cns.ctocK.cua. Р?:-1СО) Pulse dXt-COWr.Q, u> ссшгг.с t Рис. 3.5 43
Команда CAL FBNAME завершает назначение параметров функциональных блоков и DFB. После этого передача значений этих параметров в блок FB/DFB больше невозможна. Теперь могу! считываться лишь их выходные значения. Только команды загрузки и сохранения для текущих назначе- ний параметров FB/DFB позволяются между первой командой за- грузки фактического параметра и вызовом функционального блока и блока DFB. Никакие другие команды не разрешаются в этом со- стоянии. Примеры команды CAL с загрузкой и сохранением входных, параметров приведены на рис. 3.6. CAL СИСК > Actual parameters ST COW, В . to 100 ST COW. PV LD COW.Q tl> CLOCK.CLK3 ST COWT. to Ш AND В Ой с Рис. 3.6 Использование входных операторов. Функциональные блоки могут вызываться списком команд, состоящим из команд загрузки фактических параметров, сохранения в формальны!! параметры, входного оператора. Порядок загрузки и сохранения параметров не имеет значения. Список фактических параметров может иметь конец строки сразу же после запятой. Не требует- ся, чтобы всем формальным параметрам были заданы значения- Если формальному параметру не задано значение, начальное значение, определенное в редакторе переменных, будет исполь- зоваться при выполнении функционального блока. Если началь- ное значение не было определено, будет использоваться значе- ние по умолчанию (0). Возможные входные операторы для различных функционала ных блоков находятся по табл. 3.3. Никакие другие входные one' раторы не доступны. 44
Таблица 3.3 Входной оператор Тип FB sTXZl SR sTrlL RS "CLK R_TRIG CLK FTRIG "cuTr-PV CTUJNT, CTUDINT, CTUJJINT, CTUUDINT CT, LD, PV CTDJNT, CTD_DINT, CTD UINT, CTDJJDINT "cucix R, ld, pv CTUD INT, CTUD-DINT, CTUD UINT, CTUD_UDINT In pt TP IN, PT TON IN, PT TOF Вызов входного оператора завершает назначение параметров функционального блока. После этого передача значений в блок FB больше невозможна Теперь могут считываться лишь выходные значения. Только команды загрузки и сохранения для текущего назначе- ния параметров блоков FB/DFB позволяются между первой ко- мандой загрузки фактического параметра и вызовом FB/DFB. Ни- какие другие команды не разрешаются в этом расположении. Пример использования входных операторов приведен на рис. 3.7. CAI CLOCK LD CLOCK-C ST COURT. LD %IX10 ST COWER LD 100 Actual parameters Input operator ‘‘Formal parameters pv споят Name of Instance Рис. 3.7 ^Команда CAL COUNT не разрешается, так как функциональ- ный блок уже вызывается командой PV. Использование выхода функционального блока и блока DFB. Ь1х°ды FB/DFB могут всегда использоваться, если переменная (дос- тУнная только для чтения) также может использоваться. 45
Name of Instance I Formal parameters u> cotm.o ST 1QX1 Рис. 3.8 Пример использования выхода функционального блока и блока DFB приведен на рис. 3.8. Пример на рис. 3.9 показывает объявление и вызов функциональ- ного блока на языках IL и FBD. CaBofFBsInIL VAR CLOCK i SY5CLOCK -j COUNT 1 CTO DINT; END VAR CAI CLOCK ONT ;CUs«CL0CKiCtk3r iFVfiOO) n> ouHT. o ST % OX1 COUNT CeBof FBshlFBD CLOCK Рис. 3.9 Обращения к функциям. Чтобы найти имена доступны.'! функций, следует обратиться к библиотекам блоков. Функции вызываются списком команд, состоящим из первого фактического параметра, загруженного в аккумулятор, и имени функции. В случае необходимости этот список сопровождается списком дополнительных фактических параметров. Важную роль играет порядок распечатки формальных параметров в обращении к функции. Список фактических параметров может иметь коней строки сразу же после запятой. После выполнения функции ре- зультат функции сохраняется в аккумуляторе и в операнде с по- мощью оператора ST или используется для прямой дальнейшей обработки. 46
Пример обращения к функции с фактическим параметром при- пеН на рис. 3.10, а пример обращения к функции с несколькими фактическими параметрами - на рис. 3.11. Actuaioarameters ' __• Name of the function Actuapjarameters . ^Name of the function Ll> A LIMIT REAL B,C ST result \\ I U) A SIJtREAl St result Result of the function Рис. 3.10 Actual parameters Рис. 3.11 функция может также вызываться списком команд, состоя- щим из первого фактического параметра, загруженного в акку- мулятор, и имени функции. Этот список сопровождается спи- ском присвоения значений фактических параметров формаль- ным параметрам. Порядок распечатки формальных параметров в этом случае не имеет значения. Однако фактический пара- метр, загруженный с помощью оператора LD, продолжает быть первым параметром функции. Пример обращения к функции с несколькими фактическими параметрами приведен на рис. 3.12. Если значение, которое бу- дет обработано, находится уже в аккумуляторе, команда загрузки может быть опущена. Пример обращения к функ- ции с обработкой значения ак- кумулятора: Actual^rameters LIMITШЬ-'ТМ; ST result *С« ИХ:») Actual parameters Рис. 3.12 LIMIT REAL В,С ST result Если обработка результата должна продолжиться немедленно, команда сохранения может быть опущена. Пример обращения к функции с прямой непрерывной обработ- кой результата: LDA LIMIT REAL В,С Mule 47
Пример объявления и обращения к функции на языках LL и FBD приведен на рис. 3.13. LD 1 LIHTT REAL В,С ST OUT CaH»fFB»iaFBD 1.2 с — нх OUT Рис. 3.13 ПИТТ REAL А — И» S—IH Комментарии. В IL-редакторе комментарии начинаются с символьной цепочки «(*и заканчиваются символьной цепочкой*)». Любой комментарий может быть введен между этими двумя сим- вольными цепочками. Комментарии отображаются в цвете. Согласно стандарту комментарии позволяются только в конце строки. Стандарт не разрешает также вложение комментариев. Проверка синтаксиса и генерация объектного кода. Генера- ция объектного кода будет выполняться вместе с проверкой син- таксиса, когда секция закрывается. Любые найденные ошибки за- тем отображаются в окне сообщений. Оптимизация кода во время выполнения программы достигает- ся реализацией арифметики целого числа (например ”+“ или через простые команды процессора вместо вызовов блоков EFB. Команды процессора выполняются намного быстрее, чем вызовы блоков EFB, но они не генерируют сообщения об ошибках типа переполнения арифметики или массива. Эта опция должна исполь- зоваться, только если есть уверенность, что не имеется никаких арифметических ошибок в программе. Пример самого быстрого кода: LD ini ADD 1 ST outl 48
Опция Fastest code (restricted checking). Если выбрать эту опцию, сложение ini + 1 будет выполняться командой процессора add. В этом случае код выполняется быстрее, чем при вызове блока EFB Al)D_INT. Однако ошибка во время выполнения программы не бу- дет сгенерирована, если ini есть 32767. В этом случае разрядная сетка переменной outl переполняется из 32767 в - 32768! Опция Unassigned parameters cause warnings. Стандарт разре- шает вызывать функции и функциональные блоки без распределе- ния всех входных параметров. Этим неиспользуемым параметрам неявно присваивается 0 или они сохраняют значение из последне- го вызова (только функциональные блоки). Активизация флажка опции отобразит список неиспользуемых параметров в окне сообщения во время генерации объектного кода. Опция Enable Loop Control. При активизации флажка осущест- вляется проверка внутри IL- и ST-секций для контуров, чтобы оп- ределить, можно ли эти контуры покинуть снова внутри некоторо- го периода времени. Разрешенное время для контуров зависит от определенного времени сторожа (Watchdog time). Разрешенное время всегда немного меньше, чем время сторожа. Использование этой опции предотвратит зацикливание программы на воспроизве- дении контура (бесконечный контур). Если бесконечный контур обнаруживается, обработка вызванной секции завершается и обра- батывается следующая секция. Последующее сканирование обра- ботает секцию снова, пока бесконечный контур не будет обнару- жен или пока секция правильно не завершится. Интерактивные функции. Редакторы языков IL и ST делают доступными три режима анимации: анимацию двоичных переменных; анимацию выбранных переменных; создание контролируемых полей. Анимация прямых адресов и прямых входов/выходов блоков FB невозможна. Анимация двоичных переменных. Анимация двоичных зна- чений активизируется командой меню Online ® Animate binary v&lues. Этот режим отображает текущее сигнальное состояние Двоичных переменных в окне редактора: переменная красного цвета имеет значение 0; переменная зеленого цвета имеет значение 1; переменная желтого цвета - не двоичная переменная. Анимация выбранных переменных. Диалоговое окно, кото- Рое отображает текущие сигнальные состояния выбранных пере- 49
менных, активизируется командой меню Online ® Animate Se- lected. Для анимации выбранных переменных секция должна быть анимирована. Иначе следует активизировать анимацию с помо- щью команды Online ® Animate binary values. Выбираемые переменные и многоэлементные переменные идентифицируются в буквенном обозначении: переменная красного цвета имеет значение 0; переменная зеленого цвета имеет значение 1; переменная желтого цвета - не двоичная переменная. Диалоговое окно отображает имя выбранной переменной или многоэлементной переменной, ее тип данных и текущее значение. Диалоговое окно остается открытым, пока не будет закрыто или анимация не будет завершена. Если открывается несколько секций текстовых языков и в них вызывается диалоговое окно, то оно может быть открыто для каждой секции. Имя секции отобра- жается в названии диалогового окна. Несколько переменных или многоэлементных переменных мо- гут быть вставлены в диалоговое окно. Для этого следует выби- рать соответственно желаемые переменные или многоэлементные переменные и акцептировать их с помощью команды Online ® Animate selected в диалоговое окно. Ширина столбцов в окне модифицируется. Для этого позицио- нируют указатель мыши к правой границе кнопки. Указатель мы- ши изменит форму стрелки на другую: *li* Перемещая и нажимая левую кнопку мыши, можно корректировать ширину столбца. В структурированных переменных отображение их элементов можно разрешить или заблокировать (табл. 3.4). Таблица 3.4 Действие пользователя Функция Примечание Нажатие на символ <+> или клавишу <+> Следующий подуровень компонентов для текущей строки будет отображагься Для ввода через клавиа- туру курсор должен быть позиционирован на символ <+> Клавиша <х> (циф- ровая клавиатура) Все подуровни для текущей строки будут отображаться Курсор должен быть позиционирован на символ <+> Нажатие на символ <-> или клавишу <-> Все подуровни, отображае- мые для текущей строки, будут свертываться Для ввода через клавиа- туру курсор должен быть позиционирован на символ <-> J 50
Окончание табл. 3.4 ' Действие пользователя Функция Примечание CTRL + Представление компонентов в текущей строке восстанав- ливается (восстановление изображения на дисплее до последнего использования) Курсор должен быть позиционирован на символ <+> <CTRL> + <x> (number pad) Все подуровни текущих многоэлементных перемен- ных будут отображаться Курсор должен быть позиционирован на элемент многоэлемент- ной переменной <CTRL> + <-> Все подуровни текущей многоэлементной перемен- ной будут свертываться Курсор должен быть позиционирован на элемент многоэлемент- ной переменной <CTRL> + <END> Перемещение в конец таблицы <CTRL>, Home Перемещение в начало таблицы - Создание контролируемых полей. Контролируемые поля отображают текущее значение выбранных переменных. Контролируемые поля не могут быть созданы для прямых ад- ресов и прямых входов/выходов блоков FB например, переменная (INST.Q). В структурированных переменных отображается значение пер- вого компонента. Контролируемое поле, состоящее из имени переменной и значения, создается для выбранной переменной в выбранной позиции. 3.2. Создание программы на языке IL Создайте новую секцию, выберите язык IL и введите имя секции. Используйте команду VAR...ENDVAR для объявления функ- циональных блоков и блоков DFB, с которыми Вы хотите работать (Рис. 3.14). RAMF„UP, RAMPDOWN. RAKF„X ; ТОК i COUNT : CTU_DINT ; end_var Рис. 3.14 51
Объявите переменные и их начальные значения в редакторе переменных. Создайте логику вашей программы: LDA SIN_REAL MUL_REAL В,С STD LDY ANDX JMPC endl LDM SINREAL MUL_REALN,O STP JMP end2 endl: LD D ST%QD4 end2: LD P ST %QD5 Сохраните созданную IL-секцию. 3.3. Пример По условию задачи, приведенному в разд. 14, создайте про- грамму на языке IL. Возможное решение задачи представлено ниже: VAR FBI110 : TON; FBI115 : RS; FBI 19 : TON; FBI13 : RS; 52
end_var LD onje ANDN motri OR timeri ST FBI13.S LDN stop OR timele ST FBI_1_3.R1 CAL FBI13 LD FBI13.Q1 ST motle LD FBI_1 _3.Q1 ST FBI19.IN LD t#5s ST FBI_1_9.PT CAL FBI19 LD FBI19.Q ST timele LD FBI19.ET ST etle LD onri ANDN mot le OR time le ST FBI115.S LDN stop OR timeri ST FBI115.R1 CAL FBI115 LD FBI115 QI 53
ST mot_ri LDFBIJ J 5.QI ST FBIl JO.IN LDt#10s ST FB1J_1O.PT CAL FBIl JO LDFBIJJO.Q ST timeri LD FBIJJO.ET
4. ЯЗЫК СТРУКТУРИРОВАННОГО ТЕКСТА - ST Язык ST (Structured Text) является языком высокого уровня (типа Паскаля). Был популярен в середине 70-х годов XX века для сложных компьютерных приложений. Предназначен для универ- сального анализа данных. Удобен для программ, включающих числовой анализ или сложные алгоритмы. Может использоваться в главных программах, в теле функции или FBD, а также для описа- ния действий внутри элементов редакторов SFC или Flow Chart. Обладает высокой читабельностью исходного кода, ключевые слова, такие как AND, OR, NOT, IF, THEN, ELSE, WHILE и т. д., легко понимаемы. Прост в сопровождении, если имена перемен- ных понятны, имеются комментарии, код хорошо структурирован. Язык ST можно использовать, например, для того, чтобы вы- зывать функциональные блоки, выполнять функции и распределе- ния, условно выполнять и повторять их. При вводе ключевых слов, разделителей и комментариев осу- ществляется непосредственная проверка по буквам. При обнару- жении ключевого слова, разделителя или комментария, они иден- тифицируются через цветное оттенение. При вводе несанкциони- рованных ключевых слов (утверждений или операторов) они так- же идентифицируются через цветное оттенение. Согласно lEC 61131-3 ключевые слова должны быть введены в символах верх- него регистра. Пробелы и метки табуляции не влияют на синтак- сис, они могут использоваться везде. Объект может быть выбран с помощью правой кнопки мыши при одновременном вызове контекстно-зависимого меню. В FFB, например, возможно вызвать соответствующее описание блока, используя правую кнопку мыши. 4.1. С ператоры языка ST Выражения. Выражения состоят из операндов и операторов. Операнды. Операндом является литерал, переменная, струк- турированная переменная, компонент структурированной пере- менной, обращение к функции, выход FB/DFB или прямой адрес. 55
При доступе к массивам переменных ARRAY элемент указав ля позволяет использовать только литералы и переменные типа ANYINT или выражения, сформированные с ними: varl[i] := 8 ; var2.otto[4] := var3 ; var4[l+i+j*5] := 4; В табл. 4.1 приведены заданные по умолчанию типы данных прямых адресов. Таблица 4.1 Вход Выход Заданные по умолчанию типы данных Возможные типы данных 1 %1Х %QX BOOL BOOL %1 %Q %1В %QB BYTE BYTE %1W %QW INT INT, UINT, WORD %ID %QD REAL REAL, DINT, UDINT, TIME Если типы данных DINT, UINT, UDINT, WORD или TIME не- обходимо назначить прямому адресу, это осуществляется через явное объявление командой VAR...ENDVAR. Типы данных операндов, обрабатываемых в утверждении, должны быть идентичны. При обработке операндов различных типов данных сначала выполняется преобразование типов. Пример преобразования: гЗ := r4 + SINREAL(INTTO_REAL(il)); В примере целая переменная il преобразована в вещественную пе- ременную прежде, чем она добавляется к вещественной переменной г4. Исключением является тип данных TIME вместе с арифмети- ческими операторами «*» (умножение) и «/» (деление). Операнд типа данных TIME может быть обработан вместе с операндом ти- па данных ANY NUM. Результат этого тип данных TIME. утверждения будет иметь Пример умножения: tl := t2 * i4 ; В примере переменная времени t2 умножена на целую пере- менную i4, а результат сохраняется в переменной времени tl. Операторы. Оператор - символ арифметической или логиче- ской операции, которая будет выполнена. Операторы являются 56
бобшенными, т. е. они автоматически корректируются к типу данных операнда. д Оценка выражения включает приложение операторов к опе- андам в порядке, определенном правилом старшинства операто- пов Оператор с самым высоким старшинством в выражении будет ^полнен в первую очередь, затем будет выполнен оператор со следующим ниже старшинством и так до тех пор, пока обработка не завершится. Операторы с равным старшинством выполняются слева направо, как написано в выражении. Этот порядок может быть изменен через заключение в скобки. Операторы языка программирования ST приведены в табл. 4.2. Таблица 4.2 Оператор Значение Операнд Правило старшинства 0 Заключение в скобки Выражение 1 (наивысший) FUNCNAME (список фактиче- ских параметрон) Функции вызов Выражение, литерал, пере- менная, прямой адрес типа данных ANY 2 ** Возведение в степень Выражение, литерал, пере- менная, прямой адрес типа данных REAI, (основание), ANY NUM (экспонента) 3 Отрицание Выражение, литерал, пере- менная, прямой адрес типа данных ANYNUM 4 NOT Дополнение Выражение, литерал, пере- менная, прямой адрес типа данных ANYBIT 4 * Умножение Выражение, литерал, пере- менная, прямой адрес типа данных ANY NUM или TIME / Деление Выражение, литерал, пере- менная, прямой адрес типа данных ANYNUM 5 MOD Модуль Выражение, литерал, пере- менная, прямой адрес типа данных ANY_NUM 5 Сложение Выражение, литерал, пере- менная, прямой адрес типа данных ANYNUM или TIME 6 57
Окончание табл. 4 2 Оператор Значение Операнд Правило старшинства I - Вычитание Выражение, литерал, пере- менная, прямой адрес типа данных ANY_NUM или TIME 6 1 < Меньше чем Выражение, литерал, пере- менная, прямой адрес типа данных ANY_ELEM 7 > Больше чем Выражение, литерал, пере- менная, прямой адрес типа данных ANY_ELEM 7 < Меньше или равно Выражение, литерал, пере- менная, прямой адрес типа данных ANY_ELEM 7 1 > Больше или равно Выражение, литерал, пере- менная, прямой адрес типа данных ANYELEM 1 7 = Равенство Выражение, литерал, пере- менная, прямой адрес типа данных ANYJELEM 8 о Неравенство Выражение, литерал, пере- менная, прямой адрес типа данных ANYELEM 8 &, AND Логическое И Выражение, литерал, пере- менная, прямой адрес типа данных ANY BIT 9 XOR Логическое исключаю- щее ИЛИ Выражение, литерал, пере- менная, прямой адрес типа данных ANY BIT 10 OR Логическое ИЛИ Выражение, литерал, пере- менная, прямой адрес типа данных ANY_BIT 11 (низший) Заключение в скобки используется, чтобы изменить порядок обработки операторов. Если операнды А, В, С и D имеют значения 1, 2, 3 и -4, 10 A+B-C*D = -9, a (A+B-C)*D = 0. Чтобы выполнять функции (FUNCNАМЕ), используется функ- циональное редактирование. При возведении в степень значение первого операнда (основа- ние) возводится в степень значения второго операнда (экспонента)- Пример возведения в степень: OUT := INI ** IN2 ; 58
р примере переменная OUT будет равна 625.0, если IN1 = 5.0 й1К2 = 4.0- С помощью отрицания осуществляется реверсирование знака для значения операнда. Пример отрицания: OUT := - INI ; В примере переменная OUT будет равна-4, если IN1 = 4. С помощью оператора NOT выполняется поразрядная инвер- сия операнда. Пример оператора NOT: OUT := NOT INI ; В примере переменная OUT будет равна 0011001100, если №1 = 1100110011. При умножении значение первого операнда умножается на второй операнд. Пример умножения: OUT := INI * IN2 ; В общем случае типы данных операндов обрабатываемого ут- верждения должны быть идентичны. Исключением является ум- ножение на операнд с типом данных TIME. В этом случае операнд типа данных TIME может быть обработан вместе с операндом ти- па данных ANY NUM. Результат этого утверждения будет иметь тип данных ТЕМЕ. Пример умножения: tl := t2 * i4; В примере переменная времени t2 умножается на целую переменную i4, а результат сохраняется в переменной време- ни tl. При делении значение первого операнда делится на значение второго операнда. Пример деления: OUT := INI / IN2 ; В общем случае типы данных операндов утверждения, которое будет обработано, должны быть идентичны. Исключением являет- ся Деление вместе с типом данных ТЕМЕ. В этом случае операнд ™Па данных TIME может быть обработан вместе с операндом ти- па Данных ANY_NUM. Результат этого утверждения будет иметь тип данных TIME. 59
Пример деления: tl := t2 / i4 ; В примере переменная времени t2 разделена на целую riepe_ менную i4, а результат сохранен в переменной времени tl. В операторе MOD значение первого операнда делится на зна- чение второго операнда, а остаточный член от деления (по моду, лю) возвращается как результат. Пример оператора MOD: OUT := INI MOD IN2 ; В примере переменная OUT будет равна 1, если IN1 = 7 и IN2 = 2. При сложении значение первого операнда складывается со значением второго операнда. Пример сложения: OUT := INI + 1N2 ; При вычитании значение второго операнда вычитается из зна- чения первого операнда. Пример вычитания: OUT :=IN1 -IN2; При использовании оператора «больше чем» значение первого операнда сравнивается со значением второго операнда. Если пер- вый операнд больше, чем второй, результатом будет булева еди- ница (1). Если первый операнд меньше второго или равен второму операнду, результатом будет булев нуль (0). Пример оператора «больше чем»: OUT := INI > 10 ; В примере переменная OUT будет равна 1, если IN 1 > 10, иначе 0. При использовании оператора «больше или равно» значение первого операнда сравнивается со значением второго операнда. Если первый операнд больше второго или равен второму операн- ду, результатом будет булева единица. Если первый операнд меньше, чем второй, результатом будет булев нуль. Пример оператора «больше или равно»: OUT:=IN1 >10; В примере переменная OUT будет равна 1, если IN 1 > 10, иначе О- При использовании оператора «равно» значение первого onej ранда сравнивается со значением второго операнда. Если первый операнд равен второму, результатом будет булева единица. Если первый операнд не равен второму, результат - булев нуль. 60
Пример оператора «равно»: OUT:=IN1 = 10; В примере переменная OUT будет равна 1, если INI = 10, иначе 0. При использовании оператора «не равно» значение первого операнда сравнивается со значением второго операнда. Если пер- вый операнд не равен второму, результат - булева единица. Если первый операнд равен второму, результат - булев нуль. Пример оператора «не равно»: OUT:-IN 1 <>10; В примере переменная OUT будет равна 1, если переменная ]П1 не равна 10, иначе 0. При использовании оператора «меньше или равно» значение первого операнда сравнивается со значением второго операнда. Если первый операнд меньше второго или равен второму операн- ду, результатом будет булева единица. Если первый операнд больше, чем второй, результат - булев нуль. Пример оператора «меньше или равно»: OUT := IN1 <10; В примере переменная OUT будет равна 1, если переменная IN1 меньше или равна 10, иначе 0. При использовании оператора «меньше чем» значение первого операнда сравнивается со значением второго операнда. Если пер- вый операнд меньше, чем второй операнд, результатом будет бу- лева единица. Если первый операнд больше второго или равен второму операнду, результатом будет булев нуль. Пример оператора «меньше чем»: OUT := INI < 10 ; В примере переменная OUT будет равна 1, если переменная IN1 меньше, чем 10, иначе 0. При использовании оператора «логическое И» осуществляется логическая операция И между операндами. Пример логического И: OUT := INI AND IN2 AND IN3 ; или OUT := INI & IN2 Л IN3 ; В примере переменная OUT будет равна 1, если переменные Nl, IN2 и IN3 будут равны 1. С типами данных BYTE и WORD связывание происходит по- разрядно. 61
С помощью оператора OR (ИЛИ) осуществляется логическаЛ операция ИЛИ между операндами. Пример логического ИЛИ: OUT := INI OR IN2 OR IN3 ; В примере переменная OUT будет равна 1, если переменные IN1 и IN2 или IN3 будут равны 1. С типами данных BYTE и WORD связывание происходит по- разрядно. С помощью оператора XOR выполняется логическая операция «исключающее ИЛИ» между операндами. Пример оператора XOR: OUT = IN1 XOR IN2; В примере переменная OUT будет равна 1, если переменные INI, IN2 не равны. Если переменные IN1 и IN2 имеют одинаковое состояние (обе равны 0 или 1), переменная OUT будет равна 0. Если больше чем два операнда связаны, результат с нечетным числом единичных состояний будет равен 1, а с четным числом единичных состояний будет равен 0. Пример оператора XOR: OUT := INI XOR IN2 XOR IN3 XOR IN4 XOR IN5; В примере переменная OUT будет равна 1, если операнды 1, 3 или 5 будут равны 1. Переменная OUT будет равна 0, если операн- ды 0, 2 или 4 будут равны 1. С типами данных BYTE и WORD связывание происходит по- разрядно. Утверждения. Утверждения являются командами языка про- граммирования ST. Утверждения должны закрываться точками с запятой. Одна строка может содержать несколько утверждений (отделяемые точками с запятой). Следующие утверждения доступны: распределения; объявления VAR...ENDVAR; объявления функциональных блоков: команды IF...THEN...ENDIF; ELSE; ELSIF ... THEN; CASE ... OF ... END CASE; FOR - TO ... BY ... DO ... END FOR; WHILE ... DO ... END WHILE; REPEAT; EXIT; фиктивное утверждение. Распределение заменяет текущее значение одиночной или мно- гоэлементной переменной на результат выполнения выражения. 62
ппеделение состоит из переменной, введенной слева от опера- * а распределения, далее следует оператор распределения (;=), а т°Р вь1ражение, которое должно быть выполнено. Обе перемен- нь1Х должны иметь тот же самый тип данных. Пример утверждения: А:=В; Это утверждение используется, чтобы заменить значение пе- ненной А на текущее значение переменной В. Если А и В имеют совпадающие тины данных, одиночное значение из В будет пере- дано в А. Если А и В имеют тип данных пользователя, значения всех компонентов будут перемещены из В в А. Распределение т акже применяется для того, чтобы распределить: литерал переменным С := 25; значение переменной, которое будет возвращено функцией или функциональным блоком: В := MOD_INT(C,A); А:= TON1.Q; значение переменной, которое является результатом операции: X := (A+B-C)*D ; VAR...ENDVAR Утверждение VAR применяется для объявления используемых функциональных блоков и для объявления прямых адресов, если они не применяются с заданными по умолчанию типами данных. В пакете Concept команда VAR не может использоваться для объяв- ления переменных. Объявление переменных очень легко выполня- ется через редактор переменных. Утверждение END VAR идентифицирует конец объявления. Утверждение VAR...END VAR вводится только один раз в начале секции. Все блоки FB/DFB и используемые прямые адреса, кото- рые отличаются от заданных по умолчанию типов данных, должны быть здесь объявлены. Объявление блоков FB/DFB и прямых адресов применяется только к текущей секции. Если тот же самый тип FFB или тот же самый адрес будут использоваться в другой секции, тип FFB или адрес соответственно должны быть объявлены снова в той секции. В объявлении функциональных блоков FB и блоков DFB каж- дому используемому блоку назначается имя экземпляра блока, ко- 63
торое служит для идентификации функционального блока в проек. те. Имя экземпляра должно быть уникальным для всего проекта- не имеется никакого различия между заглавными или строчным^ буквами. Имя экземпляра должно удовлетворять соглашениям стандарта по имени, иначе появится сообщение об ошибках. После ввода имени экземпляра следует ввод типа функцио- нального блока, например CTD DINT, ROL WORD, SINJREAL. С обобщенными типами функциональных блоков (например, MUX, SEL) тип данных не вводится. Он будет определен типом данных фактических параметров. Если фактические параметры состоят из литералов, для функционального блока будет принят тип данных INT. Может быть объявлено любое число имен экземпляров для FB/DFB, оно зависит от частоты использования FB/DFB. Пример объявления функциональных блоков FB и DFB приве- ден на рис. 4.1. RAM® RAMP DOWN, RAM® X : TON ? COUNT i < T DINT J " / £ui,ee ? TON у Рис. 4.1 В объявлении прямых адресов каждому используемому прямому! адресу, который имеет тип данных, отличающийся от заданного по умолчанию типа данных, назначается тип данных по выбору. Пример объявления прямых адресов приведен на рис. 4.2. Утверждение IF ... THEN ... END IF. Здесь утверждение IF оп- VAR AT BQW1:WORD ; AT «IW15;UINT ; AT tlM5sDINT ; AT %QD3:TIME ; SND_VAR ределяет, что утверждение группы утверждений выполня- ется, только если значение свя- занного булева выражения раБ" но 1 (истина). Если условие Рис. 4.2 ложно, утверждение и/или грУ11' па утверждений не будут вЬ1 полнены. Утверждение ТНЕЯ 64
идентифицирует конец условия и начало утверждений. Утвержде- ние ENDJF идентифицирует конец утверждений. Пример утверждения IF...THEN...END IF: IF А>В THEN C:=SIN_REAL(A) * COS_REAL(B) ; В:=С - А ; ENDJF; IF.. .THEN.. .END IF Пример утверждения IF FLAG THEN: C:=SIN_REAL(A) * COS_REAL(B); B:=C - A; ENDJF; Если переменная FLAG будет равна 1, утверждения будут вы- полняться, если переменная FLAG будет равна 0, утверждения не будут обрабатываться. Утверждение IF NOT...THEN...END IF. Здесь утверждение NOT может использоваться, чтобы инвертировать условие (вы- полнение обоих утверждений в состоянии 0). Пример утверждения IF NOT FLAG THEN: C:=SIN REAL (A) * COS_REAL(B) ; B:=C - A; ENDJF; Для создания сложных утверждений выбора можно вложить любое количество утверждений 1F...THEN...ENDJF. Утверждение ELSE всегда следует за IF...THEN, ELSIF...THEN или за CASE утверждением. Если утверждение ELSE следует после IF или ELSIF, утверждение и/или группа утверждений будут выполнены, только если значение связанных булевых выражений IF и ELSIF утверждений будет равно 0 (ложно). Если условие IF или ELSIF утверждения будет равно 1 (исти- на), утверждение и/или группа утверждений не будут выполнены. Если утверждение ELSE следует за CASE, утверждение и/или Группа утверждений выполняются при условии, что никакая метка не содержит значение селектора. Если метка содержит значение селекто- ра, утверждение и/или ipynna утверждений не будут выполнены. 65
Пример утверждения ELSE: IF А>В THEN C:=SIN_REAL(A) * COS_REAL(B); B:=C - A ; ELSE C:=A + В; B:=C * A ; END_IF; Для создания сложных утверждений выбора можно вложить любое количество утверждений IF...THEN...ELSE...ENDIF. Утверждение ELSIF...THEN. Утверждение ELSIF всегда следу- ет за утверждением IF...THEN. Утверждение ELSIF определяет, что утверждение и/или группа утверждений будут выполнены, только если значение связанного булева выражения утверждения IF будет равно 0 (ложно) и значение связанного булева выражения утверждения ELSIF будет равно 1 (истина). Если условие утвер- ждения IF будет равно 1 (истина) и/или условие утверждения ELSIF будет равно 0 (ложно), утверждение и/или группа утвер- ждений не будут выполнены. Утверждение THEN идентифицирует конец условия(й) ELS1F и начало утверждений. Пример утверждения ELSIF...THEN: IF А>В THEN C:=SIN_REAL(A) * COS_REAL(B); B:=SUB_REAL(C,A); ELSIF A=B THEN C:=ADD_REAL(A,B); B:=MUL_REAL(C,A) ; END_IF; Можно вложить любое количество утверждений IF ... THEN ELSIF ... THEN ... END IF, чтобы создать сложные утверждения выбора. Пример утверждения ELSIF...THEN: IF А>В THEN 66
IF B=C THEN C:-SINREAL(A) * COS REAL(B); ELSE B:=SUB_REAL(C,A); END IF ; ELSIF A=B THEN C:=ADD_REAL(A,B); B:=MUL_REAL(C,A); ELSE C:= DIV REAL (A,B); END IF; Утверждение CASE...OF...ENDCASE. Утверждение CASE состоит из выражения типа данных INT (селектор) и списка групп утверждений. Каждой группе задана метка, которая содержит одно число, или большее количество целых чисел (ANYINT), или диапазон целочисленных значений. Первая группа утверждений будет выполнена, если она имеет метку, содержащую определенное значение селектора. Иначе никакое утверждение не будет выполнено. Утверждение OF идентифицирует начало меток. Внутри утверждения CASE ELSE может быть сделано утвер- ждение о том, какие утверждения будут выполняться, если не име- ется никакой метки, содержащей значение селектора. Угверждение END CASE идентифицирует конец утвержде- ния(й). Пример утверждения CASE...OF...ENDCASE приведен на рис. 4.3. Selector case sibeci or 1,5s cs-sin • cos rikl(b) ; 21 Bi-C - A i “ ~ 6. .101 Cl-» + В ; rise jj;-c * ж i Labels
Утверждение FOR...TO...BY...DO...ENDFOR. Утверждение FOR используется, если число повторений может быть определено заранее, иначе используются WHILE или REPEAT. Утверждение FOR повторяет последовательность утвержде- ний, пока утверждение ENDFOR не достигнуто. Число повторе- ний определяется начальным или конечным значением и перемен- ной управления. Начальное или конечное значение и переменная управления должны быть одного и того же типа данных (DINT или INT) и не могут быть изменены одним из повторяемых утвержде- ний. Утверждение FOR увеличивает значение переменной управ- ления от начального значения до конечного значения. Значение приращения по умолчанию равно 1. Конечное условие будет про- веряться в начале каждого повторения, что означает невыполнение последовательности утверждений, когда начальное значение больше конечного. Это правило позволяет избегать бесконечных контуров. Диапазоны значений применительно к конечному значению INT от- 32 767 до 32 766 и DINT от - 2 147 483 646 до 2 147 483 645. Утверждение DO идентифицирует конец определения повто- рения и начало утверждений. Повторение может быть завершено с использованием утверждения EXIT. Утверждение END FOR идентифицирует конечное утвержде- ние^). Пример утверждения FOR...TO...BY...DO...END FOR приведен на рис. 4.4. Final value Inftal value FOR IS- 1 TO 50 JX> EMD FOR. } Cs- C * COSJRXAL(fi) } Рис. 4.4 Если должно использоваться приращение, отличное от 1, это может быть определено с использованием выражения BY. Приращение, начальное или конечное значение и переменная управления должны быть одного и того же типа данных (DINT или INT). Критерием направления обработки (вперед, назад) является знак при выражении BY. Если это выражение положительно, контур выполняется в прямом направлении, если оно отрицательно, контур выполняется в обратном на- правлении. 68
Пример приращения на +1 приведен на рис. 4.5. Control vatiab^Wtialviue^ FOR It" 1 ТО 10 »Х 2 DO ВХ > 0->forw*rd loop *) С:- С * СО! МИ. (В) ; (• «Utwwmt la executed J tl*»» •) MOTOR ; ГОЯ I:- 1 TO 10(‘ default of BX la l->forward loop ») Ct- C » COS^RJMf») I (* atBlearnat la executed 10 tl*»» *)MI Рис. 4.5 Пример приращения на -1 представлен на рис. 4.6. ГОЙ II- 10 ТО 1 ВХ -1 00 (* ВХ < 0->backw«rd loop *) Ct- С * COS RX*1(B) i »t«te*ent is executed 10 Ни» *) EXDJOR j Рис. 4.6 Пример критического контура - на рис. 4.7. FOR I:- Юто 1вх j do <* b«ck»r«xd loop *) Ct- C * COS JRJEKI, (B) ? BHD FOR ; Рис. 4.7 Если приращение в примере на рис. 4.7 j > 0, утверждения не будут выполнены, потому что при первом сравнении i = 10. Пример критического контура приведен на рис. 4.8. Если при- ращение в этом примере j < 0, утверждения не будут выполнены, потому что при первом сравнении 1=1. TOR It- 1 ТО 10 BI j DO (* VoxwRrt«-/Rbckwnxt»*chleife ♦) Ct- С * COS REAX(B) ; «»D fOR ; Рис. 4.8 Бесконечный контур может сформироваться, только если при- ращение будет равно 0. Если эта ситуация обнаружена во время анализа секции, будет сгенерировано сообщение об ошибках. Если ошибка обнаружена во времени выполнения программы, сообще- ние об ошибках будет сгенерировано в дисплее событий. Пример бесконечных контуров приведен на рис. 4.9. 69
FOR I:« 1 ТО 10 М 0 по (» error *MMg« in the eoction *) С - С • COS 1ВД! ; (« antlpil becnue at Infinite loop *] BW0_m ; FOR I.« 1 TO 10 IT j И (* j » 0 ceuiee to error вемьде in •) C:« C ♦ COS wax(l) ; (* tho event viewer •) 8Ю JFOR ; Рис. 4.9 Утверждение WHILE...DO...END_WHILE. Утверждение WHILE приводит к повторению выполнения последовательности утвержде- ний до связанного булева выражения, значение которого равно 0 (ложно). Если выражение было ложно изначально, группа угвержде- ний не будет выполнена вообще. Утверждение DO идентифицирует конец определения повто- рения и начало утверждений. Повторение может быть завершено с использованием утвер- ждения EXIT. Утверждение END WHILE идентифицирует конечное утвер- ждение^). Пример утверждения WHILE...DO...END_WHILE: var := 1 WHILE var <= 100 DO var := var + 4; END WHILE; Утверждение WHILE нельзя применить для того, чтобы вы- полнить синхронизацию процессов, например таких, как ожидание контура с конечным условием, определенным внешним образом. Это означает, что формирование бесконечного контура не позво- ляется, так как может привести к разрушению программы, если не будет предотвращено с помощью функции Project Code Generation Options ® Enable Loop Control. Утверждение WHILE нельзя использовать в алгоритме, который не может гарантировать удовлетворение условия окончания контур8 или выполнение утверждения EXIT. Это означает, что формирова- ние бесконечного контура не позволяется, так как может привести к разрушению программы, если не будет предотвращено использова- нием функции Project ® Code Generation Options ® Enable Loop Control. 70
Утверждение REPEAT...UNTIL...END REPEAT. Утверждение REPEAT приводит к повторению выполнения последовательности утверждений (по крайней мере, один раз), пока связанное булево условие не равно 1 (истина). Утверждение UNTIL идентифицирует конечное условие. Повторение может быть завершено с использованием утвер- экдения EXIT. Утверждение END REPEAT идентифицирует конец утвержде- ния^). Пример утверждения REPEAT...UNTIL...END REPEAT: var := -1 REPEAT var := var + 2 UNTIL var >= 101 END REPEAT; Утверждение EXIT используется, чтобы завершить утвержде- ния повторения (FOR, WHILE, REPEAT) прежде, чем конечное условие будет выполнено. Если утверждение EXIT располагается внутри вложенного по- вторения, то покидается контур, в котором расположено утвер- ждение EXIT. После выполнения утверждения EXIT выполняется первое утверждение после конца контура: END FOR, END WHILE или END REPEAT. Пример утверждения EXIT: SUM : = 0; FOR I := 1 ТО 3 DO FOR J := 1 TO 2 DO IF FLAG=1 THEN EXIT; END JF; SUM := SUM + J; ENDFOR; SUM := SUM +1; ENDFOR Если переменная FLAG имеет значение 0, переменная SUM будет равна 15 после выполнения утверждений. Если переменная 71
FLAG имеет значение 1, переменная SUM будет равна 6 после вы- полнения утверждений. Фиктивные утверждения создаются с помощью точки с запятой (;). Вызовы функциональных блоков FB и блоков DFB. Чтобы найти имена доступных функциональных блоков, следует обра- титься к библиотекам блоков. Перед вызовом блока FB/DFB он должен быть объявлен с ис- пользованием утверждений VAR и ENDVAR. Функциональные блоки и блоки DFB вызываются утверждением, которое состоит из имени экземпляра FB/DFB и сопровождается спи- ском распределения значений в скобках (фактические параметры) - формальными параметрами. Порядок распечатки формальных пара- метров в обращении функционального блока не имеет значения. Не требуется, чтобы всем формальным параметрам были распределены значения. Если формальному параметру не присвоено значение, на- чальное значение, определенное в редакторе переменных, использует- ся при выполнении функционального блока. Если начальное значение не определено, используется значение по умолчанию (0). Каждый экземпляр FB/DFB вызывается только один раз. Если функциональный блок не имеет входов или входы не парамет- ризова! 1Ы, фуI жциональный блок вызывается до использования выходов. Пример вызова функционального блока и блока DFB приведен на рис. 4.10. Name of instance Formal pararjieters CLOCK о ; COUNT (CUs «CLOCK. <Ak3, Н;=геаоС, PV:»100 + value) } Pulee (IN-.=COUWr.Q, ₽Ti=t#ls) ; Actual parameters out :s> COUNT.Q I 7 actual :» COUNT.CV ; Actual parameters Рис. 4.10 Выходы функциональных блоков и блоков DFB могут исполь- зоваться всегда при использова- Name ^stance нии переменной, предназначен- ной для чтения. Пример использования вы- хода функционального блока и DFB приведен на рис. 4.11, а пример вызова функционально- го блока —на рис. 4.12. Рис. 4.11 72
call «f th* FB« in ST VAR CLOCK t SY8CLOCK ; COUNT I CTU_DINT ; EN»_VAR СЬОСК () ; COUNT (CU:-CLOCK.CLK3, R:=reeet, PV;=100) } out:=COUNT.Q t currents«COUNT.CV ; Call of FBjInFBD CLOCK COUNT Рис. 4.12 Пример на рис. 4.12 показывает объявление и вызов функцио- нального блока на языке ST и его вызов на языке FBD. Обращения к функциям. Чтобы найти имена доступных функ- ций, следует обратиться к библиотекам блоков. Функции вызываются утверждением. Утверждение состоит из фактического параметра (переменной) выходов, следующего за Ним утверждения распределения «:=» и следующего за этим ут- верждением имени функции, сопровождаемого списком в скобках фактических параметров входов. Имеет значение порядок распе- чатки формальных параметров в обращении к функции. Функция может также вызываться утверждением, состоя- щим из фактического параметра (переменной), утверждения Распределения «:=», имени функции, сопровождаемой списком в скобках распределения значений (фактические параметры) Формальным параметрам. Порядок, в котором формальные па- раметры перечислены в обращении к этому экземпляру функ- ции, не имеет значения. 73
Пример обращения к ции приведен на рис. 4.13, | Примеры обращения функциям приведены на пиК 4.14 и 4.15. Примерна рис. 4.15 показы, вает объявление и обращение функции на языке ST и ее вызов на языке FBD. Actualjiarameter (output) OUT:=lIMIT_IHT(in^. 0. 5 + ver) I Name of the function nx Actual parameter (inputs) Рис. 4.13 Actual parameters Рис. 4.14 Комментарии. В ST-редакторе комментарии начинаются с сим- вольной цепочки «(*» и заканчиваются с символьной цепочкой «*)». Любой комментарий может быть введен между этими двумя сим- вольными цепочками. Комментарии могут быть введены в любую позицию в ST-редакторе. Комментарии отображаются в цвете. raflofthe FBinST OUT:=t,IMir_INTaNs=inl, MN:=0, MX:=S ♦ ver) ; call of FBr in FBD 1.2. Рис. 4.15 Стандарт не разрешает вложение комментариев. Однако их вложение можно осуществить, используя опцию (команду) Options ® Preferences ® IEC Extensions... ® IEC Extensions ® Allow nested comments. Проверка синтаксиса и генерация объектного кода. Генерация объектного кода выполняется вместе с проверкой синтаксиса, к°" 74
секция закрывается. Любые найденные ошибки затем отобра- Г,Яа тся в окне сообщений. Однако проверка синтаксиса с помо- ”<а команды Project ® Analyze section может также осуществ- ®ь1°сЯ вО время создания программы или блока DFB. ;,я Чтобы определить опции для проверки синтаксиса, используют -оманДУ меню Options ® Preferences ® IEC Extensions... ® IEC Ex- tensions. Активизация опции (флажка) Allow case insensitive keywords разрешит доступ к верхнему и нижнему регистрам для всех клю- чевых слов. Активизация флажка Allow nested comments разрешит ввод вложенных комментариев. Глубина вложения не имеет никаких ограничений. Чтобы определить опции для генерации объектного кода, ис- пользуется команда меню Project ® Code generation options. Активизация опции Fastest code (restricted checking) генери- рует код, оптимизируемый во время выполнения программы. Эта оптимизация осуществляется реализацией арифметики це- лого числа, например «+» или «-», через простые команды про- цессора вместо обращений к блоку EFB. Команды процессора выполняются намного быстрее, чем вызовы EFB, но они не ге- нерируют сообщения об ошибках типа переполнения арифмети- ки или массива. Эта опция должна использоваться, только если Вы уверены, что не имеется никаких арифметических ошибок в программе. Пример: IF i <= max THEN (*i и max имеют тип данных INT *) i:=i+l ; ENDJF-; Если при решении этого примера выбрать опцию Fastest code (restricted checking), сложение i + 1 будет осуществляться коман- дой процессора add, а код будет выполняться быстрее, чем при вызове EFB ADD_INT. Однако ошибка во время работы програм- мы не сгенерируется, если значение max будет 32767. В этом слу- чае значение i переполнится из 32767 в -32768! Стандарт допускает вызовы функций и функциональных бло- ков без распределения всех их входных параметров. Этим неис- пользуемым параметрам неявно назначен 0 или они поддержи- вают значение из последнего вызова (только функциональные блоки). 75
Активизация флажка Unassigned parameters cause warnings ото- бразит список неиспользуемых параметров в окне сообщений в0 время генерации объектного кода. При активизации флажка Enable Loop Control осуществляется проверка внутри IL- и ST-секций для контуров, чтобы определить будут ли эти контуры снова покидаться в течение некоторого пе- риода времени. Разрешенное время для контуров зависит от задан- ного времени сторожа. Разрешенное время всегда немного мень- ше, чем время сторожа. Это предотвращает появление бесконеч- ных контуров во время выполнения программы. Если обнаружива- ется бесконечный контур, обработка вызванной секции завершает- ся и обрабатывается следующая секция. Следующее сканирование будет обрабатывать секцию снова, пока бесконечный контур не будет обнаружен или пока секция правильно не завершится. 4.2. Создание программы ST Рассмотрим пример проектирования программы на языке про- граммирования ST. Для создания секции используйте команду меню File ® New Section... и введите имя секции. Имя секции (до 32 символов) должно быть уникальным для всего проекта. Имя секции должно удовлетворять соглашениям стандарта по имени или появится сообщение об ошибках. Согласно стандарту только символы позволяются как первый символ имени. Чтобы разрешить числа как первый символ, ис- пользуйте команду меню Options ® Preferences ® IEC Extensions ® IEC Extensions ® Allow leading digits in identifiers. Для создания логики используйте команду VAR...ENDVAR для объявления функциональных блоков и блоков DFB, с которы- ми вы хотите работать. Объявите переменные и их начальные значения в редакторе переменных. Пример логики программы: SUM : = 0; FOR I := 1 ТО 3 DO FOR J := 1 ТО 2 DO IF FLAG=1 THEN EXIT; END IF; 76
SUM := SUM + J ; END FOR; SUM := SUM +1; ENDJFOR Команда условия выбора меню доступна, только если имеется открытая текстовая секция (IL-редактор, ST-редактор или редактор типов данных). Используйте команду меню Expand Statement, чтобы завершить утверждение. Для ее вызова курсор мыши должен быть помещен на начальное утверждение (например, VAR, IF, CASE и т. д.). Пример ST-программы: Шаг 1 Введите IF. Шаг 2 Выполните команду меню Expand statement. Реакция Утверждение будет завершено с: IF THEN ELSEIF THEN ELSE ENDIF; Используйте команду меню Insert Text File..., чтобы открыть стандартное диалоговое окно Windows Open для загрузки файла ASCII в текстовую секцию. В противоположность функции импорта через опцию File ® Im- port (для файлов, которые нужно импортировать в FBD-и SFC- сскции) команда Insert Text File... меню не выполняет преобразова- ния. Например, не имеется никакой автоматической интеграции не- обходимых объявлений переменных (даже если они содержатся в файле ASCII) в редактор переменных. Необходимые объявления пе- ременных должны явно импортироваться из файла переменных через опцию File ® Import илг. должны быть вновь созданы. Если секция содержит объявления п< теменных, они должны быть удалены, иначе они вызовут ошибки во зремя генерации объектного кода секции. Если нужно также разрешить символы строчных букв, исполь- зуйте диалоговое окно Options ® Preferences ® IEC Extensions... ® IEC Extensions с опцией Allow case insensitive keywords. Сохраните ST-секцию с помощью команды меню File ® Save Project. 77
Используйте режим Animate для просмотра сигнальных со- стояний переменных. 4.3. Пример По условию задачи, приведенному в разд. 1.4, создайте про- грамму на языке ST. Возможное решение задачи представлено ниже: VAR FBI 110 : TON; FBI_1_15 : RS; FB119 : TON; FBI 13 : RS; END VAR FBI_1_3(S := on le AND NOT mot ri OR timeri, R1 := NOT stop OR time le); mot le := FBI 1 3.Q1; FBI 1_9(1N :=FBI_1_3.Q1, PT := t#5s); timele := FBI 1_9.Q; et le := FBI 19.ET; FBIl 1 5(S := on ri AND NOT motje OR time le, R1 := NOT stop OR time ri); mot_ri := FBI 115.Q1; FBIl 1O(1N := FBI 1 15.Q1, PT :=t#10s); time ri := FBI 110.Q; et_ri := FBI 1 10.ET; 78
5 ЯЗЫК ПОСЛЕДОВАТЕЛЬНОГО ФУ НКЦИОНАЛЬНОГО УПРАВЛЕНИЯ - SFC Графический язык (Sequential Function Chart) появился в 1979 г. как язык, позволяющий ясно и однозначно определить желаемое поведение системы управления. Отличается строгим математиче- ским определением, каждое операционное состояние системы мо- жет быть декодировано с очень небольшим анализом SFC удобен для описания как последовательных процессов, так и пакетных или параллельных процессов, легко комбинируется с другими языками (язык спецификаций), обладает развитыми механизмами син- хронизации, имеет простые динамические правила. Обеспечивает улуч- шение понимания оборудования при формировании модели его работы. Диагностика SFC позволяет обнаружить ошибки проекта до того, как приложение тестируется в режиме Online Интерактивно анимируемый SFC также служит для облегчения ди- агностики оборудования и ошибок системы управления и после ввода программы в действие. Использование SFC как диагностического инст- румента может уменьшать среднее время устранения таких неполадок. 5.1. Элементы языка SFC Язык SFC использует следующие структурные элементы для соз- дания программы (рис. 5.1): шаг (Step), переход (Transition), прыжок (Jump) и связи типа ответвления (Branch) и соединения (Joint). Step *---г* Jump Ali«<netrv» Blench ..' PsreBeVBtand) PereWel JMni 1-----------------------* Рис. 5.1 79
......-л. Initial Рис. 5.2 Язык SFC подразделяет секцию на отделы ные логические последовательные шаги с ис- пользованием шагов и переходов, которые чере- дуются на функциональной диаграмме (рис. 5.2). Два шага никогда не могут быть соединены непосредственно; они должны всегда отделяться переходом. Шаги и переходы связаны с помощью направ- ленных связей. Последовательности активных сигнальных состояний обрабатываются по направ- ленным связям, которые приводятся в действие переходами. Направление пошагового управления следует за направленными связями и начинается под предыдущим шагом к верхней части активно- го шага. Ветви обрабатываются слева направо. Один специальный шаг в SFC-секции дол- жен всегда определяться как шаг инициализации, который харак- теризует начальное состояние SFC-секции и показывается со сдво- енными линиями на границах. Шаг инициализации активен в на- чальном состоянии последовательности шагов инициализации, когда инициализируется программа, содержащая секцию. В пакете Concept шаг может быть идентифицирован как шаг инициализации не только в начале, но и в середине последовательности шагов. Шаг может быть также заменен прыжком. Последовательности шагов всегда ассоциируются с прыжком к другому шагу той же самой последовательности шагов. Это означает, что они выполня- ются циклически. Окно редактора не имеет никаких маркировок назначений прыжка. Назначения прыжка могут быть выбраны че- рез список результатов поиска (все шаги последовательности). Каждый шаг имеет нулевое или большее количество действий. Шаги без действия идентифицируются как идущий шаг. Каждый переход имеет условие перехода. После установления действия шаги могут быть очищены, только если действия предварительно удалены из шага. Чтобы избежать любого разделения последовательностей шагов, возможно вертикальное представление 99 непрерывных шагов с их переходами и дополнительным прыжком завершения с переходом- Чтобы ограничить сложность и разрешить анимацию, число объектов (шаги + переходы + ветви + соединения) в секции ограничено 2000. | Шаги, переходы и прыжки требуют одной ячейки каждый. Па- раллельные ответвления, параллельные соединения, альтернатив- 80
ные ответвления и альтернативные соединения не нуждаются в своей собственной ячейке, но вставляются в соответствующую ячейку шага или перехода. В дополнение к этим структурным элементам в секции SFC мо- жет также размещаться текст. Такой текстовый объект в зависимое™ от размера текста может занимать, по крайней мере, одну ячейку и расширяться на большее число ячеек по горизонтали и вертикали. Текстовые объекты могут быть помещены только в пустые ячейки. Шаг. Шаг представляется блоком, содержащим имя шага. Имя шага должно быть уникальным для всей программы. Шаг становится актавным, когда предшествующий ему пере- ход истанен, и при нормальных обстоятельствах становится неак- тивным, когда последующий за ним переход истинен. Однако может быть определено минимальное время, в течение которого шаг должен быть активен, и это называется временем задержки шага (step delay time). Кроме того, могут быть определены максимальное контролируе- мое время (maximum supervision time) и минимальное контролируе- мое время (minimum supervision time). Если происходит нарушение этих времен, то ошибка отображается в режиме анимации. Минимальное контролируемое время - время, в течение которого шаг должен быть активен. Если шаг становится неактивным прежде, чем пройдет это время, появится сообщение об ошибке, которое про- сматривается в режиме Online events. В режиме анимации ошибка дополнительно идентифицируется цветным оттенением шага. Максимальное контролируемое время - время, в течение кото- рого шаг может оставаться актавным при обычных обстоятельст- вах. Если шаг все еще активен после того, как это время пройдет, появится сообщение об ошибке, которое просматривается в режи- ме Online events. В режиме анимации ошибка дополнительно идентифицируется цветным оттенением шага. • Применяется следующее соотношение между временами: Время задержки шага < Минимальное контролируемое время < < Максимальное контролируемое время. Нормы времени могут быть введены в диалог реквизитов (рис. 5.3) либо непосредственно как литералы времени (в режиме Настройки контролируемых времен они могут быть определены автоматически), либо введеньг как многоэлементная переменная с типом данных SFCSTEPTIMES. Литералы времени могут быть изменены в режиме анимации. 81
Г Step f AciM>r> Г yanabte Г *f&et• 1—~— -------------------'------- .: J УагыШ dccRaa *on SecUtn vilarttoliro 1 Stop водя Aottom ;: , " Tmw jRuaWww - S' 1 I • upt-i wwiw «няе* <wul Г W>1 EP^HMlV variate d Uaefe Oeh>£ * M«iw> f “ rt) HrwW [~~ ‘ “““ Lj±_J _ _. J с»-*1 | | Рис. 5.3 Переменная SFCSTEP TIMES может использоваться везде и имеет следующую структуру: ’vamame’: SFCSTEP TIMES delay: TIME min: TIME max: TIME Здесь ’varname’.delay - время задержки шага, ’vamame’.min - минимальное контролируемое время, ’varname’.max — максималь- ное контролируемое время. Контролируемые времена относятся только к шагу, но не к на- значенным им действиям. Действия могут иметь собственные оп- ределенные периоды времени. Каждому шагу неявно назначена переменная Read Only (только для чтения) с типом данных SFCSTEP_STATE. Эта переменная шага имеет имя назначенного шага. Переменная шага может ис- пользоваться везде и имеет следующую структуру: ’Stepname’: SFCSTEP STATE t: TIME х: BOOL tminErr: BOOL tmaxErr: BOOL 82
Здесь ’Step name’.t - текущее время задержки в шаге; ’Stepname’.x: - переменная; если она равна 1, то шаг активный, если она равна 0, то шаг неактивный; ’Stepname’.tminErr - пере- менная; если она равна 1, то это антипереполнение диапазона ми- нимального контролируемого времени; если она равна 0, то нет антипереполнения диапазона минимального контролируемого времени; ’Stepname’.tmaxErr- переменная, если она равна 1, то это переполнение диапазона максимального контролируемого време- ни; если она равна 0, то нет переполнения диапазона максимально- го контролируемого времени. Объявление реквизитов шага. Реквизиты шага объявляются в диалоге реквизитов шага (рис. 5.4). Рис, 5,4 Ниже приведен алгоритм для объявления реквизитов шага. 1. Шагу должно быть дано его собственное имя или должно быть принято предложенное имя. При назначении нового имени следует обратить внимание на то, что это имя шага (максимум 32 символа) должно быть уникально для всего проекта. Если введенное имя шага уже существует, то последует предупреждение и необходимо выбрать другое имя. Имя шага должно удовлетворять соглашениям стандарта ЕС 61131-3 по имени, или появится сообщение об ошибках. Согласно стандарту только символы позволяются как первый символ имен шага. Вместо свободных имен также можно выбрать имена псевдо- нима. Если они есть в наличии, то они будут отображаться в SFC- и FBD-секциях, а также в функциях поиска, документации прило- жения и во время анализа. 2. Следует определить, является ли этот шаг шагом инициали- зации последовательности или нет. Для каждой последовательно- сти первый шаг должен быть определен как шаг инициализации. 3. Контролируемые времена и время задержки должны быть определены для шага выборочно. Нормы времени вводятся в диа- л°г реквизитов либо непосредственно как литералы времени 83
(в режиме настройки времен диспетчерского управления, где они могут быть определены автоматически) или перечисляются как многоэлементная переменная с типом данных SFCSTEPTIMES. 4. Для введения комментария для шага используется команд, ная кнопка Comment..., чтобы вызвать диалоговое окно Enter comment. Когда шаг выбран, этот комментарий будет отображать- ся в строке состояния окна редактора. Действие. Действия, которые должны выполниться в то время когда шаг активен, должны быть связаны с шагом. Действия объявляются в диалоге реквизитов инициализации шага (рис. 5.5.). Рис. 5.5 Шагу либо не назначаются никакие действия, либо назначают- ся множественные действия. Шаг, которому не назначено дейст- вие, имеет функцию ожидания, т. е. он ждет до тех пор, пока пере- ход, следующий за шагом, не станет истинным. Действие - это выходная переменная с типом данных BOOL. Управление действиями выражено спецификаторами. Действие может быть назначено выходу аппаратного обеспечения с использованием прямого адреса. В этом случае действие может служить сигналом разрешения для перехода, входным сигналом в FBD-секции и выходным сигналом для аппаратного обеспечения. Действие может также применяться как входной сигнал в дрУ' гой секции с использованием переменной. Эта переменная также называется переменной действия. С нелокализованными переменными действие используется как сигнал разрешения для перехода и как входной сигнал в FBD" секции. С локализованными переменными действие применяется как сигнал разрешения для перехода, входной сигнал в FBD-ceK' ции и как выходной сигнал для аппаратного обеспечения. 84
Чтобы просмотреть список всех предварительно объявленных переменных, используют командную кнопку Lookup. Если пере- менная не объявлена, применяют командную кнопку Variable declaration..., чтобы открыть редактор переменных и объявить тре- буемую переменную. Если переменная использовалась в макроко- манде, но не была вставлена в секцию, это делают командной кнопкой Section Instantiation... . С помощью команд Сору и Paste шаги могут быть скопированы между проектами. Если определение действия дает ссылку на пе- ременную, которая была определена редактором переменных для соответствующего проекта, то эта ссылка больше не может быть допущена при копировании в другие проекты. Тогда действие уда- ляется, список действий модифицируется и появляется сообщение об ошибках. Объявление действия. Действия объявляются в поле Actions. Для того чтобы объявить действие, необходимо: 1) перейти к окну списка Qualifier и выбрать спецификатор для действия. Это определит поведение действия (например, сохране- ние, несохранение, ограничение и т. д.). Кроме того, для специфи- каторов L, D и DS используется текстовый блок Time, чтобы уста- новить время действия, имеющее тип данных TIME; 2) установить в поле type, тип (переменная или прямой адрес) действия с помощью кнопки выбора; 3) если выбрана переменная, используйте кнопку Variable Declaration... для открытия редактора переменных и объявите но- вую выходную переменную. Можно также использовать команд- ную кнопку Lookup..., чтобы просмотреть список всех переменных и выбрать одну из них; 4) если выбран прямой адрес, то перейти к текстовому блоку Direct address: и указать адрес выхода; 5) после выполнения всех определений для действий их под- твердить с помощью командной кнопки <New>. Подтверждение с помощью клавиши <Enter> в этом случае невозможно и вызывает сообщение об ошибках. Для того чтобы изменить действие, необходимо: 1) выбрать действие в окне списка. После этого все определе- ния (спецификаторы, время, переменная или адрес и тип) действия принимаются в соответствующие текстовые окна и окна списка; 2) добавить эти новые определения к списку действий как но- вое действие с помощью командной кнопки <New>. Эти новые определения могут также использоваться с командной кнопкой "^Accept action>, чтобы отменить старые определения. 85
Для того чтобы удалить объявление действия, следует выбрать действие в окне списка и нажать командную кнопку <Delete>. При каждом связывании действия с шагом спецификатор назначенный для действия, определит управление действием' Спецификатор можно объяснить как вход внутреннего функ- ционального блока для логического связывания шага с действи- ем (рис. 5.6). Если шаг становится активным, вход этого внутрен- него функционального блока устанавливается в состояние 1. Те- перь функциональный блок обрабатывается согласно его типу. Ко- гда все условия истинны, выход Q (действие) устанавливается в состояние 1. Рис. 5.6 Возможные спецификаторы: N, None, S, R, L, D, Р и DS. Для L, D и DS дополнительно должно быть определено время действия с типом данных TIME. Спецификаторы N и «пусто» имеют одинаковое значение и представляют действие «не запомнить или не сохранить». Спецификатор S представляет действие «усгановить/сохранить»- Действие установки остается активным, даже если соответствующий шаг становится неактивным. Действие становится неактивным, толь- ко когда оно сброшено в другом шаге со спецификатором R. Спецификатор R представляет действие «доминирующий сброс»- Действие, которое было установлено на другом шаге со специфика- тором S, будет сброшено. Также возможно предотвратить действие от перехода в активное состояние. 86
На рис. 5.7 показан пример использования спецификатора R. b-«~ S_5J2 Рис. 5.7 В шаге S_5_l 0 действие АСТ1 становится активным и остается активным, пока оно не сброшено в шаге S_5_12. Спецификатор L представляет действие «ограниченный по време- ни». Если шаг становится активным, действие становится также актив- ным. После достижения определенного значения времени действие возвращается в состояние 0, хотя шаг мог бы все еще быть активен. Действие также будет равно 0, когда шаг становится неактивным. Спецификатор D представляет действие «задержанный по вре- мени». Если шаг становится активным, запускается внутренний таймер, и после того как определенное для действия время истек- ло, действие становится равным 1. Если шаг становится неактив- ным до времени действия, действие не станет активным. Спецификатор Р представляет действие «импульс». Если шаг становится активным, действие будет равно 1 и останется таким Для одного сканирования программы, при этом несущественно - остается или нет шаг активным. Спецификатор DS гредставляет действие «замедленный и со- храняемый/запоминае? .ый». Он является комбинацией специфика- торов D и S. Если шаг становится активным, внутренний таймер будет запущен, и после достижения определенного значения вре- мени действие становится активным. Действие станет снова неак- тивным, когда будет сброшено в другом шаге с использованием спецификатора R. 87
Переход. Переход указывает условие, которое передает управ- ление от одного или нескольких шагов, предшествующих перехо- ду, к одному или нескольким последующим шагам по направле- нию соответствующей связи. Переход разрешается, когда непосредственно предшествую, щие шаги активны. Переход вызывается, когда он разрешен и при- соединенное условие перехода истинно. Переходы с непосредср. венно предшествующими неактивными шагами не будут обраба- тываться. Теоретически время обработки перехода должно быть по воз- можности самым коротким, но оно никогда не может быть равным нулю. Минимальное время обработки перехода соответствует про- должительности программного цикла. Приведение в действие перехода может контролироваться ди- агностикой перехода. Если никакое условие перехода не определено, переход нико- гда не станет активным. Пуск перехода дезактивирует (сбрасывает) все непосредствен- но предшествующие шаги, связанные с переходом, затем активи- зирует все непосредственно следующие шаги. Если запущенный переход активизирует несколько шагов од- новременно, последовательности, которым эти шаги принадлежат, называются параллельными последовательностями. После их од- новременной активизации каждая из этих последовательностей выполняется независимо. Чтобы высветить специальную форму таких структур, ответвление и соединение параллельных последо- вательностей показываются двойной горизонтальной линией. Переход является переменной с типом данных BOOL. Переходу может быть назначен прямой адрес (вход или вы- ход), переменная (входная или выходная), литерал (0 или 1) или секция перехода (transition section). При назначении переходу прямого адреса, литерала или пере- менной имя адреса, имя литерала и имя переменной отображаются ниже значка перехода. При назначении переходу секции перехода имя секции перехо- да отображается выше значка перехода. Переменная, литерал или адрес, назначенные переходу, буду"1 только читаться и никогда не будут переписываться переходом. Как ранее было указано, с помощью команд Сору и Paste шаги могут быть скопированы между проектами. Так как условие пере- хода обращается к переменной, которая была определена редакто- 88
рОм переменных для соответствующего проекта, то может ока- заться, что эта ссылка больше недопустима, если она не была оп- ределена в новом проекте. В таком случае условие перехода уда- ляется и появляется сообщение об ошибках. Секция перехода. Секция перехода может быть создана для каждого перехода. Она является секцией, которая содержит логику условия перехода, а также автоматически связывается с переходом. Если выбор, сделанный в диалоге Options ® Preferences... , яв- ляется опцией Dynamic numbered, диалог Transition Properties ав- томатически отобразит обозначение псевдонима перехода. При вводе собственного имени для секции перехода следует обратить внимание на то, что каждая секция перехода может использоваться только один раз. Поэтому при вводе имени секции, использован- ной ранее, появится сообщение об ошибках. Секция перехода автоматически создается при первом откры- тии. Имя секции перехода теперь отображается выше значка пере- хода в SFC-редакторе. Если переход и включаемая им секция перехода не отредакти- рованы, анимируемая секция перехода отобразит состояние Dis- abled. Если другая опция выбрана как Transition section после того, как секция перехода была создана, появится сообщение с вопросом, была ли секция перехода очищена. Если ответ No, сек- ция перехода будет сохраняться. Можно также использовать ко- мандную кнопку Lookup, чтобы просмотреть список всех секций перехода, которые не используются в настоящее время. Языки программирования для секций перехода - FBD, LD, IL и ST. Выбор языка программирования для секций перехода осуществляется в диалоге Options ® Preferences... с опцией Editor type of transition sections. При выборе языка программирования FBD секция будет авто- матически создана с блоком AND, который имеет два входа и один выход и задает фактическое имя секции перехода. Рекомендуемый блок может теперь быть связан или изменен. В других языках про- граммирования предварительное программирование блока AND отсутствует. Функция редактирования для секций перехода по сравнению с «нормальными» секциями ограничена следующим: секция перехода имеет только один выход с типом данных &OOL, т. е. переменную перехода. Имя этой переменной должно быть идентично имени, введенному в поле Transition section; 89
переменные переходов могут быть записаны только один раз; могут применяться только функции, но не функциональные блоки; имеется только одна сеть, т. е. все используемые функции или непосредственно или косвенно взаимосвязаны; к секциям перехода можно обращаться только через команд- ную кнопку Edit... в диалоге Transition Properties. Они не показы- ваются в диалоге Open Section; в диалоге Delete Section секции перехода идентифицируются символом Т перед именем секции. Объявление перехода. Переходы объявляются в диалоге рек- визитов перехода (рис. 5.8). Рис. 5.8 Для определения типа условия перехода (секция перехода, пе- ременная, литерал или прямой адрес) используются кнопки выбо- ра в поле Type of transition condition. Секция перехода (Transition Section) может быть создана для каждого перехода. Она содержит логику условия перехода, а также автоматически связывается с переходом. Имя секции перехода отображается выше перехода в окне редактора. Можно использовать или действие SFC-секции, или нелокалй- зованную переменную любой секции как переменную для перехо- да. Имя переменной будет отображаться ниже перехода в окне ре* дактора. Можно также использовать действие SFC-секции, локализо- ванную переменную любой секции или сигнал аппаратного обес- 90
печения как переменную для перехода. Имя переменной будет отображаться ниже перехода в окне редактора. В качестве переменной для перехода можно выбрать констан- ту, которая также используется в FBD-секции. Значение константы определяется в редакторе переменных. Имя константы будет ото- бражаться ниже перехода в окне редактора. Переходу может быть непосредственно назначен литерал. Его значение будет отображаться на переходе в окне редактора. Следует использовать сигнал аппаратного обеспечения для управления переходом. Прямой адрес будет отображаться ниже перехода в окне редактора. Если выбрана переменная (Variable), используется кнопка Variable Declaration..., чтобы открыть редактор переменных и объ- явить здесь новую переменную. Можно также применить команд- ную кнопку Lookup... , чтобы просмотреть список всех перемен- ных и выбрать одну из них. Если выбран литерал (Literal), следует использовать кнопки вы- бора, чтобы установить значение TRUE или FALSE для перехода. Если выбран прямой адрес (Direct address), используется тек- стовый блок Direct address: и вводится адрес сигнала. При необходимости включают флажок Invert Transition, чтобы инвертировать условие перехода. Инвертированное условие пере- хода отображается на переходе с символом тильды (~) перед име- нем переменной. Можно использовать командную кнопку Comment для вызова диалогового окна Enter comment, в которое вводится комментарий для перехода. Этот комментарий будет отображаться в строке со- стояния окна редактора, когда переход выбран. После того, как все определения для перехода выполнены, ис- пользуют командную кнопку ОК для их подтверждения. Псевдонимы дли шагов и переходов. Шаги и переходы могут быть определены собственными именами или псевдонимами. При введении собственного имени следует обратить внимание на то, что это имя (максимум 32 символа) должно быть уникально для всего проекта. Если введенное имя совпадает с имеющимся в про- екте, то последует предупреждение и необходимо выбрать другое имя. Имя должно удовлетворять соглашениям стандарта по имени или появится сообщение об ошибках. Если выбранные псевдонимы для шагов и переходов есть в нали- чии, они будут отображаться в SFC- и FBD-секциях, а также в функци- ях поиска, документации приложения и в течение анализа программы. 91
Значение по умолчанию для шагов и переходов - свободное имя. При выборе обозначения псевдонима его активизируют Б диалоге Options ® Preferences ® Graphical Editors Preferences с on- цией Dynamic numbered. Свободные имена в этой опции будут за. менены вымышленными именами - псевдонимами. Чтобы восста- новить свободные имена, проект закрывают и не сохраняют его. Псевдонимы создаются динамически в течение процесса ре- дактирования и при разрешении опции Dynamic numbered. Обозначения псевдонима формируются из позиций шага и пе- рехода в секции. Шаги последовательно пронумерованы начиная с левой верх- ней секции. При использовании номеров столбцов и строк будет сформирован четырехразрядный номер шага (sszz). Псевдоним для шагов составляется из символьной цепочки S_ , части имени сек- ции (ппп), символа подчеркивания ( _ ) и номера шага (sszz) (Snnsszz). Псевдоним для переходов получается из псевдонима ячейки шага, расположенной перед переходом, даже если она пустая. Псевдоним для переходов составляется из символьной цепочки Т части имени секции (ппп), символа подчеркивания ( _ ) и номера ячейки шага (sszz) спереди от него (T nn sszz). Длина части имени секции, показываемой в псевдониме, сво- бодно определяется в диалоге Options ® Preferences ® Graphical Editors Preferences. Число символов (начинается с первого симво- ла) имени секции, которое должно быть включено в псевдоним, может быть в этой секции предопределено. При вставке и удалении псевдонимы шагов и переходов будут перенумерованы. Псевдонимы остаются пустыми, пока нумерация возможна. Это означает, что все объекты связаны в последова- тельность. На рис. 5.9 показаны примеры псевдонимов. Функции импорта и экспорта не распознают псевдонимов, по- тому что они созданы динамически. Визуализация восстанавлива- ет имена псевдонимов динамически, но не использует их для кон- фигурации фиксированных ссылок, потому что они постоянно из- меняются. Языки ST, IL и LD показывают свободные имена и не поддер' живают псевдонимы. Свободные имена сохраняются и появляются снова после выбора опции IEC like. Связь. Связи являются соединениями между шагами и пере' ходами. Обычно они автоматически создаются при размещении 92
объектов. Однако при размещении объектов в ячейках, которые не доходятся в непосредственной последовательности, логика должна буть явно установлена с помощью связи. Рис. 5.9 Одиночные последовательности. В одиночной последова- тельности чередовани: шагов и переходов повторяется последова- тельно (рис. 5.10). Последовательный процесс перехода из шага S_5_10 в шаг S_5_l 1 будет осуществляться, только когда шаг 510 находится в активном состоянии и когда условие перехода а истинно. Прыжок. Прыжок позволяет программе продолжать работу из различного положения. Прыжки в параллельную последователь- ность или из параллельной последовательности невозможны. 93
Рис. 5.10 Имеется два вида прыжков: прыжок последо- вательности и контур последовательности. Прыжок последовательности является част- ным случаем альтернативного ответвления, где одно или несколько ответвлений не содержат ша- ги (рис. 5.11). Последовательный процесс перехода из шага S 510 через шаги S_5_l 1 и S 512 в шаг S_5_13 выполняется, только когда шаг S 5_ 10 является активным и условие перехода а истинно. После- довательный процесс перехода из шага S_5_10 прямо в шаг S_5_13 выполняется, только когда шаг S_5_10 является активным и условие перехо- да b истинно, а условие а ложно. Контур последовательности (рис. 5.12) - это частный случай альтернативного ответвления, где одно или не- сколько ответвлений выполняют возврат к предыдущему шагу. Рис. 5.11 Последовательный процесс S_5_10 выполняется, только если условие перехода с является ложным, а условие b - истинным. 94 Рис. 5.12 перехода из шага S511 в шаг
Ответвления. Различают альтернативное ответвление и па- аллельное ответвление Альтернативное ответвление - это условное программирование ответвлений в потоке управления SFC-структуры. В альтернативных ответвлениях шаг продолжается нескольки- ми переходами под горизонтальной линией, которые являются различными процедурами (рис. 5.13). Только один из этих перехо- дов может функционировать в данный момент времени. Какое от- ветвление будет осуществляться, определяется результатом вы- полнения условия перехода для переходов, которые следуют за альтернативным ответвлением. Переходы ответвления обрабаты- ваются слева направо. Если усло- вие перехода истинно, остающие- ся переходы больше не будут обрабатываться. Ответвление с истинным переходом становится активным. Результатом является приоритет обработки ветвей слева направо. Если никакой переход не действует, активный в настоящее время шаг остается активным. Последовательный процесс перехода из шага S_5_10 в шаг 1 выполняется, только когда а условие перехода а истинным. Последовательный процесс пере- хода из шага S510 в шаг S 512 выполняется только когда шаг S_5_10 является активным, условие перехода b истинным, а усло- вие а ложным. Все альтернативные ответвления должны быть соединены сно- ва в одну ветвь с использованием альтернативных соединений или прыжков. В параллельных ответвлениях (рис. 5. 14) обработка разбивает- ся на две или больше последовательностей, которые продолжают Параллельно обрабатываться. Только один общий переход позво- ляется непосредственно выше горизонтальной двойной линии синхронизации. Последовательный процесс перехода из шага S_5_10 в шаги S-5_ll, S_5_12 (и т. д.) выполняется, только если шаг S_5_10 яв- ляется активным и условие перехода «а», которое является частью 95
общедоступного перехода, истинно. После параллельной активи- зации шагов S_5_ll, S_5_12 (и т. д.) последовательности шагов обрабатываются независимо друг от друга. Рис. 5.14 Если шаг стал шагом инициализации внутри параллельного от- ветвления, то один шаг в каждой ветви параллельного ответвления должен быть определен как шаг инициализации. Соединение. Различают альтернативное соединение и парал- лельное соединение. При альтернативном соединении различные ветви альтерна- Рис. 5.15 тивного ответвления соеди- няются снова в одну ветвь, где затем продолжается об- работка (рис. 5.15). Это со- единение может также вы- полняться прыжком. Последовательный про- цесс перехода из шага S_5_10 в шаг S_5_12 выпол- няется, только когда шаг S_5_10 является активным и условие перехода d истинно. Последовательный процесс перехода из шаг S 5 12 шага S_5_8 в выполняется, только если шаг S_5_8 явля- ется активным и условие Ц 96
рехода b истинно, и, следовательно, выполняется прыжок в шаг $ 5 12. Последовательный процесс перехода из шага S511 в шаг 12 выполняется, только когда шаг S_5_l 1 является активным Условие перехода «е» истинно. Только одна из этих ветвей, соот- ветствующая первому условию перехода в альтернативном от- ветвлении, является активной. Параллельное соединение объединяет два или более парал- лельных ответвления, чтобы сформировать одну ветвь (рис. 5.16). Переход, следующий за параллельным соединением, обрабатыва- ется, когда все прямые предшествующие шаги установлены. Толь- ко один общий переход непосредственно ниже двойной горизон- тальной линии синхронизации возможен. Рис. 5.16 Последовательный процесс перехода из шагов S_5_10, S511 (и т. д.) в шаг S513 выполняется, только если шаги S5 10, S_5_l 1 (и т. д.) являются активными одновременно, а условие пе- рехода d, которое является частью общего перехода, истинно. 5.2. Редактирование элементов языка SFC Создайте новую секцию, выберите язык SFC и введите имя секции. Имя секции (до 32 символов) должно быть уникаль- ным для всего проекта. Имя секции должно удовлетворять со- глашениям стандарта по имени, иначе появится сообщение об ошибках. Фон окна в редакторе SFC - это логическая сетка на 200 строк и 32 столбца. Теоретически объекты SFC могут быть помещены в любую свободную ячейку. Если при этом создается связь с другим 97
объектом (явно или размещением объекта в соседней ячейке), Оца будет проверена. При несанкционированном соединении появится сообщение и объект не будет вставлен. Вставка объектов. Объекты SFC (шаг, переход и т. д.) могут быть вставлены по отдельности или как группа согласно размеру секции с помощью команд главного меню Objects (последователь- ность шагов и переходов, структурированная параллельная после- довательность и т. д.). После выбора команды меню форма будет открыта ниже знач- ка в инструментальной панели, где число необходимых последова- тельностей объектов может быть указано. Далее выбирают позицию в последовательности шагов, в кото- рую объекты должны быть вставлены. Если ага позиция уже заня- та, выбирается свободная область, включенная в последователь- ность шагов перед вставкой. В эту область затем будут помещены объекты. Если объекты помещаются на связь, она аннулируется, объекты вставляются и устанавливается связь с только что поме- щенными объектами. То же самое происходит, когда объекты пе- ремещаются на связь. Используйте команду Quit, чтобы закрыть форму без активиза- ции режима. Выбор (вставка) объектов. Для выбора объектов имеется не- сколько возможностей. Для выбора одного объекта: 1) перейдите к режиму выбора; 2) позиционируйте указатель мыши на объект, который будет вы- бран, и щелкните левой кнопкой мыши. Для выбора нескольких объектов (нажим клавиши <SHIFT>): 1) перейдите к режиму выбора; 2) позиционируйте указатель мы- ши на первый объект, который будет выбран, и щелкните левой кнопкой мыши; 3) нажмите клавишу <SHIFT>, удерживайте ее и выберите другие объекты, щелкая левой кнопкой мыши. Для выбора нескольких объектов (с эластичной функцией): 1) пе- рейдите к режиму выбора; 2) удерживая кнопку мыши, нарисуйте рамку вокруг объектов, которые будут выбраны. В результате все объекты, затрагивающие рамку, будут выбраны Для выбора всех объектов в столбце/строке: 1) перейдите к ре' жиму выбора; 2) в граничной линии строки/столбца нажмите на номер столбца/строки объектов, которые будут выбраны; Для того чтобы выбрать несколько столбцов/строк, удерживай- те нажатой клавишу <SHIFT>. 98
Для вставки большего количества столбцов/строк внутри по- следовательности шагов, которая уже создана, используйте коман- ду Insert меню в SFC-редакторе, чтобы вставить другую стро- ку/столбец в вашу последовательность шагов. Для вставки дополнительных столбцов: 1) перейдите к режиму выделения; 2) в граничной линии столбца нажмите на номер столбца, чтобы сделать вставку до этого столбца; 3) выполните команду меню Edit ® Insert. В результате при старте в выбранном столбце полная последовательность шагов будет перемещаться на один столбец вправо. Связи не будут нарушены. Для вставки отдельных столбцов нажмите клавишу <SHIFT> и выберите отдельные столбцы, которые вставят соответствующее число пустых столбцов. Для вставки нескольких столбцов используйте клавишу <SHIFT> для маркировки нескольких столбцов, которые вставят соответствующее число пустых столбцов. Дополнительные строки вставляются аналогично вставке до- полнительных столбцов. Условие выбора объектов. Команда условий выбора меню доступна только в SFC-редакторе. Режим выбора объектов: 1) выберите объект редактирования; 2) переместите его к желаемой позиции. Для вызова реквизитов шагов сделайте двойной щелчок на ша- ге или выберите шаг и вызовите команду меню Objects ® Proper- ties, чтобы открыть диалоговое окно Step Properties. Для вызова реквизитов переходов сделайте двойной щелчок на переходе или выберите переход и вызовите команду меню Objects ® Properties, чтобы открыть диалоговое окно Transition Properties. Для вызова реквизитов прыжков сделайте двойной щелчок на прыжке или выберите прыжок и вызовите команду меню Objects ® Properties, чтобы открыть диалоговое окно Jump properties. Для редактирования ответвлений/соединений ширину ответвле- ний/соединений можно изменять с целью вставки большего количе- ства ответвлений. Для этого необходимо: 1) выбрать объект; 2) вы- дать прямоугольник фрейма выбора (выделения); 3) переместить прямоугольник вправо. Это создает одно дополнительное ответвле- ние на модуль сетки; 4) повторять пи. 1) -3), пока соответствующий Размер объекта не будет достигну г. Для удаления ветви переме тите прямоугольник установления Размеров фрейма выбора влево. 99
5.3. Интерактивные функции В SFC-редакторе секции Moiyr анимироваться и последовательность шагов может управляться. Кроме того, последовательность шагов может настраивать контролируемые времена. Диспетчерское управление по- следовательности выполняется диагностикой ошибок перехода. Анимация. Анимация активизируется командой меню Online ® Animation. В режиме анимации активные шаги, время, в течение которого шаги являются или были активными, ошибки диспетчерского управления времени шагов и состояние переходов (истинно, лож- но) будут отображаться в различных цветах в окне редактора: символ шага белый символ шага зеленый символ шага сиреневый символ шага желтый время, индицируемое на символах шагов когда шаг значок перехода черный значок перехода красный значок перехода зеленый фон переменной перехо- да бежевый фон переменной перехо- да пурпурный имя многоэлементной переменной (например, Motor) отображено на цветовом фоне имя целого элемента многоэлементной пере- менной (например, Motor.right.on) будет иметь цветовой фон имя многоэлементной переменной (например, Motor.right.on) изображе- но на цветовом фоне (но не имя элемента) - шаг- неактивный; — шаг активный; — максимальное контролируемое время превышено. Отображение ошибки завершается, когда шаг становится неактивным; - минимальное контролируемое время не достигну- то. Отображение ошибки не завершается, когда шаг становится неактивным; - время, которое прошло с того момента, стал активным. Отображение времени активных шагов модифицируется один раз в секунду. После того как шаг стал неактивным, отображение времени поддерживается до тех пор, пока шаг не становится активным снова. При каждой активизации шага старое время сбрасывается и время начинается с 0; - переход в настоящее время не находится в режиме редактирования; - переход находится в режиме редактирования, но условие перехода не выполнено; — переход находился в режиме редактирования и выполнено условие перехода; — переменная форсирована; - переменная установлена циклически; - редактор покажет один или несколько элементов многоэлементной переменной (например, Motor), которые установлены форсированными или цикли- ческими; - редактор покажет элемент многоэлементной пере- менной (например, Motor.right.on), который форси- рован или циклически установлен; - редактор покажет элемент многоэлементной пере- менной (например, Motor.right.on), который не форсирован или не установлен циклически, но другой элемент этой многоэлементной переменной циклически установлен или форсирован. 100
Если переход и включаемая им секция перехода не находятся в режиме редактировании, анимируемая секция перехода отобразит состояние DISABLED. Обычно только текущие оцененные переходы анимируются и их состояние (условие перехода выполнено, условие перехода не выполнено) отображается. Однако опция, позволяющая рассмот- реть текущие условия переходов, которые не находятся в режиме редактирования, также доступна. Эта опция только покажет усло- вие переходов, но не будет изменять поведение последовательно- сти. Чтобы изменить поведение последовательности, нужно ис- пользовать функциональный блок XSFCCNTRL группы SYSTEM библиотеки. Кроме того, следует войти в диалог Options ® Prefer- ences ® Graphical editors и инициировать флажок Animate all tran- sition section conditions. Функция, реализующая блоки XSFCCNTRL, вызывает главную нагрузку цикла как результат всех переходов в соответствующей секции в цикле, который теперь выполняется и анимируется в одном цикле, в то время как переходы обычно выполняются в подчиненной последовательности, для обработки состояния «пре- дыдущий шаг активный / не активный». Для просмотра всех условий (состояния) перехода, необходимо: 1) создать FBD-секцию и вставить функциональный блок XSFCCNTR из группы SYSTEM библиотеки; 2) записать в качестве образца имени функционального блока XSFCCNTRL секцию SFC, которую нужно анимировать; 3) задать входу ALLTRANS функционального блока XSFCCNTRL значение 1 (через литерал обрабатываемого процесса или через переменную). Это инициирует вычисление всех условий перехода, иначе отобразится и «старое» состояние перехода; 4) использовать команду меню Project ® Execution order...), чтобы секция FBD выполнялась перед анимируемой секцией SFC; 5) инициировать флажок Animate all transition section conditions in the dialog Options ® Preferences ® Graphical Editors; 6) загрузить программу в ПЛК и запустить анимацию SFC- секции. Все условия перехода будут теперь отображены. Условие перехода может быть изменено, если оно является ли- тералом. В шагах максимальное контролируемое время, мини- мальное контролируемое время, время задержки и время для дей- ствий могут изменяться. Эти изменения загружаются в ПЛК инте- рактивно. 101
Управление последовательностью шагов. Управление по- следовательностью шагов требует, чтобы режим анимации ддя секции был активен. Имеется три опции для управления последовательностью: 1) с помощью панели анимации; 2) с помощью команд меню в основном меню Online; 3) с помощью функционального блока SFCCNTRL. Если последовательность управляется одновременно через различные опции, эти управляющие воздействия имеют равный приоритет. Вмешательство управления в одну из опций также отображает- ся в других двух опциях. Вмешательство управления через команды в основном меню Online и через панель анимации может быть блокировано функ- циональным блоком SFCCNTRL. Панель анимации, команды меню. Управление анимацией активизируется командой меню Online ® Show animation panel. Панель анимации содержит те же самые опции, которые явля- ются доступными и как команды меню. Панель анимации и команды меню используются для проверки обработки SFC-секции. Например, шаги могут быть переключены, редактирование последовательности может управляться (должны ли переходы и/или действия быть отредактированы или нет), ошибки времени могут быть сброшены или последовательность может быть возвращена в начальное состояние. Команды Set Reset Flag, Disable Transitions, Disable Actions, Step Unconditional, Step Trans-dependent и Force Selected Step(s) не должны быть использованы при поиске ошибок в контроллерах станков, процессов или систем сопровождения материалов в то время, когда последние находятся в работе. Это может привести к опасным и разрушительным действиям инструментальных средств или процессов, соединенных с контроллером. Команды Set Reset Flag (сброс последовательности) использу- ются для того, чтобы сбросить последовательность до стандарти- зированного начала. Активизация команды Set Reset Flag останав- ливает последовательность и все действия будут сброшены, а вмешательство оператора будет заблокировано. Для выполнения последовательности следует сначала активи- зировать, а затем дезактивизировать команду Set Reset Flag. Ис- пользуйте фронт 1 ® 0 для сброса последовательности, т. е. ДДЯ активизации шага инициализации. 102
Если активизирована команда Disable Time Check, контроли- руемые времена шагов больше не оцениваются. Однако время за- держки (delay time) все еще активно. Если активизирована команда Disable Transitions, состояния переходов больше не оцениваются. Последовательность остается в текущем состоянии независимо от сигналов при переходах. По- следовательность может только эксплуатироваться командами управления Set Reset Flag, Step Unconditional, Step Trans Dependent. Если активизирована команда Disable Actions, действия шагов больше не редактируются. Команда Step Unconditional активизирует следующий шаг, да- же если переход не выполнен. Независимо от состояния перехода, следующий шаг будет активизирован, но только до тех пор, пока время (delay time) активного шага не истекло. В параллельных ответвлениях команда Step Unconditional все- гда активизирует каждое ответвление; в альтернативных ответвле- ниях Step Unconditional всегда активизирует левое ответвление. Для зависимой от процесса активизации ветвей используйте команду Step Trans Dependent. Если условие перехода удовлетворено, следующий шаг будет активизирован. Команду Step Trans Dependent рекомендуется использовать только с командой Disable Transitions. При замораживании переходов (Disable Transitions) можно пе- рейти к команде Step Trans Dependent и выполнить ручное шаг за шагом редактирование элементов в последовательности. Тем вре- менем переходы будут коммутироваться в зависимости от условий перехода. Если активизирована команда Reset Time Errors, сообщение об ошибках, отображающее контролируемые времена в SFC-секции, будет сброшено. Команда Force Selected Step(s) активизирует выбранные шаги, Даже если переход не выполнен. Независимо от состояния перехо- дов и шагов выбранные шаг/шаги будут активизированы. В альтернативных ответвлениях может быть активизирован только один единственный шаг и, если требуется, одно единствен- ное ответвление. В параллельных ответвлениях шаги могут быть установлены, только если процесс уже находится в параллельном ответвлении. Это означает, что один шаг в каждом ответвлении активен. Если один шаг в параллельном ответвлении установлен, другие парал- лельные шаги не воспринимают воздействия. 103
Перечисленные выше функциональные возможности не дос- тупны через функциональный блок SFCCNTRL. Настройка контролируемых времен. Этот режим контроли- рует минимальные и максимальные времена, в течение которых шаги были активны. После дезактивации режима эти времена для отдельных шагов отображаются в диалоговом окне Learn Step Supervision Times. Оттуда они могут быть приняты в реквизиты шага как минимальное и максимальное контролируемые времена. Эти функциональные возможности не доступны через функцио- нальный блок SFCCNTRL. Для хранения всех обнаруженных времен шагов при сканиро- вании требуется время. Поэтому может случиться, что время, в течение которого выполняется отдельный шаг, не будет обнару- жено в очень больших последовательностях шагов и очень корот- ком периоде сохранения, так как произойдут внутренние перекры- тия времен. Если шаг назначается как переменная с типом данных SFCSTEPTIMES или как константа в диалоге the Step properties dialog, рассматриваемые времена задаются переменной или константой как первоначальные значения. Предопределенное пер- манентное использование этих первоначальных значений не раз- решает записать соответствующие компоненты (минимум, макси- мум) этих переменных. Контролируемые времена настраиваются один раз, модифици- рованные первоначальные значения констант должны быть загру- жены в ПЛК командами Online ® Download Changes, а перемен- ных - командами Online ® Download. Контролируемые значения не сохраняются, пока отдельные шаги не будут неактивными, т. е. если шаг не был активизирован во время режима настройки контролируемых времен, никакие зна- чения не будут проконтролированы для этого шага. Следует удостовериться, что были обнаружены, по крайней мере, два цикла, которые являются типичными для исследуемого процесса. Вычисление времени обучения (’’Learned” time). Это можно выполнить по следующим формулам: Minimum supervision time (minimum) = = smallest derived time x minimum [%]; Maximum supervision time (maximum) = = highest derived time x maximum [%]. 104
Пример 5.1: Производные времена для шага: Is, 2s, 2s Minimum [%]: 50 Maximum [%]: 200 Используя здесь приведенные выше формулы, получаем ми- нимальное контролируемое время 500 ms и максимальное контро- лируемое время 4 s. Если имеется время задержки (запаздывания) для шага, это будет учтено во время вычислений. Если время запаздывания больше, чем расчетное минимальное контролируемое время, то расчетное минимальное контролируемое время будет установлено равным 0 ms. Пример 5.2: Производные времена для шага: Is, 2s, 2s Delay: 2s Minimum [%]: 50 Maximum [%]: 200 Здесь минимальное контролируемое время 0 ms, а максималь- ное контролируемое время 4 s. Если время запаздывания было введено для шага, оно будет также учтено и в вычислении максимального контролируемого времени. Если время задержки больше, чем расчетное максималь- ное контролируемое время, то оно будет проигнорировано, и вме- сто него будет использовано настроенное значение. Далее рассматриваются два случая. Пусть задано значение для минимального контролируемого времени. Тогда значение для максимального контролируемого времени рассчитывается по следующей формуле: Minimum supervision time + 20 ms Пример 5.3: Производные времена для шага: 2s, 2s, 2s Delay: 3 s Minimum [%]: 200 Maximum [%]: 100 105
Здесь, согласно приведенной выше формуле расчета, получим минимальное контролируемое время 4s и максимальное контроли- руемое время 4s20ms. Пусть теперь значение для минимального контролируемого времени не задано. Тогда значение для максимального контроли- руемого времени рассчитывается по следующей формуле: Delay time + 20 ms. Пример 5.4: Производные времена для шага: Is, 2s, 2s Delay: Is Minimum [%]: 50 Maximum [%]: 100 Здесь, согласно приведенной выше формуле, получаем мини- мальное контролируемое время 0s и максимальное контролируе- мое время 1 s20ms. Обнаружение ошибок перехода. Диагностика ошибок пока- зывает, что переход в следующий шаг (с параллельными ответвле- ниями в следующие шаги) внутри специфического периода време- ни после шага, непосредственно предшествующего переходу, стал активным. Если этого не происходит, то связанная сеть пере- ходов (с альтернативными ответвлениями сети всех связанных пе- реходов) анализируется и ошибки вместе с проанализированными сигналами регистрируются в буфере ошибок. Буфер ошибок может быть проанализирован только с программным обеспечением ви- зуализации. Эффективность обнаружения ошибок перехода может сравниваться с эффективностью обнаружения ошибок реакции (см. функциональный блок READIA библиотеки блоков DIAGNO). В отличие от обнаружения ошибок реакции, при обна- ружении ошибок перехода контролируются ответы всех начатых действий и в случае необходимости дополнительные условия. Об- наружение ошибок перехода выполняется только в активной по- следовательности. Для того чтобы активизировать обнаружение ошибок перехода, следует ввести контролируемое время в поле Maximum реквизитов шага сразу после предшествующего шага (также обратитесь к настройке контролируемых времен). Если по- ля остаются пустыми или введенное время равно 0, диспетчерское управление перехода неактивно. Кроме того, следует перейти к диалогу Project ® Code generation options.. ® Code Generation Op- 106
tions для активизации опции Include diagnosis information, чтобы обеспечить память для буфера ошибок в ПЛК. Измененная конфи- гурация в дальнейшем должна быть загружена в ПЛК. 5.4. Пример Грузовой лифт обслуживает два этажа. Для управления лифтом имеется по одной кнопке на каждом из этажей: на нижнем этаже для подачи команды на подъем (up); на верхнем этаже для подачи команды на спуск (down). Для индикации положения лифтовой кабины установлены два концевых выключателя: верхний (ini) и нижний (in2), которые предназначены для индикации положения лифтовой кабины. Программа в виде диаграммы, представленная на рис. 5.17, по- зволяет дать описание логической схемы алгоритма управления лифтом при помощи операторов языка SFC. Она представляет собой по- следовательность шагов в цикле управления. Логика перехода от одного шага к другому опреде- ляется значением операторов перехода, располагающихся ме- жду шагами. Каждому шагу программы со- ответствует действие (движение вверх UP или вниз DOWN). Пере- ход к следующему шагу разреша- ется в случае истинности логиче- ского условия перехода (например, при срабатывании верхнего конце- вого выключателя). Начальный шаг S_1_1 акти- визируется в начале выполнения программы. Особенность данной программы заключается в том, что имеется разветвление логики управления лифтом в соответст- вии с выбираемым действием: движение вверх или вниз в зависи- мости от положения лифта в текущий момент времени. Если грузовой лифт находится на первом этаже, то выполняется переход от шага S_1 1 к шагу S_7. в том случае, если выполняется логическое условие tsl: (tsl=in2.Z ND.up), где in2 - нижний концевой выключатель; AND - логическое И; up - кнопка вверх (рис. 5.18) 107
Д.1 (1) Ь1О—О ----- ANO_BOOL ---Otsl Рис. 5.18 При этом шаг S_l_l пере. ходит в неактивное состояние шаг S_l_2 становится актив- ным: лифт движется вверх. Пе- реход ini от шага S_l_2 к шагу S11 разрешается в тот мо- мент, когда лифт поднимется на второй этаж, в результате чего произойдет срабатывание верхнего концевого выключателя. Шаг S_l_2 становится неактивным, и выполняется переход к шагу S11, который будет оставаться активным до тех пор, пока не по- ступит команда down. Если грузовой лифт находится на втором этаже, то разрешает- ся переход ts2 от шага S_1_1 к шагу S_l_3, когда становится ис- тинным логическое условие (ts2 = ini .AND.down), где ini - верхний концевой выключатель; AND - логическое И; down - кнопка вниз (рис. 5.19) При этом шаг S_l_l пере- ходит в неактивное состояние, шаг S_1 _3 становится актив- ным: лифт движется вниз. Пе- реход in2 от шага S_l_3 к шагу S_l_l разрешается в тот мо- мент, когда лифт опустится на первый этаж, в результате чего произойдет срабатывание ниж- него концевого выключателя. Шаг S_l_3 станет неактивным, и произойдет переход к шагу S1 _1, который будет оставаться ак- тивным до тех пор, пока не поступит команда up. В программе используются булевы логические переменные: ini с адресом 100001; in2 с адресом 100002; up с адресом 000005; down с адресом 000006. ,3.1(1) -- WO—C AND..8OOL Рис. 5.19 —.. 108
6. ПРОГРАММИРОВАНИЕ КОНТРОЛЛЕРОВ MODICON TSX С ПОМОЩЬЮ ПАКЕТА CONCEPT Семейство ПЛК Modicon TSX включает в себя широкий набор ком- пактных и высокопроизводительных контроллеров: Quantum, Compact, Atrium и устройство сопряжения с объектом (УСО) Momentum. Независимо от аппаратной реализации все они имеют: общие принципы функционирования; возможность программирования с помощью пяти языков стандарта, а также языка лестничной (ступенчатой) логики (LL984 - Ladder Logie); различные сетевые интерфейсы для объединения с другими ПЛК и УСО в локальные сети Ethernet, Modbus Plus (МВ+), Interbus, Profibus и т. д. 6.1. Структура программируемого логического контроллера Modicon TSX Quantum и его памяти Общая модульная структура ПЛК и структура его памяти приведе- ны на рис. 6.1 и 6.2, где приняты обозначения: ЦП (CPU) - центральный процессор; ПТА, ШД, ШУ - шины адреса, данных и управления соответ- ственно; С-процессор - сотт-процессор или связной процессор. кгналы к исполнительным уетрОЙСТБДЫ Сигналы от датчиков Обмен информацией с другими устройствами Рис. 6.1 109
Fluh-гимгть Опсрационна» система Память программы пользователя Память данных пользователя Таблицы конфигурации системы Специальные загружаемые функции Таблицы Status RAM (дискреты и регистры) Таблица Enablc/Disablc Рслейно* контактная логика пользователя Таблица предыдущего состояния Рис. 6.2 Модуль центрального процессорного устройства (ЦПУ) зани- мает одно установочное место и включает в себя системную па- мять, память прикладных программ, порты связи. ЦПУ контроллера использует технологию перезаписываемой постоянной памяти (Flash) для хранения данных в системной па- мяти и хранения набора инструкций. Вся память встроена, поэтому для конфигурации не требуется дополнительных микросхем или плат. Основными компонентами памяти являются: Flash-память, память программы пользователя и память данных пользователя. Flash-память - постоянное запоминающее устройство (ПЗУ), в ней находится операционная система (ОС), представляющая собой совокупность супервизорных программ, которые устанавливают идентичность данного ПЛК с конкретным семейством. Эти про- граммы: 1) определяют язык программирования, на котором пишется программа пользователя (например, FBD, LD и др.); ПО
2) осуществляют управление статической и динамической па- мятью для различных целей; 3) устанавливают порядок обработки и хранения данных в ПЛК. Память программы пользователя и память данных пользовате- ля - это статическое оперативное запоминающее устройство (ОЗУ) (КМОП), поддерживаемое литиевой батареей (срок службы 1 год) или специальным буферным конденсатором (время сохранения информации 72 часа). Область памяти, содержащей программу пользователя, называ- ется областью логики. Память программы пользователя предна- значена для хранения: таблиц конфигурации системы (режим работы ПЛК, парамет- ры коммуникационных портов, таблицы параметров поддержи- ваемых ЦП модулей ввода/вывода, диспетчер сегментов логики пользователя, таблицы блока STAT и т. д.); специальных загружаемых функций; собственно логики программы пользователя (совокупность сегментов и секций). Все входы и выходы ПЛК имеют соответствующее отображе- ние (ссылки) в памяти данных пользователя, которая организована в виде отдельных бит (разрядов) и 16-битовых регистров. Кроме того, свои ссылки имеют некоторые внутренние узлы релейно- контактной логики. Таблица текущих ссылок называется таблицей Status RAM. Для распознавания фронтов сигналов в памяти данных сохра- няются таблицы истории всех бит и входных регистров. Ручная установка значений бит может осуществляться с помо- щью таблиц разрешения/запрета (Enable/Disable). Контроллеры Modicon TSX Quantum. Поддерживая не- сколько языков программирования (табл. 6.1), контроллер Quantum обеспечивает обработку информации для периодиче- ского и непрерывного управления. Для программирования Quantum используется программное обеспечение пакета Concept, соответствующее стандарту IEC 61131-3. В дополне- ние к пяти языкам, утвержденным этим стандартом, контроллер Quantum может выполнять программы, написанные на языке ступенчатой логики LL984 (для связи с пакетом Modsoft) и на специальных языках (например, C++) для конкретных приложе- ний, разработанных другими фирмами. 111
Таблица 6 ] Язык Программное обеспечение Объект описания — Языки, утвержденные ТЕС 61131-3 FBD CONCEPT Математика, бистабильные элементы, компараю.1 ры, преобразователи, счетчики, таймеры, логика, обнаружение фронтов, связь, диагностика SFC CONCEPT Язык состояний, использующий шаги и переходы I IL CONCEPT Набор булевых инструкций (язык символического кодирования типа Ассемблер) ST CONCEPT Набор инструкций уровня языка типа Паскаль LD CONCEPT Дискретные контакты, катушки и функциональные блоки Языки, неутвержденные IEC 61131-3 , LL984 CONCEPT, Modsoft, ProWorx Контакты, катушки, функциональные блоки, управление процессами, редактор уравнений, воз- можности связи «С» Tool Kit Borland Си Программы, написанные на Си Другие языки См. каталог ModConnect Высокопроизводительные функции прерываний. В неко- торых приложениях необходимо обновлять данные вво- да/вывода, не дожидаясь конца цикла обработки программы. Контроллер Quantum отвечает этим требованиям благодаря применению служебных функций прерывания для ввода/вывода в высокоскоростных приложениях. Служебные функции вклю- чают временную обработку прерываний и немедленное обнов- ление данных ввода/вывода, позволяющих повысить пропуск- ную способность критических модулей ввода/вывода, установ- ленных на панели процессора. Они внедрены в язык релейно- контактных схем и доступны из средств разработки программ- ного обеспечения контроллеров Modicon Modsoft, ProWorx или Concept LL984. Эти высокопроизводительные инструкции вы- зывают немедленное обновление данных ввода/вывода, содер- жащихся в контроллере. Таблица обновленных данных вво- да/вывода может использоваться только для обновления логики или записи в любой локальный модуль ввода/вывода с помощью секции подпрограммы контроллера. Обслуживание прерываний повышает производительность оборудования, что влечет за со- бой повышение пропускной способности и эффективности ос- новного оборудования. 112
Таким образом, контролер Modicon TSX Quantum обеспечивает: возможность подключения к сетям предприятия и полевым щинам для восьми типов сетей (Ethernet, Interbus-S, LonWorks, profibus, Modbus, Modbus Plus и др.); языки обработки для периодического и непрерывного управления; языки релейно-контактных схем и функционального последо- вательного управления для дискретного управления; три языка высокого уровня для наилучшей открытости и гибкости; сочетание в конфигурациях (локальный, удаленный, распреде- ленный ввод/вывод, одноранговые конфигурации, подключение к полевым шинам ввода/вывода). проведение модернизации путем загрузки про!раммы через порт Modbus или Modbus Plus (вместо замены микросхемы элек- трически программируемого ПЗУ или платы). Для хранения прикладных программ в ЦПУ используется ОЗУ с резервной подпиткой от батареи. Модули ПЛК Quantum: CPS 111 00 - источник питания, 220 В переменного тока, авто- номный, ток нагрузки по шине ЗА; CPU 113 03 - процессорный модуль; порты: 1 последователь- ный 9-штырьковый, протокол Modbus (RS-232), 1 сетевой 9-штырьковый, протокол Modbus Plus (RS-485); память: емкость ОЗУ 512 Келов, емкость логики пользователя 16 Келов, доступно регистров 10 Келов (максимальное число 9999 Келов), ввод дис- кретный 8192 бит, вывод дискретный 8192 бит; быстродействие: время выполнения логики от 0,3 мс/Кслов до 1,4 с/Кслов; потреб- ляемый ток по шине 790 мА; DDI 353 00 - модуль дискретного ввода, 32 канала, 4 электриче- ски развязанные группы по 8 точек, 24 В постоянного напряжения, отображается в памяти двумя словами, потребляемый ток 330 мА; DDO 353 00 - модуль дискретного вывода, 32 канала, 4 группы по 8 точек, отображение в памяти - два слова, 24 В постоянного напряжения с общим плюсом, потребляемый ток 330 мА; SIM 226 - имитатор отладочных дискретных сигналов; CON 222 - наборное поле; SIM 223 - имитатор отладочных аналоговых сигналов; AVI 03 0 00 - модуль аналогового ввода, 0...20 мА; 4...20 мА; ±20 мА; 0...5 В; 1...5 В; ±10 В; 8 каналов; разрядность 16 (14 при 1—5 В), отображение в памяти - 9 слов (9-е слово для информации об ошибках), ток 280 мА; 113
AVO 020 00 - модуль аналогового вывода; 0...10 В; ±10 В; 0...5 В; ±5 В; 4 канала, потенциальные, разрядность 12, отображение в памяти - 4 слова. Организация ввода/вывода. Подсистема ввода/вывода может быть; локально размещенной (локальный ввод/вывод) в одной корзи- не с ЦП или в отдельных корзинах, расположенных вблизи ПЛК (на расстоянии до 4 м); всегда состоит из одного канала, обозна- чаемого как Drop #1; удаленной (удаленный ввод/вывод RIO), размещенной на расстояние от 4,5 до 12 км в зависимости от типа соединитель- ного кабеля. Все ПЛК, поддерживающие RIO, рассчитаны на подключение модулей ввода/вывода серии 140 и 800. Связь с модулями RIO осуществляется через специальные RIO- процессоры с помощью коаксиальных или оптоволоконных кабелей. Высокопроизводительные ПЛК могут поддерживать до 32 каналов RIO. В состав такого канала могут входить до 5 корзин с модулями ввода/вывода (Rack 1-Rack 5); распределенной (распределенный ввод/вывод DIO), размещен- ной на расстояние до 10,0 км. Сеть Modbus Plus - локальная одно- ранговая, скорость обмена 1 Мбод, производительность сети 20000 регистров в секунду она обеспечивает удаленное оператив- ное программирование, управление устройствами в РВ. Соответствие между физическими входам и/выходами модулей ввода/вывода и элементами памяти ПЛК устанавливается каргой ввода/вывода (I/O Мар). Для текущей заполняемой корзины показывается общее ко- личество уже «занятых» ссылок в памяти состояния (Number Inputs и Number Outputs). При этом используются следующие типы ссылок: 0 - дискретные однобитовые выходы (кольца, катушки); ис- пользуются для управления реальными выходами через модули вывода или для установки/сброса одного или нескольких битов в памяти состояния; количество ссылок должно быть кратно 16; 1 - дискретные однобитовые входы; с помощью которых опре- деляются состояния вкл./выкл. модулей ввода и опрашиваются отдельные биты в памяти состояния; количество ссылок должно быть кратно 16; 3 - входы, 16-разрядные регистры; которые содержат числовые данные от внешних устройств, например аналоговый сигнал (4096 уровней) или состояние быстродействующего счетчика; данные могут храниться в различных форматах; 114
4 - выходы, 16-разрядные регистры в памяти состояний для хранения информации; они используются также для обслуживания модулей вывода и коммуникационных портов; 6 - регистры для хранения информации в расширенной памяти ПЛК (для ПЛК типа Modicon 984В). 6.2. Конфигурирование и адресация Конфигурирование системы оказывает влияние на всю опера- цию управления. Оно должно: определять всю специфическую для управления информацию, общую информацию, назначать требуе- мую память; определять диапазоны ввода/вывода. При первом конфигурировании (конфигурации) пользователь должен сделать несколько базисных вводов для области ПЛК, такие, как тип ПЛК и память. Разрешаются только стандартные конфигурации. Конфигурация будет всегда касаться проекта, т. е. команда ме- ню Configurator не доступна, пока проект не будет открыт. Команда Configurator доступна в режиме Offline и интерактив- ном режиме. Но конфигурирование в интерактивном режиме невозможно, т. е. никакие вводы не могут быть сделаны. Доступ- ные диалоговые окна могут только вызываться для чтения. Конфигурация аппаратного обеспечения проекта будет сохра- нена и может быть загружена в программы моделирования Concept SIM, Concept-SIM32 или в ПЛК. Чтобы передать конфигурацию в ПЛК, следует дезактивировать Concept SIM. Необходимо обратить внимание на разрешенные ссылки во время адресации ввода/вывода модулей. Ссылки, начинающиеся с цифры 3 (3-ссылка), вводятся для модулей аналогового ввода. Ссылки, начинающиеся с цифры 4 (4-ссылка), вводятся для модулей аналогового вывода. Ссылки, начинающиеся с цифр 3 или 1 (3-ссылка или 1-ссылка), вводятся для модулей дискретного ввода. Ссылки, начинающиеся с цифр 4 или 0 (4-ссылка или 0-ссылка), вводятся для модулей дискретного вывода. Ссылки, начинающиеся с цифр 1 или 3 (1-ссылка или 3-ссылка) (входные ссылки), и с 0 или 4 (0-ссылка или 4-ссылка) (выходные ссылки) вводятся для экспертные модулей. ПЛК не может быть конфи урирован или реконфигурирован, пока он находится в Running-pr жиме. Если программа уже выпол- няется в ПЛК, она должна быть остановлена прежде, чем начнется 115
реконфигурация. ПЛК останавливается по команде Online ® On- line control panel ® Stop controller. В соответствии с имеющимся контроллером выбирается се- мейство ПЛК (Quantum, Compact, Momentum или Atrium), а также размер памяти. Окно списка содержит все доступные ПЛК. Ввод ПЛК по команде меню PLC type... делает доступными все другие команды в основном меню Configure. После выбора ПЛК стандартные вводы выполняются автома- тически в следующих диалоговых окнах: адресные интервалы; загружаемые функции; диспетчер сегментов. Необходимо указать достаточные адресные интервалы для соз- дания программы, чтобы разместить требуемое количество вход- ных битов, выходных битов/маркеров, входных регистров и реги- стров хранения. Область Loadables (загружаемые функции) отображает число загружаемых функций, установленных в диалоговом окне Loadables. Загружаемые функции являются программами, которые загружаются в ПЛК, только когда они необходимы. Эта процедура сохраняет память, которая иначе была бы занята ненужными про- граммами. Пакет Concept имеет пять типов загружаемых функций. Тип 1. Загружаемые функции с IEC-системой реального време- ни. Эти функции загружаются в случае, если программы на языках IEC и LL984 должны быть загружены в ЦПУ 113 Ох, ЦПУ 213 Ох или 424 02. Все другие типы ЦПУ не нуждаются в загружаемых функциях для этого процесса. Доступны загружаемые функции для объединенного выполнения программ IEC И LL984: при использовании ПЛК с математическим сопроцессором па- ра загружаемых функций @1S7 VI96 + @217 VI96 устанавливает- ся автоматически; при использовании ПЛК без математического сопроцессора пара загружаемых функций @1S7 VI96 + @217 VI96 устанавлива- ется автоматически. Тип 2. Загружаемые функции для экспертных модулей. Загру- жаемые функции также требуются, чтобы эксплуатировать неко- торые из экспертных модулей. Для конфигурации сети Interbus-S устанавливается загружаемая функция ULEX V196. Тип 3. Загружаемые функции LL984 DX zoom (*.dat). Они не являются частью поставляемого пакета Concept. Эти загружаемые 116
функции можно заказывать через службу Automation Customer Service Bulletin Board (BBS) (можно также обратиться к файлу rEADME.WRI). Тип 4. Загружаемые функции для операции горячего резерви- рования. Для горячего резервирования на языке LL984 автомати- чески устанавливается загружаемая функция CHS, а для горячего резервирования автоматически на языке IEC устанавливается за- гружаемая функция IHSB. Тип 5. Загружаемые функции пользователя (*.ехе). Функции, созданные пользователями, находятся в каталоге Concept .dat и при использовании командной кнопки Unpack... могут вставляться в диалоговое окно Loadables для установки. Область Segment scheduler (диспетчер сегментов) отображает число каналов, назначенных открытому проекту. Эти каналы уста- новлены в диалоговом окне Segment Scheduler. При конфигурировании удаленного канала используют диа- логовое окно Segment scheduler, чтобы определить последова- тельность и тип обработки секций на языке LL984. Каж- дому каналу назначается секция. Следовательно, дис- петчер сегментов не может иметь меньшего количества вводов секций, чем количе- ство удаленных каналов, конфигурированных в карте ввода/вывода. По умолчанию максимальный номер секции, определенный в диспетчере сегментов, равен 32. Память программы может быть разбита на отдельные области (рис. 6.3): карту ввода/вывода и т. д.; зарезервированную область для расширений; сообщения ASCH (если ис- пользуются), конфигурацию Peer Сор (если используется), конфигурацию Ethernet (если используется) и т. д.; Рис. 6.3 LLSSS.VSBrFXojjr.m Hnecessa y, ULEft feadsfcte EC user proy rn (code) ♦ DFB(r»SL.ncecSata) (* if necessary! Огйпе changes, ar&nation, etc > IEC tret data ; (UNocatedverfabiea) +btoek.Irics. EC loadable ; EC WSE) .reserved area fy expansions, •ASCa messages, Peer copx. Bhernet, ata.________. reserved area for axparstons DOiW.ete- К necessery/Extended Memory (6xi'eteiw^j reserved aFM.fy expansions state ram used lor Ox, tx, 3x, 4x.re(srences LL984 runtime system Operating system max. State RAM EXEC file O4B6vxxx.bin 117
зарезервированную область для расширений; загружаемые функции IEC (в случае необходимости); данные пользователя IEC, состоящие из нелокализованных пе- ременных и блочных связей; программу IEC пользователя с кодами EFB, данными блоков DFB и (в случае необходимости) данными из интерактивных из- менений, а также данными анимации и т. д.; в случае необходимости загружаемую функцию ULEX для се- ти Interbus-S или другие загружаемые функции; программу LL984 пользователя. Области в памяти программы ПЛК, которые будут зарезерви- рованы для программ на языках IEC и/или LL984, зависят от вы- бранного ЕХЕС-файла. Если, например, установлен комбиниро- ванный ЕХЕС-файл и впоследствии только один из двух типов языков применяется в программе пользователя, память программы оптимально не будет использоваться. Следовательно, необходимо решить, какие языки должны использоваться. Область Special отображает функционально независимые уста- новки, которые сделаны в диалоговом окне Specials. Диалоговое окно Specials является доступным для конфигурации различных опций: текущего контроля батареи; регистра таймера; информации времени для приложений интерфейса и «человек - машина». Текущий контроль батареи (выход батареи) (Battery status). Ко- гда регистр батареи активен, текстовый блок показывает установ- ленную 0-ссылку, содержащую состояние батареи для ее контроля. Слабую батарею можно вовремя заменить, чтобы избежать любых потерь данных. Регистр таймера (Timer address). Когда адрес таймера активен, текстовый блок отображает установленную 4-ссылку, содержание которой инкрементируется в 10 мс интервалах. Содержание реги- стра таймера увеличивается на 1 каждые 10 мс и имеет неинициа- лизированное значение между 0000 и FFFF hex. Время для приложений интерфейса «человек - машина» (Time of Day). Когда установка часов реального времени активна, тек- стовый блок отображает определенные восемь последовательных 4-ссылок. Эта информация о времени предназначена только для приложений интерфейса «человек - машина». Восемь регистров зарезервированы для установки часов. Данные времени имеют следующий формат (для США): 118
4ХХХХ Регистр управления Бит 1 (MSB) 1 = установка значения часов Бит 2 1 = чтение значения часов Бит 3 1 = бит готовности Бит 4 1 = бит ошибки 4ХХХХ + 1 День недели (1-7) 4ХХХХ +2Месяц(1 - 12) 4ХХХХ + ЗДень (1 - 31) 4ХХХХ + 4Год (00-99) 4ХХХХ + 5Часы (0 - 23) 4ХХХХ + бМинуты (0 - 59) 4ХХХХ + 7 Секунды (0 - 59). Область Configuration Extensions отображает использование других меню конфигурации, которые разрешаются или блокиру- ются в диалоговом окне Configuration Extensions: Data Protection, Peer Cop, Hot Standby, Ethernet, Profibus DP. Для защиты от доступа к данным адресные интервалы двоич- ных выходов и выходных регистров могут сохраняться с помощью ввода адреса в диалоговом окне Data Protection. Этот адрес являет- ся отметкой, с которой запись снова допускается. Все адреса перед этой отметкой доступны только для чтения. Команда меню Data Protection... является доступной, только ес- ли в диалоговом окне Configuration Extensions имеется активизи- рованный флажок Data Protection. Команду меню Peer Сор используют, чтобы открыть режим постоянной связи для передачи данных между узлами в одной сети. Никакая передача данных через мосты к другим сетям не осуществима. Эта команда доступна при использовании пакета Concept для контроллеров Quantum, Momentum или Compact. Чтобы разрешить функцию Peer Сор, переходят к диалоговому окну Configuration Extensions и активизируют соответствующий флажок. В приложении, требующем безошибочной работы и самой вы- сокой готовности, используют диалоговое окно Hot Standby для программирования системы горячего резервирования. 119
Система горячего резервирования проверяет управление на случай регистрации ошибок. Два ПЛК с одинаковой конфигурации ей поддерживают связь друг с другом через процессоры горячего резервирования (CHS-110-00), сконфигурированные в диалоговом окне Edit drop. Кроме того, каждый ПЛК снабжается функцио- нальным блоком горячего резервирования, который программиру. ется так, чтобы информация статуса могла быть передана между двумя ПЛК. Один из двух ПЛК в системе горячего резервирования функ- ционирует как первичный ПЛК. Он читает входные данные из удаленных каналов, выполняет лестничную логику и посылает ко- манды выходным каналам. В конце каждого сканирования пер- вичный ПЛК непрерывно копирует всю информацию относитель- но статуса системы в резервное устройство. При нормальных условиях резервное устройство не принимает никакие функции управления, но проверяет информацию статуса. Если, однако, имеются сбои первичного центрального устройства, резервное устройство примет функции первичного не позднее чем за 48 миллисекунд после отказа. Для подключения к сети Ethernet каналы могут быть оборудо- ваны модулями интерфейса Ethernet NOE. Блок Ethernet показыва- ет число выбранных модулей NOE. Однако сначала число модулей Ethernet (NOE) должно быть определено в диалоговом окне Configuration Extensions. Модули впоследствии появятся в окне списка диалогового окна I/O Module Selection, откуда они могут затем быть выбраны и параметрированы для карты ввода/вывода. Для подключения к другим программируемым контроллерам в шинной системе Ethernet адрес Ethernet удаленной станции должен быть введен в диалоговом окне Connect... главного меню Online. Максимальное число NOE модулей зависит от картированного ЦПУ: для ЦПУ 113 03/S/X можно подключать до двух модулей, для старших ЦПУ - до шести модулей. Текстовый блок Profibus DP показывает число выбранных мо- дулей CRP 811 хх для связи с контроллерами компании Siemens. Для работы с сетями Profibus DP в диалоговое окно Configuration Extensions вводится число модулей CRP 811 хх, которые должны быть сконфигурированы. Вызвав карту ввода/вывода, вводят каналы и их модули, ис- пользуемые в конфигурации. Ссылки 1, 0, 3 или 4 определяются для инициализации областей ввода/вывода. Кроме того, может происходить назначение параметров отдельных модулей, чтобы определить переменные, зависимые от процесса установки. 120
В интерактивном режиме с остановленным ПЛК карта аппа- ратного обеспечения загружается в диалоговое окно Edit drop В результате этого появится список модулей вашего канала для по- следующего перемещения. Перед вставкой канала сетевое соединение (локальные RIO- или р(О-связи) должно быть выбрано в диалоговом окне I/O Мар в окне списка Go То. При нажатии кнопки вставки в диалоге Edit Drop для вставки RIO-канала конфигуратор возвращает подтверждение, что число каналов не превышает число сегментов и что максимальное число строк диспетчера сегментов также не превышено. Если при добавлении канала удаленного ввода/вывода будет превышено число сегментов или строк диспетчера сегментов, конфигуратор сообщит, что канал RJO не может быть добавлен. Если канал RIO добавлен в карту ввода/вывода, конфигуратор определит, установлен ли отдельно диспетчер сегментов, т. е. про- верит, обслуживаются ли каналы RIO в порядке возрастания и по- являются ли сегменты в порядке возрастания. Если ответ положи- тельный, конфигуратор сделает предположение, что пользователь не выполнил никаких установок в диспетчере сегментов. В диспетчер сегментов, не имеющий никаких отдельных уста- новок, конфигуратор вставит новый канал таким способом, при котором каналы будут обслуживаться в порядке возрастания. Если канал должен быть вставлен между сконфигурированными кана- лами, строка будет сделана доступной за счет перемещения вниз последующих каналов в плане. Если установки пользователя уже были сделаны в диспетчере сег- ментов, конфигуратор берет планируемую строку, чтобы добавить ка- нал. Следующие действия определят, какую строку надо изменить: локализуется первая строка, которая конфигурирована для об- служивания ввода/вывода без установки ввода/вывода, после по- следней строки в диспетчере сегментов; если после последней строки не имеется больше строк, доступ- ных для обслуживания ввода/вывода, используется первая строка в Диспетчере сегментов, которая не обслуживает ввод/вывод; если никакая строка не доступна, новая строка должна быть добавлена; если необходимо добавить новую строку к диспетчеру сегмен- тов, новый номер сегмента будет основан на используемом в на- стоящее время номере сегмента пл юс один. Если все номера сегментов у> е применялись, многократно ис- пользуется самый большой номер сегмента для этого канала. Это 121
осуществляется, только если отдельные сегменты заняты обслу- живанием одного и того же канала. Следует использовать диалоговое окно I/O Мар и определить тип канала ввода/вывода в столбце Туре. Доступный выбор - мо- дули Quantum I/O, 800 I/O, DCP и SY/MAX. Окно сообщения показывает каждое изменение, сделанное в отдельном наборе диспетчера сегментов. Окно сообщения показы- вает, какие каналы были добавлены. Затем можно решать, нужно ли проверить диспетчер сегментов, чтобы гарантировать обеспе- чение надежной конфигурации. Как только канал RIO удален из карты ввода/вывода, удаляют- ся также все соответствующие ссылки для обслуживания вво- да/вывода этого канала. Пример создания конфигурации ПЛК с распределенным вво- дом/выводом приведен на рис. 6.4. Рис. 6.4 Для конфигурирования канала DIO следует выполнить сле- дующие этапы. Этап 1. Выбрать семейство ПЛК Quantum и используемый ПЛК в диалоговом окне PLC Type (Configure ® PLC Туре...). Пер- вый канал уже введен в диалоговое окно I/O Мар. Этот первый канал должен быть Quantum. Этап 2. Ввести для модуля NOM (связь распределенного вво- да/вывода) Slot 7 в диалоговое окно Head Setup, который затем при- нимается в карту ввода/вывода выбранного локального канала. Этап 3. Выбрать сетевое соединение Local/RIO (Slot 7) в окне списка Go То. Соединение Slot, назначенное в диалоговом окне Head setup, будет отображаться в текстовом блоке. 122
Этап 4. Использовать командную кнопку Edit... первого канала (рис. 6.5), чтобы вызвать диалоговое окно Local Quantum Drop. ij 1 Рис. 6.5 Этап 5. Ввести модули и входные и/или выходные ссылки в текстовых блоках диалогового окна Local Quantum Drop (рис. 6.6). Рис. 6.6 123
Input typ* ф j&rutryj О в CD Г ок Cancel Рис. 6.7 Этап 6. Определить пара- метры модулей, для этого с по- мощью командной кнопки Params... открыть диалоговые окна доя соответствующих мо- дулей. При выборе модуля DDI- 353-00 диалоговое окно (рис. 6.7) будет открыто и могут быть ус- тановлены параметры. Этап 7. Возвратиться после конфигурирования узла 1 к диало- говому окну I/O Мар и использовать окно списка Go То , чтобы выбрать сетевое соединение DIO Link 0 (CPU). Этап 8. Ввести привилегию записи или чтения узла в тексто- вом блоке диалогового окна I/O Мар (рис. 6.8). Этап 9. Использовать для вызова диалогового окна DIO Link O(CPU) - Drop 1, командную кнопку Edit... ; введите модули и входные и/или выходные ссылки канала в текстовых блоках диалогового окна DIO Link 0 (CPU) — Drop 1 (рис. 6.9). Для связи с удаленной сетью модуль интерфейса CRM-XXX-XX должен сначала быть введен в карту вво да/вывода из списка модулей. 124
Рис. 6.9 Этап 10. Использовать для определения параметров команд- ную кнопку Params... и открыть диалоговые окна для соответст- вующих модулей. Выбор модуля DDI-353-00 откроет диалоговое окно (рис. 6.10) для установки параметров. Пример конфигурирования ПЛК Momentum (локальный ка- нал 1 Momentum, шина ввода/вывода - канал 2) приведен на рис. 6.11. Рис. 6.10 Рис. 6.11 Конфигурирование ПЛК Momentum выполняется поэтапно. 125
Этап 1. Выбрать семейство ПЛК Momentum и используемый ПЛК в диалоговом окне PLC Type (Configure ® PLC Туре...). Канал Momentum I/O уже введен в диалоговое окно I/O Мар. Этап 2. Использовать для вызова диалогового окна Local Momentum Drop командную кнопку Edit... первого канала (рис. 6.12). Рис. 6.12 Этап 3. Ввести модули и входные и/или выходные ссылки канала в текстовых блоках диалогового окна Local Momentum Drop (рис. 6.13). Рис. 6.13 Этап 4. Использовать для определения параметров модулей командную кнопку Params... и открыть диалоговое окно 170- AAI-030-00 (рис. 6.14). 126
Jnpot selections.. ...........-................. Channel 1. I Usable j»| Channel 5: [Disable " "|* | Channel 2: |Disable |»| Channel 6: [Brsibfe~ |a| Channel 3: [Usable [*| Channel ?: [Usable |»| Channel 4: [Disable j«.| Channel 8: | Cisablw [»j Parameter w-xdr.................... Wocdl: 4444 Word 2: 4444 OK Cancel Help Рис. 6.14 6.3. Редактор переменных Чтобы объявить переменные, изменить или удалить объявле- ния и отметить объявления переменных для экспорта, в пакете Concept используется редактор переменных (Variable Editor). Диалоговое окно состоит из кнопок Variables и Constants, а также Inputs и Outputs (только в Concept DFB). При активизации Variables в поле Туре открывается окно спи- ска для объявления локализованных (размещенных) и нелокализо- ванных (неразмещенных) переменных. При активизации Constants в поле Туре открывается окно спи- ска для объявления констант. При активизации Inputs в поле Туре открывается окно списка для объявления входных параметров. При активизации Outputs в поле Туре открывается окно списка для объявления выходных параметров. Следующие отдельные опции доступны для редактирования текстовых блоков. 1. Подтверждение ввода. При создании ввода в текстовом бло- ке содержание должно быть акцептировано клавишей <Enter> пе- ред перемещением в другой текстовый блок с использованием со- ответствующих клавиш курсора. 2. Удаление. Чтобы удалил, существующий текст в текстовом блоке, выполняют двойной щелчок на текстовом блоке, в результате 127
удаляемый текст будет выделен другим цветом. Удаляют весь текст, дважды нажав на клавишу <DeI>. Чтобы удалить отдельные симво- лы, еще раз щелкают по тексту. Текстовый курсор ввода может пере- мещаться клавишами курсора. Чтобы удалить один символ, исполь- зуют клавиши <Delete> или <Backspace> (удалить назад). 3. Копирование. Используется диалоговое окно Variable Editor, чтобы копировать текст из столбцов Variable Name и Comment и вставить его в пустой текстовый блок. Для копирования отмечают соответствующий текст и нажимают клавиши <Ctrl>-Klnsert>. Для вставки дважды щелкают по пустому текстовому блоку. В результате появится мигающий курсор ввода текста. Затем нажимают клавиши <Shift>+<Insert> и скопированный текст будет вставлен. 4. Поиск. Если необходимо найти переменную и известно ее имя, то удерживая клавишу <Ctrl>, вводят символы слова. Обычно ввода первого символа достаточно, чтобы найти искомую переменную. 5. Цветовое кодирование. Поля с серым фоном не могут изме- няться. При выборе области Туре появятся отдельные текстовые блоки для объявления переменных и констант. Отдельные символы отображаются в полях: X: идентифицирует переменную, которая будет удалена; *: идентифицирует переменную с измененным объявлением; +: идентифицирует недавно объявленную переменную. Если переменная не используется в программе (Used = 0), удаля- ют объявление переменной. Чтобы удалить объявление переменной, выделяют соответствующее поле, а затем нажимают клавишу <Del>. Поле будет отмечено символом X. Ввод сохраняют, выходя из диало- гового окна с помощью командной кнопки ОК. Затем снова нажима- ют клавишу <Del>, чтобы отменить команду удаления. Если область Туре используется для выбора Variables, следует активизировать переключатели в столбце Ехр, чтобы отметить пе- ременные, которые нужно экспортировать с помощью команды меню File ® Export. Только локализованные переменные могут экспортироваться. Этот столбец не появляется в DFB-редакторе. Текстовый блок Variables name используют, чтобы ввести сим- вольное имя переменной (до 32 символов). Символьное имя должно быть уникально для всего проекта, не имеется никакого различия между верхним и нижним регистром. Если выбранное символьное имя уже существует, например как переменная, имя шага или имя блока, выдается предупреждение о том, что должно быть введено другое имя. Символьное имя должно удовлетворять соглашениям стандарта по имени или появится сообщение об ошибках. 128
Согласно стандарту, первый символ имен для переменных должен быть буквой. Однако если нужно также разрешить использовать в ка- честве первого символа числа, используются команды меню Options ® Preferences ® ЕС Extensions ® Allow leading digits in identifiers. Текстовый блок Data Type используют, чтобы указать типы дан- ных переменных, которые будут применяться в программе. Тип данных может изменяться только при выключенной связи с ПЛК, а также когда переменная не используется в программе (Used = 0). Если переменная используется в программе (Used > = 1), она долж- на быть сначала удалена из программы. В столбце Address поля Type to select Variables размещенным переменным могут быть назначены прямые адреса. Неразмещен- ным переменным не присваивается никаких адресов. Этот столбец не появляется в DFB-редакторе. Имеется различие между: дискретными входами, адрес которых начинается с цифры 1; дискретными выходами (катушками), адрес которых начинается с 0; входными регистрами, адрес которых начинается с 3; регистра- ми выходов, адрес которых начинается с 4. Одна многоэлементная переменная занимает несколько ячеек памяти. Текстовый блок Address используют, чтобы ввести адрес начала расположения ячеек памяти. Адрес может быть введен в 3-диапазон или 4-диапазон. Если адрес помещен вне разрешенного расположения ячеек памяти или получилось двойное распределение адреса, появится сообщение об ошибках во время анализа программы. Этот анализ автоматически выполняется при загрузке программы в ПЛК. Од- нако этот анализ также может быть начат явно при использовании команды меню Project ® Scanning Program Item. Формат адреса подчинен установкам в Options ® Preferences ® Common. Адреса могут вызываться в следующих форматах: стандартном (400001); с разделителем (4:00001); компактном (4:1). Начальные значения InitValue могут быть распределены для нераз- мещенных переменных, регистров выходов (маркеров) (4-диапазон), входных формальных параметров DFB. многоэлементных переменных. Ввод начальных значений для многоэлементных переменных осуществляется в диалоговом окне Definition. Чтобы открыть диа- логовое окно, нажимают на командную кнопку Specify... 129
Командная кнопка доступна, только если введены имя пере- менной и тип данных пользователя. Столбец Value появится только при выборе констант в поле Туре. Этот текстовый блок используют, чтобы ввести значение константы. Диапазон значения зависит от выбранного типа дан- ных. Если введенное числовое значение не разрешается, появится сообщение об ошибках. Столбец Position появляется только в DFB-редакторе. Если выбраны Inputs или Outputs в поле Туре, позиция входа или вы- хода (DFB) может быть определена в этом текстовом блоке. Имеется возможность выбрать между позициями от 1 до 32. Ес- ли введенное числовое значение не разрешается, появится со- общение об ошибках. Окно списка Used отображает, какое число раз соответствую- щая переменная была использована в программе. Здесь не может быть сделан ввод. Текстовый блок Comment доступен для комментария к пере- менным. Комментарий будет показан в строке состояния окна ре- дактора, когда переменная выделена. При поиске переменной Search и ее известного имени нажи- мают клавишу <Ctrl> и вводят имя. Часто ввода первого символа бывает достаточно, чтобы найти искомую переменную. При активизации опции Sort могут быть определены критерии сор- тировки. Столбцы будут перечислены согласно выбранному сорту. Сортировка по InitValue, Value и Comment невозможна. Последовательностью сортировки можно управлять, используя следующие опции: Ехр - отмеченные переменные будут перечислены сначала; Names of variables - символьные имена переменных будут пе- речислены в алфавитном порядке; Data Туре - типы данных переменных будут перечислены в алфавитном порядке; Address - адреса переменных будут перечислены в порядке воз- растания, неразмещенные переменные помещены в конце столбца; Position - позиции параметров будут перечислены в порядке возрастания; Used - переменные будут перечислены в соответствии с убы- ванием количества раз их использования в программе; ОК - сохраняются вводы и закрывается диалоговое окно. Если редактор переменных вызывался из другого диалогового окна (на- пример, Connect FFB ® Var. Declaration...), используют командную 130
-ANIJELEM ANI_NUM |_ ANI_REAL I— REAL L AN1JNT |_ DINT _ INT _ UDINT L UINT _ ANI BIT -- BOOL -- BYTE __ WORD _ TIME — System Data Types (IEC extension) tANL„IN ANL.OUT —Derived (from «ANY» data types) Рис. 6.15 кнопку OK , чтобы принять объект, выбранный в окне списка тек- стового блока предыдущего диалогового окна. 6.4. Типы данных Приведенная на рис. 6.15 схема и краткий обзор показывают иерархию типов данных, которые используются для описания вхо- дов и выходов функций и функциональных блоков (FFB). Обобщенный тип данных (Generic Data Туре) включает не- сколько исходных или элементарных типов данных и идентифи- цируется на схеме префиксом ANY. Пользовательский тип дан- ных (Derived data type) - это типы данных, которые могут быть получены пользователем из исходных или элементарных типов данных и/или других пользовательских типов дан- ных. Пользовательский тип данных определяется в редак- торе типов данных пакета Concept. Различают также глобаль- ные и локальные типы данных. Рассмотрим более подроб- но типы данных. Тип ANY включает сле- дующие типы данных: ANL_IN; ANLOUT; BOOL; BYTE; DINT; INT; REAL; UDINT; UINT; TIME и WORD; типы данных, полученные из них. Тип ANY ELEM включает типы данных: BOOL; BYTE; DINT; INT; REAL; UDINT; UINT; TIME; WORD. Тип ANY NUM включает типы данных: DINT; INT; REAL; UDINT; UINT. Тип ANY REAL включает тип данных REAL. Тип REAL представляет собой тип данных «вещественные с плавающей точкой/запятой». Он вводится как вещественный лите- 131
рал или как вещественный литерал с экспонентой. Длина элемента данных 32 бит. Диапазон значений для переменных этого типа данных от 8.43Е-37 до 3.36Е+38 (от 8,43 • КГ37 до 3,36 1038). Тип ANY INT включает следующие типы данных: DINT; INf UDINT; UINT. Тип DINT является типом данных «целое число двойной дди. ны». Значения чисел этого типа могут быть представлены в двоич- ной, восьмеричной или шестнадцатеричной системах счисления. Длина элемента данных 32 бит. Диапазон значений для переменных этого типа данных от-2ехр(31) до 2ехр(31)- 1 (от-231 до 23|-1). Тип INT является типом данных «целое число». Значения чи- сел этого типа могут быть представлены в двоичной, восьмерич- ной или шестнадцатеричной системах счисления. Длина элемента данных 16 бит. Диапазон значений для переменных этого типа данных от-2ехр(15) до 2ехр(15) -1 (от -215 до 215-1). Тип UDINT является типом данных «целое число двойной дли- ны без знака». Значения чисел этого типа могут быть представле- ны в двоичной, восьмеричной или шестнадцатеричной системах счисления. Длина элемента данных 32 бит. Диапазон значений для переменных этого типа данных от 0 до 2 ехр (32) -1 (от 0 до 232-1). Тип UINT является типом данных «целое число без знака». Значения чисел этого типа могут быть представлены в двоичной, восьмеричной или шестнадцатеричной системах счисления. Длина элемента данных 16 бит. Диапазон значений для переменных этого типа данных от 0 до 2ехр(16) -1 (от 0 до 216-1). Тип ANY_BIT включает следующие типы данных: BOOL; BYTE и WORD. Тип BOOL представляет собой булев тип данных. Длина эле- ментов этого типа данных 1 бит (хранится в памяти в 1 байт). Диа- пазон значений для переменных этого типа данных О (FALSE - ложь) и 1 (TRUE - истина). Тип BYTE является типом данных «цепочка из 8 битов». Цепочки данного типа могут быть представлены в двоичной, восьмеричной или шестнадцатеричной системах счисления. Длина элементов 8 бит. Этому типу данных не может быть присвоено числовое значение. Тип WORD является типом данных «цепочка из 16 бит». Зна- чения чисел этого типа могут быть представлены в двоичной, восьмеричной или шестнадцатеричной системах счисления. Длина элемента данных 16 бит. Этот тип данных не может принимать числовое значение. Тип TIME представляет собой тип данных «время». Он вводится как литерал времени. Длина элементов данных 32 бит. Диапазон 132
значений для переменных этого типа данных от 0 до 2ехр(32) -1. Единица для типа данных TIME - это 1 мс (от 0 до 232-1). Тип System Data Types (IEC extension) - системные типы данных, включающие следующие типы данных: ANL IN и ANL_OUT. Тип ANLIN представляет тип данных «аналоговый вход». Он используется для обработки аналогового значения. Тип данных авто- матически назначается 3-ссылкам, указанным в карте ввода/вывода конфигурированного модуля аналогового ввода. Следовательно, только неразмещенные переменные могут быть назначены. Тип ANLOUT представляет тип данных «аналоговый выход». Он используется для обработки аналогового значения. Тип данных авто- матически назначается 4-ссылкам, указанным в карте ввода/вывода конфигурированного модуля аналогового вывода. Следовательно, только неразмещенные переменные могут быть назначены. Тип Derived (from ANY data types) - тип данных пользователя, получаемый из исходных или элементарных типов данных и/или других типов данных пользователя. Рассмотрим форматы представления (записи) целочисленных данных. Литералы (Literals - числа) используются, чтобы обеспечить входы блоков FFB, условия перехода (и т. д.) непосредственно значениями. Эти значения не могут быть изменены (доступны только для чтения) логикой программы. Двоичные символы/литералы (цифры двоичной системы счисле- ния) - Base 2 literals - используются, чтобы представить (записать) целочисленные значения в двоичной форме. Такая форма записи идентифицируется префиксом 2#. Значения не могут иметь знак «+» или «-». Для разделения формата двоичного числа на группы двоич- ных цифр, например на тетрады - группы по четыре двоичных циф- ры, может использоваться одиночный символ подчеркивания ( _ ), который никакой функции, кроме разделительной, не имеет. Пример: 2#11111111 или 2#11111111 (десятичное число - 255); 2# 1110 0000 или 2#11100000 (десятичное число - 224). Восьмеричные символы/литералы (цифры восьмеричной сис- темы счисления) - Base 8 literals - используются, чтобы предста- вить (записать) целочисленные значения в восьмеричной системе счисления. Такая форма записи идентифицируется префиксом 8#. Значения не могут иметь знак «+» или «-». Для разделения форма- та восьмеричного числа на какие-л 1бо группы восьмеричных цифр может использоваться одиночный символ подчеркивания ( _ ), ко- торый никакой функции, кроме разделительной, не имеет. 133
Пример: 8#3_77 или 8#377 (десятичное число - 255); 8#34_0 или 8#340 (десятичное число - 224). Шестнадцатеричные символы/литералы (цифры шестнадцате- ричной системы счисления) — Base 16 literals — используются, что- бы представить (записать) целочисленные значения в шестнадца- теричной системе счисления. Такая форма записи идентифициру- ется префиксом 16//. Значения не могут иметь знак «+» или «-». Для разделения формата шестнадцатеричного числа на какие- либо группы шестнадцатеричных цифр может использоваться одиночный символ подчеркивания ( _ ), который никакой функ- ции, кроме разделительной, не имеет. Пример: 16#F_F или 16&FF (десятичное число - 255); 16#Е_О или 16#Е0 (десятичное число - 224). Десятичные символы/литералы (цифры десятичной системы счис- ления) - Base 10 literals/Integer Literals - используются, чтобы предста- вить (записать) целочисленные значения в десятичной системе счисле- ния. Такая форма записи не содержит никаких специальных префик- сов. Значения в этом случае могут иметь знак «+» или «-». Для разде- ления формата десятичного числа на какие-либо группы десятичных цифр может использоваться одиночный символ подчеркивания ( _ ), который никакой функции, кроме разделительной, не имеет. Пример: -12; 0; 123 456; +986. Для представления или обозначения временных данных TIME используются следующие специальные символы/литералы (Duration literals): дни (d), часы (h), минуты (m), секунды (s) и мил- лисекунды (ms) или их комбинации. Временное данные иденти- фицируются префиксами t#, Т#, time# или TIME#. Разрешается «переполнение» старшей единицы: например, ввод Т#25Н15М до- пустим (под «переполнением» в данном случае подразумевается, что 25 часов - это больше, чем сутки). Пример: t#14MS; T#14.7S; time#18M; TIME#19.9H; t#20.4D; T#25H15M; time#5D14H12M18S3.5MS. Вещественные литералы (Real literals) используются, чтобы указать значения с плавающей точкой в десятичной системе счис- ления. Запись вещественных данных идентифицируется десятич- ной точкой. Значения могут иметь предшествующий знак «+» или «-» Индивидуальные символы подчеркивания ( _ ) между числа- ми не имеют никакого значения. 134
Для разделения формата вещественных данных на какие-либо группы десятичных цифр может использоваться одиночный сим- вол подчеркивания ( _ ), который никакой функции, кроме разде- лительной, не имеет. Пример: -12.0; 0.0; +0.456; 3.14159 26. Двоичные связи Binary links - связи между выходами и входа- ми блоков FFB типа данных BOOL. Константы Constants - неразмещенные переменные, которым присваивается значение. Это значение не может быть изменено (доступно только для чтения) логикой программы. 6.5. Этапы программирования программируемого логического контроллера Программирование и выбор аппаратной конфигурации ПЛК могут быть выполнены при помощи персонального компьютера (ПК -PC), играющего роль программирующего устройства - про- грамматора, как в режиме Online (с подключенным ПЛК), так и в режиме Offline (с отключенным ПЛК, т. е. только на ПК). Работа над проектом, разрабатываемым в пакете Concept, может осуществляться на различных уровнях и ветвях независимо, а именно: на уровне проекта; на уровне конфигурирования ПЛК; на уровне программы; на уровне секции. Программа или проект состоит из одной или нескольких сек- ций, при помощи которых определяется специфика функциониро- вания отдельных компонентов и системы в целом. В программе указывается порядок выполнения секций, характеризуются пере- менные, константы, литералы (числа), поддерживаются прямая адресация и несколько различных типов данных. Первыми выпол- няются секции, включающие в себя программы, составленные на языке лестничной логики (LL984 ). Секция предназначена для описания способа функционирования одного из технологических объектов в системе. Секции могут быть запрограммированы на различных языках, которые поддерживаются стандартом ГЕС 61131-3, а также на некоторых языках, не поддержи- ваемых этим стандартом (например, язык LL984). Внутри секции дол- жен использоваться единственный язык программирования. Рассмотрим основные этапы разработки проекта в системе Concept. 135
Этап 1. Загрузка системы Concept. Система Concept загружается из Windows. Для составления нового проекта подайте команды File New project. Для внесения изменений, дополнений (и т. д.) этот проект в дальнейшем открывайте командой File, Open project.... Следует помнить, что программные системы Concept, Concept DFB, SIM 16 и SIM32 (эмуляторы) не могут быть открыты одно- временно. Поэтому прежде чем открыть пакет Concept, необходи- мо решить, чем пользоваться для тестирования программы: ПЛК или эмулятором. Если предполагается использовать эмулятор SIM16, следует убедиться в том, что эмулятор находится в актив- ном состоянии (simulator ON), он должен быть отключен (simulator OFF), если для тестирования будет использоваться ПЛК. Загрузите SIM16 из Windows, переведите его в состояние ON (в противном случае переведите его в состояние OFF), а затем закройте файл SIM. После этого можно выполнить запуск из Windows системы Concept или Concept DFB. Для SIM32 этого можно не делать. Этап 2. Описание аппаратной конфигурации. Описание аппа- ратной конфигурации ПЛК выполните с помощью меню Configurator, которое позволяет указать тип ПЛК (PLC Туре), объекты удаленного ввода/вывода (RIO), распределенного ввода/вывода (DIO), локальные объекты ввода/вывода, параметры канала связи с ПЛК. Используйте следующие команды: Project, Configurator - появляется окно аппаратной конфигурации; Configure, PLC type - в окне конфигурации появляется текущая настройка ПЛК Quantum; Configure, loadables - выбирается загружаемый файл: @хх7 - для ПЛК с арифметическим сопроцессором, @ххЕ - для ПЛК без арифметического сопроцессора; File, Save projectas ... - сохранить проект с выбранной конфи- гурацией, закрыть окно конфигурации. Этап 3. Программирование. Для подготовки одной или несколь- ких секций программы на одном из выбранных языков программиро- вания подайте команду File, New section... (создать новую секцию). За- тем на выбранном языке составьте программу. Далее используйте ко- манды, Objects,..., определяемые пунктом главного меню. При необходимости внесения изменений и дополнений ис- пользуйте команду File, Open section (вызов секции программы, сохраненной ранее). Этап 4. Сохранение файлов проекта. Если проект надо со- хранить впервые, то следует воспользоваться командами File, Save project as... и присвоить имя проекту (name.prj - имя проекта). В дальнейшем для сохранения проекта достаточно будет подать ко- манды File, Save project. 136
Этап 5. Загрузка и тестирование. Для установления логиче- ской связи между ПК и ПЛК подайте команды Online, Connect. После установления логического соединения ПК с ПЛК осу- ществляется тестирование на эквивалентность параметров конфи- гурации системы Concept с реальными аппаратурными ресурсами ПЛК. В случае их несоответствия появится сообщение об ошибке. Загрузите проект в ПЛК с помощью команд Online, Dowload. Подайте команды старта ПЛК Online, Online control panel (Start). Выполните тестирование программы средствами, доступными в пункте главного меню Online. Исправьте ошибки, обнаруженные в программе. Загрузите измененные сегменты в ПЛК по командам Online, Download changes. Далее осуществите анимацию, используя команды Online, Animate... . Этап 6. Оптимизация и отключение. После нескольких опе- раций внесения изменений в программу и повторной ее загрузки рекомендуется провести оптимизацию той области памяти, в кото- рой хранятся тексты программ, после чего оптимизированная про- грамма снова загружается в ПЛК последовательностью команд: File, Close project; Optimize project..., Open project. Проверьте размер области данных программы и измените его, если это необходимо. После загрузки, тестирования и возможной оптимизации про- граммы следует отключить логическую связь между ПК и ПЛК, используя последовательность команд Online, Download, Online, Disconnect. Программа теперь будет работать автономно. Этап 7. Документирование. Подготовьте комплект докумен- тации, File, Print..., File, Close project. 6.6. Управление технологическим процессом разделения нефти Рассмотрим технологический процесс подогрева и последую- щего разделения нефти [1]. Как следует из рис. 6.16, для реализации процесса разделения неф- ти используется ряд секций (или печей) предварительного подогрева нефти, узел смешения отдельных потоков нефти от печей, длинный трубопровод для подачи подогретой нефти в колонну разделения. Основными регулируемыми параметрами данного технологиче- ского процесса являются температура подогретой нефти на выходе печи tn и температура в нижней части колонны tK. Если поддержи- ваются на заданном уровне указан ые температуры, то тем самым 137
обеспечивается и заданное качество получаемых продуктов из неф- ти. Так как данный технологический процесс сопровождается дей- ствием возмущений со стороны окружающей среды, то следует иметь соответствующую систему регулирования, обеспечивающую поддержание заданных температур 1П и tK и компенсирующую одновременно влияние возмущений на значения этой температуры. Рис. 6.16 Таким образом, можно представить общую структуру всей системы регулирования в виде схемы, изображенной на рис. 6.17. Рис. 6.17 138
Реализацию системы регулирования выполним с помощью ПЛК Modicon TSX Quantum и стандартных законов регулирования. Так как печи подогрева являются одинаковыми, то функцио- нальную схему системы регулирования для расчета приведем к виду, изображенному на рис. 6.18 Возмущение Возмущение Датчики Рис. 6.18 Условия качественного ведения технологического процесса обеспечиваются следующими значениями переменных (рабочие точки): tn = 360 °C; tK = 340 °C; и = 60 %. Положение и регулирую- щего органа (заслонки) задается в процентах: 0 % - заслонка пере- крыта, 100 % - заслонка открыта полностью. Переходные процессы как реакция на ступенчатое отклоне- ние регулирующего воздействия для печи подогрева и колон- ны приведены на рис. 6.19. Соответствующие математические модели в приращениях в окрестностях выбранных рабочих точек получаются путем обработки переходных процессов (см. рис. 6.19). Для печи подогрева W(s) = ка ехр(-у) (V + lX^s+l)’ (6-1) где кп = 0,5 °C / %; тп = 80 с; Г1п = 1,5 мин; Г2п = 15 с. Для колонны W(S)^ V*P(-v) (V+iX^s+1)’ (6.2) где кК = ^^ = ^-^- = 0,6; тк = 260с; Г1к = 3,5 мин; Т2к - 15 с. 5 °C 139
Температура нефти на выходе лечи Регулируюше? воздействие мин Рис. 6.19 Динамика трубопровода учитывается звеном чистого за- паздывания, добавленного к характеристикам колонны. Кро- ме того, в колонне осуществляется и падение температуры на 20 °C. Из сравнения динамических характеристик печи и колонны видно, что печь подогрева более быстродействующий объект, 140
чем колонна. Различие в динамических характеристиках обу- словливает использование так называемого каскадного регуля- тора, или каскада. Составим структурную схему каскадного регулирования с указанием рабочих точек. Из рис. 6.20 видно, что каскадный регулятор состоит из двух последовательно включенных регуляторов РЕГ. 1 и РЕГ. 2 Регулятор РЕГ. 2 формирует внутренний (локальный) быстродействующий кон- тур, а РЕГ. 1 - внешний контур. Каскгдиый регулятор Рис. 6.20 Выбранные значения рабочих точек обеспечиваются при ис- пользовании простейшего закона регулирования - пропорцио- нально-интегрального (ПИ-закон регулирования). Это позволяет иметь в установившемся режиме (при отсутствии возмущений) сигналы ошибок регуляторов РЕГ. 1 и РЕГ. 2 равными нулю: ei = е2 = 0, т. е. в каждом контуре уставка регулятора равна выхо- ду объекта: ЗАД. 1 - ty (установка), ЗАД 2 - tn (установка). Также из рис. 6.20 видно, что выход ВЫХ. 1 регулятора РЕГ. 1 - это ЗАД. 2 для РЕГ. 2. Характеристика такого идеального ПИ-закона для непрерывно- го варианта имеет вид ^ПИ(5) - ^ПИ(1 + )> ти5 (6.3) где кпи — коэффициент пропорциональности, Тк - постоянная ин- тегрирования. Идеальный ПИ-закон может быть выполнен и на двух последовательно соединенных элементах (устройствах) с ха- рактеристиками 141
т ^ЩИ (s) = ^ПИ ТГ"(^и5 + 0; ^2Пи(Л) = ~ > T„S (6.4) (6.5) где Гм - параметр исполнительного механизма. Объединяя (6.4) - (6.5), получаем ^ПИ(Л) ~ ^1ПИ(5)^2ПИ(S)- В этом случае один из элементов выполняет функцию интег- рирования. Таким элементом часто является исполнительное уст- ройство интегрирующего типа. По этой причине исполнительное устройство относят к регулятору. Разработка программы цифрового моделирования управляемо- го технологического процесса осуществлена с использованием библиотечных алгоритмов пакета Concept. Создано два варианта управления с возможностью переключения между собой (рис. 6.21 и 6.22.): первый - с использованием специального каскадного ре- гулятора (контур 1), второй — с использованием двух последова- тельно включенных регуляторов РЕГ. 1 и РЕГ. 2 и блока автона- стройки (контур 2). Рис. 6.21 Программа использует стандартные функциональные блоки библиотеки пакета Concept: PIP (каскадный регулятор ПИП). LAG2 (модель объекта второго порядка), DEAD TIME (чистое за- паздывание), AUTOTUNE (блок автонастройки), PIDFF (регулятор 142
ПИД), SEL (блок коммутации входов для переключения контуров) (рис. 6.23); WORDTOUINT (преобразование данных типа WORD в данные типа REAL), UITNTOREAL (преобразование данных типа UINT в данные типа REAL), REALTOUINT (пре- образование данных типа REAL в данные типа UINT), UINTTOWORD (преобразование данных типа UINT в данные типа WORD), MUL REAL (блок умножения). Рис. 6.22 Рис. 6.23 Реализация программы на языке FBD технологического процесса подогрева и разделения нефти имеет вид, представленный на рис. 6.24. Для исследований наибольший интерес представляют шесть переменных (ZDN, AUTO Start, SELEKT и pomeha), в которые будут поступать данные и две (Tjp, T_k), из которых будут считы- ваться данные. При описании переменных Tjp, T_k, ZDN, AUTO Start, SELEKT и pomeha с помощью редактора переменных (рис. 6.25) нужно указывать адрес: 400001, 400003 и 400005 для Tjp, Т к и ZDN соответственно, а 000001, 000002 и 000003 для SELEKT, AUTO Start и pomeha 143
Рис. 6.24 I «ММ Рис. 6.25 144 145
ЗАКЛЮЧЕНИЕ На примере пакета Concept компании Schneider Electric рас- смотрено пять языков, входящих в международный стандарт IEC 61131-3. Язык LD - графический язык, основанный на принципах ре- лейно-контактных схем с возможностью использования большого количества различных функциональных блоков. Достоинствами языка LD являются: представление программы в виде электрического потока (близок специалистам по электро- технике), наличие простых правил, использование только булевых выражений, большой круг пользователей. Рационален для ручной оптимизации специфических критических мест кода. Недостатками языка LD являются: использование «непоследова- тельной» булевой логики (булево уравнение = LD-звенья); слабые возможности для последовательного и текущего контроля в реальном времени; отсутствие возможности изображать структуру программы (ветви или цепи); сложность и большая вероятность ошибок; утоми- тельный поиск неисправностей в больших цепях; близок только спе- циалистам по электротехнике; сложен для понимания. Язык FBD - графический язык высокого уровня, обеспечиваю- щий управление потоками данных, включающих все типы. Позволяет использовать очень мощные алгоритмы с помощью простого вызова функций и функциональных блоков. Имеется большая библиотека блоков. Удовлетворяет непрерывным динамическим процессам. Хо- рош для сложных вещей подобно ПИД регуляторам, массивам и т. д. Язык FBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть со- единены между собой, более эффективен для представления структурной информации, чем язык релейно-контактных схем. Однако насыщенность информации контроля низка и требуется концентрированный анализ для понимания последовательной ло- гики. Последовательная логика существует всякий раз, когда цикл или элемент памяти появляется в диаграмме FBD. 146
Замечателен для небольших приложений, но не подходит для больших систем, так как схема нечитабельна. Как только схема на языке FBD превышает одну страницу, должны использоваться текстовые ссылки, и FBD становится менее понятным, чем ST. Язык IL является текстовым языком низкого (типа Ассембле- ра) уровня, что существенно облегчает вызов функциональных блоков и функций условно или безусловно, выполнение назначе- ний и условных или безусловных переходов внутри секции. Язык IL позволяет создавать высокоэффективные и оптимизированные функции. Его можно рекомендовать для написания наиболее кри- тических мест в коде. Программируется с помощью любого тек- стового редактора. К недостаткам IL можно отнести то, что действия ассоцииру- ются с невидимым аккумулятором. Язык ST - текстовый язык высокого уровня (типа Паскаля). Служит для создания процедур со сложной логикой. Наиболее удобен для программ, включающих числовой анализ или сложные алгоритмы. Может использоваться в главных программах, в теле функции или FBD, а также для описания действий внутри элемен- тов редакторов SFC или Flow Chart. Обладает высокой читабель- ностью исходного кода: ключевые слова, такие как AND, OR, NOT, IF, THEN, ELSE, WHILE (и др.) легко понимаемы. Прост в сопровождении, если имена переменных понятны, имеются ком- ментарии, код хорошо структурирован. Однако язык ST создавался не для систем управления, а для универсального анализа данных. Поэтому он плохо подходит для определения параллельных управляющих структур или для пред- ставления управляемых прерываниями схем контроля реального времени. Графический язык SFC позволяет ясно и однозначно опреде- лить желаемое поведение системы управления. Отличается стро- гим математическим определением (каждое операционное состоя- ние может быть декодировано с очень небольшим анализом). Удо- бен для описания как последовательных процессов, так и пакетных или параллельных процессов, легко комбинируется с другими языками (язык спецификаций). Обеспечивает улучшение понима- ния оборудования при формировании модели приложения, облада- ет развитыми механизмами с лхронизации, использует простые динамические правила. 147
Диагностика языка SFC позволяет обнаружить ошибки проекта до того, как приложение тестируется в режиме Online. Интерактивно анимируемый язык SFC также служит для об- легчения диагностики оборудования и ошибок системы управле- ния и после ввода в действие. Использование SFC как диагности- ческого инструмента может уменьшать среднее время устранения таких неполадок. Язык SFC принят как стандарт в Европе. Однако написание логики программы требует большого искус- ства, поэтому чаще всего используется в паре с другими языками. Преимущества использования стандарта для конечных пользо- вателей состоят в следующем: уменьшается стоимость обучения, пользовательские приложения однородны, структура программ идентична, используются предопределенные объекты и т. п. Раз- нообразие стандартных языков позволяет каждую функцию при- ложения запрограммировать наиболее подходящим для данной задачи языком. Преимущества применения стандарта для разработчиков ПЛК состоят в том, что их разработки соответствуют техническим тре- бованиям, предъявляемым потребителями, а также предоставляют дополнительные функции ПЛК по сравнению с мелкими разработ- чиками ПО.
Приложение 1 Подсистема Concept EFB Это приложение дает краткий обзор подсистемы Concept EFB, позволяющей пользователю создавать свои функции на языке C++, не входящем в стандарт на языки программирования EEC 61131-3, и включать их в библиотеку Concept. Введение Элементарные функции и функциональные блоки, входящие в пакет Concept, организованы в различные библиотеки. Необходи- мые функции могут быть выбраны пользователем. Эти блоки на- зываются EFB. Concept EFB позволяет пользователю создавать свои функции (функция - единая организованная программа, которая обеспечи- вает один выходной элемент при выполнении) и функциональные блоки (обеспечивает несколько выходов для нескольких входов). Пользовательскими функциями и функциональными блоками можно управлять (как функциональными блоками и функциями, поставляемыми с пакетом Concept), используя библиотеки. Concept EFB позволяет опытному пользователю создавать до- полнительные EFB и использовать их в своих приложениях. Функции и функциональные блоки могут сохраняться пользовате- лем в специальной библиотеке. Замечание. В Concept нет разницы между элементарными и пользовательскими функциями, поэтому EFB будут описываться в общем. Concept-приложения могут создаваться на нескольких языках (FBD, LD, ST, IL) с использованием блоков, обеспеченных с соот- ветствии со стандартом IEC 61131-3. Создание EFB накладывает дополнительные требования, в от- личие от программирования с использованием IEC языков, пото- му, что блоки создаются на языке C++ (из-за его функциональных возможностей). Однако выбор функций C++ ограничен. Причины будут объяснены далее. Concept EFB предоставляет полную среду для разработки, на- писания, создания и использования библиотек. Разработка начина- ется в соответствии с выбором пунктов меню в среде разработки, что в свою очередь вызывает batch-процесс, который выполняет 149
все требуемые шаги автоматически. Это означает, что пользовате- лю не надо дополнительно вызывать компилятор Borland C++ или Turbo Assembler. Преимущества пользовательских EFB рассмотрены ниже. Независимые библиотеки Используя язык C++, опытные программисты могут создавать функции от простейших до сложных, которые могут быть в даль- нейшем использованы в различных приложениях. Функции сохра- няются в библиотеках независимо от соответствующего им при- ложения и, как правило, доступны для всех приложений после ус- тановки библиотеки. Защищенные функциональные блоки Технология и структура функциональных блоков не является открытой. Блок представляет собой черный ящик. Улучшение быстродействия и использования памяти Функциональные блоки, созданные с помощью EFB, могут быть использованы во всех IEC языках. По сравнению с эквива- лентными алгоритмами, основанными на простейших функци- ях/функциональных блоках, применение UDEFB дает огромное улучшение по быстродействию и ресурсам памяти. Инструкции по установке Concept EFB Concept EFB - это независимая программа. Так как Concept и Concept EFB используют общие компоненты, то они не могут ра- ботать параллельно. Необходимые компоненты Следующие компоненты являются необходимыми: • Concept; • Concept EFB; • Borland C++5.01/5.02; • TASM и TASM32. iso
Порядок установки Отдельные компоненты должны быть установлены в указан- ном порядке. Concept надо устанавливать до Concept EFB. Установка Concept должна предварять установку Concept EFB, так как дополнение должно быть установлено в ту же директорию, что и Concept. Для разработки EFB также необходимо установить лицензион- ный пакет разработки Borland C++ 5.01/5.02. Это можно сделать до или после установки Concept EFB, но до начала создания функций с помощью Concept EFB. Пакет разработки Borland C++ 5.01/5.02 надо устанавливать перед Turbo Assembler. Borland C++ 5.01/5.02 и Turbo Assembler могут быть установлены до или после Concept. Необходим как 16-битный, так и 32-битный варианты Turbo Assembler (TASM и TASM32). Установка Concept EFB Установка осуществляется согласно инструкциям на экране Замечание. При установке Concept EFB очень важно, чтобы версии Concept и Concept EFB совпадали. Установка Borland C++ 5.01/5.02 Borland C++ 5.01/50.2 - это среда разработки ПО, которая со- держит компилятор и обслуживающие программы для создания EFB-библиотек. Установка этого пакета осуществляется согласно прилагающимся к нему инструкциям. Замечание. Компилятор Borland 5.5, распространяющийся бесплатно, не подходит, так как создает только 32-разрядный код. Установка 16- и 32-разрядного Turbo Assembler (TASM и TASM32) В дополнение к Borland C++ необходимо установить две про- граммы для ассемблера: TASM.exe и TASM32.exe. Напоминаем Вам, что из-за особых требований блоки, создан- ные в C++, должны компилироваться с использованием времен- ных файлов на ассемблере, а не непосредственно из IDE. Замечание. Установку TAMS/TASM32 можно производить только после установки Borland C++. 151
Директория установки Для создания кода (16- или 32-разрядного) необходимо скопи- ровать файлы TASM, TASM32 в директорию BIN компилятора Borland C++. Замечание. Файлы TASM/TASM32 не входят в среду разра- ботки Borland C++ 5.01/5.02 и должны приобретаться отдельно. Создание и редактирование EFB Содержание: • создание EFB; • редактирование файла заголовка (definition file) EFB; • редактирование исходного файла; • резервирование исходного файла; • редактирование файла прототипов; • конструкция EFB; • граничные условия и ограничения; • ключевые слова файла заголовков; • PIN синтаксис (выводов). Создание EFB EFB может быть определен как функция (имеет только один выходной элемент, не содержит внутренних переменных, и поэто- му при одних и тех же входных параметрах выход всегда одина- ков) или как функциональный блок (имеет множество выходов и может менять выходные параметры в зависимости от значения внутренних переменных), но всегда должен быть компонентом библиотеки блоков. Функции и функциональные блоки создаются одним компиля- тором, содержатся в одной библиотеке и доступны после установ- ки в Concept. Предпосылки Чтобы создавать функции и функциональные блоки с помо- щью Concept EFB, надо выполнить все системные требования и установить правильные настройки. 152
Директория проекта Нужно создать директорию проекта. В одной директории проекта можно создавать несколько биб- лиотек. Однако только одна версия библиотеки может находиться в одной директории проекта. Для того чтобы работать с разными вариантами одной библиотеки, надо записать информацию и в разные директории. Можно переключаться между различными директориями, ис- пользуя Option, Set, Development Path. Эти команды открывают диалоговое окно, в котором можно выбрать данную директорию в качестве директории проекта. При выборе, нажимая кнопку «ОК», следует проверять, подходит ли выбранная директория для созда- ния библиотеки. Переход в новую директорию происходит только после подтверждения. Если введенная директория не существует или нет необходимых файлов, то переключение прерывается и вы- дается сообщение об ошибке. Если все верно, то происходит пере- ход в новую директорию. Название активной директории проекта показано в заголовке окна приложения, пока идет работа с библио- текой, находящейся в ней. Процедура Для создания библиотеки нужно выполнить следующие действия. 1. Используем опцию New Library для создания новой биб- лиотеки или опцию Open Library для редактирования уже суще- ствующей (имя библиотеки записывается в заголовок окна при- ложения) 2. Используем опцию New Function для создания новой функ- ции или опцию New Function Block для создания нового функцио- нального блока. (Файл заголовка создан, и его название показано в окне редактирования.) 3. Редактируем файл заголовков (*.fb) так, как это описано в разделе «Редактирование файлов заголовков». 4. После редактирования создаем все необходимые файлы, ис- пользуя Generate Files. Создаются файл исходного кода и файл за- головков (*.h). 5. Редактируем файл исходного кода (*.с) так, как это описано в разделе «Редактирование файла исходного кода». 6. Редактируем файл заголовков (*.h) так, как это описано в разделе «Редактирование файла заголовков». 153
Тестирование EFB Для того чтобы протестировать EFB, смотри раздел «Тестиро- вание созданных функциональных блоков». Редактирование файла заголовка (definition file) EFB В ходе создания новой библиотеки (EFB) мы получаем гото- вый файл заголовка. Но он показывает только каркас настоящего блока. Файл надо изменить в соответствии с требованиями нашего блока. Файл заголовка содержит только общую информацию о EFB и информацию о входах и выходах. Он также дает функциональное и графическое обозначение интерфейса EFB для Concept. Обратите внимание на то, что после каждого изменения исход- ного файла необходимо автоматически изменять файл заголовков с помощью команды Generate Files. Открытие файла заголовков Откройте файл заголовков, используя опции Objects, Definition. Пример файла заголовков Файл заголовков для блока MY FUBL1: //;--------------------------------------- //:SUBSYSTEM: EFB - Elementary Function Block //: //:MODULE: ..\EFBTEST\MY_FUBL1.FB //: //:--------------------------------------- //:Revision: 2.1 Modtime: 22 Jan 1998 AUTHOR: Peter Alig //:--------------------------------------- Declaration of Elementary Function Block: MY FUBLl Author: Peter Alig Editor Group: Test Group 154
Major Version: 1 Minor Version: 0 Description: A full working test example. // 11 Not sure what to do ? // Try generate-files, make and install on this working example! // И Example: //----- Rising Edge Detector: BOOL CLK # count up clock Input: INT INCVAL # increment value per clock Input: INT MAXCOUNT # limiter on upcount State Output: INT COUNTOUT # counter output value Output: INT TICKS # ticks since last change of INCVAL // Используйте следующую строку, чтобы определить внутреннюю структуру Internal State: BOOL initDone # initialising done on first run // Для получения большей информации смотрите макет исходного файла после генерации файла. Кодовое слово Файл заголовков включает различные кодовые слова и строки комментариев. Исходный файл и файл заголовков создаются с помощью кодо- вых слов, используемых в файле заголовков. Список разрешенных кодовых слов, их значение и описание синтаксиса могут быть найдены в разделе «Ключевые слова файла заголовков и PIN синтаксис». 155
Редактирование исходного файла После того как исходный файл и файл прототипов были соз- даны с помощью команды Generate Files и файла заголовков, надо отредактировать исходный файл, поскольку после автоматическо- го создания он содержит лишь функцию, необходимую для ус- пешной компиляции процедуры. Замечание. После каждого изменения файла заголовков ис- ходный файл должен быть дополнен автоматически, с помощью команды Generate Files. Старая версия исходного файла сохраняет- ся системой как резервный файл. Открытие исходного файла Открываем исходный файл, используя опции Objects, Sowce. Пример исходного файла Текст примера: Source file for the example block MY_FUBL1.//:-------- //:SUBSYSTEM: EFB - Elementary Function Block //: //:MODULE: MY FUBL1 //: //:---------------------------------------- //:Revision: 1.0 Modtime: 30 May 2000 AUTHOR: Peter Alig //:---------------------------------------- ///DESCRIPTION: A full working test example. //: //:REMARKS: //:---------------------------------------- include "EFBTEST.I" 156
extem"C" BOOL FB_CALL_CONV MY_FUBL1( const PTR BOOL CLK, //count up clock const PTRINTINCVAL , //increment value per clock const PTRINT MAXCOUNT , //limiter on upcount PTR_Istat_MY_FUBLl Istate, // internal state PTRINT COUNTOUT , //counter output value PTRINT TICKS ) //ticks since last change of INCVAL { if_FALSE(Istate->initDone) // initialize first time Istate->initDone = TRUE; AliPutFbdError(E_DUMMY_SOURCE_CODE); return FALSE; Команды в синтаксисе C++ Теперь можно добавлять необходимые команды на языке C++ (см. также раздел «Граничные условия и ограничения»), Константы с плавающей точкой Объявление literal (указатель, позволяющий непосредственно подавать значения на вход блока для логического сравнения и дру- гих операций, при этом программа не может изменить данное зна- чение; этот тип также применяется для определения констант или начального значения переменных) для указания константы невоз- можно использовать напрямую при создании EFB. Причиной яв- 157
ляется процесс генерации кода ассемблера в Borland C++. Для соз- дания константы необходимо определить переменную и задать ее начальное значение REAL k0_77 = 0.77; Резервирования исходного файла При выполнении команды Generate Files резервируется старая версия файла как (backupOO.c, backupOl.c ...). Временная марка Concept EFB использует временные марки в качестве критерия для определения того, какой файл надо резервировать. Редактирование файла прототипов Файл прототипов - это файл, содержащий прототипы соот- ветствующих процедур. Он также содержит описание входных и выходных переменных, а также типы внутренних переменных. Его можно редактировать, однако после вызова Generate files все изменения будут утеряны, так как файл будет создан заново. Это означает, что можно смотреть лишь файлы, создаваемые автома- тически. Открытие файла прототипов Открытие файла прототипов осуществляется с помощью опций Objects, Prototype. Пример файла прототипов Текст примера: Prototype file for the example block MY FUBL1.// Lines below are generated by tool, all manual changes will be overwritten.// //:------------------------------------- //:SUBSYSTEM: EFB - Elementary Function Block //: //:MODULE: ..\EFBTEST\MY_FUBL1\MY_FUBL1 .H 158
//: //;------------------------------------- //:Revision: 1.0 Modtime: 30 May 2000 AUTHOR: Peter Alig //:------------------------------------- //DESCRIPTION: A full working test example. //: //:REMARKS: //:------------------------------------- // Elementary Function Block: MY_FUBL1 // // _______________________________ " I I // | MYFUBLl | // I I 11 BOOL —> CLK | // INT —I INCVAL COUNTOUT |— INT // INT —I MAXCOUNT TICKS |— INT // I____________________I typedef struct Istat_MY_FUBLl { BOOL CLK old; // internal state BOOL initDone; //initialising done on first run } IstatMYFUBLl, FB_PTR__CONV *PTR_Istat_MY_FUBLl; 159
//: FUNCTION:------------------------------- extern "C" // // R, Correctness of execution BOOL FB CALL CONV MY FUBL1 (const PTR BOOL /*CLK */, //1, count up clock const PTRINT /*INCVAL */, //1, increment value per clock const PTRJNT /*MAXCOUNT*/,//1, limiter on upcount PTRJstatJvlYFUBLl /*Istate */, // I/O, Internal State PTR JNT /*COUNTOUT*/// I/O, counter output value PTR INT /*TICKS */);// O, ticks since last change //.------------------------------------- //iDESCRIPTION: A full working test example. //: //:REMARKS: //:------------------------------------- В комментариях к коду сказано, что все строки файла созданы программой автоматически. Графическое представление блока После открытия файла прототипов появляется графическое представление функционального блока в окне редактирования. Входы всегда показываются слева, а выходы справа. Положение выходных величин отвечает положению, определяемому при их объявлении в файле заголовков. Название EFB Название функции и/или функционального блока показано в сере- дине рамки (условного обозначения блока). Генерируемое програм- 160
мой имя блока расположено над рамкой и используется при написании функции и работы с проектом. Его можно поменять в окне свойств (properties). Конструкция EFB Команды, используемые в EFB, содержат особые ограничения (см. раздел «Граничные условия и ограничения»). Секция конфигурации и рабочий временной диапазон Заслуживает внимание разделение EFB на секцию конфигура- ции и период работы. Это позволяет легко определить, какая сек- ция кода может быть только раз выполнена и в какой момент вре- мени, поскольку существует только один запрос между двумя эти- ми областями, (см. пример в разделе «Редактирование исходного файла»). Изменение времени выполнения (рабочего времени) EFB надо писать так (насколько это будет возможно), чтобы время выполнения оставалось одинаковым для каждого запроса. В противном случае это может привести к непредсказуемым изменениям во временном цикле ПЛК. Более длинные блоки следует распределять между несколькими временными циклами ПЛК, что необходимо для уменьшения различия (изменения времени выполнения). Граничные условия и ограничения Создание EFB с помощью Concept EFB в некотором смысле отличается от написания программ на классическом языке С. Да- лее описываются отличия, которые следует знать. Исходный файл EFB имеет следующие ограничения и граничные условия для исходного файла. • API функции могут быть вызваны только в основной (main) функции EFB. • Число входных и выходных параметров ограничено 32. 161
• Максимальный размер переменной 64 байт. • Локальные переменные можно делать составными (не бо- лее 256 байт размера переменной в целом). • Локальные переменные не могут инициализироваться сис- темой. Генерация кода Операционная система ПЛК отличается от обычной опера- ционной системы PC. Например, не существует в ПЛК про- граммах сегментов информации DGROUP, которые использу- ются компилятором Borland C++ для работы со статистически- ми переменными. Следующие ограничения должны быть учтены при генерации кода компилятором Borland C++. • Нельзя использовать статистические переменные. • Подфункции, вызываемые внутри EFB, должны быть определены статистически (за исключением самих EFB- функций). • Операции с плавающей точкой надо использовать осторож- но, поскольку сегменты памяти используются, например, и для сохранения переменных. • Код, созданный компилятором Borland C++, должен под- держиваться операционной системой ПЛК. Это гарантируется для стандартных функций инструкциями С, но не для всех функций стандартных библиотек. Не разрешены операции со строками, операции ввода/вывода и сохранения данных. Уникальность имен Все имена, используемые при программировании, должны быть уникальными. Это относится не только к названиям бло- ков в одной библиотеке, но и к названиям блоков в Concept, так как несколько библиотек могут использоваться одновре- менно. Ключевые слова файла заголовков Здесь приведена табл. П1 разрешенных ключевых слов с крат- кими пояснениями. Пример использования этих слов можно по- смотреть в распечатках файлов, приведенных выше. 162
Таблица Ш Ключевые слова Комментарии Declaration of Elementary Function Block Объявление функционального блока Declaration of Elementary Function Объявление функции Description Описание блока1 Remarks Замечания’ Special header information Специальная информация1 Empty space Обозначает последующие строки коммен- тариев, если до этого стояло ключевое слово, после которого может быть не- сколько строк текста Editor group Группа, к которой принадлежит этот блок Major version Номер версии блока (основной) Minor version Номер версии блока (не основной) Input Объявление входной переменной 2,1 State output Объявление скрытого сохраняемого (по умолчанию) значения выходной перемен- ной (возможно только для функциональ- ных блоков)4,6 Rising Edge Detector Объявление входного для сигнала, кото- рый должен восприниматься как возрас- тающий уровень 2,4,6 Falling Edge Detector Объявление входного для сигнала, кото- рый должен восприниматься как спадаю- щий уровень2,4,6 Output Объявление выходной переменной 4,6 Internal state Объявление внутренней переменной 6 Var_InOut Объявление переменной, которую можно использовать как для «входа», так и для «выхода»5 Примечание. Под переменной здесь также подразумевается ее адрес. 'Несколько линий кода могут следовать за этим ключевым словом. Эта ин- формация ограничивается либо другим ключевым словом, либо завершением файла. Промежуточные строки могут следовать после пробела (empty space). 2Синтаксис объявления входа/выхода. ^Объявление входных переменных может даваться как расширяемое. 4 Эти ключевые слова создают скрытые параметры, которые могут быть исполь- зованы для сохранения внутренних параметров функционального блока вне EFB. 5 Когда ключевое слово введено, создается переменная, которая показывается на обеих сторонах (строго напротив) функционального блока. 6 Только для функциональных блоков. 163
PIN синтаксис Под PIN здесь понимают разъем, например штыри на процес- соре. Входные и выходные PIN Входной или выходной PIN блока должны быть определены следующим образом: <ключ>[(<ехр_ш1Ь>)]:[=|.|+] <тип> <имя> [#<пояснения>] (<key>[(<exp_info>)]:[=|.|+] <typ> <name> [#<cornment>]) Для объявления PIN используются параметры, приведенные в табл. П2. Таблица П2 Параметр Назначение <ключ> /<кеу> Ключевое слово (см. табл. Ш) <exp_info> Дополнительная информация для extendible PIN <тип> /<typ> Тип данных <имя>/<пате> Имя PIN <пояснения> / <comment> Комментарии автоматически отсекаются в конце строки [=1-1+] Дополнительный ( по выбору), для выходных Расширенные PIN (extendible PIN) Ввод ключевого слова может быть расширен следующим обра- зом для extendible PIN (табл. ПЗ): <min>. ,<max>,default=<def> Таблица ПЗ Параметр Назначение <min> Минимальное число объявленных входов <max> Максимальное число возможных входов <def> Стандартное число доступных входов 164
Местоположение выходов Можно менять позицию выхода на изображении блока с по- мощью объявления (табл. П4). Таблица П4 Параметр Назначение = Выход определяется тем же типом данных, что вход с другой стороны на той же высоте (по умолчанию) - Не ищем соответствие для входа того же типа + Этот символ можно вводить несколько раз. Каждый введенный символ поднимает одну позицию перед выходным символом Скрытые имена PIN Входные и выходные значки показываются, как обычно в Con- cept. Вывод можно скрыть, используя директиву hide(<variable name>) в файле заголовков (*.fb). Пример: Input: BOOL ini #Ввод типа данных BOOL с именем ini на по- зицию 1 Input :++ REAL in2 #Ввод типа данных REAL с именем in2 на позицию 4, две позиции выводов сверху пропущены. Output ;= REAL outl #Выход с типом данных REAL на той же позиции (4),что и тип данных REAL на стороне входов. Output := REAL hide(out2) #Выход типа данных REAL. Имя вывода out2 не будет показано внутри EFB. Вход EN и выход ENO В графических языках Concept (LD, FBD) возможны входные значения (если значение EN = 0, то алгоритм блока не работает, если EN = 1, то начата работа) и эквивалентные выходные значе- ния (если ENO = 0 - не работает блок, если ENO = 1- работает). Работа с входами EN полностью осуществляется программой в автоматическом режиме. Если значение выставлено на нуль (0), то отработка кода в С не происходит. Значение выхода ENO соответствует возвращаемому значению EFB. Замечание. Если при выполнении EFB происходит ошибка, то необходимо, чтобы значение параметра становилось FALSE. 165
СПИСОК ЛИТЕРАТУРЫ 1. Методы классической и современной теории автоматиче- ского управления: Учеб.: В 3 т. Т.2.: Синтез регуляторов и тео- рия оптимизации систем автоматического управления / Под ред. Н.Д. Егупова. М.: Изд-во МГТУ им. Н.Э. Баумана, 2000. 2. Технология реализации компьютерных систем управления на базе структурно-программируемых контроллеров. Ч. 1: Учеб, пособие по курсу «Управление в технических системах»/ Н.П. Деменков, Е.С. Лобусов, Е.Д. Панин, В.А. Суханов; Под ред. К.А. Пупкова. М.: Изд-во МГТУ им. Н.Э. Баумана, 1995. 3. IEC. IEC 1131-3 International Standart, 1993. 4. Зюбин В.Е. К пятилетию стандарта IEC 1131-3. Итоги и про- гнозы // Приборы и системы управления. 1999. № 1. 5. Прангишвили И.В., Амбарцумян А.А. Основы построения АСУ сложными технологическими процессами. М.: Энергоатом- издат, 1994. 6. Concept 2.5. High Performance IEC 61131-3 Development En- vironment to Optimize PLC performance. Schneider Electric. 2001. 7. Concept 2.5. User Manual. Schneider Electric. 2001.
ОГЛАВЛЕНИЕ Введение....................................................3 1. Язык функциональных блок-схем - FBD......................10 1.1. Элементарные функции и функциональные блоки - EFB..11 1.2. Производные функциональные блоки-DFB..............13 1.3. Создание программы на языке FBD...................14 1.4. Пример............................................16 2. Язык лестничной диаграммы - LD..........................18 2.1. Элементы языка LD.................................19 2.2. Создание программы на языке LD....................23 2.3. Пример............................................25 3. Язык списка инструкций - IL.............................26 3.1. Команды (инструкции) языка IL.....................26 3.2. Создание программы на языке IL....................51 3.3. Пример............................................52 4. Язык структурированного текста - ST.....................55 4.1. Операторы языка ST................................55 4.2. Создание программы ST.............................76 4.3. Пример............................................78 5. Язык последовательного функционального управления - SFC..79 5.1. Элементы языка SFC................................79 5.2. Редактирование элементов языка SFC................97 5.3. Интерактивные функции............................100 5.4. Пример...........................................107 6. Программирование контроллеров Modicon TSX с помощью пакета Concept..................................109 6 .1. Структура программируемого логического контроллера Modicon TSX Quantum и его памяти..........................109 6 .2. Конфигурирование и адресация...................115 6 .3. Редактор переменных............................126 6 .4. Типы данных....................................131 6 .5. Этапы программирования программируемого логического контроллера...................................135 6 .6. Управление технологическим процессом разделения нефти.. 137 Заключение................................................146 Приложение................................................149 Список литературы.........................................166 167
Schneider J в Electric SCHNEIDER ELECTRIC В ФАКТАХ И ЦИФРАХ В 1836 г. во французском городке Крезо братья Адольф и Эжен Шнейдер учредили компанию, основными направлениями дея- тельности которой были угледобыча и черная металлургия. Сегодня Schneider Electric - один из крупнейших в мире произ- водителей электротехнического оборудования и средств автомати- зации для таких отраслей, как строительство, промышленность, инфраструктура и электроэнергетика. Компания владеет всемирно известными торговыми марками: Merlin Gerin — широкая гамма оборудования низкого и высо- кого напряжения для передачи и распределения электроэнергии; Telemecanique - оборудование для АСУ ТП. В 1999 г. в состав Schneider Electric вошла компания Lexel - производитель электроустановочного оборудования, кабеленесу- щих и противопожарных систем. Schneider Electric для промышленных предприятий Для предприятий самых различных отраслей промышлен- ности (например, нефтяной и газовой, автомобилестроения, фар- мацевтической, пищевой промышленности, производства цемен- та, стройматериалов, деревообработки, а также для водоочистки и водоснабжения) компания предлагает широчайшую номенкла- туру изделий: • оборудование для автоматизации технологических процессов: программируемые логические контроллеры, интерфейс «человек - машина» (операторские панели, промышленные компьютеры и программные системы), коммуникационные промышленные сети и системы управления технологическими процессами; • пускорегулирующую аппаратуру, кнопки и светосигналь- ную аппаратуру, индуктивные и емкостные датчики приближения, датчики давления, концевые выключатели;
• преобразователи частоты вращения для асинхронных электродвигателей; • системы распределения электроэнергии низкого и высо- кого напряжения (0,4.. .35 кВ); • подстанции высокого напряжения (6.. .20 кВ). Schneider Electric в области электроэнергетики В области производства, передачи и распределения электро- энергии компания выполняет поставку оборудования и реализа- цию проектов «под ключ»: • понижающих и повышающих подстанций и центров питания; • комплектных трансформаторных подстанций; • комплексных систем защиты, контроля и управления для подстанций и распределительных сетей; • КРУЭ, высоковольтных коммутационных аппаратов, ячеек КРУ, выключателей, разъединителей, трансформаторов, цифровых устройств и систем защиты, контроля и управления. Schneider Electric в России • 1974 г. — первый проект Schneider Electric в России - осна- щение Самарского нефтеперерабатывающего завода; • 1993 г. - в Москве создано аккредитованное представи- тельство Schneider Electric; • 1997 г. - в Москве учреждено ЗАО «Шнейдер Электрик»; • 1999 г. - число сотрудников достигло 100 человек; • 2002 г. - Schneider Electric приобретает контрольный пакет акций в уставном капитале российского предприятия «У ралЭлектро Контактор», производящего пускатели и контакторы; • 2003 г. - компании Schneider Electric и Lexel объявляют о слиянии своего бизнеса в России; • 2003 г. - число сотрудников в России превысило 600 человек. Schneider Electric является партнером российских предпри- ятий более 25 лет. Оборудовг зие компании используется в Кремле и в обычных жилых домах, на объектах Газпрома и в серийных трансформаторных подстанциях, на распределительных пунктах и других объектах инфраструктуры городов России. Вот лишь не-
сколько примеров объектов, на которых используется оборудова- ние компании: здание МИД РФ, стадион «Лужники», Новолипец- кий металлургический комбинат, комплекс зданий Мэрии Москвы, Музей изобразительных искусств им. А.С. Пушкина, МКАД и 3-е транспортное кольцо Москвы, пищевые производства компаний Cadbury, Unilever, Wrigley, Dirol, деловой комплекс «Москва- Сити», выставочный комплекс «ЭКСПОЦЕНТР». Структура Schneider Electric • Филиалы в 11 городах России (Москва, Санкт-Петербург, Калининград, Нижний Новгород, Самара, Екатеринбург, Краснодар, Казань, Новосибирск, Уфа, Воронеж); • ООО «УралЭлектроКонтактор» в г. Медногорск (Орен- бургская обл.), завод Lexel в Санкт-Петербурге; • Центр сервисного обслуживания: гарантийное, послепро- дажное обслуживание, технические консультации, кон- тракты на техническое обслуживание, технический аудит, ретрофит оборудования, шеф-монтаж, проекты «под ключ» • Центры обучения в Москве и Санкт-Петербурге, учебные лаборатории в технических университетах (Москвы, Санкт-Петербурга, Самары, Екатеринбурга, Челябинска, Новосибирска); • Склад оборудования и комплектующих площадью 4000 кв.м в Москве; • Центр информационно-технической поддержки Help Desk. Адрес: ЗАО «ШНЕЙДЕР ЭЛЕКТРИК»: 129281, Москва, ул. Енисейская, 37. Тел.: (095) 797 40 00, факс: (095) 797 40 02. http: // www.schneider-electric.ru Центр информационно-технической поддержки (Help Desk). Телефакс: (095) 797 32 32.
Учебно-научный центр «Интеллектуальные системы» при МГТУ им. Н.Э. Баумана предлагает услуги по повышению квалификации и переподготовке специалистов в области АСУ ТП. Курсы по контроллерам без программирования Ремиконт Р-130 и РК-131 ОАО “ЗЭиМ”: • Р1 и Л1 - базовые по регулирующей и логической моделям; Р2 - компью- терный (продолжительность каждого курса 40 ч, 5 дней). • РЗ и ЛЗ - по настройке регули- рующих и логических моделей контроллеров Ремиконт Р-130 и РК-131; • Р4 - по сетевой архитектуре контроллера Ремиконт Р-130 (продолжительность каждого кур- са 16 ч, 2 дня); • Р5 - по интеллектуальному шлю- зу для связи по Ethernet с контрол- лером Ремиконт Р-130 (продолжи- тельность курса 24 ч, 3 дня). Курсы по программируемым кон- троллерам Ремиконт Р-130М и КРОСС: • С1 — по контроллерам КРОСС; С2 - цикл по системе программирова- ния ISaGRAF; СЗ - цикл по полевым приборам ТРАССА; С4 - цикл по свободно процэаммируемым контрол- лерам Р-130ТМ (продолжительность каждого курса - 40 ч, 5 дней). Курсы по программируемым логическим контроллерам серий Modicon и Telemecanique компании Schneider Electric: • Мод1 - базовый; МодЗ - по ПИД- регуляторам; Мод4 — по языкам программирования международного стандарта IEC-61131-3; Mod6 - по Nano (продолжительность каждого курса 24 ч,3 дня). • Мод2 - сетевой, Mod5 — по нечет- кому управлению; Mod7 -по Zelio (продолжительность каждого курса 16 ч, 2 дня). Курсов по SCADA-системе «Трейс Моуд» компании АдАстра: • ТМ500 - ознакомительный, • ТМ500П - продвинутый по рабо- те с инструментальной графиче- ской системой «Trace Mode» в.5.хх (продолжительность каждого курса 40 ч, 5 дней). • ТМ/НЛР - по нечеткому управле- нию (продолжительность курса 16 ч, 2 дня); Курсы по сравнительному анализу: • ТМ/С - по сравнению SCADA- систем на основе оригинальной методики, Trace Mode, Factory Link, Monitor Pro, Vijeo Look, Intouch, iFIX, Genesis и др. (продолжитель- ность курсов: 24-40 ч, 3-5 дней в зависимости от количества сравни- ваемых систем). Курсы по разработке АСУ ТП: • ТМ/Р, ТМ/М -на базе «Trace Mode» и контроллеров Ремиконт или Modicon; M’Pro/M, VL/M, FL/M — на базе Monitor Pro, Vijeo Look, Factory Link и контроллеров Modicon (про- должительность каждого курса 40 ч, 5 дней).
Слушателям предоставляется возможность сформировать индивидуальный цикл обучения путем выбора курсов обучения, наиболее подходящих их требованиям. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, ИНЖИНИРИНГ, КОНСАЛТИНГ КОМПЛЕКСНАЯ СИСТЕМА ПОДДЕРЖКИ РАЗРАБОТЧИКА И ТЕХНОЛОГА АСУ ТП: • ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ (БАЗА ДАННЫХ) КОНТРОЛЛЕРЫ Р-130, РК-131; • РЕДАКТОР СТРУКТУРНЫХ СХЕМ ДЛЯ Р-130 и РК-131 «REditor»; • СИСТЕМА ПРОГРАММИРОВАНИЯ И ОПЕРАТИВНОГО УПРАВЛЕНИЯ Р-130 СПиОУ; • СИСТЕМА ПРОСМОТРА И АНАЛИЗА СИГНАЛОВ В СЕТИ Р-130 «LOOK»; • ПРОГРАММА АВТОМАТИЧЕСКОЙ НАСТРОЙКИ ПИД-РЕГУЛЯТОРА Р-130 АНР; • REditor ACAD convert Utility • СИСТЕМА ДЛЯ ПРИНЯТИЯ ПЛОХО ФОРМАЛИЗОВАННЫХ РЕШЕНИЙ; СИСТЕМА ДЛЯ ПРОЕКТИРОВАНИЯ НЕЧЕТКИХ ЛОГИЧЕСКИХ РЕГУЛЯТОРОВ • ИНСТРУМЕНТАЛЬНАЯ ГРАФИЧЕСКАЯ СИСТЕМА ТРЕЙС-МОУД версий 4.2х, 5.хх„ 6.Ох; UPGRADE версий 4.1х, 4.2х и 5.хх ИГС ТРЕЙС-МОУД; ДРАЙВЕРЫ УСО ИГС ТРЕЙС-МОУД К ОТЕЧЕСТВЕННЫМ И ЗАРУБЕЖНЫМ КОНТРОЛЛЕРАМ • РАЗРАБОТКА АСУ ТП НА БАЗЕ ТРЕЙС МОУД И Р-130 / MODICON; РАЗРАБОТКА АСУ ТП НА БАЗЕ MONITOR PRO, VIJEO LOOK И MODICON Адрес: 105005, Москва, 2-я Бауманская, 5. МГТУ им. Н. Э. Баумана, каф. ИУ-1, «Интелсист». Тел.: (095) 263-67-27. E-mail: intelsyst@iul.bmstu.ru, http: //www.iul.bmstu.ru