Modbus. Файл экземпляров DsModbusDevices
Назначение: описание структуры файла экземпляров в каталоге DsModbusDevices — модели, подключаемой из ModbusDeviceList.xlsx инструкцией IOBJ.
Ожидаемый результат: разработчик понимает состав листов, назначение колонок, синтаксис [*.] и связь с родительской строкой ModbusDeviceList.xlsx.
Расположение в проекте
Section titled “Расположение в проекте”| Элемент | Путь |
|---|---|
| Каталог | JSC\Usr\Prj\Conf\Models\DsModbusDevices\ |
| Подключение | Колонка с инструкцией IOBJ на листе OBJ.* файла ModbusDeviceList.xlsx |
Подключение по IOBJ
Section titled “Подключение по IOBJ”В последней рабочей колонке листа OBJ.* файла ModbusDeviceList.xlsx в строке # задаётся инструкция IOBJ, в строке H — шаблон пути, в строке d — относительный путь без расширения. Конструкция $S подставляет значение из ячейки строки d.
Пример из проекта PSaLA_MST_AFA_OLD:
| Элемент | Значение |
|---|---|
Лист ModbusDeviceList | OBJ.Devices |
| Шаблон (строка H) | %JSC%\Usr\Prj\Conf\Models\DsModbusDevices\$S.xlsx |
| Значение IOBJ (строка d) | EKF\P0-80-010-JF01-CN1001-1A1 |
| Разрешённый путь | JSC\Usr\Prj\Conf\Models\DsModbusDevices\EKF\P0-80-010-JF01-CN1001-1A1.xlsx |
Родительский TAG | P0-80-010-JF01-CN1001-1A1 |
Родительский OBJTYPENAME | MbTcpDevice |
Состав листов
Section titled “Состав листов”Типовой файл экземпляра содержит:
| Лист | Назначение |
|---|---|
| OPT.Device | Параметры Modbus-станции и настройки опроса; значения вида [*.имя] берутся из родительской строки ModbusDeviceList.xlsx |
| OBJ.* | Экземпляры дочерних OBJTYPE (сигналы, каналы, дискретные точки) |
| MBM.map | Карта Modbus: соответствие канала объекта адресу регистра и области памяти (функции опроса) |
Переменные родителя [*.]
Section titled “Переменные родителя [*.]”Файл экземпляров подключается из конкретной строки d листа OBJ.* файла ModbusDeviceList.xlsx (колонка IOBJ). Переменные этой строки доступны в подключённом файле через префикс [*.] — обращение к переменной родителя.
| Запись в файле экземпляра | Источник при подстановке |
|---|---|
| [*.TAG] | колонка TAG родительской строки |
| [*.PathDevStudio] | колонка PathDevStudio |
| [*.Port] | колонка Port |
| [*.Domain] | колонка Domain |
| [*.GateTag] | колонка GateTag |
| [.Domain].[.GateTag].[*.TAG] | составное значение из нескольких колонок родителя |
На листах OBJ.* и MBM.map файла экземпляров переменные [*.] обычно не используются — там задаются собственные теги и адреса дочерних объектов.
Лист OPT.Device
Section titled “Лист OPT.Device”На листе OPT.Device одна строка d описывает Modbus-станцию — параметры TCP-подключения, поведение опроса и ограничения запросов. Большинство идентификаторов станции формируются из родителя через [*.].
Структура заголовка: строки #, H, @, затем строка d. Колонки с @ в строке # — разделители групп параметров (без объявления переменной).
Основные параметры станции
Section titled “Основные параметры станции”| Переменная | Пример (PSaLA) | Описание |
|---|---|---|
| opt.plcName | [*.TAG] | Префикс имени ПЛК-представления |
| PathDevStudioIosDiagnostic | [*.PathDevStudio] | Путь IOS-диагностики связи |
| StationName | [*.TAG] | Имя Modbus-станции |
| Slave | [*.TAG] | Идентификатор Slave |
| Port | [*.Port] | TCP-порт |
| ReverseBytes | Нет | Поменять байты в слове |
| ReverseFloatWords | Нет | Порядок слов (TMC, TR4) |
| ReverseIntWords | Нет | Порядок слов (TMC, TR4, TM8, TR8) |
| AdressMapPath | App.Map_[*.TAG] | Имя карты адресов в Application |
Параметры опроса
Section titled “Параметры опроса”| Переменная | Пример (PSaLA) | Описание |
|---|---|---|
| UseExtendedFunctions | Нет | Расширенные функции Modbus |
| OnStationFailureOrBusy | Повторить запрос данных | Поведение при сбое/занятости |
| LostConnectionTimeout | 1000 | Таймаут потери связи, мс |
| CommandRepeatCount | 2 | Повторы команды |
| SlaveStation | [*.Domain].[*.GateTag].[*.TAG] | Полный путь подчинённой станции |
| SendTROnConnected | Нет | Отправлять TR при появлении на связи |
| WriteRegisterFunction | Multiple | Способ записи в регистры |
| RequestMethod | По максимуму | Стратегия формирования запросов на чтение |
| ReserveChannelsMode | — | Режим резервных каналов |
| FailedRequestLimit | 5 | Лимит неуспешных запросов |
| ResponseTimeout | 750 | Таймаут ответа, мс |
| RequestCount | 5 | Макс. одновременных запросов |
| DedicatedConnection | Нет | Выделенное подключение |
| ReadyMode | Автоматический режим определения готовности | Режим готовности |
| EnabledAtStart | Да | Доступность при старте |
Максимальные длины запросов
Section titled “Максимальные длины запросов”| Переменная | Пример | Область памяти Modbus |
|---|---|---|
| Coils | 2000 | Coils (функция 01/05/15) |
| Discretes | 2000 | Discrete Inputs (функция 02) |
| HoldingRegisters | 125 | Holding Registers (функция 03/06/16) |
| InputRegisters | 125 | Input Registers (функция 04) |
| Files | 124 | Files |
| OutputRegisters | 123 | Holding Registers на запись |
Листы OBJ.*
Section titled “Листы OBJ.*”Лист с префиксом OBJ.* (например, OBJ.DiProc) содержит экземпляры дочерних OBJTYPE — объекты, которые будут созданы в Application и опрашиваться через Modbus-станцию родителя. Каждая строка d — один дочерний объект.
Структура заголовка: строки #, H, @, затем строки d.
Колонки листа OBJ.*
Section titled “Колонки листа OBJ.*”| Переменная | Обязательность | Описание |
|---|---|---|
| TAG | да | Тег дочернего объекта в Application; должен совпадать с TAG на листе MBM.map |
| OBJTYPENAME | да | Типовой блок OBJTYPE дочернего объекта |
| Template | да | Имя шаблона внутри OBJTYPE |
| parentDescr | — | Краткое наименование |
| EqtDescr | — | Описание оборудования / сигнала |
| Title | — | Сокращённое обозначение |
Пример строки (PSaLA, OBJ.DiProc)
Section titled “Пример строки (PSaLA, OBJ.DiProc)”| Поле | Значение |
|---|---|
| TAG | P0_80JEXA1408 |
| OBJTYPENAME | (тип дискретного сигнала проекта) |
| Template | main |
| EqtDescr | (описание точки) |
Лист MBM.map
Section titled “Лист MBM.map”Лист MBM.map формирует карту Modbus: для каждого дочернего объекта задаётся соответствие канала (channel) адресу регистра и области памяти (table), определяющей функции опроса/записи Modbus.
Количество строк на MBM.map соответствует количеству опрашиваемых каналов на листе OBJ.*; поле TAG должно совпадать с TAG дочернего объекта.
| Переменная | Описание |
|---|---|
| TAG | Тег технологического объекта (как на листе OBJ.*) |
| channel | Имя канала объекта (обычно Value) |
| EqtDescr | Описание |
| table | Область памяти Modbus — определяет функцию опроса: Discretes Input, Coils, Input Registers, Holding Registers |
| address | Адрес регистра (или дискретного входа) |
| bitposition | Номер бита в регистре (для дискретных значений внутри регистра) |
| category | Категория данных (Frame), напр. 1000 |
Пример строк (PSaLA, MBM.map)
Section titled “Пример строк (PSaLA, MBM.map)”TAG | table | address | category |
|---|---|---|---|
P0_80JEXA1408 | Discretes Input | 0 | 1000 |
P0_80JZA1408 | Discretes Input | 1 | 1000 |
P0_80JTAH1408 | Discretes Input | 2 | 1000 |
Связь с OBJTYPE и генерацией
Section titled “Связь с OBJTYPE и генерацией”- Файл экземпляра подключается из строки
ModbusDeviceList.xlsxпо IOBJ; параметры станции на OPT.Device собираются через[*.]. - Листы OBJ.* и MBM.map задают дочерние объекты и адреса Modbus для карты опроса.
Дальнейшая обработка — во внешнем модуле ModbusDevices (ModbusDevices) (см. алгоритм Modbus TCP).
Связанные материалы
Section titled “Связанные материалы”- DevStudio. Modbus устройства —
ModbusDeviceList.xlsx - Правила заполнения Excel-файлов — IOBJ
- Алгоритм обработки Modbus TCP