
Программная среда CoDeSyS 3.5
23 поста
23 поста
9 постов
5 постов
2 поста
3 поста
3 поста
В этой статье хочу написать своё мнение про взаимодействие заказчика и исполнителя. Зачастую бывают такие ситуации, когда договаривались «На словах». Озвучиваем сумму. Принимаемся за работу. Потом в результате получается следующее — а я не так сказал, а я не так думал, а я не так видел. Знакомая ситуация?
Приветствую всех, уважаемые читатели блога. На связи с вами Гридин Семен. Расскажу о наболевшем.
За 10 лет моей практики можно на пальцах посчитать людей, которые давали грамотное техническое задание. И были потом довольны результатом. Так как работа была выполнена правильно и в срок.
Почему важно посидеть и подумать над своим проектом, хотя бы примерно изложить суть вашей задачи для инженера АСУ ТП? Да и не только АСУ ТП. Это правило действует для широкого спектра профессий, в том числе и копирайтеров, и архитекторов, и дизайнеров.
Потому что специалист «Шарит» в какой-то определённой узкой области. Допустим инженер АСУ ТП разбирается в программировании, монтаже, проектировании. И человеку сложно охватить все технологии, нюансы работы линии или станка.
Да и вообще элементарно, специалист не может залезть в голову заказчика, и понять, что вообще заказчик хочет от своего проекта.
Самые частые ситуации возникающие при неграмотном ТЗ:
Неправильно подобран размер шкафа — переплата.
Неправильно подобраны мощности силовых элементов
Неправильно написана программа — потеря времени и поездки на объект
Неправильно подобрано оборудование — не выполняет нужные функции
И чаще всего заканчивается чем? Переплатами, поездками, сдача объекта не вовремя, нервотрепка.
Правильно составленное ТЗ экономит кучу сил, энергии, нервов, времени и Денег.
Техническое задание является неким фильтром, чтобы понять готов ли человек с тобой работать или нет, готов ли он принимать участие и прикладывать какие-то усилия или нет. Имеет ли смысл вообще тратить его и своё время.
Как составить Техническое задание.
При проектировании системы мы считаем количество дискретных входов(концевики, кнопки) и аналоговых датчиков(температуры и другие физ. параметры).
Потом считаем количество исполнительных механизмов(насосы, двигатели, клапана, нагреватели и т.д.)
Определяемся с фазностью(1-ф или 3-ф), напряжением питания катушек, мощностями двигателей, мощностями нагревателей.
Затем нужно составить минимальный алгоритм работы вашей системы. Можно написать от руки, порисовать картинки, циклограммы, схемы и т.д. Лучше всего если ещё пришлёте фото и видео, чем больше информации, тем лучше!
После этого определяемся, нужна ли SCADA, Архивация, панель оператора, рецептура. Нужно ли выводить данные в облако, нужна ли база данных и т.д.
Присоединяйтесь к нашему каналу в Telegram, если нужна техническая помощь или просто "початиться".
Файлы и всякая "Обучальня" находится в ВК.
Год назад заехал как-то к фермеру, посчитать автоматику на форточки в теплице. Теплица где-то соток 20 общей площади.
До этого делали теплицу на 5 соток, несколько лет писал ПО на теплицы. Функционала получилось много.
Я посчитал стоимость - Прибор ПР103, датчики, блок питания и работы вышли примерно около 100 т.р.
Это прям минимальный минимум, готов был даже съездить за бесплатно практически.
Ответ был простой - Дорого!
В общем я не удивился. И прикинул. Срок работы оборудование при интенсивной эксплуатации ну допустим 10 лет,
При пессимистичных прогнозах делим на 2 - 5 лет. 100 000 делим на 5х12=60 получаем 2000 р. в месяц. При условии что он отбил бы в первые два года всю сумму в лёгкую.
Как вы считаете, приемлемая цена или дорого?
Присоединяйтесь к нашему каналу в Telegram, если нужна техническая помощь или просто "початиться".
Файлы и всякая "Обучальня" находится в ВК.
Принесли на днях оборудование Mitsubishi, я ставил этот контроллер с панелью оператора на гидравлический пресс для кирпичей. Модель этого контроллера FX5U. На нём собирали станки для развальцовки труб. Хотел сказать о нём несколько слов. Если кому интересно, напишу статью об японском контроллере.
Приветствую всех, на связи автор блога, Гридин Семен. Сегодня статья про контроллер Mitsubishi.
Как началась история работы с данным контроллером? 10 лет назад заказчику нужно было сделать станок, в котором требовался быстрый опрос линейки перемещения с аналоговым выходом 4-20 мА. Пробовали ставить ПЛК ОВЕН, но тогда скорость опроса не соответствовала заявленной задаче — скорость опроса АЦП была 10 мс.
Медленный аналоговый вход ПЛК создавал брак продукции. Пришлось искать другие варианты.
И наш выбор пал как раз на ПЛК Mitsubishi FX5U. Скорость опроса аналогового входа контроллера и его модуля порядка 40 мкс. Разрядность АЦП занимает 12 бит — 4095 в десятичной форме исчисления. Линейка стояла на 100 мм, то есть точность составляла 0,025 мм.
Быстродействие инструкции занимает порядка 0,032 мкс. Вот эти основные преимущества данного контроллера.
На борту у него есть интерфейс RS-485 (поддерживает протокол Modbus RTU), Есть 2 аналоговых входа 0-10В и один аналоговый выход.
Есть возможность расширяться модулями слева и справа. Насколько я помню есть даже поддержка веб-визуализации и облака.
Программная среда GX Works 3 к сожалению платная. Сейчас может из-за санкций её вообще невозможно достать. На самом деле очень мощный и продуманный инструмент, он находится почти вровень с CODESYS.
Вот основные её особенности:
Программа позволяет легко конфигурировать.
На одном рабочем поле могут легко уместиться несколько языков стандарта МЭК.
Язык ST визуально оформлен. Цифры, переменные, операторы — каждый выделяется своим цветом.
Вот на этом скриншоте отображается сочетание LD с FBD.
Можно написать подпрограммы, наподобие действия в CODESYS.
Вот так выглядит среда ST.
Напишу несколько строк по конфигурации модулей и других тонких настройках, если кому нужно.
Для начала необходимо добавить это модуль в конфигурацию ПЛК.
Далее после применения изменений и фиксации конфигурации необходимо дважды кликнуть на модуль -> откроется окно его настройки (см. ниже)
Для каждого канала необходимо выбрать его градуировку и проверить, чтобы он работал (A/Dconversionenable).
Далее сохраняем параметры и переходим в поле программирования. Справа необходимо найти библиотеку модулей (вкладка Module). Если там нет лейблов то надо и создать по правой клавише мыши.
Далее спускаемся по дереву: FX5-4AD-> FX5_4AD_1-> Monitor-> CH1->
И выбираем интересующую нас переменную (одна будет показывать инженерные единицы преобразования, другая физ. Величины, если они будут настроены, и тд…) Переменную хватаем и тащим на рабочее поле.
В настройке связи в панели ПЛК есть совпадение номера станции панели и ПЛК. Они должны отличаться.
Для того чтобы отображалось число с плавающей запятой нужно поставить галочку.
В настройках панели необходимо указать регистр ПЛК, в котором будет храниться номер экрана.
А далее уже в ПЛК разбираться, при каком значении этого регистра каким выходом надо считывать.
Архивировать на FX5 можно с помощью функции Logging function Настраивается она специальной утилитой.
Нужно сделать массив в глобальной переменных и привязать его к регистрам. Далее смотрим регистр. Можно использовать Security level.
На этом заканчиваю. Если есть вопросы, пишите в комментариях.
В азиатских контроллерах интересная реализация программирования логических контроллеров. Этот подход взяли на вооружение многие производители ПЛК.
Чем мне нравятся подобные контроллеры. Тем что у них абсолютно прозрачная адресация регистров. Есть некая коробка с определенным набором ячеек, к которым в программе можно обращаться.
Здравствуйте коллеги. Сегодня попробуем разобраться с регистрами в ПЛК Optimus Drive (он же Haiwell). Такой же принцип соблюдается у таких производителей, как Mitsubishi, Omron, Delta.
У каждого ПЛК, в зависимости от функций, своя карта регистров. В дистрибутиве PLCSoft можно найти эту таблицу.
На данном скриншоте виден весь набор регистров, которые мы можем использовать в программе.
Давайте их рассмотрим по порядку.
HSC — быстрые счетчики со входов ПЛК
PLS — упарвление быстрыми выходами
X — физический дискретный вход
Y — физический дискретный выход
T — выходы таймеров
С — выходы счетчиков
С48-С79 — выходы 32-битных счетчиков
M — промежуточные реле
S — шаговые реле
SM — системные регистры
AI — аналоговые входа
AQ — аналоговые выхода
SV — системные регистры
V -числовые регистры
LM и LV -локальные биты и регистры
P — индексные регистры
I — регистры прерываний
Энергонезависимые регистры и реле — T96-T127, C64-T127, M1536-M2047, S156-255, V1000-2047
Таблица системных битов, можно оценить статусы работы отдельных узлов ПЛК (батареи, ком-портов, запушен контроллер или нет, состояние быстрых счетчиков и т.д.
Всё тоже самое — регистры, только числовые значения.
Статусы и состояния прерываний.
Коды ошибок и их описание.
Вот таким образом выглядят регистры Delta DVP.
Трудности с этими ПЛК какие, нету нормального руководства по программированию, форума, видеороликов. Вообще нету адекватной русскоязычной технической поддержки.
Когда знаешь, в принципе легко с ними разбираться, Для новичков или для людей смежных профессий тяжеловато.
На этом пока всё, если есть вопросы, пишите в комментариях.
Приветствую, уважаемые читатели. На днях задали такой вопрос.
Добрый день! имеется плк F100-10-R от EKF это копия (плк optimus drive и соответственно панели оператора тоже) , также имеется панель оператора EKF PRO-Screen 4. у панели оператора использовал порт com1 rs485 для покдлючения к плк. параметры 485 одинаковые у панели и плк. для связи использовал разьем db9 и контакты 1 и 6 для подклюния 485 плк. не могу установить связь. между панелью и плк. индикатор COM на плк не горит я так понимаю он сигнализирует о наличии соединения.для обмена между плк и панелью использовал протокол PRO-logic. в чем моя ошибка может быть?
Как решить эту задачу?
В принципе Хайвело-подобные контроллеры это одно и то же. Главное, чтобы совпадали название. Есть у меня рабочий проект на AT16SOR и Optimus VI20.
Настройки все один в один, вы применяете только рабочие свои названия платформ.
Настройки ПЛК "Штатные" должны быть с такими настройками.
У меня сейчас под рукой нет ПЛК, по идее настройки сетевых параметров должны быть здесь:
Настройки панели оператора вот тут:
Надо указать сетевые настройки, и адрес STATION к кому обращаться.
COM тоже разные, у меня COM2, у каждого свои пины.
Смотрим в мануале, здесь с цифрой COM2 и COM3 могут быть ошибки, надо пробовать.
Потом ставить кнопку в панели и писать один выход в ПЛК, так можно "Поймать бит" и понять что связь есть. Примеры программ здесь.
Всем пока-пока.
Типы данных 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.
Это пока всё. Примеры программ в телеге.
Если есть вопросы, пишите в комментариях, чтобы каждый желающий мог получить ответы.
Приветствую всех, уважаемые друзья.
На прошлой недели был у заказчика, появился запрос на модернизацию отсадной машины с Омроном.
Вот она:
Что надо сделать?
Вытащить пластину, отключить провода
Демонтировать старое, поставить новое оборудование и панель оператора
Написать с нуля алгоритм работы машины.
Нарисовать управление на панели оператора
Приехать всё поставить и наладить
Хочу узнать ваше мнение, во сколько вы бы оценили стоимость этих работ?
С уважением, Гридин Семен.
Был на реальном объекте в теплице. Хотят, чтобы автоматически работал надув.
Мы изначально делали чисто цикл. таймер ставили и регулировали пуск и паузу.
Теперь появилась мысль, поддерживать давление в межпленочном пространстве.
Теперь вопросы. Эта идея реальна? И сколько Па там между плёнками?
Знатоки, отзовитесь...