Найти в Дзене
yura2507

Учимся программировать промышленную автоматику на примере ОВЕН ПР. Часть 4.

Сегодняшняя статья не столько про программирование, сколько про методы соединения ПЛК с датчиками или приборами, или с другими ПЛК. Это нужно научиться делать, т.к. включать лампочки, может быть, и можно через DI\DO, а вот измерять давление, температуру, концентрацию газа – уже сложнее. Если вы нашли ошибки, или неточности, не стесняйтесь мне об этом сообщить, с большой радостью сделаю интернет грамотнее. Да, мне тоже не нравится Дзен, бесконечная реклама из-за которой невозможно нормально читать материал, но другой площадки для написания статей у меня нет. В прошлой статье было рассказано про Функциональные блоки: Намеренно не буду описывать то, каким образом подключать ПРМ к ПР, в этом нет ничего сложного. Этот раздел будет полностью посвящен протоколу ModBus и интерфейсам, на которых он работает. ModBus – самый популярный протокол, популярнее ProfiBus, CAN и прочих, придумали его Шнайдеристы. На этом протоколе работает огромное количество доступных приборов. Я могу много писать про
Оглавление

Доброго всем времени суток!

Сегодняшняя статья не столько про программирование, сколько про методы соединения ПЛК с датчиками или приборами, или с другими ПЛК. Это нужно научиться делать, т.к. включать лампочки, может быть, и можно через DI\DO, а вот измерять давление, температуру, концентрацию газа – уже сложнее.

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

В прошлой статье было рассказано про Функциональные блоки:

Методы и средства коммуникации.

Намеренно не буду описывать то, каким образом подключать ПРМ к ПР, в этом нет ничего сложного. Этот раздел будет полностью посвящен протоколу ModBus и интерфейсам, на которых он работает.

Что такое ModBus.

ModBus – самый популярный протокол, популярнее ProfiBus, CAN и прочих, придумали его Шнайдеристы. На этом протоколе работает огромное количество доступных приборов. Я могу много писать про различные протоколы, формирование пакетов и прочее, но в этом нет никакой нужды, т.к. глубокое изучение принципа работы протокола требуется после того, как вы освоите все базовые нюансы. Наверное стоит запомнить то, что существует 2 ModBus - RTU и TCP, отличаются они только методом коммуникации, первый работает на последовательных интерфейсах, второй в сетях Ethernet. По RS485 можно получить дальность примерно 1.2км без повторителей, ну а в сетях Ethernet дальность ограничена лишь вашим оборудованием, например оптический канал может дать вам сотни и тысячи километров.

Что надо знать?

1. В сети ModBus на интерфейсе RS485 (на RS232 тоже, но его нет в ПР) всегда один матер, и, если ПР в вашей сети один, или же он основной центр принятия решений – он и будет мастером. Хотя он может быть и Слейвом, но для нас это пока не имеет практического значения. На интерфейсе Ethernet мастеров может быть несколько, но каждый отдельный мастер обращается к отдельному слейв (мастер 192.168.1.1 - слейв 192.168.1.2, мастер 192.168.1.3 - слейв 192.168.1.4). Есть устройства позволяющие подключаться к ним нескольким мастерам, например ОВЕН МЭ210-701:

обмен по протоколу Modbus TCP (порт 502) — до 3 одновременных соединений с разными Мастерами сети; (Инструкция к прибору).

Но это больше исключение, чем правило. Кстати! Про энергомонитор от ОВЕН я писал ранее, этот прибор функционирует у меня уже более 2-ух лет, и он ни разу не отключался!

А ещё, ПР205 может быть одновременно и мастером и слейв на одном 502 порту! Про интерфейсы ПР205 тоже есть статья от меня.

2. В сети Modbus все устройства должны быть одинаково сконфигурированы. У всех устройств должна быть одинаковая скорость, одинаковая четность, одинаковое количество стоп-бит и одинаковое количество Бит Данных. Различаться должен только Адрес устройства, у всех он должен быть индивидуальный, чтобы не было коллизий. Информационная табличка на приборе обычно выглядит так: ModBus, add.16, spd.9600, 8N1. Скорость может меняться от 9600 (в редких случаях от 2400) до 115200. Чем выше скорость – тем быстрее придут данные, чем длиннее линия – тем ниже скорость. Если нет нужды в быстрых данных – используйте медленную скорость.

-2

3. Есть ещё такой параметр как Интервал задержек, или интервал между сообщениями. Это важный параметр, и его всегда надо устанавливать. Это называется – слушать тишину. Чтобы Мастер мог отчетливо понимать, что посылка от одного устройства закончена, можно слушать следующую. В зависимости от длины линии подбирается индивидуально, по умолчанию от 10мс.

4. «Тип данных» - очень важный параметр, чем больше (тяжелее) данные, тем дольше они идут. Старайтесь использовать везде, где возможно цельночисленные данные, и лишь там, где нет возможности – с плавающей запятой. Некоторые приборы отдают данные с плавающей запятой, и вам придётся их получать именно в таком виде, но всё же большинство приборов отправляют данные в виде целого числа, например, температура воздуха 233 – эти данные мы преобразуем, методом деления на 10, в 23.3 непосредственно в ПЛК, и тут нам поможет ещё один блок из функционального поля – «преобразование данных». Любые данные можно преобразовать в BOOL, UDINT, FLOAT.

to_bool - 0 это 0, а всё что больше 0 - это 1. to_int - с булевыми всё понятно 0\1, а вот из float конвертация будет обрезать всё что после запятой. to_float схоже с to_int, но дополнительных символов не добавляет:), сначала конвертируем в float и только потом делим, чтобы получить корректную температуру с нужным количеством символов после запятой.
to_bool - 0 это 0, а всё что больше 0 - это 1. to_int - с булевыми всё понятно 0\1, а вот из float конвертация будет обрезать всё что после запятой. to_float схоже с to_int, но дополнительных символов не добавляет:), сначала конвертируем в float и только потом делим, чтобы получить корректную температуру с нужным количеством символов после запятой.

5. Функции чтения и записи. Самое распространенное, с тем, что вы скорее всего на этапе становления столкнётесь – 3 и 6 функции. Но, это тоже не точно, т.к. данная информация описана в инструкции к устройству, которое будет подключаться. Не все устройства могут читаться, не все устройства могут писаться. Например, управляющее устройство может только записываться, а термометр только прочитать, но тут даже, наверное, надо написать немного иначе, не все устройства надо писать или читать. Термометр можно калибровать (Записывать в него поправочный коэффициент), но это делается 1 раз на стенде, и вы сделаете это без ПЛК.

Это пример с реального ПР, т.к. датчик температуры заранее сконфигурирован, происходит только чтение, температуры и влажности.
Это пример с реального ПР, т.к. датчик температуры заранее сконфигурирован, происходит только чтение, температуры и влажности.

Обратите внимание на порядок Байт, это важно! Все устройства передают информацию по разному.

Что очень хорошо, так это то, что про коммутацию я уже писал:), и вы почитаете это тут, да, именно в этой статье рассказано про битовые функции, о которых я писал в самом начале, ровно столько, сколько вам пока нужно знать:

Все 3 статьи содержат много информации по ModBus, в них есть и про порядок байт.

Во всех ПЛК конфигурирование интерфейсов и протоколов отличается, но, обычно, если это не прибор от B&R или Siemens работающие по ModBus (Наркотики в странах европы, на рабочих местах надо запрещать…) – всё весьма просто.

Функции и функциональные блоки на ST.

Почему ваша следующая ступень обучения - Изучение ST? Всё просто, на кубиках можно сделать инкубатор, но построить сложную распределенную систему с 1000-чей параметров, массивами и циклами - не реально.

Я уже рассказывал как работают ФБ на ST в ПР:

В той статье он только появился, чуть позже его "допилили", и сейчас стало всё очень достойно. Смотрите покажу как работают RTRIG и FTRIG:

-5

Весь триггер - это 3 строчки:

  1. Выключаем выход Q;
  2. Если I=TRUE (DI_1 например) и нет в памяти M тогда выход Q=True;
  3. А вот тут как раз отличие ФБ от Функции, M - переменная памяти, она будет TRUE 1 цикл после того как I станет равным False, функция же не имеет памяти, и M всегда в начале цикла будет FALSE.

Где можно применять ST на заре вашего становления - конечно же в написании простых арифметических и логических Функций. Всегда проще написать:

Y:=(YMAX-YMIN)*((X-XMIN)/(XMAX-XMIN))+YMIN; //Формула масштабирования

Чем городить это на кубиках. С логикой точно так же, "И", "ИЛИ", "НЕ", всё в одну строчку.

Немного практики и можно начинать писать свои ФБ. Но, предлагаю вам не спешить с этим, практикуйте кубизм:).

Ну что же, давайте построим наш первый «курятник» - инкубатор?

Пример 1.

Прежде всего напишем ТЗ для этого. Всегда пишите полное ТЗ, с всевозможными дополнениями, даже если в последствии вы их использовать не будете.

1. Поддержание заданной температуры в пределах 0.1 градус

2. Включение вентилятора, раз в 10 секунд на 5 секунд

3. Переворот яиц 1 раз в 30 секунд, у поворотного механизма есть 2 датчика положения 0 и 180 градусов, крутим пока нет сигнала от какого-то датчика.

4. В случае открытия крышки включаем подсветку и отключаем нагреватель, блокируем включение вентилятора, а если он работает – отключаем его. Так же в момент открытия крышки датчик движения не работает. Переворот яиц при открытой крышке блокируем.

5. При обнаружении движения включаем оповещение, мигающую лампу.

6. Считаем количество открываний крышки, и сбрасываем значение подсчёта кнопкой, но не раньше, чем датчик движения определит движение.

Скачать этот пример (Курятник), можно по ссылке - https://disk.yandex.ru/d/8da_Qyx_1KYYlQ

Давайте разбирать пример поэтапно:

1. Какие входы у нас есть? Датчик температуры, может быть аналоговый или сетевой (1). Датчик открытия крышки - дискретный (2). Датчик движения (3). Датчики положения (0 и 180 градусов - 4 и 5), и 2 сброса (6 и 7).

2. Посчитаем выходы. Включение нагревателя (1). Включение вентилятора (2). Переворот яиц (3). Подсветка (4). Оповещение о движении (5).

3. Начнем с преобразования аналогового сигнала 4..20 в диапазон датчика -50..+50, в прошлой статье формулу масштабирования я уже показывал, создам сразу же макрос, чтобы не занимать много места.

4. Создадим П-регулятор, который будет включать нагреватель при температуре ниже 37.5 (37.4), а выключать его при достижении температуры 37.5. Можно было бы конечно же сделать PID регулятор, но его сложно имитировать в программе. Хорошо, п.1 выполнили.

5. Сделаем запуск вентилятора 1 раз в 10 секунд на 5 секунд. Сразу же сделаем блокировку его запуска при открытой крышке. Тут ничего сложного, BLINK нам поможет.

-6
-7

6. Вращение 1 раз в 30 секунд на 180 градусов. время вращения не входит в время ожидания. Я сделал сложно, тем интереснее вам будет разобраться и улучшить.

7. Мигать лампой по датчику движения очень просто. Blink поможет мигать, а триггер зафиксирует импульсный датчик движения. Не стоит забывать о том, что ДД не активен когда открыта крышка.

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

-8

Сегодня всё, продолжу в следующей статье, которой и попробую закончить. У меня осталось ещё 2 примера. Напоминаю, если кто-то из вас пришлёт интересное (разумных размеров) ТЗ, я попробую его разобрать в следующей статье. Есть вопросы? Задавай!

До встречи, пока!

Следующая статья уже ждёт вас: