Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование контроллеров для АСУ и мехатронных систем. Учебное пособие.pdf
X
- •ВВЕДЕНИЕ
- •Глава 2. ВВЕДЕНИЕ В СРЕДУ ПРОГРАММИРОВАНИЯ CODESYS V3.5
- •2.1. УСТАНОВКА CODESYS
- •2.2. СОЗДАНИЕ НОВОГО ПРОЕКТА
- •2.3. РЕДАКТИРОВАНИЕ ПРОГРАММЫ
- •2.4. ОТЛАДКА ПРОГРАММЫ В РЕЖИМЕ ЭМУЛЯЦИИ
- •2.5. НАСТРОЙКА СВЯЗИ КОНТРОЛЛЕРА С КОМПЬЮТЕРОМ
- •2.6. КОМПОНЕНТЫ ПРОЕКТА CODESYS
- •Глава 3. РАЗРАБОТКА ПРОГРАММ В CODESYS НА ЯЗЫКЕ CFC
- •2.7. ТИПЫ ДАННЫХ И ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ В CODESYS
- •Глава 5. РАЗРАБОТКА ПРОГРАММ В CODESYS НА ЯЗЫКЕ ST
- •7.1. ОПЕРАТОРЫ
- •7.2. СТАНДАРТНЫЕ ФУНКЦИИ И ФУНКЦИОНАЛЬНЫЕ БЛОКИ
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ

(* ST эквивалент: *)
wo10 := wi1 AND wi2;
wo2 := wi51 OR wi52;
wo6 := wi61 XOR wi62;
wo7 := NOT wi7;
Рис. 7.4. Пример использования логических операций с целочисленными переменными
переменными или константами. В CFC или LD имеются традиционные
операции сравнения с соответсвенным обозначением внутри блока: меньше –
LT, меньше или равно – LE, больше – GT, больше или равно – GE, равно – EQ,
не равно – NE.
В CoDeSys присутствует автоматическое преобразование типов данных.
Поэтому при использовании, например, в операции сложения переменных или
констант разных типов компилятор не выдаст сообщение об ошибке, а осуществит предварительное преобразование операндов к старшему типу.
Например, переменные A, B имеют тип INT, а переменные С, D – тип
REAL. Есть два выражения:
D := A+C;
В := A+C;
В первом выражении компилятор не выдаёт ошибки, а во втором –
компилятор выдаст ошибку о невозможности автоматической конвертации
REAL в INT.
Неявное (автоматическое) преобразование из более крупного типа в
меньший тип невозможно (например, из INT в BYTE, из DINT в WORD, из INT
в REAL). Для преобразования из более крупного типа в меньший тип
необходимо использовать специальный тип конверсии. Как правило, всегда
возможно преобразование любого элементарного типа в любой другой
элементарный тип. При использования операторов явного преобразования
типов необходимо помнить два важных аспекта, связанных с потерей точности
и возможным переполнением:
−
например, если значение числа REAL находится за границами диапа-
зона integer, вы получите неопределённый результат в зависимости от целевой
системы;
71

−
при конверсии из большего типа данных в меньший может быть поте-
ряна информация.
Общая форма записи оператора преобразования типов имеет вид
<тип1>_TO_<тип2>
где <тип1>, <тип2> – элементарные типы, перечень которых перечислен в
разделе 2.7.
В таблице 7.2 приведены результаты некоторых преобразований данных
различных типов.
Преобразование
В булевское
…TO_BOOL
В целое
аналоговое INT
7.2. Результаты преобразования данных
Тип данных
на входе
Аналоговое или
таймерное
Строка TRUE, если сообщение ‘TRUE’;
Булевское 0 – для FALSE;
Вещественное Целая часть числа
Таймерное Количество милисекунд
Строка Десятичное число, представленное строкой на
TRUE, если значение на входе ненулевое;
FALSE, если значение на входе нулевое
FALSE, если сообщение ‘FALSE’
1 – для TRUE
входе, например:
mres := STRING_TO_INT ('0198');
(* mres равно 198 *)
Результат преобразования
В вещественное
аналоговое
…TO_REAL
В таймерное
…_TO_TIME
В строку
…TO_STRING
Булевское 0.0 – для FALSE;
1.0 – для TRUE
Целое То же значение в вещественном виде:
1 (целое) => 1.0 (вещественное)
Таймерное Количество милисекунд, представленное в
вещественном виде
Целое или
вещественное
Строка Количество милисекунд, представленное строкой на
Булевское ‘TRUE’ или ‘FALSE’
Аналоговое Символьное десятичное представление
Количество милисекунд, например:
ares := INT_TO_TIME (1256);
(* ares := t#1s256ms *)
rres := REAL_TO_TIME(1256.3);
(*rres := t#1s256ms *)
входе, например:
mres := STRING_TO_INT('198');
(* mres равно t#198ms *)
72

7.2. СТАНДАРТНЫЕ ФУНКЦИИ И ФУНКЦИОНАЛЬНЫЕ БЛОКИ
В CoDeSys присутствует библиотека standard.library, которая содержит
все функции и функциональные блоки, предусмотренные стандартом МЭК
61131-3. Хотя система разработки неявно распознаёт операторы, стандартные
модули должны быть импортированы в проект в виде библиотеки. Библиотека
standard.library включает:
−
функции STRING – строковые функции;
−
бистабильные функциональные блоки;
−
функциональные блоки определения фронта;
−
функциональные блоки счётчиков;
−
таймерные функциональные блоки.
Стандартные функции для работы со строковыми переменными:
LEN Взять длину строки
LEFT Извлечь левую часть строки
RIGHT Извлечь правую часть строки
MID Извлечь середину строки
CONCAT Конкатенация (сцепление) двух строк
INSERT Вставить строку
DELETE Удалить подстроку
REPLACE Заменить подстроку
FIND Найти подстроку
Бистабильные функциональные блоки SR и RS.
Функциональный блок SR – триггер SR с приоритетом установки.
Функциональный блок RS – триггер RS с приоритетом сброса.
Переключатели с преобладанием включения SR имеет булевский вход
SET1, который устанавливает выходной сигнал блока Q1 в TRUE, и булевский
вход RESET, сбрасывающий выходной сигнал блока Q1 в FALSE. Следовательно, вход SET1 включает выход, вход RESET – выключает. При одновременном воздействии обоих входов побеждает SET1 (включение является доминантным).
Переключатели с преобладанием включения RS имеет булевский вход
SET, который устанавливает выходной сигнал блока Q1 в TRUE, и булевский
вход RESET1, сбрасывающий выходной сигнал блока Q1 в FALSE. В отличие
от функционального блока SR в блоке RS при одновременном воздействии
обоих входов побеждает RESET1 (доминантным является выключение).
73

(* ST эквивалент: Мы предполагаем, что SR_1 – это экземпляр блока SR *)
SR1(set1:=auto_mode AND
start_cmd), reset:=stop_cmd);
command := SR_1.Q1;
(* ST Эквивалент: Мы предпо-
лагаем, что RS_1 – это экземпляр блока RS *)
RS_1(set:=start_cmd,
reset1:= stop_cmd OR alarm);
command := RS_1.Q1;
Рис. 7.5. Примеры использования функциональных блоков SR и RS
(* ST Эквивалент: Мы предполагаем, что RTRIG1 – это экземпляр блока R_TRIG *)
RTRIG1(CLK:=cmd);
nb_edge := nb_edge +
BOOL_TO_INT(RTRIG1.Q);
Рис. 7.6. Пример использования функционального блока R_Trig
На рисунке 7.5 представлены примеры использования функциональных
блоков SR и RS в диаграмме FBD и их эквиваленты на языке ST.
Детекторы импульсов предназначены для применения в случае, когда
требуется реакция не на состояние дискретного сигнала, а на его изменение.
Функциональный блок R_Trig генерирует единичный импульс по переднему
фронту входного сигнала, а F_Trig – по заднему фронту.
На рисунке 7.6 представлен пример использования функционального
блока R_Trig в диаграмме CFC для решения задачи подсчёта числа импульсов и
его эквивалент на языке ST.
В CoDeSys сущеcтвует три вида счётчиков: инкрементный – CTU, декрементный – CTD и реверсивный – CTUD.
У инкрементного счётчика CTU по каждому фронту на входе CU значение счётчика (выход CV) увеличивается на 1. Выход Q устанавливается в
TRUE, когда счётчик достигнет или превысит заданный переменной PV порог.
Логическая единица на входе сброса (RESET = TRUE) останавливает счёт и
обнуляет счётчик (CV := 0).
У декрементного счётчика CTD по каждому фронту на входе CD счётчик
(выход CV) уменьшается на 1. Выход Q устанавливается в TRUE, когда счётчик
достигнет нуля. Счётчик CV загружается начальным значением, равным PV по
входу LOAD = TRUE.
74

У реверсивного счётчика CTUD по значению входа RESET = TRUE счёт-
(* ST Эквивалент: Мы предполагаем, что
(* ST Эквивалент: Мы предполагаем, что
(* ST Эквивалент: Мы предполагаем, что
чик CV сбрасывается в 0. По значению входа LOAD = TRUE счётчик CV загружается значением, равным PV. По фронту на входе CU счётчик увеличивается на 1. По фронту на входе CD счётчик уменьшается на 1 (до 0).
Выход QU равен TRUE, если CV >= PV, иначе FALSE. Выход QD равен
TRUE, если CV = 0, иначе FALSE.
CTU_1 – это экземпляр блока CTU *)
CTU_1(CU:=in1,RESET:=in2,PV:=10);
Out1:= CTU_1.Q;
res := CTU_1.CV;
CTD_1 – это экземпляр блока CTD *)
CTD_1(CU:=in1,LOAD:=in2,PV:=10);
Out1:= CTD_1.Q;
res := CTD_1.CV;
CTUD_1 – это экземпляр блока CTUD*)
CTUD_1(CU:= add_elt, CD:= sub_elt, reset:= reset_cmd,
load:= load_cmd, PV:= 100);
full := CTUD_1.QU;
empty := CTUD_1.QD;
nb_elt := CTUD_1.CV;
Рис. 7.7. Примеры использования функциональных блоков CTU, CTD и CTUD
В CoDeSys представлены три вида таймерных функциональных блоков:
TP, TOF, TON.
Для генерации одиночного прямоугольного импульса используется
функционаьный блок TP. У этого блока имеется два входа (булевский IN и
таймерный PT) и два выхода (булевский Q и таймерный ET). Запуск таймера
происходит по фронту импульса на входе IN. Вход РТ задаёт длительность
формируемого импульса. После запуска таймер не реагирует на изменение значения входа IN. Выход ЕТ отсчитывает прошедшее время. При достижении ЕТ
значения РТ счётчик останавливается, и выход Q сбрасывается в 0.
Временная диаграмма работы таймера ТР показана на рис. 7.8.
Таймер с задержкой выключения TOF имеет два входа (булевский IN и
таймерный PT) и два выхода (булевский Q и таймерный ET). По фронту входа
IN выход Q устанавливается в TRUE. Сброс счётчика ЕТ и начало отсчёта вре-
75

Рис. 7.8. Временная диаграмма работы
таймера ТР
Рис. 7.9. Временная диаграмма работы
таймера TOF
мени происходит по каждому спаду входа IN. Выход Q будет сброшен через заданное РТ время после спада входного сигнала. Если во время отсчёта вход IN
будет установлен в TRUE, отсчёт приостанавливается. Таким образом, выход Q
включается по фронту, а выключается логическим нулём продолжительностью
не менее РТ.
Временная диаграмма работы таймера TOF показана на рис. 7.9.
Таймер с задержкой включения TON также имеет два входа (булевский
IN и таймерный PT) и два выхода (булевский Q и таймерный ET). По фронту
входа IN выполняется обнуление счётчика и начинается новый отсчёт времени.
Выход Q будет установлен в TRUE через заданное РТ время, если IN будет
продолжать оставаться в состоянии TRUE. Спад входа IN останавливает отсчёт
и сбрасывает выход Q в FALSE. Таким образом, выход Q включается логической единицей продолжительностью не менее РТ, а выключается по спаду входа IN.
Временная диаграмма работы таймера TON показана на рис. 7.10.
Рис. 7.10. Временная диаграмма работы таймера TON
76

Контрольные вопросы
1. Приведите стандартные операторы IEC языков программирования.
2. Приведите стандартные математические функции, поддерживаемые
системой CoDeSys.
3. Приведите стандартные функции для работы со строковыми перемен-
ными, поддерживаемые системой CoDeSys.
4. Приведите стандартные функции для работы с данными и регистрами.
5. Какие стандартные булевские функциональные блоки CoDeSys вы
знаете? Поясните принцип их работы.
6. Какие стандартные функциональные блоки реализуют функции счёт-
чиков, в чём их отличие?
7. Поясните по временным диаграммам функционирование стандартных
функциональных блоков TP, TON, TOF.
77

ЗАКЛЮЧЕНИЕ
В учебном пособии изложены основные технические характеристики
программируемых логических контроллеров компании ОВЕН. Программирование новейших контроллеров ОВЕН ПЛК200/210, а также сенсорных панельных
контроллеров серии СПК-1хх осуществляется в системе программирования
CoDeSys 3.5. Рассмотрены основы работы с CoDeSys 3.5, начиная от установки
CoDeSys 3.5 на компьютер до загрузки готового приложения в контроллер и его
отладки.
Приведены стандарт на языки программирования промышленных программируемых логических контроллеров IEC-61131-3 (МЭК-61131-3), примеры
разработки прикладного программного обеспечения для контроллеров ОВЕН
ПЛК200/210 в системе программирования CoDeSys 3.5.
Авторы надеются, что учебное пособие создаст запас знаний у студентов,
который будет полезен в их дальнейшей профессиональной деятельности.
78

СПИСОК ЛИТЕРАТУРЫ
1. Энциклопедия АСУТП [Электронный ресурс]. – URL :
http://www.bookasutp.ru/
2. Петров, И. В. Программируемые контроллеры. Стандартные языки и
приемы прикладного проектирования / И. В. Петров. – М. : СОЛОН-Пресс,
2004. – 296 с.
3. Руководство пользователя по программированию ПЛК в CoDeSys 2.3
[Электронный ресурс]. – URL : https://owen.ru/uploads/134/codesys_v23_ru.pdf
4. Технические средства автоматизации: программирование контролле-
ров в среде ISaGRAF [Электронное издание] : лабораторные работы / сост. :
И. А. Елизаров, В. Н. Назаров, М. Н. Солуданов, А. А. Третьяков. – Тамбов :
ТГТУ, 2008.
79

ОГЛАВЛЕНИЕ
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Глава 1. Программируемые логические контроллеры компании ОВЕН . . . . 5
Глава 2. Введение в среду программирования CoDeSys v3.5 . . . . . . . . . . . . . .
2.1. Установка CoDeSys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2. Создание нового проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3. Редактирование программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4. Отладка программы в режиме эмуляции . . . . . . . . . . . . . . . . . . . . 17
2.5. Настройка связи контроллера с компьютером . . . . . . . . . . . . . . . 20
2.6. Компоненты проекта CoDeSys . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.7. Типы данных и объявление переменных в CoDeSys . . . . . . . . . . 31
Глава 3. Разработка программ в CoDeSys на языке CFC . . . . . . . . . . . . . . . . . 36
Глава 4. Разработка программ в CoDeSys в редакторе FBD/LD/IL . . . . . . . . .
Глава 5. Разработка программ в CoDeSys на языке ST . . . . . . . . . . . . . . . . . . .
Глава 6. Язык последовательных функциональных схем SFC . . . . . . . . . . . . .
Глава 7. Стандартные операторы, функции и функциональные блоки . . . . . .
7.1. Операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.2. Стандартные функции и функциональные блоки . . . . . . . . . . . . 73
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
44
51
59
69
79
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
