Modbus-устройства — различия между версиями

Материал из TekonWiki
Перейти к: навигация, поиск
 
(не показаны 32 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[Category:Интеграция]]
 
[[Category:Modbus]]
 
  
 +
== Введение ==
  
 +
Настройка Modbus  в  АСУД.SCADA может быть выполнена двумя способами:
  
 +
*регистрация устройства непосредственно  в Tekon OPC-сервер
 +
**это новый способ доступный с версии АСУД.SCADA 2.6.3
 +
**целесообразно использовать на всех новых объектах где добавляются Modbus-устройства
 +
**при этом варианте не используется БД original.gdb все настройки выполняются непосредственно в ОРС-сервере
 +
**поддерживается практически полный фунционал настройки, аналогичный ASUDBase
 +
***исключение - возможность выполнить запись в регистр по другому адресу (отличному от адреса чтения) доступна пока только при регистрации в ASUDBase 
 +
**опрос осуществляется непосредственно OPC-сервером, программа [[KCSLogger|KCSLogger]] не нужна 
 +
*регистрация устройства в программе ASUDBase
 +
**целесообразно использовать, если у вас уже есть Modbus-устройства, зарегистрированные в программе ASUDBase
 +
**опрос осуществляется программой [[KCSLogger|KCSLogger]] 
  
 +
Данная статья ориентируется на настройку Modbus-устройств непосредственно в OPC-сервере '''версии 2.7.2 (и выше) '''и не расматривает возможность настройки устройств в программе [[ASUDBase|ASUDBase]]
  
== Введение ==
+
Если, по каким-то причинам вы планируете выполнять настройку устройств в программе [[ASUDBase|ASUDBase]], либо  в АСУД.SCADA '''2.5.х и ранее''' , а также настройку Modbus c конценратором  [[КЦС-М|КЦС-М]] смотри [http://wiki.tekon.ru/index.php?title=Modbus-устройства&oldid=6438 предыдщую редакцию статьи].
 +
 
 +
АСУД-248 позволяет реализовать взаимодействие с '''ЛЮБЫМИ''' устройствами, поддерживающимипротокол Modbus.
 +
 
 +
Modbus-устройства могут быть подключены к концентраторам:
 +
 
 +
*КЦС-IPM / КУН-IPM
 +
*КЦС-М (есть ограничения в типе поддерживаемых устройств, подробнее см. [http://wiki.tekon.ru/index.php?title=Modbus-устройства&oldid=6438 тут])
 +
*напрямую по компьютерной сети.
 +
 
 +
[[КЦС-IPM|КЦС-IPM]] / [[КУН-IP|КУН-IP]]
 +
 
 +
Тракт передачи данных:
 +
 
 +
Устройство Modbus -- RS-232/485 --  [[КЦС-IPM|КЦС-IPM]] / [[КУН-IP|КУН-IP]] -- Компьютерная сеть -- [[АРМ-диспетчера|АРМ-диспетчера]]
 +
 
 +
{| class="wikitable"
 +
|-
 +
| Поддерживаются спецификации
 +
| Modbus-RTU, Modbus TCP
 +
|-
 +
| Чтение данных
 +
| одиночное, групповое
 +
|-
 +
| Запись данных
 +
| одиночная
 +
|-
 +
| Число подключаемых устройств
 +
| до 255* на каждом интерфейсе
 +
|}
 +
 
 +
 
 +
<nowiki>* - подробнее см. спецификацию подключаемого устройства и интерфейса подключения.</nowiki>
 +
 
 +
'''Внимание:'''
 +
 
 +
*Требуется наличие USB-ключа защиты АСУД.SCADA.<br/> В ключе защиты ПО АСУД.SCADA должно быть прописано число [[Драйвер_EXT-модуля|драйверов EXT-модуля]], соответствующее общему числу подключаемых приборов.<br/> Для тестового опроса устройства в конфигураторе ОРС-сервера драйвер не требуется.
 +
*Следует придерживаться следующего правила при адресации Modbus-устройств: устройства, подключаемые к одному IP-концентратору должны иметь уникальные адреса (RS-идентификаторы).
 +
 
 +
Прямое подключение по компьютерной сети
 +
 
 +
Тракт передачи данных:
 +
 
 +
Устройство Modbus с Ethernet -- Компьютерная сеть -- [[АРМ-диспетчера|АРМ-диспетчера]]
  
Описания настройки для АСУД.SCADA версии '''2.6.х'''
+
Остальное аналогично случая подключения к КЦС-IPM / КУН-IP, рассматриваемому далее
  
Для версий АСУД.SCADA '''2.5.х и ранее''' , а также для настройки конценратора&nbsp; [[КЦС-М|КЦС-М]]&nbsp;смотри [http://wiki.lan/index.php?title=Modbus-устройства&oldid=6438 предыдщую редакцию статьи].
+
== Modbus-протокол. Общая информация ==
  
 
Modbus - это коммуникационный протокол широко применяемый в промышленности. Он определяет правила пересылки данных при взаимодействии устройств.
 
Modbus - это коммуникационный протокол широко применяемый в промышленности. Он определяет правила пересылки данных при взаимодействии устройств.
Строка 25: Строка 79:
  
 
Протокол Modbus может работать поверх интерфейсов RS-485/RS-232, компьютерной сети и других.
 
Протокол Modbus может работать поверх интерфейсов RS-485/RS-232, компьютерной сети и других.
 
Следовательно, если известно, что устройство поддерживает протокол Modbus следует уточнить, какие физические интерфейсы есть у устройства и поддерживаются ли они в АСУД-248.
 
  
 
С точки зрения доступа к данным устройство Modbus представляет собой таблицу, примерно следующего вида
 
С точки зрения доступа к данным устройство Modbus представляет собой таблицу, примерно следующего вида
Строка 60: Строка 112:
 
**W - параметр можно записывать  
 
**W - параметр можно записывать  
 
**Целое число - параметр представляет собой целое число  
 
**Целое число - параметр представляет собой целое число  
**Целое число * 10 - параметр следует разделить на 10 перед отображением в SCADA
+
**Целое число * 10 - параметр следует разделить на 10&nbsp;для получения реального значения
 
**Дробное число - параметр представляет собой дробное число   
 
**Дробное число - параметр представляет собой дробное число   
 
*Параметр - описание параметра  
 
*Параметр - описание параметра  
Строка 70: Строка 122:
 
  Без наличия таблицы настроить устройство не получится.
 
  Без наличия таблицы настроить устройство не получится.
  
Для некоторых типов Modbus-устройств, например: свободно программируемых контроллеров, таблица может зависеть от проекта, зашитого в контроллер. Т.е. может быть сформирована в штатном ПО только после создания проекта (см. например [[PIXEL|PIXEL]]).
+
Для некоторых типов Modbus-устройств, например: свободно программируемых контроллеров, таблица может зависеть от проекта, зашитого в контроллер.<br/> Т.е. может быть сформирована в штатном ПО контроллера только после создания файла-проекта (см. например [[PIXEL|PIXEL]]).
  
== Modbus и АСУД-248 ==
+
Все регистры Modbus-устройства доступные на чтение / запись условно хранятся в 4-х таблицах:
 
+
АСУД-248 позволяет реализовать взаимодействие с устройствами по протоколу Modbus.
+
 
+
Modbus-устройства могут быть подключены к концентраторам:
+
 
+
*КЦС-IPM / КУН-IPM
+
*КЦС-М (есть ограничения в типе поддерживаемых устройств, подробнее см. далее)
+
*напрямую по компьютерной сети.
+
 
+
=== [[КЦС-IPM|КЦС-IPM]] / [[КУН-IP|КУН-IP]] ===
+
 
+
Тракт передачи данных:
+
 
+
Устройство Modbus -- RS-232/485 --  [[КЦС-IPM|КЦС-IPM]] / [[КУН-IP|КУН-IP]] -- Компьютерная сеть -- [[АРМ-диспетчера|АРМ-диспетчера]]
+
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
| Поддерживаются спецификации
+
! Таблица
| Modbus-RTU, Modbus TCP
+
! Функция чтения
 +
! Тип данных
 +
! Разрешены Чтение (R) / Запись (W)
 +
! Функция записи
 
|-
 
|-
| Чтение данных
+
| Регистры флагов (Coils)
| одиночное, групповое
+
| style="text-align: center;" | 0х1
 +
| style="text-align: center;" | 0 или 1
 +
| style="text-align: center;" | R / W
 +
| style="text-align: center;" | 0x5
 
|-
 
|-
| Запись данных
+
| Дискретные входы (Discrete Inputs)
| одиночная
+
| style="text-align: center;" | 0х2
 +
| style="text-align: center;" | 0 или 1
 +
| style="text-align: center;" | R
 +
| style="text-align: center;" | -
 
|-
 
|-
| Число подключаемых устройств
+
| Регистры хранения (Holding Registers)
| до 255* на каждом интерфейсе
+
| style="text-align: center;" | 0х3
|}
+
| числовой/строковый
 +
| style="text-align: center;" | R / W
 +
| style="text-align: center;" |
 +
0x10 или 0х6
  
&nbsp;
+
(см. параметр AW далее)
<nowiki>
+
* - подробнее см. спецификацию подключаемого устройства и интерфейса подключения.
+
</nowiki>
+
  
'''Внимание:'''
+
|-
 +
| Регистры ввода (Input Registers)
 +
| style="text-align: center;" | 0х4
 +
| числовой/строковый
 +
| style="text-align: center;" | R
 +
| style="text-align: center;" | -
 +
|}
  
*Требуется наличие USB-ключа защиты АСУД.SCADA. Опрос Modbus-устройств осуществляется программой [[KCSLogger|KCSLogger]]. В ключе защиты ПО АСУД.SCADA должно быть прописано число [[Драйвер_EXT-модуля|драйверов EXT-модуля]], соответствующее общему числу подключаемых приборов.
+
Каждый регистр:
*Следует придерживаться следующего правила при адресации Modbus-устройств: устройства, подключаемые к одному IP-концентратору должны иметь уникальные адреса (RS-идентификаторы).
+
*С помощью утилиты [[KCS_DEMO.EXE|KCS_DEMO.EXE]] существует возможность в тестовом режиме проверить связь с Modbus-устройством (наличие USB-ключа при этом не требуется). При первом подключении устройства к АСУД-248 настоятельно рекомендуется воспользоваться данной утилитой.
+
*Начиная с версии 1.5-61 в программу ASUDBase также встроена функция тестового опроса Modbus-устройства (подробнее см. далее).
+
  
=== Прямое подключение по компьютерной сети ===
+
*это ячейка размером в 2-байта.
 +
*имеет уникальный адрес.
  
Тракт передачи данных:
+
В зависимости от типа Modbus-устройва адресное пространство таблиц может быть объединено, т.е.&nbsp; регистр с адресом 0 в таблице HoldReg, аналогичен (полностью соответствует) адресу 0 в таблице InpReg (это можно понять либо из документации, либо при тестовом опросе устройства).
  
Устройство Modbus с Ethernet -- Компьютерная сеть -- [[АРМ-диспетчера|АРМ-диспетчера]]
+
Если вы затрудняетесь с тем, какой тип регистра указывать - используйте HoldReg.
  
Остальное аналогично случая подключения к КЦС-IPM / КУН-IP
+
Иногда в документации на устройство можно увидеть, что адреса регистров&nbsp; обозначаются 6-ти значными числами: логическими адресами.&nbsp;
  
== Настройка ПО АСУД.SCADA ==
+
Старшая цифра логического адреса при этом обозначает тип регистра, а остальные цифры - физический адрес регистра.
  
Настройка программного обеспечения АСУД.SCADA может быть выполнена тремя способами:
+
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 500px;"
 
+
'''Вариант 1&nbsp;(простой)''':
+
 
+
Очень быстрый вариант. Однако не позволяет выполнить отображение в SCADA&nbsp;аварийных событий с помощью примитивов типа Дискретный датчик.
+
 
+
Может быть применен, только если необходимо визуалировать в SCADA простые числовые данные или режим работы устройства (например: в работе, останов и т.п.)&nbsp;&nbsp;в табличном виде.
+
 
+
*регистрации Modbus-устройства в программе ASUDBase;
+
*настройка карты АСУД.SCADA - примитивы:
+
**[[Дополнительные_примитивы|Прибор учета]] 
+
 
+
'''Вариант 2 (тоже простой)''':
+
 
+
*регистрации Modbus-устройства в программе ASUDBase;
+
*добавить драйвер '''DA \ Database''' в&nbsp;[[Tekon_OPC-сервер|Tekon OPC-сервер]]
+
*настройка карты АСУД.SCADA - примитивы
+
**дискретный датчик - сигналы аварии (неисправностей);
+
**цифровой индикатор - данные температуры, давления;
+
**текстовое поле - информация о режимах работы оборудования, возможность записи значений в Modbus устройство. 
+
 
+
Ознакомьтесь с информацией по работе драйвера&nbsp; '''DA \ Database''' в&nbsp;[[Tekon_OPC-сервер|Tekon OPC-сервер]]
+
 
+
'''Вариант 3&nbsp;(устаревший, использовать не рекомендуется)''':
+
 
+
*регистрации Modbus-устройства в программе ASUDBase;
+
*настройке OPC-сервера: устройство Контейнер оборудования + Прибор учета;
+
*настройка карты АСУД.SCADA - примитивы
+
**дискретный датчик - сигналы аварии (неисправностей);
+
**цифровой индикатор - данные температуры, давления;
+
**текстовое поле - информация о режимах работы оборудования, возможность записи значений в Modbus устройство.
+
 
+
== Регистрация Modbus-устройств в программе ASUDBase ==
+
 
+
Настройка регистров Modbus-устройства осуществляется с помощью программы ASUDBase (версии 1.5-14 и выше).
+
 
+
Откройте окно Настройка\Регистрация и введите данные подключения Modbus-устройства
+
<center>
+
[[File:Mb abase10.JPG|600px|Регистрация устройства Modbus]]
+
 
+
Рисунок - Регистрация устройства Modbus
+
</center>
+
*Номер концентратора указать 901...999, 1901...1999, 2901...2999, ...
+
 
+
Или номер будет проставлен автоматически после установки флажка "IP-соединение". Номер должен быть уникальным для каждого добавляемого устройства (фактически этот номер используется лишь для идентификации Modbus-устройства в базе данных).
+
 
+
*Прибор - выбрать тип устройства: Modbus RTU или Modbus TCP, в зависимости от протокола реализуемого устройством.
+
 
+
*Modbus из выпадающего списка выбрать тип подключаемого устройства (если устройство еще не было добавлено - оставить поле пустым).
+
 
+
Также следует указать
+
 
+
*Мастер устройство (КЦС-IPm, КУН-IPm, прямое IP),
+
*IP-адреса
+
*Порт
+
**5000 - если устройство подключается через КЦС-IPm, КУН-IPm.
+
**502 (как правило) - если устройство подключается напрямую по IP-сети. 
+
*Параметры RS-интерфейса, к которому подключено устройство (тип, номер, скорость, четность и т.п.). Для устройств, подключаемых напрямую по IP-сети оставить без изменений.
+
*RS-идентификатор - номер (идентификатор) устройства в RS-сети, указанный в настройках устройства.
+
*Интервал опроса - период опроса устройства в минутах (0 - опрашивать максимально быстро).
+
*Читать архив - установить все флажки - резервный параметр, в настоящее время не используется.
+
 
+
Нажать кнопку "Добавить". Слева появится запись о регистрации устройства.
+
 
+
Устройство добавляется с одной системой "Отопление" (по умолчанию).
+
 
+
=== Журнал событий в SCADA&nbsp; ===
+
 
+
На этапе настройки, важно определить способ адресации сигналов Modbus-устройства в АСУД.SCADA, т.е. то как эти сигналы будут отбражаться в Журнале Событий SCADA.
+
 
+
Для этого важны два параметра:&nbsp;
+
 
+
*Адрес установки устройства&nbsp;
+
*Названия события (неисправности)&nbsp;
+
 
+
Если с Modbus-устройства вы просто пробрасываете числовые значения, которые необходимо лишь визуализировать в SCADA в виде таблицы (без задействования механизма уведомлений, журналов событий),&nbsp; то способ адресации вам не важен - все рассуждения далее можете пропуститью.&nbsp;
+
 
+
==== Адрес установки ====
+
 
+
Если вы настраиваете систему в рамках одного здания, то может быть удобно в качестве адреса указывать названия помещений. Для этого следует:
+
 
+
*помещение указывать, как название Улицы
+
*дом указать - 0
+
 
+
==== <gallery>
+
Database address1.PNG
+
Database address2.PNG
+
</gallery>Название&nbsp;события (неисправности)&nbsp; ====
+
 
+
По умолчанию [[Tekon_OPC-сервер|OPC-сервер]] (при использовани драйвера DA \ Database) в качестве Тега и&nbsp;названия события использует поле "Сокращение".
+
 
+
Однако, начиная с версии 2.6.0,&nbsp; рекомендуется в настройках OPC-сервера установить флаг "Улучшения Modbus", и тогда:&nbsp;
+
 
+
*Тег - это Сокращение (max 20 символов)
+
*Название события - это поле Название (max 40 символов)
+
 
+
Может быть удобно, чтобы к названию события было добавлена название Системы, указанное для контроллера. Т.е. не&nbsp; "Состояние Насоса", а "Вентиляция к1.Состояние насоса".&nbsp; В этом случае следует&nbsp;зарегистрировать&nbsp;новую систему в окне&nbsp; Настройка \ Специальные системы, например:&nbsp; "Вентиляция к1". После этого измените название системы Отопление, добавленного устройства на&nbsp; "Вентиляция к1".&nbsp; В последствии в&nbsp;[[Tekon_OPC-сервер|Tekon OPC-сервер]]&nbsp; в настройках драйвера DA \ Database следует указать флаг: "Добавлять название системы к тегу".&nbsp;
+
 
+
Далее следует по необходимости добавить новый тип Modbus устройства.
+
 
+
 
+
 
+
=== Регистрация нового типа Modbus-устройства ===
+
 
+
Нажать на кнопку "+" справа от поля Modbus. В открывшемся окне следует указать в левом нижнем углу общие параметры устройства.&nbsp;
+
 
+
[[File:Mb abase 01.PNG|frame|center|Общие настройки устройства Modbus]]
+
 
+
Настройки устройства - следует указать, исходя из описания в документации на устройство
+
 
+
*Название прибора - название устройства (любое название). '''Не следует '''использовать в названии знак&nbsp; =.
+
*Базовый регистр - как правило = 0 (реже 1)&nbsp; - это сдвиг указанных в таблице Адресов. Т.е. если регистр равен 1, то реальный запрашиваемый адрес с контроллера =&nbsp; (Адрес - 1)
+
**Если первый регистр в документации на устройство имеет адрес 0 - то Базовый регистр точно равен 0
+
**В противном случае, см. документацию&nbsp; 
+
*Читать группу элементов - можно ли читать более 1 регистра за один запрос (0 - можно читать сколько угодно, >0 - максимальное число регистров на чтение в одном запросе)
+
**Этот параметр также должне быть отражен в документации, чем больше регистров можно читать в одном запросе - тем быстрее опрашивается устройтсво 
+
*Разрешить при чтении пропуски в группе - можно ли читать несколько регистров за один запрос, если они расположены не подряд.
+
**Этот параметр должен быть отражен в документации, иначе -&nbsp; пропуски запрещены. 
+
 
+
Если вы затрудняетесь с определением данных параметров, укажите:
+
 
+
*Базовый регистр = 0
+
*Читать группу = 1
+
*Пропуски = запрещены.
+
 
+
Вы можете поэкспериментировать с данными настройками с помощью утилиты [[KCS_DEMO.EXE|kcs_demo]]
+
 
+
Если у вас есть *.mbs файлы импорта настроек Modbus-устройства, загруженные с сайта www.tekon.ru вы можете добавить их с помощью кнопки "Импорт".
+
 
+
Далее следует закрыть окно. При этом происходит создание (инициализация) устройства в БД.
+
 
+
Выбрать название вновь созданного устройства в выпадающем списке поля Modbus и нажать кнопку Изменить.
+
 
+
[[File:Mb abase 02.PNG|frame|center|Привязка устройства Modbus к концентратору]]
+
 
+
После этого следует нажать кнопку "..." справа от поля Modbus и повторно перейти к настройке Modbus-устройства.
+
 
+
[[File:Mb abase 03.PNG|center|850px|Настройка устройства Modbus]]
+
 
+
Серым подсвечены колонки относящиеся к настройкам Modbus-протокола, остальные колонки относятся к настройкам АСУД.
+
 
+
Доп. параметры настройки:&nbsp;
+
 
+
*Адреса в HEX - установить флаг, если адреса регистров в документации указаны в 16-ричной кодировке
+
*Автозаполнение (новой строки таблицы) - при установке флага некоторые поля при добавлении новой записи заполняются на основе предыдущих введенных значений.
+
*Скрыть дополнительные поля - часть полей настройки будет скрыто: множитель, параметры настройки возможности записи значения из SCADA в Modbus-устройство
+
*Экспорт - экспортировать данные настройки в файл для последующего использования на другом объекте.
+
*Импорт - импортировать данные настройки из файла. Кнопка активна только при добавлении нового Modbus-устройства (была нажата кнопка "+").
+
 
+
&nbsp;
+
 
+
==== Карта Modbus-регистров. Настройки протокола ====
+
 
+
 
+
===== Основные настройки =====
+
 
+
Modbus-настройки (см. описание на подключаемое Modbus-устройство).
+
 
+
Все значение устройства доступные на чтение / запись хранятся в 4-х таблицах:
+
 
+
{| class="wikitable"
+
 
|-
 
|-
! Таблица
+
! scope="col" | Старшая цифра логического адреса
! Функция чтения
+
! scope="col" | Начальный логический адрес
 +
! scope="col" | Тип данных
 
|-
 
|-
| Регистры флагов (Coils)
+
| 0
| 0х1
+
| 000001
 +
| Coil
 
|-
 
|-
| Дискретные входы (Discrete Inputs)
+
| 1
| 0х2
+
| 100001
 +
| DiscInp
 
|-
 
|-
| Регистры хранения (Holding Registers)
+
| 3
| 0х3
+
| 300001
 +
| InpReg
 
|-
 
|-
| Регистры ввода (Input Registers)
+
| 4
| 0х4
+
| 400001
 +
| HoldReg
 
|}
 
|}
  
Каждый регистр - это ячейка размером в 2-байта. Каждый регистр - имеет уникальный адрес.
+
Как правило, при таком указании логических адресов считается что базовый регистр устройства = 1&nbsp; (т.е. из адреса еще нужно будет вычесть единицу)
 
+
В зависимости от типа Modbus-устройва адресное пространство таблиц может быть объединено, т.е. адресом 0 в таблице HoldReg, аналогичен (полностью соответствует) адресу 0 в таблице InpReg.
+
 
+
Если вы затрудняетесь с тем, какой тип регистра указывать - используйте HoldReg.
+
  
'''Регистр''' - тип регистра, выпадающее меню
+
Например: логический адрес = 40568
  
  - Coils  — однобитовый тип, доступен на чтение и запись (R/W).
+
*Тип регистра 4 =&nbsp;HoldReg  
  - DiscInp — однобитовый тип, доступен '''только''' на чтение (R).
+
*Физический адрес регистра = 568 - 1 = 567
  - HoldReg — 16-битовый тип, доступен на чтение и запись (R/W).
+
  - InpReg  — 16-битовый тип, доступен '''только''' на чтение (R).
+
  
'''Внимание!'''  
+
'''Замечание!'''<br/> При регистрации устройства единицу все время вычитать не нужно, вы просто указываете в настройках устройства значение базового регистра = 1.
Если вы планируете выполнять запись значения в регистр на устройстве,
+
вы должны выставить значение поля AW в 1 (подробнее далее).
+
  
'''Адрес''' - адрес регистра (в десятичной системе счисления)
+
Для определения значения, хранящегося в регистре, необходимо, исходя из документации, корректно указать&nbsp;тип данных.
  
'''Тип данных''' - тип данных хранящихся в регистре (и их размер), исходя из документации, выпадающее меню
+
Поддерживаются следующие типы данных:
  
 
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 500px;"
 
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 500px;"
Строка 339: Строка 227:
 
| Unsigned word
 
| Unsigned word
 
| 1
 
| 1
| 0 .. 65535
+
| Целые числа<br/> 0 .. 65535
 
|-
 
|-
 
| CHAR
 
| CHAR
Строка 346: Строка 234:
  
 
| 1
 
| 1
| -128..127
+
| Целые числа<br/> -128..127
 
|-
 
|-
 
| SHORT
 
| SHORT
 
| Signed word,<br/> Small Integer
 
| Signed word,<br/> Small Integer
 
| 1
 
| 1
| -32 768 ... 32 767
+
| Целые числа<br/> -32 768 ... 32 767
 
|-
 
|-
 
| FLOAT
 
| FLOAT
Строка 361: Строка 249:
 
| Unsigned long
 
| Unsigned long
 
| 2
 
| 2
| 0..4294967295
+
|  
 +
Целые числа
 +
 
 +
0..4294967295
 +
 
 
|-
 
|-
 
| INTEGER
 
| INTEGER
 
| Signed long
 
| Signed long
 
| 2
 
| 2
| -2147483648..2147483647
+
|  
 +
Целые числа -2147483648..2147483647
 +
 
 
|-
 
|-
 
| BIT4
 
| BIT4
Строка 390: Строка 284:
 
| Big Integer
 
| Big Integer
 
| &nbsp;
 
| &nbsp;
| -2^63 ... 2^63-1
+
|  
 +
Целые числа
 +
 
 +
-2^63 ... 2^63-1
 +
 
 
|}
 
|}
  
 
  1 регистр  = 16 бит
 
  1 регистр  = 16 бит
 
  2 регистра = 32 бита
 
  2 регистра = 32 бита
 +
4 регистра = 64 бита
  
'''Блок/Бит'''
+
Также важен формат представления числа в регистре. Он определяет порядок перестановки полу-байт в регистрах.
  
*для типа данных BIT&nbsp;указывается анализируемый бит (от 1 до 16) в слове. Бит 1 - младший, 16 - старший.
+
Обычное значение поля Формат:
*для типа данных BIT4 указывается анализируемый бит (от 1 до 32) в слове. Бит 1 - младший, 32 - старший.
+
*для типа STRING - размер блока данных в байтах (обычно размер строки в документации на устройство указывается кратным двум байтам).
+
*для других типов - не используется.
+
  
'''Формат''' - формат представления числа в регистре. Определяет порядок перестановки полу-байт в регистрах.
+
*Для типов данных в 1 регистр - 1
 +
*Для типов данных в 2 регистра - 4 (или значение 2)
 +
*Для типов в 4 регистра - 14 (или значение 12)&nbsp;<br/> Для данного типа существуют дополнительные значения формата с 11 до 14:
 +
**формат с 1 до 4 - дополнительно меняют местами левые-правые 2-регистра
 +
**формат с 11 до 14 - аналог 1 - 4, но не выполняется перестановка.  
  
Обычное значение поля Формат:
+
Если при успешном&nbsp;опросе устройства, вы получаете в регистрах непонятные значения, попробуйте поменять Формат.
  
*Для типов данных в '''1 регистр - 1'''
+
Комментарий по полю Формат (''при первом чтении данный раздел можно пропустить'').
*Для типов данных в '''2 (4) регистра - 4'''.
+
*Для типов в '''4 регистра''' существуют дополнительные значения формата с 10 до 14, которые соответствуют значениям формата от 1 до 4, но дополнительно меняют местами левые-правые 2-регистра.
+
 
+
Некоторые устройства могут использовать другие форматы. Если при чтение регистра, вы получаете ошибочные значения, попробуйте поменять Формат.
+
  
 
Рассмотрим пример влияния значения поля Формат на вычисленный результат (см. программу [[KCS_DEMO.EXE|KCS DEMO]]).
 
Рассмотрим пример влияния значения поля Формат на вычисленный результат (см. программу [[KCS_DEMO.EXE|KCS DEMO]]).
  
Предположим мы считываем целочисленное значение типа INTEGER, которое хранится в 2-х регистрах по начальному адресу, например: 2054. Пусть нам известно, что значение = 0х12345678 (значение в 16-ричной кодировке).
+
Предположим мы считываем целочисленное значение типа INTEGER (целое число, занимающее 2 регистра = 4 байта данных), по начальному адресу, например: 2054 (0x0806). Пусть нам известно, что в этом регистре должно хранится значение = 0х12345678 (значение в 16-ричной кодировке или 305419896 в привычной нам 10-ричной кодировке,&nbsp; преобразование вы можете выполнить в калькуляторе Windows).
  
 
  Запрос данных (в шестнадцатиричной  кодировке):  
 
  Запрос данных (в шестнадцатиричной  кодировке):  
Строка 430: Строка 326:
 
*0х12 0х34 - первый регистр ( адрес 2054); байты 3, 2  
 
*0х12 0х34 - первый регистр ( адрес 2054); байты 3, 2  
 
*0х56 0х76 - второй регистр ( адрес 2055); байты 1, 0  
 
*0х56 0х76 - второй регистр ( адрес 2055); байты 1, 0  
 
&nbsp;
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Строка 439: Строка 333:
 
! Правило перестановки
 
! Правило перестановки
 
! Результат
 
! Результат
 +
! Комментарий
 
|-
 
|-
 
| 12 34 56 78
 
| 12 34 56 78
Строка 444: Строка 339:
 
| 1_0_3_2
 
| 1_0_3_2
 
| 0x56781234
 
| 0x56781234
 +
| &nbsp;
 
|-
 
|-
 
| 12 34 56 78
 
| 12 34 56 78
Строка 449: Строка 345:
 
| 0_1_2_3
 
| 0_1_2_3
 
| 0x78563412
 
| 0x78563412
 +
| обратный порядок<br/> младший байт вперед
 
|-
 
|-
 
| 12 34 56 78
 
| 12 34 56 78
Строка 454: Строка 351:
 
| 2_3_0_1
 
| 2_3_0_1
 
| 0x34127856
 
| 0x34127856
 +
| &nbsp;
 
|-
 
|-
 
| 12 34 56 78
 
| 12 34 56 78
Строка 459: Строка 357:
 
| 3_2_1_0
 
| 3_2_1_0
 
| 0x12345678
 
| 0x12345678
 +
| прямой порядок<br/> старший байт вперед
 
|}
 
|}
  
 
Т.е. для регистров устройства данного типа корректное значение формата - 4.
 
Т.е. для регистров устройства данного типа корректное значение формата - 4.
  
Предположим мы считываем целочисленное типа WORD, которое хранится в 1-м регистре по адресу, например: 2. Пусть мы значение что значение - 0х08.
+
Предположим мы считываем целочисленное типа WORD, которое хранится в 1-м регистре (2 байта данных) по адресу, например: 2. Пусть мы значение что значение - 0х08.
  
 
  Запрос данных (в шестнадцатиричной  кодировке):  
 
  Запрос данных (в шестнадцатиричной  кодировке):  
Строка 492: Строка 391:
 
Т.е. для регистров устройства данного типа корректное значение формата - 1.
 
Т.е. для регистров устройства данного типа корректное значение формата - 1.
  
&nbsp;
+
== Регистрация Modbus-устройств в Tekon OPC-сервер ==
  
===== Дополнительные настройки =====
+
Добавьте Modbus-устройство в конфигурацию OPC-сервера.<br/> Если Modbus-устройство было зарегистрировано в программе ASUDBase, вы можете создать конфигурационный файл сервера, нажав в окне настройки Modbus-устройства в ASUDBase кнопку Экспорт.
  
Modbus-настройки дополнительные (в большинстве случаев можно оставить значение по умолчанию) - отображаются при снятом флажке "Скрыть дополнительные поля"
+
Если устройство подключено
  
'''Множитель''' - множитель значения считанного из регистра.
+
*напрямую по компьютерной сети
 +
**Добавьте DA \ Компьютерная сеть \ Modbus TCP 
 +
*через КЦС-IPM \ КУН-IPM
 +
**Добавьте DA \ Концентратор&nbsp;&nbsp;КЦС-IPM или&nbsp;&nbsp;КУН-IPM \ Modbus RTU 
 +
*через сторонний конвертер интерфейса&nbsp;
 +
**Добавьте DA \ IP-RS преобразователь&nbsp;\ Modbus RTU 
  
Учитывается для всех типов кроме BIT, BIT4, STRING
+
[[File:Modbus opc 1.PNG|center|250px|Modbus opc 1.PNG]]
  
После чтения регистра: 
+
Выполните двойной клик на созданном устройстве.
    Значение в SCADA  = значение регистра * множитель
+
  
Перед записью регистра:  
+
[[File:Modbus OPC 1 1.PNG|center|Modbus OPC 1 1.PNG]]Нажмите Да, если вы создаете новое устройство с новым описанием регистров. Нажмите Нет - если вы создаете устройство, для которого ранее уже создавали таблицу регистров.&nbsp;
    Значение регистра  = Значение SCADA / множитель
+
  
Минимальное значение Множителя 0,0001.
+
Если вы выбрали Да - следует указать в латинице имя устройства,&nbsp;например: pixel
  
'''Внимание!''' При указании в качестве Множителя значений 2, 3, 4, 5, 6, 7, 8, 9 - реальное значение множителя определяется по формуле
+
Далее выберите в свойствах созданный ранее конфигурационный файл устройства и нажмите два раза на само устройство, для того, чтобы открыть окно настройки.
  
Множитель = 1 / (2 ^ Указанный_множитель)
+
[[File:Modbus OPC 2.PNG|center|750px|Modbus opc 2.PNG]]
  
'''Адрес W''' - адрес записи. Следует указать, если запись необходимо произвести в регистр по адресу отличному от адреса чтения.
+
На рисунке отображен пример окна настройки устройства, подключенного к концентратору КЦС-IPM, КУН-IPM.
  
'''Параметры **''' - набор параметров, указываемых в случае, если перед записью регистра, следует выполнить запись значения в другой или в этот же регистр. Множитель при этом не используется. После записи первого значения выполняется пауза в 1000 мс. перед записью основного значения.
+
Для каждой ячейки доступна информационная подсказка (хинт).
  
*
+
Строки имеют следующий смысл:
**
+
***Адрес - адрес регистра.
+
***Тип данных - тип данных регистра.
+
***Формат - формат представления числа в регистре.
+
***Значение - значение для записи.   
+
  
  Это может быть полезно, если, например: перед изменением параметра следует указать, пароль (как в контроллерах ОВЕН ТРМ-133М при изменении текущего состояния). Или если, например: необходимо выполнить запись фронтом, т.е. перед записью 1 следует записать 0, после этого записать 1.
+
#название столбцов таблицы
+
#тип протокола устройства [RTU, TCP]<br/> Если вы подлючаете устройство по RS-485, то почти всегда это RTU-протокол. Если по компьютерной сети - TCP.
 +
#поля конфигурации&nbsp;устройства
 +
##0 - базовый регистр, указывает сдвиг регистров при запросе (обычно 0 или 1)  
 +
##1 - количество регистров читаемых в одном запросе, по умолчанию 1.<br/> Большее значение параметра увеличивает скорость опроса устройства.&nbsp;<br/> Но имеет смысл, если запрашиваемые регистры идут подряд.<br/> Если в документации не указано сколько можно читать - попробуйте указать 10 и провести тестовой опрос устройства.<br/> Если ошибок нет - оставляйте указанное значени. Иначе верните значение 1.
 +
##0 - не разрешать пропуски при чтении. Допустимые значения [0,1]<br/> Некоторые устройства позволяют опрашивать несколько регистров, если они расположены неподряд.<br/> Это также увеличивает скорость опроса устройства. 
 +
#следующие строки - это собственно таблица&nbsp;адресов&nbsp;Modbus-регистров из документации на устройство
  
'''Sleep''' - ожидание в мс., указывается в случае если необходима задержка после записи регистра перед следующей операцией чтения.
+
Для редактирования таблицы следует нажать&nbsp; Редактировать.&nbsp;
  
'''AW''' - разрешена ли запись регистра (1 -да, 0 - нет). Актуально '''только''' для регистров типа Coils / HoldReg.
+
При этом по правому клику мышки, доступно меню добавления новых строк.
  
'''MinWV, MaxWV''' - интервал допустимых значений для записи (если MinWV=MaxWV=0 - проверка значений не выполняется).
+
Описание столбцов настройки:
  
&nbsp;
+
*Регистр - тип регистра из выпадающего&nbsp;меню
 +
*Адрес&nbsp;- адрес регистра (в десятичной системе счисления)<br/> Вы можете указывать адрес в 16-ричной кодировке, для этого добавьте в начале знак $. Например: $10, $FA и т.п.
 +
*Тип данных - тип указанный в документации на устройство
 +
*Блок/Бит
 +
**для типа данных BIT&nbsp;указывается анализируемый бит (от 1 до 16) в слове. Бит 1 - младший, 16 - старший.
 +
**для типа данных BIТ4 указывается анализируемый бит (от 1 до 32) в слове. Бит 1 - младший, 32 - старший.
 +
**для типа STRING - размер блока данных в байтах (обычно размер строки в документации на устройство указывается кратным двум байтам).
 +
**для других типов данных&nbsp;- не используется. 
 +
*Формат - формат данных (подробнее см. ранее)
 +
*Множитель - множитель данных, по умолчанию 1.
  
===== Тип&nbsp;BIT. Дискретные сигналы. Битовые маски ошибок =====
+
Множитель учитывается для всех типов кроме BIT, BIT4, STRING
<pre>Для версии АСУД.SCADA 2.6.0 и выше</pre>
+
  
По умолчанию, все регистры Modbus-устройства транслируются в SCADA&nbsp; через драйвер&nbsp;'''DA \ Database''', как числовые значения.
+
После чтения регистра: 
 +
    Значение SCADA = значение регистра * множитель
  
&nbsp;Однако, начиная с версии 2.6.0, вы можете указать, что сигнал должен быть представлен OPC-сервером, как Дискретный&nbsp;датчик.&nbsp; Для этого, вы указывете&nbsp; в&nbsp;'''DA \ Database&nbsp; '''настройку "Улучшения Modbus" - Да, в при регистрации Modbus-устройства в ASUDBаse,&nbsp;&nbsp;что тип данных требуемых регистров:&nbsp;
+
Перед записью регистра:  
 +
    Значение регистра  = Значение SCADA / множитель
  
*BIT
+
Минимальное значение Множителя 0,0001.<br/> '''Внимание!'''<br/> При указании в качестве Множителя значений 2, 3, 4, 5, 6, 7, 8, 9 - реальное значение множителя определяется по формуле
*BIT4
+
  
при этом&nbsp;'''не разрешена''' запись в регистр, т.е значение поля AW&nbsp; = 0. Это правило действует для всех банков:Coil, DisInp, HoldReg, InpReg.
+
Множитель = 1 / (2 ^ Указанный_множитель)
  
Если вы не хотите, чтобы сигнал был представлен, как дискретный датчик, вам следует:
+
*AW&nbsp; - данный параметр разрешает запись значений в регистр, например для изменения уставок устройства или управления устройством из SCADA.&nbsp;<br/> Актуально '''только''' для регистров типа Coils / HoldReg.<br/> Возможные значения:<br/> 0 - запись в регистр запрещена<br/> 1 - запись в регистр разрешена. Для регистров HoldReg будет использоваться функция $10&nbsp;для записи<br/> 6 - для регистров HoldReg будет использоваться функция $06 для записи<br/> 10 -&nbsp; аналог значения 1. Для регистров HoldReg будет использоваться функция $10&nbsp;для записи
 +
*Тег - имя тега, которое будет отображено в SCADA.<br/> Имя тега должно быть уникально в рамках устройства.<br/> В имени Тега не следует использовать символ точка.
 +
*Название - наименование сигнала (неисправности), которое будет отображаться в журнале событий в программе SCADA.
  
*изменить тип с BIT на Word&nbsp; - если регистр может иметь только значения 0,1&nbsp; (и не представляет собой битовую маску)
+
Для сохранения изменений, нажать кнопку Сохранить.
*изменить тип с BIT4 на DWord&nbsp; - если регистр может иметь только значения 0,1&nbsp; (и не представляет собой битовую маску)
+
*в противном случае добавить к полю сокращение&nbsp; "_$", т.е. например: вместо&nbsp; "Tag1" указать "Tag1_$"
+
  
[[File:Asudbase modbus sens1.PNG|center|450px|Asudbase modbus sens1.PNG]]В данном примере как дискретный сигнал в SCADA будет представлен только регистр Coil адрес 1.&nbsp;
+
Замечание!<br/> Поле Версия устройства - не используется (всегда отображает ---)
  
Если регистр представляет собой битовую маску ошибок, как его регистрировать?&nbsp;
+
=== Тестовый опрос устройства&nbsp; ===
  
В данном случае надо понять, вам нужны в SCADA все ошибки по отдельности (отдельными примитивами Авария)&nbsp;или только сигнал обощенной ошибки с описанием активных ошибок?&nbsp;
+
Для выполнения тестового опроса устройства, сохраните настройки и нажмите кнопку&nbsp;Опросить. Будет&nbsp;выполнен&nbsp;опрос устройства с отображением полученных данных в столбце Значение
  
Если все по отдельности - то выделяете каждую ошибку, как отдельную запись
+
Кнопка Лог&nbsp; - отобразит&nbsp;лог последнего обмена&nbsp; данными с устройством. Расшировку кодов возможных ошибок см. в описании программы&nbsp;[[KCS_DEMO.EXE|KCS DEMO.EXE]]&nbsp;
  
*Адрес - одинаков
+
Вы также можете выполнить тестовый опрос одного регистра, нажав правой кнопкой мыши и выбрав меню Опросить.
*Тип&nbsp; - BIT, если битовая маска лежит в одном Modbus-регистре&nbsp; или BIT4 - если в нескольких
+
*Блок/Бит - 1, 2, 3, и т.д&nbsp; - тот бит, который отвечает за конкретную ошибку&nbsp;
+
*Сокращение&nbsp; - Тег ошибки
+
*Название - Название ошибки
+
*В SCADA на каждую запись будет отображен свой Дискретный примитив
+
  
Если только обобщеная ошибка, то региструете только одну запись:
+
=== Тестовая запись значения регистра ===
  
*Адрес - адрес битовой маски&nbsp;  
+
Если вы указали для регистра значение AW > 0, вы можете выполнить тествую запись непосредственно в окне настройки.&nbsp;
*Тип - WORD или DWORD
+
*В SCADA используйте&nbsp;&nbsp;(подробнее см. ниже)
+
**Переменную для отображения Аварийного сигнала обощенной аварии
+
**Текстовое поле + Text-функцию для отображения активных ошибок 
+
  
==== Карта Modbus-регистров. Настройки Scada ====
+
Для этого в рабочем режиме выберите строку и нажмите правой кнопкой мыши, выбрав меню Записать значение.
  
Scada-настройки (для отображения в АСУД.SCADA)&nbsp; - влияющие на отображение параметров в SCADA&nbsp; (колонки с белым цветом)
 
  
[[File:Mb abase21.PNG|center|600px|Регистрация устройства Modbus]]
+
=== Особенности представления значений Modbus-регистров&nbsp; ===
  
===== Виртуальный КДД-RS =====
+
Для настроенных Modbus-регистров&nbsp;ОРС-сервер&nbsp;создает следующие типы сигналов, которые будут доступны в SCADA:&nbsp;
  
'''Внимание!'''&nbsp; Устаревший функционал. При настройке следует всегда указывать Значение 0.
+
*''Дискретный сигнал ''-&nbsp; если регистр имеет тип BIT (BIT4)&nbsp;и AW = 0
 +
**в SCADA вы сможете использовать стандартные примитивы типа Дискретный сигнал или LED, Изображение
 +
**Вы можете использовать инвертирование дискретного сигнала, если в конце названия Тега допишите _INV, например: "А1_INV" 
 +
*''Канал управления'' - если для регистра установлен параметр AW = 1,&nbsp; и название Тега окончивается на _CTRL, например "Svet_CTRL"
 +
**в SCADA вы сможете использовать стандартные примитивы типа Канал управления или Изображение
 +
**при этом подразумевается, что значение регистра может быть только 0 или 1. В противном случае не следует использовать данный тип сигнала 
 +
*''Числовое значение'' - для всех остальных случаев
  
*Вирт.КДД-RS - выполнить ли трансляцию данных прочитанного регистра устройства в дискретный сигнал OPC-сервера Текоn, путем привязки к каналу концентратора [[Виртуальный_КДД-RS|Виртуальный КДД-RS]]. Что позволит впоследствии в АСУД.SCADA использовать примитивы типа "Дискретный датчик" с данным сигналом. При этом предполагается что значение регистра может быть только 0 или 1.
+
Если регистр имеет тип BIT или BIT4, но вы <u>не хотите,</u> чтобы сигнал был представлен в SCADA, как дискретный датчик, вам следует:
  
  Значение 0 - не транслировать данные в виртуальный  КДД-RS.
+
*изменить тип с BIT на Word&nbsp; - если регистр может иметь только значения 0,1&nbsp; (и не представляет собой битовую маску)
  Значение 1 - транслировать данные в виртуальный КДД-RS.
+
*изменить тип с BIT4 на DWord&nbsp; - если регистр может иметь только значения 0,1&nbsp; (и не представляет собой битовую маску)
 +
*в противном случае добавить к полю сокращение&nbsp; "_$", т.е. например: вместо&nbsp; "Tag1" указать "Tag1_$"
  
Номер виртуального КДД-RS и номер канала концентратора при этом указываются ниже (под таблицей).
+
=== Как регистрировать битовую маску ошибок ===
  
===== Код Параметра =====
+
Если, исходя из описания устройства, регистр представляет собой битовую маску ошибок, как его регистрировать?&nbsp;
  
Код параметра&nbsp; - это просто идентификация Регистра внутри SCADA.
+
Например:&nbsp;
  
Данное поле заполняется автоматически сквозной нумерацией > 500. Изменять данное значение самостоятельно не следует (необходимо лишь следить, чтобы данный код был уникален для всех регистров).
+
*520.01&nbsp; - авария насоса&nbsp;
 +
*520.02&nbsp; - неиспраность датчика температуры&nbsp;
 +
*520.03&nbsp; - перепад давления
  
'''Внимание! '''Код параметра, не должен пересекаться с кодами, которые возможно были введены в таблице Настройка \ Специальные параметры.
+
Запись типа 520.01 - означает, что для получения сигнала "Авария насоса" следует прочитать регистр 520&nbsp; и проверить факт установки в значении регистра 1-го (младшего бита).
  
В редких случаях может подключаться учетное Modbus-устройство, например: электросчетчик. При этом можно реализовать аккумулирование первого прочитанного значения в сутках для параметров передаваемых НИ (нарастающим итогом), например: показаний расхода электроэнергии. При этом номера параметров следует указывать не просто > 500, а с учетом кодов параметров в БД original.gdb (см. программу ASUDBase меню Настройка / Коды параметров).<br/> Например, следует указывать код 1071 для параметра A+ (кВт*ч) - Активная прямая.<br/> Также в программе [[KCSLogger|KCSLogger]] следует установить флажок "Записывать первые мгновенные ..."&nbsp; в окне Настройки.
+
Т.е в значении&nbsp; регистра&nbsp;520&nbsp; хранится несколько сигнальных (аварийных)&nbsp;&nbsp;событий. Допустим вы читаете регистр&nbsp;и получаете значение = 5.&nbsp;
  
===== Сокращение, Название =====
+
Переводим это значение в двоичный код (например, с помощью Калькулятора Windows)&nbsp; и получаем значение&nbsp; 5 (DEC)&nbsp; =&nbsp; 101 (BIN),&nbsp; т.е. в регистре 520&nbsp;&nbsp;установлены 1 и 3 биты, есть авария насоса и перепад давления.
  
Назначение полей:
+
Исходя из этого, следует определить, нужны ли в SCADA все ошибки по отдельности (отдельными примитивами типа Дискретный датчик)&nbsp;или только сигнал обощенной ошибки с текстовым описанием активных ошибок?&nbsp;
  
*Сокращение - сокращенное название параметра (до 20&nbsp;символов) - отображается в окне Шаг 2 программы ASUDBase при просмотре полученных значений.
+
Если все по отдельности - то для каждой&nbsp;ошибки делаете отдельную запись в таблице регистров:
*Название - полное название параметра (до 40 символов)
+
  
Как было указано ранее, при использовании для трансляции данных в SCADA драйвера OPС-севера DA \ DATABASE,&nbsp; с включенной опцией драйвера "Улучшения Modbus" в качестве&nbsp; названия журнала событий SCADA транслируемого тега будет выступать значение поля "Название", с выключенной - значение "Сокращение".&nbsp;
+
*Адрес - одинаков
 +
*Тип&nbsp; - BIT, если битовая маска лежит в одном Modbus-регистре&nbsp; или BIT4 - если в нескольких
 +
*Блок/Бит - 1, 2, 3, и т.д&nbsp; - тот бит, который отвечает за конкретную ошибку&nbsp;  
 +
*Название - Название ошибки
 +
*В SCADA на каждую ошибку будет отображен свой Дискретный примитив
  
==== Тестовый опрос Modbus-устройства ====
+
Если достаточно только обобщенной&nbsp;ошибка (т.е. факта того, что есть какая-то ошибка), то региструете только одну запись:
  
В программе ASUDBase, начиная с версии 1.5-61, можно выполнить тестовый опрос Modbus-устройства. Это значительно ускоряет процесс добавления в конфигурацию новых типов устройств.
+
*Адрес - адрес битовой маски&nbsp;  
 
+
*Тип - WORD или DWORD
Фактически данный функционал повторяет то, что ранее можно было сделать в утилите [[KCS_DEMO.EXE|KCS DEMO.EXE]].
+
*В SCADA используйте&nbsp;&nbsp;(подробнее см. ниже)
 
+
**Переменную для отображения Аварийного сигнала обощенной аварии или примитив LED-индикатор
'''Внимание!''' Программа ASUDBase должна запускаться из папки ..\OPC Server
+
**Текстовое поле + Text-функцию для отображения описания активных ошибок 
 
+
В окне настройки Modbus-устройства следует нажать кнопку
+
 
+
*Прочитать один - для чтения выбранного регистра (предварительно следует выполнить клик на ячейке Адреса регистра)
+
*Прочитать все - для обновления значений всех регистров
+
 
+
[[File:Modbus test read.JPG|frameless|center|600px|Modbus test read.JPG]]
+
 
+
Если установить флажок Показать лог, то после опроса устройства откроется окно протокола обмена данными с устройством. Лог также отобразится в случае неудачного обмена.
+
 
+
Вы можете менять значения конфигурации устройства (Базовый регистр, чтение группы и т.п.), параметры выбранного регистра, добавлять новые регистры и проверять корректность обмена данными с устройством.
+
 
+
 
+
== Настройка SCADA, OPC-сервера ==
+
 
+
=== Вариант настройки 1 ===
+
 
+
Очень быстрый вариант. Однако не позволяет выполнить отображение в SCADA&nbsp;аварийных событий с помощью примитивов типа Дискретный датчик.
+
 
+
Может быть применен, только если необходимо визуалировать в SCADA простые числовые данные или режим работы устройства (например: в работе, останов и т.п.)&nbsp;&nbsp;в табличном виде.
+
 
+
Настройка ОРС-сервера не требуется.
+
 
+
Разместите на ситуационном плане в SCADA примитив [[Дополнительные_примитивы|Прибор учета]] и настройте согласно инструкции.
+
 
+
'''Замечание!'''
+
В ASUDBase каждому устройству Modbus должен быть задан уникальный (произвольный) серийный номер.
+
 
+
&nbsp;
+
 
+
=== Вариант настройки 2 ===
+
 
+
Начиная с версии 2.5.2 проброс данных Modbus-устройств в SCADA сделан максимально комфортным.&nbsp;&nbsp;
+
 
+
==== Настройка ОРС-сервера ====
+
 
+
После настройки устройств в программе ASUDBase, запустить конфигуратор ОРС-сервера.
+
 
+
Добавить в адресное пространство ОРС-сервера драйвер [[Tekon_OPC-сервер#DATABASE|DA \ DATABASE]],&nbsp; установить в окне свойств значение "Да" для устройств ModBus RTU и/или&nbsp; ModBus TCP.
+
 
+
Закрыть конфигуратор ОРС-сервера.
+
  
Запустить опрос Modbus-устройств (программу [[KCSLogger|KCSLogger]]).
 
  
==== Настройка SCADA ====
+
== Настройка SCADA ==
  
 
В АСУД.SCADA для визуализации данных Modbus-устройств можно использовать следующие примитивы:
 
В АСУД.SCADA для визуализации данных Modbus-устройств можно использовать следующие примитивы:
  
*[[Дополнительные_примитивы#Таблица_данных_Тегов|Таблица Тегов]]&nbsp;- '''быстрая визуализация''' в табличном виде в одном месте ситуационного плана:&nbsp;  
+
*[[Дополнительные_примитивы#Таблица_данных_Тегов|Таблица Тегов]]&nbsp;- '''быстрая визуализация''' в табличном виде в одном месте ситуационного плана без визуально-звуковой индикации:&nbsp;  
 
**числовых данных  
 
**числовых данных  
 
**состояний работы устройства (преобразование числа в надпись с помощью [[Text-функция|Text-функций]])  
 
**состояний работы устройства (преобразование числа в надпись с помощью [[Text-функция|Text-функций]])  
 
**расшифровка кодов ошибок&nbsp; &nbsp;(преобразование числа в надпись с помощью [[Text-функция|Text-функций]])   
 
**расшифровка кодов ошибок&nbsp; &nbsp;(преобразование числа в надпись с помощью [[Text-функция|Text-функций]])   
*Цифровой индикатор - для отображения любых числовых значений (с возможностью указания граничных значений и визуально звуковой индикакаций выхода за границы)  
+
*Цифровой индикатор, [[Дополнительные_примитивы|стрелочный индикатор]]&nbsp;- для отображения любых числовых значений (с возможностью указания граничных значений и визуально-звуковой индикакаций выхода за границы)  
 
*Текстовое поле - для отображения любых числовых значений, а также преобразования числового значения в текстовое по заданному правилу с помощью [[Скрипты|скрипта]]&nbsp;или [[Text-функция|Text-функции]]. Кроме того с помощью данного примитива и [[Скрипты|скрипта можно]] выполнить '''запись значения в регистр '''Modbus-устройства.  
 
*Текстовое поле - для отображения любых числовых значений, а также преобразования числового значения в текстовое по заданному правилу с помощью [[Скрипты|скрипта]]&nbsp;или [[Text-функция|Text-функции]]. Кроме того с помощью данного примитива и [[Скрипты|скрипта можно]] выполнить '''запись значения в регистр '''Modbus-устройства.  
*[[Дополнительные_примитивы#Кнопка|Кнопка ]]- для&nbsp;'''записи&nbsp;значения в регистр '''одного или нескольких Modbus-устройств.&nbsp;  
+
*[[Дополнительные_примитивы#Кнопка|Кнопка ]]- для&nbsp;'''записи&nbsp;значения в регистр'''.&nbsp;  
 
*Дискретный датчик - визуализация аварийных событий.  
 
*Дискретный датчик - визуализация аварийных событий.  
*[[Дополнительные_примитивы|Led-индикатор]]&nbsp;- для отображения дискретных значений (в том числе выделение бита из маски)&nbsp; без возможности отображения сигнала в облаке уведомлений и звуковой индикацией
+
*[[Дополнительные_примитивы|Led-индикатор]]&nbsp;- для отображения дискретных значений, в том числе выделение бита из маски.
 +
*[[Дополнительные_примитивы|Прибор учета]] &nbsp;- если устройство было зарегистрировано в ASUDBase и вам нужна простая визуализация в табличной форме
 +
*[[Дополнительные_примитивы|Изображение ]]- визуализация аварийный событий&nbsp;
 +
*[[Дополнительные_примитивы|Набор изображений]] - визуализация состояния устройства или&nbsp;'''запись значения в регистр '''Modbus-устройства.
  
'''Замечание!''' Для того чтобы реализовать с помощью примитивов&nbsp;&nbsp;"Текстовое поле", "Кнопка" возможность записи введенного пользователем значения в Modbus-устройство, необходимо чтобы:
+
'''Замечание!''' Для того чтобы реализовать возможность записи введенного пользователем значения в Modbus-устройство, необходимо чтобы:
  
*Регистр (в настройках устройства в ASUDBase)&nbsp; относится к типу '''HoldReg '''или '''Coils'''  
+
*Регистр&nbsp; относится к типу '''HoldReg '''или '''Coils'''  
*Значение поля '''AW '''(Allow Write) было установлено в&nbsp;1
+
*Значение поля '''AW '''(Allow Write) было > 0
*В настройка примитива&nbsp;"Текстовое поле" был указан LUA-объект, подробнее см.&nbsp;[[Скрипты|Скрипты]]
+
  
'''Замечание!''' '''Использование примитивов типа Дискретный датчик.'''
+
Рассмотрим пример&nbsp;визуализации значения&nbsp;регистра, представляющего собой битовую маску ошибок, если этот регистр был настроен в ОРС-сервере, как числовое значение (а не набор типов BIT).
  
Начиная с версии 2.6.0 вы можете "создавать" дискретные сигналы уже на этапе регистрации Modbus-устройства, просто используя тип BIT.
+
'''Пример 1.'''&nbsp;<br/> Необходимо визуализировать с помощью Дискретных&nbsp;примитивов состояние регистра "Авария", где значение регистра представляет собой битовую маску кодов аварий
  
В противном случае,&nbsp; данные получаемые с Modbus-устройства, могуть быть предварительно преобразованы в дискретный сигнал в понимании SCADA с помощью [[Переменные|Переменных]].
+
Например, биты:&nbsp;
  
Необходимо создать Переменную, связать ее с тегом&nbsp; Modbus-устройства, связать Переменную с Дискретным датчиком на ситуационном плане.
+
*1&nbsp; - авария насоса&nbsp;  
 
+
*2&nbsp; - неиспраность датчика температуры&nbsp;  
'''Пример 1.'''&nbsp; Необходимо визуализировать с помощью Дискретного датчика состояние регистра "Авария насоса" (где:&nbsp; 0 - норма, 1&nbsp; авария)
+
*3&nbsp; - перепад давления  
 
+
Создаем переменную VAR.Nasos:
+
 
+
*Имя - Nasos
+
*Журнал событие - Авария насоса&nbsp;  
+
*Журнал адрес - Котельная
+
*Задержка (с.) - 0
+
*Тип -&nbsp; <> 0
+
*Добавлям Тег регистра "Авария насоса"&nbsp; (в поле Теги)
+
 
+
Размещаем на ситуационном плане примтив типа Дискретный датчик, в настройке&nbsp;Тег вручную указываем имя переменной&nbsp;VAR.Nasos.
+
 
+
'''Пример 2.'''&nbsp; Необходимо визуализировать с помощью Дискретных&nbsp;датчиков&nbsp;состояние регистра "Авария", где значение регистра представляет собой битовую маску кодов аварий
+
 
+
Например:&nbsp;
+
 
+
*520.01&nbsp; - авария насоса&nbsp;
+
*520.02&nbsp; - неиспраность датчика температуры&nbsp;  
+
*520.03&nbsp; - перепад давления  
+
 
+
Запись типа 520.01 - означает, что необходимо прочитать регистр 520&nbsp; и проверить факт установки в значении регистра 1-го (младшего бита).
+
 
+
Т.е в значении&nbsp; регистра&nbsp;520&nbsp; хранится несколько сигнальных (аварийных)&nbsp;&nbsp;событий. Допустим вы читаете значение регистра в ASUDBase или&nbsp;[[KCS_DEMO.EXE|KCS DEMO.EXE]]&nbsp;и получаете значение регистра 520 = 5&nbsp;
+
 
+
Переводим это значение в двоичный код (например, с помощью Калькулятора Windows)&nbsp; и получаем значение&nbsp; 5 (DEC)&nbsp; =&nbsp; 101 (BIN),&nbsp; т.е. в регистре 520&nbsp;&nbsp;установлены 1 и 3 биты, есть авария насоса и перепад давления.
+
  
 
Создаем несколько переменных&nbsp; (по числу аварийный событий), например:&nbsp;
 
Создаем несколько переменных&nbsp; (по числу аварийный событий), например:&nbsp;
Строка 753: Строка 601:
 
Размещаем на ситуационном плане примтивы типа Дискретный датчик, в настройке&nbsp;Тег вручную указываем&nbsp;&nbsp;имена переменных VAR.1, VAR.2, VAR.3.
 
Размещаем на ситуационном плане примтивы типа Дискретный датчик, в настройке&nbsp;Тег вручную указываем&nbsp;&nbsp;имена переменных VAR.1, VAR.2, VAR.3.
  
'''Пример 3.'''&nbsp; Необходимо визуализировать с помощью Дискретного&nbsp;датчика обобщенную аварию&nbsp;&nbsp;регистра "Авария" из '''Примера 2'''.
+
'''Пример 2.'''&nbsp; Необходимо визуализировать с помощью Дискретного&nbsp;датчика обобщенную аварию&nbsp;&nbsp;регистра "Авария" из предыдущего примера.
  
 
Иногда нет необходимости выделять каждую Аварию отдельным примитивом Дискретный датчиком, а например достаточно просто показать сигнал Обощенной авариии. В этом случае,&nbsp;
 
Иногда нет необходимости выделять каждую Аварию отдельным примитивом Дискретный датчиком, а например достаточно просто показать сигнал Обощенной авариии. В этом случае,&nbsp;
Строка 775: Строка 623:
 
1=авария насоса
 
1=авария насоса
 
2=неиспраность датчика температуры
 
2=неиспраность датчика температуры
3=перепад давления</pre>
+
3=перепад давления
 
+
</pre>
 
+
&nbsp;
+
 
+
== Объединение Modbus-устройств в группы ==
+
 
+
Дополнительно в случае необходимости одновременной записи однотипных значений регистров в несколько устройств, существует возможность объединить Modbus-устройства в группы.
+
 
+
Для определения групп следует отредактировать файл ''Tekon \ ASUD Scada \ OPC Server \ settings \ modbusgrp.ini''
+
 
+
В данном примере ';' - является комментарием
+
<pre><nowiki>
+
[1]
+
Params=88 99 112
+
Conc=901 902 903</nowiki></pre>
+
 
+
Создана группа 1, для концентраторов 901-903.
+
 
+
В случае записи, например, значения в регистр 99 концентратора 902, это же значение будет записано в регистры 99 концентраторов 901 и 903.
+
 
+
 
+
 
+
== Изменение настроек Modbus-устройства ==
+
 
+
Закрыть программу [[KCSLogger|KCSLogger]]
+
 
+
&nbsp;
+
 
+
=== Изменение читаемых регистров ===
+
 
+
В случае необходимости добавить новые регистры, читаемые устройством, следует открыть программу ASUDBase, меню Настройка \ Регистрация.
+
 
+
Выбрать любой концентратор с устройством требуемого типа.
+
 
+
Нажать кнопку "..." и в окне настройки регистров (см. выше) добавить данные регистров.
+
 
+
Внесенные изменения будут применены для всех концентраторов устройств данного типа. Далее следует выполнить опрос устройств программой [[KCSLogger|KCSLogger]] (если программа была запущена, ее необходимо перезапустить).
+
 
+
Открыть АСУД.SCADA и добавить необходимые примитивы на карту.
+
 
+
=== Изменение настроек подключения ===
+
 
+
В случае необходимости изменить RS-идентификатор Modbus-устройства (или IP-адрес Мастер-устройства) , следует открыть программу ASUDBase, меню Настройка \ Регистрация.
+
 
+
Выбрать требуемое устройство, ввести новый RS-идентификатор, нажать "Изменить".
+
 
+
Запустить [[KCSLogger|KCSLogger]] и убедиться, что с устройством проходит обмен данными.
+
 
+
Указанные изменения автоматически приведут к изменению Тегов&nbsp;формируемых&nbsp;драйвером&nbsp;[[Tekon_OPC-сервер#DATABASE|Tekon OPC-сервер#DATABASE]]&nbsp;
+
 
+
В SCADA будет необходимо выполнить перепривязку Тегов. Рекомендуется воспользоваться для этого утилитой&nbsp;[[MAP_TAG.EXE|MAP TAG.EXE]]
+
  
 
== Демонстрационный пример ==
 
== Демонстрационный пример ==
  
В качестве примера предлагается полностью настроенная рабочая конфигурация АСУД.SCADA с одним Modbus-устройства.
+
Вы можете сами попробовать настроить в SCADA Modbus-устройство воспользовавшись эмулятором в программе&nbsp;[[KUNIP.EXE|KUNIP.EXE]]<br/> См. пример настройки в описании эмулятора.
 
+
Что входит в демонстрацию:
+
 
+
*Эмулятор ModbusTCP устройства
+
*Настроенная программа ASUDBase с одним Modbus-устройством
+
*Настроенный ОРС-сервер с одним Modbus-устройством
+
*Настроенная SCADA  
+
**С отображением текущих значений параметров
+
**С возможностью записи новых значений уставок на устройство
+
**С отображением режима работы устройства в текстовом виде 
+
 
+
Показано решение практически полного перечня типовых задач, решаемых при подключении Modbus-устройств к АСУД-248.
+
 
+
Что необходимо:
+
 
+
*ПК (ноутбук) с установленной '''АСУД.SCADA 2.6.1'''&nbsp;или выше
+
*архив с файлами демонстрации&nbsp;[http://www.tekon.ru/software/modbus_sample_261.zip http://www.tekon.ru/software/modbus_sample_261.zip]
+
 
+
Поскольку при установке архива будут обновлены конфигурационные файлы, то '''не следует''' '''запускать демонстрацию на рабочей диспетчерской!'''
+
 
+
Для запуска демонстрации'''ключ защиты и драйверы EXT - не нужны'''.
+
 
+
Последовательность действий для запуска демонстрации:
+
 
+
#Установить '''АСУД.SCADA 2.6.1''' (или выше)&nbsp;в папку C:\1Tekon
+
#Закрыть (если запущены) SCADA, ASUDBase, KCSLogger
+
#Разархивировать архив в папку C:\1Tekon, подтвердив изменение существующих файлов.
+
#Открыть конфигуратор ОРС-сервера, должно быть зарегистрировано устройство Database<br/> [[File:Modbus demo opc.PNG|center|700px|Modbus demo opc.PNG]]
+
#Закрыть конфигуратор ОРС-сервера
+
 
+
&nbsp;
+
 
+
Запустить эмулятор Modbus-устройства ...\OPC Server\modbus_demo\mtcpServerEmulator.exe
+
 
+
Выбрать меню Файл\Открыть конфигурацию, указать TestDevice.xml, нажать кнопку Старт, подтвердить "Да".
+
 
+
[[File:Modbus demo emu.PNG|center|700px|Modbus demo1.JPG]]
+
 
+
Демонстрационное устройство - некая установка, которая подключается напрямую к компьютерной сети и по протоколу Modbus TCP, может передавать значения измеряемых параметров и уставок.
+
 
+
Уставка - это параметр, влияющий на логику работы самого устройства.
+
 
+
Смысл параметров устройства:
+
 
+
*Regim - состояние устройства ('''только чтение''')
+
**0 - "Выключена",
+
**1 - "Включена",
+
**2 - "Режим 2",
+
**3 - "Режим 3" 
+
*TStart - уставка температуры запуска установки (можно '''читать и записывать''')
+
*TStop - уставка температуры остановки установки (можно'''читать и записывать''')
+
*Tokr - температура окружающей среды (только '''чтение'''), значение параметра хранится в устройстве умноженным на 10
+
*BitStatus1 - битовая маска ошибок, например:
+
**0 - нет ошибки
+
**1 - ошибка 1
+
**2 - ошибка 2
+
**4 - ошибка 3 
+
*BitStatus2 - тоже битовая маска, например:&nbsp;
+
**0 - нет ошибки
+
**1 - авария 1
+
**2 - авария&nbsp;2
+
**4 - авария&nbsp;3 
+
 
+
Для изменения значения параметра в эмуляторе, следует выбрать строку, выполнить двойной клик и ввести новое значение параметра.
+
 
+
Смотрим настройки устройства в программе ASUDBase, выполним подключение к БД&nbsp; &nbsp;..\OPC Server\original.gdb
+
 
+
[[File:Modbus demo ab.PNG|center|700px|Modbus demo ab.PNG]]Предположим, что при настройке у нас стояла задача отобразить в SCADA общую ошибку для набора ошибок&nbsp;BitStatus1 (т.е. просто проинформировать, что значение <> 0),&nbsp; и каждую&nbsp; из ошибок&nbsp;BitStatus2.
+
 
+
Запускаем программу [[KCSLogger|KCSLogger]] для запуска опроса устройства.
+
 
+
Нажать Статистика, проверить, что тестовое устройство опрашивается корректно
+
 
+
[[File:Modbus demo2.JPG|center|700px|Modbus demo2.JPG]]
+
 
+
Проверяем, что видим изменение параметров в ASUDBase&nbsp;
+
 
+
[[File:Modbus demo ab2.PNG|center|700px|Modbus demo ab2.PNG]]
+
 
+
Запускаем программу SCADA.
+
 
+
[[File:Modbus demo scada.PNG|center|700px|Modbus demo3.JPG]]
+
 
+
Параметры уставки Т1 и Т2 - могут быть '''записаны '''из SCADA на устройство. Остальные параметры '''только читаются '''из устройства.
+
 
+
Для записи на устройство выполните в рабочем режиме двойной клик и введите новое значение, пронаблюдайте изменение значение в эмуляторе устройства.
+
 
+
В данном примере используются [[Скрипты|LUA-cкрипты]], файлы:
+
 
+
*Scada\scripts\custom\etnry.lua
+
<pre>dofile2 ("..\\built-in\\prim_basic.lua") </code>
+
dofile2 ("modbus.lua")
+
function main_custom()
+
 
+
end</pre>
+
 
+
*Scada\scripts\custom\modbus.lua
+
<pre>topc_Temp = topc_string_min_max ("Уставка температуры",0,100)
+
topc_minmax1 = topc_minmaxavg ("1",1,0,1)
+
 
+
function Regim (val,qual)
+
local RToStr =
+
{
+
[0] = "Выключено",
+
[1] = "Включено",
+
[2] = "Режим 2",
+
[3] = "Режим 3"
+
}
+
 
+
if qual ~= opc.da.tekon.ItemData.QUALITY_GOOD then
+
return "---"
+
end
+
local s = RToStr [val.Integer]
+
if s == nil
+
then
+
  return "Неизвестно: "..val.Integer
+
else
+
  return s
+
end
+
end</pre>
+
 
+
<br/> Объект topc_Temp используется для записи значений уставок на сервер, см. настройки текстовых полей Т1 и Т2.
+
 
+
Объект topc_minmax1 используется для отображения значений Min, Max температуры окружающей среды.
+
 
+
Функция Regim - для отображения состояния установки в текстовом виде.
+
 
+
Для проверки битовой маски BitStatus1 объявлена&nbsp;одна [[Переменные|Переменная ]](меню Дополнительно \ Переменные), которая сравнивает значение&nbsp;тега&nbsp;&nbsp;BitStatus1 с 0.
+
 
+
[[File:Modbus demo scadavar.PNG|center|700px|Modbus demo scadavar.PNG]]
+
  
Пример работы с эмулятором [https://youtu.be/vnbTF4fSsMA https://youtu.be/vnbTF4fSsMA]
+
[[Category:Интеграция]] [[Category:Modbus]]

Текущая версия на 14:53, 11 августа 2021

Введение

Настройка Modbus  в  АСУД.SCADA может быть выполнена двумя способами:

  • регистрация устройства непосредственно  в Tekon OPC-сервер
    • это новый способ доступный с версии АСУД.SCADA 2.6.3
    • целесообразно использовать на всех новых объектах где добавляются Modbus-устройства
    • при этом варианте не используется БД original.gdb все настройки выполняются непосредственно в ОРС-сервере
    • поддерживается практически полный фунционал настройки, аналогичный ASUDBase
      • исключение - возможность выполнить запись в регистр по другому адресу (отличному от адреса чтения) доступна пока только при регистрации в ASUDBase
    • опрос осуществляется непосредственно OPC-сервером, программа KCSLogger не нужна
  • регистрация устройства в программе ASUDBase
    • целесообразно использовать, если у вас уже есть Modbus-устройства, зарегистрированные в программе ASUDBase
    • опрос осуществляется программой KCSLogger

Данная статья ориентируется на настройку Modbus-устройств непосредственно в OPC-сервере версии 2.7.2 (и выше) и не расматривает возможность настройки устройств в программе ASUDBase

Если, по каким-то причинам вы планируете выполнять настройку устройств в программе ASUDBase, либо  в АСУД.SCADA 2.5.х и ранее , а также настройку Modbus c конценратором  КЦС-М смотри предыдщую редакцию статьи.

АСУД-248 позволяет реализовать взаимодействие с ЛЮБЫМИ устройствами, поддерживающимипротокол Modbus.

Modbus-устройства могут быть подключены к концентраторам:

  • КЦС-IPM / КУН-IPM
  • КЦС-М (есть ограничения в типе поддерживаемых устройств, подробнее см. тут)
  • напрямую по компьютерной сети.

КЦС-IPM / КУН-IP

Тракт передачи данных:

Устройство Modbus -- RS-232/485 --  КЦС-IPM / КУН-IP -- Компьютерная сеть -- АРМ-диспетчера
Поддерживаются спецификации Modbus-RTU, Modbus TCP
Чтение данных одиночное, групповое
Запись данных одиночная
Число подключаемых устройств до 255* на каждом интерфейсе

  * - подробнее см. спецификацию подключаемого устройства и интерфейса подключения.

Внимание:

  • Требуется наличие USB-ключа защиты АСУД.SCADA.
    В ключе защиты ПО АСУД.SCADA должно быть прописано число драйверов EXT-модуля, соответствующее общему числу подключаемых приборов.
    Для тестового опроса устройства в конфигураторе ОРС-сервера драйвер не требуется.
  • Следует придерживаться следующего правила при адресации Modbus-устройств: устройства, подключаемые к одному IP-концентратору должны иметь уникальные адреса (RS-идентификаторы).

Прямое подключение по компьютерной сети

Тракт передачи данных:

Устройство Modbus с Ethernet -- Компьютерная сеть -- АРМ-диспетчера

Остальное аналогично случая подключения к КЦС-IPM / КУН-IP, рассматриваемому далее

Modbus-протокол. Общая информация

Modbus - это коммуникационный протокол широко применяемый в промышленности. Он определяет правила пересылки данных при взаимодействии устройств.

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

Есть несколько модификаций данного протокола:

  • Modbus RTU
  • Modbus TCP
  • Modbus ASCII (в настоящее время не поддерживается в АСУД-248)

Само слово "Modbus" - ничего не говорит об интерфейсе между устройствами.

Протокол Modbus может работать поверх интерфейсов RS-485/RS-232, компьютерной сети и других.

С точки зрения доступа к данным устройство Modbus представляет собой таблицу, примерно следующего вида

Адрес регистра Атрибуты Параметр Значение
1 R/W, Целое число Уставка температуры 15
2 R, Целое число * 10 Температура наружного воздуха -156
301 R, Дробное число Частота сети 49,8

где,

  • Адрес регистра - уникальный идентификатор параметра, по которому осуществляется запрос значения параметра
  • Атрибуты - атрибуты параметра
    • R - параметр можно читать
    • W - параметр можно записывать
    • Целое число - параметр представляет собой целое число
    • Целое число * 10 - параметр следует разделить на 10 для получения реального значения
    • Дробное число - параметр представляет собой дробное число
  • Параметр - описание параметра
  • Значение - текущее значение параметра
Внимание!
Таблица должна быть отражена в технического документации конкретного устройства. 
Таблица не универсальна для разного типа Modbus-устройств.
Без наличия таблицы настроить устройство не получится.

Для некоторых типов Modbus-устройств, например: свободно программируемых контроллеров, таблица может зависеть от проекта, зашитого в контроллер.
Т.е. может быть сформирована в штатном ПО контроллера только после создания файла-проекта (см. например PIXEL).

Все регистры Modbus-устройства доступные на чтение / запись условно хранятся в 4-х таблицах:

Таблица Функция чтения Тип данных Разрешены Чтение (R) / Запись (W) Функция записи
Регистры флагов (Coils) 0х1 0 или 1 R / W 0x5
Дискретные входы (Discrete Inputs) 0х2 0 или 1 R -
Регистры хранения (Holding Registers) 0х3 числовой/строковый R / W

0x10 или 0х6

(см. параметр AW далее)

Регистры ввода (Input Registers) 0х4 числовой/строковый R -

Каждый регистр:

  • это ячейка размером в 2-байта.
  • имеет уникальный адрес.

В зависимости от типа Modbus-устройва адресное пространство таблиц может быть объединено, т.е.  регистр с адресом 0 в таблице HoldReg, аналогичен (полностью соответствует) адресу 0 в таблице InpReg (это можно понять либо из документации, либо при тестовом опросе устройства).

Если вы затрудняетесь с тем, какой тип регистра указывать - используйте HoldReg.

Иногда в документации на устройство можно увидеть, что адреса регистров  обозначаются 6-ти значными числами: логическими адресами. 

Старшая цифра логического адреса при этом обозначает тип регистра, а остальные цифры - физический адрес регистра.

Старшая цифра логического адреса Начальный логический адрес Тип данных
0 000001 Coil
1 100001 DiscInp
3 300001 InpReg
4 400001 HoldReg

Как правило, при таком указании логических адресов считается что базовый регистр устройства = 1  (т.е. из адреса еще нужно будет вычесть единицу)

Например: логический адрес = 40568

  • Тип регистра 4 = HoldReg
  • Физический адрес регистра = 568 - 1 = 567

Замечание!
При регистрации устройства единицу все время вычитать не нужно, вы просто указываете в настройках устройства значение базового регистра = 1.

Для определения значения, хранящегося в регистре, необходимо, исходя из документации, корректно указать тип данных.

Поддерживаются следующие типы данных:

Название Альтернативное название Число регистров Диапазон значений
BIT   1 0 или 1
WORD Unsigned word 1 Целые числа
0 .. 65535
CHAR

Signed byte,
Short Integer

1 Целые числа
-128..127
SHORT Signed word,
Small Integer
1 Целые числа
-32 768 ... 32 767
FLOAT   2 1.5x10^-45 ...3.4x10^38
DWORD Unsigned long 2

Целые числа

0..4294967295

INTEGER Signed long 2

Целые числа -2147483648..2147483647

BIT4   2 0 или 1
DOUBLE   4 5.0 x 10^-324 .. 1.7 x 10^308
STRING  

указывается

(запрашиваемое число регистров будет равно половине указанному)

строка данных
INT64 Big Integer  

Целые числа

-2^63 ... 2^63-1

1 регистр  = 16 бит
2 регистра = 32 бита
4 регистра = 64 бита

Также важен формат представления числа в регистре. Он определяет порядок перестановки полу-байт в регистрах.

Обычное значение поля Формат:

  • Для типов данных в 1 регистр - 1
  • Для типов данных в 2 регистра - 4 (или значение 2)
  • Для типов в 4 регистра - 14 (или значение 12) 
    Для данного типа существуют дополнительные значения формата с 11 до 14:
    • формат с 1 до 4 - дополнительно меняют местами левые-правые 2-регистра
    • формат с 11 до 14 - аналог 1 - 4, но не выполняется перестановка.

Если при успешном опросе устройства, вы получаете в регистрах непонятные значения, попробуйте поменять Формат.

Комментарий по полю Формат (при первом чтении данный раздел можно пропустить).

Рассмотрим пример влияния значения поля Формат на вычисленный результат (см. программу KCS DEMO).

Предположим мы считываем целочисленное значение типа INTEGER (целое число, занимающее 2 регистра = 4 байта данных), по начальному адресу, например: 2054 (0x0806). Пусть нам известно, что в этом регистре должно хранится значение = 0х12345678 (значение в 16-ричной кодировке или 305419896 в привычной нам 10-ричной кодировке,  преобразование вы можете выполнить в калькуляторе Windows).

Запрос данных (в шестнадцатиричной  кодировке): 
>> 01 03 08 06 00 02 26 6A 

Значения регистров передаются начиная с указанного адреса, по два байта на регистр, старший байт каждого регистра передаётся первым.

Ответ устройства 
            3б 2б 1б 0б      
<< 01 03 04 12 34 56 78 81 07 

где:

  • 0х12 0х34 - первый регистр ( адрес 2054); байты 3, 2
  • 0х56 0х76 - второй регистр ( адрес 2055); байты 1, 0
Полученные данные
последовательность байт
Формат Правило перестановки Результат Комментарий
12 34 56 78 1 1_0_3_2 0x56781234  
12 34 56 78 2 0_1_2_3 0x78563412 обратный порядок
младший байт вперед
12 34 56 78 3 2_3_0_1 0x34127856  
12 34 56 78 4 3_2_1_0 0x12345678 прямой порядок
старший байт вперед

Т.е. для регистров устройства данного типа корректное значение формата - 4.

Предположим мы считываем целочисленное типа WORD, которое хранится в 1-м регистре (2 байта данных) по адресу, например: 2. Пусть мы значение что значение - 0х08.

Запрос данных (в шестнадцатиричной  кодировке): 
>> 01 03 00 02 00 01 25 CA 

Ответ устройства
            1б 0б 
<< 01 03 02 00 08 B9 82
Полученные данные
последовательность байт
Формат Правило перестановки Результат
00 08 1 1_0 0x0008
00 08 2 0_1 0x0800

Т.е. для регистров устройства данного типа корректное значение формата - 1.

Регистрация Modbus-устройств в Tekon OPC-сервер

Добавьте Modbus-устройство в конфигурацию OPC-сервера.
Если Modbus-устройство было зарегистрировано в программе ASUDBase, вы можете создать конфигурационный файл сервера, нажав в окне настройки Modbus-устройства в ASUDBase кнопку Экспорт.

Если устройство подключено

  • напрямую по компьютерной сети
    • Добавьте DA \ Компьютерная сеть \ Modbus TCP
  • через КЦС-IPM \ КУН-IPM
    • Добавьте DA \ Концентратор  КЦС-IPM или  КУН-IPM \ Modbus RTU
  • через сторонний конвертер интерфейса 
    • Добавьте DA \ IP-RS преобразователь \ Modbus RTU
Modbus opc 1.PNG

Выполните двойной клик на созданном устройстве.

Modbus OPC 1 1.PNG
Нажмите Да, если вы создаете новое устройство с новым описанием регистров. Нажмите Нет - если вы создаете устройство, для которого ранее уже создавали таблицу регистров. 

Если вы выбрали Да - следует указать в латинице имя устройства, например: pixel

Далее выберите в свойствах созданный ранее конфигурационный файл устройства и нажмите два раза на само устройство, для того, чтобы открыть окно настройки.

Modbus opc 2.PNG

На рисунке отображен пример окна настройки устройства, подключенного к концентратору КЦС-IPM, КУН-IPM.

Для каждой ячейки доступна информационная подсказка (хинт).

Строки имеют следующий смысл:

  1. название столбцов таблицы
  2. тип протокола устройства [RTU, TCP]
    Если вы подлючаете устройство по RS-485, то почти всегда это RTU-протокол. Если по компьютерной сети - TCP.
  3. поля конфигурации устройства
    1. 0 - базовый регистр, указывает сдвиг регистров при запросе (обычно 0 или 1)
    2. 1 - количество регистров читаемых в одном запросе, по умолчанию 1.
      Большее значение параметра увеличивает скорость опроса устройства. 
      Но имеет смысл, если запрашиваемые регистры идут подряд.
      Если в документации не указано сколько можно читать - попробуйте указать 10 и провести тестовой опрос устройства.
      Если ошибок нет - оставляйте указанное значени. Иначе верните значение 1.
    3. 0 - не разрешать пропуски при чтении. Допустимые значения [0,1]
      Некоторые устройства позволяют опрашивать несколько регистров, если они расположены неподряд.
      Это также увеличивает скорость опроса устройства.
  4. следующие строки - это собственно таблица адресов Modbus-регистров из документации на устройство

Для редактирования таблицы следует нажать  Редактировать. 

При этом по правому клику мышки, доступно меню добавления новых строк.

Описание столбцов настройки:

  • Регистр - тип регистра из выпадающего меню
  • Адрес - адрес регистра (в десятичной системе счисления)
    Вы можете указывать адрес в 16-ричной кодировке, для этого добавьте в начале знак $. Например: $10, $FA и т.п.
  • Тип данных - тип указанный в документации на устройство
  • Блок/Бит
    • для типа данных BIT указывается анализируемый бит (от 1 до 16) в слове. Бит 1 - младший, 16 - старший.
    • для типа данных BIТ4 указывается анализируемый бит (от 1 до 32) в слове. Бит 1 - младший, 32 - старший.
    • для типа STRING - размер блока данных в байтах (обычно размер строки в документации на устройство указывается кратным двум байтам).
    • для других типов данных - не используется.
  • Формат - формат данных (подробнее см. ранее)
  • Множитель - множитель данных, по умолчанию 1.

Множитель учитывается для всех типов кроме BIT, BIT4, STRING

После чтения регистра:  
   Значение SCADA = значение регистра * множитель 
Перед записью регистра: 
   Значение регистра  = Значение SCADA / множитель

Минимальное значение Множителя 0,0001.
Внимание!
При указании в качестве Множителя значений 2, 3, 4, 5, 6, 7, 8, 9 - реальное значение множителя определяется по формуле

Множитель = 1 / (2 ^ Указанный_множитель)
  • AW  - данный параметр разрешает запись значений в регистр, например для изменения уставок устройства или управления устройством из SCADA. 
    Актуально только для регистров типа Coils / HoldReg.
    Возможные значения:
    0 - запись в регистр запрещена
    1 - запись в регистр разрешена. Для регистров HoldReg будет использоваться функция $10 для записи
    6 - для регистров HoldReg будет использоваться функция $06 для записи
    10 -  аналог значения 1. Для регистров HoldReg будет использоваться функция $10 для записи
  • Тег - имя тега, которое будет отображено в SCADA.
    Имя тега должно быть уникально в рамках устройства.
    В имени Тега не следует использовать символ точка.
  • Название - наименование сигнала (неисправности), которое будет отображаться в журнале событий в программе SCADA.

Для сохранения изменений, нажать кнопку Сохранить.

Замечание!
Поле Версия устройства - не используется (всегда отображает ---)

Тестовый опрос устройства 

Для выполнения тестового опроса устройства, сохраните настройки и нажмите кнопку Опросить. Будет выполнен опрос устройства с отображением полученных данных в столбце Значение

Кнопка Лог  - отобразит лог последнего обмена  данными с устройством. Расшировку кодов возможных ошибок см. в описании программы KCS DEMO.EXE 

Вы также можете выполнить тестовый опрос одного регистра, нажав правой кнопкой мыши и выбрав меню Опросить.

Тестовая запись значения регистра

Если вы указали для регистра значение AW > 0, вы можете выполнить тествую запись непосредственно в окне настройки. 

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


Особенности представления значений Modbus-регистров 

Для настроенных Modbus-регистров ОРС-сервер создает следующие типы сигналов, которые будут доступны в SCADA: 

  • Дискретный сигнал -  если регистр имеет тип BIT (BIT4) и AW = 0
    • в SCADA вы сможете использовать стандартные примитивы типа Дискретный сигнал или LED, Изображение
    • Вы можете использовать инвертирование дискретного сигнала, если в конце названия Тега допишите _INV, например: "А1_INV"
  • Канал управления - если для регистра установлен параметр AW = 1,  и название Тега окончивается на _CTRL, например "Svet_CTRL"
    • в SCADA вы сможете использовать стандартные примитивы типа Канал управления или Изображение
    • при этом подразумевается, что значение регистра может быть только 0 или 1. В противном случае не следует использовать данный тип сигнала
  • Числовое значение - для всех остальных случаев

Если регистр имеет тип BIT или BIT4, но вы не хотите, чтобы сигнал был представлен в SCADA, как дискретный датчик, вам следует:

  • изменить тип с BIT на Word  - если регистр может иметь только значения 0,1  (и не представляет собой битовую маску)
  • изменить тип с BIT4 на DWord  - если регистр может иметь только значения 0,1  (и не представляет собой битовую маску)
  • в противном случае добавить к полю сокращение  "_$", т.е. например: вместо  "Tag1" указать "Tag1_$"

Как регистрировать битовую маску ошибок

Если, исходя из описания устройства, регистр представляет собой битовую маску ошибок, как его регистрировать? 

Например: 

  • 520.01  - авария насоса 
  • 520.02  - неиспраность датчика температуры 
  • 520.03  - перепад давления

Запись типа 520.01 - означает, что для получения сигнала "Авария насоса" следует прочитать регистр 520  и проверить факт установки в значении регистра 1-го (младшего бита).

Т.е в значении  регистра 520  хранится несколько сигнальных (аварийных)  событий. Допустим вы читаете регистр и получаете значение = 5. 

Переводим это значение в двоичный код (например, с помощью Калькулятора Windows)  и получаем значение  5 (DEC)  =  101 (BIN),  т.е. в регистре 520  установлены 1 и 3 биты, есть авария насоса и перепад давления.

Исходя из этого, следует определить, нужны ли в SCADA все ошибки по отдельности (отдельными примитивами типа Дискретный датчик) или только сигнал обощенной ошибки с текстовым описанием активных ошибок? 

Если все по отдельности - то для каждой ошибки делаете отдельную запись в таблице регистров:

  • Адрес - одинаков
  • Тип  - BIT, если битовая маска лежит в одном Modbus-регистре  или BIT4 - если в нескольких
  • Блок/Бит - 1, 2, 3, и т.д  - тот бит, который отвечает за конкретную ошибку 
  • Название - Название ошибки
  • В SCADA на каждую ошибку будет отображен свой Дискретный примитив

Если достаточно только обобщенной ошибка (т.е. факта того, что есть какая-то ошибка), то региструете только одну запись:

  • Адрес - адрес битовой маски 
  • Тип - WORD или DWORD
  • В SCADA используйте  (подробнее см. ниже)
    • Переменную для отображения Аварийного сигнала обощенной аварии или примитив LED-индикатор
    • Текстовое поле + Text-функцию для отображения описания активных ошибок


Настройка SCADA

В АСУД.SCADA для визуализации данных Modbus-устройств можно использовать следующие примитивы:

  • Таблица Тегов - быстрая визуализация в табличном виде в одном месте ситуационного плана без визуально-звуковой индикации: 
    • числовых данных
    • состояний работы устройства (преобразование числа в надпись с помощью Text-функций)
    • расшифровка кодов ошибок   (преобразование числа в надпись с помощью Text-функций)
  • Цифровой индикатор, стрелочный индикатор - для отображения любых числовых значений (с возможностью указания граничных значений и визуально-звуковой индикакаций выхода за границы)
  • Текстовое поле - для отображения любых числовых значений, а также преобразования числового значения в текстовое по заданному правилу с помощью скрипта или Text-функции. Кроме того с помощью данного примитива и скрипта можно выполнить запись значения в регистр Modbus-устройства.
  • Кнопка - для записи значения в регистр
  • Дискретный датчик - визуализация аварийных событий.
  • Led-индикатор - для отображения дискретных значений, в том числе выделение бита из маски.
  • Прибор учета  - если устройство было зарегистрировано в ASUDBase и вам нужна простая визуализация в табличной форме
  • Изображение - визуализация аварийный событий 
  • Набор изображений - визуализация состояния устройства или запись значения в регистр Modbus-устройства.

Замечание! Для того чтобы реализовать возможность записи введенного пользователем значения в Modbus-устройство, необходимо чтобы:

  • Регистр  относится к типу HoldReg или Coils
  • Значение поля AW (Allow Write) было > 0

Рассмотрим пример визуализации значения регистра, представляющего собой битовую маску ошибок, если этот регистр был настроен в ОРС-сервере, как числовое значение (а не набор типов BIT).

Пример 1. 
Необходимо визуализировать с помощью Дискретных примитивов состояние регистра "Авария", где значение регистра представляет собой битовую маску кодов аварий

Например, биты: 

  • 1  - авария насоса 
  • 2  - неиспраность датчика температуры 
  • 3  - перепад давления

Создаем несколько переменных  (по числу аварийный событий), например: 

Var.1:

  • Имя - 1
  • Журнал событие - Авария насоса 
  • Журнал адрес - Котельная
  • Задержка (с.) - 0
  • Тип -  ВЫРАЖЕНИЕ
  • Выражение - BIT (X;1)
  • Добавлям Тег регистра "Авария"

Var.2:

  • Имя - 2
  • Журнал событие - Неиспраность ДТ 
  • Журнал адрес - Котельная
  • Задержка (с.) - 0
  • Тип -  ВЫРАЖЕНИЕ
  • Выражение - BIT (X;2)
  • Добавлям Тег регистра "Авария"

Var.3:

  • Имя - 3
  • Журнал событие - Перепад давления
  • Журнал адрес - Котельная
  • Задержка (с.) - 0
  • Тип -  ВЫРАЖЕНИЕ
  • Выражение - BIT (X;3)
  • Добавлям Тег регистра "Авария"

Размещаем на ситуационном плане примтивы типа Дискретный датчик, в настройке Тег вручную указываем  имена переменных VAR.1, VAR.2, VAR.3.

Пример 2.  Необходимо визуализировать с помощью Дискретного датчика обобщенную аварию  регистра "Авария" из предыдущего примера.

Иногда нет необходимости выделять каждую Аварию отдельным примитивом Дискретный датчиком, а например достаточно просто показать сигнал Обощенной авариии. В этом случае, 

 Создаем переменную VAR.Total:

  • Имя - Total
  • Журнал событие - Авария
  • Журнал адрес - Котельная
  • Задержка (с.) - 0
  • Тип -  <> 0
  • Добавлям Тег регистра "Авария"

Размещаем на ситуационном плане примтив типа Дискретный датчик, в настройке Тег вручную указываем  VAR.Total.

Если значение тега "Авария" будет отлично от 0 (т.е. будет установлен флаг любой из аварий), то примтив Дискретный датчик перейдет в сигнальное состоения.

При этом расшифроку Аварий, удобно реализовать с помощью  примитивов Таблица Тегов или Текстовое поле, связав их с тегом "Авария" (не переменной, а тегом!),  и создав Text-фукцию (см. пример 3 Функция BITSTR в описании)

# BITSTR()
0=Норма
1=авария насоса
2=неиспраность датчика температуры
3=перепад давления

Демонстрационный пример

Вы можете сами попробовать настроить в SCADA Modbus-устройство воспользовавшись эмулятором в программе KUNIP.EXE
См. пример настройки в описании эмулятора.