Структура словаря ================= .. contents:: :depth: 1 :local: В этой секции детализирована структура словаря объектов (OD) и записей, которые являются общими для всех устройств. .. note:: Объектный словарь состоит из 7 столбцов, показанных ниже. .. table:: Формат заголовков OD +--------+-----+--------+-----------------------------------------------------+----------------+-----+-----+------------+ | Индекс | Sub | Объект | Имя | Тип | SDO | PDO | Значение | +========+=====+========+=====================================================+================+=====+=====+============+ - **Индекс.** Столбец Index обозначает позицию объекта внутри OD. Это работает как адрес для ссылки на нужное поле данных словаря OD. - **Sub** sub-индекс используется для навигации к полям данных сложного объекта словаря, такого как массив (array) или запись (record). - **Объект.** Этот столбец содержит имя объекта (Object Name) в соответствии с таблицей (см. ниже), и используется для обозначения, какой объект по какому определенному индексу находится в OD. Используются следующие определения: .. table:: Определения объекта (Object Definitions) для словаря. +----------------+------------------------------------------------+-------------+ | Имя объекта | Комментарии | Код объекта | +================+================================================+=============+ | NULL | Элемент словаря без полей данных. | 0 | +----------------+------------------------------------------------+-------------+ | DOMAIN | Переменная большого размера, | 2 | | | например код выполняемой программы. | | +----------------+------------------------------------------------+-------------+ | DEFTYPE | Обозначает определение типа, такое так Boolean,| 5 | | | UNSIGNED16, float и т. п. | | +----------------+------------------------------------------------+-------------+ | DEFSTRUCT | Определяет новый тип записи, например структура| 6 | | | PDOmapping в позиции 21h. | | +----------------+------------------------------------------------+-------------+ | VAR | Одиночное значение, такое как UNSIGNED8, | 7 | | | Boolean, float, Integer16, строка и т. д. | | +----------------+------------------------------------------------+-------------+ | ARRAY | Объект, состоящий из множества полей данных, | 8 | | | где каждое поле это простая переменная, и все | | | | поля одинакового базового типа, например массив| | | | чисел UNSIGNED16 и т. п. Sub-индекс 0 имеет тип| | | | UNSIGNED8, так что он не является частью данных| | | | массива ARRAY. | | +----------------+------------------------------------------------+-------------+ | RECORD | Объект, состоящий из нескольких полей данных, | 9 | | | где поля данных могут быть любой комбинацией | | | | простых переменных (типы этих переменных | | | | отличаются). Sub-индекс 0 имеет тип UNSIGNED8, | | | | так что он не является частью данных RECORD. | | +----------------+------------------------------------------------+-------------+ - **Имя.** Столбец имени предоставляет простое текстовое описание функции определенного объекта. - **Тип.** Столбец Тип дает информацию о типе объекта. Типы включают предопределенные типы: BOOLEAN, число с плавающей точкой, число без знака (UNSIGNED), число со знаком, видимую строку, октетную строку, время дня, интервал времени и DOMAIN (см. 9.1). Это также включает предопределенный сложный тип данных PDOMapping, и может также другие типы, определенные либо производителем, либо это могут быть типы, специфичные для устройства. Нельзя определить записи из записей, массивы из записей или записей с массивами в качестве полей этой записи. В случае, когда объект является массивом или записью, используется sub-индекс для ссылки на одно поле данных в объекте. - **SDO** Столбец атрибута определяет права доступа к определенному объекту - с точки зрения от шины в устройство. Атрибуты могут быть: .. table:: Атрибуты доступа (Access Attributes) для объектов данных (Data Objects). +---------+---------------------------------------------------------+ | Атрибут | Описание | +=========+=========================================================+ | rw | Доступ на чтение и запись (Read, Write). | +---------+---------------------------------------------------------+ | wo | Доступ только на запись (Write Only). | +---------+---------------------------------------------------------+ | ro | Доступ только на чтение (Read Only). | +---------+---------------------------------------------------------+ | Const | Доступ только на чтение, значение является константой. | +---------+---------------------------------------------------------+ .. note:: Не обязательные объекты, перечисленные в OD с атрибутом rw (чтение и запись) могут быть реализованы как read only (только чтение). Исключения определены в подробной спецификации объекта. - **PDO.** Столбец PDO определяет, может ли данный параметр передаваться в PDO (tx) или обновляться из PDO (rx). - **Значение.** Столбец значение определяет, значение регистра по умолчанию. Компоненты словаря ------------------ .. table:: Диапазон индексов объектов словаря +----------------+------------------------------------------------+-------------+ | Индекс объекта | Описание объекта | Профиль CiA | +================+================================================+=============+ | 0000 | не используется | | +----------------+------------------------------------------------+-------------+ | 0001 - 0FFF | различные типы данных | | +----------------+------------------------------------------------+-------------+ | 1000 - 1FFF | область профиля коммуникации | CiA 301 | +----------------+------------------------------------------------+-------------+ | 2000 - 5FFF | область профиля, специфичная для производителя | CAN bp | +----------------+------------------------------------------------+-------------+ | 6000 - 9FFF | стандартизированная область профиля устройства | CiA 4xx | +----------------+------------------------------------------------+-------------+ | A000 - FFFF | зарезервировано для дальнейшего использования | | +----------------+------------------------------------------------+-------------+ .. note:: Диапазон 1000h - 1FFFh содержит элементы OD, относящиеся к коммуникации. Эти параметры называются элементами коммуникации, их спецификация общая для всех типов устройств, независимо от профиля, который использует устройство. .. note:: Объекты в диапазоне 1000h - 1FFFh, которые не определены в этой документации, зарезервированы для будущего использования. Спецификация типа данных ------------------------ Статические типы данных помещаются в OD только для цели определения. Однако индексы 0001h - 0007h могут быть отображены также, чтобы определить соответствующее пространств в RPDO как не используемое в этом устройстве (оно не имеет значения, do not care). Индексы 0009h - 000Bh, 000Fh не могут быть отображены в PDO. .. table:: Порядок типов данных следующий +------------+----------+-----------------------------------------------------------------------------+ | Индекс | Объект | Наименование | +============+==========+=============================================================================+ | 0001 | DEFTYPE | BOOLEAN | +------------+----------+-----------------------------------------------------------------------------+ | 0002 | DEFTYPE | INTEGER8 | +------------+----------+-----------------------------------------------------------------------------+ | 0003 | DEFTYPE | INTEGER16 | +------------+----------+-----------------------------------------------------------------------------+ | 0004 | DEFTYPE | INTEGER32 | +------------+----------+-----------------------------------------------------------------------------+ | 0005 | DEFTYPE | UNSIGNED8 | +------------+----------+-----------------------------------------------------------------------------+ | 0006 | DEFTYPE | UNSIGNED16 | +------------+----------+-----------------------------------------------------------------------------+ | 0007 | DEFTYPE | UNSIGNED32 | +------------+----------+-----------------------------------------------------------------------------+ | 0008 | DEFTYPE | REAL32 | +------------+----------+-----------------------------------------------------------------------------+ | 0009 | DEFTYPE | VISIBLE_STRING | +------------+----------+-----------------------------------------------------------------------------+ | 000A | DEFTYPE | OCTET_STRING | +------------+----------+-----------------------------------------------------------------------------+ | 000B | DEFTYPE | UNICODE_STRING | +------------+----------+-----------------------------------------------------------------------------+ | 000C | DEFTYPE | TIME_OF_DAY | +------------+----------+-----------------------------------------------------------------------------+ | 000D | DEFTYPE | TIME_DIFFERENCE | +------------+----------+-----------------------------------------------------------------------------+ | 000E | Зарезервировано | +------------+----------+-----------------------------------------------------------------------------+ | 000F | DEFTYPE | DOMAIN | +------------+----------+-----------------------------------------------------------------------------+ | 0010 | DEFTYPE | INTEGER24 | +------------+----------+-----------------------------------------------------------------------------+ | 0011 | DEFTYPE | INTEGER32 | +------------+----------+-----------------------------------------------------------------------------+ | 0012 | DEFTYPE | REAL64 | +------------+----------+-----------------------------------------------------------------------------+ | 0013 | DEFTYPE | INTEGER48 | +------------+----------+-----------------------------------------------------------------------------+ | 0014 | DEFTYPE | INTEGER56 | +------------+----------+-----------------------------------------------------------------------------+ | 0015 | DEFTYPE | INTEGER64 | +------------+----------+-----------------------------------------------------------------------------+ | 0016 | DEFTYPE | UNSIGNED24 | +------------+----------+-----------------------------------------------------------------------------+ | 0017 | Зарезервировано | +------------+----------+-----------------------------------------------------------------------------+ | 0018 | DEFTYPE | UNSIGNED40 | +------------+----------+-----------------------------------------------------------------------------+ | 0019 | DEFTYPE | UNSIGNED48 | +------------+----------+-----------------------------------------------------------------------------+ | 001A | DEFTYPE | UNSIGNED56 | +------------+----------+-----------------------------------------------------------------------------+ | 001B | DEFTYPE | UNSIGNED64 | +------------+----------+-----------------------------------------------------------------------------+ | 001C-001F | Зарезервировано | +------------+----------+-----------------------------------------------------------------------------+ | 0020 | DEFSTRUCT| UNSIGNED40 | +------------+----------+-----------------------------------------------------------------------------+ | 0021 | DEFSTRUCT| UNSIGNED48 | +------------+----------+-----------------------------------------------------------------------------+ | 0022 | DEFSTRUCT| UNSIGNED56 | +------------+----------+-----------------------------------------------------------------------------+ | 0023 | DEFSTRUCT| UNSIGNED64 | +------------+----------+-----------------------------------------------------------------------------+ | 0024-003F | Зарезервировано | +------------+----------+-----------------------------------------------------------------------------+ | 0040-005F | DEFSTRUCT| Сложные типы данных, специфичные для производителя. | +------------+----------+-----------------------------------------------------------------------------+ | 0060-007F | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (0). | +------------+----------+-----------------------------------------------------------------------------+ | 0080-009F | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (0). | +------------+----------+-----------------------------------------------------------------------------+ | 00A0-00BF | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (1). | +------------+----------+-----------------------------------------------------------------------------+ | 00C0-00DF | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (1). | +------------+----------+-----------------------------------------------------------------------------+ | 00E0-00FF | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (2). | +------------+----------+-----------------------------------------------------------------------------+ | 0100-011F | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (2). | +------------+----------+-----------------------------------------------------------------------------+ | 0120-013F | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (3). | +------------+----------+-----------------------------------------------------------------------------+ | 0140-015F | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (3). | +------------+----------+-----------------------------------------------------------------------------+ | 0160-017F | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (4). | +------------+----------+-----------------------------------------------------------------------------+ | 0180-019F | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (4). | +------------+----------+-----------------------------------------------------------------------------+ | 01A0-01BF | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (5). | +------------+----------+-----------------------------------------------------------------------------+ | 01C0-01DF | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (5). | +------------+----------+-----------------------------------------------------------------------------+ | 01E0-01FF | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (6). | +------------+----------+-----------------------------------------------------------------------------+ | 0200-021F | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (6). | +------------+----------+-----------------------------------------------------------------------------+ | 0220-023F | DEFTYPE | Стандартные типы данных, специфические для профиля устройства (7). | +------------+----------+-----------------------------------------------------------------------------+ | 0240-025F | DEFSTRUCT| Сложные типы данных, специфические для профиля устройства (7). | +------------+----------+-----------------------------------------------------------------------------+ .. note:: Каждому устройству не нужно поддерживать все определенные типы данных. Устройство должно поддерживать только типы данных, которые используются в объектах диапазона индексов 1000h - 9FFFh словаря OD. Заранее определенные типы данных размещаются после стандартных типов данных. В настоящее время определено 4 типа: запись параметров коммуникации PDO (PDO CommPar record, PDO_COMMUNICATION_PARAMETER), запись отображения PDO (PDO Mapping record, PDO_MAPPING), запись параметра SDO (SDO Parameter record, SDO_PARAMETER) и запись идентичности (Identity record, IDENTITY). Они размещаются по индексам 20h, 21h, 22h и 23h. Для устройств или профилей устройств, которые предоставляют Multiple Device Modules, например наподобие контроллеров нескольких осей, механизм DEFTYPE / DEFSTRUCT расширен для каждого виртуального устройства со смещением 40h для определения до 7 дополнительных виртуальных устройств. Устройство может опционально предоставить длину стандартных тиров данных, закодированную как UNSIGNED32 с доступом на чтение по индексу, который относится к типу данных. Например индекс 000Ch (Time of Day, время дня) содержит значение 30h=48, так как тип данных "Time of Day" закодирован последовательностью из 48 бит. Если длина переменная (например 000Fh = Domain), то элемент содержит 0h. Для поддерживаемых сложных типов данных устройство может опционально предоставить структуру такого типа данных с доступом на чтение по соответствующему индексу типа данных. Sub-индекс 0 тогда содержит количество элементов по этому индексу, не считая sub-индексов 0 и 255, и следующие sub-индексы, которые идут за нулевым sub-индексом, содержат тип данных в соответствии с таблицей 39 закодированный как UNSIGNED8. Элемент по индексу 20h, описывающий структуру коммуникационного параметра PDO (PDO Communication Parameter), тогда выглядит следующим образом (см. также объекты 1400h – 15FFh): .. table:: Пример сложного типа данных. +------------+----------+----------------------------------+ | Sub-индекс | Значение | Описание | +============+==========+==================================+ | 0h | 04h | 4 sub-индекса, которые идут ниже | +------------+----------+----------------------------------+ | 1h | 07h | UNSIGNED32 | +------------+----------+----------------------------------+ | 2h | 05h | UNSIGNED8 | +------------+----------+----------------------------------+ | 3h | 06h | UNSIGNED16 | +------------+----------+----------------------------------+ | 4h | 05h | UNSIGNED8 | +------------+----------+----------------------------------+ Стандартные (простые) и сложные типы данных, специфичные для производителя, можно попытаться отличить друг от друга чтением sub-индекса 1h: при сложном типе данных устройство вернет значение, и sub-индекс 0h содержит количество sub-индексов, которые идут за ним. При стандартном типе данных устройство оборвет передачу SDO, так как нет доступного sub-индекса 1h. Обратите внимание, что некоторые элементы типа данных UNSIGNED32 должны иметь характер структуры (например элемент PDO COBID. Организация структурированных записей ------------------------------------- Если элемент OD (индекс) содержит несколько sub-индексов, тогда sub-индекс 0 этого элемента описывает самое большое значение доступного sub-индекса для sub-индексов, которые идут далее, не рассматривая FFh. Этот элемент закодирован как UNSIGNED8. Sub-индекс FFh описывает структуру элемента предоставлением типа данных и типа объекта элемента. Он закодирован как UNSIGNED32, и организован следующим образом: .. table:: Структура sub-индекса FFh. +------------------+-----------------------------------+----------------------------+------------------------+ | Биты | 31-16 | 15-8 | 7-0 | +==================+===================================+============================+========================+ | Значение | Зарезервировано (значение: 0000h) | Тип данных (см. таблицу) | Объект (см. таблицу) | +------------------+-----------------------------------+----------------------------+------------------------+ | Закодировано как | - | UNSIGNED8 | UNSIGNED8 | +------------------+-----------------------------------+----------------------------+------------------------+ Поддержка sub-индекса FFh является необязательной. Если он поддерживается всюду в OD, и также предоставлена структура сложного типа данных, то это разрешает выгрузить всю структуру OD.