- •1 Краткое представление CoDeSys
- •1.1 Что такое CoDeSys
- •1.2 Представление о работе в CoDeSys
- •1.3 Состав базовой пользовательской документации по CoDeSys
- •2 Что есть что в CoDeSys
- •2.1 Компоненты проекта
- •2.2 Языки программирования
- •Список инструкций (IL)
- •Модификаторы и операторы IL
- •Структурированный текст (ST)
- •Язык последовательных функциональных схем (SFC)
- •Язык функциональных блоковых диаграмм (FBD)
- •Непрерывные функциональные схемы (CFC)
- •Язык релейных диаграмм (LD)
- •2.3 Отладка и онлайн функции
- •3 Пишем простой пример
- •3.1 Блок управления светофором
- •3.2 Визуализация примера
- •4 Работа в системе программирования CoDeSys
- •4.1 Главное окно
- •4.2 Опции проекта
- •4.3 Управление проектом
- •4.4 Управление объектами проекта
- •4.5 Основные функции редактирования
- •4.6 Основные функции Онлайн
- •4.7 Работа с окнами
- •4.8 Помощь
- •5 Редакторы CoDeSys
- •5.1 Общие элементы редакторов
- •5.2 Редактор раздела объявлений
- •Работа в редакторе объявлений
- •Редактор раздела объявлений в режиме Онлайн
- •Директивы компилятора
- •5.3 Текстовые редакторы
- •Работа в текстовых редакторах
- •Редактор языка IL
- •Редактор языка ST
- •5.4 Графические редакторы
- •Работа в графических редакторах
- •Редактор FBD
- •Редактор LD
- •Редактор SFC
- •Редактор CFC
- •6 Ресурсы
- •6.1 Обзор ресурсов
- •Глобальные переменные
- •Конфигурационные переменные
- •Файл комментариев переменных
- •6.3 Конфигурация тревог (Alarm Configuration)
- •Обзор
- •Общая информация и терминология
- •Классы тревог
- •Группы тревог
- •Запись тревог
- •'Дополнения' (Extras): 'Настройки' (Settings)
- •6.4 Менеджер библиотек (Library Manager)
- •6.5 Бортжурнал (Log)
- •6.6 Конфигуратор ПЛК (PLC Configuration)
- •Обзор
- •Работа в редакторе конфигуратора ПЛК
- •Общие параметры конфигурации ПЛК
- •Диалог специфической настройки параметров
- •Конфигурация модулей ввода/вывода
- •Конфигурация канала
- •Конфигурирование модулей Profibus
- •Конфигурирование CANopen-модулей
- •Конфигурирование ведомого CANopen-устройства (CANopen Slave)
- •Конфигурирование модулей DeviceNet
- •Конфигурация ПЛК в режиме Онлайн
- •Сканирование аппаратуры/ Состояние/ Диагностика ПЛК
- •6.7 Конфигуратор задач (Task Configuration)
- •Обзор
- •Работа в конфигураторе задач
- •Системные события
- •Конфигуратор задач в режиме онлайн
- •6.8 Менеджер просмотра (Watch and Recipe Manager)
- •Обзор
- •Менеджер просмотра в режиме оффлайн
- •Менеджер просмотра в режиме Онлайн
- •6.9 Цифровая трассировка (Sampling Trace)
- •Обзор
- •Конфигурация трассировки
- •Управление процессом трассировки
- •Отображение данных
- •‘Дополнения’ ‘Запись значений трассировки’ ('Extras' 'Save trace values')
- •6.10 Рабочая область (Workspace)
- •6.11 Менеджер параметров (Parameter Manager)
- •Обзор и подключение
- •Редактор менеджера параметров. Обзор
- •Типы списков параметров и их атрибуты
- •Управление списками параметров
- •Редактирование списка параметров
- •Менеджер параметров в режиме онлайн
- •Экспорт/импорт списков параметров
- •6.12 Настройки целевой платформы (Target Settings)
- •6.13 ПЛК-Браузер (PLC-Browser)
- •Общие сведения
- •Набор команд ПЛК-Браузера
- •Макрорасширения команд ПЛК-Браузера
- •Вспомогательные команды ПЛК-Браузера
- •6.14 Инструменты (Tools)
- •Свойства доступных инструментов (Object Properties)
- •Настройка команд инструментов
- •Часто задаваемые вопросы по инструментам
- •7.1 Что такое ENI?
- •7.2 Условия работы с ENI базой данных в проекте
- •7.3 Работа с ENI базой данных в проекте CoDeSys
- •7.4 Категории объектов в базе данных проекта
- •8 DDE интерфейс
- •8.1 DDE интерфейс CoDeSys
- •8.2 DDE обмен посредством GatewayDDE Server
- •9 Менеджер лицензирования CoDeSys
- •9.1 Обзор
- •9.2 Создание лицензированных библиотек в CoDeSys
- •10.1 Арифметические операторы
- •10.2 Битовые операторы
- •10.3 Операторы сдвига
- •10.4 Операторы выборки
- •10.5 Операторы сравнения
- •10.6 Адресные операторы
- •Вспомогательные функции
- •10.8 Оператор вызова
- •10.9 Явное преобразование типов
- •10.10 Математические функции
- •Приложение В: Операнды в CoDeSys
- •Константы
- •Переменные
- •Адреса
- •Функции в роли операндов
- •Приложение С: Типы данных CoDeSys
- •Элементарные типы данных
- •Пользовательские типы данных
- •Приложение D: Библиотеки CoDeSys
- •Стандартная библиотека Standard.lib
- •Строковые функции
- •Переключатели
- •Детекторы импульсов
- •Счетчики
- •Таймеры
- •Библиотека UTIL.LIB
- •BCD преобразования
- •Бит/байт функции
- •Дополнительные математические функции
- •Регуляторы
- •Генераторы сигналов
- •Преобразования аналоговых сигналов
- •Аналоговые компараторы
- •Библиотека AnalyzationNew.lib
- •Системные библиотеки CoDeSys
- •Приложение E: Краткий справочник по операторам и компонентам библиотек
- •Операторы CoDeSys:
- •Компоненты Standard.lib:
- •Компоненты Util.lib:
- •Приложение F: Командная строка / командный файл
- •Командная строка
- •Командный файл (cmdfile)
- •Приложение G: Сименс импорт.
- •Импорт из символьных файлов SEQ
- •Импорт из файла проекта S5
- •Конвертирование языка S5 в МЭК C 61131-3
- •Приложение H: Опции целевых систем
- •Системные опции целевых платформ (Target Platform)
- •Intel 386 совместимые
- •Motorola 68K
- •Infineon C16x
- •ARM и Power PC
- •MIPS
- •'Hitachi SH'
- •8051 совместимые
- •Infineon 'TriCore’
- •Опции распределения памяти (Memory Layout).
- •Опции общей категории (General)
- •Опции категории Сетевая функциональность
- •Опции категории Визуализация
- •Приложение I: Использование клавиатуры
- •Приложение J: Рекомендации по наименованию
- •Наименование идентификаторов
- •Идентификаторы переменных
- •Идентификаторы пользовательских типов (DUT)
- •Идентификаторы визуализаций
- •Приложение K: Ошибки и предупреждения компилятора
- •Предупреждения
- •Ошибки
2 Что есть что в CoDeSys
2.1 Компоненты проекта
Проект
Проект включает следующие объекты: POU, типы данных, визуализации, ресурсы, библиотеки. Каждый проект сохраняется в отдельном файле.
POU (Program Organization Unit)
К программным компонентам (POU) относятся функциональные блоки, функции и программы. Отдельные POU могут включать действия (подпрограммы).
Каждый программный компонент состоит из раздела объявлений и кода. Для написания всего кода POU используется только один из МЭК языков программирования (IL, ST, FBD, SFC, LD или CFC).
CoDeSys поддерживает все описанные стандартом МЭК компоненты. Для их использования достаточно включить в свой проект библиотеку standard.lib.
POU могут вызывать другие POU, но рекурсии недопустимы.
Функция
Функция – это POU, который возвращает только единственное значение (которое может состоять из нескольких элементов, если это битовое поле или структура). В текстовых языках функция вызывается как оператор и может входить в выражения.
При объявлении функции необходимо указать тип возвращаемого значения. Для этого после имени функции нужно написать двоеточие и тип. См. рекомендации по наименованию в приложении J.
Правильно объявленная функция выглядит следующим образом:
FUNCTION Fct: INT;
Имя функции используется как выходная переменная, которой присваивается результат вычислений.
Объявление функции должно начинаться с ключевого слова FUNCTION и заканчиваться ключевым словом END_FUNCTION. Вот пример функции, написанной на IL, которая использует три входных переменных и возвращает результат деления произведения первых двух на третью.
Пример функции, написанной на языке IL:
Что есть, что в CoDeSys
Вязыке ST вызов функции может присутствовать в выражениях как операнд.
ВSFC функция вызывается только из шага или перехода.
Примечание: Функция не имеет внутренней памяти, но CoDeSys допускает использование глобальных переменных в функциях. Это является отклонением от требований стандарта МЭК 61131-3, в соответствии с которым выходное значение функции должно зависеть исключительно от входных параметров. Т.е. функция с одними и теми же значениями входных параметров всегда должна возвращать одно и то же значение.
Пример вызова функции:
На IL:
LD |
7 |
Fct |
2,4 |
ST |
Result |
На ST:
Result : = Fct (7, 2, 4);
На FBD:
Внимание: объявление в функции RETAIN локальной переменной не приведет к желаемому результату. Не пытайтесь создать локальные энергонезависимые переменные в функциях!
Примечание: имена перечисленных ниже функций зарезервированы для описанных целей:
В проекте можно определить функцию с именем CheckBounds, которая используется для проверки выхода за границы массива (Подробнее см. описание арифметических функций в приложении).
С помощью функций: CheckDivByte, CheckDivWord, CheckDivDWord и CheckDivReal осуществляется кон-
троль деления на 0 (См. DIV).
Специализированные функции CheckRangeSigned и CheckRangeUnsigned контролируют границы диапазонов переменных (См. Типы данных).
Функциональный блок
Функциональный блок - это POU, который принимает и возвращает произвольное число значений. В отличие от функции функциональный блок не формирует возвращаемое значение.
Объявление функционального блока начинается с ключевого слова FUNCTION_BLOCK и заканчивается ключевым словом END_FUNCTION_BLOCK. См. рекомендации по наименованию в приложении J.
Ниже приведен пример функционального блока, написанного на IL, который имеет две входных и две выходных переменных. Значение выходной переменной MULERG равно произведению значений двух входных переменных, а значение VERGL определяется в результате сравнения значений входных переменных.
Пример функционального блока:
CoDeSys V2.3 |
2-2 |
Что есть, что в CoDeSys
Экземпляры функционального блока
Определение функционального блока подобно определению типа данных. Для работы с функциональным блоком необходимо объявить (создать) его экземпляр. Один функциональный блок может иметь произвольное число экземпляров, каждый из которых имеет собственные независимые данные (память).
Каждый экземпляр функционального блока получает свой собственный идентификатор (имя экземпляра) и свои данные, содержащие входные, выходные и внутренние переменные. Экземпляры функционального блока объявляются глобально или локально как переменные, имеющие тип соответствующего функционального блока.
Пример объявления экземпляра с идентификатором fubinstance функционального блока FUB:
fubinstance: FUB;
Вызов экземпляра функциональный блока происходит с помощью его имени. Входные и выходные переменные доступны вне функционального блока, а внутренние переменные доступны только в самом блоке.
Пример использования входных переменных:
функциональный блок fb имеет входную переменную iInl типа INT:
PROGRAM prog VAR
fbinst1 : fb; END_VAR
LD 17
ST fbinst1.iIn1
CAL fbinst1
END_PROGRAM
Экземпляры функционального блока могут быть объявлены в другом функциональном блоке или в программе. Объявлять экземпляр функционального блока в теле функции нельзя. Экземпляры функционального блока доступны в том POU, в котором они объявлены, если они не объявлены глобально.
Экземпляры функциональных блоков могут быть использованы в качестве входных переменных других функциональных блоков или функций.
CoDeSys V2.3 |
2-3 |
Что есть, что в CoDeSys
Замечания. После выполнения функционального блока все его переменные сохраняются до следующего выполнения. Следовательно, функциональный блок, вызываемый с одними и теми же входными параметрами, может производить различные выходные значения.
Если хотя бы одна переменная функционального блока объявлена как RETAIN, то все данные экземпляров целиком помещаются в энергонезависимый сегмент.
Вызов функционального блока
Для обращения к входным и выходным переменным функционального блока извне необходимо указать имя экземпляра функционального блока, следующей за ней точкой и именем переменной:
<Имя экземпляра>.<Имя переменной >
Присваивание параметров при вызове:
В текстовых языках (IL, ST) задать актуальные параметры и считать значения выходов можно непосредственно при вызове экземпляра функционального блока. Для входных переменных применяется присваивание ":=", выходы считываются при помощи "=>". Этот процесс упрощается, если ис-
пользовать ‘Ассистент ввода’ (Input Assistant)(<F2>) с включенной опцией ‘Вставка с аргумен-
тами’ (With arguments).
Пример:
Допустим, FBINST - это локальная переменная типа функциональный блок, имеющий входную переменную xx и выходную переменную yy. При вставке FBINST в ST с помощью ассистента ввода получается следующая заготовка:
FBINST1(xx:= , yy=> );
Переменные вход-выход:
Обратите внимание, что переменные вход-выход (VAR_IN_OUT) передаются в экземпляр функционального блока через указатели. Поэтому таким переменным нельзя присваивать константы при вызове.
Вызов экземпляра fuboinst с входом iInOut1 типа VAR_IN_OUT:
VAR
fuboinst: fubo; iVar1: int; END_VAR iVar1 := 2;
fuboinst (iInOut1 := iVar1);
Не допустимы попытки присваивания констант: fuboinst (iInOut1:=2); или fuboinst .iInOut1:=2;
Примеры вызова экземпляра вышеописанного функционального блока FUB:
Результат умножения сохраняется в переменной ERG, а результат сравнения в переменной QUAD. Экземпляр функционального блока FUB называется INSTANZ.
Вызов экземпляра функционального блока в IL:
CoDeSys V2.3 |
2-4 |
Что есть, что в CoDeSys
Тот же пример в ST (раздел объявлений такой же, как и в предыдущем примере):
Тот же пример в FBD:
В SFC экземпляры функциональных блоков могут вызываться только из действий шага.
Программа
Программа – это POU, способный формировать произвольное значение во время вычислений. Значения всех переменных программы сохраняются между вызовами. В отличие от функционального блока экземпляров программы не существует. Программа является глобальной во всем проекте.
Нельзя вызывать программу из функции.
Если вызвать программу, которая изменит значения своих переменных, то при следующем вызове ее переменные будут иметь те же значения, даже если она вызвана из другого POU.
В этом заключается главное различие между программой и функциональным блоком, в котором изменяются только значения переменных данного экземпляра функционального блока.
CoDeSys V2.3 |
2-5 |
Что есть, что в CoDeSys
Объявление программы начинается ключевым словом PROGRAM и заканчивается ключевым словом END_PROGRAM. См. рекомендации по наименованию в приложении J.
Пример программы:
Так же, как и для экземпляров функциональных блоков, в текстовых языках (IL, ST) задать актуальные параметры и считать значения выходов можно непосредственно при вызове программы. Для входных переменных применяется присваивание ":=", выходы считываются при помощи "=>".
Пример вызова программы:
IL:
CAL |
PRGexample2 |
LD |
PRGexample2.out_var |
ST |
erg |
Или с присваиванием параметров: |
|
CAL |
PRGexample2(in_var:=33, out_var=>erg ) |
ST:
PRGexample2;
erg := PRGexample2.out_var;
Или с присваиванием параметров: PRGexample2(in_var:=33, out_var=>erg );
FBD:
PLC_PRG
Программа PLC_PRG – это специальный POU, который должен быть в каждом проекте. Эта программа вызывается один раз за цикл управления.
При создании нового проекта автоматически открывается диалог ‘Проект’ (Project) ‘Объект - Добавить’ (Object Add), предлагающий создать новый POU - программу с именем PLC_PRG.
Не следует менять предложенные установки.
Если определить последовательность выполнения задач в Конфигураторе задач (Task Configuration), то проект может не содержать PLC_PRG.
Внимание: Нельзя удалять или переименовывать POU PLC_PRG (если ‘Конфигурация задач’ (Task Configuration) не используется). PLC_PRG является главной программой в однозадачном проекте.
CoDeSys V2.3 |
2-6 |
Что есть, что в CoDeSys
Действие
Программы или функциональные блоки могут быть дополнены действиями. Фактически действия - это дополнительный набор встроенных в POU подпрограмм. Действия могут описываться на языке, отличном от того, на котором выполняется соответствующий функциональный блок или программа.
Действие оперирует с теми же данными, что и функциональный блок или программа, к которой оно принадлежит.
Пример действия функционального блока:
В данном примере функциональный блок Counter увеличивает или уменьшает выходную переменную "out" в зависимости от значения входа "in". При вызове действия Reset выходная переменная принимает значение 0. Одна и та же переменная "out" используется в обоих случаях.
Вызов действия:
Действие вызывается с помощью идентификатора:
<Имя_программы>.<Имя_действия> или <Имя_экземпляра>.<Имя_действия >.
Если нужно вызвать действие из POU, к которому оно принадлежит, то в текстовых языках используется имя действия, а в графических – функциональный блок без указания имени экземпляра.
Пример вызова вышеописанного действия:
PROGRAM PLC_PRG VAR
Inst : Counter; END_VAR
IL:
CAL Inst.Reset(In : = FALSE) LD Inst.out
ST ERG
ST:
Inst.Reset(In := FALSE); Erg := Inst.out;
FBD:
Замечание Действия играют ключевую роль в SFC (подробнее смотри раздел SFC).
CoDeSys V2.3 |
2-7 |
