Интересная идея, но это не точно
Наткнулся на данное видео, по мне так прикольно. Осторожно мат.
Наткнулся на данное видео, по мне так прикольно. Осторожно мат.
Разбираюсь с ПЛК Деконт А9 , добрые люди подскажите , кто-то где-то
сталкивался с этой .... Техническая поддержка у них все время на больничном.
Приветствую. Принципы связи одни и те же. У любого производителя ПЛК и преобразователя частоты. У ОВЕН просто есть примеры реализации. Если их поймёте, всё остальное не составит труда.
В принципе частотник должен работать уже "из коробки".
Важно найти параметры настроек сети по интерфейсу RS-485. И, если есть настройки управления по коммуникациям, настроить их.
Пример ПЧВ.
Открываем мануал, находим раздел параметры связи.
Настраиваем в соответствии с ваши задачами. Тут сразу можно заметить адресацию нужных регистров.
После этого открываем раздел Modbus.
В каждом ПЧ есть два главных командных слова, всегда. На запись, и на чтение.
Слово записи. Команда управления ПЧ.
Слово чтение - состояние ПЧ.
Все разложено по битам, которое преобразуется в слово.
Все остальное - это регистры типа WORD. Опрашиваются и записываются соответствующими функциями 03 (чтение) и 06 (запись).
Не забываем настроить откуда пуск.
И откуда задание частоты.
На всех ПЛК практически всё однотипно. Надо знать карту регистров и по каким адресам "Просить и отдавать".
Нашёл пример в Codesys 2.3
Это мы отдаем команды, com_word_55 присваиваем адрес с мануала.(2001)
Это получаем. Адрес слова с мануала.(2002)
Вся другая адресация соответствует коду параметра.
На этом я всё. Пишите комментарии. Ставьте лайки.
Приветствую всех. Эта статья будет посвящена дистрибутиву CoDeSyS 3.5 SP17 Pacth 3 и панельному контроллеру ОВЕН СПК107.
Как быстро освоить элемент таблицы?
Для того, чтобы нам формировать таблицу и выдавать показания нужно подготовить все данные для работы с таблицей.
Создаем структуру данных. Дату и значение в формате STRING. Почему именно текстовый, чтобы в ячейках таблицы были пустые клетки, в противном случае будут нулевые значения. В своём проекте я делал REAL.
Далее назначаем массив данных (наши столбцы и строчки) ArrTable. В моей таблице достаточно 10 строк, если нужно больше, то указываем.
Всё остальное, можно посмотреть в примере. На скриншоте написаны комменты, дублировать тогда я не буду.
После этого мы создаем два столбца - это дата и время.
Когда жмём запись bTrigger, мы заполняем таблицы и создаём столбцы.
Вытаскиваем элемент таблица в поле.
Присваиваем нашу переменную в поле Массив Данных.
Указываем ниже размер нашего массива.
В этих полях настраиваем наименование, количество, цвет, толщину столбцов.
Если нужно вводит данные в ячейки таблицы то ставим галочку Создать шаблон. И этот шаблон будет работать как обычный элемент прямоугольник и попадают те же свойства. Можно назначить аварийные цвета.
Жмем OnMouseClick, и настраиваем ту же переменную.
Вот так вводятся настройки конфигураций.
Конечный результат.
Если статья была полезна пишите комментарии и ставьте лайки.
С уважением, Гридин Семён.
Приветствую всех, уважаемые читатели, на связи автор канала, Гридин Семен. Автоматизирую текущий объект - теплогенератор. Пишу программу в CoDeSyS 3.5 SP17 Pacth 3 для панельного контроллера ОВЕН СПК107. В общей сложности опрашивает ПЛК около 12 модулей ввода\вывода - это 130 сигналов.
Параллельно собираю материал и пишу статьи для новичков. Информация помогает понять как пользоваться дистрибутивом и ответить на вопросы - Как, как, как? Я разбиваю по разделам для простоты освоения в формате один вопрос - одна статья.
Как скачать Codesys и установить таргет-файл я уже писал в статьях. Вкратце напишу следующее. \
На официальном сайте скачиваем дистрибутив.
Переходим в этот раздел.
Нужен именно SP17 на сегодняшний момент 16.10.2024. Прошивка и таргет должны совпасть с друг другом, чтобы не было проблем.
Это касается большого спектра оборудования - Агава, WAGO, Power и т.д. Только разница в таргетах и их рабочих названиях.
В этом разделе находятся таргеты и прошивки.
Таргет - это некая сущность с набором входов и выходов, коммуникациями, протоколами, конфигурациями. Для того, чтобы дистрибутив CoDeSyS понимал, а с кем он вообще общается.
После того, как всё установили, запускаем новый проект.
Выбираем шаблон. Лучше работать с ними, потому что шаблон загружает всю необходимую конфигу для дальнейшей настройки.
Вот перед нами дерево проекта.
Device - настройки связи с устройством.
Application - Это набор программ, функциональных блоков, функции, задач, библиотек, визуализаций, рецептов, баз данных, текстовых пулов и пулов картинок и т.д.
Коммуникационный раздел, RS-485 и Ethernet
Всё остальное конфигурационные разделы и системные настройки для различных узлов панельного контроллера.
На этом заканчиваю, всем пока. Если есть вопросы, пишите комментарии.
Типы данных string в CODESYS требуются в реализации архивации, различных таблиц, подписей, в отображении Аварий. String это строка в программной среде.
Приветствую всех, с вами на связи автор блога, в этой статье я хочу описать работу со строками типа String в среде разработки для программируемых логических котроллеров.
Есть несколько основных сфер, где они применяются:
визуализации (формирование таблиц рецептов, сообщений о тревогах и т.д.);
записи данных в файлы в понятной человеку форме (в формате CSV, JSON и т.д.);
реализации строковых протоколов обмена (DCON, MQTT и т.д.);
работы с SMS;
хранения паролей, серийных номеров и т.д.
Строка – это массив чисел, каждое из которых соответствует определенному символу. Соответствие между числами и символами называется кодировкой. В 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 выводил аварии на экран, когда авария срабатывала по уставке. Прилагаю скриншоты:
Небольшой кусок кода обработки аварии:
Код сам по себе большой, презентую часть. Если будет нужно, могу составить об этом статью, пишите в комментариях.
Как раз реальное применение функции CONCAT.
Было несколько проектов с применением данного модема, скажу честно стабильно всё работало несколько лет. Было реализовано и в CDS 2.3 и CDS 3.5.
В квадрате выделил пример применения переменной STRING.
Это пока всё. Примеры программ в телеге.
Если есть вопросы, пишите в комментариях, чтобы каждый желающий мог получить ответы.
Пишу этот пост в основном для новичков, которые вот вот начинают осваивать программируемое реле и ПО для них.
Начнем с простого сравнения чисел с плавающей запятой.
Создаем проект и добавляем необходимые элементы.
Для сравнения чисел с плавающей запятой нужны элементы с приставкой f.
Операция Вх1 > Вх2.
Операция Вх1 < Вх2.
Операции Вх1 ≥ Вх2 и Вх1 ≤ Вх2, к сожалению среда позволяет делать только с целочисленными значениями. Чтобы выполнить в целочисленном варианте, я просто умножаю на 100 перевожу в целочисленный и сравниваю.
Если знаете как сделать с плавающей точкой, напишите в комментариях.
На днях как-то приiлось ставить прибор ТРМ12. и я задумался, как реализовать ПИД в Owen Logic. В Codesys 2.3 и 3.5 у меня есть понимание и рабочие алгоритмы, которые стоят на объектах. Для Программируемых реле у меня не было решений.
Приветствую всех, уважаемые читатели. Напишу краткий пост об этом решений.
На сайте ОВЕН выложили примеры для ПР205 о макросе с ПИД-регулятором. Но там с аналоговым выходом от 0-100 %.
Его можно немного доработать и мы получаем ПИД для задвижки с дискретными выходами.
Вставляем макрос в менеджере компонентов в разделе управляющие и регулирующие модули RegKZR.
Его входные и выходные параметры:
Правильно указываем полный ход задвижки. Иначе будет недорегулирование или перерегулирование. Можно потерять точность.
С уважением, Гридин Семен