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

Материал из TekonWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показано 108 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Category:Интеграция]]
[[Category:Modbus]]


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


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


Есть несколько модификаций данного протокола:
* Modbus RTU
* Modbus TCP
* Modbus ASCII (в настоящее время не поддерживается в АСУД-248)


Само слово "Modbus" - ничего не говорит об [[M-Bus, Modbus, RS-485|интерфейсе]] между устройствами.


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


Следовательно, если известно, что устройство поддерживает протокол Modbus следует уточнить, какие физические интерфейсы есть у устройства и поддерживаются ли они в АСУД-248.
Изменения и дополнения:


С точки зрения доступа к данным устройство Modbus представляет собой таблицу, примерно следующего вида
'''05-07-2023'''
{| class="wikitable"
|-
! Адрес регистра !! Атрибуты!! Параметр !! Значение
|-
| 1 || R/W, Целое число || Уставка температуры || 15
|-
| 2 || R,  Целое число * 10 || Температура наружного воздуха || -156
|-
| 301 || R, Дробное число || Частота сети || 49,8
|}
где,
* Адрес регистра - уникальный идентификатор параметра, по которому осуществляется запрос значения параметра
* Атрибуты - атрибуты параметра
** R - параметр можно читать
** W - параметр можно записывать
** Целое число - параметр представляет собой целое число
** Целое число * 10 - параметр следует разделить на 10 перед отображением в SCADA
** Дробное число - параметр представляет собой дробное число
* Параметр - описание параметра
* Значение - текущее значение параметра


'''Внимание!'''
*поддержка типа специального типа ARRAY
Таблица должна быть отражена в технического документации конкретного устройства.
Таблица не универсальна для разного типа Modbus-устройств.
Без наличия таблицы настроить устройство не получится.


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


== Modbus и АСУД-248 ==
*'''Основной '''- регистрация устройства непосредственно  в Tekon OPC-сервер
АСУД-248 позволяет реализовать взаимодействие с устройствами по протоколу Modbus.
**доступно с версии АСУД.SCADA 2.6.3
**целесообразно использовать на всех новых объектах где добавляются Modbus-устройства
**при этом все настройки выполняются непосредственно в ОРС-сервере
**опрос устройства осуществляется непосредственно OPC-сервером, программа [[KCSLogger|KCSLogger]] не нужна 
*'''Устаревший''' - регистрация устройства в программе ASUDBase
**целесообразно использовать, если у вас уже есть Modbus-устройства, зарегистрированные в программе ASUDBase
**опрос осуществляется программой [[KCSLogger|KCSLogger]] 


Modbus-устройства могут быть подключены к концентраторам:
Данная статья ориентируется на настройку Modbus-устройств непосредственно в OPC-сервере '''версии 2.7.2 (и выше) '''и не расматривает возможность настройки устройств в программе [[ASUDBase|ASUDBase]]
* КЦС-IPM / КУН-IPM
* КЦС-М (есть ограничения в типе поддерживаемых устройств, подробнее см. далее)
* напрямую по компьютерной сети.


=== [[КЦС-IPM]] / [[КУН-IP]] ===  
Если, по каким-то причинам вы планируете выполнять настройку устройств в программе [[ASUDBase|ASUDBase]], либо  в АСУД.SCADA '''2.5.х и ранее''' , а также настройку Modbus c конценратором  [[КЦС-М|КЦС-М]] смотри [http://wiki.tekon.ru/index.php?title=Modbus-устройства&oldid=6438 предыдщую редакцию статьи].


Тракт передачи данных:
АСУД.SCADA позволяет реализовать взаимодействие с '''ЛЮБЫМИ''' устройствами, поддерживающими протокол Modbus.
Устройство Modbus -- RS-232/485 --  [[КЦС-IPM]] / [[КУН-IP]] -- Компьютерная сеть -- [[АРМ-диспетчера]]


{| class="wikitable"
Modbus-устройства могут быть подключены:
|-
| Поддерживаются спецификации || Modbus-RTU, Modbus TCP
|-
| Чтение данных || одиночное, групповое
|-
| Запись данных || одиночная
|-
| Число подключаемых устройств || до 255* на каждом интерфейсе
|}


<nowiki>
*концентраторам [[КЦС-IPM|КЦС-IPM]] / [[КУН-IP|КУН-IP]]
* - подробнее см. спецификацию подключаемого устройства и интерфейса подключения.
*контроллеру&nbsp;[[КИО-2MRS|КИО-2MRS]]
</nowiki>
*напрямую по компьютерной сети.  


'''Внимание:'''
Если вы используете обычную&nbsp;[[TL-линия|TL-линия]]&nbsp;связи, обратите внимание на возможность подключения&nbsp;&nbsp;[[КЦС-IPM|КЦС-IPM]]&nbsp;через&nbsp;[[IP-удлинитель|IP-удлинитель]].
* Требуется наличие USB-ключа защиты АСУД.SCADA. Опрос Modbus-устройств осуществляется программой [[KCSLogger]]. В ключе защиты ПО АСУД.SCADA должно быть прописано число [[Драйвер_EXT-модуля | драйверов EXT-модуля]], соответствующее общему числу подключаемых приборов.
* Следует придерживаться следующего правила при адресации Modbus-устройств: устройства, подключаемые к одному IP-концентратору должны иметь уникальные адреса (RS-идентификаторы).
* С помощью утилиты [[KCS_DEMO.EXE]] существует возможность в тестовом режиме проверить связь с Modbus-устройством (наличие USB-ключа при этом не требуется). При первом подключении устройства к АСУД-248 настоятельно рекомендуется воспользоваться данной утилитой.
* Начиная с версии 1.5-61 в программу ASUDBase также встроена функция тестового опроса Modbus-устройства (подробнее см. далее).


=== Прямое подключение по компьютерной сети ===
Тракт передачи данных:
 
<pre>Устройство Modbus -- RS-485 -- Концентратор / КИО -- Компьютерная сеть -- АРМ-диспетчер
Тракт передачи данных:  
Устройство Modbus с Ethernet -- Компьютерная сеть -- АРМ-диспетчера
Устройство Modbus с Ethernet -- Компьютерная сеть -- [[АРМ-диспетчера]]
</pre>
 
Остальное аналогично случая подключения к КЦС-IPM / КУН-IP
 
=== [[КЦС-М]] ===
Наличие [[Драйвер_EXT-модуля | драйверов EXT-модуля]] при подключении Modbus-устройства через КЦС-М - не требуется.
 
Тракт передачи данных:
Устройство Modbus -- RS-485 -- [[КЦС-М]] -- [[TL-линия]] -- [[Пульт-ПК]] или [[КИО]]


{| class="wikitable"
{| class="wikitable"
|-
|-
| Поддерживаются спецификации || Modbus-RTU
| Поддерживаются спецификации
|-
| Modbus-RTU, Modbus TCP
| Чтение данных || одиночное, групповое
|-
| Запись данных || не поддерживается
|-
|-
| Интерфейс подключения || '''только RS-485'''
| Чтение данных
| одиночное, групповое
|-
|-
| Режим работы интерфейса|| '''только 8-N-1'''
| Запись данных
| одиночная
|-
|-
| Скорость интерфейса|| '''9600, 19200 или 38400'''
| Число подключаемых устройств
|-
| до 255* на каждом интерфейсе
| Число подключаемых устройств || 1
|}
|}


В случае если параметры интерфейса подключаемого устройства отличаются от указанных следует перенастроить устройство.
&nbsp;
<nowiki>* - подробнее см. спецификацию подключаемого устройства и интерфейса подключения.</nowiki>


'''Внимание! Важно!'''
'''Внимание:'''
Конфигурация Modbus-устройства должна быть прошита непосредственно на КЦС-М
В связи с необходимостью прошивки КЦС-М '''крайне рекомендуется''' предварительно выполнить тестовое чтение данных Modbus-устройства подключившись в нему напрямую через преобразователь RS-485/RS-232 (USB). Это значительно облегчит вам последующую настройку, а в случае проблем - понять причину неисправности.


Тестовое чтение вы можете выполнить:
*Требуется наличие [[USB-ключ_защиты|USB-ключа защиты]] АСУД.SCADA.<br/> В ключе защиты ПО АСУД.SCADA должно быть прописано число [[Драйвер_EXT-модуля|драйверов EXT-модуля]], соответствующее общему числу подключаемых приборов.<br/> Для тестового опроса устройства в конфигураторе ОРС-сервера драйвер<u>не требуется</u>.
* Непосредственно в программе ASUDBase в процессе настройки регистров Modbus-устройства (подробнее см. далее)  
*Следует придерживаться следующего правила при адресации Modbus-устройств: устройства, подключаемые к одному IP-концентратору должны иметь уникальные адреса<br/> (RS-идентификаторы).
* С помощью программы [[KCS DEMO.EXE]].


Вам  следует:
== Modbus-протокол. Общая информация ==
* проверить правильность чтения Адресов всех регистров
* проверить корректное отображение значений полученных с устройства
** корректность параметра настройки Modbus - Тип данных
** корректность параметра настройки Modbus - Формат


Исправление неточностей настройки после прошивки КЦС-М будет крайне затруднительно!!!
Modbus - это коммуникационный протокол широко применяемый в промышленности. Он определяет правила пересылки данных при взаимодействии устройств.
Любые Адресов и Типа регистров в ASUDBase приведут к необходимости перепрошивки КЦС-М.


Программное обеспечение используемое при подключении Modbus-устройств в КЦС-М:
Мы можем реализовать диспетчеризацию и управления практически любого устройства, если оно поддерживает данный протокол.
* АСУД.SCADA версии 2.3.9 и выше
* или ASUDBase версии 1.5-71, утилита OPC Server\tools-server\kcsmprog.exe версии 1.2


Последовательность настройки Modbus-устройства при подключении к КЦС-М
Есть несколько модификаций данного протокола:
* Выполнить тестовое чтение данных с помощью программы ASUDBase или [[KCS DEMO.EXE]]
* Выполнить регистрацию КЦС-М и Modbus-устройства в программе ASUDBase, как описано в статье ниже
** Учесть, что Номер концентратора КЦС-М может быть '''трехзначный''' (102, 215 и т.п. при подключении к Пульту) или '''пятизначный''' (ID_KIO * 10000 + Номер, при подключении КЦС-М к КИО)
** При регистрации концентратора КЦС-М НЕ ставьте галочку IP-соединение
** Тип Modbus-устройства - '''Modbus RTU'''
** В адресном пространстве Modbus использовать только числовые типы данных (нельзя использовать побитовую разбивку, т.е. применять настройку Блок/Бит)
* Сохранить файл конфигурации, нажав на кнопку КЦС-М в окне настройки Modbus
** В папке OPC Server \ Settings  появится файл Номер_КЦС-М.mbs  (например: 803.mbs, 10315.mbs и т.п.)
** Свой файл конфигурации должен быть создан для каждого КЦС-М
* Выполнить прошивку КЦС-М c помощью программы [[KCSMPROG.EXE]]
* Подключить КЦС-М к устройству
* Настроить КЦС-М в ОPC-сервере, выбрав в качестве подключенного устройства  MODBUS RTU.
[[Файл:Kcsm modbus.JPG|350px|центр]]


Пример MBS-файла конфигурации
*Modbus RTU
<nowiki>
*Modbus TCP
1 012C 1 8 # BIT 1 1 500
*Modbus ASCII (в настоящее время не поддерживается в АСУД-248)
2 0258 1 8 # BIT 1 1 501
3 000A 1 16 # WORD 1 1 501
3 0018 1 16 # SHORT 2 1 502
3 0030 2 16 # FLOAT 1 1 503
3 0032 2 16 # FLOAT 4 1 503
4 00C8 1 16 # WORD 1 1 504
</nowiki>


При внесении изменений в окне настройки адресного пространства Modbus-устройства и создания нового файла, КЦС-М подлежит перепрошивке только при изменении любых данных в строке до символа #.
Само слово "Modbus" - ничего не говорит об [[M-Bus,_Modbus,_RS-485|интерфейсе]] между устройствами.


Замечание
Протокол Modbus может работать поверх интерфейсов RS-485/RS-232, компьютерной сети и других.
Драйвер КЦС-М читает данные типа Float, Integer 2-мя запросами по 1 регистру


Концентратор КЦС-М в процессе своей работы постоянно опрашивает Modbus-устройство и передают полученные данные в [[TL-линия|TL-линию]] связи. Период обновления данных при чтении 7 регистров с устройства - примерно 60 секунд.
С точки зрения доступа к данным устройство Modbus представляет собой таблицу, примерно следующего вида


== Настройка ПО АСУД.SCADA ==
{| class="wikitable"
Настройка программного обеспечения АСУД.SCADA может быть выполнена двумя способами:
|-
! Адрес регистра
! Атрибуты
! Параметр
! Значение
! Реальное значение
|-
| 1
| R/W, Целое число
| Уставка температуры
| 15
| 15
|-
| 2
| R, Целое число * 10
| Температура наружного воздуха
| -156
| -15,6
|-
| 301
| R, Дробное число
| Частота сети
| 49,8
| 49,8
|}


'''Вариант 1 (более простой/быстрый)''':
где,
* регистрации Modbus-устройства в программе ASUDBase;
* настройка карты АСУД.SCADA  - примитивы:
** [[Дополнительные примитивы|Прибор учета]]


'''Вариант 2 (более сложный)''':
*Адрес регистра - уникальный идентификатор параметра, по которому осуществляется запрос значения параметра<br/> Идентификатор находится в диапазоне 0 .. 65536.
* регистрации Modbus-устройства в программе ASUDBase;
*Атрибуты - атрибуты параметра
* настройке OPC-сервера: устройство Контейнер оборудования + Прибор учета;
**R - параметр можно читать
* настройка карты АСУД.SCADA  - примитивы
**W - параметр можно записывать
** дискретный датчик - сигналы аварии (неисправностей);
**Целое число - параметр представляет собой целое число
** цифровой индикатор - данные температуры, давления;
**Целое число * 10 - параметр следует разделить на 10&nbsp;для получения реального значения
** текстовое поле - информация о режимах работы оборудования, возможность записи значений в Modbus устройство.
**Дробное число - параметр представляет собой дробное число 
*Параметр - описание параметра
*Значение - текущее значение параметра


Принципиальное отличие варианта 1 от варианта 2 заключается в том, что в первом случае у вас данные отображаются простой таблицей и вы не сможете использовать механизм уведомлений об авариях (нештатных) ситуацияхНо первый вариант гораздо быстрее с точки зрения общего времени настройки визуализации сигналов.  
'''Внимание!'''
Таблица должна быть отражена в технического документации конкретного устройства.
Таблица не универсальна для разного типа Modbus-устройств.
  Без наличия таблицы настроить устройство не получится.


В случае если необходимо какой-то сигнал визуализировать с помощью примитива дискретный датчик (т.е. реализовать возможность оповещения об аварии), то следует:
Для некоторых типов Modbus-устройств, например: свободно программируемых контроллеров, таблица может зависеть от проекта, записанного в контроллер.<br/> Т.е. может быть сформирована в штатном ПО контроллера только после создания файла-проекта (см. например [[PIXEL|PIXEL]]).
* отобразить значения с помощью варианта 1
* требуемые сигналы пробросить в SCADA по варианту 2


== Регистрация Modbus-устройств в программе ASUDBase ==
=== Таблицы регистров ===
Настройка регистров Modbus-устройства осуществляется с помощью программы ASUDBase (версии 1.5-14 и выше).


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


<center>
{| class="wikitable"
[[Файл:Mb_abase10.JPG|600px|Регистрация устройства Modbus]]
|-
! Таблица
! Функция чтения
! Тип данных
! Разрешены Чтение (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)
| style="text-align: center;" | 0х3
| числовой/строковый
| style="text-align: center;" | R / W
| style="text-align: center;" |
0x10 или 0х6


Рисунок - Регистрация устройства Modbus
(см. параметр AW далее)
</center>


* Номер концентратора указать 901...999, 1901...1999, 2901...2999, ...
|-
| Регистры ввода (Input Registers)
| style="text-align: center;" | 0х4
| числовой/строковый
| style="text-align: center;" | R
| style="text-align: center;" | -
|}


Или номер будет проставлен автоматически после установки флажка "IP-соединение". Номер должен быть уникальным для каждого добавляемого устройства (фактически этот номер используется лишь для идентификации Modbus-устройства в базе данных).
Каждый регистр:


* Прибор - выбрать тип устройства: Modbus RTU или Modbus TCP, в зависимости от протокола реализуемого устройством.
*это ячейка размером в 2-байта.
*имеет уникальный адрес.  


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


Также следует указать
Если вы затрудняетесь с тем, какой тип регистра указывать - используйте HoldReg.
* Мастер устройство (КЦС-IPm, КУН-IPm, прямое IP),
* IP-адреса
* Порт
** 5000 - если устройство подключается через КЦС-IPm, КУН-IPm.
** 502 (как правило) - если устройство подключается напрямую по IP-сети.
* Параметры RS-интерфейса, к которому подключено устройство (тип, номер, скорость, четность и т.п.). Для устройств, подключаемых напрямую по IP-сети оставить без изменений.
* RS-идентификатор - номер (идентификатор) устройства в RS-сети, указанный в настройках устройства.
* Интервал опроса - период опроса устройства в минутах (0 - опрашивать максимально быстро).
* Читать архив - установить все флажки - резервный параметр, в настоящее время не используется.


Нажать кнопку "Добавить". Слева появится запись о регистрации устройства.
Иногда в документации на устройство можно увидеть, что адреса регистров&nbsp; обозначаются 5-ти&nbsp;(или 6-ти) значными числами: логическими адресами.&nbsp;


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


Далее следует по необходимости добавить новый тип Modbus устройства.
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 500px;"
|-
! scope="col" | Старшая цифра логического адреса
! scope="col" | Начальный логический адрес
! scope="col" | Тип данных
|-
| 0
| 00001
| Coil
|-
| 1
| 10001
| DiscInp
|-
| 3
| 30001
| InpReg
|-
| 4
| 40001
| HoldReg
|}


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


Нажать на кнопку "+" справа от поля Modbus. В открывшемся окне следует указать в левом нижнем углу общие параметры устройства.
Например: логический адрес = 40568


[[Файл:Mb abase 01.PNG|обрамить|центр|Общие настройки устройства Modbus]]
*Тип регистра 4 =&nbsp;HoldReg
*Физический адрес регистра = 568 - 1 = 567


Настройки устройства - следует указать, исходя из описания в документации на устройство
'''Замечание!'''<br/> При регистрации устройства единицу все время вычитать не нужно, вы просто указываете в настройках устройства значение базового регистра = 1.
* Название прибора - название устройства (любое название)
* Базовый регистр - как правило = 0 (реже 1)
* Читать группу элементов  - можно ли читать более 1 регистра за один запрос (0 - можно читать сколько угодно, >0 - максимальное число регистров на чтение в одном запросе)
* Разрешить при чтении пропуски в группе - можно ли читать несколько регистров за один запрос, если они расположены не подряд.


Если вы затрудняетесь с определением данных параметров, укажите:
Для определения значения, хранящегося в регистре, необходимо, исходя из документации, корректно указать&nbsp;тип данных.
* Базовый регистр = 0
* Читать группу = 1
* Пропуски = запрещены.  


Вы можете поэкспериментировать с данными настройками с помощью утилиты [[KCS_DEMO.EXE | kcs_demo]]


Если у вас есть *.mbs файлы импорта настроек Modbus-устройства, загруженные с сайта www.tekon.ru вы можете добавить их с помощью кнопки "Импорт".


Далее следует закрыть окно. При этом происходит создание (инициализация) устройства в БД.


Выбрать название вновь созданного устройства в выпадающем списке поля Modbus и нажать кнопку Изменить.
=== Типы данных ===


[[Файл:Mb abase 02.PNG|обрамить|центр|Привязка устройства Modbus к концентратору]]
Перед тем как рассмотреть типы данных, обратите внимание, как драйвер modbus-устройств представит считанное значение в SCADA


После этого следует нажать кнопку "..." справа от поля Modbus и повторно перейти к настройке Modbus-устройства.


[[Файл:Mb_abase_03.PNG|850px|центр|Настройка  устройства Modbus]]
==== Особенности представления значений Modbus-регистров в SCADA ====


Серым подсвечены колонки относящиеся к настройкам Modbus-протокола, остальные колонки относятся к настройкам АСУД.
Для настроенных Modbus-регистров&nbsp;ОРС-сервер&nbsp;создает следующие типы сигналов, которые будут доступны в SCADA:&nbsp;


Автозаполнение (новой строки таблицы) - при установке флага некоторые поля при добавлении новой записи заполняются на основе предыдущих введенных значений.
*''[[Дискретный_сигнал_(OPC-сервер)|Дискретный сигнал]] (в понимании SCADA)&nbsp; в режиме безопасности Охрана&nbsp;''-&nbsp; если регистр имеет тип BIT (BITInv, BOOL, BOOLInv, BIT4)&nbsp;и AW = 0
**в SCADA вы сможете использовать стандартные&nbsp;примитивы типа Дискретный сигнал или LED, Изображение 
*''Канал управления'' - если для регистра установлен параметр AW = 1,&nbsp; и название Тега окончивается на _CTRL, например "Svet_CTRL"
**в SCADA вы сможете использовать стандартные примитивы типа Канал управления или Изображение
**при этом подразумевается, что значение регистра может быть только 0 или 1. В противном случае не следует использовать данный тип сигнала 
*''Числовое значение'' - для всех остальных случаев


Экспорт - экспортировать данные настройки в файл для последующего использования на другом объекте.
Если по документации регистр имеет тип BIT (BITInv, BOOL, BOOLInv, BIT4), но вы <u>'''не хотите''',</u> чтобы сигнал был представлен в SCADA, как дискретный датчик, вам следует:


Импорт - импортировать данные настройки из файла. Кнопка активна только при добавлении нового Modbus-устройства (была нажата кнопка "+").
*изменить тип с BIT&nbsp; (BITInv, BOOL, BOOLInv)&nbsp;на Word , а с BIT4 на DWord,&nbsp; если регистр может иметь только значения 0,1&nbsp; (и не представляет собой битовую маску)
*или добавить к имени тега "_$", т.е. например: вместо&nbsp; "Tag1" указать "Tag1_$"
*использовать пост-обработку значения с помощью [[Выражения|#выражений]] - подробнее см. далее


'''Внимание! Важно!'''<br/> Используйте дискретное представление сигнала, только если вы будете использовать дискретные примитивы в SCADA.<br/> Если вы планируете с использовать&nbsp;с сигналом текстовое поле с указанием перечня значений - настраивайте регистр, как числовой!


Пример 1. В документации указано, что в регистре хранится значение 0 или 1, например:


==== Карта Modbus-регистров. Настройки протокола ====
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 768px;"
|-
| Описание
| Адрес
| Пояснение
|-
| Авария установки&nbsp; (Критический сбой)
| 0
| 0-Нет аварии / 1-Авария
|}


===== Основные настройки =====
вы можете добавить регистр несколькими&nbsp;способами


Modbus-настройки (см. описание на подключаемое Modbus-устройство).
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 768px;"
 
Все значение устройства доступные на чтение / запись хранятся в 4-х таблицах:
 
{| class="wikitable"
|-
! Таблица
! Функция чтения
|-
|-
| Регистры флагов (Coils)
| style="width: 87px;" | Тип регистра
| 0х1
| style="width: 18px;" | Адрес
| Пояснение
|-
|-
| Дискретные входы (Discrete Inputs)
| style="width: 87px;" | BOOL
| 0х2
| style="width: 18px;" | 0
| в SCADA&nbsp; этот сигнал будет отображен как [[Дискретный_сигнал_(OPC-сервер)|дискретный]].<br/> Для визуализации используются обычные дискретные примитивы
|-
|-
| Регистры хранения (Holding Registers)
| style="width: 87px;" | BIT,<br/> Блок/Бит = 1
| 0х3
| style="width: 18px;" | 0
| аналогично
|-
|-
| Регистры ввода (Input Registers)
| style="width: 87px;" | WORD
| 0х4
| style="width: 18px;" | 0
|  
в SCADA&nbsp; этот сигнал будет отображен как числовой, т.е. вы увидите именно одно из двух значений:<br/> именно 0 или 1, без дополнительных преобразований.<br/> Для визуализации используется LED, Текстовое поле, Изображение,<br/> но&nbsp;вы не сможете использовать[[Tekon_Scada|классические дискретные примитивы]].
 
|}
|}


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


'''Регистр''' - тип регистра, выпадающее меню
Тип регистра вы выбираете основываясь на документации, подключаемого устройства


  - Coils  — однобитовый тип, доступен на чтение и запись (R/W).
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 768px;"
  - DiscInp — однобитовый тип, доступен '''только''' на чтение (R).
  - HoldReg — 16-битовый тип, доступен на чтение и запись (R/W).
  - InpReg  — 16-битовый тип, доступен '''только''' на чтение (R).
 
'''Внимание!'''
Если вы планируете выполнять запись значения в регистр на устройстве,
вы должны выставить значение поля AW в 1 (подробнее далее).
 
'''Адрес''' - адрес регистра (в десятичной системе счисления)
 
'''Тип данных''' - тип данных хранящихся в регистре (и их размер), исходя из документации, выпадающее меню
 
{| border="1" cellpadding="1" cellspacing="1" style="width: 500px;"
|-
|-
! scope="col" | Название
! scope="col" | Название
! scope="col" | Альтернативное название
! scope="col" | Альтернативное название
! scope="col" | Число регистров
! scope="col" | Число регистров
! scope="col" | Диапазон значений
! scope="col" | Диапазон значений результата
! scope="col" style="width: 326px;" | Комментарий
|-
|-
| BIT
| BIT
| &nbsp;
| Boolean
| 1
| 0 или 1
| style="width: 326px;" |
Может быть использован&nbsp;для выделения сигнала из битовой маски, которая записана в регистре.<br/> Из регистра будет считано целое число, затем в этом числе будет проаназирован указанный бит.<br/> Номер анализируемого бита указывается в настройке Блок / Бит<br/> Нумерация бит в байте по умолчанию с 1, если в документации нумерация идет с 0, следует изменить значение 1->0 в 3 строке (подробнее см. далее раздел регистрация устройства в ОРС-сервере, строка конфигурации).<br/> Если в регистр будет производится запись, то предварительно прочитается текущее значение регистра, выполнится установка или сброс указанного бита, и далее полученное значение будет записано в регистр.
 
|-
| BITInv
| Boolean
| 1
| 0 или 1
| style="width: 326px;" | Аналогично BIT, но считаное из регистра значение будет проинвертировано
|-
| BOOL
| Boolean
| 1
| 0 или 1
| style="width: 326px;" | По-сути, это тип BIT c&nbsp; дополнительной настройкой: анализировать только младший бит (независимо от того,&nbsp; что указано далее в поле Блок / Бит).<br/> В отличии от типа BIT предполагает, что в регистре реально возможны только два значения: 0 или 1.
|-
| BOOLInv
| Boolean
| 1
| 1
| 0 или 1
| 0 или 1
| style="width: 326px;" | Аналогично BOOL, но считанное из регистра значение будет проинвертировано
|-
|-
| WORD
| WORD
| Unsigned word
|  
Unsigned word<br/> UINT
 
| 1
| 1
| 0 .. 65535
| Целые числа<br/> 0 .. 65535
| style="width: 326px;" | &nbsp;
|-
| CHAR
|
Signed byte,<br/> Short Integer
 
| 1
| Целые числа<br/> -128..127
| style="width: 326px;" | &nbsp;
|-
| SHORT
| Signed word,<br/> Small Integer
| 1
| Целые числа<br/> -32 768 ... 32 767
| style="width: 326px;" | &nbsp;
|-
|-
| FLOAT
| FLOAT
| &nbsp;
| REAL
| 2
| 2
| 1.5x10^-45 ...3.4x10^38
| 1.5x10^-45 ...3.4x10^38
| style="width: 326px;" | &nbsp;
|-
|-
| DWORD
| DWORD
| Unsigned long
| Unsigned long<br/> ULONG
| 2
| 2
| 0..4294967295
|  
Целые числа
 
0..4294967295
 
| style="width: 326px;" | &nbsp;
|-
|-
| INTEGER
| INTEGER
| Signed long
| Signed long<br/> LONG
| 2
| 2
| -2147483648..2147483647
|-
| CHAR
|  
|  
Signed byte,<br/> Short Integer
Целые числа -2147483648..2147483647


| 1
| style="width: 326px;" | &nbsp;
| -128..127
|-
|-
| SHORT
| BIT4
| Signed word,<br/> Small Integer
| &nbsp;
| 1
| 2
| -32 768 ... 32 767
| 0 или 1
| style="width: 326px;" | &nbsp;
|-
|-
| DOUBLE
| DOUBLE
Строка 363: Строка 374:
| 4
| 4
| 5.0 x 10^-324 .. 1.7 x 10^308
| 5.0 x 10^-324 .. 1.7 x 10^308
|-
| style="width: 326px;" | &nbsp;
| BIT4
| &nbsp;
| 2
| 0 или 1
|-
|-
| STRING
| STRING
Строка 377: Строка 384:


| строка данных
| строка данных
| style="width: 326px;" | Поддержка в SCADA 2.7.13 и выше
|-
|-
| INT64
| INT64
| Big Integer
| Big Integer
| &nbsp;
| &nbsp;
| -2^63 ... 2^63-1
|  
Целые числа
 
-2^63 ... 2^63-1
 
| style="width: 326px;" | &nbsp;
|-
| ARRAY
| &nbsp;
|
указывается,<br/> от 1 до 32
 
(запрашиваемое число регистров будет равно&nbsp; указанному)
 
|
Целые числа
 
0..4294967295
 
| style="width: 326px;" |
Поддержка в SCADA 2.7.14 и выше
 
Это специальный тип, который, как правило, позволяет собирать&nbsp;отдельные ошибки в битовую маску ошибок.
 
Будут прочитаны последовательно регистры, начиная с указанного. Предполагается, что в регистрах лежат только значения 0 или не 0. Подробнее см. далее
 
|}
|}


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


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


*для типа данных BIT указывается анализируемый бит (от 1 до 16) в слове. Бит 1 - младший, 16 - старший.
Обычное значение поля Формат:
*для типа 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).


  Запрос данных (в шестнадцатиричной  кодировке):  
  Запрос данных (в шестнадцатиричной  кодировке):  
Строка 420: Строка 452:
*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"
Строка 429: Строка 459:
! Правило перестановки
! Правило перестановки
! Результат
! Результат
! Комментарий
|-
|-
| 12 34 56 78
| 12 34 56 78
Строка 434: Строка 465:
| 1_0_3_2
| 1_0_3_2
| 0x56781234
| 0x56781234
| &nbsp;
|-
|-
| 12 34 56 78
| 12 34 56 78
Строка 439: Строка 471:
| 0_1_2_3
| 0_1_2_3
| 0x78563412
| 0x78563412
| обратный порядок<br/> младший байт вперед
|-
|-
| 12 34 56 78
| 12 34 56 78
Строка 444: Строка 477:
| 2_3_0_1
| 2_3_0_1
| 0x34127856
| 0x34127856
| &nbsp;
|-
|-
| 12 34 56 78
| 12 34 56 78
Строка 449: Строка 483:
| 3_2_1_0
| 3_2_1_0
| 0x12345678
| 0x12345678
| прямой порядок<br/> старший байт вперед
|}
|}


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


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


  Запрос данных (в шестнадцатиричной  кодировке):  
  Запрос данных (в шестнадцатиричной  кодировке):  
Строка 482: Строка 517:
Т.е. для регистров устройства данного типа корректное значение формата - 1.
Т.е. для регистров устройства данного типа корректное значение формата - 1.


===== Дополнительные настройки =====
==== Уточнение для типа ARRAY ====


Modbus-настройки дополнительные большинстве случаев можно оставить значение по умолчанию) - отображаются при снятом флажке "Скрыть дополнительные поля"
Это служебный тип данных, позволяющий объединить значения&nbsp;'''до 32''' '''последовательных''' регистров&nbsp;(типа WORD / BOOL)&nbsp;в одно значение (битовую маску).


'''Множитель''' - множитель значения считанного из регистра.
Это может быть удобно в следующей ситуации, предположим у нас есть устройство ошибки, которого лежат в последовательных регистрах&nbsp;


Учитывается для всех типов кроме BIT, BIT4, STRING
{| class="wikitable"
|-
! Регистр
! style="width: 74px;" | Адрес
! style="width: 74px;" | Тип данных
! style="width: 74px;" | Возможные значения
! style="width: 195px;" | Описание
|-
| Coil
| style="width: 74px;" | 101
| style="width: 74px;" | &nbsp;
| style="width: 74px;" | 0 / 1
| style="width: 195px;" | Ошибка 1
|-
| Coil
| style="width: 74px;" | 102
| style="width: 74px;" | &nbsp;
| style="width: 74px;" | 0 / 1
| style="width: 195px;" | Ошибка 2
|-
| Coil
| style="width: 74px;" | 103
| style="width: 74px;" | &nbsp;
| style="width: 74px;" | 0 / 1
| style="width: 195px;" | Ошибка 3
|-
| ..
| style="width: 74px;" | ...
| style="width: 74px;" | ...
| style="width: 74px;" | ...
| style="width: 195px;" | ...
|-
| Coil
| style="width: 74px;" | 110
| style="width: 74px;" | &nbsp;
| style="width: 74px;" | 0 / 1
| style="width: 195px;" | Ошибка 10
|}


После чтения регистра: 
И необходимо визуализировать эти ошибки в SCADA следующим образом:
    Значение в SCADA   = значение регистра * множитель


Перед записью регистра:
*показать обощенный признак ошибки
    Значение регистра  = Значение SCADA / множитель
*показать активные ошибки в текстовом поле


Минимальное значение Множителя 0,0001.
В этом случае, как раз и будет удобен тип ARRAY.


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


Множитель = 1 / (2 ^ Указанный_множитель)
[[File:Modbus array.JPG|center|Modbus array.JPG]]Драйвер при этом прочитает значения регистров с 101 по 110 и скомпонует результат в одно значение целого типа.


'''Адрес W''' - адрес записи. Следует указать, если запись необходимо произвести в регистр по адресу отличному от адреса чтения.
При этом, если значение&nbsp;


'''Параметры **''' - набор параметров, указываемых в случае, если перед записью регистра, следует выполнить запись значения в другой или в этот же регистр. Множитель при этом не используется. После записи первого значения выполняется пауза в 1000 мс. перед записью основного значения.
*= 0&nbsp; - ошибок нет
*> 0 - есть одна или несколько ошибок


***Адрес - адрес регистра.
Например, если значение равно 5&nbsp;( в двочной системе&nbsp; 101), то активными являются ошибка&nbsp;1 и ошибка&nbsp;3.&nbsp;&nbsp;
*** Тип данных - тип данных регистра.
***Формат - формат представления числа в регистре.
*** Значение - значение для записи.  


  Это может быть полезно, если, например: перед изменением параметра следует указать, пароль (как в контроллерах ОВЕН ТРМ-133М при изменении текущего состояния). Или если, например: необходимо выполнить запись фронтом, т.е. перед записью 1 следует записать 0, после этого записать 1.
В SCADA для визуализации данных вы используете:


'''Sleep''' - ожидание в мс., указывается в случае если необходима задержка после записи регистра перед следующей операцией чтения.
*LED&nbsp;
*Текстовое поле +&nbsp;[[Text-функция|Text-функция]]


'''AW''' - разрешена ли запись регистра (1 -да, 0 - нет). Актуально '''только''' для регистров типа Coils / HoldReg.


'''MinWV, MaxWV''' - интервал допустимых значений для записи (если MinWV=MaxWV=0 - проверка значений не выполняется).


==== Карта Modbus-регистров. Настройки Scada  ====
== Регистрация Modbus-устройств в Tekon OPC-сервер ==


Scada-настройки (для отображения в АСУД.SCADA)
Добавьте Modbus-устройство в конфигурацию[[Tekon_OPC-сервер|OPC-сервера]].
* Вирт.КДД-RS - выполнить ли трансляцию данных прочитанного регистра устройства в дискретный сигнал OPC-сервера Текоn, путем привязки к каналу концентратора [[Виртуальный КДД-RS]]. Что позволит впоследствии в АСУД.SCADA использовать примитивы типа "Дискретный датчик" с данным сигналом. При этом предполагается что значение регистра может быть только 0 или 1.
  Значение 0 - не транслировать данные в виртуальный  КДД-RS.
  Значение 1 - транслировать данные в виртуальный КДД-RS.
Номер виртуального КДД-RS и номер канала концентратора при этом указываются ниже (под таблицей).
'''Внимание!''' Начиная с версии SCADA 2.3.1 update 3 функционал виртуального КДД-RS может быть реализован с помощью [[Переменные|Переменных]]. При настройке следует всегда указывать Значение 0.
* Параметр - данное поле заполняется автоматически сквозной нумерацией > 500. Изменять данное значение самостоятельно не следует.
* Сокращение - сокращенное название параметра (до 10 символов) - отображается в окне Шаг 2 программы ASUDBase при просмотре полученных значений.
* Название  - полное название параметра (до 40 символов)


'''Внимание!'''
Если устройство подключено:
Номер параметра в каждой строке (каждом регистре) должен быть >500 и уникальным.
Проследите за этим фактом.


<center>
*напрямую по компьютерной сети
[[Файл:Mb_abase21.PNG|600px|Регистрация устройства Modbus]]
**Добавьте DA \ Компьютерная сеть \ Modbus TCP 
*через КЦС-IPM \ КУН-IPM
**Добавьте DA \ Концентратор&nbsp;&nbsp;КЦС-IPM или&nbsp;&nbsp;КУН-IPM \ Modbus RTU 
*через сторонний конвертер интерфейса&nbsp;
**Добавьте DA \ IP-RS конвертер \ Modbus RTU 


Рисунок - Пример настроенной карты Modbus
[[File:Modbus opc 1.PNG|center|250px|Modbus opc 1.PNG]]
</center>


'''Внимание!''' Замечание относительно сохранения посуточного архива устройства
Выполните двойной клик на созданном устройстве.
В редких случаях может подключаться учетное Modbus-устройство, например: электросчетчик
При этом можно реализовать аккумулирование первого прочитанного значения в сутках для
параметров передаваемых НИ (нарастающим итогом), например: показаний расхода электроэнергии.
При этом номера параметров следует указывать не просто > 500, а с учетом кодов параметров
в БД original.gdb (см. программу ASUDBase меню Настройка / Коды параметров)
Например, следует указывать код 1071 для параметра A+ (кВт*ч) - Активная прямая
Также в программе [[KCSLogger]] следует установить флажок "Записывать первые мгновенные ..."
в окне Настройки.


==== Тестовый опрос Modbus-устройства  ====
[[File:Modbus OPC 1 1.PNG|center|Modbus OPC 1 1.PNG]]Нажмите Да, если вы создаете новое устройство с новым описанием регистров. Нажмите Нет - если вы создаете устройство, для которого ранее уже создавали таблицу регистров.&nbsp;


В программе ASUDBase, начиная с версии 1.5-61, можно выполнить тестовый опрос Modbus-устройства. Это значительно ускоряет процесс добавления в конфигурацию новых типов устройств.
Если вы выбрали Да - следует указать в латинице имя устройства,&nbsp;например: pixel


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


'''Внимание!''' Программа ASUDBase должна запускаться из папки ..\OPC Server
[[File:Modbus OPC 2.PNG|center|750px|Modbus opc 2.PNG]]


В окне настройки Modbus-устройства следует нажать кнопку
На рисунке отображен пример окна настройки устройства, подключенного к концентратору КЦС-IPM, КУН-IPM.
* Прочитать один - для чтения выбранного регистра (предварительно следует выполнить клик на ячейке Адреса регистра)
* Прочитать все - для обновления значений всех регистров


[[Файл:Modbus test read.JPG|600px|безрамки|центр]]
Для каждой ячейки доступна информационная подсказка (хинт).


Если установить флажок Показать лог, то после опроса устройства откроется окно протокола обмена данными с устройством. Лог также отобразится в случае неудачного обмена.
Строки имеют следующий смысл:


Вы можете менять значения конфигурации устройства (Базовый регистр, чтение группы и т.п.), параметры выбранного регистра, добавлять новые регистры  и проверять корректность обмена данными с устройством.
#название столбцов таблицы
#тип протокола устройства [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/> Это также увеличивает скорость опроса устройства.  
##[0, 1] - стартовый бит в байте, по-умолчанию 1.&nbsp; 
#следующие строки - это собственно таблица&nbsp;адресов&nbsp;Modbus-регистров из документации на устройство


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


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


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


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


Очень быстрый вариант. Однако не позволяет выполнить отображение в SCADA&nbsp;аварийных событий с помощью примитивов типа Дискретный датчик.
Множитель учитывается для всех типов кроме BIT, BITInv, BOOL, BOOLInv, BIT4, STRING


Может быть применен, только если необходимо визуалировать в SCADA простые числовые данные или режим работы устройства (например: в работе, останов и т.п.)&nbsp;&nbsp;в табличном виде.
После чтения регистра: 
    Значение SCADA = значение регистра * множитель


Настройка ОРС-сервера не требуется.
Перед записью регистра:
    Значение регистра  = Значение SCADA / множитель


Разместите на ситуационном плане в SCADA примитив [[Дополнительные_примитивы|Прибор учета]] и настройте согласно инструкции.
Минимальное значение Множителя 0,0001.<br/> '''Внимание!'''<br/> При указании в качестве Множителя значений 2, 3, 4, 5, 6, 7, 8, 9 - реальное значение множителя определяется по формуле


  '''Замечание!'''
  Множитель = 1 / (2 ^ Указанный_множитель)
В ASUDBase каждому устройству Modbus должен быть задан уникальный (произвольный) серийный номер.


*AW&nbsp; - данный параметр разрешает запись значений в регистр, например для изменения уставок устройства или управления устройством из SCADA.&nbsp;<br/> Актуально '''только''' для регистров типа Coils / HoldReg.<br/> Возможные значения:<br/> 0 - запись в регистр запрещена<br/> 1 - запись в регистр разрешена. Для регистров HoldReg будет использоваться функция $10&nbsp;для записи<br/> 6 - для регистров HoldReg будет использоваться функция $06 для записи&nbsp; &nbsp;(для исп. данного значения требуется доп. обновление для версии 2.7.5)<br/> 10 -&nbsp; аналог значения 1. Для регистров HoldReg будет использоваться функция $10&nbsp;для записи&nbsp;(для исп. данного значения требуется доп. обновление для версии 2.7.5)
*Тег - имя тега (по-русски&nbsp;или латиницей), которое будет отображено в SCADA.<br/> Имя тега <u>должно быть уникально</u> в рамках устройства.<br/> В имени Тега <u>не следует</u> использовать символ точка.
*Название - наименование сигнала (неисправности), которое будет отображаться в журнале событий в программе SCADA.


=== Вариант настройки 2 (для версий 2.5.2 и выше) ===
Для сохранения изменений, нажать кнопку Сохранить.


Начиная с версии 2.5.2 проброс данных Modbus-устройств в SCADA сделан максимально комфортным.&nbsp;&nbsp;
Начиная с версии 2.7.14 добавлена поддержка [[Выражения|выражений]] для постобработки считанного из регистра значения, аналогично, как это сделано в функционале [[Переменные|Переменных]] или&nbsp;[[Text-функция|Тext-функции]]


==== Настройка ОРС-сервера ====
[[Выражения|Выражение]] добавляется в конце поля Название после символа #, например:


После настройки устройств в программе ASUDBase, запустить конфигуратор ОРС-сервера.
&nbsp;[[File:Modbus parseExpr.PNG|center|450px|Modbus parseExpr.PNG]]При этом программа понимает, что&nbsp;


Добавить в адресное пространство ОРС-сервера драйвер [[Tekon_OPC-сервер#DATABASE|DA \ DATABASE]],&nbsp; установить в окне свойств значение "Да" для устройств ModBus RTU и/или&nbsp; ModBus TCP.
*Регистр65 - это название, которое будет проброшено в SCADA
*X*10 - это выражение постобработки


Закрыть конфигуратор ОРС-сервера.
В примере выше, реальное значение регистра равно 8, при этом после постобработки получаем:


Запустить опрос Modbus-устройств (программу [[KCSLogger|KCSLogger]]).
*X * 10&nbsp; = 8 * 10 = 80
*BITS(X:1:4) = BITS(8:1:4) = 4


==== Настройка SCADA ====
Постобработка '''разрешена '''только для числовых регистров с AW = 0 (для которых запрещена запись).


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


*[[Дополнительные_примитивы#Таблица_данных_Тегов|Таблица Тегов]]&nbsp;- '''быстрая визуализация''' в табличном виде в одном месте ситуационного плана:&nbsp;  
*BITS&nbsp;допускает только полную запись (с указанием Х):&nbsp;BITS(X:1:4),&nbsp;&nbsp;а не&nbsp;&nbsp;BITS(1:4);
**числовых данных
*символом разделителем является двоеточие (:), а не точка с запятой (;);
**состояний работы устройства (преобразование числа в надпись с помощью [[Text-функция|Text-функций]])  
*при анализе выражения&nbsp;учитывается номер стартового бита в байте (0 или 1), указанный в настройках Modbus-устройства.  
**расшифровка кодов ошибок&nbsp; &nbsp;(преобразование числа в надпись с помощью [[Text-функция|Text-функций]])  
*Цифровой индикатор - для отображения любых числовых значений возможностью указания граничных значений и визуально звуковой индикакаций выхода за границы)  
*Текстовое поле - для отображения любых числовых значений, а также преобразования числового значения в текстовое по заданному правилу с помощью [[Скрипты|скрипта]]&nbsp;или [[Text-функция|Text-функции]]. Кроме того с помощью данного примитива и [[Скрипты|скрипта ]]можно выполнить '''запись значения в регистр '''Modbus-устройства.
*Дискретный датчик - визуализация аварийных событий.  


'''Замечание!''' Для того чтобы реализовать с помощью примитива "Текстовое поле" возможность записи введенного пользователем значения в Modbus-устройство, необходимо чтобы:
'''Замечание!'''<br/> Начиная с версии 2.7.5 в свойствах Modbus-устройства появилась настройка Дополнительный сдвиг адреса - это настройка может быть применена, например: при регистрации контроллеров сплит-систем, когда адреса регистров внутренних&nbsp;блоков&nbsp;системы кондиционирования сдвинуты относительно общей карты на число, соответствующее номеру внутреннего блока.<br/> Т.е. вы регистрируете и настраиваете Modbus-устройство с адресами первого блока. Затем добавляете второе Modbus-устройство, указываете файл настроек первого, но дополнительно указываете настройку сдвиг адресов.&nbsp;&nbsp;&nbsp;


*Регистр (в настройках устройства в ASUDBase)&nbsp; относится к типу '''HoldReg '''или '''Coils'''
'''Замечание!'''<br/> Поле Версия устройства - не используется (всегда отображает ---)
*Значение поля '''AW '''(Allow Write) было установлено в&nbsp;1
*В настройка примитива был указан LUA-объект, подробнее см.&nbsp;[[Скрипты|Скрипты]]


'''Замечание!''' Использование примитивов типа Дискретный датчик.
&nbsp;


Если вы планируете использовать примитив Дискретный датчик, то данные получаемые с Modbus-устройства, должны быть предварительно преобразованы в дискретный сигнал в понимании SCADA. Для этого вы должны использовать механизм [[Переменные|Переменных]].
=== Тестовый опрос устройства&nbsp; ===


Необходимо создать Переменную, связать ее с тегом&nbsp; Modbus-устройства, связать Переменную с Дискретным датчиком на ситуационном плане.
Для выполнения тестового опроса устройства, сохраните настройки и нажмите кнопку&nbsp;Опросить. Будет&nbsp;выполнен&nbsp;опрос устройства с отображением полученных данных в столбце Значение


'''Пример 1.'''&nbsp; Необходимо визуализировать с помощью Дискретного датчика состояние регистра "Авария насоса" (где:&nbsp; 0 - норма, 1&nbsp; авария)
Кнопка Лог&nbsp; - отобразит&nbsp;лог последнего обмена&nbsp; данными с устройством. Расшировку кодов возможных ошибок см. в описании программы&nbsp;[[KCS_DEMO.EXE|KCS DEMO.EXE]]&nbsp;


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


*Имя - Nasos
Флаг "Не выполнять перезапросы в случае ошибки" - позволяет не выполнять повторные отправки данных в случае ошибки.
*Журнал событие - Авария насоса&nbsp;
*Журнал адрес - Котельная
*Задержка (с.) - 0
*Тип -&nbsp; <> 0
*Добавлям Тег регистра "Авария насоса"


Размещаем на ситуационном плане примтив типа Дискретный датчик, в настройке&nbsp;Тег вручную указываем&nbsp;&nbsp;VarNasos.
=== Финальный опрос устройства ===


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


Например:&nbsp;
[[File:Modbus opc 2.PNG|center|450px|Modbus opc 2.PNG]]Попробуйте последовательно провести следующие изменения в параметрах третьей (3) строки конфигурации:


*520.01&nbsp; - авария насоса&nbsp;  
#Увеличить число регистров в запросе с 1 до 16 (стоблец Адрес).  
*520.02&nbsp; - неиспраность датчика температуры&nbsp;  
#Выполните опрос устройства, если устройство было опрошено без ошибок, переходите к следующему шагу
*520.03&nbsp; - перепад давления
#Разрешите пропуски в группе чтения, изменив значение Тип&nbsp;&nbsp;&nbsp;0 на 1 (стоблец Тип данных).
#Выполните опрос устройства.&nbsp;<br/> Если устройство ответило с ошибкой, запретите пропуски, и повторите опрос.


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


Т.е в значении&nbsp; регистра&nbsp;520&nbsp; хранится несколько сигнальных (аварийных)&nbsp;&nbsp;событий. Допустим вы читаете значение регистра в ASUDBase или&nbsp;[[KCS_DEMO.EXE|KCS DEMO.EXE]]&nbsp;и получаете значение регистра 520 = 5&nbsp;
Если вы указали для регистра значение AW > 0, вы можете выполнить тествую запись непосредственно в окне настройки.&nbsp;


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


Создаем несколько переменных&nbsp; (по числу аварийный событий), например:&nbsp;
Нельзя выполнять запись значений для регистров типа:&nbsp;&nbsp;[mbString, mbDouble, mbINT64, mbBit4, mbARRAY]


Var1:
&nbsp;


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


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


*Имя - 2
Например, вы видите в документации на устройство следущую информацию в таблице регистров:&nbsp;
*Журнал событие - Неиспраность ДТ&nbsp;  
*Журнал адрес - Котельная
*Задержка (с.) - 0
*Тип -&nbsp; ВЫРАЖЕНИЕ
*Выражение - BIT (X;2)
*Добавлям Тег регистра "Авария"


Var3:
*520.01&nbsp; - авария насоса&nbsp;
*520.02&nbsp; - неиспраность датчика температуры&nbsp;
*520.03&nbsp; - перепад давления


*Имя - 3
Запись типа 520.01 - означает, что для получения сигнала "Авария насоса" следует прочитать регистр 520&nbsp; и проверить факт установки в значении регистра 1-го (первого младшего бита).
*Журнал событие - Перепад давления
*Журнал адрес - Котельная
*Задержка (с.) - 0
*Тип -&nbsp; ВЫРАЖЕНИЕ
*Выражение - BIT (X;3)  
*Добавлям Тег регистра "Авария"


Размещаем на ситуационном плане примтивы типа Дискретный датчик, в настройке&nbsp;Тег вручную указываем&nbsp;&nbsp;имена переменных Var1, Var2, Var3.
Т.е в значении&nbsp; регистра&nbsp;520&nbsp; хранится обощенно несколько сигнальных (аварийных)&nbsp;&nbsp;событий.<br/> Допустим вы читаете регистр&nbsp;и получаете значение = 5.&nbsp;


'''Пример 3.'''&nbsp; Необходимо визуализировать с помощью Дискретного&nbsp;датчика обобщенную аварию&nbsp;&nbsp;регистра "Авария" из '''Примера 2'''.
Переводим это значение в двоичный код (например, с помощью Калькулятора Windows)&nbsp; и получаем значение&nbsp;<br/> 5 (DEC)&nbsp; =&nbsp; 101 (BIN),&nbsp;<br/> т.е. в регистре 520&nbsp;&nbsp;установлены 1 и 3 биты, есть авария насоса и перепад давления.


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


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


*Имя - Total
*Адрес - одинаков = 520
*Журнал событие - Авария
*Тип&nbsp; - BIT
*Журнал адрес - Котельная
*Блок/Бит - 1, 2, 3, и т.д&nbsp; - тот бит, который отвечает за конкретную ошибку&nbsp;
*Задержка (с.) - 0
*Название - Название ошибки
*Тип -&nbsp; <> 0
*В SCADA на каждую ошибку будет отображен свой Дискретный примитив
*Добавлям Тег регистра "Авария"


Размещаем на ситуационном плане примтив типа Дискретный датчик, в настройке&nbsp;Тег вручную указываем&nbsp;&nbsp;VarTotal.
Если достаточно только обобщенной&nbsp;ошибка (т.е. факта того, что есть какая-то ошибка), то региструете только одну запись:


Если значение тега "Авария" будет отлично от 0 (т.е. будет установлен флаг любой из аварий), то примтив Дискретный датчик перейдет в сигнальное состоения.
*Адрес - адрес битовой маски&nbsp; = 520
*Тип - WORD или DWORD
*В SCADA используйте&nbsp;&nbsp;(подробнее см. ниже)  
**Переменную для отображения Аварийного сигнала обощенной аварии или примитив LED-индикатор
**Текстовое поле + Text-функцию для отображения описания активных ошибок


При этом расшифроку Аварий, удобно реализовать с помощью&nbsp; примитивов&nbsp;[[Дополнительные_примитивы#Таблица_данных_Тегов|Таблица Тегов]]&nbsp;или Текстовое поле, связав их с тегом "Авария" (не переменной, а тегом!),&nbsp;&nbsp;и создав [[Text-функция|Text-фукцию]]&nbsp;(см. пример 3 Функция BITSTR'''&nbsp;'''в описании)
== Настройка SCADA ==
<pre># BITSTR()
0=Норма
1=авария насоса&nbsp;
2=неиспраность датчика температуры
3=перепад давления</pre>
 
=== Вариант настройки 2&nbsp;(для версий до 2.5.2) ===
 
'''Внимание! '''Только для версий до 2.5.2
 
==== Настройка ОРС-сервера ====
 
===== Быстрая настройка =====
 
Может быть применена, только если в конфигурации ОРС-сервера ранее не использовался Контейнер оборудования.
 
После настройки всех Modbus-устройств следует сформировать конфигурационный файл OPC-сервера. Для этого в ASUDBase следует выбрать меню ''Настройка \ SCADA \ Конфигурация Modbus''.
 
Созданный файл DBase \ wac.conf следует скопировать в папку Tekon \ OPC Server \ settings. Затем запустить конфигуратор OPC-сервера и проверить добавление устройств.
 
===== Обычная настройка =====
 
'''Внимание!'''
Для возможности настройки устройств в ОРС-сервере, следует:
* либо В ASUDBase выбрать меню ''Настройка \ SCADA \ Обновить параметры Modbus-устройств''.
* либо выполнить один опрос Modbus-устройств программой [[KCSLogger|KCSLogger]].
 
Для отображения данных регистров со значением поля [Вирт.КДД-RS] = 0 и со значением параметра >= 500 следует добавить устройство DA Tekon \ Контейнер оборудование \ Прибор учета
 
Далее выполнить двойной клик на приборе учета, в открывшемся окне слева выбрать требуемое устройство для отображения данных, а справа установить флажки у параметров, которые необходимо в дальнейшем отображать в АСУД.SCADA (обычно все параметры)
<center>
[[File:Modbus reg4.jpg|800px|Настройка отображения данных устройства Modbus]]
 
Рисунок - Настройка отображения данных устройства Modbus
</center>
Запись вида ModbusRTU (Отопление 0:192.168.1.100:4) имеет следующий смысл
 
*ModbusRTU - тип устройства
*Отопление - тип системы устройства
*0 - идентификатор системы устройства
*192.168.1.100 - IP-адрес устройства
*4 - RS-идентификатор устройства.
 
'''Внимание!'''
В связи с чем следует иметь ввиду, что если в базе данных на одном КЦС-IPM
зарегистрированы два однотипных устройства с одинаковыми RS-идентификаторами
хоть и физически подключенные на разные интерфейсы, они могут быть ошибочно
отображены  в окне представленном выше одной записью.
 
Для каждого Modbus-устройства следует добавить свой DA Tekon \ Контейнер оборудования \ Прибор учета.
 
'''Устаревшее описание.''' В настоящее время использовать не следует
Для привязки дискретных сигналов (регистры со значением поля [Вирт.КДД-RS] = 1)
следует добавить устройство DA Tekon \ Контейнер оборудование \ КДД-RS ([[Виртуальный_КДД-RS|Виртуальный КДД-RS]])
Далее настроить обычным образов соответствующие дискретные входы КДД-RS с указанием
названия сигнала, задержки, инверсии и т.п.
 
Далее закрыть конфигуратор OPC-сервера.
 
Запустить опрос Modbus-устройств (программу [[KCSLogger|KCSLogger]])
 
==== Настройка визуализации данных в АСУД.SCADA ====
 
Аналогична рассматренной ранее для версий 2.5.2 и выше
 
 
 
== Объединение 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]]
 
 
=== Изменение читаемых регистров ===
 
В случае необходимости добавить новые регистры, читаемые устройством, следует открыть программу ASUDBase, меню Настройка \ Регистрация.
 
Выбрать любой концентратор с устройством требуемого типа.
 
Нажать кнопку "..." и в окне настройки регистров (см. выше) добавить данные регистров.
 
Внесенные изменения будут применены для всех концентраторов устройств данного типа. Далее следует выполнить опрос устройств программой [[KCSLogger|KCSLogger]] (если программа была запущена, ее необходимо перезапустить).
 
Для версии до 2.5.2 (при использовании Контейнер оборудования \ Прибор учета) - после опроса, открыть конфигуратор ОРС-сервера, выбрать устройство в Контейнере оборудования и установить флажки у добавленных параметров. Закрыть конфигуратор.
 
Открыть АСУД.SCADA и добавить необходимые примитивы на карту.
 
=== Изменение настроек подключения ===
 
В случае необходимости изменить RS-идентификатор Modbus-устройства (или IP-адрес Мастер-устройства) , следует открыть программу ASUDBase, меню Настройка \ Регистрация.
 
Выбрать требуемое устройство, ввести новый RS-идентификатор, нажать "Изменить".
 
Запустить [[KCSLogger]] и убедиться, что с устройством проходит обмен данными.
 
Далее возможны два варианта поведения:
 
==== Не вносить изменения в ОРС-сервер и АСУД.SCADA ====
 
В этом случае устройство будет опрашиваться программой [[KCSLogger]], все будет работать корректно, но настройки параметра тэг в программе АСУД.SCADA для примитивов связанным с данным устройством будут отображать некорректную информацию.
 
Т.е., например, тэг до изменения был вида ModbusRTU (Отопление 0:192.168.1.100:4), что говорило о том, что RS-идентификатор устройства = 4. Далее мы внесли изменения в ASUDBase, указав RS-идентификатор  41. Провели опрос устройство, видим корректные данные в АСУД.SCADA, но тэг при этом остался таким же ModbusRTU (Отопление 0:192.168.1.100:4) - как будто идентификатор изменен не был.
 
Т.е. в случае внесения изменений в настройки системы следует всегда помнить, что самая корректная информация о настройке содержится в программе ASUDBase.
 
==== Внести изменения в ОРС-сервер и АСУД.SCADA ====
 
Запустить конфигуратор ОРС-сервера и выбрать в адресном пространстве требуемый прибор. В окне настроек следует выбрать (слева) любое другое устройство, затем опять то которое было изначально, вновь проставить галочки у параметров, которые следует транслировать в АСУД.SCADA.
 
В программе АСУД.SCADA перепривязать тэги всех примитивов связанных с устройством. При этом поле тэг изменится на ModbusRTU (Отопление 0:192.168.1.100:41) (см. пример ранее).


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


*[[Дополнительные_примитивы#Таблица_данных_Тегов|Таблица Тегов]]&nbsp;- '''быстрая визуализация''' в табличном виде в одном месте ситуационного плана без визуально-звуковой индикации:&nbsp;
**числовых данных
**состояний работы устройства (преобразование числа в надпись с помощью [[Text-функция|Text-функций]])
**расшифровка кодов ошибок&nbsp; &nbsp;(преобразование числа в надпись с помощью [[Text-функция|Text-функций]]) 
*Цифровой индикатор, [[Дополнительные_примитивы|стрелочный индикатор]]&nbsp;- для отображения любых числовых значений (с возможностью указания граничных значений и визуально-звуковой индикакаций выхода за границы)
*Текстовое поле - для отображения любых числовых значений, а также преобразования числового значения в текстовое по заданному правилу с помощью [[Скрипты|скрипта]]&nbsp;или [[Text-функция|Text-функции]]. Кроме того с помощью данного примитива и [[Скрипты|скрипта можно]] выполнить '''запись значения в регистр '''Modbus-устройства.
*[[Дополнительные_примитивы#Кнопка|Кнопка ]]- для&nbsp;'''записи&nbsp;значения в регистр'''.&nbsp;
*Дискретный датчик - визуализация аварийных событий.
*[[Дополнительные_примитивы|Led-индикатор]]&nbsp;- для отображения дискретных значений, в том числе выделение бита из маски.
*[[Дополнительные_примитивы|Прибор учета]] &nbsp;- если устройство было зарегистрировано в ASUDBase и вам нужна простая визуализация в табличной форме
*[[Дополнительные_примитивы|Изображение ]]- визуализация аварийный событий&nbsp;
*[[Дополнительные_примитивы|Набор изображений]] - визуализация состояния устройства или&nbsp;'''запись значения в регистр '''Modbus-устройства.


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


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


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


В качестве примера предлагается полностью настроенная рабочая конфигурация АСУД.SCADA с одним Modbus-устройства.
Вы можете сами попробовать настроить в SCADA Modbus-устройство воспользовавшись эмулятором в программе&nbsp;[[KUNIP.EXE|KUNIP.EXE]]<br/> См. пример настройки в описании эмулятора.
 
Что входит в демонстрацию:
 
*Эмулятор ModbusTCP устройства
*Настроенная программа ASUDBase с одним Modbus-устройством
*Настроенный ОРС-сервер с одним Modbus-устройством
*Настроенная SCADA
**С отображением текущих значений параметров
**С возможностью записи новых значений уставок на устройство  
**С отображением режима работы устройства в текстовом виде 
 
Показано решение практически полного перечня типовых задач, решаемых при подключении Modbus-устройств к АСУД-248.
 
Что необходимо:
 
*ПК (ноутбук) с установленной '''АСУД.SCADA 2.4.1'''&nbsp;или выше
*архив с файлами демонстрации [http://www.tekon.ru/software/modbus_sample.zip http://www.tekon.ru/software/modbus_sample.zip]
 
Поскольку при установке архива будут обновлены конфигурационные файлы, то '''не следует''' запускать демонстрацию на рабочей диспетчерской!
 
Для запуска демонстрации ключ защиты и драйверы EXT - не нужны.
 
Последовательность действий для запуска демонстрации:
 
#Установить '''АСУД.SCADA 2.4.1''' (или выше)&nbsp;в папку C:\1Tekon
#Закрыть (если запущены) SCADA, ASUDBase, KCSLogger
#Запустить конфигуратор ОРС-сервера
#Разархивировать архив в папку C:\1Tekon, подтвердив изменение существующих файлов.
#Закрыть конфигуратор ОРС-сервера
#Открыть конфигуратор ОРС-сервера, должно быть зарегистрировано устройство Контейнер оборудования \ Прибор учета
#Снова закрыть конфигуртора ОРС-сервера
 
Запустить эмулятор Modbus-устройства ...\OPC Server\modbus_demo\mtcpServerEmulator.exe
 
Выбрать меню Файл\Открыть конфигурацию, указать TestDevice.xml, нажать кнопку Старт, подтвердить "Да".
 
[[File:Modbus demo1.JPG|center|500px|Modbus demo1.JPG]]
 
Демонстрационное устройство - некая установка, которая подключается напрямую к компьютерной сети и по протоколу Modbus TCP, может передавать значения измеряемых параметров и уставок.
 
Уставка - это параметр, влияющий на логику работы самого устройства.
 
Смысл параметров устройства:
 
*Regim - состояние устройства ('''только чтение''')
**0 - "Выключена",
**1 - "Включена",
**2 - "Режим 2",
**3 - "Режим 3" 
*TStart - уставка температуры запуска установки (можно '''читать и записывать''')
*TStop - уставка температуры остановки установки (можно'''читать и записывать''')
*Tokr - температура окружающей среды (только '''чтение'''), значение параметра хранится в устройстве умноженным на 10
*BitStatus - битовая маска ошибок
**0 - нет ошибки
**1 - ошибка 1
**2 - ошибка 2
**4 - ошибка 3 
 
Для изменения значения параметра в эмуляторе, следует выбрать строку, выполнить двойной клик и ввести новое значение параметра.
 
Запустить программу [[KCSLogger|KCSLogger]] для запуска опроса устройства.
 
Нажать Статистика, проверить, что тестовое устройство опрашивается корректно
 
[[File:Modbus demo2.JPG|center|500px|Modbus demo2.JPG]]
 
Запустить программу SCADA.
 
[[File:Modbus demo3.JPG|center|800px|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 - для отображения состояния установки в текстовом виде.
 
Для выделения ошибок из битовой маски BitStatus объявлены три [[Переменные|Переменные]] (меню Дополнительно \ Переменные).


Пример работы с эмулятором [https://youtu.be/vnbTF4fSsMA https://youtu.be/vnbTF4fSsMA]
[[Category:Интеграция]] [[Category:Modbus]]

Текущая версия от 14:22, 29 сентября 2025



Введение

Изменения и дополнения:

05-07-2023

  • поддержка типа специального типа ARRAY

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

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

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

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

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

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

Если вы используете обычную TL-линия связи, обратите внимание на возможность подключения  КЦС-IPM через IP-удлинитель.

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

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

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

Внимание:

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

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

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

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

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

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

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

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

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

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

где,

  • Адрес регистра - уникальный идентификатор параметра, по которому осуществляется запрос значения параметра
    Идентификатор находится в диапазоне 0 .. 65536.
  • Атрибуты - атрибуты параметра
    • 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.

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

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

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

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

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

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

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

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



Типы данных

Перед тем как рассмотреть типы данных, обратите внимание, как драйвер modbus-устройств представит считанное значение в SCADA


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

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

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

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

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

Внимание! Важно!
Используйте дискретное представление сигнала, только если вы будете использовать дискретные примитивы в SCADA.
Если вы планируете с использовать с сигналом текстовое поле с указанием перечня значений - настраивайте регистр, как числовой!

Пример 1. В документации указано, что в регистре хранится значение 0 или 1, например:

Описание Адрес Пояснение
Авария установки  (Критический сбой) 0 0-Нет аварии / 1-Авария

вы можете добавить регистр несколькими способами

Тип регистра Адрес Пояснение
BOOL 0 в SCADA  этот сигнал будет отображен как дискретный.
Для визуализации используются обычные дискретные примитивы
BIT,
Блок/Бит = 1
0 аналогично
WORD 0

в SCADA  этот сигнал будет отображен как числовой, т.е. вы увидите именно одно из двух значений:
именно 0 или 1, без дополнительных преобразований.
Для визуализации используется LED, Текстовое поле, Изображение,
но вы не сможете использоватьклассические дискретные примитивы.

Указание типа регистра в ОРС-сервере

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

Название Альтернативное название Число регистров Диапазон значений результата Комментарий
BIT Boolean 1 0 или 1

Может быть использован для выделения сигнала из битовой маски, которая записана в регистре.
Из регистра будет считано целое число, затем в этом числе будет проаназирован указанный бит.
Номер анализируемого бита указывается в настройке Блок / Бит
Нумерация бит в байте по умолчанию с 1, если в документации нумерация идет с 0, следует изменить значение 1->0 в 3 строке (подробнее см. далее раздел регистрация устройства в ОРС-сервере, строка конфигурации).
Если в регистр будет производится запись, то предварительно прочитается текущее значение регистра, выполнится установка или сброс указанного бита, и далее полученное значение будет записано в регистр.

BITInv Boolean 1 0 или 1 Аналогично BIT, но считаное из регистра значение будет проинвертировано
BOOL Boolean 1 0 или 1 По-сути, это тип BIT c  дополнительной настройкой: анализировать только младший бит (независимо от того,  что указано далее в поле Блок / Бит).
В отличии от типа BIT предполагает, что в регистре реально возможны только два значения: 0 или 1.
BOOLInv Boolean 1 0 или 1 Аналогично BOOL, но считанное из регистра значение будет проинвертировано
WORD

Unsigned word
UINT

1 Целые числа
0 .. 65535
 
CHAR

Signed byte,
Short Integer

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

Целые числа

0..4294967295

 
INTEGER Signed long
LONG
2

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

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

указывается

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

строка данных Поддержка в SCADA 2.7.13 и выше
INT64 Big Integer  

Целые числа

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

 
ARRAY  

указывается,
от 1 до 32

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

Целые числа

0..4294967295

Поддержка в SCADA 2.7.14 и выше

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

Будут прочитаны последовательно регистры, начиная с указанного. Предполагается, что в регистрах лежат только значения 0 или не 0. Подробнее см. далее

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.

Уточнение для типа ARRAY

Это служебный тип данных, позволяющий объединить значения до 32 последовательных регистров (типа WORD / BOOL) в одно значение (битовую маску).

Это может быть удобно в следующей ситуации, предположим у нас есть устройство ошибки, которого лежат в последовательных регистрах 

Регистр Адрес Тип данных Возможные значения Описание
Coil 101   0 / 1 Ошибка 1
Coil 102   0 / 1 Ошибка 2
Coil 103   0 / 1 Ошибка 3
.. ... ... ... ...
Coil 110   0 / 1 Ошибка 10

И необходимо визуализировать эти ошибки в SCADA следующим образом:

  • показать обощенный признак ошибки
  • показать активные ошибки в текстовом поле

В этом случае, как раз и будет удобен тип ARRAY.

Следует в настройки устройства добавить один регистр типа ARRAY следующим образом.

Modbus array.JPG
Modbus array.JPG

Драйвер при этом прочитает значения регистров с 101 по 110 и скомпонует результат в одно значение целого типа.

При этом, если значение 

  • = 0  - ошибок нет
  • > 0 - есть одна или несколько ошибок

Например, если значение равно 5 ( в двочной системе  101), то активными являются ошибка 1 и ошибка 3.  

В SCADA для визуализации данных вы используете:


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

Добавьте Modbus-устройство в конфигурациюOPC-сервера.

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

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

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

Modbus OPC 1 1.PNG
Modbus OPC 1 1.PNG

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

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

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

Modbus opc 2.PNG
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. [0, 1] - стартовый бит в байте, по-умолчанию 1. 
  4. следующие строки - это собственно таблица адресов Modbus-регистров из документации на устройство

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

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

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

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

Множитель учитывается для всех типов кроме BIT, BITInv, BOOL, BOOLInv, 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 для записи   (для исп. данного значения требуется доп. обновление для версии 2.7.5)
    10 -  аналог значения 1. Для регистров HoldReg будет использоваться функция $10 для записи (для исп. данного значения требуется доп. обновление для версии 2.7.5)
  • Тег - имя тега (по-русски или латиницей), которое будет отображено в SCADA.
    Имя тега должно быть уникально в рамках устройства.
    В имени Тега не следует использовать символ точка.
  • Название - наименование сигнала (неисправности), которое будет отображаться в журнале событий в программе SCADA.

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

Начиная с версии 2.7.14 добавлена поддержка выражений для постобработки считанного из регистра значения, аналогично, как это сделано в функционале Переменных или Тext-функции

Выражение добавляется в конце поля Название после символа #, например:

 

Modbus parseExpr.PNG
Modbus parseExpr.PNG

При этом программа понимает, что 

  • Регистр65 - это название, которое будет проброшено в SCADA
  • X*10 - это выражение постобработки

В примере выше, реальное значение регистра равно 8, при этом после постобработки получаем:

  • X * 10  = 8 * 10 = 80
  • BITS(X:1:4) = BITS(8:1:4) = 4

Постобработка разрешена только для числовых регистров с AW = 0 (для которых запрещена запись).

Следует отметить, что: 

  • BITS допускает только полную запись (с указанием Х): BITS(X:1:4),  а не  BITS(1:4);
  • символом разделителем является двоеточие (:), а не точка с запятой (;);
  • при анализе выражения учитывается номер стартового бита в байте (0 или 1), указанный в настройках Modbus-устройства.

Замечание!
Начиная с версии 2.7.5 в свойствах Modbus-устройства появилась настройка Дополнительный сдвиг адреса - это настройка может быть применена, например: при регистрации контроллеров сплит-систем, когда адреса регистров внутренних блоков системы кондиционирования сдвинуты относительно общей карты на число, соответствующее номеру внутреннего блока.
Т.е. вы регистрируете и настраиваете Modbus-устройство с адресами первого блока. Затем добавляете второе Modbus-устройство, указываете файл настроек первого, но дополнительно указываете настройку сдвиг адресов.   

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

 

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

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

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

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

Флаг "Не выполнять перезапросы в случае ошибки" - позволяет не выполнять повторные отправки данных в случае ошибки.

Финальный опрос устройства

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

Modbus opc 2.PNG
Modbus opc 2.PNG

Попробуйте последовательно провести следующие изменения в параметрах третьей (3) строки конфигурации:

  1. Увеличить число регистров в запросе с 1 до 16 (стоблец Адрес).
  2. Выполните опрос устройства, если устройство было опрошено без ошибок, переходите к следующему шагу
  3. Разрешите пропуски в группе чтения, изменив значение Тип   0 на 1 (стоблец Тип данных).
  4. Выполните опрос устройства. 
    Если устройство ответило с ошибкой, запретите пропуски, и повторите опрос.

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

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

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

Нельзя выполнять запись значений для регистров типа:  [mbString, mbDouble, mbINT64, mbBit4, mbARRAY]

 

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

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

Например, вы видите в документации на устройство следущую информацию в таблице регистров: 

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

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

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

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

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

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

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

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

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

Настройка SCADA

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

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

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

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

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

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