Серия «Программная среда CoDeSyS 3.5»

4

Программирование СПК107. Библиотеки Modbus

Серия Программная среда CoDeSyS 3.5

Пишу для новичков. Тема будет посвящена подключению модулей через библиотеку Owen Communication.

Библиотека Owen Communication

Компания ОВЕН (как и любой другой производитель) разработала специальные библиотеки для обмена между центральным ЦПУ и модулями ввода\вывода.

Для чего они нужны?

Для ускорения обмена данными, и групповых запросов ( с одного модуля можно сразу снять все данные одним запросом), что очень удобно.

Скачать можно с официального сайта компании в разделе CDS3.5 -библиотеки.

Реализация в Codesys 3.5

Будем считать, что библиотеки скачаны и интегрированы в дистрибутиве. Сначала мы устанавливаем нужную там библиотеку в менеджере.

Пример можно скачать в группе или на официальном сайте ОВЕН. Где вам удобнее. В общих чертах я разберу пример с небольшими комментариями. Так как реализовывал именно по нему.

Писал я код в ST. Для лучшего понимания сделал скриншоты в FBD.

Здесь в теле программы разбито на два интерфейса RS-485 - COM1 и COM2. Зачем? Чтение идёт по одному каналу, Запись по другому каналу. Это дополнительно ускоряет обмен. В АСУ чем быстрее обмен данными, тем лучше.

ComControl открывает нужный ком порт с соответствующими сетевыми настройками.

Com_Parity и Com_Stopbit это дополнительные функции с перечислением, которые идут в комплекте с библиотекой.

Функциональный блок для опроса модуля, можно опросить один регистр, можно группой, всё зависит от задачи.

Устанавливаем время таймаута (200 ms), Кол-во повторных опросов в случае ошибки(UsiRetry), сигнал готовности ком-порта(hCom), Режим RTU (AsciiMode -false), Адрес (SlaveId), Функцию чтения записи, (их 6, в комплекте в библиотеке), Адрес регистра (DataAddr, по документации к модулю), кол-во регистров (DataCount), Сам массив с данными и его размер (Data и Size).

Word2ToReal - это блок преобразования 2 регистров в число с запятой.

Это ФБ записи регистров в модуль, используем функции 06 и 16.

Настройки все те же самые, только другой набор функций.

Если статья полезна, ставьте лайки, пишите комментарии.

Показать полностью 5
7

Программирование СПК107 в среде CoDeSyS 3.5. Переключение окон

Серия Программная среда CoDeSyS 3.5

Приветствую всех. Сегодня напишу статью о простой функции - переключение окон в контроллере СПК107.

Создание Визуализации

Итак с чего начать? Сначала создаём две визуализации с рабочими названиями. Вот таким образом:

Будем считать, что всё установлено, проект создан.

Добавляем объект (визуализация)

Настройки кнопки

Для удобства можно создать папку, для того, чтобы разместить все объекты в одном месте.

Добавляем в рабочее поле кнопку в разделе Стандартные элементы управления.

Заходим в свойства кнопки и находим Конфигурация ввода. В этой конфиге несколько вариантов ввода (по клику мыши, по нажатию, по отжатию и т.д.)

Выбираем по клику мыши - дальше откроется окно с настройками, что может делать эта кнопка.

Выбираем Изменить показанную визуализацию - Нажимаем стрелку - выбираем в меню название визуализации.

Кнопка может выполнять несколько операций. Можно написать в ней небольшую программу отдельно.

Показать полностью 5
9

Программирование СПК107 в среде CoDeSyS 3.5. Начало

Серия Программная среда CoDeSyS 3.5

Приветствую всех, уважаемые читатели, на связи автор канала, Гридин Семен. Автоматизирую текущий объект - теплогенератор. Пишу программу в CoDeSyS 3.5 SP17 Pacth 3 для панельного контроллера ОВЕН СПК107. В общей сложности опрашивает ПЛК около 12 модулей ввода\вывода - это 130 сигналов.

Параллельно собираю материал и пишу статьи для новичков. Информация помогает понять как пользоваться дистрибутивом и ответить на вопросы - Как, как, как? Я разбиваю по разделам для простоты освоения в формате один вопрос - одна статья.

Начинаем новый проект в CDS3.5

Как скачать Codesys и установить таргет-файл я уже писал в статьях. Вкратце напишу следующее. \

На официальном сайте скачиваем дистрибутив.

Переходим в этот раздел.

Нужен именно SP17 на сегодняшний момент 16.10.2024. Прошивка и таргет должны совпасть с друг другом, чтобы не было проблем.

Это касается большого спектра оборудования - Агава, WAGO, Power и т.д. Только разница в таргетах и их рабочих названиях.

В этом разделе находятся таргеты и прошивки.

Таргет - это некая сущность с набором входов и выходов, коммуникациями, протоколами, конфигурациями. Для того, чтобы дистрибутив CoDeSyS понимал, а с кем он вообще общается.

После того, как всё установили, запускаем новый проект.

Выбираем шаблон. Лучше работать с ними, потому что шаблон загружает всю необходимую конфигу для дальнейшей настройки.

Вот перед нами дерево проекта.

  1. Device - настройки связи с устройством.

  2. Application - Это набор программ, функциональных блоков, функции, задач, библиотек, визуализаций, рецептов, баз данных, текстовых пулов и пулов картинок и т.д.

  3. Коммуникационный раздел, RS-485 и Ethernet

  4. Всё остальное конфигурационные разделы и системные настройки для различных узлов панельного контроллера.

На этом заканчиваю, всем пока. Если есть вопросы, пишите комментарии.

Показать полностью 7
4

Пишем строки String в CODESYS

Серия Программная среда CoDeSyS 3.5

Типы данных string в CODESYS требуются в реализации архивации, различных таблиц, подписей, в отображении Аварий. String это строка в программной среде.

Приветствую всех, с вами на связи автор блога, в этой статье я хочу описать работу со строками типа String в среде разработки для программируемых логических котроллеров.

Для чего нужны строки?

Есть несколько основных сфер, где они применяются:

  • визуализации (формирование таблиц рецептов, сообщений о тревогах и т.д.);

  • записи данных в файлы в понятной человеку форме (в формате CSV, JSON и т.д.);

  • реализации строковых протоколов обмена (DCON, MQTT и т.д.);

  • работы с SMS;

  • хранения паролей, серийных номеров и т.д.

Типы строк в CODESYS

Строка – это массив чисел, каждое из которых соответствует определенному символу. Соответствие между числами и символами называется кодировкой. В CODESYS присутствуют два типа строк – STRING и WSTRING. Основные характеристики типов строк

ПараметрSTRINGWSTRINGКодировкаASCIIUCS-2 (Unicode)Размер символа1 байт2 байтаПример записи литерала(важен тип кавычек)‘hello, world’“привет, мир”

Выбор типа зависит от решаемой задачи. Например, для отображения строк в визуализации контроллеров ОВЕН следует использовать только тип WSTRING. При работе с SMS удобнее применять STRING, так как при формировании AT-команд для модемов используется кодировка ASCII.

Длина и размер строки

В CODESYS при объявлении строки задается ограничение числа ее символов. Если число символов не указано, то по умолчанию используется значение 80. Ограничение максимального числа символов строки в явном виде отсутствует. Фактически длина строки ограничена только объемом памяти, выделенной под проект.

VAR
// Максимальная длина – 40 символов
// Выделенная память – 41 байт
sMessage: STRING(40) := ‘test’;
// Максимальная длина – 80 символов (по умолчанию)
// Выделенная память – 162 байта
wsTitle: WSTRING := “test”;
END_VAR

Базовые функции работы со строками

Значение строковой переменной можно присвоить не только при ее объявлении, но и в коде программы. Однако одного присваивания недостаточно. Для реализации алгоритмов требуются дополнительные операции, например, объединение нескольких строк в одну, поиск в строке нужного символа и т.д. Для этих операций используются базовые функции из библиотеки Standard. Список этих функций с кратким описанием

CONCAT (STR1, STR2)Объединяет две строки в одну

DELETE (STR, LEN, POS)Удаляет из строки заданное число символов с нужной позиции

FIND (STR1, STR2)Производит поиск подстроки в строке

INSERT (STR1, STR2, POS)Добавляет подстроку в строку с заданной позиции

LEFT (STR, SIZE)Выделяет из строки подстроку заданной длины (начиная с первого символа)

LEN (STR)Вычисляет длину строки

MID (STR, LEN, POS)Выделяет из строки подстроку заданной длины (начиная с нужной позиции)

REPLACE (STR1, STR2, LEN, POS)Заменяет в строке один фрагмент на другой (начиная с нужной позиции)

RIGHT (STR, SIZE)Выделяет из строки подстроку заданной длины (начиная с последнего символа)

Примеры использования этих функций:

sVar1 := ‘Hello, ’;
sVar2 := ‘world’;
// sVar3 теперь имеет значение ‘Hello, world’
sVar3 := CONCAT(sVar1, sVar2);
// iLen будет иметь значение 12
iLen := LEN(sVar3);

Функции из библиотеки Standard могут работать только с переменными типа STRING.
Для работы с WSTRING используется библиотека Standard64 с идентичным набором функций, имеющих префикс «W» (WCONCAT, WDELETE и т. д.).

Расширенные функции работы со строками

Важно отметить, что функции из библиотек Standard/Standard64 могут работать только со строками, длина которых не превышает 255 символов. Для работы с более длинными строками используется библиотека StringUtils. В ней содержатся функции, которые в качестве аргументов принимают не строки, а указатели на них. Кроме того, библиотека содержит дополнительные функции для перевода строк в верхний/нижний регистр, удаления пробелов и т. д.

Типы строк STRING и WSTRING предназначены для работы с разными кодировками. Иногда требуется выполнить конвертацию этих типов, например, ввести в визуализацию строку-сообщение типа WSTRING и отправить ее по SMS в виде STRING-значения. Стандартные операторы конверсии STRING_TO_WSTRING/WSTRING_TO_STRING в этом случае не подходят, так как не производят конвертации кодировок, а перекладывают содержимое памяти одной переменной в другую. Решить проблему поможет библиотека OwenStringUtils, разработанная компанией ОВЕН.

Библиотека позволяет:

  • конвертировать кодировки;

  • работать с подстроками;

  • форматировать вывод переменных типа DATE/TOD/DT/REAL

// неправильная конвертация
// wsMessage получит значение "òåñò"
wsMessage := TO_WSTRING('тест');
// правильная конвертация
// wsMessage получит значение "тест"
wsMessage := OSU.CP1251_TO_UNICODE('тест');
// sDateTime получит значение '02.04.2019 08:11:30'
dtDateTime := DT#2019-04-02-08:11:30;
sDateTime := OSU.DT_TO_STRING_FORMAT
(dtDateTime, '%t[dd.MM.yyyy HH:mm:ss]');

Большой набор функций для работы со строками можно найти в библиотеке OSCAT Basic. Часть из них повторяет функционал OwenStringUtils, но присутствуют и уникальные: например, зеркалирование строки и преобразование числа в строку с его HEX-значением.

Помимо видимых символов (букв, цифр, знаков препинания) строка может содержать спецсимволы, которые называются управляющими последовательностями. С их помощью, например, можно организовать перевод строки для вывода нескольких сообщений в одном элементе визуализации.

sMessage := ‘Один$r$nДва’;

В редакторе CODESYS для ввода спецсимволов используется знак ‘$’.

Строки и массивы

Как было сказано в начале статьи, строка представляет собой массив символов. CODESYS V3.5 позволяет осуществлять индексный доступ к строке – как к массиву значений типа BYTE (для STRING) или WORD (для WSTRING). Это удобно при работе с файлами и реализацией протоколов обмена. На рис. 6 приведен пример обработки строки в цикле FOR для определения позиций символов, разделяющих значения. Это может потребоваться при чтении информации из файлов формата .csv.

VAR
sRecord: STRING := '123;456;789';
sSeparatorChar: STRING := ';';
auiSeparatorPos: ARRAY [0..10] OF INT;
i: INT;
j: INT;
END_VAR

j := 0;
FOR i:= 0 TO LEN(sRecord) DO
IF sRecord[i] = sSeparatorChar[0] THEN
auiSeparatorPos[j] := i;
j := j + 1;
// TODO: добавить проверку
// для верхней границы массива
END_IF
END_FOR

Несколько примеров на реальных объектах

Обработка Аварий и вывод на экран

Делал для Молочного завода морозильную камеру, где нужно мониторить параметры температур, и на СПК107 выводил аварии на экран, когда авария срабатывала по уставке. Прилагаю скриншоты:

Небольшой кусок кода обработки аварии:

Лепка таблицы CSV для архивации

Код сам по себе большой, презентую часть. Если будет нужно, могу составить об этом статью, пишите в комментариях.

Как раз реальное применение функции CONCAT.

Отправка SMS через модем ПМ01

Было несколько проектов с применением данного модема, скажу честно стабильно всё работало несколько лет. Было реализовано и в CDS 2.3 и CDS 3.5.

В квадрате выделил пример применения переменной STRING.

Это пока всё. Примеры программ в телеге.

Если есть вопросы, пишите в комментариях, чтобы каждый желающий мог получить ответы.

Показать полностью 4
9

Codesys 2.3:Запуск насоса на CFC

Серия Программная среда CoDeSyS 3.5

Требуется запустить центробежный насос, который должен проработав 3 секунды выключиться и, кроме того, необходимо вести учет числа включений. простой запуск механизма осуществляется на Codesys 2.3.

Приветствую всех дорогие читатели, на связи Гридин Семен. Запускаю серию статей совсем простых программ, как раз для начинающих.

Конфиг входов и выходов и программа

Перед программированием работы насоса нужно сконфигурировать входы/выходы ПЛК, для этого одному из дискретных входов присваиваем значение «Pusk», а одному из дискретных выходов значение «Nasos».

Для управления работой насоса и учета числа включений потребуются: элемент счетчик CTU, элемент таймер TP и переменная «Counter».

Кнопка «Пуск» устанавливает значение «1» на переменной «Pusk», которая включает одновременно счетчик CTU1 и таймер TP1. Число включений суммируется и выводится в переменную «Counter» с выхода CV счетчика. А с выхода таймера TP1 устанавливается булевская переменная «Nasos», которая управляет дискретным выходом ПЛК в зависимости от времени установленного на входе PT таймера, в данном случае это 3 секунды.

Визуализация установки

Для создания визуализации пуска насоса нужно создать новый объект визуализации на закладке «Визуализации» организатора объектов, разместить на форме элемент «Кнопка», пару прямоугольников для изображения трубопровода, еще 1 эллипс и прямоугольник для насоса, отдельно прямоугольник для создания надписи с количеством включений насоса.

Кнопку «Пуск» нужно в разделе «Конфигурирование элемента – Категория – Ввод – Переменная-кнопка» связать с переменной «Pusk», которая в свою очередь связана с дискретным входом ПЛК. Изображение насоса сконфигурировано в разделе «Конфигурирование элемента – Переменные – Изм. Цвета», нужно вписать переменную «Nasos», а также установить обычный (серый) и тревожный (зеленый) цвета. Прямоугольник для вывода числа включений насоса на панели конфигурирования элемента связан с переменной «PLC_PRG.Counter» в разделе «Конфигурирование элемента – Переменные – Выв_текста».

На этом заканчиваю, всем спасибо, пока-пока.

Показать полностью 3
12

Простенький проект регулятора температуры на ST

Серия Программная среда CoDeSyS 3.5

Нужно измерять температуру с термодатчика r385_500 на ПЛК PLC-150i в диапазоне от 100 до 200 градусов. При превышении температуры выше чем уставка 1 срабатывает сигнализация/лампа, которая отключается только после того как температура уменьшится до уровня уставки 2. Уставка 1 – 200 градусов, уставка 2 – 100 гр.С.

Создание проекта на ПЛК

Создаем новый проект, в качестве целевой платформы выбираем PLC-150i, затем в организаторе объектов выбираем «Конфигурация ПЛК» и в ней выбираем тип датчика.

Реализация регулятора температуры

Пишем простейшую программу на языке ST.

На окне визуализации расположены следующие элементы: 1 ползунок, 6 квадратов и 1 эллипс. Ползунок связан с переменной «temp» и служит для моделирования изменения температуры, измеряемой датчиком. Два квадрата справа от ползунка связаны с переменными деформации по вертикали: для 1-го кубика это (-PLC_PRG.ustavka1), для второго (-PLC_PRG.ustavka2). Графический элемент эллипс служит для визуализации срабатывания физического дискретного выхода ПЛК «lampa». Три прямоугольника под лампой показывают текущую температуры, уставку 1 и уставку 2. В них нужно настроить переменные на вывод текста: «temp», «PLC_PRG.ustavka1» и «PLC_PRG.ustavka2».

С уважением, Гридин Семен

Показать полностью 3
7

Автоматизация поста налива на CoDeSyS 3.5

Серия Программная среда CoDeSyS 3.5

2 года назад заказчик дал задание на автоматизацию постов налива бензина. На каждый пост своё управление. Затем все собираем в кучу в SCADA систему. К сожалению проект пришлось заморозить, так как требовалось кучу разрешительной документации. Сама программа работала «на столе». На реальном объекте испытать не удалось. Пишу статью, может для кого-то пригодятся «Фичи» в CoDeSyS 3.5.

Приветствую всех читателей сайта, с вами на связи автор — Семен. И я продолжаю писать статьи по пром. автоматизации.

Что за пост налива?

Пост налива — это некая металлоконструкция с лестницей и гибким шлангом, либо сверху, либо снизу. Этот шланг подводят к бензовозу и наполняют его топливом. Выглядит он следующим образом:

Топливо наполняется вот таким вот шлангом:

Что находится примерно в составе оборудования.

  • Насос

  • Клапан большого налива

  • Клапан малого налива

  • Массовый расходомер

  • Различные сигнализации

Какие задачи были поставлены в реализации программы:

  1. Универсальность — передача данных для верхнего уровня либо по Ethernet, либо по RS-485.

  2. Подключение различных видов массовых расходомеров — по импульсу или по Modbus.

  3. Фиксация различных аварий и защит и запись в аварийный журнал.

  4. Запуск программы по месту или удаленно.

  5. Различные клапана подачи топлива, либо два клапана либо регулирующий кран.

Управление постом налива реализовывали на базе ПЛК200 с применение CoDeSyS 3.5.

Программа на CoDeSyS 3.5

Ну начнем с того, что я разбивал все процессы и задачи на подпрограммы — чтобы потом легче было находить косяки при отладке.

Дерево проектов выглядит примерно так:

В основной программе создан подраздел действие (ACT), сюда я записываю различные преобразования данных, передачу данных и привязку физических входов-выходов.

Тело программы (PLC_PRG) с логикой.

И различные функциональные блоки и функции. Аварии(Avarii_post) и Регулирующий кран(kran)/

Опрос модуля ввода аналогового, панели оператора и массового расходомера по интерфейсу RS-485.

Обязательно ручной режим, включение насосов, задвижек, клапанов, кранов и т.д.

Расчет расхода сделал примерно таким, без учета цены импульса. Знаю, что код кривоват, если есть варианты получше, подскажите, как написать?

Выбор режима для расхода и задвижки делал через CASE.

Запуск пошаговой программы реализован через CASE. При отладке наглядно показано, где программа остановилась и по какой ПРИЧИНЕ.

Обработчик стоповой кнопки, все прописано, когда, куда и что должно остановиться.

Обработчик аварий и отправка сообщений через массив.

Аварийная ситуация и что должно произойти.

Ставили ещё маленькую панель оператора, вот такая была менюшка:

Ну и что предполагалось быть в мнемосхеме Master SCADA 3.12. Ставили именно её.

На этом я заканчиваю, если будут вопросы, пишите.

Показать полностью 13
3

Простой RS-триггер в Codesys 3.5

Серия Программная среда CoDeSyS 3.5

Для включения и выключения часто используется этот полезный логический элемент RS-триггер. На нем можно собирать сложные цепочки регуляторов с различной логикой.

Сейчас я стал редко его применять, так как код в основном пишу на ST. Зачастую этот элемент там не нужен. А для языка программирование CFC и FBD самое то.

RS-триггер

У этого элемента сброс является приоритетом. Одним словом, если он срабатывает, то другие сигналы не работают.

Находится он в библиотеке Standart.

Объявляем триггер, даем ему имя.

Set - Включить триггер, Reset - Выключить.

Работа RS-триггера:

SR-триггер

Все тоже самое, только приоритет по пуску.

Работа SR-триггера:

Показать полностью 4
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества