Введение
В 2012 году в продуктовой линейке FASTWEL I/O появился адаптер шины FBUS NIM745-01, предназначенный для подключения модулей ввода-вывода FASTWEL I/O к встраиваемым компьютерам, процессорным модулям и другим вычислительным устройствам с интерфейсом Ethernet. Процесс интеграции периферийных модулей FASTWEL I/O во встраиваемую систему состоял из разработки приложения для целевого вычислительного устройства на языке C или C++ с использованием комплекта разработчика FASTWEL FBUS SDK, настройки IP-параметров NIM745-01 через встроенный веб-сервер и последующего подключения NIM745-01 вместе с модулями ввода-вывода к интерфейсу Ethernet вычислительного устройства. Приложение, помимо возлагаемой на него основной прикладной задачи, должно было находить и конфигурировать модули ввода-вывода, подключённые к шине FBUS NIM745-01, читать данные входных каналов модулей и записывать данные в их выходные каналы. В качестве целевых вычислительных устройств могли использоваться любые компьютеры и процессорные модули на базе 32-разрядных x86-совместимых процессоров, способные функционировать под управлением операционных систем Windows XP, Windows CE, QNX 6 или Linux.Таким образом, у разработчиков встраиваемых приложений на платформе x86 появился инструмент для реализации многоканальных подсистем гальванически изолированного ввода-вывода аналоговых, дискретных и частотных сигналов на основе модулей ввода-вывода FASTWEL I/O. Однако данное решение до сих пор остаётся маловостребованным среди отечественных производителей встраиваемых систем, и основная причина этого, по всей видимости, состоит в относительно высоком пороге освоения программной части.
NIM745-01 первоначально вызвал большой интерес у производителей автоматизированных систем управления технологическими процессами, при этом наиболее часто звучал следующий вопрос: «А как с ним работать по MODBUS TCP?».
В самом деле, довольно часто у специалистов из области АСУ ТП возникает потребность в размещении разнородных наборов модулей ввода-вывода в непосредственной близости к датчикам и исполнительным механизмам территориально распределённого объекта автоматизации, что позволяет сократить затраты на создание кабельной инфраструктуры, на саму кабельную продукцию, а также на монтажные и пусконаладочные работы. Интеграция распределённых систем ввода-вывода в АСУ ТП почти всегда предполагает использование некоторой стандартизованной промышленной сети. Это позволяет существенно сократить затраты на собственно разработку и обслуживание за счёт максимально широкого применения готовых решений, вроде OPC-серверов или коммуникационных модулей в составе программируемых логических контроллеров, в которых реализован автоматический сетевой обмен с удалёнными узлами/станциями ввода-вывода.
Ответ на приведённый вопрос заказчиков и специалистов из области АСУ ТП был дан весной 2014 года, когда на основе имеющегося аппаратного решения NIM745-01 было выпущено новое исполнение модуля – NIM745-02, превратившее его в один из самых малогабаритных на рынке непрограммируемых контроллеров с функцией подчинённого узла MODBUS TCP, который позволяет создавать распределённые системы сбора данных и управления на основе модулей ввода-вывода FASTWEL I/O и промышленной сети MODBUS TCP.
В данной статье рассматриваются функциональные возможности модуля NIM745-02 и особенности его применения в распределённых системах сбора данных и управления.
Общие сведения о распределённых системах ввода-вывода на базе протокола MODBUS TCP
Распределённая система ввода-вывода на базе протокола MODBUS TCP обычно объединяет несколько вычислительных устройств, соединённых IP-сетью, часть из которых выполняет функции мастеров сети (или клиентов), а часть – подчинённых узлов (или серверов). Сервер состоит из контроллера узла промышленной сети, называемого Bus Coupler, и модулей ввода-вывода, подключённых к его межмодульной внутренней шине. Конфигурирование сервера, как правило, включает в себя настройку коммуникационных параметров контроллера узла, настройку параметров модулей ввода-вывода, подключённых к внутренней шине контроллера, и отображение каналов модулей ввода-вывода на коммуникационные объекты протокола используемой промышленной сети.В случае MODBUS TCP для контроллера узла задаются IP-адрес, маска подсети и при необходимости сетевого взаимодействия между узлами в разных подсетях IP-адрес шлюза по умолчанию. При использовании MODBUS TCP также иногда возможно установить адрес TCP-порта сервера MODBUS, который по умолчанию имеет значение 502.
Для параметризации модулей ввода-вывода многие производители предлагают отдельную утилиту, которая связывается с контроллером узла с использованием собственного закрытого протокола и записывает параметры непосредственно в модули.
Под отображением каналов модулей ввода-вывода на регистры и битовые поля протокола MODBUS подразумевается установка соответствия между некоторым входным или выходным каналом модуля и сетевым адресом регистра или битового поля MODBUS.
Большинство производителей распределённых систем ввода-вывода предлагают автоматическое предопределённое отображение каналов ввода-вывода на коммуникационные объекты. Например, все входы всех модулей дискретного ввода отображаются на фиксированный диапазон адресов входных регистров (Input Register) и/или входных битовых полей (Discrete Input), все выходы модулей дискретного вывода – на фиксированный диапазон адресов выходных регистров (Holding Register) и/или выходных битовых полей (Coil) и т.д., а контроллер узла автоматически транслирует сетевые запросы чтения и записи регистров и битовых полей к каналам модулей ввода-вывода в соответствии с тем, к какому фиксированному диапазону относятся адреса регистров и битовых полей в поступающих запросах. Привлекательность подобного подхода состоит в том, что пользователю не нужно заботиться о настройке отображения каналов на коммуникационные объекты, даже несмотря на необходимость держать в голове соответствие между диапазонами адресов регистров и битовых полей и разными видами входных и выходных каналов, а также на высокую вероятность перепутывания каналов при отладке и обслуживании системы в случае неправильной взаимной установки модулей с идентичной структурой однотипных каналов.
Другим способом отображения каналов модулей ввода-вывода на коммуникационные объекты является явное задание соответствия между каналами модулей ввода-вывода и адресами регистров и битовых полей, выполняемое пользователем при разработке системы. Такой подход требует некоторых усилий по конфигурированию узла, но практически лишён упомянутых недостатков полностью автоматического отображения. Дополнительным достоинством данного вида отображения является возможность чтения или записи одним сетевым запросом значений и состояний аналоговых и дискретных датчиков/исполнительных устройств, относящихся к одному и тому же контролируемому объекту или единице технологического оборудования, в результате чего оценка и изменение состояния контролируемого объекта по сети всегда происходят согласованно в один и тот же момент времени. При автоматическом отображении на области адресов коммуникационных объектов по типу каналов, описанному ранее, мастер сети, на котором выполняется алгоритм сбора данных и управления, не имеет такой возможности, поскольку дискретные и аналоговые сигналы всегда передаются в разных сетевых транзакциях между клиентом и сервером MODBUS.
Программируемые контроллеры FASTWEL I/O в распределённых системах ввода-вывода
Программируемые контроллеры узла сети FASTWEL I/O можно использовать для создания распределённых систем ввода-вывода, однако для этого пользователь должен иметь минимальные навыки программирования хотя бы на одном из языков МЭК 61131-3: ST, IL, FBD или LD и иметь представление о создании приложений в среде разработки CoDeSys 2.3, адаптированной для программирования контроллеров FASTWEL I/O. Для того чтобы читатель смог самостоятельно оценить сложность разработки приложения, превращающего программируемый контроллер FASTWEL I/O в сетевой узел распределённой системы ввода-вывода, рассмотрим небольшой пример.
Разработка приложения в CoDeSys 2.3 для описываемой конфигурации состоит из создания конфигурации контроллера и программного кода, копирующего данные между регистрами и битовыми полями MODBUS TCP и каналами модулей ввода-вывода.





wIODIAG – переменная типа WORD отображена на первые два байта диагностического канала контроллера в области входных данных образа процесса, содержащего маску наличия связи с первыми 32 модулями ввода-вывода;
mAIM791Inputs – массив, содержащий один элемент структурного типа AIM791_Inputs из библиотеки aim791.lib и отображённый на входные каналы первого и единственного модуля AIM791
в области входных данных образа процесса;
byDigitalInputs – массив из восьми элементов типа BYTE, отображённый на входные каналы элементов DIM717 8-channels Digital Input Module и DIM762 8-channels Digital Input Module в конфигурации приложения. Каждый из этих элементов имеет один диагностический виртуальный канал размером 1 байт и один канал, передающий логические состояния на восьми физических дискретных входах модуля, в области входных данных образа процесса. Поэтому для связи приложения с входами четырёх модулей дискретного ввода требуется не менее восьми байт;
byDigitalOutputs – массив из двух элементов типа BYTE, отображённый на выходные каналы двух модулей DIM718 в области выходных данных образа процесса;
byNetIODiag – переменная типа WORD, отображённая на выходной канал элемента Input Register с MODBUS-адресом 5000, предназначенного для передачи мастеру сети битовой маски наличия связи с модулями ввода-вывода;
byNetDigitalInputs – массив из четырёх элементов типа BYTE, отображённый на выходные каналы элементов Input Register с MODBUS-адресами 5001 и 5002, предназначенных для передачи мастеру сети логических состояний 32 каналов дискретного ввода модулей DIM717 и DIM762;
byNetAnalogInputs – массив из восьми элементов типа REAL, отображённый на выходные каналы элементов Input Register с MODBUS-адресами с 5003 по 5018, предназначенных для передачи по сети значений тока на восьми каналах аналогового ввода модуля AIM791;
byNetDigitalOutputs – массив из двух элементов типа BYTE, отображённый на входной канал элемента Bitwise Holding Register с MODBUS-адресом 1, предназначенного для приёма по сети команд управления 16 каналами дискретного вывода модулей DIM718.
Переменная mAIM791 является массивом из одного экземпляра функционального блока AIM791_STIN из библиотеки aim791.lib и служит для преобразования измеренных значений на входных каналах единственного модуля AIM791 в значения тока. Для работы с единственным модулем аналогового ввода в данном примере используются массивы mAIM791 и mAIM791Inputs, чтобы обеспечить возможность расширения системы в будущем.
Временные вспомогательные переменные m_idx, ch_idx и net_idx, объявленные в секции VAR_TEMP, представляют собой счётчики для организации циклов перебора экземпляров функциональных блоков массива mAIM791, массива каналов каждого функционального блока и элементов массивов, отображённых на коммуникационные объекты MODBUS.
Программа PLC_PRG выполняет следующие действия (см. нумерацию строк на рис. 6):
в строке 2 первые 16 разрядов битовой маски наличия связи с модулями ввода-вывода копируются в переменную byNetIODiag, которая отображена на выходной канал регистра MODBUS с адресом 5000;
в строке 5 устанавливается в 1 счётная переменная net_idx, с помощью которой вычисленные значения тока на восьми каналах аналогового ввода внутри цикла в строках 10–13 копируются в массив byNetAnalogInputs, отображённый на выходные каналы регистров 5003…5018;
в строке 6 устанавливается в 1 счётная переменная цикла m_idx для перебора элементов массива mAIM791 и mAIM791Inputs, а также вычисляется условие завершения цикла. Обратите внимание на используемую технику определения количества элементов в массиве:
В строке 8 вызывается экземпляр функционального блока AIM791_STIN из массива mAIM791, индекс которого равен переменной цикла m_idx. При вызове блоку на вход передаётся соответствующий элемент массива mAIM791Inputs, содержащий значения и состояния на каналах модуля AIM791 с номером m_idx (начиная с 1). В данном случае в конфигурации контроллера присутствует один модуль, поэтому массивы mAIM791 и mAIM791Inputs содержат по одному элементу. При необходимости расширения конфигурации контроллера в будущем приведённый код может быть легко адаптирован для нового количества модулей.
В строках 10–13 восемь значений тока на входах модуля AIM791 с индексом m_idx, вычисленных при вызове блока mAIM791[m_idx], записываются в массив byNetAnalogInputs, отображённый на выходные каналы регистров с MODBUS-адресами с 5003 по 5018. Обратите внимание, что для записи в элементы массива byNetAnalogInputs используется счётная переменная net_idx, а для доступа к вычисленным значениям тока на каналах каждого модуля AIM791 используется переменная ch_idx.
В строках 17–19 логические состояния каналов модулей дискретного ввода передаются в массив byNetDigitalInputs, отображённый на выходные каналы регистров с MODBUS-адресами 5001 и 5002.
В строке 18 при обращении к массиву byDigitalInputs используются только чётные индексы его элементов, поскольку по нечётным индексам расположены диагностические виртуальные каналы модулей DIM717 и DIM762.
В строках 22–24 из массива byNetDigitalOutputs, отображённого на 16 битовых полей типа Coil с адресами 1…16, извлекаются команды управления каналами дискретного вывода и записываются в массив byDigitalOutputs, элементы которого отображены на 16 каналов двух модулей DIM718.
После загрузки данного приложения в контроллер CPM703 он превращается в узел распределённой системы ввода-вывода на базе протокола MODBUS TCP.
В реальных «боевых» системах приложение также может выполнять дополнительные функции вроде диагностирования отказов оборудования системы и сети, вторичную обработку сигналов и т.п., чего в ряде случаев не удаётся в полной мере реализовать на уровне мастера промышленной сети, опрашивающего распределённую периферию. В этом видится один из плюсов применения программируемого контроллера в качестве узла распределённой системы ввода-вывода.
Однако, как указывалось ранее, для реализации такого рода приложений разработчик должен иметь опыт использования языков стандарта МЭК 61131-3 для программирования ПЛК в среде разработки CoDeSys 2.3, а также быть знакомым с программной документацией на контроллеры FASTWEL I/O.
NIM745-02: только конфигурирование и никакого программирования

Конфигурирование NIM745-02 включает в себя настройку параметров сети Ethernet и IP-адресации, определение состава и параметров модулей ввода-вывода, настройку параметров функционирования сервисов протокола MODBUS TCP и межмодульной шины.
Конфигурационная информация хранится в энергонезависимой памяти NIM745-02 и актуализируется сразу же после его запуска/перезапуска. Таким образом, после замены вышедших из строя модулей ввода-вывода на новые не нужно повторно конфигурировать NIM745-02.
Просмотр и изменение значений конфигурационных параметров осуществляется через веб-интерфейс NIM745-02 в любом современном веб-браузере. Под современным веб-браузером подразумевается один из следующих: Google Chrome версии не ниже 34, Mozilla Firefox версии не ниже 29, Opera версии не ниже 12 или MS Internet Explorer версии не ниже 10.
Для иллюстрации функциональных возможностей NIM745-02 решим с его помощью рассмотренную в статье задачу расширения существующей гипотетической системы сбора данных и управления дополнительными каналами ввода-вывода. Прежде всего отметим, что NIM745-02 имеет собственные контакты ввода питания внешних цепей датчиков и исполнительных устройств, поэтому модуль OM752 может быть исключён из состава аппаратных средств.
Для этого изменим расположение модулей ввода-вывода на межмодульной шине NIM745-02 так, чтобы модули дискретного ввода-вывода примыкали непосредственно к NIM745-02, а модули OM758 и AIM791 располагались последними в линей-

Перед началом конфигурирования модуля NIM745-02 нужно включить его питание и убедиться, что модуль доступен по сети на компьютере, где предполагается его конфигурировать.
При поставке NIM745-02 имеет следующие IP-параметры:

Если требуется выполнить конфигурирование NIM745-02, сетевые параметры которого по какой-то причине неизвестны, нужно включить микропереключатель 3, расположенный на левой плоскости модуля, и перезапустить модуль либо выключением и повторным включением питания, либо командой сброса, доступной на странице Перезапуск встроенного веб-сервера модуля. После перезапуска NIM745-02 будет функционировать с заводскими настройками IP-параметров.
Для того чтобы убедиться в наличии связи по сети между компьютером и NIM745-02, можно выполнить команду ping в консоли командного процессора Windows:
С:\>ping 10.0.0.1
При наличии связи с NIM745-02 в окне консоли появятся строки:

После успешной авторизации в окне браузера будет отображена начальная страница веб-сервера NIM745-02, содержащая ссылки Конфигуратор, Пароль, Прошивка, Перезапуск и Выход. Первая ссылка предназначена для перехода к конфигуратору модуля, вторая – на страницу смены пароля, третья – на страницу обновления микропрограммы модуля, и две последние – на страницы с командами перезапуска модуля и завершения соединения с его веб-сервером. Для начала конфигурирования модуля нужно перейти по ссылке Конфигуратор.




Следует также обратить внимание на то, что при отображении каналов модулей на регистры MODBUS производится автоматическое выравнивание данных каждого канала на двухбайтовое слово, размер которого соответствует размеру данных, передаваемых одним регистром MODBUS.
Для доступа к отдельным битовым полям каналов модулей ввода-вывода через входные (Discrete Input) и выходные (Coil) битовые поля MODBUS адреса битовых полей в запросах чтения и записи вычисляются по формуле:
BitAddr = RegAddr • 16 + n,
где:
BitAddr – вычисляемый адрес битового поля;
RegAddr – адрес регистра, начиная с 0, которому принадлежит битовое поле;
n – номер битового поля (от 0 до 15) в пределах регистра с адресом RegAddr.
Например, пусть входной регистр для доступа к восьми каналам модуля дискретного ввода 1.DIM717.inputStates (рис. 14) имеет адрес 144. Тогда адреса битовых полей (Discrete Input) для доступа к отдельным каналам будут иметь значения: 2304, 2305, 2306, ..., 2311.

Встроенный веб-сервер модуля NIM745-02 имеет ещё одну функцию конфигурирования, которая может оказаться весьма полезной при серийном производстве систем на его основе. Пусть, например, в составе системы имеется десять узлов распределённого ввода-вывода на базе модуля NIM745-02, отличающихся только IP-адресами, но с полностью идентичным составом модулей ввода-вывода и их специфических параметров. В таком случае конфигурирование десяти экземпляров NIM745-02 с использованием описанного сценария выглядит довольно трудоёмким, поэтому для производственного развёртывания конфигураций в NIM745-02 предусмотрен механизм сохранения конфигурационной информации, отображаемой на вкладке Конфигурация, в файле на диске компьютера с возможностью последующей загрузки файла в NIM745-02.

Обратите внимание, в файле сохраняется только конфигурационная информация, отображаемая на вкладке Конфигурация, включая список модулей ввода-вывода и их специфические параметры, а также общие параметры MODBUS и межмодульной шины FBUS. Общие параметры MODBUS и FBUS содержат два тайм-аута, связанных с отсутствием сетевых запросов со стороны хотя бы одного клиента MODBUS TCP.
Тайм-аут неактивности MODBUS, приводящий к прекращению обмена с модулями, определяет интервал времени в секундах, по истечении которого NIM745-02 перестаёт обмениваться данными с модулями ввода-вывода, если ни от одного из двух клиентов MODBUS TCP не поступило ни одного MODBUS-запроса. Если при этом в списке модулей ввода-вывода, опрашиваемых NIM745-02, присутствуют модули аналогового и/или дискретного вывода, для которых задан параметр Интервал сторожевого таймера в секундах, то при отсутствии обмена между NIM745-02 и этими модулями по межмодульной шине в течение заданного интервала сторожевого таймера на выходах модулей будут установлены безопасные значения и состояния, заданные соответствующими специфическими параметрами модулей.
Тайм-аут закрытия соединения MODBUS TCP NIM745-02 определяет интервал времени, в течение которого встроенный сервер MODBUS TCP NIM745-02 сохраняет ранее установленное соединение с любым из двух клиентов.
В заключение хотелось бы упомянуть о быстродействии сетевой подсистемы NIM745-02. Время обмена между клиентом MODBUS TCP и NIM745-02, измеренное при помощи свободно распространяемой утилиты Wireshark (http://www.wireshark.org), не превышает 2 мс. При выполнении измерений NIM745-02 и компьютер с запущенным клиентом MODBUS TCP были связаны через неуправляемый коммутатор ASUS GX-D1051.
Итак, модуль NIM745-02 открывает новые возможности для увеличения количества и номенклатуры каналов ввода-вывода в существующих системах, а также для создания новых распределённых систем сбора данных и управления на базе протокола MODBUS TCP. Привлекательность решений на базе NIM745-02, помимо способности функционировать в диапазоне рабочих температур –40…+85°C, обусловлена компактностью, малым энергопотреблением, полнотой функциональных возможностей, экономичностью и невысоким порогом освоения. ●
E-mail: alexander.lokotkov@dolomant.ru
Если вам понравился материал, кликните значок - вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал - не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!