OpenSCADAWiki: Doc/ Mod Bus ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Doc/ModBus from 2015-11-13 09:13:58..

Модули <ModBus> подсистем "Сбор данных" и "Транспортные протоколы"

Параметр Модуль 1 Модуль 2
ID: ModBus
Имя: ModBus
Тип: DAQ Протокол
Источник: daq_ModBus.so
Версия: 1.8.0 1.0.0
Автор: Роман Савоченко
Описание: Предоставляет реализацию клиентского сервиса протокола ModBus. Поддерживаются ModBus/TCP, ModBus/RTU и ModBus/ASCII протоколы. Предоставляет реализацию протоколов ModBus. Поддерживаются ModBus/TCP, ModBus/RTU и ModBus/ASCII протоколы.
Лицензия: GPL

Contents

Введение

ModBus — коммуникационный протокол, основанный на клиент-серверной архитектуре. Разработан фирмой Modicon для использования в контроллерах с программируемой логикой (PLC). Стал стандартом де-факто в промышленности и широко применяется для организации связи промышленного электронного оборудования. Использует для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, а также сети TCP/IP. В настоящее время поддерживается некоммерческой организацией ModBus-IDA.


Существуют три режима протокола: ModBus/RTU, ModBus/ASCII и ModBus/TCP. Первые два используют последовательные линии связи (в основном RS-485, реже RS-422/RS-232), последний использует для передачи данных сети TCP/IP.


Модуль сбора данных предоставляет возможность собирать информацию у различных устройств по протоколу ModBus во всех режимах. Также модулем реализуются функции горизонтального резервирования, а именно совместной работы с удалённой станцией этого-же уровня. В то же время модуль протокола позволяет сформировать и выдать данные по протоколу ModBus в различных режимах и через интерфейсы, поддерживаемые модулями подсистемы "Транспорты".

1. Общее описание протокола ModBus

Протокол ModBus/RTU предполагает одно ведущее (запрашивающее) устройство в линии (master), которое может передавать команды одному или нескольким ведомым устройствам (slave), обращаясь к ним по уникальному в линии адресу. Синтаксис команд протокола позволяет адресовать 247 устройств на одной линии связи стандарта RS-485 (реже RS-422 или RS-232). В случае с режимом TCP адресация исключена из протокола, поскольку выполняется на уровне TCP/IP стека.


Инициатива проведения обмена всегда исходит от ведущего устройства. Ведомые устройства прослушивают линию связи. Мастер подаёт запрос (посылка, последовательность байт) в линию и переходит в состояние прослушивания линии связи. Ведомое устройство отвечает на запрос, пришедший в его адрес.


Окончание ответной посылки определяется в зависимости от режима. В режиме RTU окончание посылки определяется по временному интервалу между окончанием приёма предыдущего байта и началом приёма следующего, время символа. Если этот интервал превысил время, необходимое для приёма полтора байта на заданной скорости передачи то приём фрейма ответа считается завершённым. В режиме ASCII критерием окончания посылки является символ '\r', а в режиме TCP — ожидаемый размер посылки, информация о котором присутствует в заголовке пакета.

1.1. Адресация

Все операции с данными привязаны к нулю, каждый вид данных (регистр, бит, регистр входа или бита входа) начинаются с адреса 0 и заканчиваются 65535.

1.2. Стандартные коды функций

В протоколе ModBus можно выделить несколько подмножеств команд (Таблица 1).


Таблица 1: Подмножество команд протокола ModBus

ПодмножествоДиапазон кодов
Стандартные 1-21
Резерв для расширенных функций 22-64
Пользовательские 65-119
Резерв для внутренних нужд 120-255

Модулем сбора данных используются команды 0x03 и 0x06(0x10) для чтения и записи регистров, 0x01 и 0x05(0x0F) для чтения и записи битов, 0x02 и 0x04 для чтения бита и регистра входа соответственно. Для реализации остальных-нетипичных команд модулем предусмотрена функция API пользовательского программирования, которую можно вызывать из процедуры шаблона, отправляя произвольные PDU пакеты и обрабатывая полученные в ответ.


Модуль протокола обрабатывает запросы командами 0x03 и 0x06(0x10) для чтения и записи регистров, 0x01 и 0x05(0x0F) для чтения и записи битов.

2. Модуль реализации протокола

Модуль протокола ModBus содержит код реализации протокольной части ModBus, а именно особенности вариантов протоколов ModBus/TCP, ModBus/RTU и ModBus/ASCII. Модуль протокола, совместно с выбранным транспортом, активно используется модулем сбора данных для осуществления непосредственных запросов. Поскольку модуль протокола является автономным то, используя его, можно создавать дополнительные модули сбора данных посредством нестандартных функций расширения ModBus различного оборудования автоматизации.

2.1. API функции исходящих запросов

API функции исходящих запросов (messIO()?) оперируют обменом блоками PDU, завёрнутыми в XML-пакеты со следующей структурой:

<prt id="sId" reqTm="reqTm" node="node" reqTry="reqTry">{pdu}</prt>
Где:

Результирующий pdu заменяет pdu запроса в XML-пакете, а также устанавливается атрибут "err" с кодом и текстом ошибки, если таковая имела место.

2.2. Обслуживание запросов по протоколу ModBus

Входная часть обслуживания запросов к модулю протокола осуществляет проверку и обработку запросов посредством объектов узлов, предусмотренных модулем (рис.1). Фактически реализуется механизм, позволяющий выполнять системой OpenSCADA роль сервера ModBus/TCP или подчинённого устройства ModBus/RTU и ModBus/ASCII. Таким образом система OpenSCADA получает возможность использоваться в роли любого участника сетей ModBus.


Вкладка перечня узлов обслуживания входящих запросов протокола. (55 Kb)
Рис.1. Вкладка перечня узлов обслуживания входящих запросов протокола.

Узел протокола эквивалентен физическому узлу устройства сети ModBus. Узел протокола может работать в трёх режимах:


Поскольку узлов протокола может быть создано множество то получается, что на одном интерфейсе, т.е. в одной сети, одна станция на основе OpenSCADA может прозрачно представлять несколько узлов сети ModBus с различными данными.


Рассмотрим особенности конфигурации узла протокола в различных режимах.

Режим узла протокола "Данные"

Режим используется для отражения данных системы OpenSCADA на массивы регистров и битов ModBus. Общая конфигурация узла осуществляется во вкладке "Узел" (рис.2) параметрами:


Узлом в этом режиме обрабатываются следующие стандартные команды протокола ModBus:


Вкладка "Узел" страницы конфигурации узла протокола в режиме "Данные". (103 Kb)
Рис.2. Вкладка "Узел" страницы конфигурации узла протокола в режиме "Данные".

Для формирования таблицы отражения данных сети ModBus, а именно регистров и битов предусматривается вкладка "Данные" (рис.3). Вкладка "Данные" содержит таблицу параметров и программу обработки параметров с указанным языком программирования, доступным в системе OpenSCADA. Таблица содержит параметры со свойствами:


Все остальные параметры, не попавшие под вышеуказанные правила, являются внутренними, используются для различных промежуточных вычислений, обработки, преобразований и значения их могут быть оперативно проконтроллированы и изменены из этой таблицы в режиме исполнения.
  • Имя — Имя параметра, используется для именования связи.
  • Тип — Тип параметра из списка: "Вещественный", "Целый", "Логический" и "Строка". Для регистров и битов ModBus имеет смысл устанавливать "Целый" и "Логический" тип соответственно. Для регистров расширенных префиксами "f" и "s" нужно указывать типы "Вещественный" и "Строка", соответственно.
  • Связь — Признак того, что данный параметр должен связываться с атрибутом параметра подсистемы "Сбор данных". Указанные этим флагом связи устанавливаются во вкладке "Связи".
  • Значение — Исходное или текущее, если узел включен, значение параметра.

  • В таблице, по умолчанию, определяются несколько параметров специального назначения:


     (2 Kb) Поскольку в указателе расширенных типов регистров может использоваться недопустимый символ ',' то доступ к нему из процедуры можно осуществить только альтернативным способом, через объект "arguments":
    arguments["R_s10,5w"] = "9876543210";

    Вкладка "Данные", страницы конфигурации узла протокола в режиме "Данные". (117 Kb)
    Рис.3. Вкладка "Данные", страницы конфигурации узла протокола в режиме "Данные".

    Для указанных в качестве связей параметров можно установить связи только для выключенного узла протокола во вкладке "Связи" (рис.4).


    Вкладка "Связи" страницы конфигурации узла протокола в режиме "Данные". (103 Kb)
    Рис.4. Вкладка "Связи" страницы конфигурации узла протокола в режиме "Данные".

    Режим узла протокола "Шлюз узла"

    Режим используется для проброса запросов к отдельному устройству в другой сети ModBus из сети ModBus, для которой сконфигурирован данный узел. Общая конфигурация узла осуществляется во вкладке "Узел" (рис.5) параметрами:


    Вкладка "Узел" страницы конфигурации узла протокола в режиме "Шлюз узла". (96 Kb)
    Рис.5. Вкладка "Узел" страницы конфигурации узла протокола в режиме "Шлюз узла".

    Режим узла протокола "Шлюз сети"

    Режим используется для проброса запросов сети целиком в другую сеть ModBus из сети ModBus для которой сконфигурирован данный узел протокола. Т.е. запрос на устройство с любым адресом будет направляться в другую сеть, без переадресовки. Общая конфигурация узла протокола осуществляется во вкладке "Узел" (рис.6) параметрами:


    Вкладка "Узел" страницы конфигурации узла протокола в режиме "Шлюз сети". (90 Kb)
    Рис.6. Вкладка "Узел" страницы конфигурации узла протокола в режиме "Шлюз сети".

    2.3 Отчёт запросов ModBus

    Для возможности контроля и диагностики за корректностью осуществления запросов различными компонентами модулем предоставляется возможность включения отчёта запросов, проходящих через модуль протокола. Отчёт включается указанием ненулевого количества записей во вкладе "Отчёт" страницы модуля протокола (рис.7).


    Вклада "Отчёт" страницы модуля протокола. (111 Kb)
    Рис.7. Вклада "Отчёт" страницы модуля протокола.

    3. Модуль сбора данных

    Модуль сбора данных предоставляет возможность опроса и записи регистров и битов устройств посредством режима протоколов TCP, RTU, ASCII и команд запроса 0x01 — 0x06, 0x0F, 0x10.

    3.1. Контроллер данных

    Для добавления источника данных ModBus создаётся и конфигурируется контроллер в системе OpenSCADA. Пример вкладки конфигурации контроллера данного типа изображен на рис.8.


    Вкладка конфигурации контроллера. (126 Kb)
    Рис.8. Вкладка конфигурации контроллера.

    С помощью этой вкладки можно установить:

    3.2. Параметры

    Модуль сбора данных предоставляет два типа параметра: "Стандартный"(std) и "Логический"(logic). Дополнительными конфигурационными полями параметров данного модуля являются:

    Стандартный тип параметра(std)

    Главная страница конфигурации параметра стандартного типа представлена на рисунке 9.


    Вкладка конфигурации параметра стандартного типа. (99 Kb)
    Рис.9. Вкладка конфигурации параметра стандартного типа.

    Структура атрибута, в параметре списка атрибутов, записывается следующим образом: "{dt}:{numb}:{rw}:{id}:{name}".
    Где:

    dt — ModBus тип данных ("R"—регистр[3,6(16)], "C"—бит[1,5(15)], "RI"—регистр входа[4], "CI"—бит входа[2]);
    "R" и "RI" могут быть расширены суффиксами: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Bit5, "s"—Строка (размер по умолчанию 10 и до 100 регистров);
    numb — адрес ModBus устройства (десятичный, шестнадцатеричный, или восьмеричный) [0...65535];
    rw — режим чтения/записи ("r"—чтение; "w"—запись, "rw"—запись и чтение);
    id — идентификатор создаваемого атрибута;
    name — имя создаваемого атрибута.

    Примеры:

    "R:0x300:rw:var:Variable" — доступ к регистру;
    "C:100:rw:var1:Variable 1" — доступ к биту;
    "R_f:200:r:float:Float" — получить вещественное из регистров 200 и 201;
    "R_i4:400,300:r:int32:Int32" — получить int32 из регистров 400 и 300;
    "R_b10:25:r:rBit:Reg bit" — получить бит 10 из регистра 25;
    "R_s:15,20:r:str:Reg blk" — получить строку, блок регистров, из регистра 15 и размером 20.

    Строка, которая начинается с символа '#', считается комментарием и не обрабатывается.


    В соответствии с указанным списком атрибутов выполняется опрос и создание атрибутов параметра (рис.10).


    Вкладка атрибутов параметра стандартного типа. (77 Kb)
    Рис.10. Вкладка атрибутов параметра стандартного типа.

    Логический тип параметра(logic)

    Главная страница конфигурации параметра логического типа представлена на рисунке 11.


    Вкладка конфигурации параметра логического типа. (74 Kb)
    Рис.11. Вкладка конфигурации параметра логического типа.

    При формировании шаблона, для логического типа параметра данного контроллера, не нужно учитывать формат ссылки шаблона, поскольку он не используется и может быть опущен. Само же значение ссылки, при конфигурации шаблона (рис.12), записывается в формате: "{dt}:{numb}:{rw}".
    Где:

    dt — ModBus тип данных ("R"—регистр[3,6(16)], "C"—бит[1,5(15)], "RI"—регистр входа[4], "CI"—бит входа[2]);
    "R" и "RI" могут быть расширены суффиксами: "i2"—Int16, "i4"—Int32, i8-Int64, u2-UInt16, u4-UInt32, "f"—Float, "d"—Double, "b5"—Bit5, "s"—Строка (размер по умолчанию 10 и до 100 регистров);
    numb — адрес данных ModBus устройства (десятичный, шестнадцатеричный, или восьмеричный) [0...65535];
    rw — режим чтения/записи ("r"—чтение; "w"—запись, "rw"—запись и чтение);

    Примеры:

    "R:0x300:rw" — доступ к регистру;
    "C:100:rw" — доступ к биту;
    "R_f:200:r" — получить вещественное из регистров 200 и 201;
    "R_i4:400,300:r" — получить int32 из регистров 400 и 300;
    "R_b10:25:r" — получить бит 10 из регистра 25;
    "R_s:15,20:r" — получить строку, блок регистров, из регистра 15 и размером 20.

    Вкладка "Конфигурация шаблона" параметра логического типа. (68 Kb)
    Рис.12. Вкладка "Конфигурация шаблона" параметра логического типа.

    Модулем предусмотрена особая обработка ряда атрибутов шаблона:


    В соответствии с шаблоном, лежащим в основе параметра, мы получаем набор атрибутов параметра рис.13.


    Вкладка атрибутов параметра логического типа. (71 Kb)
    Рис.13. Вкладка атрибутов параметра логического типа.

    3.3. API пользовательского программирования

    В виду поддержки модулем параметров логического типа имеет смысл предоставление ряда функций пользовательского API для вызова из шаблона логического параметра.



    Объект "Контроллер" [this.cntr()]


    Объект "Параметр" [this]

    Ссылки

    Referring pages: Doc
    Doc/DAQ
    Doc/QuickStart
    Function
    Using/PLC/firmware


     
    There are no files on this page.[Display files/form]
    There is no comment on this page. [Display comments/form]