Структура программного кода и практическое использование блока «Функциональный генератор» при программировании в среде CoDeSys

Структура программного кода и практическое использование блока «Функциональный генератор» при программировании в среде CoDeSys

Поздняков, А. Г. Структура программного кода и практическое использование блока «Функциональный генератор» при программировании в среде CoDeSys / А. Г. Поздняков, В. Х. Аль-Тибби. — Текст : непосредственный // Молодой ученый. — 2014. — № 5 (64). — С. 88-93. — URL: https://moluch.ru/archive/64/10266/ (дата обращения: 29.06.2022).

Введение, постановка проблемы. Современное производство предъявляет все более высокие требования к инструментам управления, контроля и автоматики. Персональные компьютеры применяются в настоящее время на всех уровнях промышленной автоматизации. Для большинства задач автоматизации применение промышленных ПК не оправдано экономически и технически сложно. Решать задачи автоматизации максимально просто, в кратчайшие сроки и с минимальным привлечением специалистов в области прикладного и системного программного обеспечения позволяют программируемые логические контроллеры (ПЛК). ПЛК — это программно управляемый дискретный автомат, имеющий некоторое множество вхо­дов, подключенных посредством датчиков к объекту управления, и множество выходов, подключенных к исполнительным устройствам. ПЛК контролирует состояния входов и вырабатывает опре­деленные последовательности программно заданных действий, от­ражающихся в изменении выходов. ПЛК предназначен для работы в режиме реального времени в условиях промышленной среды и должен быть доступен для про­граммирования неспециалистом в области информатики [1].

Программирование большинства современных ПЛК осуществляется на языках стандарта международной электротехнической комиссии (МЭК) 61131 [2]. Стандарт содержит описание аппаратных средств, требования к мон­тажу, тестированию, документации и связи по промышленной сети. Часть 3 стандарта описывает требования к языкам программирования, всего таких языков описывается пять: IL – ассемблероподобный текстовый язык; LD – графический язык релейно-контактных схем; ST – паскалеподобный текстовый язык; FBD – графический язык функциональных блоков; SFC – графический язык последовательных функциональных схем. Для программиро­вания ПЛК не требуется знание всех пяти языков МЭК 61131-3, но выбор языка существенно влияет на способ реализации задачи.

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

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

3S CoDeSys [3] это одна из самых полных и удачно реализованных сред программирования МЭК 61131-3. CoDeSys обладает набором открытых функциональных библиотек, предназначенных для решения широкого круга наиболее распространенных задач автоматизации. Одна из таких библиотек - Util.lib содержит дополнительный набор различных функций и функциональных блоков, применяемых регуляторов, генераторов и преобразований аналоговых сигналов. Рассмотрим работу функционального блока (ФБ) GEN, входящего в состав данной библиотеки среды CoDeSys v2.3. Данный блок предназначен для генерации периодически изменяющихся сигналов различных предустановленных форм: треугольный (двуполярный и однополярный), двуполярный пилообразный (нарастающий и ниспадающий), меандр, синусоида и косинусоида.

Описание принципа работы функционального блока. Библиотека Util.lib имеет открытый программный код. Для доступа к коду функциональных блоков, входящих в библиотеку необходимо ее открыть из меню «Открыть» вновь созданного проекта. Листинг программы с авторскими комментариями и описанием используемых переменных представлен ниже.

(*функциональный блок для генерации некоторых периодических функций*)

FUNCTION_BLOCK GEN

(*Раздел описания переменных*)

VAR_INPUT (*входной интерфейс блока*)

MODE: GEN_MODE;

(*определение типа генерируемого сигнала:

TRIANGLE - сигнал треугольной формы от отрицательного значения амплитуды до положительного значения амплитуды сигнала.

TRIANGLE_POS - сигнал треугольной формы от нуля до положительного значения амплитуды сигнала.

SAWTOOTH_RISE - пилообразный сигнал увеличивающийся от отрицательного значения амплитуды до положительного значения амплитуды сигнала.

SAWTOOTH_FALL - пилообразный сигнал увеличивающийся от положительного значения амплитуды до отрицательного значения амплитуды.

RECTANGLE - сигнал прямоугольной формы от отрицательного значения амплитуды до положительного значения амплитуды сигнала.

SINUS - синусоидальный сигнал.

COSINUS - косинусоидальный сигнал. *)

BASE: BOOL;(* FALSE: период определяется как количество вызовов функционального блока; TRUE: период определяется заданным временем *)

PERIOD: TIME:=T#1s; (*время периода сигнала, учитывается только, если BASE=TRUE*)

CYCLES: INT:=1000; (*число вызовов блока за период, учитывается только, если BASE=FALSE *)

AMPLITUDE: INT; (*амплитуда сигнала*)

RESET: BOOL; (*обнуление выхода и остановка генерации сигнала*)

VAR_OUTPUT (*выходной интерфейс блока*)

OUT: INT; (*переменная генерируемого сигнала*)

VAR (*локальные переменные функционального блока*)

CET: DINT; (*переменная, используемая для отсчета времени генерируемого сигнала (шаг дискретизации по времени)*)

PER: DINT; (*переменная, определяющая длительность периода генерируемого сигнала *)

COUNTER: INT; (*счетчик вызовов блока*)

CLOCK: TON; (*экземпляр таймера TON*)

help: REAL; (*промежуточная переменная для вычисления значения синусоидального и косинусоидального сигналов*)

📎📎📎📎📎📎📎📎📎📎