- •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: Ошибки и предупреждения компилятора
- •Предупреждения
- •Ошибки
Приложение : Операторы и функции МЭК
10.6 Адресные операторы
Внимание: При онлайн коррекции кода, адреса переменных могут измениться. Не забывайте о такой вероятности, используя указатели.
Описанные в этом разделе операторы и функции не предписаны стандартом МЭК.
ADR
Функция адрес
ADR возвращает адрес аргумента в формате DWORD. Полученный адрес может быть передан функции в качестве аргумента или присвоен переменной типа указатель.
Пример IL:
LD |
Var 1 |
ADR |
|
ST |
Var 2 |
man_fun1
ADRINST
При вызове функции ADRINST из экземпляра функционального блока она возвращает адрес экземпляра в DWORD. Данный адрес можно передавать в функции и использовать как указатель, либо его можно непосредственно присвоить переменной проекта типа указатель.
Пример ST (внутри экземпляра функционального блока):
dvar:=ADRINST(); (* Присваивание адреса экземпляра переменной dvar *) fun(a:=ADRINST()); (* Адрес экземпляра как аргумент функции *)
Пример IL:
ADRINST ST dvar ADRINST fun
BITADR
BITADR возвращает DWORD смещение переменной от начала сегмента данных. Результат зависит от того, включена или нет опция байтовой адресации.
VAR
var1 AT %IX2.3:BOOL; bitoffset: DWORD;
END_VAR
Пример ST:
Bitoffset := BITADR(var1); (* Результат 19, если byte addressing=TRUE, или 35, если
byte addressing=FALSE*)
Пример IL:
LD Var1
BITADR
CoDeSys V2.3 |
10-13 |
Приложение : Операторы и функции МЭК
ST Var2
Косвенный оператор (content)
Косвенное обращение через указатель производится путем добавления оператора "^" после имени указателя.
Пример ST:
pt:POINTER TO INT; var_int1:INT; var_int2:INT;
pt := ADR(var_int1); var_int2:=pt^;
10.7 Вспомогательные функции
INDEXOF
Возвращает внутренний индекс POU.
Пример ST:
var1 := INDEXOF(POU2);
SIZEOF
Возвращает размер переменной в байтах.
Пример IL:
arr1:ARRAY[0..4] OF INT; Var1 INT
LD |
arr1 |
SIZEOF |
|
ST |
Var 1 (* Результат 10 *) |
Пример ST:
var1 := SIZEOF(arr1);
TIME
Функция TIME возвращает время в миллисекундах от начала работы системы в формате TIME.
Пример IL:
TIME
ST systime (*Результат, например.: T#35m11s342ms *)
Пример ST:
systime:=TIME();
CoDeSys V2.3 |
10-14 |
Приложение : Операторы и функции МЭК
Пример FBD:
INI
INI можно использовать для инициализации retain переменных, содержащихся в экземпляре функционального блока.
Синтаксис: <bool-Variable> := INI(<FB-instance, TRUE|FALSE)
Если второй операнд равен TRUE, то все энергонезависимые переменные, определенные в функциональном блоке FB, будут инициализироваться.
Пример ST: fbinst экземпляр функционального блока fb, в котором определена retain переменная retvar.
Объявление:
fbinst:fb;
b:bool;
Фрагмент реализации:
b := INI(fbinst, TRUE);
ivar:=fbinst.retvar (* => retvar инициализирована *)
Пример IL:
LD fbinst INI TRUE ST b
Пример FBD:
10.8 Оператор вызова
CAL
Вызывает функциональный блок или программу.
Применяется в IL для вызова экземпляра функционального блока, входные переменные помещаются в скобках вслед за его именем.
Пример: Вызов экземпляра функционального блока Inst, где входные переменные Par1 и Par2 равны 0 и TRUE соответственно.
CAL INST(PAR1 := 0, PAR2 := TRUE)
10.9 Явное преобразование типов
Неявное преобразование данных из ‘большего’ типа в ‘меньший’ запрещено стандартом (например, из INT в BYTE или DINT в WORD). Если подобное преобразование действительно необходимо, оно должно быть выражено явно. Явные преобразования работают практически для всех базовых типов данных.
CoDeSys V2.3 |
10-15 |
Приложение : Операторы и функции МЭК
Синтаксис: <баз.Тип1>_TO_<баз..Тип2>
Преобразования в строку …_TO_STRING используют выравнивание влево. Если строка оказывается слишком короткой, результат будет обрезан.
BOOL_TO
Преобразование типа BOOL в другой тип:
Для числовых типов результат равен 1, когда операнд TRUE, и 0, если операнд FALSE.
Для типа STRING результат - это слово TRUE или FALSE.
Примеры IL: |
|
|
|
|
LD |
TRUE |
|
|
|
BOOL_TO_INT |
|
|
|
|
ST |
I |
|
(*Результат: 1 *) |
|
LD |
TRUE |
|
|
|
BOOL_TO_STRING |
|
|
|
|
ST |
str |
|
(*Результат: 'TRUE' *) |
|
LD |
TRUE |
|
|
|
BOOL_TO_TIME |
|
|
|
|
ST |
t |
|
(*Результат: T#1ms *) |
|
LD |
TRUE |
|
|
|
BOOL_TO_TOD |
|
|
|
|
ST |
|
(*Результат: TOD#00:00:00.001 *) |
||
LD |
FALSE |
|
|
|
BOOL_TO_DATE |
|
|
|
|
ST |
dat |
|
(*Результат: D#1970-01-01 *) |
|
LD |
TRUE |
|
|
|
BOOL_TO_DT |
|
|
|
|
ST |
dandt |
(*Результат:DT#1970-01-01-00:00:01 *) |
||
Примеры ST: |
|
|
|
|
i:=BOOL_TO_INT(TRUE); |
|
(* Результат:1 *) |
||
str:=BOOL_TO_STRING(TRUE); |
(* Результат:"TRUE" *) |
|||
t:=BOOL_TO_TIME(TRUE); |
|
(* Результат:T#1ms *) |
||
tof:=BOOL_TO_TOD(TRUE); |
|
(* Результат:TOD#00:00:00.001 *) |
||
dat:=BOOL_TO_DATE(FALSE); |
|
(* Результат:D#1970 *) |
||
dandt:=BOOL_TO_DT(TRUE); |
|
(* Результат:DT#1970-01-01-00:00:01 *) |
||
Примеры FBD: |
|
|
|
|
CoDeSys V2.3 |
10-16 |
Приложение : Операторы и функции МЭК
(*Результат: 1 *)
(*Результат: 'TRUE' *)
(*Результат: T#1ms *)
(*Результат: TOD#00:00:00.001 *)
(*Результат: D#1970-01-01 *)
(*Результат: DT#1970-01-01-00:00:01 *)
TO_BOOL
Преобразование других типов в BOOL:
Результат TRUE, когда операнд не нулевой, иначе FALSE.
Для типа STRING, если строка состоит из слова "TRUE", результат равен TRUE, иначе FALSE.
Примеры IL:
LD |
213 |
|
BYTE_TO_BOOL |
|
|
ST |
b |
(*Результат: TRUE *) |
LD |
0 |
|
INT_TO_BOOL |
|
|
ST |
b |
(*Результат: FALSE *) |
LD |
T#5ms |
|
TIME_TO_BOOL |
|
|
ST |
b |
(*Результат: TRUE *) |
LD |
'TRUE' |
|
STRING_TO_BOOL |
|
|
ST |
b |
(*Результат: TRUE *) |
Примеры ST:
b := BYTE_TO_BOOL(2#11010101); |
(* Результат: TRUE *) |
b := INT_TO_BOOL(0); |
(* Результат: FALSE *) |
b := TIME_TO_BOOL(T#5ms); |
(* Результат: TRUE *) |
b := STRING_TO_BOOL('TRUE'); |
(* Результат: TRUE *) |
Примеры FBD:
CoDeSys V2.3 |
10-17 |
Приложение : Операторы и функции МЭК
(*Результат: TRUE *)
(*Результат: FALSE *)
(*Результат: TRUE *)
(*Результат: TRUE *)
Преобразования между целочисленными типами
Преобразования из одного целочисленного типа в другой:
При преобразовании большего типа в меньший, Вы рискуете потерять информацию. Если число превосходит верхний предел данного типа, старшие байты числа игнорируются.
Пример ST:
si := INT_TO_SINT(4223); |
(* Результат: 127 *) |
Число 4223 (16#107F в шестнадцатеричной форме) сокращается до переменной типа SINT, теряя старший байт, и принимает значение 127 (16#7F в шестнадцатеричной форме).
Пример IL:
LD 2 INT_TO_REAL MUL 3.5
Пример FBD:
REAL_TO-/ LREAL_TO
Преобразования типов REAL или LREAL в другие типы:
Значение числа будет округлено вверх до целого и преобразовано в нужный тип. За исключением типов STRING, BOOL, REAL и LREAL. При преобразовании большего типа в меньший, вы рискуете потерять информацию.
При преобразовании в STRING используется до 16 цифр. Если строка имеет не достаточный размер, результат будет обрезан справа.
Пример ST: |
|
|
i := REAL_TO_INT(1.5); |
(* Результат: 2 *) |
|
j := REAL_TO_INT(1.4); |
(* Результат: 1 *) |
|
i := REAL_TO_INT(-1.5); |
(* Результат: -2 *) |
|
j := REAL_TO_INT(-1.4); |
(* Результат: -1 *) |
|
Пример IL: |
|
|
LD |
2.7 |
|
REAL_TO_INT |
|
|
GE |
%MW8 |
|
Пример FBD: |
|
|
CoDeSys V2.3 |
10-18 |
Приложение : Операторы и функции МЭК
TIME_TO/TIME_OF_DAY
Преобразования типов TIME или TIME_OF_DAY в другие типы:
Физически значение времени сохраняется в переменной типа DWORD, выраженное в миллисекундах (начиная с 0 часов для TIME_OF_DAY). Собственное это число и будет преобразовано. При преобразовании в меньший тип, вы рискуете потерять информацию.
При преобразовании в STRING образуется соответствующая МЭК текстовая строка.
Примеры IL: |
|
|
|
LD |
T#12ms |
|
|
TIME_TO_STRING |
|
|
|
ST |
str |
(*Результат: 'T#12ms' *) |
|
LD |
T#300000ms |
|
|
TIME_TO_DWORD |
|
|
|
ST |
dw |
(*Результат: 300000 *) |
|
LD |
TOD#00:00:00.012 |
|
|
TOD_TO_SINT |
|
|
|
ST |
si |
(*Результат: 12 *) |
|
Примеры ST: |
|
|
|
str :=TIME_TO_STRING(T#12ms); |
(* Результат: T#12ms *) |
||
dw:=TIME_TO_DWORD(T#5m); |
(* Результат: 300000 *) |
||
si:=TOD_TO_SINT(TOD#00:00:00.012); (* Результат: 12 *)
Примеры FBD:
DATE_TO/DT_TO
Преобразования типов DATE или DATE_AND_TIME в другие типы:
Физически значение даты сохраняется в переменной типа DWORD, выраженное в секундах начиная с 1 января 1970 г. Это число и будет преобразовано. При преобразовании в меньший тип вы рискуете потерять информацию.
При преобразовании в STRING образуется соответствующая МЭК текстовая строка.
Примеры IL:
CoDeSys V2.3 |
10-19 |
Приложение |
: Операторы и функции МЭК |
LD D#1970-01-01 |
(* Результат FALSE *) |
DATE_TO_BOOL |
|
ST b |
|
LD D#1970-01-15 |
(*Результат 29952 *) |
DATE_TO_INT |
|
ST i |
|
LD DT#1970-01-15-05:05:05 (*Результат 129 *)
DT_TO_BYTE
ST byt
LD DT#1998-02-13-14:20 (*Результат 'DT#1998-02-13-14:20' *)
DT_TO STRING
ST str
Примеры ST:
b :=DATE_TO_BOOL(D#1970-01-01); |
(* Результат: FALSE *) |
i :=DATE_TO_INT(D#1970-01-15); |
(* Результат: 29952 *) |
byt :=DT_TO_BYTE(DT#1970-01-15-05:05:05); |
(* Результат: 129 *) |
str:=DT_TO_STRING(DT#1998-02-13-14:20); |
(*Результат:'DT#1998-02-13-14:20' |
*) |
|
Примеры FBD:
STRING_TO
Преобразования типа STRING в другие типы:
Содержимое строки должно соотноситься с желаемым типом данных, в противном случае преобразование дает 0.
CoDeSys V2.3 |
10-20 |
Приложение : Операторы и функции МЭК
Пример IL: |
|
|
LD 'TRUE' |
(*Результат: TRUE *) |
|
STRING_TO_BOOL |
|
|
ST b |
|
|
LD 'abc34' |
(*Результат: 0 *) |
|
STRING_TO_WORD |
|
|
ST w |
|
|
LD 't#127ms' |
(*Результат: T#127ms *) |
|
STRING_TO_TIME |
|
|
ST t |
|
|
Примеры ST: |
|
|
b :=STRING_TO_BOOL('TRUE'); |
(* Результат: TRUE *) |
|
w :=STRING_TO_WORD('abc34'); |
(* Результат: 0 *) |
|
t :=STRING_TO_TIME('T#127ms'); |
(* Результат: T#127ms *) |
|
Примеры FBD:
TRUNC
Преобразование из REAL в INT. Используется только целочисленная часть аргумента.
При преобразовании в меньший тип вы рискуете потерять информацию.
Примеры ST:
i:=TRUNC(1.9); |
(* Результат: 1 *) |
|
i:=TRUNC(-1.4); |
(* Результат: 1 *) |
|
LD |
2.7 |
|
TRUNC |
|
|
GE |
%MW8 |
|
CoDeSys V2.3 |
10-21 |
