Доброго всем времени суток!
Сегодняшняя статья не столько про программирование, сколько про методы соединения ПЛК с датчиками или приборами, или с другими ПЛК. Это нужно научиться делать, т.к. включать лампочки, может быть, и можно через 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. Чем выше скорость – тем быстрее придут данные, чем длиннее линия – тем ниже скорость. Если нет нужды в быстрых данных – используйте медленную скорость.
3. Есть ещё такой параметр как Интервал задержек, или интервал между сообщениями. Это важный параметр, и его всегда надо устанавливать. Это называется – слушать тишину. Чтобы Мастер мог отчетливо понимать, что посылка от одного устройства закончена, можно слушать следующую. В зависимости от длины линии подбирается индивидуально, по умолчанию от 10мс.
4. «Тип данных» - очень важный параметр, чем больше (тяжелее) данные, тем дольше они идут. Старайтесь использовать везде, где возможно цельночисленные данные, и лишь там, где нет возможности – с плавающей запятой. Некоторые приборы отдают данные с плавающей запятой, и вам придётся их получать именно в таком виде, но всё же большинство приборов отправляют данные в виде целого числа, например, температура воздуха 233 – эти данные мы преобразуем, методом деления на 10, в 23.3 непосредственно в ПЛК, и тут нам поможет ещё один блок из функционального поля – «преобразование данных». Любые данные можно преобразовать в BOOL, UDINT, FLOAT.
5. Функции чтения и записи. Самое распространенное, с тем, что вы скорее всего на этапе становления столкнётесь – 3 и 6 функции. Но, это тоже не точно, т.к. данная информация описана в инструкции к устройству, которое будет подключаться. Не все устройства могут читаться, не все устройства могут писаться. Например, управляющее устройство может только записываться, а термометр только прочитать, но тут даже, наверное, надо написать немного иначе, не все устройства надо писать или читать. Термометр можно калибровать (Записывать в него поправочный коэффициент), но это делается 1 раз на стенде, и вы сделаете это без ПЛК.
Обратите внимание на порядок Байт, это важно! Все устройства передают информацию по разному.
Что очень хорошо, так это то, что про коммутацию я уже писал:), и вы почитаете это тут, да, именно в этой статье рассказано про битовые функции, о которых я писал в самом начале, ровно столько, сколько вам пока нужно знать:
Все 3 статьи содержат много информации по ModBus, в них есть и про порядок байт.
Во всех ПЛК конфигурирование интерфейсов и протоколов отличается, но, обычно, если это не прибор от B&R или Siemens работающие по ModBus (Наркотики в странах европы, на рабочих местах надо запрещать…) – всё весьма просто.
Функции и функциональные блоки на ST.
Почему ваша следующая ступень обучения - Изучение ST? Всё просто, на кубиках можно сделать инкубатор, но построить сложную распределенную систему с 1000-чей параметров, массивами и циклами - не реально.
Я уже рассказывал как работают ФБ на ST в ПР:
В той статье он только появился, чуть позже его "допилили", и сейчас стало всё очень достойно. Смотрите покажу как работают RTRIG и FTRIG:
Весь триггер - это 3 строчки:
- Выключаем выход Q;
- Если I=TRUE (DI_1 например) и нет в памяти M тогда выход Q=True;
- А вот тут как раз отличие ФБ от Функции, 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. Вращение 1 раз в 30 секунд на 180 градусов. время вращения не входит в время ожидания. Я сделал сложно, тем интереснее вам будет разобраться и улучшить.
7. Мигать лампой по датчику движения очень просто. Blink поможет мигать, а триггер зафиксирует импульсный датчик движения. Не стоит забывать о том, что ДД не активен когда открыта крышка.
8. Осталось посчитать сколько же раз крышка открывалась. Тут ничего сложного, и я специально не дописал условие по открытию крышки, подумайте, куда надо вписать условие по крышке, чтобы сброс работал корректно.
Сегодня всё, продолжу в следующей статье, которой и попробую закончить. У меня осталось ещё 2 примера. Напоминаю, если кто-то из вас пришлёт интересное (разумных размеров) ТЗ, я попробую его разобрать в следующей статье. Есть вопросы? Задавай!
До встречи, пока!
Следующая статья уже ждёт вас: