Для представления метаинформации на XML-языке применяют следующие положения:
- элемент "WriterHeader" должен быть дочкой XML-элемента для элемента дополнительной информации CAEX AdditionalInformation корневого элемента CAEX;
- каждая единица метаинформации, поименованная в таблице 2, должна быть описана как дочка XML-элемента "WriterHeader";
- запрещено использовать несколько блоков метаинформации с одним именем в одном элементе "WriterHeader";
- порядок представления метаинформации соответствует таблице 2.
Пример соответствующего описания на XML-языке приведен на рисунке 3.
![]() источника AutomationML на XML-языке
Язык AutomationML соответствует объектно ориентированной парадигме. Вся инженерная информация моделируется в виде объектов (принадлежит объектам). Вместе с тем из-за разнородности используемых приложений в системах промышленной автоматизации для идентификации объектов должны использоваться различные понятия. Например, уникальное имя, уникальный идентификатор, уникальный путь доступа. Одни средства позволяют изменять идентификатор по истечении срока существования, другие - нет. МЭК 62714 предоставляет возможность обмена данными между различными приложениями с учетом индивидуальной идентификации объекта. В соответствии с описанными характеристиками настоящий стандарт компенсирует существующее разнообразие идентификационных понятий и определяет одно обязательное понятие идентификации объекта.
Для идентификации объекта применяют следующие положения:
- в соответствии с МЭК 62424 (пункт A.2.2.1) классы языка AutomationML (ролевой класс RoleClass, класс интерфейсов InterfaceClass, класс системных единиц SystemUnitClass) идентифицируются тегом "Name (имя)" формата CAEX;
- данное имя должно быть уникальным внутри рассматриваемого уровня иерархии соответствующей библиотеки AutomationML в течение всего срока существования класса;
- в соответствии с МЭК 62424 (подраздел A.2.8) ссылка на классы производится с использованием полных путей доступа с помощью соответствующих сепараторов пути доступа;
- все экземпляры объекта AutomationML (внутренние элементы формата CAEX InternalElements, внешние интерфейсы формата CAEX ExternalInterface) идентифицируются соответствующими тегами "ID" формата CAEX. Данные идентификаторы должны быть UUID-идентификаторами в соответствии с ИСО/МЭК 9834-8.
Примечание 1 - Возможной практической реализацией UUID является глобальный уникальный идентификатор GUID.
Примечание 2 - В соответствии с МЭК 62424 (подраздел A.3.15) тег "ID" не является обязательным в отличие от настоящего стандарта.
Примечание 3 - В настоящем стандарте идентификаторы UUID представляются также в краткой форме, например "GUID1", "GUID2" и т.д.
Примечание 4 - Тег "Name" формата CAEX указывает имя. Он имеет справочный характер и может изменяться с течением времени или при смене инструментального средства;
- если рассматриваемый идентификатор создан, то полученный UUID не может изменяться в течение всего срока существования соответствующего объекта для всех используемых инструментальных средств;
- ссылочные экземпляры используют значение "ID";
- ссылка на интерфейс CAEX оформляется с использованием идентификатора UUID родительского объекта интерфейса, строки сепаратора ":" и имени экземпляра интерфейса.
Пример 1 - "GUID:out";
- ссылка на атрибут CAEX оформляется с помощью соответствующего идентификатора UUID родительского объекта атрибута, строки сепаратора "." и имени атрибута. Если рассматриваемый атрибут является вложенным, то за строкой сепаратора указывается подпуть доступа к атрибуту.
Пример 2 - "GUID.Colour".
Пример 3 - "GUID.Colour.red".
Пример библиотеки системных единиц SystemUnitClassLib, содержащей класс SystemUnitClass "Robot1234", а также класс SystemUnitClass "SpecialRobot1234", являющийся производным классом класса "Robot1234", приведен на рисунке 4.
![]() Пример иерархии экземпляров InstanceHierarchy с одним объектом "RB_100", имеющим уникальный идентификатор, представленный строкой "GUID1", приведен на рисунке 5.
![]() экземпляра AutomationML
5.6.1 Общие положения
Рассмотрение указанных объектов необходимо для определения механизма обеспечения ассоциаций объектов друг с другом. В настоящем стандарте проводится различие между двумя механизмами хранения информации: ссылки и соотношения. Подраздел 5.6 акцентирует внимание на соотношениях, подраздел 5.7 - на ссылках. Справочный обзор соотношений и ссылок приведен в подразделе A.1.5.
Соотношения типа "родитель - потомок" между экземплярами объектов используются для представления иерархический структуры объектов и описания структуры соотношений.
Для соотношений "родитель - потомок" между объектами AutomationML используются следующие положения:
- иерархия хранится в соответствии с МЭК 62424 (приложение A, подраздел A.2.11).
Примечание - Кроме простых иерархий имеются и пересекающиеся иерархии (сети объектов). Их хранение обеспечивается в соответствии с МЭК 62424 (подраздел A.2.14).
Пример иерархии объектов и порядка ее хранения приведен на рисунке 6.
![]() между объектами AutomationML
Для соотношений "родитель - потомок" между классами AutomationML используются следующие положения:
- соотношение "родитель - потомок" между классами AutomationML описывает только их иерархическое соседство. Это позволяет дать определения любым пользовательским иерархическим структурам;
- данное соотношение не имеет последующей семантики.
Примечание - Соотношение "родитель - потомок" не подразумевает наличия соотношения наследования. Соотношение наследования моделируется явно в соответствии с 5.6.4.
Пример соотношения "родитель - потомок" между классами "ParentClass" и "ChildClass" приведен на рисунке 7. "ChildClass" не обеспечивает соотношения наследования с родителем.
![]() между классами
Для соотношений наследования используются следующие положения:
- наследование между классами определяется в соответствии с МЭК 62424:2008 (подраздел A.2.7);
- если наследование необходимо, то родительский класс указывается с помощью тега CAEX "RefBaseClassPath", включающего полный путь доступа к базовому классу в соответствии с МЭК 62424 (подраздел A.2.7);
- если рассматриваемый родительский класс расположен одним уровнем иерархии выше указанного дочернего класса, то родительский класс указывается путем сохранения имени данного родительского класса в теге CAEX "RefBaseClassPath" без указания полного пути доступа.
Пример класса "Robot1234", а также класса "SpecialRobot1234", наследующего класс "Robot1234", приведен на рисунке 8.
![]() между двумя классами
В добавление к данному примеру тег CAEX "RefBaseClassPath" может относиться либо к "InheritanceExampleLib/Robot1234", либо к "Robot1234", так как родительские классы расположены на один уровень иерархии выше уровня класса "SpecialRobot1234".
Экземпляры характеризуются уникальным идентификатором и набором параметров.
Для соотношений "класс - экземпляр класса" применяют следующие положения:
- объект языка AutomationML моделируется в качестве сущности InternalElements в формате CAEX как часть иерархии CAEX InstanceHierarchy или класса SystemUnitClass;
- объект языка AutomationML может быть одиночным объектом без связи с классом SystemUnitClass.
Примечание 1 - Объект языка AutomationML связан со стандартным ролевым классом AutomationML.
Примечание 2 - Экземпляры могут не иметь связи с базовой ролью AutomationMLBaseRole, они являются пользовательскими объектами и не являются объектами AutomationML;
- если объект языка AutomationML соотносится как "класс - экземпляр класса" с классом SystemUnitClass, то он создается как копия данного класса SystemUnitClass, включая внутреннюю архитектуру класса и всю унаследованную информацию.
Примечание 3 - Класс SystemUnitClass используется как шаблон. Изменения в классе SystemUnitClass не переносятся автоматически на соответствующие объекты автоматизации. Более того, объект автоматизации может переноситься без информации о классе. Он содержит внутри себя всю надлежащую информацию;
- допускается расширение или сокращение данных об экземпляре по сравнению с его классом источника.
Примечание 4 - Класс источника может быть подходящей стартовой точкой для модели экземпляра;
- скопированный класс источника должен быть указан в теге CAEX "RefBaseSystemUnitPath" рассматриваемого экземпляра для последующего использования. Данный тег должен указывать полный путь доступа и имя класса источника.
Примечание 5 - Если класс источника экземпляра изменяется, то это не приводит к изменению экземпляра. Обновление экземпляров - это возможный функциональный инструмент, который в настоящем стандарте не рассматривается;
- изменение класса источника должно вести к появлению новой версии класса с другим именем. Внутри нового класса полный путь доступа к старой версии класса должен храниться в теге CAEX "OldVersion".
Примечание 6 - Данное положение поддерживает отслеживание изменений по всем существующим версиям класса;
- наследование между классом SystemUnitClass и экземпляром объекта не допускается.
Примечание 7 - Рассматриваемый экземпляр может быть только копией соответствующего класса. Наследование между классами и экземплярами может быть использовано при их расширении;
- соотношение между экземпляром и классом RoleClass указывается в соответствии с МЭК 62424 (подраздел A.2.7) с помощью атрибута пути доступа "RefBaseRoleClassPath" для надлежащего требования к роли RoleRequirements. В отличие от МЭК 62424 (подраздел A.2.7), наследование здесь не допускается. Все спецификации ролевых классов RoleClass копируются в соответствующие объекты AutomationML;
- соотношение между интерфейсом CAEX ExternalInterface и классом InterfaceClass указывается в соответствии с МЭК 62424 (подраздел A.2.7). В отличие от МЭК 62424, наследование здесь не допускается. Все спецификации классов InterfaceClass копируются в соответствующие объекты AutomationML.
Рисунок 9 содержит пример соотношения "класс - экземпляр класса" между объектом "ObjectA" и пользовательским классом SystemUnitClass "generic_Valve".
![]() В добавление к стандартным положениям соотношения "класс - экземпляр класса" следующее специфическое положение применяют в соответствии с зеркальным понятием CAEX:
- тег "RefBaseSystemUnitPath" может указывать на другой экземпляр объекта вместо класса SystemUnitClass в соответствии с зеркальным понятием (см. МЭК 62424, подраздел A.2.14).
Соотношение "экземпляр - экземпляр" - это соотношение между двумя интерфейсами произвольных объектов AutomationML.
Для соотношений "экземпляр - экземпляр" применяют следующие положения:
- соотношения "экземпляр - экземпляр" хранятся в соответствии с МЭК 62424 (пункт A.2.5.3 и подраздел A.2.14) с помощью CAEX InternalLinks;
- CAEX InternalLinks хранится сущностью CAEX InternalElements, являющейся общим родителем самого нижнего уровня для соответствующих соединенных объектов CAEX;
- соотношения "экземпляр - экземпляр" определяют только между внешними интерфейсами CAEX ExternalInterface, принадлежащими соответствующим объектам AutomationML (см. МЭК 62424, пункт A.2.3.1);
- сущность ExternalInterface выводится прямо или косвенно из одного из классов стандартных интерфейсов AutomationML.
Примечание 1 - Библиотека класса стандартных интерфейсов AutomationML рассмотрена в 6.3. Класс интерфейсов определяет семантику интерфейса и, таким образом, семантику связующего элемента. Связующий элемент интерфейсов не имеет семантики, если нет ссылки на класс интерфейсов;
- документы COLLADA могут быть взаимосвязанными. Соответствующие интерфейсы COLLADA - это любые элементы, имеющие корректный идентификатор URI. Если рассматриваемые узлы должны быть взаимосвязанными в формате CAEX, то они должны быть опубликованы в CAEX путем добавления внешнего интерфейса CAEX ExternalInterface соответствующему объекту. Данный внешний интерфейс ExternalInterface выводится из класса стандартных интерфейсов AutomationML "COLLADAInterface" или из одного из его производных.
Примечание 2 - Стандартный класс интерфейсов "COLLADAInterface" рассмотрен в 6.3.7. Подробности приведены в МЭК 62714-3;
- документы формата PLCopen XML могут быть взаимосвязаны путем использования соответствующих интерфейсов PLCopen XML. Если в формате CAEX необходимо обеспечить взаимосвязь элементов PLCopen XML, то они должны быть опубликованы путем добавления сущности CAEX ExternalInterface в соответствующий объект. Данный внешний интерфейс ExternalInterface выводится из класса стандартных интерфейсов AutomationML "PLCopenXMLInterface" или из одного из его производных;
Примечание 3 - Стандартный класс интерфейсов "PLCopenXMLInterface" рассмотрен в 6.3.8. Подробности приведены в МЭК 62714-4.
Пример, включающий робот "Rob1" и программируемый логический контроллер PLC "PLC1" с одним интерфейсом сигналов, приведен на рисунке 10a). Интерфейсы соединены между собой. Данный пример в виде иерархии объектов приведен на рисунке 10b).
![]() ![]() "блок-схема" и "дерево объектов"
Представление данного примера на языке AutomationML приведено на рисунке 11. Ниже приведено описание на языке XML иерархии экземпляра InstanceHierarchy для данного примера, включающего все объекты AutomationML типа "Station", "Rob1", "PLC1" и "Board01", а также их интерфейсы.
Примечание 4 - Строки пути доступа для данного примера для улучшения их читаемости сокращены (обозначение "/.../").
![]() "PLC1" и "Rob1"
5.7.1 Общие положения
Ссылка на документ обеспечивает связь между одним объектом AutomationML и одним внешним документом, содержащим, например, информацию о геометрии, кинематике и последовательности. Механизм ссылок использует стандартный интерфейс AutomationML "ExternalDataConnector" или один из его производных.
5.7.2 Ссылка на документ COLLADA
Ссылки на документы COLLADA приводятся с помощью класса стандартных интерфейсов AutomationML "COLLADAInterface" или одного из его производных. Данный класс рассмотрен в 6.3.7. Подробности приведены в МЭК 62714-3.
5.7.3 Ссылка на документ PLCopen XML
Ссылки на документы PLCopen XML приводятся с помощью класса стандартных интерфейсов AutomationML "PLCopen-XMLInterface" или одного из его производных. Данный класс рассмотрен в 6.3.8. Подробности приведены в МЭК 62714-4.
5.7.4 Ссылка на дополнительные документы
Будущие расширения МЭК 62714 могут установить дополнительные типы интерфейсов для ссылок на дополнительные типы документа. Они рассмотрены в отдельных частях МЭК 62714. В настоящем стандарте они не рассматриваются.
Для указанных расширений применяют следующие положения:
- если МЭК 62714 содержит дополнительные типы документа, то они моделируются с помощью дополнительных классов интерфейсов;
- указанные дополнительные интерфейсы моделируются как расширение библиотеки AutomationML InterfaceClass. Они выводятся непосредственно или косвенно из стандартного класса интерфейсов ExternalDataConnector;
- ссылки хранятся с помощью стандартных атрибутов стандартного класса интерфейсов;
- стандартный класс интерфейсов "ExternalDataConnector" используется для типов документа, включенных в МЭК 62714.
Раздел 6 определяет существенные базовые библиотеки AutomationML, а также базовые классы языка AutomationML, необходимые для моделирования корневых понятий AutomationML. Все описанные атрибуты являются частью стандартной библиотеки AutomationML. При необходимости они могут быть удалены из иерархии экземпляров InstanceHierarchy.
Примечание - Зависящие от домена библиотеки рассматриваются в последующих частях МЭК 62714.
Для базовых библиотек AutomationML применяют следующие положения:
- все объекты AutomationML ассоциируются непосредственно или косвенно с ролевым классом "AutomationMLBaseRole";
- все интерфейсы непосредственно или косвенно ассоциируются с классом интерфейсов AutomationML;
- при необходимости можно использовать атрибуты AutomationML, они могут быть удалены из объектов AutomationML.
6.3.1 Общие положения
Библиотека AutomationMLInterfaceClassLib моделируется в соответствии с МЭК 62424 (раздел 7, приложения A и C). МЭК 62714 использует понятие интерфейса CAEX. Допускаются пользовательские расширения данной библиотеки AutomationML в соответствии с 7.3.
Каждый интерфейс выводится непосредственно или косвенно из класса нижеследующих стандартных библиотек AutomationMLInterfaceClassLib в соответствии с таблицей 3. Пункты 6.3.2 - 6.3.10 описывают рассматриваемые классы интерфейсов в подробностях.
Таблица 3
Табличное представление библиотеки класса базовых интерфейсов AutomationML InterfaceClassLib приведено на рисунке 12, а ее описание на языке XML приведено на рисунке 13. Пункты 6.3.2 - 6.3.10 содержат подробную информацию о рассматриваемых классах.
![]() AutomationML
![]() AutomationML на языке XML
Описание класса интерфейсов "AutomationMLBaseInterface" приведено в таблице 4.
Таблица 4
6.3.3 Класс интерфейсов InterfaceClass Order
Описание класса интерфейсов "Order" приведено в таблице 5.
Таблица 5
Описание класса интерфейсов "PortConnector" приведено в таблице 6.
Таблица 6
Описание класса интерфейсов "PPRConnector" приведено в таблице 7.
Таблица 7
6.3.6 Класс интерфейсов InterfaceClass ExternalDataConnector
Описание класса интерфейсов коннектора внешних данных "ExternalDataConnector" приведено в таблице 8.
Таблица 8
Описание класса интерфейсов "COLLADAInterface" приведено в таблице 9. Подробности приведены в МЭК 62714-3.
Таблица 9
Описание класса интерфейсов "PLCopenXMLInterface" приведено в таблице 10. Подробности приведены в МЭК 62714-4.
Таблица 10
6.3.9 Класс интерфейсов InterfaceClass Communication
Описание класса интерфейсов "Communication" приведено в таблице 11.
Таблица 11
Описание класса интерфейсов сигналов "SignalInterface" приведено в таблице 12.
Таблица 12
6.4.1 Общие положения
Подраздел 6.4 определяет базовую библиотеку AutomationML основных стандартных ролевых классов, необходимых для моделирования корневых понятий AutomationML. Роль - это класс, описывающий абстрактную функциональную возможность без определения основополагающей технической реализации. Примеры ролевых классов: "Resource", "Robot". Если ассоциировать ролевой класс с объектом AutomationML, то данный объект языка AutomationML приобретает семантику. Дополнительные расширенные библиотеки описаны в МЭК 62714-2. Все описанные атрибуты являются частью стандартной библиотеки AutomationML. Они могут быть удалены из иерархии экземпляров InstanceHierarchy, если в них нет необходимости.
Каждый объект языка AutomationML и пользовательский ролевой класс должны прямо или косвенно ссылаться на одну из ролей указанной библиотеки AutomationML. Если рассматриваемая роль слишком специфична, то необходимо ссылаться на следующего родителя. Стандартный базовый ролевой класс RoleClass в виде дерева объектов, XML-таблицы, XML-текста приведен на рисунках 14 - 16. Подробности по каждому ролевому классу приведены в 6.4.2 - 6.4.13.
![]() ![]() Рисунок 15 - Базовая библиотека ролевых классов
AutomationMLBaseRoleClassLib
![]() AutomationMLBaseRoleClassLib
Описание класса базовых ролей "AutomationMLBaseRole" приведено в таблице 13.
Таблица 13
Описание ролевого класса "Group" приведено в таблице 14.
Таблица 14
Описание ролевого класса "Facet" приведено в таблице 15.
Таблица 15
Описание ролевого класса "Port" приведено в таблице 16.
Таблица 16
AutomationML Port
Атрибут "Cardinality" (мощность множества) имеет два второстепенных атрибута (субатрибуты), описанных в таблице 17.
Таблица 17
Дополнительно данный объект порта AutomationML должен иметь внешний интерфейс CAEX ExternalInterface, полученный из класса интерфейсов AutomationML InterfaceClass "PortConnector" (см. таблицу 18).
Примечание - Данный интерфейс позволяет соединять рассматриваемый порт с некоторым количеством других портов на абстрактном уровне без подробных описаний внутренних соотношений между субинтерфейсами (см. рисунок A.13).
Таблица 18
6.4.6 Ресурс ролевых классов RoleClass Resource
Описание ролевого класса "Resource" приведено в таблице 19.
Таблица 19
Дополнительно, при необходимости, объекты ресурса AutomationML должны иметь внешний интерфейс CAEX ExternalInterface "PPRConnector" для создания соотношений с продуктами и процессами (см. 6.3.5).
6.4.7 Ролевой класс RoleClass Product
Описание ролевого класса "Product" приведено в таблице 20.
Таблица 20
Дополнительно, при необходимости, объекты продукта AutomationML должны иметь внешний интерфейс CAEX ExternalInterface "PPRConnector" для создания соотношений с ресурсами и процессами (см. 6.3.5).
6.4.8 Ролевой класс RoleClass Process
Описание ролевого класса "Process" приведено в таблице 21.
Таблица 21
Дополнительно, при необходимости, объекты процессов AutomationML должны иметь внешний интерфейс CAEX ExternalInterface "PPRConnector" для создания соотношений с продуктами и ресурсами (см. 6.3.5).
6.4.9 Ролевой класс RoleClass Structure
Описание ролевого класса "Structure" приведено в таблице 22.
Таблица 22
6.4.10 Ролевой класс RoleClass ProductStructure
Описание ролевого класса "ProductStructure" приведено в таблице 23.
Таблица 23
6.4.11 Ролевой класс RoleClass ProcessStructure
Описание ролевого класса "ProcessStructure" приведено в таблице 24.
Таблица 24
6.4.12 Ролевой класс RoleClass ResourceStructure
Описание ролевого класса "ResourceStructure" приведено в таблице 25.
Таблица 25
Описание ролевого класса "PropertySet" приведено в таблице 26.
Таблица 26
Раздел 7 устанавливает порядок моделирования пользовательских данных в формате AutomationML. Моделирование специфических пользовательских данных - это основное понятие языка AutomationML. Пользовательские данные - это те атрибуты CAEX, классы интерфейсов InterfaceClass и классы ролей RoleClass, которые не были предварительно определены МЭК 62714. Механизм моделирования пользовательских данных обусловлен форматом CAEX для данных верхнего уровня языка AutomationML.
Для обмена пользовательскими данными могут потребоваться специальные пользовательские соглашения и функциональные возможности, которые не рассматриваются в МЭК 62714. Специальная метаинформация об инженерных инструментальных средствах источника, описанная в 5.4, поддерживает указанные функциональные возможности.
Язык AutomationML обеспечивает возможность определять соотношения между пользовательскими данными и стандартными данными с помощью понятия роли, понятия набора свойств PropertySet и стандартных отображений CAEX. Указанные понятия облегчают автоматическую интерпретацию пользовательских классов и атрибутов.
Все атрибуты, определенные в МЭК 62714, называются атрибутами AutomationML. Все атрибуты, не определенные в МЭК 62714, называются пользовательскими атрибутами. Атрибуты AutomationML и пользовательские атрибуты хранятся одинаковым образом в качестве CAEX-атрибутов.
Для пользовательских атрибутов применяют следующие положения:
- атрибуты CAEX должны храниться на языке AutomationML в соответствии с определением атрибутов CAEX, приведенным в МЭК 62424 (подраздел A.2.4);
- если необходимы единицы измерения, то пользовательские атрибуты должны базироваться на уже имеющейся системе единиц. Системы единиц измерений в настоящем стандарте не рассматриваются.
Предлагается использовать систему единиц СИ в соответствии с ИСО 80000-1. Для единиц информационных технологий предлагается использовать МЭК 60027.
Рисунок 17 содержит пример пользовательского объекта "Object01" с пользовательским атрибутом "Length" (длина).
![]() Все классы интерфейсов InterfaceClass, определенные в МЭК 62714, называются классами интерфейсов AutomationML InterfaceClass. Все классы интерфейсов, не определенные в МЭК 62714, называются пользовательскими классами интерфейсов InterfaceClass.
Для пользовательских классов интерфейсов InterfaceClass применяют следующие положения:
- все пользовательские классы интерфейсов InterfaceClass должны храниться в соответствии с определением CAEX InterfaceClass, приведенным в МЭК 62424 (подраздел A.2.5).
Примечание - Классы интерфейсов AutomationML InterfaceClass и пользовательские классы интерфейсов InterfaceClass хранятся одинаково в формате CAEX InterfaceClass;
- чтобы гарантировать алгоритмическую интерпретируемость семантики пользовательских классов интерфейсов, нужно данные классы выводить из классов интерфейсов AutomationML InterfaceClass.
Пример пользовательского класса интерфейсов "MyDigitalInput (мой цифровой вход)", полученного из класса интерфейсов AutomationML InterfaceClass "SignalInterface", приведен на рисунке 18. Соотношения наследования между классом интерфейсов "MyDigitalInput" и стандартным классом интерфейсов AutomationML InterfaceClass "SignalInterface" обеспечивают автоматическую идентификацию данного пользовательского класса как цифрового входного интерфейса. Пользовательские атрибуты заданы надлежащим образом. Пользовательские атрибуты, задействованные в данном примере, не являются предметом рассмотрения настоящего стандарта.
Примечание - В данном примере представление пути доступа сокращено для улучшения читаемости текста. В реальных приложениях пути доступа должны быть указаны полностью.
![]() интерфейсов InterfaceClass в пользовательской библиотеке
InterfaceClassLib
Все классы ролей RoleClass, определенные в МЭК 62714, называются ролевыми классами AutomationML RoleClass. Все классы ролей RoleClass, не определенные в МЭК 62714, называются пользовательскими ролевыми классами RoleClass.
Для пользовательских ролевых классов RoleClass применяют следующие положения:
- классы ролей формата CAEX RoleClass должны храниться в соответствии с требованиями формата CAEX RoleClass, определенными в МЭК 62424 (подраздел A.2.6).
Примечание 1 - Ролевой класс AutomationML RoleClass и пользовательский ролевой класс RoleClass хранятся одинаково в формате CAEX RoleClass;
- чтобы гарантировать семантическую интерпретируемость пользовательских ролевых классов RoleClass, они должны быть получены из ролевых классов AutomationML RoleClass.
Примечание 2 - Это способствует алгоритмической интерпретируемости семантики класса.
Пример пользовательского класса "Fence" (ограждение), полученного из стандартного ролевого класса AutomationML RoleClass "Resource", приведен на рисунке 19. Соотношение наследования между классами "Fence" и "Resource" позволяет интерпретировать данный пользовательский класс в качестве ресурса.
![]() классов RoleClass в пользовательской библиотеке RoleClassLib
Все классы системных единиц SystemUnitClass являются пользовательскими. В МЭК 62714 классы SystemUnitClass не рассматриваются.
Для пользовательских классов SystemUnitClass применяют следующие положения:
- пользовательские классы SystemUnitClass должны храниться на языке AutomationML в формате CAEX SystemUnitClass. Соответствующее определение приведено в МЭК 62424 (подраздел A.2.3);
- пользовательские классы SystemUnitClass должны непосредственно или косвенно быть назначены для ролевых классов AutomationML RoleClass. При необходимости они используют атрибуты AutomationML.
Пример - На рисунке 20 приведено определение пользовательского класса системных единиц SystemUnitClass с помощью двух различных примеров;
- класс SystemUnitClass "Robot1234" отображает пользовательский класс, поддерживающий роль "Resource" стандартной библиотеки AutomationML RoleClassLib. Данный класс автоматически интерпретируется как "Resource" (ресурс);
- класс SystemUnitClass "SpecialRobot1234" отображает новый пользовательский класс, полученный из предшествующего класса "Robot1234". Таким образом, данный класс также является ресурсом.
![]() системных единиц SystemUnitClass
Формат иерархий CAEX InstanceHierarchies обеспечивает хранение индивидуальной и проектно-технической информации. Данные иерархии формируют основу формата верхнего уровня языка AutomationML. Они содержат все индивидуальные объекты данных, включая свойства, интерфейсы, соотношения и ссылки.
Для пользовательских иерархий экземпляров InstanceHierarch применяют следующие положения:
- настоящий стандарт не ограничивает глубину уровней иерархии;
- настоящий стандарт не ограничивает архитектурные правила иерархии;
- настоящий стандарт не определяет конвенции именования рассматриваемых иерархий;
- каждый объект языка AutomationML внутри рассматриваемой иерархии экземпляров InstanceHierarchy должен непосредственно или косвенно закрепляться за ролевым классом AutomationML RoleClass для указания своего абстрактного типа.
Пример иерархии, включающей линию "L001" со станцией "S001", содержащей двух роботов "R0010_D" и "R0020_D", конвейер "RF010" и программируемый логический контроллер PLC "P001", приведен на рисунке 21.
![]() InstanceHierarchy
Представление AutomationML для рассматриваемой структуры приведено на рисунке 22. В соответствии с МЭК 62424 (подраздел A.2.9) каждый объект ассоциирован с ролевым классом RoleClass.
![]() иерархии экземпляров InstanceHierarchy
В настоящем стандарте определены расширенные понятия для моделирования специальных инженерных аспектов. Справочный обзор и примеры приведены в разделе A.2.
Порт AutomationML Port - это объект языка AutomationML, группирующий несколько интерфейсов. Справочный обзор понятий порта и примеры приведены в подразделе A.2.2.
Для портов AutomationML Port применяют следующие положения:
- порт AutomationML Port должен быть описан в формате внутренних элементов CAEX InternalElements в ассоциации с ролевым классом RoleClass "Port", описанным в 6.4.5;
- объект порта AutomationML моделируется как дочерний объект рассматриваемого объекта (класса) AutomationML;
- необходимый набор интерфейсов описывается в формате внешних интерфейсов CAEX ExternalInterface объекта порта;
- объект порта не должен содержать дочерних внутренних элементов CAEX InternalElements;
- все внешние интерфейсы CAEX ExternalInterface объектов порта должны непосредственно или косвенно выводиться из класса интерфейсов AutomationML, определенного в 6.3;
- порт AutomationML Port должен дополнительно иметь по крайней мере один внешний интерфейс CAEX ExternalInterface, полученный из класса интерфейсов AutomationML InterfaceClass "PortConnector", описанного в 6.3.4.
Примечание - Дополнительные нормативные положения (в части атрибутов объекта порта) приведены в 6.4.5.
Фасет AutomationML Facet - это объект языка AutomationML, определяющий общее для некоторой совокупности атрибутов (интерфейсов) языка AutomationML представление одного родительского объекта языка AutomationML. Данное понятие облегчает хранение настроек различных конфигураций (например, параметров человеко-машинных интерфейсов HMI, параметров программируемых логических контроллеров PLC) и позволяет автоматизировать некоторые шаги технического управления. Например, настоящий стандарт определяет ролевой класс AutomationML RoleClass "Facet" (см. 6.4.4). Краткое описание понятия фасета и соответствующие примеры приведены в подразделе A.2.3.
Для фасета AutomationML Facet применяют следующие положения:
- объект фасет AutomationML Facet описывается в формате внутренних элементов CAEX InternalElements в ассоциации с ролевым классом RoleClass "Facet", описанным в 6.4.4;
- объект фасет AutomationML Facet моделируется как дочерний объект рассматриваемого объекта (класса) AutomationML;
- фасет должен иметь уникальное среди ближайших родственных элементов произвольное имя.
Примечание - Имя фасета имеет важное значение для ассоциации с понятием Group. Описания понятий и примеры приведены в подразделе A.2.3;
- объект (класс) языка AutomationML может иметь произвольное количество объектов фасет;
- фасеты могут иметь произвольное количество атрибутов;
- атрибут фасета должен относиться к существующему атрибуту родительского объекта AutomationML. Идентификатор должен совпадать с именем. Атрибуты фасета, не являющиеся частью родительского объекта, недопустимы;
- интерфейс фасета должен относиться к существующему интерфейсу родительского объекта. Идентификатор должен совпадать с именем. Интерфейсы фасета, не являющиеся частью родительского объекта, недопустимы;
- фасеты не должны содержать новых дочерних объектов, атрибутов, интерфейсов;
- объект фасет не должен быть встроенным;
- фасеты не должны модифицировать существующие атрибуты и интерфейсы.
Понятие группы AutomationML Group позволяет отделить структурную информацию от информации об экземпляре. Справочный обзор понятия группы и примеры приведены в подразделе A.2.4.
Для объектов группы AutomationML Group применяют следующие положения:
- объекты группы AutomationML Group описываются в формате CAEX InternalElements в ассоциации с ролевым классом RoleClass "Group", определенным в 6.4.3;
- объекты группы AutomationML Group моделируются в произвольной позиции иерархии экземпляров InstanceHierarchy или класса системных единиц SystemUnitClass;
- количество объектов группы AutomationML Group не ограничено;
- объект группы AutomationML Group должен содержать только зеркальные объекты и/или последующие объекты группы.
Примечание 1 - Таким образом, объекты группы могут быть встроенными.
Примечание 2 - Если экземпляр A ссылается на другой экземпляр A*, то A называется "зеркальным объектом", а A* - "главным объектом" [в соответствии с МЭК 62424:2008 (подраздел A.2.14)]. Зеркальный объект ссылается на главный объект и все его данные. Таким образом, зеркальный объект работает как указатель главного объекта;
- группы AutomationML не должны использоваться для описания иерархии установки;
- объект группы AutomationML Group может хранить дополнительную информацию в виде атрибутов, интерфейсов или портов (для описания специальной информации о группе).
Примечание 3 - Указанные дополнительные атрибуты, порты и интерфейсы не идентичны атрибутам, портам или интерфейсам рассматриваемых зеркальных объектов;
- не разрешается изменять существующие атрибуты, интерфейсы или порты зеркальных объектов или дополнять информацию о зеркальных объектах;
- зеркальные объекты должны иметь свой собственный уникальный идентификатор ID.
Примечание 4 - Зеркальный объект считается идентичным главному объекту. Идентификатор помогает отличить зеркальное представление от главного;
- если главный объект стирается, то все соответствующие зеркальные объекты также стираются во избежание неоднозначности.
Примечание 5 - Данная функциональность инструментального средства в настоящем стандарте не рассматривается;
- если зеркальный объект стирается, то главный объект не должен быть поврежден;
- если используется атрибут ассоциированного фасета "Associated Facet", то его значение обеспечивает корректность имени существующего фасета.
Набор свойств PropertySet - это ролевой класс, содержащий набор атрибутов с четким синтаксисом и семантикой. Данный набор моделируется как ролевой класс, полученный из стандартных ролевых классов "PropertySet". Концептуальный обзор приведен в подразделе A.2.5.
Для понятия набора свойств PropertySet применяют следующие положения:
- класс PropertySet моделируется как ролевой класс. Он выводится непосредственно или косвенно из стандартных ролевых классов "PropertySet";
- классы PropertySet могут собираться в одну или несколько библиотек ролевых классов;
- объекты AutomationML могут ассоциироваться с одним и более классами набора свойств;
- для каждого набора свойств PropertySet объекта AutomationML создаются отдельные дочерние внутренние элементы CAEX InternalElements объекта AutomationML, которые не определяют какие-либо атрибуты CAEX, интерфейсы или внутренние элементы InternalElements, за исключением имени и идентификатора ID. Дочерний объект должен ассоциировать ролевой класс PropertySet с помощью элемента CAEX "RoleRequirement";
- отображения между атрибутами объекта AutomationML и ролью PropertySet моделируются с помощью элементов отображения CAEX "MappingObject" и "AttributeNameMapping" внутри соответствующих дочерних внутренних элементов InternalElements. Указанные отображения между рассматриваемым объектом AutomationML и ссылочным набором свойств PropertySet являются корректными. Отображенные атрибуты копируются в раздел RoleRequirement. Это копирование не является обязательным;
- атрибуты PropertySet могут быть вложенными;
- ассоциации между объектом AutomationML и несколькими наборами свойств моделируются с помощью нескольких дочерних элементов объекта AutomationML, каждый из которых имеет свою собственную ассоциацию RoleRequirement с соответствующим набором свойств, а также свои собственные отображения.
Рисунок 23 иллюстрирует данные положения на примере. Объект Robot_1 имеет несколько пользовательских атрибутов. Дочерние внутренние элементы InternalElements (IE) ассоциируются с геометрией набора свойств PropertySet "Geometry", определяющей соответствующие атрибуты. Объект отображения внутреннего элемента MappingObject IE содержит описание указанного отображения собственных и стандартных атрибутов.
![]() набора свойств PropertySet
![]() Рисунок 24 - Пример описания набора свойств PropertySet
на языке XML
В добавление к МЭК 62424 (подраздел A.3.18) настоящий стандарт определяет порядок поддержки нескольких ролей для экземпляра объекта. Рассмотрение сразу нескольких ролей имеет смысл, если объект поддерживает несколько различных функциональных возможностей. Например, устройство, которое одновременно является сканером, принтером и факсом. Обзор и примеры приведены в подразделе A.2.7.
Для поддержки сразу нескольких ролей применяют следующие положения:
- если экземпляр поддерживает только одну роль, то она описывается с помощью атрибута CAEX "RefBaseRoleClassPath", принадлежащего объекту RoleRequirement.
Примечание 1 - Данное положение соответствует МЭК 62424 (подраздел A.3.18), в котором устанавливается единовременная поддержка только одной роли;
- если экземпляр поддерживает несколько ролей, то каждая из них определяется с помощью элемента CAEX "SupportRoleClass" вместо использования атрибута CAEX для пути доступа к базовому ролевому классу "RefBaseRoleClassPath".
Примечание 2 - Атрибут "RefBaseRoleClassPath" может назначаться только один раз для элемента требования RoleRequirement. При этом элемент CAEX "SupportRoleClass" может быть определен несколько раз. Он является ключевым для назначения нескольких ролей. Однако в соответствии с МЭК 62424 это слабое семантическое расширение. Оно не изменяет формат данных CAEX;
- если экземпляр поддерживает несколько ролей, то требования к различным ролям должны храниться в самом экземпляре, это осуществляется с помощью элемента CAEX "RoleRequirement". При этом соответствующие атрибуты и интерфейсы назначаются непосредственно, включая имя роли, строку сепаратора "." и атрибут (имя интерфейса).
Примечание 3 - В соответствии с МЭК 62424 данное семантическое расширение является слабым. Оно не изменяет формат данных CAEX. Отличие МЭК 62424 (подраздел A.3.18) заключается в том, что имя роли добавляется в определение атрибута (интерфейса). Пример см. в подразделе A.2.7;
- если несколько поддерживаемых ролевых классов уже указаны и элемент CAEX "RoleRequirement" одновременно ассоциирован с определенным путем доступа "RefBaseRoleClassPath", то ассоциированный ролевой класс является предпочтительной ролью. В данном случае определения атрибута и отображения атрибута (интерфейса) требования к роли RoleRequirement (без явного префикса имени роли) ассоциируются с данной предпочтительной ролью.
Примечание 4 - Указанная предпочтительная роль используется в соответствии с МЭК 62424 (приложение A) без семантического расширения.
В соответствии с МЭК 62424:2008 (подраздел A.2.12) формат CAEX явно поддерживает распределение инженерных данных между различными файлами и обеспечивает работу механизмов ссылок на внешние файлы CAEX с помощью внешней ссылки CAEX "ExternalReference" и соответствующего понятия с косвенным доступом в формате CAEX.
Различные языки (для конкретных имен и описаний) могут храниться в языке AutomationML в соответствии со спецификациями языка XML и текстовым форматом windows-1251.
Для хранения информации о версии и пересмотре индивидуальных объектов AutomationML (экземпляров объектов) используются стандартные версии и утвержденный порядок пересмотра в соответствии с МЭК 62424 (пункт A.2.2.2).
Для хранения информации о версии объектов AutomationML и информации о библиотечной версии AutomationML см. 5.3.
Хранение специальной метаинформации об инструменте см. в 5.4.
(справочное)
A.1 Общие понятия языка AutomationML
Язык разметки автоматизации AutomationML - это схемный формат данных расширяемого языка разметки XML, разработанный для обеспечения независимого обмена (продавцом) инженерной информации о производственной установке. Целью языка AutomationML является обеспечение взаимосвязи приложений в различных инженерных дисциплинах: проектирование механизированного оборудования, электротехническое проектирование, проектирование производственных процессов, управление производственными процессами, разработка человеко-машинного интерфейса (HMI), программирование логического контроллера (PLC), программирование роботов и т.д.
Язык AutomationML накапливает инженерную информацию в соответствии с имеющейся объектно ориентированной парадигмой. Он позволяет моделировать конкретные компоненты производственной установки как объекты данных, инкапсулирующие различные технические аспекты. Рассматриваемый объект может включать подобъекты. Он может сам быть частью большой композиции (агрегации). Данный объект может описывать: сигналы, контроллеры PLC, накопители, клапаны управления, роботы, производственные ячейки (с различным уровнем детализации), производственные площадки и производственные линии. Типовые объекты автоматизации производственных установок включают информацию о топологии, геометрии, кинематике и логике. При этом логика включает последовательность/упорядоченность, поведение и управление.
Язык AutomationML объединяет существующие промышленные форматы данных, разработанные для хранения и обмена инженерной информации по различным аспектам. Указанные форматы данных используются "как есть" на основе их собственных спецификаций. Они не подстраиваются под требования языка AutomationML.
Ядром языка AutomationML является формат данных CAEX верхнего уровня. Он соединяет различные форматы данных. Таким образом, язык AutomationML имеет унаследованную распределенную архитектуру документов.
Базовая архитектура AutomationML, а также распределение информации о топологии, геометрии, кинематике и логике приведены на рисунке A.1.
![]() Основными преимуществами понятия распределенного документа являются использование опробованных и утвержденных форматов данных, распределение данных по различным файлам, что облегчает обработку массивов информации и упрощает использование библиотечных файлов AutomationML, которые могут отдельно храниться, обмениваться и рассматриваться. Информация с различным уровнем детализации (например, геометрические варианты) может храниться отдельно. Язык AutomationML определяет ассоциации между ссылочными форматами данных и инженерными объектами.
Краткие примеры, приведенные в подразделе A.1.1, содержат общий обзор информации, которая может храниться и обмениваться на основе языка AutomationML.
Информация о топологии установки: топология производственной установки описывает установку как иерархическую структуру, включающую индивидуальные объекты установки, представленные индивидуальными объектами данных. Структура данных объектов моделируется на определенном уровне детализации (например, робот целиком, механизм захвата целиком, но не отдельные его валы или соединительные элементы). Данные объекты включают свойства и соотношения с другими объектами в рамках рассматриваемой иерархической структуры. Топология установки работает как структура данных верхнего уровня. Информация хранится в формате данных CAEX в соответствии с МЭК 62424 (раздел 7, приложения A и C). В расширенной версии МЭК 62424 язык AutomationML определяет ссылки из объектов CAEX на информацию, хранящуюся во внешних документах (вне формата CAEX). Подраздел A.1.2 содержит примеры моделирования информации о топологии установки на языке AutomationML.
Информация о геометрии и кинематике: геометрия отдельного объекта установки включает его геометрическое представление. Информация о кинематике описывает физические соединения трехмерных твердых тел и зависимости между объектами. Информация о геометрии и кинематике хранится в файловом формате COLLADA. Дополнительно файл COLLADA включает определение информации о сопряжении геометрии и кинематики. Интерфейсы COLLADA могут быть опубликованы как внешние интерфейсы CAEX ExternalInterface в формате верхнего уровня (для последующего установления взаимосвязей). Полное представление получается автоматически из информации о геометрии в формате COLLADA для различных объектов. На указанные файлы можно ссылаться из формата CAEX. Взаимосвязь указанных файлов обеспечивается с помощью связующих CAEX-механизмов. Краткий пример приведен в подразделе A.1.3. Подробности приведены в МЭК 62714-3.
Информация о логике: информация о логике описывает последовательности действий и поведение объектов, соединения типа ВВОД/ВЫВОД и логические переменные. Данные последовательности описываются и хранятся во внешних документах языка PLCopen XML. Переменные и сигналы публикуются как внешние интерфейсы CAEX ExternalInterface. Указанные документы могут быть ссылочными из среды CAEX. Они могут быть взаимосвязанными элементами внутри самой среды CAEX. Подраздел A.1.4 содержит краткое введение в основные понятия. Подробности приведены в МЭК 62714-4.
Информация о ссылках и соотношениях: язык AutomationML проводит различия между ссылками и соотношениями. Ссылки отображают связи объектов CAEX с информацией, хранящейся вовне. Соотношения отображают ассоциации между объектами CAEX. Более того, для хранения ассоциаций между информацией, хранящейся во внешних документах, используется один и тот же механизм. Кроме того, необходимо опубликовать рассматриваемые связующие элементы с помощью внешнего интерфейса CAEX ExternalInterface в топологии установки CAEX. Подробности выполнения ссылок на документы COLLADA и документы PLCopen XML см. в МЭК 62714-3 и МЭК 62714-4. Подраздел A.1.5 содержит справочный обзор методик моделирования ссылок и соотношений на языке AutomationML. Нормативные положения рассмотрены в 5.6 и 5.7.
Выполнение ссылок на другие форматы данных: МЭК 62714 может быть расширен в будущем с помощью дополнительных частей, описывающих интеграцию дополнительных форматов данных, использующих механизмы ссылок языка AutomationML.
Обмен инженерной информацией требует дополнительных расширенных понятий. Раздел A.2 разъясняет указанные понятия. Раздел 8 содержит нормативные положения.
Примечание - В настоящем стандарте пути доступа в ряде случаев приведены в сокращенной форме. Например, вместо пути доступа "AutomationMLInterfaceClassLib/AutomationMLBaseInterface/Port" указан путь доступа "AutomationMLInterfaceClassLib/.../Port". Это облегчает чтение документа. В реальных документах XML все пути доступа указываются в соответствии с настоящим стандартом.
В языке AutomationML конкретные компоненты производственной установки моделируются как объекты данных, инкапсулирующие различные аспекты инженерной информации. Здесь необходимо структурировать объекты данных. Правильный способ структурирования таких объектов данных - построение иерархии объектов, составляющих топологию установки (см. 3.1.20).
Для хранения иерархической структуры установки язык AutomationML использует понятия в формате данных CAEX верхнего уровня в соответствии с МЭК 62424 (подраздел A.2.11). Рисунок A.2 содержит пример топологии промышленной установки производственной линии, содержащей несколько объектов на различных иерархических уровнях.
![]() на языке AutomationML
С помощью стандартных понятий CAEX можно моделировать множественные иерархии, пересеченные структуры и сложные сети объектов. При этом ключом к повышению эффективности рассматриваемой объектно ориентированной парадигмы является доступность библиотек, содержащих предварительно определенные и утвержденные инженерные решения. Кроме того, формат CAEX реализует несколько различных типов библиотек AutomationML для интерфейсов, ролей, системных модулей и иерархий экземпляров, представляющих особую важность для объектов AutomationML.
Классы интерфейсов InterfaceClass и библиотеки классов интерфейсов InterfaceClassLib: интерфейсы способствуют определению соотношений между объектами AutomationML. Подраздел 6.3 содержит описание стандартной библиотеки AML-InterfaceClassLib на множестве абстрактных классов интерфейсов InterfaceClass, применяемых в общих системах автоматизации. Указанные классы включают их синтаксическое и семантическое определение. Они содержат спецификацию пользовательских интерфейсов объектов. Подраздел 7.3 содержит описание методики моделирования пользовательских ролевых классов.
Классы ролей RoleClass и библиотеки ролевых классов RoleClassLib: классы ролей RoleClass обеспечивают определение абстрактных характеристик объектов CAEX. Они обеспечивают автоматическую интерпретацию семантики пользовательских объектов AutomationML. Подраздел 6.4 содержит описание библиотеки ролевых классов AML-RoleClassLib с набором абстрактных ролевых классов RoleClass для общих систем автоматизации. Подраздел 7.4 содержит описание методики моделирования пользовательских ролевых классов. Он также содержит описание последующих библиотек ролей в соответствии с МЭК 62714-2.
Системные единицы SystemUnits и библиотека класса системных единиц SystemUnitClassLib: библиотека класса системных единиц SystemUnitClassLib используется для хранения специальных классов AutomationML продавца. Подраздел 7.5 содержит описание архитектурных правил определения класса системных единиц SystemUnitClass. Язык AutomationML не устанавливает предварительных определений элементов библиотеки SystemUnitClassLib или класса SystemUnitClass.
Экземпляры и иерархия экземпляров InstanceHierarchy: иерархии экземпляров хранят данные топологии текущих проектов и, таким образом, корневых объектов языка AutomationML. Данные иерархии включают экземпляры объектов AutomationML. Подраздел 7.6 содержит описание порядка хранения инженерной информации с помощью иерархии экземпляров типа InstanceHierarchy.
Важным аспектом моделирования топологии производственной установки является идентификация объектов. Разные инженерные инструменты используют разные понятия для идентификации объектов, например уникальное имя, уникальный идентификатор, уникальный путь доступа. Одни инструменты позволяют изменять идентификаторы в течение срока существования, другие - нет. Внутри одного инструмента это работает отлично. При этом обмен объектов между различными инструментами невозможен. Подраздел 5.5 вводит понятие обязательной идентификации объекта. Данное понятие обеспечивает возможность обмениваться данными между различными приложениями с помощью понятия индивидуальной идентификации объекта.
Информация о геометрии и кинематике хранится в отдельных документах в формате данных COLLADA. Моделирование информации о геометрии и кинематике, таким образом, разбивается на две части. С одной стороны, соответствующий объект моделируется внутри формата CAEX без учета какой-либо информации о геометрии и кинематике (в соответствии с настоящим стандартом). С другой стороны, документы COLLADA должны содержать информацию о геометрии и кинематике. В результате получается, что объект CAEX содержит ссылку на документ COLLADA в соответствии с МЭК 62714-3.
Рисунок A.3 содержит пример документа AutomationML, включающего объект "110RB_200". Данный объект ссылается на внешний документ COLLADA, содержащий соответствующую информацию о геометрии и кинематике.
![]() Ссылка моделируется с помощью интерфейса CAEX, полученного из стандартного класса интерфейсов языка AutomationML "COLLADAInterface" (см. 5.7 и 6.3.7). Подробности приведены в МЭК 62714-3.
Информация о логике хранится в отдельных документах в формате данных PLCopen XML. Моделирование информации о логике, таким образом, делится на две части. С одной стороны, соответствующие объекты моделируются внутри CAEX без учета какой-либо информации о логике в соответствии с настоящим стандартом. С другой стороны, документ PLCopen XML должен содержать информацию о логике в соответствии с МЭК 62714-4. В результате получается, что объект CAEX должен иметь ссылку на документ PLCopen XML. Рисунок A.4 содержит пример документа AutomationML, включающего объект "110_Working Cell" (рабочая ячейка), имеющий ссылку на внешний документ PLCopen XML, содержащий соответствующую информацию о логике.
![]() Для моделирования объектов необходимо уметь поставить один объект в соответствие другому. Требуется наличие дополнительных механизмов, чтобы связать указанные объекты с данными, хранящимися вовне.
Соотношение выражает ассоциацию между двумя и более объектами. Данная зависимость может быть любой природы (физической или логической). Язык AutomationML поддерживает следующие соотношения:
- соотношения "родитель - потомок" между объектами AutomationML;
- соотношения "родитель - потомок" между классами AutomationML;
- соотношения наследования (см. 5.6.4):
- соотношения наследования между классами системных единиц
SystemUnitClass;
- соотношения наследования между ролевыми классами RoleClass;
- соотношения наследования между классами интерфейсов
InterfaceClass;
- соотношения "класс - экземпляр класса" (см. 5.6.5):
- соотношения между классом SystemUnitClass и его экземпляром;
- соотношения между классом RoleClass и его экземпляром;
- соотношения между классом InterfaceClass и его экземпляром;
- соотношения "экземпляр - экземпляр" (см. 5.6.6):
- соотношения между объектами AutomationML;
- соотношения между опубликованными данными, хранящимися вовне.
Пример типов соотношений, поддерживаемых языком AutomationML, приведен на рисунке A.5.
![]() языком AutomationML
Модель AutomationML, соответствующая данному примеру, приведена на рисунке A.6 в табличном представлении. Отметим, что информация о пути доступа может сокращаться с помощью поля "/.../", что улучшает читаемость. Описание на языке XML, соответствующее рассматриваемой библиотеке AutomationML, приведено на рисунке A.7.
![]() ![]() класса системных единиц SystemUnitClassLib на языке XML
Описание иерархии экземпляров InstanceHierarchy на языке XML приведено на рисунке A.8.
![]() экземпляров InstanceHierarchy на языке XML
A.2.1 Общий обзор
Язык AutomationML определяет расширенные понятия для моделирования специальных инженерных аспектов. Например, понятие порта AutomationML Port, понятие фасета AutomationML Facet, понятие группы AutomationML Group. Обзор указанных расширенных понятий приведен в таблице A.1.
Таблица A.1
A.2.2.1 Описание понятия "порт"
Порт AutomationML Port - это объект языка AutomationML, группирующий несколько интерфейсов (см. рисунок A.9). Объект порта принадлежит одному родительскому объекту языка AutomationML и описывает комплексные интерфейсы родительского объекта. Порты соединяются друг с другом на более высоком уровне абстракции, чем просто связь с каждым отдельным интерфейсом. Понятие порта AutomationML Port может описывать "вилки", "розетки" и любые другие группы интерфейсов, непосредственно соединенные друг с другом. Кроме того, язык AutomationML определяет понятие AutomationML для ролевых классов RoleClass "Port" (см. 6.4.5). Нормативные положения рассмотрены в 8.2.
![]() Рисунок A.10 содержит пример понятия порта AutomationML Port. Объект "Station" (станция) включает подобъекты "Conveyor1" и "Conveyor2". Оба подобъекта имеют один объект порта каждый. Объект порта содержит набор интерфейсов, а также стандартный интерфейс "Connection-Point" (точка соединения), полученный из класса интерфейсов AutomationML InterfaceClass "PortConnector". Данный стандартный интерфейс может соединяться с помощью внутренних связей CAEX InternalLinks. Рассматриваемое соотношение означает, что оба порта соединены друг с другом. Внутренние связи субинтерфейсов подробно не описаны в настоящем стандарте. Рассматривается соединение только абстрактных точек ConnectionPoints. Кроме данного понятия, язык AutomationML допускает хранение каждого индивидуального связующего элемента, расположенного между субинтерфейсами.
![]() Рисунки A.11 и A.12 описывают практическую реализацию на языке AutomationML примера системы, приведенной на рисунке A.10.
![]() на языке XML
![]() понятия порта AutomationML Port
A.2.2.3 Моделирование порта как пользовательского класса системных единиц AutomationML SystemUnitClass
Пример описания пользовательского класса системных единиц SystemUnitClass "myPortClass" на языке XML приведен на рисунке A.13.
![]() портов AutomationML "myPortClass"
A.2.3.1 Описание понятия
Фасет - это объект языка AutomationML, обеспечивающий представление атрибутов и интерфейсов родительского объекта AutomationML. Данное понятие облегчает хранение различных настроек конфигурации (например, настроек человеко-машинного интерфейса HMI, программируемого логического PLC-контроллера и т.д.) и способствует автоматизации некоторых шагов разработки системы управления производством. Кроме того, язык AutomationML определяет понятие ролевых классов AutomationML RoleClass "Facet" (см. 6.4.4). Нормативные положения рассмотрены в 8.3.
Описанная подгруппа атрибутов и интерфейсов относится к определенным инженерным аспектам. Она может хранить информацию о соответствующих инженерных решениях или шаблонах. Синтаксис и семантика указанных имен (значений) атрибутов в настоящем стандарте не рассматриваются. Они интерпретируются с помощью внешних приложений, учитывающих синтаксис и семантику соответствующей информации. Таким образом, для работы указанных алгоритмов и выполнения задач автоматизированного проектирования нужна только информация о фасетах. Допустим, что атрибуты объекта включают имя шаблона кода программируемого логического PLC-контроллера, а интерфейсы описывают входы/выходы данного шаблона. Получается, что алгоритм генерации кода PLC-контроллера, учитывающий семантику рассматриваемых атрибутов и интерфейсов, может генерировать код PLC-контроллера из имеющейся информации. То же самое происходит и с HMI-шаблоном. Вышеупомянутые внешние алгоритмы, а также семантика соответствующих атрибутов (интерфейсов) в МЭК 62714 не рассматриваются. Выполнение задач автоматизированного проектирования осуществляется за счет совместного использования понятий AutomationML Group и AutomationML Facet.
A.2.3.2 Пример
Рисунок A.14 разъясняет понятие фасета AutomationML Facet на конкретном примере. Объект "Conveyor1" включает атрибуты "A" и "B", а также интерфейсы "X" и "Y". Назначенный объект фасета "PLCFacet" ссылается на атрибут "A" и интерфейс "X". При этом назначенный объект фасета "HMIFacet" ссылается на атрибуты "A" и "B" и интерфейс "Y". Поэтому оба фасета обеспечивают фильтрованное представление для имеющейся инженерной информации, необходимой для выполнения задач автоматизированного проектирования.
Пример применения: атрибут "A" может быть "ориентированным на продавца" именем специального шаблона кода программируемого логического контроллера PLC, описывающего функциональные возможности объекта "Conveyor1". Интерфейс "X" может быть именем входного сигнала, используемого данным шаблоном кода. Атрибут "B" может быть именем специального шаблона человеко-машинного интерфейса HMI конвейера. Интерфейс "Y" может быть сигналом, представляемым данным человеко-машинным интерфейсом HMI. С учетом данной информации рассматриваемый программируемый логический контроллер PLC (человеко-машинный интерфейс HMI) способен генерировать инженерные решения автоматически. См. пример в пункте A.2.4.4.
![]() ![]() Рисунок A.15 - Пример описания фасета AutomationML
на языке XML
A.2.4.1 Описание понятия
Понятие группы AutomationML Group позволяет отделить информацию о структуре от информации об экземпляре. Так как различные инженерные средства (приложения) могут использовать различные представления одних и тех же данных, может оказаться полезным хранить данные представления раздельно. Это достигается за счет использования понятия AutomationML Group. Структурирование идентичных объектов возможно в различных иерархиях.
Путем определения атрибута группы "AssociatedFacet" (ассоциированный фасет) данная группа может быть ассоциирована с типом фасетов, характеризуемых уникальным именем. Это позволяет внешним инженерным алгоритмам автоматически идентифицировать рассматриваемые объекты (и их соответствующие фасеты), чтобы получить требуемую инженерную информацию. Кроме того, язык AutomationML определяет ролевой класс AutomationML RoleClass "Group" (см. 6.4.3). Нормативные положения приведены в 8.4.
A.2.4.2 Пример
Рисунок A.16a) описывает понятие группы с помощью структуры "Station", содержащей объекты "Conveyor1", "Conveyor2", "Robot1" и "PLC1". Объекты "Group1" и "Group2" описывают одинаковые данные в различных иерархиях. Объект "Group1" определяет структурное представление только для конвейеров. Объект "Group2" отображает только объекты, относящиеся к программируемому логическому контроллеру PLC. В соответствии с МЭК 62424 (подраздел A.2.14) формат CAEX обеспечивает хранение таких пересекающихся структур. Рисунок А.16b) содержит интерпретацию данного примера на языке AutomationML. Рисунок A.17 содержит соответствующее описание на языке XML.
![]() ![]() Рисунок A.16 - Пример группы AutomationML Group
![]() на языке XML
A.2.4.3 Комбинация понятия группы и понятия фасета
Пример возможной комбинации понятия группы и понятия фасета приведен на рисунке A.18. Показанная иерархия экземпляров InstanceHierarchy отображает объект языка AutomationML "Station", включающий объекты AutomationML "Conveyor1" и "Conveyor2". Указанные конвейеры имеют два атрибута и два интерфейса каждый.
![]() Объект языка AutomationML "Group" представляет собой встроенные группы "Group1" и "Group2". Обе группы ссылаются на объекты конвейера, но имеют различные ассоциации фасетов.
Пример применения: алгоритм генерации кода управления может пройти по иерархии экземпляров InstanceHierarchy и идентифицировать все группы, ассоциированные с фасетом "PLCFacet", а затем сгенерировать код для оценки ссылочных объектов.
Рисунок A.19 содержит описание на языке XML, соответствующее примеру, приведенному на рисунке A.18.
![]() "фасет - группа" на языке XML
A.2.4.4 Автоматическая генерация человеко-машинного интерфейса HMI с помощью понятия группы и понятия фасета
В данном примере принято, что атрибут "B" конвейера представляет собой шаблон интерфейса HMI, визуализирующий переменную "Y". Рисунок A.20 иллюстрирует характерный шаблон интерфейса HMI конвейера.
![]() HMI, визуализирующий переменную "Y"
технологического процесса конвейера
Основанный на конкретном экземпляре конвейера, рассматриваемый инженерный алгоритм идентифицирует, что объект языка AutomationML "Group2" ассоциирован с фасетом HMI-интерфейса. Здесь он идентифицирует, что экземпляры "Conveyor1" и "Conveyor2" являются частью HMI-интерфейса. Данный алгоритм может извлекать информацию из интерфейса HMI о каждом из двух конвейеров. Он может идентифицировать соответствующий шаблон HMI, может ассоциировать корректные сигналы для последующей их визуализации. Рисунок A.21 представляет результирующий HMI-интерфейс.
![]() "B", визуализирующий оба конвейера с индивидуальными
переменными технологического процесса
A.2.5.1 Описание понятия
Набор свойств PropertySet применяется как таксономия (структурированный словарь) атрибутов. Он моделируется как ролевой класс, содержащий предварительно определенные атрибуты, описывающие свойства рассматриваемой области применения, и получен из стандартного ролевого класса "PropertySet" (см. 6.4.13). Данный набор включает список синтаксически и семантически согласованных атрибутов. Наборы свойств собраны в библиотеки ролевых классов.
Объекты AutomationML могут быть ассоциированы с одним или несколькими наборами свойств. Для каждого набора свойств создается отдельный дочерний объект типа CAEX InternalElements, который назначается соответствующему классу PropertySet с помощью определений требования роли RoleRequirement. Несколько наборов свойств могут быть ассоциированы с помощью нескольких дочерних внутренних элементов InternalElements соответствующего объекта AutomationML.
Объект отображения CAEX обеспечивает отображение собственных атрибутов объекта AutomationML с предварительно семантически определенными атрибутами набора свойств PropertySet. Это обеспечивает возможность импортеру программного обеспечения автоматически интерпретировать указанные атрибуты и отображать их на целевые специальные атрибуты инструментальных средств. Данная процедура упрощает автоматический обмен данных между различными инструментами.
Также существуют предварительно определенные библиотеки наборов свойств AutomationML. Нормативные положения приведены в 8.5.
A.2.5.2 Пример
В качестве примера (на языке AutomationML) рассматривается процедура передачи схемы линии сборки, содержащей станции сборки (см. рисунок A.22). Станция сборки состоит из трех площадок. Одна - для транспортирования материала, вторая - для хранения материала, третья - для непосредственной сборки (см. ниже). Приложения источника определяют данные площадки с помощью пользовательских атрибутов, назначенных объекту и представляющих рассматриваемую станцию.
![]() Соответствующая модель AutomationML приведена на рисунке A.23. В левой части рисунка показана иерархия экземпляров, необходимая для моделирования трех площадок Станции 1. Каждая площадка имеет свой пользовательский набор атрибутов и ссылку на набор свойств PropertySet "Area". Соответствующее описание на языке XML приведено на рисунке A.24.
![]() ![]() В правой части рисунка A.23 приведена библиотека набора свойств AutomationML PropertySet. Данная библиотека ролевых классов AutomationML RoleClass содержит класс RoleClass "GeometricData" (геометрические данные), полученный из базового ролевого класса Base-RoleClass "PropertySet". Ролевой класс RoleClass "GeometricData" сам имеет дополнительные производные, определяющие некоторые базовые геометрические свойства. Класс RoleClass с именем "Area" (площадка) определяет атрибуты "Length" (длина) и "Width" (ширина) как атрибуты типа "double (двойной)" и единицу измерения "m" (метр). На рисунке A.25 приведено описание на языке XML, определяющее рассматриваемые атрибуты набора свойств PropertySet.
![]() в кодах на языке XML
С помощью набора свойств PropertySets экспортирующий инструмент может сохранять пользовательские объекты с пользовательскими атрибутами и объяснять семантику пользовательских атрибутов с помощью процедуры отображения. Данное утверждение поддерживает автоматическую интерпретацию рассматриваемых атрибутов. Таким образом, целевой инженерный инструмент может интерпретировать данные и выполнять преобразование единиц измерения, используемых атрибутами набора свойств PropertySet.
A.2.6.1 Описание понятия
В процессе накопления практического опыта структурирования комплексных инженерных данных технологической установки установлено, что необходима трисекция данных на ресурсы, процессы и продукты. Рассматриваемое понятие используется в различных областях, например для цифровых производственных инструментальных средств (цифровая модель производства) в соответствии с МЭК 62264 на уровне системы организации производства (MES).
Ресурсы - это центральный компонент рассматриваемой модели. Они обеспечивают производство и обработку продукта. В языке AutomationML ресурс - это сущность, используемая для производства, включая установки, роботов, станки, их состояние, оборудование, возможные сообщения и т.д. Ресурсы могут быть как аппаратными компонентами производственной системы, так и программным обеспечением данной системы (например, система SCADA). В языке AutomationML ресурсы обычно моделируются в иерархии производственной установки, образуя ее топологию.
Изготовленный продукт - основная цель рассмотрения. Он определяет, какие технологические процессы следует применить к материалам (промежуточным продуктам), какое оборудование следует использовать. Продукт рассматривается в рамках непрерывного, дискретного или серийного производства. Продукт на языке AutomationML отображает готовый товар. Он может формироваться иерархически. Рассматриваемый продукт не обязательно должен быть конечным. К продукту относят также результаты его испытаний, спецификации и сопутствующую документацию.
Технологический процесс также является центральным элементом модели. Процесс на языке AutomationML представляет собой производственный процесс, включающий несколько подпроцессов. Параметры процесса, технологические цепочки, планирование процесса - неотъемлемые его части. Процессы модифицируют продукты. Язык AutomationML поддерживает получение конечного продукта из различных подпродуктов, изменение веществ путем их химической обработки, поддерживается связь процессов с ресурсами и наоборот.
В каждом случае представления ресурсов, продуктов и процессов связаны друг с другом (см. рисунок A.26). Корректным назначением для процесса "transport" является ресурс "conveyor" (конвейер). Ресурс "press" (прессование) обеспечивает "scrap cubes" (спрессованные отходы). Процесс "welding" (сварка) обеспечивает "weld" (сварку) двух "metal" (металлических заготовок).
![]() "Продукт - Процесс - Ресурс"
Для создания связей между указанными элементами требуется наличие интерфейса. Для этого язык AutomationML определяет стандартный класс интерфейсов PPRConnector (см. рисунок A.27). Положения, касающиеся коннектора PPRConnector, рассмотрены в 6.3.5. С помощью данного интерфейса могут быть установлены связи между элементами, включающие стандартные внутренние связи CAEX InternalLinks (см. 5.6.6). Таким образом, ресурсы могут быть связаны с продуктами, которыми можно манипулировать.
![]() A.2.6.2 Пример
Следующий пример (см. рисунок A.28) иллюстрирует использование данного понятия в языке AutomationML. Оно включает два конвейера (C1 и C2), поворотную платформу (TT1) и робота (RB1). Это ресурсы производственной установки. Робот устанавливает колеса на автомобиль, колеса и автомобиль - продукты. Производственные процессы в рамках рассматриваемого примера: транспортирование, поворот платформы, сборка.
![]() На языке AutomationML понятие "Процесс - Продукт - Ресурс" моделируется с помощью понятия роли CAEX [см. МЭК 62424 (подраздел A.2.9)] и соотношений между элементами (см. 5.6.6). Наборы элементов с назначенными ролями "Ресурс", "Продукт" или "Процесс" разбиваются на пары. Это означает, что ресурс не может быть и продуктом, и процессом одновременно. Соответствующие классы ролей являются частью библиотеки базового ролевого класса AutomationMLBaseRoleClassLib (см. рисунок A.29 и 6.4).
![]() для понятия "Процесс - Продукт - Ресурс"
В рассматриваемом примере (см. рисунок A.28) роль "Ресурс" назначена конвейеру, роботу и поворотной платформе. Автомобилям и колесам назначена роль "Продукт". Роль "Процесс" соответствует процессам транспортирования, поворота платформы и сборки. Все элементы хранятся на соответствующем поддереве (см. рисунок A.30). Порядок применения процессов, продуктов и ресурсов явно выражается связующими элементами, установленными между соответствующими интерфейсами типа "Order" (это не показано на рисунке, чтобы его не загромождать).
![]() Каждый элемент (в рассматриваемом примере) имеет интерфейс коннектора PPRConnector. Полные представления связующих элементов представлены на рисунке A.31. Непрерывные линии - это связи ресурсов с процессами. Точечные линии - это связи процессов с продуктами. Штриховые линии - это связи ресурсов с продуктами. Схема представляется достаточно сложной, поэтому (для простоты) избыточные связи опущены.
![]() - процесс (P1); - ресурс (R); - продукт (P2); - внутренняя связь (RP1); - внутренняя связь (RP2); - внутренняя связь (P1P2)На рисунке A.32 данный пример рассмотрен с точки зрения ресурса. Поэтому нужны только 12 связей из их общего количества, равного 19. Конвейер "C1" соединен с продуктом "Автомобиль без колес 1" (см. также поворотную платформу "TT1" и конвейер "C2"). Так же как робот устанавливает колеса на автомобиле на конвейере "C2", робот "RB1" соединен с продуктами "Автомобиль без колес 1", "Автомобиль с колесами 1" и "Колеса 1". Дополнительно конвейер "C2" связан с продуктом "Автомобиль с колесами 1". Процесс транспортирования "Транспорт 1" связан с конвейером "C1". Процессы транспортирования "Транспорт 2" и "Транспорт 3" связаны с конвейером "C2". Процесс "Сборка 1" связан с роботом "RB1". Процесс "Поворот 1" связан с поворотной платформой "TT1". Связи продуктов с процессами (точечные линии на рисунке A.31) могут быть получены из других существующих связей. Данную блок-схему можно произвольно поворачивать, продукты и процессы блок-схемы можно произвольно перемещать.
![]() - процесс (P1); - ресурс (R1); - продукт (P2); - внутренняя связь (RP1); - внутренняя связь (RP2); - внутренняя связь (P1P2)На рисунке A.33 приведено дерево рассматриваемого объекта AutomationML. Внутренняя связь InternalLink между конвейером "C1" и процессом "Транспорт 1" вынесена отдельно.
![]() InstanceHierarchy на языке AutomationML
Соответствующая модель на языке XML приведена на рисунке A.34. На первом уровне примера приведены три базовых элемента ("Ресурсы", "Процессы", "Продукты"), моделируемые как внутренние элементы в формате CAEX InternalElements.
![]() InternalElements
Ниже объекта "Resource" расположены четыре компонента: два конвейера, поворотная платформа и робот. Они также имеют тип "InternalElements" (внутренний элемент). Данные компоненты имеют наружный интерфейс (коннектор) ExternalInterface PPRConnector. Они назначают ролевой класс "Resource". Процессы и продукты имеют интерфейс, их роли распределены. Для организации связей между элементами объекты InternalLinks обычно располагают на одном уровне как самые главные базовые элементы. Рассматриваемые связи показаны на языке XML на рисунке A.35.
![]() InternalLinks
Полный обзор понятий в рамках рассматриваемого примера приведен на рисунке A.36.
![]() InstanceHierarchy рассматриваемого примера
на языке XML
В добавление к МЭК 62424:2008 (подраздел A.2.9) язык AutomationML обеспечивает возможность поддержки сразу нескольких ролей для экземпляра одного объекта. Рассмотрение сразу нескольких ролей имеет смысл, если данный объект имеет несколько функциональных возможностей.
Примером является многофункциональное устройство, работающее как сканер, принтер и факс одновременно. Положения, касающиеся одновременной поддержки нескольких ролей, рассмотрены в 8.5.
Рисунок A.37 содержит пример, в котором объект "MultiDevice01" имеет три атрибута: "Fax-BoudRate", "PrintSpeed (скорость печати)", "FaxSpeed" (скорость передачи сообщения) и два интерфейса: "PowerSupply" (питание) и "USB" (USB-интерфейс)". Объект "MultiDevice01" поддерживает три роли: "Printer" (принтер), "Fax" (факс), "Scanner" (сканер). Роль со ссылочным тегом "RefBaseRoleClassPath" (ссылочный путь доступа к базовому ролевому классу) для соответствующего элемента требований RoleRequirement является базовой. Соответствующий XML-код приведен на рисунке A.38.
Атрибуты и интерфейсы, принадлежащие объекту "MultiDevice01", должны отображаться на атрибуты и интерфейсы всех трех ассоциированных ролей. Это производится с помощью объекта отображения CAEX MappingObject в соответствии с МЭК 62424 (подраздел A.2.10), который дает информацию об атрибуте роли (интерфейсе), о порядке ассоциации рассматриваемого экземпляра атрибута (интерфейса). Чтобы различать атрибуты различных ролей (имеющих одинаковые имена), имя роли включается в определение отображения (за исключением базовой роли, указанной в пути доступа "RefBaseRoleClassPath"). Пример описания необходимых атрибутов и интерфейсов, а также порядка их отображения на экземпляры атрибутов и интерфейсов приведен на рисунке A.37.
![]() поддерживающего несколько ролей
Представление рассматриваемой структуры на языке AutomationML приведено на рисунке A.38.
![]() несколько ролей на языке AutomationML
Соответствующие библиотеки ролевых классов AutomationML и их представление на языке XML приведены на рисунках A.39 и A.40.
![]() AutomationML, соответствующая примеру
с несколькими определениями ролей
![]() ролевых классов AutomationML
(справочное)
B.1 Библиотека базового ролевого класса AutomationMLBaseRoleClassLib
B.2 Библиотека класса интерфейса AutomationMLInterfaceClassLib
(справочное)
НАЦИОНАЛЬНЫМ СТАНДАРТАМ
Таблица ДА.1
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/26/gost_44231.html
На правах рекламы:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||