Настройка связи Modbus между ПЛК100 фирмы ОВЕН и программируемым терминалом NB фирмы Omron
Настройка связи Modbus между ПЛК100 фирмы ОВЕН и программируемым терминалом NB фирмы Omron.
Физическое подключение интерфейса RS485(А и В сидели на трубе)
Modbus может быть настроен как на итерфейсе RS232, таки и на RS485. МЫ будем использовать интерфейс RS485 с его настройкой на протокол Modbus RTU. В документации Omron находим схему подключения:
Со стороны терминала распаиваем разъем D-Sub 9-pin для порта COM2, со стороны контроллера соответствующие провода подключаем на клеммы А-В.
Настройка протокола Modbus RTU в CodeSys v2.3
В этой статье не стоит задача разобраться с программированием в CodeSys, поэтому базовые понятия разбираться не будут. Рассмотрим один из возможных вариантов настройки Modbus, через конфигуркцию контроллера. Для этого во вкладке «Ресурсы» открываем окно «Конфигурация ПЛК»
В окне отображаются физические каналы контроллера (дискретные входы и выходы). Для передачи по Modbus, необходимо добавить его в конфигурацию. Это делается с помощью контекстного меню. Выбираем подэлемент “Modbus(Master)” , Master –потому, что ПЛК в нашей сети будет главным и отсылать запрос на остальные устройства (терминал в нашем случае).
В конфигурации появляется модуль Modbus с настройками. По умолчанию Modbus назначается первому попавшемуся порту «Debug RS-232».
Меняем его на требуемый нам «RS-485-1»
Далее, наконец, мы можем сделать минимальные настройки формата обмена. Для начала скорость обмена ставим 9600 и меняем формат с ASCII на RTU
Таким образом, у нас сконфигурирован Master, но нет ни одного устройства, с которым этот Master будет общаться. Нужно добавить наш терминал в конфигурацию, произвести его настройку и добавить области памяти для обмена. В качестве внешнего ведомого устройства выбираем «Universal Modbus device…» — это любое устройство, для которого фирма Овен не написала конфигурацию.
Настройка протокола Modbus RTU в NB-Designer v1.38 (150416)
В проекте терминала вставляем модель нашего терминала и контроллер с интерфейсом Modbus RTU Slave. На самом деле это интерфейс по которому будет соединяться терминал с контроллером, т.е. в данном случае терминал будет Slave. Коннектор подключаем к порту COM2, т.к. только там есть RS485.
В свойствах терминала (двойной клик на терминале) открываем настройки порта (COM2 Settings). Выделенные настройки должны совпадать с настройками, сделанными в контроллере, а «Device№» должен быть уникальным для всех устройств Slave, если их несколько.
В документации на терминал находим распределение регистров для интерфейса Modbus RTU Slave : Битовые адреса буду находится в системной области от LB0 до LB8999, регистры данных – LW0 до LW8999. Битовые адреса будем использовать для кнопок и ламп, регистры для задания и отображения чисел. Создадим тестовый экран с кнопками с адресами LB0 -7, лампы LB8-15, Регистры ввода и отображения чисел соответственно LW0 и LW1.
Теперь в «Конфигураторе ПЛК» нужно указать, какими данным мы будем обмениваться. Для кнопок создаем «8 bit input module», для ламп «8 bit output module», Register input и output соответственно, для задания и отображения числа. Вход и выход здесь указывается относительно ПЛК.
Для того, чтобы ПЛК знал, к каким ячейкам терминала обращаться в настройках каждого модуля необходимо прописать номер регистра обращения. В терминале битовые регистры и регистры данных находятся в разных областях, и счет у обеих начинается с 0. Таким образом, получается:
- 8 bit input module – регистр 0 (заняты регистры от 0 до 7);
- 8 bit output module – регистр 8 (заняты регистры от 8 до 15);
- Register input module – регистр 0;
- Register output module – регистр 1;
Таким же образом можно добавить еще битовые и числовые регистры в требуемом объеме, не превышая ограничений сети.
Передача даных (не всегда бывает так гладко)
Остается только проверить работоспособность созданного проекта. Нажимаем кнопку на терминале, форсируем состояние ламп, задаем значение в ячейку ввода на терминале, и ячейку вывода в CodeSys — передача всех регистров осуществляется успешно.
Соблюдая описанную последовательность действий можно успешно настроить связь с ПЛК100 с треминалом NB.
Протокол Modbus. Обзор, описание и примеры использования.
Продолжаем подробно разбирать стандарты передачи данных. И героем сегодняшней статьи станет протокол Modbus! Впервые спецификация протокола Modbus была опубликована ни много ни мало, а в 1979 году, но до сих пор не утратила своей актуальности! Итак, приступаем…
Modbus — самый широко распространенный промышленный протокол для организации обмена данными между различными устройствами (межмашинное взаимодействие, Machine-to-Machine, M2M). Популярность объясняется многими факторами, среди которых простота реализации, отсутствие необходимости использовать дополнительные микросхемы, и, конечно же, открытость протокола.
Основные плюсы Modbus:
- надежный контроль ошибок.
- массовая распространенность.
- открытость.
- возможность включения в сеть большого количества подчиненных устройств с последующим обращением к любому из них при помощи выделенного ему адреса.
В то же время протокол не избавлен от некоторых недостатков:
- организация обмена данными по модели ведущий-подчиненный. При этом подчиненное устройство не может само инициировать отправку данных ведущему, а должно в обязательном порядке ожидать запроса.
- отсутствует механизм для определения обрыва линии связи.
- в одном запросе можно прочитать значения только последовательных регистров. Для чтения произвольных регистров необходимо отправлять несколько запросов, что увеличивает нагрузку на сеть.
Обсуждая достоинства и недостатки протокола мы частично забежали вперед, так что теперь давайте разберем все поэтапно…
Как уже было упомянуто, протокол использует обмен данными по модели ведущий-подчиненный (Master — Slave). Ведущий отправляет запросы, на которые могут отвечать подчиненные. Slave-устройство не может само начать обмен данными, только по команде от Master’a.
В качестве физического уровня стандарт предусматривает использование интерфейсов RS-232, RS-422 и RS-485. Также существует реализация протокола Modbus для TCP/IP — Modbus TCP. Но этот вариант мы сегодня будем затрагивать в меньшей степени.
Сеть Modbus может состоять из нескольких slave-устройств (от 1-го до 247-ми), но master должен быть только один. Каждое из подчиненных устройств имеет свой собственный адрес, соответственно, ведущий может адресовать свое сообщение или запрос конкретному slave-устройству.
Кроме того, поддерживаются широковещательные сообщения, которые принимают все подчиненные. Но разница заключается в том, что опознав сообщение, адресованное именно ему, подчиненное устройство отправляет ведущему ответ. На широковещательные же запросы подчиненные отвечать не могут.
На адреса slave накладываются некоторые ограничения:
- диапазон допустимых адресов — 1…247. Значения адресов от 248 до 255 являются зарезервированными, а адрес 0 используется для передачи широковещательных сообщений.
- master адреса не имеет, он в сети и так один 🙂
- два подчиненных устройства не могут иметь одинаковые адреса.
Вот как может выглядеть один из вариантов подключения устройств с использованием RS-485:
Здесь у нас присутствует один master и три slave-устройства с адресами от 0x03 до 0x05.
Переходим дальше… Различают несколько логических уровней протокола:
Двоичный вариант кодирования данных. Разделителем между пакетами служит временной интервал. То есть сообщение должно начинаться и заканчиваться паузой в течение определенного промежутка времени. Это время не должно быть меньше, чем время передачи 3.5 символов при использующейся скорости передачи данных.
Кроме того, в процессе передачи пакета данных не должно быть пауз длительностью, превышающей время передачи 1.5 символов. Соответственно, Modbus RTU очень критичен к временным задержкам, но зато размер пакетов меньше, чем в Modbus ASCII.
В данном случае для обмена данными используются исключительно ASCII символы. И в отличие от Modbus RTU начало и конец сообщений определяются специальными символами.
Начало пакета — ASCII символ «:» (0x3A), конец — «CR + LF» (0x0D + 0x0A).
Протокол используется при передаче данных с использованием TCP/IP.
Сегодня, в первую очередь, будем подробно разбирать Modbus RTU и Modbus ASCII. Структура пакетов выглядит следующим образом:
В стандарте Modbus принята следующая терминология:
- ADU (Application Data Unit) — полный пакет данных.
- PDU (protocol data unit) — часть пакета, содержащая непосредственно полезные данные.
Для расчета контрольной суммы используются разные алгоритмы. Для Modbus RTU — CRC16, для ASCII — LRC8. В обоих случаях под контрольную сумму задействованы два байта.
Коды функций можно разделить на три группы:
- Стандартные коды команд, описанные в Modbus-IDA.
- Задаваемые пользователем (user-defined function codes) — 65…72, 100…110. Эти коды не описаны в спецификации стандарта и могут использоваться в конкретных изделиях для собственных функций.
- Зарезервированные (reserved). В эту группу входят коды 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.
Но прежде, чем перейти к рассмотрению базовых/стандартных команд, необходимо рассмотреть использующуюся модель данных.
Выполнение команд протокола Modbus подразумевает чтение и запись данных в регистры устройства. И различают 4 типа регистров, организованных в 4 таблицы данных:
Таблица | Тип элемента |
---|---|
Дискретные входы (Discrete Inputs) | 1 бит |
Дискретные выходы (регистры флагов, Coils) | 1 бит |
Регистры ввода (Input Registers) | 16-битное слово |
Регистры хранения (Holding Registers) | 16-битное слово |
Дискретные входы и регистры ввода доступны только для чтения данных, а, соответственно, дискретные выходы и регистры хранения — для чтения и записи.
Доступ к регистрам таблицы осуществляется при помощи 16-ти битного адреса. Первому элементу таблицы соответствует адрес 0. Таким образом, каждая из этих 4-х таблиц может включать в себя вплоть до 65536 регистров (адреса 0…65535 — 16 бит).
Вот теперь давайте рассмотрим конкретные команды из группы стандартных:
- 0x01 (1) — чтение значений из нескольких регистров флагов — Read Coil Status.
- 0x02 (2) — чтение значений из нескольких дискретных входов — Read Discrete Inputs.
- 0x03 (3) — чтение значений из нескольких регистров хранения — Read Holding Registers.
- 0x04 (4) — чтение значений из нескольких регистров ввода — Read Input Registers.
- 0x05 (5) — запись значения одного флага — Force Single Coil.
- 0x06 (6) — запись значения в один регистр хранения — Preset Single Register.
- 0x07 (7) — чтение сигналов состояния — Read Exception Status.
- 0x08 (8) — диагностика — Diagnostic.
- 0x0B (11) — чтение счетчика событий — Get Com Event Counter.
- 0x0C (12) — чтение журнала событий — Get Com Event Log.
- 0x0F (15) — запись значений в несколько регистров флагов — Force Multiple Coils.
- 0x10 (16) — запись значений в несколько регистров хранения — Preset Multiple Registers.
- 0x11 (17) — чтение информации об устройстве — Report Slave ID.
- 0x14 (20) — чтение из файла — Read File Record.
- 0x15 (21) — запись в файл — Write File Record.
- 0x16 (22) — запись в один регистр хранения с использованием маски «И» и маски «ИЛИ» — Mask Write Register.
- 0x18 (24) — чтение данных из очереди — Read FIFO Queue.
- 0x2B (43) — Encapsulated Interface Transport.
И, конечно же, мы не можем не разобрать конкретные примеры запросов и ответов при работе по Modbus.
Протокол Modbus. Примеры команд.
Первым делом займемся чтением данных — коды функций 0x01, 0x02, 0x03, 0x04. В общем виде запросы ведущего и ответы подчиненного выглядят следующим образом (здесь мы рассматриваем только часть пакета — PDU):
Обратите внимание, что в запросе передается количество элементов(!), то есть ячеек таблиц данных (регистров). А в ответе для указания размера данных используются уже байты. Значения адреса и количество элементов передаются в виде 16-битных слов, при этом старший байт передается первым.
Пойдем дальше обобщенного описания формата и проанализируем команды для конкретного устройства. В качестве этого устройства я использую сервопривод серии ASDA-A2, который для обмена данными использует как раз-таки протокол Modbus, причем поддерживает и Modbus RTU, и Modbus ASCII.
Пусть нам надо прочитать данные, расположенные по адресам 0x0200 и 0x0201, slave-устройства с адресом 0x01. Запрос master’а для Modbus RTU будет таким:
Здесь у нас в запросе, указано, что мы хотим прочитать значение двух элементов (регистров). И ответ slave:
А в ответе уже видим, что прочитано 4 байта, поскольку значение одного регистра — это 2 байта (16 бит), а регистров у нас тоже 2. Таким образом, полученные значения:
- Адрес 0x0200 — 0x00B1
- Адрес 0x0201 — 0x1F40
CRC Low и CRC High — это соответственно младший и старший байты 16-ти битной контрольной суммы.
В Modbus ASCII все несколько иначе, запрос выглядит так (в кавычках указаны ASCII символы):
И в первом и во втором случае запрашиваем значения одних и тех же регистров и, соответственно, получаем в ответ одинаковые данные.
При чтении битов регистров флагов или дискретных входов запрос выглядит точно также, а вот байты данных ответного сообщения иначе:
Здесь одно значение флага или дискретного входа занимает один бит. И все эти биты упакованы в байты, и если число запрошенных флагов/входов не распределяется по байтам (не кратно 8), то «лишние» биты заполняются нулями. Как в последнем байте на этой схеме.
Переходим к записи! Для записи одного значения используются команды с кодами 0x05 и 0x06. Запрос в целом похож на уже рассмотренный (при чтении данных), только вместо количества элементов для чтения передаются данные, которые будут записаны:
При записи значений флагов или дискретных входов число 0xFF00 соответствует включенному состоянию, 0x0000 — выключенному. В случае успешного выполнения запроса подчиненное устройство отправляет ведущему точную копию этого запроса.
С этим разобрались! Но необходимо рассмотреть еще и случай записи нескольких значений (коды команд 0x10 и 0x0F). В общем виде формат запроса такой:
И, в обязательном порядке, рассмотрим практический пример 🙂 Пусть нам требуется записать значения 0x0BB8 и 0x0000 по адресам, начинающимся с 0x0112. Запрос и ответ Modbus RTU:
И для Modbus ASCII:
Довольно большая получилась статья, но очень уж хотелось затронуть все по максимуму… И, на самом деле, некоторые моменты остались раскрытыми до конца 🙂 Например, расчет контрольной суммы для Modbus RTU и Modbus ASCII, алгоритмы там абсолютно разные. Так что в ближайшее время будет еще как минимум одна статья с примером программы для расчета LRC и CRC, оставайтесь на связи!
Modbus мчится!
Увеличение производительности SCADA-системы с 10-кратным ускорением сбора Modbus-данных
Сбор большого количества данных с последовательных Modbus-устройств в Ethernet-системах SCADA порой бывает довольно трудоемкой задачей. При работе с большим количеством оконечных Modbus-устройств заказчикам требуется не только простой в использовании шлюз протоколов Modbus/RTU в Modbus TCP, но и решение по ускорению сбора данных с большого количества последовательных устройств. Это позволит широкомасштабным сетям работать гораздо быстрее и предотвратить сбои.
Сложный выбор инженера
В широкомасштабных критически важных задачах, таких как системы мониторинга электропитания, SCADA-системы не могут ждать, пока полевые устройства друг за другом пришлют ответ на одновременный запрос на получение данных. Представьте себе 300 полевых счетчиков и только один Modbus-шлюз для сбора данных – для завершения опроса потребуется не менее 30 секунд, что неприемлемо, поскольку будет непросто отследить динамические данные или выявить сбой.
Кроме того, общим требованием для таких систем является время опроса устройств – от 3 до 5 секунд. Поэтому инженеры обычно рассматривают возможность установки нескольких Modbus-шлюзов параллельно, чтобы сократить цикл опроса. Однако это довольно затратно, а для максимальной производительности системы потребуется установка чересчур большого количества шлюзов. На этом этапе инженеры сталкиваются с проблемой выбора: либо увеличивать бюджет для удовлетворения требований, либо допускать низкую скорость получения данных с последовательных устройств из-за долгого цикла опроса.
Быстрый опрос – продуктивная работа
Активный опрос, предназначенный для устранения недостатков традиционного механизма циклического обслуживания, позволяет каждой стороне шлюза производить опрос своих устройств независимо от работы другой стороны. Так, на одной стороне шлюза каждый последовательный порт шлюза выступает в качестве устройства Modbus RTU Master для опроса, например, счетчиков электроэнергии; другая сторона шлюза выступает в роли сервера Modbus TCP, опрашиваемого SCADA-системой.
Активный опрос имеет несколько преимуществ. Опрос устройств происходит в 10 раз быстрее, чем последовательный опрос по запросу. Время затрачивается только на обработку самого Modbus TCP-запроса и генерирование Modbus TCP-ответа, так как на этапе опроса SCADA-системе не нужно ждать, пока завершится процесс обмена данными на стороне Modbus RTU.
Другим преимуществом является то, что активный опрос позволяет передавать все данные, сгенерированные периферийными устройствами, буквально в несколько пакетов, не обслуживая каждое подключенное устройство индивидуальным пакетом. С точки зрения SCADA-системы шлюз представляет собой базу данных, из которой можно взять запрошенную информацию. При этом каждый последовательный порт шлюза, будучи устройством Modbus RTU Master, самостоятельно в фоновом режиме опрашивает различные подключенные счетчики для сбора данных из их регистров. Собранные данные постоянно хранятся во внутренней памяти шлюза, поэтому для передачи запрошенных данных требуется только TCP-канал и несколько пакетов вместо того, чтобы задавать множество команд опроса в SCADA-системе.
Активный опрос имеет два режима – режим Агент для вновь разработанных систем и Интеллектуальный режим для расширения существующей системы.
Режим Агент для создания новой системы
Ключом к успеху вновь создаваемой системы является шлюз, который повысит производительность SCADA-системы, увеличит удобство разработки SCADA-программы и обеспечит легкую настройку. В режиме Агент шлюзы поддерживают механизм активного опроса для улучшения производительности SCADA-системы. Шлюзу можно задать множество Modbus-команд для его работы в качестве устройства RTU Master. Высокая пропускная способность обеспечивает большую гибкость при разработке системы, но, к сожалению, увеличивает время на ее настройку. Чтобы сэкономить время на настройку, шлюзы поддерживают загрузку команд из CSV-файлов, с которыми можно легко работать с MS Excel, что определенно являются идеальным решением при развертывании широкомасштабной системы.
Интеллектуальный режим для расширения существующей системы
В отличие от создания новых систем, для расширения существующих требуется быстрый интеллектуальный способ добавления новых устройств при сохранении прежней скорости опроса или даже ее увеличении. Шлюзы, работающие в Интеллектуальном режиме, могут автоматически обучаться новым Modbus-командам, приходящим из SCADA-систем, без необходимости ручного ввода команд, как в случае режима Агент. Шлюзы могут использовать активный опрос, чтобы выступать в качестве ведущего устройства Modbus master для каждого последовательного порта. Это полезная функция для уже работающих систем, генерирующих типовые запросы с определенной периодичностью.
Решение Moxa
MGate MB3660 – высокоскоростной Modbus-шлюз компании Moxa с высокой плотностью портов и инновационным механизмом активного опроса, в котором реализованы как режим Агент, так и Интеллектуальный режим, что делает сбор данных в 10 раз быстрее по сравнению с традиционными механизмами, вне зависимости от того, разрабатываете вы новую систему или расширяете существующую. Чтобы узнать подробнее об инновационном методе опроса, скачайте брошюру по ссылке.
Как настроить управление частотным преобразователем по сети Modbus
Подключим преобразователь частоты по шине RS-485 — Modbus RTU, настроим сеть и запрограммируем контроллер на примере преобразователя Inovance MD310 и ПЛК Modicon M241. Рассмотрим чем отличается программирование MD310 от MD200, MD290, MD500.
Преимущество сети Modbus в управлении частотным преобразователем — это быстрый монтаж и экономия на сигнальном кабеле. Необходима только пара проводов вместо целого жгута, тянущегося от сухих контактов на пуск, остановку, управление скоростью. С подключением к сети появляется возможность удалённой отладки, управления и мониторинга.
Например, в конвейерной линии к сети Modbus можно подключить десятки частотных преобразователей и управлять электродвигателями одним контроллером. Контроллер управляет направлением перемещения, скоростью, регулирует ускорение и останавливает ленту.
Рис.1 Внешний вид конвейера
Для реализации управлением частотным преобразователем по протоколу ModBus нужно подключить его через сеть RS-485 к контроллеру и настроить оба устройства.
Подключаем
Мы будем использовать частотный преобразователь Inovance MD310 и контроллер Modicon M241 с программным обеспечением EcoStruxure Machine Expert.
Клеммы RS-485 в частотном преобразователе и ПЛК
Подключение RS-485
Обозначения на схеме:
Master или Slave — Master это главное устройство в сети — ведущее, а Slave это ведомые — подчиненные устройства. Обмен информацией может быть инициирован только ведущим устройством.
TB Serial 2 или RS-485 — винтовые клеммы для подключения по физическому интерфейсу RS-485. Клеммы на ПЛК или ЧРП могут иметь разные обозначение. Клемма «D1» может обозначаться: «485+», «D+», «D1», «A+», «Data+». Клемма COM может обозначаться как «GND». Клемма D0 может иметь обозначение: «485-», «D-», «D0», «B-», «Data-».
Rоср — помехоподавляющий резистор или по-другому «терминатор». Терминатор необходим, когда линия длинная — больше 3х метров. Он устанавливается на концах линии — крайних устройствах, подключенных к общей сети. Номинал резисторов, для линии RS-485: 120 Ом.
J8, J15 — две перемычки на плате частотника, подключающие встроенный помехоподавляющий резистор.
По линии RS485 можно подключить до 32 подчинённых устройств: в нашем случае частотных преобразователей. Если частотников будет больше одного то подключаем по схеме:
Подключение нескольких устройств по RS-485
Для подключения частотного преобразователя к ПЛК используют обычно скрученную пару проводов – «витая пара» или экранированный провод. Витая пара хорошо сохраняет уровень сигнала из-за отсутствия паразитной ёмкости на экран, а экранированный провод лучше защитит от электромагнитных помех.
Витая пара
Настройка частотника
Недостаточно просто подключить все провода к частотнику, его ещё нужно настроить. Перед настройкой управления нужно указать параметры двигателя, данную процедуру мы рассматривали в статье «Как запустить и настроить частотный преобразователь — инструкция для чайников»..
Для управления по сети нужно, чтобы ЧРП и ПЛК видели друг друга в общей сети. Для этого они должны передавать сообщения одинаковой длины с одной скоростью и одинаково проходить процедуру проверки на ошибки.
Настроим параметры:
F0-02 = 2 — управление частотником по сети
Fd-00 = 5006 — задание частоты передачи данных, расшифровывается согласно руководства как 8 бит, 19200 бит/сек
Fd-01 = 0 — без проверки ошибок
Fd-02 = 1 — адрес устройства в сети
Fd-05 = 1 — стандартный ModBus протокол
Fd-07 = 0 — запрещена работа ПО InoDriveShop
Настройка контроллера
Не важно к какому ПЛК вы подключаете преобразователь MD310. Протокол ModBus и линия RS 485 универсальны, поэтому настройка и программирование на других ПЛК имеет схожий алгоритм и такой же набор параметров.
Для настройки и программирования мы будем использовать приложение для работы с ПЛК Modicon M241 — EcoStruxure Machine Expert.
Откроем приложение Machine Expert и создадим новый проект. Настроим параметры передачи данных, для этого сначала настроим параметры Serial_line_2.
Окно конфигурации порта
Baud rate = 19200 — скорость передачи данных, бит/сек
Parity = None — без проверки ошибок
Data bits = 8 — количество бит для передачи данных
Stop bits = 1 — количество стоповых бит
Physical Medium = RS-485 — физический интерфейс
Polarization Resistor = Yes — подключение встроенного концевого резистора
Добавим сканер входов-выходов «ModBus IOScanner»
В окне «Devices tree» — списк устройств, щёлкаем правой кнопкой мыши по порту Serial Line, выбираем добавить устройство «Ad Device». В открывшемся окне выбираем ModBus IOScanner
Добавляем сканер входов-выходов ModBus IOScanner
Добавим универсальное подчинённое устройство «Generic ModBus Slave», щёлкнув правой кнопкой мыши по ModBus IOScanner и выбрав Ad Device.
Настраиваем универсальное подчинённое устройство «Generic ModBus Slave»
Чтобы наш ModBus IOScanner обменивался данными с частотником, нужно его настроить:
Transmission Mode = RTU — ModBus RTU
Response Timeout = 1000 — время ожидание ответа от подчинённого устройства
Time between Frames = 10 — задержка между сообщениями, для того что бы подчиненное устройство успело принять сообщение и подготовится к новому
Так же, во вкладке ModBus Master I/O Mapping, нам нужно выбрать «MAST» в параметре Bus cycle task, что бы наш IOScanner запускался из основного цикла программы, иначе его нужно будет запускать где-то в программе.
Настраиваем запуск IOScanner
Теперь наш частотник подключен к контроллеру и настроен, но управлять им неудобно. Чтобы отдавать короткие команды создадим в проекте теги, по которым мы будем обращаться к частотнику.
Для начала, настроим канал, по которому мы будем управлять именно тем частотником, который нам нужен так, как в сети их может быть множество. Для этого откроем вкладку «ModBus Slave Configuration»
Вкладка «ModBus Slave Configuration»
Slave addres = 1 — адрес частотника, который мы настраивали в самом частотнике
Response Timeout = 1000 — время ожидания ответа
Затем во вкладке «ModBus Slave Channel» добавляем каналы обмена данными «ModBus Channel», щёлкнув в окне по add channel. Это позволит выбрать код функции и регистры для чтения и записи.
Окно конфигурации ModBus Channel
Access Type — выбор типа доступа чтения или записи
Read Holding Registers (Function Code 03) — чтение внутренних регистров
Write Multi Registers (Function Code 16) — запись нескольких регистров
Read/Write Multi Registers (Function Code 23) — чтение и запись нескольких регистров
Cycle Time — период опроса
READ Register — параметры опроса регистров
Offset — адрес регистра
Length — количество запрошенных регистров подряд
Error Handling — обработка ошибки: установить результат в ноль, если есть ошибка или ничего не менять
WRITE Register — параметры регистров записи
Offset — адрес регистра, куда будет произведена запись
Length — количество записанных регистров подряд
Создадим каналы для регистров:
READ 16×1003 — напряжение на выходе частотника, В
READ 16×1004 — ток на выходе частотника, А
READ 16×1005 — мощность на выходе частотника, Вт
READ 16×8000 — ошибка частотника
WRITE 16×1000 — задание частоты питания двигателя, Гц
WRITE 16×2000 — управление двигателем.
Ещё больше регистров управления и мониторинга частотника, смотрите в инструкции по эксплуатации частотником, в разделе «Протокол коммуникации Modbus».
Присвоим имена тегам во кладке ModBus Master I/O Mapping для каждого регистра. При программировании мы будем обращаться уже к имени тега, понятного и нам и контроллеру.
Окно ModBus Master I/O Mapping
Различия в настройке разных моделей преобразователей частоты
Настройка преобразователей Inovance MD200, MD290, MD310 и MD500 идентичны, алгоритм и настройки не отличаются. А вот регистры обмена данными у MD200 отличаются от регистров других частотных преобразователей. Частотный преобразователь MD200 имеет меньшие габариты, и меньший программный набор функций, поэтому и адресация функций проще: некоторые регистры не используются. Подробно описание программных функций описано в «Инструкции по эксплуатации» к частотному преобразователю MD200.