Объект проекта
Слово «объект» в конструкторе встречается на каждой странице: объекты ищут, у объектов берут поля, от объектов ходят по связям. Эта страница о том, что это за объект и из чего он собран.
Откуда берётся объект
Section titled “Откуда берётся объект”Объект — это одна строка листа объектов в книге ПЛК, обросшая всем, что к ней подтянулось. Инженер вписывает строку в эксель; парсер читает её, находит по колонке OBJTYPENAME описание типа, копирует к объекту его листы, разрешает в них ссылки, привязывает опции ПЛК, устройство Modbus, уровни тревог, данные HMI — и то, что получилось, и есть объект прогона.
строка листа OBJ.… → объект TAG = P094TI5119 → имя объекта (InstanceName) OBJTYPENAME = AiProc → по нему найдено описание типа остальные колонки → собственные данные объекта| Свойство | Что это |
|---|---|
| InstanceName | Имя объекта — значение колонки TAG его строки. Именно оно показывается в списках и в окне «подробнее…». |
| ObjectTypeName | Тип объекта — значение колонки OBJTYPENAME. Отдельной настройки «тип» в условии нет: это обычная колонка, и сравнивают её как любую другую. |
| SheetName | Имя листа-источника: с какого листа книги пришла строка. В списке полей его нет — оно отнесено к служебным, — но связь лист работает именно по нему: она собирает объекты, у которых лист тот же. |
Не у всех объектов прогона есть строка в экселе: сетевые коммутаторы и устройства Modbus из DevStudio приходят не из книги, а из проекта DevStudio. Но выглядят они для схемы так же — тот же набор полей, те же действия.
Три слоя данных
Section titled “Три слоя данных”Это главное, что стоит держать в голове: у объекта данные из трёх разных мест, и путать их дорого.
| Слой | Что в нём | Общий или свой |
|---|---|---|
| Своё, из строки | Колонки самой строки (InstanceData), дополнительные данные (AdditionData), дополнительные листы объекта (ExtraDataSheets), строка датчика (SensorData). | у каждого объекта своё |
| Пришедшее от типа | Обжтайп (ObjectType), шаблоны (Templates), включения (Includes), данные HMI (HmiData), списки строк (StringList). | описано один раз на тип, но скопировано и разрешено под этот объект |
| Пришедшее от ПЛК и проекта | Опции ПЛК (PlcOptions), уровни тревог (AlarmLevels), устройство Modbus (ModbusDevice), кадры CODESYS (CodesysModbusDevices), объекты DevStudio (DevStudionObjects), объекты интеграции (IntegrationObjects). | общее на ПЛК или проект |
Карта объекта
Section titled “Карта объекта”Самые нужные свойства с переводом на русский. Полный список — 163 свойства — на странице Поля объектов; что означает вид свойства («значение», «словарь», «объект», «список») — там же.
| Свойство | Вид | Что это |
|---|---|---|
| InstanceName | значение | Имя объекта, оно же TAG. |
| ObjectTypeName | значение | Тип объекта, он же колонка OBJTYPENAME. |
| SheetName | значение | Лист-источник строки. В списке полей не предлагается: служебное. По нему ходит связь лист. |
| InstanceData | словарь | Колонки строки объекта. Тут лежит всё, что инженер вписал в книге: TAG, OBJTYPENAME, Units, ModuleId… Ключи заранее не известны: какие колонки есть, знает только книга. |
| AdditionData | словарь | Дополнительные данные объекта: то, что дописано к строке не из её листа. |
| SensorData | словарь | Строка датчика — у объектов, за которыми стоит датчик устройства Modbus. |
| ExtraDataSheets | список | Дополнительные листы объекта: записи «имя листа → его строки». Своего типа у записи нет — она из платформы, а не из предметной области, поэтому вглубь по ней редактор не подскажет. |
| ObjectType | список | Обжтайп объекта. Элемент списка — «Строка листа», а у самого списка есть ещё свой тип, «Лист обжтайпа»: каналы, книга, подключённые листы. В списке полей у него поэтому показаны оба типа. См. ниже. |
| Templates | список | Шаблоны обжтайпа: алиас, ФБ Треи, префикс / тело / суффикс, включения. |
| Includes | список | jsm-шаблоны ST, объявленные маркером $JSM. |
| FlConnections | список | Подключения листов $FL с вердиктом условия для этого объекта. |
| JsmConnections | список | То же для $JSM, включая выключенные условием. |
| UnresolvedConnections | список | Подключения, не состоявшиеся у этого объекта. |
| PlcOptions | объект | Опции ПЛК этого объекта. См. ниже. |
| PlcName | значение | Имя ПЛК — короткий путь к PlcOptions.PlcName. |
| ModbusDevice | объект | Устройство Modbus, к которому подключён объект. См. ниже. |
| CodesysModbusDevices | список | Кадры Modbus для CODESYS. |
| AlarmLevels | список | Уровни сигнализации объекта — по одному на канал с уровнем. См. ниже. |
| HmiData | список | Данные HMI: вид, мнемосхема, настройки. См. ниже. |
| StaburHmiData | список | То же для Stabur HMI. |
| StringList | список | Списки строк объекта. |
| IntegrationObjects | объект | Объекты интеграции: два списка строк — объекты и каналы. |
| DevStudionObjects | список | Объекты DevStudio, в которые объект попал. |
| NetDiag | словарь | Строка сетевой диагностики. |
| ModbusTemplate | значение | Шаблон Modbus объекта — берётся из дополнительных данных. |
| IsMapped | да / нет | Размечен ли объект — по колонке isMapped. |
| DeclaresJsm | да / нет | Объявлен ли у обжтайпа набор $JSM вообще. Отличается от «список Includes пуст»: подключения выключаются условием, и обжтайп нового формата с выключенными $JSM обязан остаться новым. |
Обжтайп и каналы
Section titled “Обжтайп и каналы”Обжтайп — описание типа объекта: отдельный файл-книга, в котором лист описывает, из чего объект этого типа состоит. Объектов типа AiProc в проекте тысяча, а обжтайп AiProc один.
У объекта в свойстве ObjectType лежит его копия обжтайпа — строки с уже разрешёнными подстановками. Это свойство одновременно список и объект:
| Как читать | Что получится |
|---|---|
| как список | Строки листа обжтайпа. Их берут «Взять N-й», ищут «Найти объекты» с источником «в пришедшем», перебирают условием «есть такой, у которого». |
| как объект | Появляются Channels — те же строки, но как каналы с понятными именами полей, — а также книга (File) и подключённые листы (Children). |
Связь «обжтайп» у шага «Перейти по связи» отдаёт именно строки — не сам обжтайп. Причём ищет она обжтайп по имени среди всех обжтайпов прогона, а не читает поле объекта.
Канал — это строка листа обжтайпа, описывающая одну величину объекта: параметр, сигнал, уставку. Строка считается каналом, если у неё заполнено хоть что-то из unimodFB, parName, Type.
| Поле канала | Что это |
|---|---|
| parName | Имя параметра — основное имя канала. |
| unimodFB | Полное имя ФБ Unimod: алиас.путь.дальше. |
| Alias | Алиас канала — первый сегмент unimodFB до точки. |
| Type | Тип величины. |
mapping | Отображение канала. |
| alarmLevel | Уровень сигнализации канала — из него строится строка AlarmLevels. |
units | Единицы измерения. |
defLabel | Подпись по умолчанию. |
descrDataSrcRus | Описание источника данных по-русски. |
| ModbusName | Имя канала в карте Modbus. |
| ModbusChannelName | Готовое имя для карты Modbus: ModbusName, а если он пуст — parName. Одно правило для всех, кто строит и читает карту. |
modbusEvent | Событие Modbus. |
| DevStudioName · DevStudioTemplate | Имя и шаблон канала в DevStudio. |
dsBufLen · dsBufSaveTime · dsBufCategory | Буфер архивации: длина, период сохранения, категория. |
| Value · Save · Array | Значение, признак сохранения, массив. |
Устройство Modbus, кадры, датчики
Section titled “Устройство Modbus, кадры, датчики”Три уровня, вложенные друг в друга: устройство → кадры → датчики. Здесь чаще всего и путаются, потому что «устройство Modbus» в конструкторе бывает двух разных видов — см. Источники объектов.
Устройство
Section titled “Устройство”| Поле | Что это |
|---|---|
| Tag · Name · ModbusName | Тег, имя и имя в карте Modbus. |
| Slave | Адрес Slave. |
| ModbusIpAddress · ModbusIpPort | Адрес и порт; рядом …Res — резервные. |
| SerialPort · Speed · Parity · StopBits | Последовательный порт и его параметры. |
| TimeoutAnswer · TimeoutBeforeAnswer · TimeoutBreach · ModbusTimeoutRequest · ModbusTimeoutAnswer | Таймауты. |
| ModbusGate · MaxConnectOnOnePort | Шлюз и предел соединений на порт. |
| Mode · Type · Num | Режим, тип, номер устройства. |
| L1…L4 · Path | Линии и путь. |
| Frames | Кадры устройства — список. |
| Поле | Что это |
|---|---|
| FrameName · Type · FrameType | Имя и вид кадра. |
| Address · Function · FunctionStr | Адрес и функция Modbus. |
| VariablesCount · WriteVariablesCount | Сколько переменных в кадре. Ради сравнения по этому полю в палитре и появились числовые сравнения: кадр берут как «первый, у которого переменных не меньше, чем нужно». |
| BeginReadDataRemote · BeginWriteDataRemote | Начальные адреса на стороне устройства. |
| BeginReadVariableLocal · BeginWriteVariableLocal | Начальные переменные на стороне ПЛК. |
| PollingPeriod | Период опроса. |
| Endianness · MasksAndOr · Ranges | Порядок байт, маски, диапазоны. |
| DiagVariable · IsReadTimestamp · CalculationAlg | Переменная диагностики, чтение метки времени, алгоритм расчёта. |
| Device | Обратная ссылка на устройство. |
| Sensors | Датчики кадра — список. |
Датчик
Section titled “Датчик”| Поле | Что это |
|---|---|
| Tag · GroupTag | Тег датчика и тег его группы. |
| Line | Линия. |
| DevNumber · DevNumberStr | Номер устройства числом и строкой. |
| SensorType · TypeId · TypeIdProperty | Тип датчика и его идентификаторы. |
| EqtDescription | Описание оборудования. |
| Template | Шаблон датчика. |
| ModbusName | Имя в карте Modbus. |
Опции ПЛК
Section titled “Опции ПЛК”Опции ПЛК — это не объект, а таблица «имя → значение» с листа опций. Отсюда и то, что в списке источников их нет: списка объектов они не образуют. Читают их шагом «Взять поле» с пунктом ПЛК этой строки либо у объекта через PlcOptions.
| Поле | Что это |
|---|---|
PlcName (opt.plcName) | Имя ПЛК. |
UnimodVersion (opt.unimod) | Версия Unimod. |
StartIndex (opt.startIndex) | Начальный индекс. |
| DIStartAddr · CLStartAddr · IRStartAddr · HRStartAddr | Начальные адреса областей Modbus. |
| WeintekTypesPath | Путь к типам Weintek. |
| PlcOptions | Сами строки листа опций. Отсюда же читаются любые другие колонки — SplitRegex, ComposeRegex, defaultTAMap. |
Уровни тревог
Section titled “Уровни тревог”Уровень сигнализации строится из канала: у канала заполнена колонка alarmLevel — значит у объекта появляется уровень.
| Поле | Что это |
|---|---|
| InstanceName · ObjectTypeName | Чей это уровень. |
| ChannelName | Имя канала, у которого взят уровень. |
| Channel | Прямая ссылка на сам канал — искать его заново по имени не надо. |
| AlarmLevel | Строка уровня: её колонки и есть его свойства. |
| AlarmLevelEmpty | Уровень пуст. |
| IsExternal | Уровень внешний. |
| IsModbusEvent | Уровень — событие Modbus. |
Данные HMI
Section titled “Данные HMI”| Поле | Что это |
|---|---|
| Type | Тип HMI-объекта. |
| ViewName | Имя вида. |
| MnemoName | Имя мнемосхемы. |
| HmiData | Строки данных HMI. |
| Options | Те же строки, но как настройки HMI — с понятными именами полей. |
HMI-тег объекта берётся по конвенции: значение HmiTag, а если он пуст — последний сегмент GroupPou после точки.
Шаблоны, включения, подключённые листы
Section titled “Шаблоны, включения, подключённые листы”| Что | Из чего состоит |
|---|---|
| Шаблон обжтайпа Templates | Alias — алиас; TreiFB — ФБ Треи; Prefix / Body / Suffix — префикс, тело, суффикс; TemplateInstance — экземпляр шаблона; IncludeModel — его включения. |
| Включение шаблона Includes | Path и FullPath — путь к .jsm (во втором ещё не раскрыты подстановки вида [opt.unimod]); PouName — имя POU; TemplateName — имя шаблона. |
| Подключение $FL FlConnections | Подключение листа с вердиктом условия для этого объекта. Список провайдеров общий на весь обжтайп, а «сработало / нет» — своё у каждого объекта. |
| Подключение $JSM JsmConnections | То же для $JSM, включая выключенные условием. |
| Неподключённый лист UnresolvedConnections | Подключения, не состоявшиеся у этого объекта. |
Строка, лист, книга, ветка
Section titled “Строка, лист, книга, ветка”Из этих четырёх кирпичей сложено всё остальное. Их стоит знать, потому что именно они всплывают в подсказках и на стрелках схемы.
| Кирпич | Что это |
|---|---|
| Строка листа | Набор «колонка → значение». Какие колонки есть, знает только файл, а не программа: имена колонок в условии и в «Взять поле» вписывают руками, а подсказывает их открытый проект. Регистр в именах колонок не важен. |
| Лист данных | Список строк плюс имя листа, книга, из которой он прочитан, и подключённые к нему ветки. |
| Книга | Excel-файл: путь и его листы. |
| Ветка листов | Имя, набор листов и родительский лист — так описываются подключённые листы. |
Модуль Unimod
Section titled “Модуль Unimod”Узел глобального словаря Unimod — дерево, а не строка листа. У узла есть имя и алиас, тип, значение, комментарий, привязанный канал, родитель и три набора детей: дети, структуры и массивы. Схема читает его своими полями и вглубь не ходит: дальше начинается внутренняя кухня словаря.
Где посмотреть живьём
Section titled “Где посмотреть живьём”Всё описанное можно не заучивать, а открыть:
| Где | Что видно |
|---|---|
| Окно «подробнее…» | Список того, что вышло из шага, а справа — разбор свойств выбранного объекта со значениями. Галка «только заполненные» убирает пустые: из полутора сотен свойств заполнены единицы. |
| Панель «Что пришло» в окне кода | То же самое, но нажатие по строке вставляет в код готовое обращение к свойству. |
| Типы объектов | Все 39 типов и их свойства — без проекта, прямо из моделей. |