Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование контроллеров для АСУ и мехатронных систем. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
ются соответствующие переменные. Использование выходных переменных функционального блока происходит двумя альтернативными способами.
На рисунке 2.26 приведены примеры вызова и использования на языке CFC функционального блока Arifmetica.

2.7. ТИПЫ ДАННЫХ И ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ В CODESYS

Каждая переменная в проекте CoDeSys должна быть объявлена. Объявле­ние переменной может быть выполнено несколькими способами:
− непосредственно в разделе объявлений POU;
− через окно «Auto declare» (автообъявление);
− в GVL-редакторе (редакторе глобальных переменных).
Синтаксис объявления переменной:
<Идентификатор> [AT <адрес>] : <Тип> [ :=<начальное значение> ]
То, что заключено в скобки [ ], вводить не обязательно.
<Идентификатор> – имя переменной. Он может содержать латинские буквы, цифры, символ подчёркивания. При написании имени переменной сле­дует учитывать следующие правила:
− имя переменной должно начинаться с латинской буквы;
− CoDeSys нечувствителен к регистру, т.е. переменная VAR_1 и var_1 –
одна и та же переменная;
− в имени переменной не может идти подряд двух символов подчёрки-
вания.
<Тип> – тип объявляемой переменной. При программировании можно использовать стандартные и пользовательские типы данных, а также экземпля­ры функциональных блоков. Каждому идентификатору задаётся тип данных, который определяет, сколько памяти будет выделено для него и значения како­го типа он будет хранить.
CoDeSys поддерживает все типы данных, предусмотренные стандартом МЭК61131-3: BOOL, целочисленные типы данных, REAL/LREAL, STRING, Время и дата.
31
Тип данных BOOL – логический тип данных. Переменная может прини­мать два значения: TRUE (логическая 1) или FALSE (логический 0). Занимает 8 бит памяти (1 байт).
Целочисленные типы данных приведены в табл. 2.1. Друг от друга они отличаются различным диапазоном сохраняемых данных и объёмом занимае­мой памяти.
Типы REAL/LREAL – Данные в формате с плавающей запятой; исполь­зуются для сохранения рациональных чисел. Для типа REAL необходимо 4 байта памяти, для LREAL – 8 байт.
Диапазон значений REAL: от 1.175494351e–38 до 3.402823466e+38.
Диапазон значений LREAL: от 2.2250738585072014e–308 до
1.7976931348623158e+308.
Строковый тип STRING представляет строку символов. Максимальный размер строки определяет количество резервируемой памяти и указывается при объявлении переменной. Размер задаётся в круглых или квадратных скобках. Если размер не указан, принимается размер по умолчанию – 80 символов.
2.1. Целочисленные типы данных
Тип Диапазон Размер памяти
BYTE 0…255 1 байт WORD 0…65 535 2 байта DWORD 0…4 294 967 295 4 байта LWORD 0…2
64–1
8 байт SINT 0…127 1 байт USINT 0…255 1 байт INT 32 768…32 767 2 байта UINT 0…65 535 2 байта DINT –2 147 483 648…2 147 483 647 4 байта UDINT 0…4 294 967 295 4 байта LINT –263…2 ULINT 0…2
32
63–1
8 байт
64–1
8 байт
Пример объявления строки размером до 35 символов:
str:STRING(35):='This is a String';
Таймерные типы данных включают следующие типы: TIME, TIME_OF_ DAY (TOD), DATE и DATE_AND_TIME (DT). Эти типы данных представля­ются в памяти контроллера как DWORD.
TIME, TIME_OF_DAY (или TOD) содержит время суток начиная с 0 ча­сов (с точностью до миллисекунд).
DATE_AND_TIME (или DT) содержит время в секундах начиная с 0 ча-
сов 1 января 1970 года.
Константы типа TIME обычно используются при работе со стандартными функциями таймеров.
Синтаксис:
t#<объявление времени>
Например,
TIME1 := T#30ms; – таймерной переменной присваивается значение 30 миллисекунд.
TVar1 := T#1m30s100ms; ; – таймерной переменной присваивается значе-
ние 1 минуты 30 секунд 100 миллисекунд.
Объявляемые переменные могут быть различных видов: локальные, гло­бальные, входные, выходные, переменные вида вход-выход, временные, стати­ческие, внешние, конфигурационные. Помимо этого, переменные могут иметь дополнительные атрибуты: RETAIN (сохраняемые переменные), PERSISTENT (постоянные переменные), CONSTANT (константы).
Локальные переменные – VAR – объявляются между ключевыми словами VAR и END_VAR. Их можно использовать только в том POU, в котором они
объявлены. Например,
33
Глобальная переменная – VAR_GLOBAL – переменная, область видения у которой весь проект. Глобальные переменные объявляются между ключевыми словами VAR_GLOBAL и END_VAR, например,
Для работы с глобальными переменными в проекте используются списки глобальных переменных. Добавить «GVL» можно с помощью команды «Add
Object».
Входные переменные – VAR_INPUT – переменные, которые передаются на вход POU (программы, функционального блока или функции) при его вызо­ве. Пример описания входной переменной POU:
Выходные переменные – VAR_OUTPUT – это переменные некоторого POU, через которые он передаёт данные в вызывающий его блок. Выходные
переменные POU объявляются между ключевыми словами VAR_OUTPUT и END_VAR, например,
Входные-выходные переменные – VAR_IN_OUT – переменные, которые POU может использовать и как входные, и как выходные. Объявляются эти пе­ременные между ключевыми словами VAR_IN_OUT и END_VAR, например,
34
Контрольные вопросы
1. Что такое таргет-файл контроллера?
2. Как осуществляется установка таргет-файлов?
3. Перечислите основные элементы интерфейса среды CoDeSys.
4. Что приводится в дереве проекта CoDeSys?
5. Что отображается в рабочей области проекта?
6. Какая информация приводится в строке состояния CoDeSys?
7. Как осуществляется запуск режима эмуляции в CoDeSys?
8. Перечислите основные элементы проекта CoDeSys.
9. Что такое POU?
10. В чём заключается отличие функции от функционального блока?
11. Перечислите элементарные типы данных в CoDeSys.
12. Как объявляются локальные, глобальные, входные и выходные пере-
менные POU?
35
Глава 3

РАЗРАБОТКА ПРОГРАММ В CODESYS НА ЯЗЫКЕ CFC

В 1993 году стандартом IEC 61131-3 (МЭК 61131-3) определено пять ос­новных языков (ST, SFC, FBD, LD, IL) для программирования логических кон­троллеров. Из них наиболее простым в изучении и удобным в работе является графический язык FBD.
Некоторые компании для облегчения программирования внедряют в свои программные продукты языки, не входящие в стандарт МЭК. Например, CoDeSys использует язык непрерывных функциональных схем (CFC) как вари­ант языка FBD. Язык удобен для прикладных специалистов, не имеющих спе­циальной подготовки в области информатики.
Принципиальное отличие CFC от FBD заключается в том, что в редакторе CFC размещать компоненты программы (функциональные и логические блоки) и задавать порядок их выполнения можно произвольным образом. Такие воз­можности позволяют легко реализовывать обратные связи, что удобно при раз­работке схем регулирования. При создании программ на CFC необходимо вручную выстраивать связи между элементами, в то время как на FBD соедине­ния выполняются автоматически.
В CODESYS V3.5 реализованы два подвида CFC: стандартный CFC и страничный CFC. Страничный тип редактора CFC удобен при создании проек­тов, содержащих большое количество последовательно выполняющихся частей программы. Постраничное размещение программы позволяет быстро переклю­чаться между её разделами, акцентировать внимание только на необходимых элементах, снижает риск построения ошибочных связей и делает проект интуи­тивно понятным. При работе программы страницы выполняются последова­тельно, а передача информации с одной страницы на другую осуществляется с помощью меток соединения.
Стандартный тип редактора CFC более популярен среди пользователей, так как обладает рядом преимуществ: наглядность представления кода (все блоки и связи между ними расположены на единой рабочей области),
36
не требуется переключения между страницами, что позволяет избежать лишних действий при написании кода.
Язык программирования CFC имеет свои преимущества и недостатки.
Преимущества CFC:
− явное представление обратных связей, при этом не требуется вспомо-
гательных переменных;
− порядок исполнения легко изменить путём изменения порядка вызова
блоков, поток обработки данных задаётся свободно;
− удобен для непрерывных процессов. Позволяет осуществлять свобод-
ное размещение блоков и соединений. Отлично подходит для общего представ­ления проекта.
Недостатки:
− соединения нужно выполнять вручную. Ввод программы занимает не-
сколько больше времени;
− последовательность исполнения может быть легко нарушена. Требу-
ется внимательность при написании программы, чтобы исключить нарушения последовательности обработки блоков.
Язык CFC является графическим языком программирования. Все графи­ческие элементы языка CFC представлены и доступны на панели инструментов CFC (рис. 3.1).
Функциональными графическими элементами языка CFC являются:
− – вход. При вставке элемента в рабочую область программы
отображается в виде . Надпись «???» можно заменить на переменную
Рис. 3.1. Панель инструментов CFC
37
или константу. Для выбора подходящего идентификатора можно использовать «Ассистент ввода»;
− – выход;
− – элемент. Элемент может представлять оператор, функцию,
функциональный блок или программу. Надпись «???» можно заменить на имя оператора, функции, функционального блока или программы. Для выбора од­ного из доступных объектов используется «Ассистент ввода». При вставке функционального блока над элементом появится ещё одна надпись «???». Её необходимо заменить на имя экземпляра функционального блока. Если су­ществующий элемент заменяется другим (изменяется введённое имя), и новый элемент содержит другое количество входных или выходных контактов, то они соответствующим образом будут автоматически добавлены или удалены. Пер­выми удаляются самые нижние контакты. Пример использования элементов «Input», «Output», «Box» приведён на рис. 3.2;
− – переход. Этот элемент указывает позицию, в которой долж-
но продолжаться выполнение программы. Эта позиция задаётся меткой. Имя метки вводится вместо «???»;
− – метка. Метка указывает на позицию, на которую осуществ-
ляется переход;
− – оператор возврата. Элементы «Jump», «Label», «Return» ис-
пользуются для алгоритмов ветвления (рис. 3.3);
− – компоновщик. Данный элемент используется при работе
со входом элемента типа «структура». Компоновщик показывает компоненты структуры и, таким образом, делает их доступными в CFC. Для этого необхо­димо дать компоновщику имя соответствующей структуры (вместо «???») и со­единить с элементом вместо использования элемента «input»;
38
Рис. 3.2. Пример использования элементов «Input», «Output», «Box»
Рис. 3.3. Пример использования элементов «Jump», «Label», «Return»
− – селектор. В отличие от компоновщика селектор использу-
ется при работе с выходом элемента типа структура. Селектор показывает ком­поненты структуры и, таким образом, делает их доступными в CFC. Для этого необходимо дать селектору имя соответствующей структуры (вместо «???» ) и соединить с элементом вместо использования элемента «output»;
− – комментарий. Этот элемент используется для добавления
комментариев в схему. Перейти на новую строку в комментарии можно с по­мощью <Ctrl> + <Enter>;
− – входной контакт. В зависимости от типа элемента, можно
вставить дополнительный вход. Для этого в цепи выберите элемент и перета­щите к нему элемент «Входной контакт»;
− – выходной контакт. В зависимости от типа элемента, мож-
но вставить дополнительный выход. Для этого в цепи выберите элемент и пере­тащите к нему элемент «Выходной контакт»;
− – метка соединения – источник.
− – метка соединения – сток. Графические элементы
«Connection Mark – Source» и «Connection Mark – Sink» позволяют убрать длинные линии и улучшить читабельность программы CFC (рис. 3.4).
Рис. 3.4. Пример использования элементов «Connection Mark – Source» и
«Connection Mark – Sink»
39
Пример: реализовать счётчик импульсов, который имеет следующий на- бор входных-выходных сигналов.
Имя переменной Тип Описание переменной
xIn_ Вход BOOL Счётный вход
xReset Вход BOOL Сброс счётчика
Count1_ Выход INT Выход счётчика импульсов
При приходе нового импульса (когда значение дискретной переменной xIn меняется с логического 0 на 1) значение счётчика увеличивается на 1.
При подаче сигнала логической 1 на вход сброса (переменная xReset) счётчик обнуляется.
40
Рис. 3.5. Код программы счётчика импульсов на языке CFC
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]