Владимир Стретенцев
Табличный ПЛК.Табличное программирование контроллеров

Предисловие

Управление объектами при помощи вычислительных устройств со временем трансформировалось из важного компонента в основную задачу при проектировании различных систем и оборудования. Современные микропроцессоры и контроллеры на их основе помогают реализовать алгоритмы управления как отдельными частями оборудования, так и всей системой, учитывая сложные внутренние связи. Увеличение скорости вычислений и объема памяти контроллеров способствовало созданию сложных программных комплексов, использованию многоуровневых интерфейсов обмена данными.

В современной жизни автоматическое управление объектами имеет много преимуществ, но чем сложнее становятся системы, тем больше они делаются ненадежными. Постепенно алгоритм работы вычислительного устройства, управляющего оборудованием или его частью, ввиду своей специфики и сложности оказался недоступен как для оператора, так и для обслуживающих специалистов. Знания о принципе работы системы стали сводиться к ожиданию определенной ответной реакции механизмов и различных приборов на изменения сигналов на входах контроллера. Оборудование, работающее по заданному алгоритму, начало наделяться интеллектуальными и даже разумными свойствами из-за часто непредсказуемой реакции на действия оператора.

Работа системы в нормальном режиме обычно не вызывает вопросов к ее внутреннему устройству. Но при возникновении нештатной ситуации или поломке одной из частей системы восстановление ее работоспособности потребует от обслуживающих специалистов понимания алгоритма работы управляющей программы и большого опыта в ремонте подобных систем. И чем сложнее оборудование, тем больше необходимо знать о взаимодействии между его составляющими.

Для привлечения к программированию не только узких профессионалов, но и инженеров других специальностей были разработаны языки программирования высокого уровня, а также графические средства, которые ускоряют разработку программ управления оборудованием, снижают количество ошибок в них, но при этом создают новые трудности при эксплуатации оборудования. Даже если не брать в расчет тот факт, что очень часто программный код, управляющий оборудованием, закрыт, обслуживающим специалистам необходимо постоянно изучать новые решения, появляющиеся в области программирования контроллеров, чтобы прогнозировать поведение оборудования при минимальном объеме информации о его внутренней организации.

Большинство графических человеко-машинных интерфейсов в основном отражают состояние работающей системы и не позволяют в полной мере обеспечить обслуживающий персонал информацией о ее повреждении или нештатной ситуации. Сложное программное обеспечение, часто недоступное в текстовом или графическом виде, может содержать ошибки или не учитывать все возможные состояния комплекса.

Таким образом, в работе технических систем увеличивается риск возникновения неисправности, которая может привести к значительному простою оборудования. Повышается зависимость функционирования объекта от доступности специалистов и их квалификации. Даже у наладчиков высокого уровня время выявления и последующего устранения причины неисправности постоянно растет.

Актуальным становится появление открытых систем, позволяющих получать информацию об их алгоритме работы и внутреннем состоянии. При этом возникают серьезные требования к графическому человеко-машинному интерфейсу.

Требуется простая и понятная визуализация состояний системы. Настройка режимов работы не должна быть многослойной, когда для доступа к интересующим нас параметрам нужно пройти по ветвистому дереву переходов. Необходимо применять графические символы, создающие правильные ассоциации. При наведении на них указателя должна появляться подсказка, однозначно и ясно объясняющая назначение каждого символа. Причем это относится не только к интерфейсу пользователя, но и к графической системе, отражающей внутреннее рабочее состояние оборудования. Следует выбирать такие способы представления информации, которые будут достоверно и точно отображать состояние входов и выходов контроллера. Название внешних сигналов не должно ограничиваться только номером провода или контакта, оно должно также содержать в себе свое назначение, функцию, быть написанным на понятном языке, без сокращений и выдуманных разработчиком сложных аббревиатур. Обязательно должны отображаться логические цепи формирования выходных сигналов.

Решение данной проблемы – не новая задача, и в программируемых логических контроллерах (ПЛК) наряду с текстовыми языками программирования применяются графические: LD (Ladder Diagram) – язык релейных схем, FBD (Function Block Diagram) – язык функциональных блоков, SFC (Sequential Function Chart) – язык диаграмм состояний. Они стандартизованы для применения в программируемых контроллерах в МЭК 61131-3[1]. Чтобы увидеть графическое отображение работы программы, созданной на одном из этих языков, необходимо подключить к ПЛК компьютер с установленной на нем средой разработки, в которую загружен исходный файл программы. Далее нужно синхронизировать программу в компьютере с программой в ПЛК. И тут возникает множество вопросов, не всегда имеющих адекватные ответы:

– поставляется ли с оборудованием файл исходной программы?

– имеется ли в оперативном доступе компьютер с установленной средой разработки?

– есть ли возможность подключения компьютера к ПЛК?

– необходима ли лицензия на использование среды разработки?

– есть ли вообще специалист, знакомый со средой разработки и умеющий разбираться в программах на перечисленных языках?

Даже если на все эти вопросы ответы утвердительные, то остаются проблемы однозначного понимания применяемого алгоритма работы, использования нестандартных блоков и подпрограмм, созданных разработчиками оборудования, назначения внутренних переменных и комментариев.

Из приведенных в пример графических языков у специалиста по информационным технологиям, не знакомого с ПЛК, только язык диаграмм состояний может не вызвать вопросов. Для небольших алгоритмов достаточно прост и понятен язык релейных схем LD, но программы с большим количеством блоков, написанные на нем, могут вызвать серьезные затруднения. Язык функциональных блоков FBD похож на принципиальную схему электронного устройства на логических микросхемах и более понятен специалистам по электронике, чем программистам.

На практике разворачивание диагностического комплекса, содержащего среду разработки, с привлечением соответствующих специалистов требует времени, в течение которого оборудование простаивает. Решение встроить диагностический комплекс в оборудование снимает часть проблем, возникающих при поломках, и позволяет наладчикам сразу же начать проверку неисправности. Однако это довольно дорогое решение, которое не всегда может быть применено по экономическим соображениям. Встроенный в оборудование диагностический комплекс также повысит требования к квалификации сервисных инженеров. Теперь на время простоя будет влиять не скорость развертывания диагностического оборудования, а то, насколько быстро удастся привлечь к ремонту необходимых специалистов, особенно если их нет в штате предприятия.

Языки, входящие в стандарт МЭК 61131–3, упорядочивают процесс разработки программ и снижают затраты на их перенос с контроллера на контроллер разных производителей. Специалист, освоивший стандартные языки программирования контроллеров, сможет разобраться в прикладных программах ПЛК разных производителей, но для поиска неисправностей еще необходимо знание особенностей контролируемого процесса и алгоритма работы, осуществляемого при помощи данного оборудования. К примеру, специалист, разбирающийся только в работе вентиляционной системы, скорее всего, не сможет быстро перейти на обслуживание газовых турбин или грузоподъемного оборудования, хотя язык программирования в этих системах будет использоваться один и тот же.

Попробуем определить, какую информацию и в каком виде нужно иметь обслуживающему персоналу, чтобы быстро и точно найти причину неисправности оборудования, а после ее устранения убедиться в правильности действий.

Во-первых, работнику должно быть понятно назначение оборудования или системы, которую он собирается ремонтировать. Неисправной обычно бывает только какая-то часть большого и сложного комплекса, о котором можно иметь лишь общее представление. Такие системы состоят из частей или модулей, и специалисту по ремонту нужно понимать назначение и функцию неисправной части. А лучше, чтобы сам модуль мог сообщать о своем назначении и функции в системе, информировать об алгоритме своей работы и встроенных ограничителях, например аварийных кнопках, датчиках уровня, концевых выключателях. Кроме того, обязательно должны быть представлены контролируемые параметры и их границы.

Во-вторых, необходимо иметь однозначную информацию о назначении входных и выходных сигналов. Так как функция программируемого контроллера, управляющего оборудованием, – формировать выходные сигналы и данные, то специалисту по ремонту необходима информация о том, как это происходит, причем представленная в простом и понятном виде.

Применяемые при управлении объектами сложные алгоритмы имеют разные уровни детализации, и необходимо предоставить заинтересованным лицам такой уровень описания, когда алгоритм остается понятным и не тонет во множестве деталей. Можно и дальше добавлять требования к визуализации состояния оборудования, тем самым увеличивая нагрузку на графическую часть программы. Но лучше, чтобы все эти требования имели автоматическую реализацию в среде разработки, когда в момент написания программы создается такое графическое представление алгоритма, которое впоследствии будет использовано при сопровождении готового продукта.

Теперь стоит задаться вопросом о том, как эта информация может быть доведена до пользователя и воспринята им. И здесь пора отойти от оборудования и алгоритмов его работы и рассмотреть уже сложившиеся способы донесения информации.

1. Введение в табличное программирование контроллеров

1.1. Почему таблица?

Многообразие способов подачи информации, воспринимаемой человеком, несколько усложняет выбор такого метода, который мог бы оптимально подойти для визуального отображения текущего состояния системы управления оборудованием. Ведь необходимо не только информировать пользователя о контролируемом процессе и его критических параметрах, но и показывать состояние входов и выходов контроллеров, их назначение и алгоритмы формирования выходных данных.

Можно сузить круг поиска и рассматривать наиболее близкие пользователю способы подачи информации. Обычно специалист в области автоматизации – это человек с техническим образованием, привыкший работать на компьютере, понимающий основы булевой алгебры, разбирающийся в базовых алгоритмах. Обучение профессии и последующая деятельность такого специалиста постоянно тренируют его в быстром восприятии и анализе различных способов представления информации: в виде графиков, схем, таблиц, диаграмм, блок-схем, списков, текстов, чертежей и так далее. И здесь наступает момент выбора одного или нескольких из них. Все они имеют свои плюсы и минусы и могут быть адаптированы для решения стоящей перед нами задачи. При рассмотрении наиболее подходящих форм предоставления информации отбиралась та, которая позволяет объединить в себе максимальное количество необходимых свойств и не прибегать к дополнительному использованию других форм. Конечно, немалое влияние на выбор оказали предпочтения и опыт автора.

С появлением персональных компьютеров появилась возможность интерактивного анализа данных. Вместо пакетной обработки, когда между изменениями в программе или в данных и получением ответа проходили часы или дни, результат становится доступен практически сразу после внесения изменений. Раньше перед автором, например, стояла задача обработки рентгеновских спектров, получаемых при анализе содержания полезных элементов в руде. Для этого была написана специальная программа. Применение персонального компьютера позволило сохранять большое количество спектров, представляющих собой массивы, размерность которых соответствовала количеству каналов спектрометра, а значение элемента массива – интенсивности излучения. Программы электронных таблиц еще не были распространены, но в научной литературе обсуждались их концепция и ожидаемая будущая популярность. Понимание того, что, используя электронную таблицу, можно упростить обработку спектров, их сортировку и хранение, а также просто и наглядно решить множество вопросов, возникающих при определении состава проб, усиливало ожидание появления такого программного продукта.

Появление Microsoft Excel версии 3.0 и выше отодвинуло существовавшие на то время программы электронных таблиц других производителей на задний план. Хотя необходимо отметить, что электронная таблица Quattro Pro 9, входящая в Corel Word Perfect Office 2000, по своим возможностям не уступала аналогичной версии Microsoft Excel, но к этому времени MS Excel фактически стал стандартом. Особенно порадовала функция заморозки части таблицы, как по вертикали, так и по горизонтали – это позволило работать с довольно большими таблицами, используя замороженную часть как многострочный заголовок с возможностью видеть большое количество вычисляемых параметров. К примеру, таблица прихода и расхода комплектующих в MS Excel была сделана за пару часов и учитывала жизненный цикл каждой партии товара. Недостаток таких решений, состоящий в невысокой защищенности данных от случайных изменений, с лихвой покрывался скоростью получения интересующей информации и ее наглядностью.

Вообще материал, представленный в виде таблицы, легко воспринимается и анализируется человеком. Горизонтальные и вертикальные связи не затрудняют восприятие, а наоборот, облегчают его. Достаточно беглого взгляда на товарный ценник, составленный в виде таблицы, чтобы понять, сколько представлено товарных позиций и какой у них диапазон цен. Мы непрерывно тренируемся в скоростном восприятии информации, представленной в виде таблиц. Календари, расписания, товарные чеки, окно с файлами на экране компьютера – не что иное, как таблицы, отформатированные особым образом. Даже арифметические вычисления в столбик в тетрадке в клеточку прививают нам способность быстрого анализа табличных данных. Остается вопрос, как применить эту замечательную способность человека к решению рассматриваемой задачи – программированию контроллера, управляющего оборудованием.

Для решения большинства проблем, связанных с отображением внутреннего состояния управляющей техническим объектом программы, предлагается выводить ее текущие параметры в виде специальной таблицы на экран монитора или сенсорного дисплея удобного размера. Таблица с внутренним состоянием контроллера может находиться в одной из закладок монитора, на который в обычном режиме выводится информация о контролируемом процессе или другие необходимые данные. Специалисту, программирующему контроллер, не нужно создавать таблицу и организовывать отображение данных, таблица и является программой. Кроме данных в ее ячейках, нет никаких дополнительных блоков или файлов. Она же, по сути, и графический интерфейс между машиной и человеком. В ней мы видим состояние всех переменных. От программиста скрыт только код, пересчитывающий данные в ячейках. И самое главное, таблица является средством разработки программы контроллера. Отпадает необходимость в сложной и дорогостоящей среде для написания и отладки программ, загружаемых в контроллеры.

Так как отсутствует многоуровневое меню, с помощью которого можно изменять параметры, и на экран выводится одна-единственная таблица, отображающая весь процесс, то многократно сокращается время обучения программированию контроллеров. Может сложиться впечатление, что такая таблица будет иметь тысячи строк и столбцов, но это на самом деле далеко не так. Например, программа управления портальным краном, имеющим две лебедки, стреловой, поворотный механизмы и систему передвижения, содержит 180 строк и 30 столбцов. Простые программы управления небольшими объектами часто не нуждаются в прокрутке строк или столбцов, помещаясь на экране целиком.

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

1.2. Основы табличного программирования

Для начала рассмотрим таблицу, показанную на рис. 1. Нумерованные строки таблицы отвечают за входы контроллера, а нумерованные столбцы – за выходы. Состояние каждого входа контроллера описывается входной переменной, которая получает значение, равное логическому уровню на соответствующем ей входе. А логические уровни на выходах контроллера получают значения своих выходных переменных. Состояние каждой выходной переменной будем определять как логическое И в столбце под ней. Чтобы задать зависимость выходной переменной от нескольких входных переменных, продублируем значения входных переменных в ячейки под выходной переменной.

В приведенном примере состояние выходной переменной 2 будет равно логическому И входных переменных 1 и 4. Так как результат логического И равен единице, то на выходном контакте 12 будет высокий логический уровень.

Рис. 1. Пример таблицы

Чтобы таблица стала программой, внесем в нее некоторые изменения. Ячейки в теле таблицы, участвующие в расчете выходных значений, будем называть активными ячейками. Для их обозначения используем символ &, который в электронике и программировании обычно является символом битовой операции «логическое И». Чтобы увеличить наглядность таблицы, активные ячейки, состояние которых равно нолю, выделим синим цветом, а ячейки, состояние которых равно единице, – зеленым. Таким же образом обозначим результат логического И по столбцу. Простая табличная программа представлена на рис. 2.

Рис. 2. Пример простой табличной программы

Пересчет таблицы выполняется следующим образом. Сначала идет обработка строк сверху вниз. Значение в каждой строке определяется входной переменной. В данном случае оно соответствует логическому уровню на соответствующем входе контроллера. При наличии в строке активных ячеек всем им присваивается полученное значение. По окончании перебора строк вычисляются значения выходных переменных – как логическое И по ячейкам столбца под каждой выходной переменой. В этом виде данные в таблице сложно назвать программой, однако под определение программы по ГОСТ 19.781–90[2] – «данные, предназначенные для управления конкретными компонентами системы обработки информации в целях реализации определенного алгоритма» – она подходит.

Чтобы написать или создать программу, в такой таблице сначала нужно заполнить первый столбец именами входных переменных или комментариями к ним и указать соответствующие номера входных контактов контроллера. Затем заполнить верхнюю строку-заголовок именами выходных переменных, также добавив номера контактов, соответствующие выходам контроллера. Теперь остается ввести в ячейки, которые будут участвовать в формировании выходных значений, символ &. В принципе все, программа написана.

В результате поисков удобного формата таблицы, который бы легко воспринимался специалистом, не писавшим программу, из всех возможных операций в столбце было оставлено только логическое И. Это сделано для удобства быстрого анализа состояния программы в таблице. Если в столбце хоть одна активная ячейка принимает значение ноль, то результат тоже будет ноль. Если все активные ячейки столбца будут равны единице, то выходная переменная над столбцом также будет равна единице. Выделение синим цветом ячеек, находящихся в состоянии «Ноль», и зеленым цветом ячеек в состоянии «Единица» помогает увидеть всю картину целиком, быстро найти ячейки, цвет которых не соответствует ожиданиям.

1.3. Триггерные ячейки

Чтобы зафиксировать однократное появление сигнала в логических цепях, используются триггеры. Базовым видом триггеров является асинхронный RS-триггер, состояние выхода которого меняется в зависимости от логических уровней на его входах, обозначаемых буквами R (Reset) и S (Set). Для установки на выходе RS-триггера единицы на вход S подают логическую единицу, а для сброса выхода в ноль логическую единицу подают на вход R.

Добавим в табличную программу возможность фиксировать однократное появление сигнала. С этой целью в каждом столбце создадим свой RS-триггер с одним выходом и произвольным количеством входов. Ячейки, реализующие триггерные операции в программе, будем называть триггерными. Табличная программа, использующая триггерные ячейки, представлена на рис. 3.

Рис. 3. Пример табличной программы, использующей триггерные ячейки

В заголовок таблицы добавлена строка RS. Каждая ячейка этой строки является выходом RS-триггера столбца, входы которого находятся в ячейках под ним. Чтобы управлять этим выходом, в столбец могут быть добавлены ячейки, изменяющие состояние RS-триггера. Ячейки, использующиеся для сброса в ноль, будем обозначать символом R, а для установки в единицу – символом S. Ячейки R и S будем называть активными триггерными ячейками. Выберем этим ячейкам следующее цветовое обозначение: серый для состояния «Ноль» и пурпурный для состояния «Единица». Ячейки в строке RS хоть и являются триггерными, но обозначены символом &, так как они наравне с другими активными ячейками будут участвовать в логическом И по столбцу.

Начальное значение ячеек в строке RS равно единице. Это сделано для того, чтобы при отсутствии в столбце активных триггерных ячеек R и S ячейка RS не блокировала нулем результат логического И по столбцу. Выход триггера столбца, которым является ячейка RS, управляется следующим образом. Если в столбце ячейка R принимает значение «Единица», то значение ячейки RS в заголовке сбрасывается в ноль. Если же в столбце ячейка S принимает значение «Единица», то значение ячейки RS устанавливается в единицу. При возвращении состояния ячейки R или S в ноль ячейка RS не меняет свое значение. Происходит «защелкивание». Так как внутренний интерпретатор проходит по таблице сверху вниз, то при многократном применении в столбце триггерных ячеек значение ячейки RS будет определяться нижней триггерной ячейкой. После учета состояния всех ячеек R и S столбца значение ячейки RS участвует в операции «логическое И» наравне с ячейками столбца, обозначенными символом &.

1.4. Логические операции над входными переменными

Сигналы состояний устройств, такие как «Готовность», «Ожидание», «Авария», могут быть сформированы с помощью логических операций над входными переменными. Это не только расширяет функционал таблицы, но и уменьшает количество активных ячеек. В логическом И по столбцу теперь могут участвовать не значения входных переменных, а сигналы состояний механизмов и систем. Вместо использования нескольких активных ячеек, отражающих состояние датчиков какого-либо устройства, будет нужна всего лишь одна активная ячейка с сигналом готовности этого устройства. Такой подход упрощает программу и, самое главное, улучшает ее читаемость.

Добавим в таблицу столбцы, необходимые для выполнения операций над входными значениями. Чтобы улучшить читаемость программы, немного изменим внешний вид таблицы. Вставим дополнительные строки, которые будут разделять программу на блоки, а комментарии в строках, имеющих активные ячейки, выделим светло-серым фоном. Фон в остальных ячейках оставим белым. Табличная программа с внесенными изменениями показана на рис. 4.

Рис. 4. Табличная программа с логическими операциями над входными переменными

Сначала рассмотрим возможность инвертирования входных логических сигналов для дальнейшего их использования в программе. Одни сигналы, поступающие на вход контроллера, могут приходить с датчиков, имеющих нормально открытый контакт (НО), и при срабатывании такого датчика на входе контроллера будет уровень, соответствующий единице. Другие датчики могут иметь нормально замкнутый контакт (НЗ), и при их срабатывании на входе контроллера появится ноль. Реализуемый в программе алгоритм может потребовать инвертированных входных сигналов. Если инверсии не требуется, запишем в ячейку операции знак «=». Чтобы инвертировать входное значение, в ячейку операции запишем слово NOT. В строке 10 таблицы на рис. 4 значение переменной b1 сначала инвертируется, а потом участвует в логической операции «исключающее ИЛИ».

Далее рассмотрим применение основных логических операций – «И», «ИЛИ», «исключающее ИЛИ» – для обработки входных переменных перед присвоением результата активным ячейкам таблицы. Так как операциям «И», «ИЛИ», «исключающее ИЛИ» требуется не менее двух аргументов, то две строки будут формировать аргументы, а результат поместим в третью строку. Конструкция будет напоминать арифметическое действие в столбик. Многострочные логические операции производятся над данными в столбце «Результат», и в этом же столбце записывается ответ. Расположение в одном столбце операндов и результата операции позволяет использовать полученный результат в качестве одного из операндов для следующей операции. На рис. 4 в ячейке «Результат» строки 4 будет ответ на логическое И содержимого двух ячеек, расположенных выше. Аналогично – в строке 8 для операции логическое «ИЛИ» и в строке 12 для операции «исключающее ИЛИ». В обычном для текстовых языков программирования виде это будет выглядеть следующим образом:

– строка 4: b3 = b1 AND b2 // 0 AND 1 = 0;

– строка 8: b4 = b1 OR b2 // 0 OR 1 = 1;

– строка 12: b5 = (NOT b1) XOR b2 // 1 XOR 1 = 0.

1.5. Инверсия выходных переменных

Иногда бывает необходимо, чтобы один из выходных сигналов контроллера был инвертирован – например, если в схеме устройства используется сигнал, состояние которого должно быть равным нолю, когда результат логического И по столбцу дает единицу. Чтобы реализовать такую возможность, дополним заголовок таблицы двумя строками: «Операция» и «Результат» (рис. 5).

Рис. 5. Табличная программа с логическими операциями над входными и выходными переменными

Выходным переменным, которым не требуется инверсия, в ячейку «Операция» запишем «=», а переменным, значение которых нужно инвертировать, запишем NOT. В приведенном на рис. 5 примере выходной переменной 3 присваивается инвертированное значение логического И по столбцу 3 с помощью операции NOT.

1.6. Таймеры

Управление оборудованием часто требует жестких временных рамок. Иногда нужна задержка между последовательным включением механизмов или систем, иногда наоборот – между последовательным их выключением. Наиболее ответственные операции должны выполняться за определенное время, и если этого не происходит, то оператору выдается предупреждение или происходит остановка процесса. Для формирования временных интервалов в программах контроллеров используются различные таймеры. Наиболее распространенные – таймер с задержкой на включение TON (timer on delay), таймер с задержкой на выключение TOF (timer off delay), таймер, формирующий импульс заданной длительности, TP (timer pulse). Рассмотрим алгоритм работы каждого из них.

В исходном состоянии на выходе таймера с задержкой на включение TON будет ноль (рис. 6). При переходе сигнала на его входе из ноля в единицу, то есть по переднему фронту сигнала, запускается обратный отсчет времени, начиная со значения, предустановленного в параметрах таймера.

Рис. 6. Временная диаграмма таймера с задержкой на включение TON

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

У таймера с задержкой на выключение TOF в исходном состоянии на выходе будет ноль (рис. 7). При переходе входного сигнала из ноля в единицу на выходе таймера будет единица без какой-либо задержки.

Рис. 7. Временная диаграмма таймера с задержкой на выключение TOF

А при переходе сигнала на его входе из единицы в ноль, то есть по заднему фронту сигнала, запускается обратный отсчет времени, начиная со значения, предустановленного в параметрах таймера. Установившийся на входе таймера ноль появится на выходе не сразу, а через заданное время – при достижении счетчиком нулевого значения. Если входной сигнал станет единицей до истечения предустановленного времени, то обратный отсчет прекратится, таймер перейдет в начальное состояние и на выходе останется единица.

В исходном состоянии на выходе импульсного таймера TP будет ноль (рис. 8). При переходе сигнала на его входе из ноля в единицу, то есть по переднему фронту сигнала, на выходе таймера будет единица без какой-либо задержки. Сразу же запускается обратный отсчет времени, начиная со значения, предустановленного в параметрах таймера. При достижении счетчиком нулевого значения на выходе таймера устанавливается ноль. Таким образом, по переднему фронту будет сформирован импульс заданной длительности. Возвращение входного сигнала в нулевое состояние до истечения заданного времени не повлияет на формирование импульса. Если входной сигнал снова станет единицей и будет сформирован передний фронт, то таймер будет перезапущен и отсчет начнется заново.

Рис. 8. Временная диаграмма таймера, формирующего импульс заданной длительности, TP

Чтобы при необходимости в программе можно было формировать временные интервалы, добавим в таблицу три столбца. Первый соответствует типу используемого таймера, второй – установленному времени, третий – текущему состоянию внутреннего счетчика таймера. Дополнительно сократим названия колонок и отформатируем таблицу. Табличная программа с внесенными изменениями представлена на рис. 9.

Рис. 9. Пример использования таймеров

Битовый результат операции сначала поступает на вход таймера, выходное значение которого будет присваиваться активным ячейкам строки. Если тип таймера не указан, то результат логической операции записывается в активные ячейки без задержки. Если результат операции не используется в активных ячейках строки, то ячейка этой строки в столбце «Знач.» остается пустой. Это сделано для того, чтобы в столбце «Знач.» отображались только те значения, которые принимают участие в формировании результата по столбцу. В приведенной на рис. 9 таблице используются три таймера: таймер с задержкой на включение TON, таймер с задержкой на выключение TOF, таймер, формирующий импульс, TP.

Теперь результат логической операции над входными переменными записывается в ячейки столбца «Резул.», а логический уровень выхода таймера – в ячейки столбца с названием «Знач.». Тип применяемого в строке таймера указывается в столбце «Таймер». Время работы таймера записывается в миллисекундах в столбце «Устан.». При обратном отсчете времени текущее состояние внутреннего счетчика таймера будет выводиться в ячейку «Текущ.». Пример отображения обратного отсчета показан в строке 12 (рис. 9).

Установленная в строке 12 длительность импульса равна 2000 миллисекундам, или 2 секундам, до окончания импульса остается 1610 миллисекунд, или 1,61 секунды. По истечении этого времени значение в столбце «Знач.» строки 12 перейдет из единицы в ноль. В строках 4 и 8 также используются таймеры, однако их текущее значение времени не отображается, следовательно, в данный момент таймеры в этих строках неактивны.

Можно заметить, что заголовок «Входной контакт» заменен на «Адрес», но цифры в столбце остались те же. Это сделано для того, чтобы максимально приблизить табличную программу к электрической схеме. Обычно при программировании контроллера с помощью графических языков переменным присваиваются адреса с точностью до бита, хотя в среде программирования контроллера каждой переменной соответствует определенная структура размером в несколько десятков байтов. Назначение адресов с точностью до бита – не более чем исторически сложившаяся практика. В табличной программе адрес входной или выходной переменной может соответствовать порядковому номеру контакта на разъеме контроллера. Тип переменной будет определяться ее адресом. К примеру, первые десять адресов будут принадлежать входным битовым переменным, а адреса с одиннадцатого по двадцатый – выходным.

2. Табличное программирование. Пример разработки программы

2.1. Простая программа управления шлагбаумом

Рассмотрим работу табличной программы на конкретном примере управления простым шлагбаумом с электроприводом. Сначала опишем алгоритм работы и основное оборудование такого шлагбаума.

Управление шлагбаумом производится нажимным двухкнопочным выключателем с фиксацией, возврат одной кнопки которого происходит при нажатии другой кнопки. Введем правило: шлагбаум может быть либо открыт, либо закрыт, остановку стрелы шлагбаума в промежуточном состоянии считаем аварийной. Если нажата кнопка «Открыть», то шлагбаум должен открыться, и мы сможем нажать только кнопку «Закрыть», так как кнопка «Открыть» зафиксирована в нажатом состоянии. Верхний и нижний концевые выключатели при срабатывании должны останавливать двигатель.

Так как работа шлагбаума способна нанести вред людям или имуществу, то необходимо предусмотреть в схеме аварийную кнопку и главный контактор, отключающий силовое питание при нажатии на нее. Аварийная кнопка должна иметь дополнительный контакт для сигнализации о том, что она находится в нажатом состоянии. Не углубляясь в схему реверсивного управления двигателем, поднимающего и опускающего стрелу шлагбаума, будем считать, что два выхода контроллера, обозначенные как «Вверх» и «Вниз», будут управлять движением стрелы.

Опишем алгоритм управления шлагбаумом. При нажатии на кнопку «Открыть» на выходе контроллера «Вверх» появляется единица и держится до срабатывания верхнего концевого выключателя. Аналогично, если будет нажата кнопка «Закрыть», на выходе контроллера «Вниз» появляется единица и держится до срабатывания нижнего концевого выключателя. Если во время опускания стрелы шлагбаума оператор увидит помеху, то он может кнопкой «Открыть» переключить двигатель на подъем стрелы. При нештатных ситуациях оператор нажимает аварийную кнопку.

Рассмотрим работу программы при переводе стрелы шлагбаума из открытого состояния в закрытое. Для открытого состояния шлагбаума управляющая программа представлена на рис. 10.

Рис. 10. Табличная программа управления шлагбаумом, соответствующая его открытому состоянию

Можно увидеть, что питание включено, аварий нет, шлагбаум открыт, команды «Вверх» и «Вниз» равны нолю. По тому, что верхний концевой выключатель разомкнут, можно определить, что стрела шлагбаума находится в верхнем конечном положении. Нажатие на кнопку «Закрыть» выключит кнопку «Открыть», активные ячейки в таблице под командой «Вниз» получат состояние «Единица» и станут отображаться зеленым цветом. Логическое И по столбцу 2 даст в результате единицу. На выходном контакте 12 появится напряжение, соответствующее логической единице, и двигатель будет включен для опускания стрелы шлагбаума. Начнется движение стрелы вниз (рис. 11).

Рис. 11. Табличная программа управления шлагбаумом в момент нажатия кнопки «Закрыть»

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

Рис. 12. Табличная программа управления шлагбаумом в момент движения стрелы вниз

Как только стрела достигнет положения «Закрыто», сработает нижний концевой выключатель. Соответствующая ему ячейка в столбце под командой «Вниз» получит значение ноль, результатом логического И по этому столбцу станет ноль, и двигатель будет отключен. Таблица покажет состояние «Закрыто» (рис. 13).

Рис. 13. Табличная программа управления шлагбаумом, соответствующая его закрытому состоянию

На простом примере несложно увидеть, что благодаря табличному программированию прямо во время выполнения программы можно наблюдать состояния входов, выходов и цепей формирования выходных сигналов. Нет скрытых модулей обработки, полностью понятен алгоритм управления устройством. Во многих случаях нет необходимости в разработке графического интерфейса.

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

Пока может показаться, что табличное программирование пригодно для простых или даже примитивных алгоритмов, но это не так. Данный упрощенный вариант программы имеет много недостатков и непригоден для управления реальным объектом. В таком виде он представлен для демонстрации основной идеи применения табличного программирования. Далее будут рассмотрены более сложные примеры табличных программ.

2.2. Использование триггерных ячеек

Одним из недостатков первой версии программы управления шлагбаумом является жесткая зависимость пуска приводного двигателя от состояния концевых выключателей. Если из-за раскачки стрелы шлагбаума на ветру или намокания контактов произойдет замыкание концевого выключателя, то это может привести к неконтролируемому включению двигателя стрелы, так как одна из кнопок, «Открыть» или «Закрыть», уже нажата. Попробуем повысить надежность системы управления шлагбаумом. Изменим способ подачи команд «открыть» и «закрыть». Вместо двухкнопочного выключателя с фиксацией применим обычные нажимные кнопки. Это более надежное и удобное решение. Также добавим кнопку «Стоп», при нажатии на которую состояние выходов 11 и 12, управляющих движением стрелы шлагбаума, становится равным нолю. Хотя нажатие на кнопку «Стоп» остановит движение, ею нельзя заменить аварийную кнопку. Последняя должна отключить систему вне зависимости от работы контроллера.

Необходимо отметить, что контакты кнопок «Открыть» и «Закрыть» нормально открытые, а контакт кнопки «Стоп» нормально замкнутый. Это сделано для того, чтобы при неисправности кнопки «Стоп» или обрыве провода, соединяющего ее с контроллером, заблокировать команды открытия и закрытия. Кнопка «Стоп» наряду с аварийной кнопкой является частью системы безопасности, при неисправности которой запрещается работа механизмов.

Чтобы реализовать алгоритм управления с помощью кнопок, необходимо ввести в программу триггерные ячейки. Кнопка управления обычно имеет нормально открытый контакт, и при ее нажатии на входе контроллера появится единица. А концевой выключатель обычно имеет нормально замкнутый контакт, и при его срабатывании на входе контроллера будет уровень, соответствующий нолю. Но реализуемый в программе алгоритм требует, чтобы срабатывание конечного выключателя также давало единицу. Поэтому необходимо инвертировать некоторые входные логические сигналы. Для инверсии сигналов от конечных выключателей, кнопки «Стоп» и главного контактора в ячейку операции запишем слово NOT.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

Примечания

1

ГОСТ Р МЭК 61131-3-2016 «Контроллеры программируемые. Часть 3. Языки программирования».

Вернуться

2

ГОСТ 19.781-90 «Обеспечение систем обработки информации программное. Термины и определения».

Вернуться