Skip to content

Объект проекта

Слово «объект» в конструкторе встречается на каждой странице: объекты ищут, у объектов берут поля, от объектов ходят по связям. Эта страница о том, что это за объект и из чего он собран.

Объект — это одна строка листа объектов в книге ПЛК, обросшая всем, что к ней подтянулось. Инженер вписывает строку в эксель; парсер читает её, находит по колонке OBJTYPENAME описание типа, копирует к объекту его листы, разрешает в них ссылки, привязывает опции ПЛК, устройство Modbus, уровни тревог, данные HMI — и то, что получилось, и есть объект прогона.

строка листа OBJ.… → объект
TAG = P094TI5119 → имя объекта (InstanceName)
OBJTYPENAME = AiProc → по нему найдено описание типа
остальные колонки → собственные данные объекта
СвойствоЧто это
InstanceNameИмя объекта — значение колонки TAG его строки. Именно оно показывается в списках и в окне «подробнее…».
ObjectTypeNameТип объекта — значение колонки OBJTYPENAME. Отдельной настройки «тип» в условии нет: это обычная колонка, и сравнивают её как любую другую.
SheetNameИмя листа-источника: с какого листа книги пришла строка. В списке полей его нет — оно отнесено к служебным, — но связь лист работает именно по нему: она собирает объекты, у которых лист тот же.

Не у всех объектов прогона есть строка в экселе: сетевые коммутаторы и устройства Modbus из DevStudio приходят не из книги, а из проекта DevStudio. Но выглядят они для схемы так же — тот же набор полей, те же действия.

Это главное, что стоит держать в голове: у объекта данные из трёх разных мест, и путать их дорого.

СлойЧто в нёмОбщий или свой
Своё, из строкиКолонки самой строки (InstanceData), дополнительные данные (AdditionData), дополнительные листы объекта (ExtraDataSheets), строка датчика (SensorData).у каждого объекта своё
Пришедшее от типаОбжтайп (ObjectType), шаблоны (Templates), включения (Includes), данные HMI (HmiData), списки строк (StringList).описано один раз на тип, но скопировано и разрешено под этот объект
Пришедшее от ПЛК и проектаОпции ПЛК (PlcOptions), уровни тревог (AlarmLevels), устройство Modbus (ModbusDevice), кадры CODESYS (CodesysModbusDevices), объекты DevStudio (DevStudionObjects), объекты интеграции (IntegrationObjects).общее на ПЛК или проект

Самые нужные свойства с переводом на русский. Полный список — 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 обязан остаться новым.

Обжтайп — описание типа объекта: отдельный файл-книга, в котором лист описывает, из чего объект этого типа состоит. Объектов типа 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» в конструкторе бывает двух разных видов — см. Источники объектов.

ПолеЧто это
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Датчики кадра — список.
ПолеЧто это
Tag · GroupTagТег датчика и тег его группы.
LineЛиния.
DevNumber · DevNumberStrНомер устройства числом и строкой.
SensorType · TypeId · TypeIdPropertyТип датчика и его идентификаторы.
EqtDescriptionОписание оборудования.
TemplateШаблон датчика.
ModbusNameИмя в карте Modbus.

Опции ПЛК — это не объект, а таблица «имя → значение» с листа опций. Отсюда и то, что в списке источников их нет: списка объектов они не образуют. Читают их шагом «Взять поле» с пунктом ПЛК этой строки либо у объекта через PlcOptions.

ПолеЧто это
PlcName (opt.plcName)Имя ПЛК.
UnimodVersion (opt.unimod)Версия Unimod.
StartIndex (opt.startIndex)Начальный индекс.
DIStartAddr · CLStartAddr · IRStartAddr · HRStartAddrНачальные адреса областей Modbus.
WeintekTypesPathПуть к типам Weintek.
PlcOptionsСами строки листа опций. Отсюда же читаются любые другие колонки — SplitRegex, ComposeRegex, defaultTAMap.

Уровень сигнализации строится из канала: у канала заполнена колонка alarmLevel — значит у объекта появляется уровень.

ПолеЧто это
InstanceName · ObjectTypeNameЧей это уровень.
ChannelNameИмя канала, у которого взят уровень.
ChannelПрямая ссылка на сам канал — искать его заново по имени не надо.
AlarmLevelСтрока уровня: её колонки и есть его свойства.
AlarmLevelEmptyУровень пуст.
IsExternalУровень внешний.
IsModbusEventУровень — событие Modbus.
ПолеЧто это
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 — дерево, а не строка листа. У узла есть имя и алиас, тип, значение, комментарий, привязанный канал, родитель и три набора детей: дети, структуры и массивы. Схема читает его своими полями и вглубь не ходит: дальше начинается внутренняя кухня словаря.

Всё описанное можно не заучивать, а открыть:

ГдеЧто видно
Окно «подробнее…»Список того, что вышло из шага, а справа — разбор свойств выбранного объекта со значениями. Галка «только заполненные» убирает пустые: из полутора сотен свойств заполнены единицы.
Панель «Что пришло» в окне кодаТо же самое, но нажатие по строке вставляет в код готовое обращение к свойству.
Типы объектовВсе 39 типов и их свойства — без проекта, прямо из моделей.