Программируемые устройства ========================== .. contents:: :depth: 1 :local: Основано на профиле CiA Draft Standard 405 "Интерфейс и профиль для программируемых устройств IEC 61131-3" Введение -------- Этот документ представляет стандартизированный интерфейс CANopen и профиль для программируемых устройств IEC 61131-3, таких как ПЛК. Все вышеперечисленные устройства используют методы связи, которые соответствуют описанным в проекте стандарта CiA DS-301 (Прикладной уровень и профиль связи) и профиля программируемые устройства DSP-302. С этими документами следует ознакомиться параллельно с этим профилем. В общем, создание приложения реализует обработку до пяти интерфейсов, см. рисунок. .. figure:: /img/CiA405-Interfaces.jpeg Рисунок 1: Интерфейсы В этом документе рассматриваются следующие интерфейсы A. доступ к системе связи CANopen из программы IEC 61131-3 a. основанный на переменных, т.е. доступ к элементарным переменным объектам IEC 61131-3, b. на основе вызовов функционального блока B. служебные функции для отладки, мониторинга и управления сетью C. интерфейс между инструментами CANopen и средой программирования IEC 61131-3 Все остальные интерфейсы зависят от производителя (D) или используют сервисы CANopen (E). .. note:: На рисунке необязательно описано использование разных инструментов для программирования и настройки. Один инструмент может обрабатывать обе функции и скрывать интерфейсы. Рекомендации ------------ +-----------+-------------------------------------------------------------+ | Стандарт | Описание | +===========+=============================================================+ | IEC 61131 | IEC 61131 Первое издание 1993-03 | | | Программируемые контроллеры | | | - Часть 1: общая информация | | | - Часть 3: языки программирования | | | - Часть 5: службы обмена сообщениями | +-----------+-------------------------------------------------------------+ | DS-301 | Прикладной уровень и коммуникационный профиль | +-----------+-------------------------------------------------------------+ | DS-302 | Платформа для программируемых CANopen устройств | +-----------+-------------------------------------------------------------+ | DS-305 | Службы и протоколы уровня настройки | +-----------+-------------------------------------------------------------+ | DS-306 | Спецификация электронного технического паспорта для CANopen | +-----------+-------------------------------------------------------------+ Термины и определения --------------------- Типы данных ~~~~~~~~~~~ IEC 61131-3 определяет три вида типов данных: - Элементарные типы данных +-----------+-------------------------------------------------------------+ | Длина | Наименование | +===========+=============================================================+ | 1 Bit | BOOL | +-----------+-------------------------------------------------------------+ | 8 Bits | SINT, USINT, BYTE | +-----------+-------------------------------------------------------------+ | 16 Bits | INT, UINT, WORD | +-----------+-------------------------------------------------------------+ | 32 Bits | DINT, UDINT, REAL, DWORD | +-----------+-------------------------------------------------------------+ | 64 Bits | LINT, ULINT, LREAL, LWORD | +-----------+-------------------------------------------------------------+ | Зависит от| TIME, DATE, TIME_OF_DAY, DATE_AND_TIME, STRING | | реализации| | +-----------+-------------------------------------------------------------+ - Общие типы данных Универсальные типы данных иерархически группируют элементарные типы данных. Они идентифицируются префиксом "ANY" (например, ANY_NUM, ANY_INT,...). - Производные типы данных Типы данных (структуры), указанные пользователем или производителем. Типы, соответствующие типам данных CANopen (например, CIA405UINT24, ...). Переменные ~~~~~~~~~~ IEC-переменные могут быть представлены символически или напрямую (%IX..., %QW..). IEC 61131-3 знает два вида переменных: • Одноэлементная переменная - Переменная состоит из одного элемента. • Многоэлементные массивы - Переменных и структуры. Подразделения программной организации (POU) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ POUs - это фактические программные модули, из которых состоит программа IEC. Единицы организации программы, определенные IEC 61131-3, включают функцию, функциональный блок и программу. .. figure:: /img/CiA405-software-organisation.jpeg IEC 61131-3 организация программного обеспечения - Функция Функция имеет одно или несколько входных значений и ровно одно выходное значение. Она не содержит информации о внутреннем состоянии, т.е. вызов функции с одинаковыми аргументами (входными данными) всегда приводит к одному и тому же значению (выходным данным). Функция может быть выполнена из программы, функционального блока или другой функции. - Функциональный блок Функциональный блок имеет одно или более входных значений и одно или более выходных значений. Допускается несколько экземпляров (копий) функционального блока. Функциональный блок сохраняет информацию о своем внутреннем состоянии. Он может быть выполнен из программы или другого функционального блока. - Программа Этот тип POU представляет "основную программу". Экземпляры программ могут быть созданы только внутри ресурсов (с помощью задачи). Элементы конфигурации ~~~~~~~~~~~~~~~~~~~~~ Конфигурация соответствует системе программируемого контроллера, как определено в IEC 61131-3-1. Конфигурация содержит один или несколько ресурсов, каждый из которых содержит одну или несколько программ, выполняемых под управлением нуля или более задач. - Глобальная переменная Переменная, область действия которой является глобальной (область действия объявления, применяемого ко всем точкам в пределах источника или конфигурации). - Ресурс "Функция обработки сигналов" и ее "человеко-машинный интерфейс" и "функции интерфейса датчиков и исполнительных механизмов", как определено в IEC 61131-3-1. Обычно ресурс означает центральный процессор одного ПЛК. - Задача Задача определяется как элемент управления выполнением, который способен вызывать, либо на периодической основе, либо при появлении возрастающего значения определенной логической переменной, выполнение набора программных организационных единиц, которые могут включать в себя программы и функциональные блоки. - Путь доступа Объединение символьного имени с переменной с целью открытого обмена данными. Доступ к определению сетевых переменных ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ В сети программируемые узлы можно охарактеризовать как процесс, имеющий входные и выходные переменные. Набор переменных будет являться аргументами программы и, следовательно, будет известен только в конечном состоянии, когда программа будет написана. Аргументы должны обрабатываться как переменные, расположенные в словаре объектов. В этом профиле используются термины и определения /DSP-302/ "Фреймворк для программируемых устройств CANopen". Он определяет использование сетевых переменных способом, независимым от типа программируемого устройства. Здесь вводятся некоторые ограничения для программируемых устройств стандарта IEC 61131-3. Определения, относящиеся к конкретному профилю CANopen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CANopen предоставляет возможность идентифицировать профиль узла. Следовательно, коммуникационный профиль CANopen /DS-301/ определяет объект 1000h ("Тип устройства"). Объект 1000h представляет собой 32-разрядное слово, разделенное на два 16-разрядных слова. LSB содержит номер профиля, MSB содержит дополнительную информацию. Для устройства, следующего этим спецификациям, номер профиля устанавливается равным 405. Дополнительная информация (MSB) имеет значение 0 и зарезервирована для дальнейшего использования CiA. Профиль не определяет сопоставление по умолчанию. Типы данных ----------- IEC 61131-3 и CANopen определяют разные типы данных. В следующей таблице определено назначение типов, которые эквивалентны и которые можно использовать в качестве сетевых переменных. Для обработки этих типов данных в формате файла полезно присвоить номера типу данных. Таблица начинается с типов данных, определенных в CANopen, и использует ту же кодировку. Дополнительные типы данных стандарта IEC 61131-3 начинаются с A0H. +--------------+------------+---------------------+-----------------+ | IEC 61131-3 | CANopen | Ширина данных (bit) | Кодировка (Hex) | +==============+============+=====================+=================+ | BOOL | Boolean | 1 | 01 | +--------------+------------+---------------------+-----------------+ | SINT | Integer8 | 8 | 02 | +--------------+------------+---------------------+-----------------+ | INT | Integer16 | 16 | 03 | +--------------+------------+---------------------+-----------------+ | CIA405INT24 | Integer24 | 24 | 10 | +--------------+------------+---------------------+-----------------+ | DINT | Integer32 | 32 | 04 | +--------------+------------+---------------------+-----------------+ | CIA405INT40 | Integer40 | 40 | 12 | +--------------+------------+---------------------+-----------------+ | CIA405INT48 | Integer48 | 48 | 13 | +--------------+------------+---------------------+-----------------+ | CIA405INT56 | Integer56 | 56 | 14 | +--------------+------------+---------------------+-----------------+ | LINT | Integer64 | 64 | 15 | +--------------+------------+---------------------+-----------------+ | USINT | Unsigned8 | 8 | 05 | +--------------+------------+---------------------+-----------------+ | UINT | Unsigned16 | 16 | 06 | +--------------+------------+---------------------+-----------------+ | CIA405UINT24 | Unsigned24 | 24 | 16 | +--------------+------------+---------------------+-----------------+ | UDINT | Unsigned32 | 32 | 07 | +--------------+------------+---------------------+-----------------+ | CIA405UINT40 | Unsigned40 | 40 | 18 | +--------------+------------+---------------------+-----------------+ | CIA405UINT48 | Unsigned48 | 48 | 19 | +--------------+------------+---------------------+-----------------+ | CIA405UINT56 | Unsigned56 | 56 | 1A | +--------------+------------+---------------------+-----------------+ | ULINT | Unsigned64 | 64 | 1B | +--------------+------------+---------------------+-----------------+ | REAL | Float | 32 | 08 | +--------------+------------+---------------------+-----------------+ | BYTE | Unsigned8 | 8 | A4 | +--------------+------------+---------------------+-----------------+ | WORD | Unsigned16 | 16 | A5 | +--------------+------------+---------------------+-----------------+ | DWORD | Unsigned32 | 32 | A6 | +--------------+------------+---------------------+-----------------+ | LWORD | Unsigned64 | 64 | A7 | +--------------+------------+---------------------+-----------------+ Следующие типы данных эквивалентны, но не могут быть переданы через PDOs: +--------------+-----------------+-----------------+ | IEC 61131-3 | CANopen | Encoding (Hex) | +==============+=================+=================+ | TIME | Time_Difference | 0D | +--------------+-----------------+-----------------+ | DATE | Time_Of_Day | 0C | +--------------+-----------------+-----------------+ | TIME_OF_DAY | Time_Of_Day | 0C | +--------------+-----------------+-----------------+ | STRING | Visible String | 09 | +--------------+-----------------+-----------------+ Следующие типы данных IEC 61131-3 не имеют эквивалента в CANopen: LREAL, DATE_AND_TIME,. Следующие типы данных CANopen не имеют эквивалента в IEC 61131-3: Octet String, Domain. Функции преобразования типов данных ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Функции преобразования типов должны быть определены в соответствии с IEC 61131-3 (т.е. _TO_, например, CIA405uint24_TO_DINT) в обоих направлениях для следующих комбинаций: +--------------+-----------------+ | Type1 | Type2 | +==============+=================+ | CIA405INT24 | DINT | +--------------+-----------------+ | CIA405INT40 | LINT | +--------------+-----------------+ | CIA405INT48 | LINT | +--------------+-----------------+ | CIA405INT56 | LINT | +--------------+-----------------+ | CIA405UINT24 | UDINT | +--------------+-----------------+ | CIA405UINT40 | ULINT | +--------------+-----------------+ | CIA405UINT48 | ULINT | +--------------+-----------------+ | CIA405UINT56 | ULINT | +--------------+-----------------+ | CIA405UINT24 | ULINT | +--------------+-----------------+ | CIA405UINT40 | LWORD | +--------------+-----------------+ | CIA405UINT48 | LWORD | +--------------+-----------------+ | CIA405UINT56 | LWORD | +--------------+-----------------+ Представление типов данных ~~~~~~~~~~~~~~~~~~~~~~~~~~ CANopen определяет определенное представление для типов данных, в то время как IEC 61131-3 этого не делает. Если система IEC 61131-3 может использовать то же представление, что определено в CANopen, проблем не возникнет. Стратегия этого стандарта заключается в следующем: a) Данные сети (обычно PDOs), доступные для IEC 61131-3 в виде сетевых переменных посредством записей в диапазоне A000-AFFF, обычно отображаемые в образ процесса системы IEC 61131-3, должны быть представлены IEC 61131-3 в собственной системе IEC 61131-3 (зависящей от платформы, потенциально может открыть несоответствующее требованиям) представление данных. Тип данных CANopen для этих элементов данных известен ядру CANopen, все необходимые преобразования должны быть выполнены перед введением значения в образ процесса, соответственно, после извлечения его из образа процесса. b) Все остальные данные, тип данных которых потенциально неизвестен ядру CANopen и/или приложению IEC 61131-3 (например, данные SDO), должны быть представлены системе IEC 61131-3 в стандартном формате данных CANopen в виде потока необработанных байтов. Должны быть предоставлены функции преобразования для преобразования этого представления данных в собственный формат IEC 61131-3, но информация о типе данных должна быть доступна во время выполнения. .. note:: Примечания по применению приведены в главе 8.4.2. (TODO уточнить) Доступ к CANopen из IEC 61131-3 ------------------------------- Как упоминалось во введении, в этом документе рассматриваются два метода доступа к сети CANopen: 1. Доступ на основе переменных, доступ к отдельным переменным из программы IEC 61131-3 в соответствии с сетевыми переменными /DSP-302/. 2. Доступ на основе функциональных блоков, вызывающий функциональные блоки для записи и/или чтения данных. Это реализовано с помощью SDO access. 3. Дополнительные функции управления для обработки информации о чрезвычайных ситуациях, LSS и состоянии сети. Модель платформы CAN bp как FB IEC 61499 ---------------------------------------- .. figure:: /img/CANbp-FB.svg :width: 400px Рисунок 2: CAN bp в модели функционального блока IEC 61499. Доступ на основе переменных --------------------------- Все объекты, расположенные в диапазоне A000h - AFFFh объектного словаря узла, должны быть видны как переменные приложению на этом узле, запрограммированному в соответствии с IEC 61131-3. Какой тип переменных используется, например • непосредственно представленные переменные • внешние переменные • параметры (программ или функциональных блоков) должны быть оставлены для реализации в соответствии с IEC 61131-3. Определение направления передачи данных --------------------------------------- Термины "ввод" и "вывод" определены в документе Framework for Programmable Devices /DSP- 302/. Вход имеет направление данных CANopen ro, выход имеет направление данных CANopen wo (rww соответственно), как и для любого другого типа устройств. .. figure:: /img/CiA405-Direction.jpeg Рисунок 3: Направление сетевых переменных Объект A4C0H определен как выходы, поскольку другое устройство может записывать в него значения, что (с точки зрения CANopen) аналогично записи значения на цифровой выход. Если устройство имеет физический выход или программное обеспечение, которое обрабатывает эти значения - в принципе, разницы нет. Таким образом, можно использовать терминологию “запись значений в приложение ПЛК”. С точки зрения программистов ПЛК, приложение будет считывать значение – это то же самое, как если бы оно считывало цифровые входные линии напрямую, без подключения шины между ними. Записи объектного словаря для переменных стандарта IEC 61131-3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Фреймворк для программируемых устройств /DSP-302/ определяет использование так называемых сегментов. Конкретное размещение сегментов остается открытым. Чтобы упростить реализацию и значительно упростить использование программного обеспечения разных производителей, использование сегментов указано для программируемых устройств стандарта IEC 61131-3: Сегменты расположены в диапазоне индексов A000h -AFFFh. Это позволяет любому устройству другого профиля (например, устройству ввода-вывода или приводному блоку) использовать стандартные записи словаря объектов этого профиля и дополнительно использовать сетевые переменные. .. table:: Чтение значений из приложения ПЛК: +-------------+-------------+-------------+ | Start-Index | Data Type | Direction | +=============+=============+=============+ | A000H | Integer8 | ro | +-------------+-------------+-------------+ | A040H | Unsigned8 | ro | +-------------+-------------+-------------+ | A080H | Boolean | ro | +-------------+-------------+-------------+ | A0C0H | Integer16 | ro | +-------------+-------------+-------------+ | A100H | Unsigned16 | ro | +-------------+-------------+-------------+ | A140H | Integer24 | ro | +-------------+-------------+-------------+ | A180H | Unsigned24 | ro | +-------------+-------------+-------------+ | A1C0H | Integer32 | ro | +-------------+-------------+-------------+ | A200H | Unsigned32 | ro | +-------------+-------------+-------------+ | A240H | Float (32) | ro | +-------------+-------------+-------------+ | A280H | Unsigned40 | ro | +-------------+-------------+-------------+ | A2C0H | Integer40 | ro | +-------------+-------------+-------------+ | A300H | Unsigned48 | ro | +-------------+-------------+-------------+ | A340H | Integer48 | ro | +-------------+-------------+-------------+ | A380H | Unsigned56 | ro | +-------------+-------------+-------------+ | A3C0H | Integer56 | ro | +-------------+-------------+-------------+ | A400H | Integer64 | ro | +-------------+-------------+-------------+ | A440H | Unsigned64 | ro | +-------------+-------------+-------------+ .. table:: Запись значений в приложение ПЛК: +-------------+-------------+-------------+ | Start-Index | Data Type | Direction | +=============+=============+=============+ | A480H | Integer8 | rww | +-------------+-------------+-------------+ | A4C0H | Unsigned8 | rww | +-------------+-------------+-------------+ | A500H | Boolean | rww | +-------------+-------------+-------------+ | A540H | Integer16 | rww | +-------------+-------------+-------------+ | A580H | Unsigned16 | rww | +-------------+-------------+-------------+ | A5C0H | Integer24 | rww | +-------------+-------------+-------------+ | A600H | Unsigned24 | rww | +-------------+-------------+-------------+ | A640H | Integer32 | rww | +-------------+-------------+-------------+ | A680H | Unsigned32 | rww | +-------------+-------------+-------------+ | A6C0H | Float (32) | rww | +-------------+-------------+-------------+ | A700H | Unsigned40 | rww | +-------------+-------------+-------------+ | A740H | Integer40 | rww | +-------------+-------------+-------------+ | A780H | Unsigned48 | rww | +-------------+-------------+-------------+ | A7C0H | Integer48 | rww | +-------------+-------------+-------------+ | A800H | Unsigned56 | rww | +-------------+-------------+-------------+ | A840H | Integer56 | rww | +-------------+-------------+-------------+ | A880H | Integer64 | rww | +-------------+-------------+-------------+ | A8C0H | Unsigned64 | rww | +-------------+-------------+-------------+ Это распределение, описанное в соответствии с правилами описания /DSP-302/, приведено в приложении. Записи MaxCnt, отсутствующие в приведенном выше списке, зависят от доступной памяти устройства. Для дальнейшего упрощения в файлах EDS для устройств, следующих за DS405, разрешается опускать это описание. Это отмечается путем дополнительной установки второго бита всех поддерживаемых динамических каналов раздела DeviceInfo: [DeviceInfo] .... DynamicChannelsSupported=3 Имена переменных ~~~~~~~~~~~~~~~~ Записи объектного словаря, имена которых не являются допустимыми именами переменных в соответствии с IEC 61131-3, не должны использоваться в системе IEC 61131-3. В этом документе автоматическое переименование не определено. Доступ на основе функционального блока -------------------------------------- .. hint:: В разработке (TODO дополнить) Интеграция инструментов ----------------------- В этой главе определяется обмен информацией между программными пакетами, касающейся сетевых переменных. Типичными программными пакетами в этом контексте являются система программирования IEC 61131-3 и система настройки сети/ планирования сетевого проекта. Обе системы могут быть интегрированы в одно программное обеспечение. В этом случае обмен информацией может осуществляться внутри компании. В другом случае существуют два отдельных программных пакета, задача которых заключается в обмене некоторой необходимой информацией стандартизированным способом: .. figure:: /img/CiA405-Correlation.jpeg Корреляция между программированием и конфигурацией сети Основная концепция ~~~~~~~~~~~~~~~~~~ Описанный механизм основан на предположении, что в данный момент времени активен только один инструмент. Это означает, что только один инструмент имеет право записывать информацию в файлы. Например, в многозадачной операционной системе все инструменты могут запускаться одновременно, но только одному инструменту разрешено изменять данные проекта путем одновременной записи в файлы проекта. Далее предполагается, что вся необходимая информация о конфигурации сети CANopen хранится в файлах DCF (файловая операционная система). Эти файлы и форматы уже определены в спецификации /DS-301/. Все используемые инструменты должны иметь доступ на чтение и запись к этим файлам EDS и DCF. Необходимо, чтобы каждый инструмент работал с одними и теми же файлами в одном месте. Способ обработки доступа зависит от используемой операционной системы. Для указания всех узлов, появляющихся в сети, должен быть создан специальный файл под названием "Nodelist". Формат этого файла совпадает с форматом файла EDS/DCF (ini-файл Windows). Для управления доступом на чтение/запись к файлам DCF должен быть создан еще один файл под названием "Обработчик доступа". Всякий раз, когда инструмент хочет изменить файлы "Nodelist", "Обработчик доступа" и DCF, он должен сначала проверить их существование. .. note:: Указания по применению приведены в главе 8.4.4. (TODO уточнить) Список узлов ~~~~~~~~~~~~ Этот файл содержит все узлы в сети. Способ доступа инструментов к этому файлу зависит от используемой операционной системы. Для файловой системы это означает отображение инструментам пути и имени файла. Это местоположение должно совпадать с тем, где хранятся все файлы DCF. Используя минимальную информацию из "Списка узлов", инструмент может запросить у пользователя DCF каждого узла, EDS и как установить доступ для чтения или записи. Дальнейшие записи предназначены для поддержки более чем одной сети. Чтобы разрешить инструментам автоматический доступ к "Списку узлов", указывается следующее имя файла: "nodelist.cpj" .. table:: Указываются следующие записи: +--------------------------+-------------------------------------------------------------+ | [Разделы] и записи | Описание | +==========================+=============================================================+ | [Topology] | Необязательно, если этот раздел отсутствует, инструменты | | | могут предположить, что существует по крайней мере одна | | | сеть с номером 1. | +--------------------------+-------------------------------------------------------------+ | NetName = | Необязательное имя для сети. Это полезно для инструмента, | | | который помогает пользователю идентифицировать сеть. | +--------------------------+-------------------------------------------------------------+ | Nodes = 0x02 | Обязательно, количество узлов в сети. Диапазон чисел | | | от 1 до 127. Число должно быть прочитано как | | | шестнадцатеричное число с начальным значением 0x. | +--------------------------+-------------------------------------------------------------+ | NodeXPresent = 0x01 | Обязательный для каждого существующего узла. X указывает | | | номер узла CANopen в сети. X кодируется десятичным числом | | | без начальных нулей (например, присутствует узел 1, | | | присутствует узел 10, присутствует узел 127). Значение 0x01 | | | означает, что узел X присутствует. Значение 0x00 или | | | отсутствующая запись означает, что узел отсутствует. | | | Все остальные значения зарезервированы. | +--------------------------+-------------------------------------------------------------+ | NodeXName = Node1 | Необязательное имя узла. Это для инструментов, помогающих | | | пользователю идентифицировать узел. X кодируется десятичным | | | числом без начальных нулей (например, имя узла 1, имя узла | | | 10, имя узла 127). | +--------------------------+-------------------------------------------------------------+ | NodeXDCFName = Node1.dcf | Необязательное имя файла DCF для этого узла. Имя файла | | | должно быть записано без указания пути. Эта запись полезна | | | для инструментов, основанных на файловой системе. X | | | кодируется десятичным числом без начальных нулей (например, | | | Node1DCFName, Node10DCFName, Node127DCFName). | +--------------------------+-------------------------------------------------------------+ | EDSBaseName = path | Необязательный путь к файлам EDS. Эта запись полезна для | | | инструментов, основанных на файловой системе. | +--------------------------+-------------------------------------------------------------+ Могут существовать другие разделы и записи. Производители инструментов несут ответственность за избежание коллизий в именовании разделов и записей. Синтаксическое определение раздела, записи и значений записей приведено в /DSP-306/. Обработчик доступа ~~~~~~~~~~~~~~~~~~ Файл "Обработчик доступа" обрабатывает доступ на чтение и запись к файлам DCF. "Обработчик доступа" представляет собой простой файл без разделов и записей. Единственной информацией является название средства блокировки. Если инструмент хочет получить доступ на запись, он может открыть файл исключительно. После записи в файлы DCF инструмент должен освободить файл. Если инструмент был заблокирован другим, он может сообщить пользователю подробную информацию о блокирующем инструменте. .. table:: Имя файла этого "обработчика доступа" - "lock". +--------------------------+-------------------------------------------------------------+ | Содержание | Описание | +==========================+=============================================================+ | "Название инструмента" | Необязательно, укажите имя инструмента, имеющего доступ для | | | чтения/записи. | +--------------------------+-------------------------------------------------------------+ Полезные функции ---------------- Удаленные функции между ресурсами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Down-/Upload ++++++++++++ .. hint:: Механизм загрузки программы определен в /DSP-302/. (TODO дополнить) Записи объектного словаря ~~~~~~~~~~~~~~~~~~~~~~~~~~ Современные системы программирования предоставляют пользователям средства управления проектами, настройки устройств, тестирования и отладки. Для тестирования и отладки определены следующие элементы, которые могут быть оценены с помощью инструментов (например, конфигурация, SCADA-системы). Следующий подход представляет собой комбинацию проекта CANopen и иерархии конфигурации IEC 61131. Проект CANopen состоит, по крайней мере, из одного или нескольких ПЛК в одной сети. .. figure:: /img/CiA405-Project-structure.jpeg Объекты, определенные в этой главе, которые имеют тип данных visible string, используют строки фиксированной длины в 32 символа. Символьное представление используется из главы 2.1 стандарта IEC 61131-3. Для номеров версий используется тип данных unsigned32. Старшее слово содержит основную цифру, а младшее слово - младшую цифру, оба имеют кодировку BCD. Следующие записи объекта должны поддерживать доступ для чтения, доступ для записи необязателен. Чтобы избежать конфликтов согласованности с CANopen tools во время настройки сети (загрузки), следующие объекты должны поддерживать запись "ObjFlags" в EDS/DCF с установленным битом "Отказать в записи при загрузке" (бит 0). Представьте, что инструмент CANopen записывает конфигурацию по шине CAN на узел. Для этого инструмента невозможно запретить явную запись в следующих записях. Но эти объекты обычно обрабатываются программным средством IEC 61131. Таким образом, не гарантируется, что информация в DCF соответствует этой конфигурации. Обратите внимание на решение с записью "ObjFlags", указанной в /DSP-306/. .. hint:: Перенести описание "ObjFlags", указанной в /DSP-306/ (TODO дополнить) Название проекта ++++++++++++++++ Типичные сетевые проекты состоят, по крайней мере, из одной конфигурации. Распределение между конфигурациями и проектами может осуществляться по названию проекта. .. table:: Описание объекта +---------------+-------------------------------------------------------------+ +===============+=============================================================+ | Index | 9800H | +---------------+-------------------------------------------------------------+ | Имя | Project_Name | +---------------+-------------------------------------------------------------+ | Объектный код | VAR | +---------------+-------------------------------------------------------------+ | Тип данных | Visible String | +---------------+-------------------------------------------------------------+ .. table:: Описание значения +-----------------------+-----------------------------------------------------+ +=======================+=====================================================+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | Отображение PDO | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Visible String | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ Конфигурация ++++++++++++ Конфигурация включает список всех ресурсов, используемых в системе ПЛК. Конфигурация будет идентифицирована по ее названию и версии. .. table:: Структура определения конфигурации +---------+----------+--------------------------------------+-----------------+ | Index | Subindex | Описание | Тип данных | +=========+==========+======================================+=================+ | 0080H | | Определение конфигурации | | +---------+----------+--------------------------------------+-----------------+ | | 0H | Количество поддерживаемых записей | Unsigned8 | +---------+----------+--------------------------------------+-----------------+ | | 1H | Имя конфигурации | Visible String | +---------+----------+--------------------------------------+-----------------+ | | 2H | Версия конфигурации | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ | | 3H | Номер ресурса | Unsigned8 | +---------+----------+--------------------------------------+-----------------+ .. table:: Подробное описание объекта +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Index | 9501H | +-----------------------+-----------------------------------------------------+ | Имя | Конфигурация | +-----------------------+-----------------------------------------------------+ | Объектный код | RECORD | +-----------------------+-----------------------------------------------------+ | Количество элементов | 3 | +-----------------------+-----------------------------------------------------+ | Тип данных | Configuration_Def | +-----------------------+-----------------------------------------------------+ .. table:: Описание значения +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 0H. | +-----------------------+-----------------------------------------------------+ | Описание | Количество записей | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | RO | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | 1H - 3H | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | 3H | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 1H. | +-----------------------+-----------------------------------------------------+ | Описание | Имя конфигурации | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Visible String | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 2H. | +-----------------------+-----------------------------------------------------+ | Описание | Версия конфигурации | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 3H. | +-----------------------+-----------------------------------------------------+ | Описание | Номер ресурса | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned8 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ Ресурсы +++++++ Объявление ресурсов предоставляет механизм для выделения задач и программ ресурсу (например, процессору PLC). Ресурс будет идентифицирован по его имени и версии. Дескриптор задачи - это ссылка на первую задачу на ресурсе. .. table:: Структура определения конфигурации +---------+----------+--------------------------------------+-----------------+ | Index | Subindex | Описание | Тип данных | +=========+==========+======================================+=================+ | 0081H | | Определение ресурса | | +---------+----------+--------------------------------------+-----------------+ | | 0H | Количество поддерживаемых записей | Unsigned8 | +---------+----------+--------------------------------------+-----------------+ | | 1H | Имя ресурса | Visible String | +---------+----------+--------------------------------------+-----------------+ | | 2H | Версия ресурса | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ | | 3H | Номер задачи | Unsigned8 | +---------+----------+--------------------------------------+-----------------+ | | 4H | Дескриптор задачи | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ .. table:: Подробное описание объекта +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Index | 9600H - 96FFH | +-----------------------+-----------------------------------------------------+ | Имя | Ресурс | +-----------------------+-----------------------------------------------------+ | Объектный код | RECORD | +-----------------------+-----------------------------------------------------+ | Количество элементов | 4 | +-----------------------+-----------------------------------------------------+ | Тип данных | Resource_Def | +-----------------------+-----------------------------------------------------+ .. table:: Описание значения +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 0H. | +-----------------------+-----------------------------------------------------+ | Описание | Количество записей | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | RO | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned8 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | 4 | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 1H. | +-----------------------+-----------------------------------------------------+ | Описание | Имя ресурса | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Visible String | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 2H. | +-----------------------+-----------------------------------------------------+ | Описание | Версия ресурса | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 3H. | +-----------------------+-----------------------------------------------------+ | Описание | Номер задачи | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned8 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 4H. | +-----------------------+-----------------------------------------------------+ | Описание | Дескриптор задачи | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ Задача ++++++ Задача будет идентифицирована по ее имени или идентификатору. Поддерживаются типы задач cyclic, event и timertask. Представление значений: cyclic = 0x0, event = 0x1, timertask = 0x2 .. table:: Структура определения конфигурации +---------+----------+--------------------------------------+-----------------+ | Index | Subindex | Описание | Тип данных | +=========+==========+======================================+=================+ | 0082H | | Определение ресурса | | +---------+----------+--------------------------------------+-----------------+ | | 0H | Количество поддерживаемых записей | Unsigned8 | +---------+----------+--------------------------------------+-----------------+ | | 1H | Имя задачи | Visible String | +---------+----------+--------------------------------------+-----------------+ | | 2H | Идентификатор задачи | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ | | 3H | Тип задачи | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ | | 4H | Приоритет задачи | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ | | 5H | Временной интервал | Unsigned32 | +---------+----------+--------------------------------------+-----------------+ .. table:: Подробное описание объекта +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Index | 9700H - 97FFH | +-----------------------+-----------------------------------------------------+ | Имя | Задача | +-----------------------+-----------------------------------------------------+ | Объектный код | RECORD | +-----------------------+-----------------------------------------------------+ | Количество элементов | 5 | +-----------------------+-----------------------------------------------------+ | Тип данных | Task_Def | +-----------------------+-----------------------------------------------------+ .. table:: Описание значения +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 0H. | +-----------------------+-----------------------------------------------------+ | Описание | Количество записей | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | RO | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned8 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 1H. | +-----------------------+-----------------------------------------------------+ | Описание | Имя задачи | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Visible String | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 2H. | +-----------------------+-----------------------------------------------------+ | Описание | Идентификатор задачи | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 3H. | +-----------------------+-----------------------------------------------------+ | Описание | Тип задачи | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 4H. | +-----------------------+-----------------------------------------------------+ | Описание | Приоритет задачи | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ .. table:: +-----------------------+-----------------------------------------------------+ | Поле | Значение | +=======================+=====================================================+ | Sub-Index | 5H. | +-----------------------+-----------------------------------------------------+ | Описание | Временной интервал | +-----------------------+-----------------------------------------------------+ | Класс объекта | Опция | +-----------------------+-----------------------------------------------------+ | Доступ | R (опционально W) | +-----------------------+-----------------------------------------------------+ | PDO Отображение | Нет | +-----------------------+-----------------------------------------------------+ | Диапазон значений | Unsigned32 | +-----------------------+-----------------------------------------------------+ | Обязательный диапазон | Нет | +-----------------------+-----------------------------------------------------+ | Значение по умолчанию | Нет | +-----------------------+-----------------------------------------------------+ Запуск/остановка (программы/задачи) +++++++++++++++++++++++++++++++++++ .. hint:: Перенести описание, смотрите в /DSP-302/ (TODO дополнить) Отладка/мониторинг ++++++++++++++++++ .. hint:: Перенести описание, смотрите в /DSP-302/ (TODO дополнить) Обзор объектного словаря IEC 61131-3 ------------------------------------ .. table:: В следующей таблице показаны все объекты, на которые влияет эта спецификация. +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | Индекс | Sub | Объект. | Имя | Тип | Атрибут | M/O | +========+=====+===========+===============================================+===================+=========+=====+ | 0080H | DEFSTRUCT | Имя конфигурации | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 0081H | DEFSTRUCT | Определение ресурса | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 0082H | DEFSTRUCT | Определение задачи | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 1000H | VAR | Тип устройства | Unsigned32 | RO | M | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 9501H | RECORD | Конфигурация | Configuration_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 9600H | RECORD | 1 :sup:`st` Ресурс | Resource_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 9601H | RECORD | 2 :sup:`nd` Ресурс | Resource_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 96FFH | RECORD | 255 :sup:`th` Ресурс | Resource_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 9700H | RECORD | 1 :sup:`st` Задача | Task_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 9701H | RECORD | 2 :sup:`nd` Задача | Task_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 97FFH | RECORD | 255 :sup:`th` Задача | Task_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 9800H | VAR | Имя проекта | Visible String | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | 97FFH | RECORD | 255 :sup:`th` Задача | Task_Def | RW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A000H | ARRAY | 1 :sup:`st` Динамическое Integer 8 | Integer8 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A03FH | ARRAY | 64 :sup:`th` Динамическое Integer 8 | Integer8 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A040H | ARRAY | 1 :sup:`st` Динамическое Unsigned8 | Unsigned8 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A07FH | ARRAY | 64 :sup:`th` Динамическое Unsigned8 | Unsigned8 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A080H | ARRAY | 1 :sup:`st` Динамическое Boolean | Boolean | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A0BFH | ARRAY | 64 :sup:`th` Динамическое Boolean | Boolean | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A0C0H | ARRAY | 1 :sup:`st` Динамическое Integer16 | Integer16 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A0FFH | ARRAY | 64 :sup:`th` Динамическое Integer16 | Integer16 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A100H | ARRAY | 1 :sup:`st` Динамическое Unsigned16 | Unsigned16 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A13FH | ARRAY | 64 :sup:`th` Динамическое Unsigned16 | Unsigned16 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A440H | ARRAY | 1 :sup:`st` Динамическое Unsigned64 | Unsigned64 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A47FH | ARRAY | 64 :sup:`th` Динамическое Unsigned64 | Unsigned64 | RO | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A480H | ARRAY | 1 :sup:`st` Динамическое Integer8 | Integer8 | RWW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A4BFH | ARRAY | 64 :sup:`th` Динамическое Integer8 | Integer8 | RWW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A8C0H | ARRAY | 1 :sup:`st` Динамическое Unsigned64 | Unsigned64 | RWW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | -- | | | | | | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ | A8FFH | ARRAY | 64 :sup:`th` Динамическое Unsigned64 | Unsigned64 | RWW | O | +--------+-----+-----------+-----------------------------------------------+-------------------+---------+-----+ Пример файла DCF ---------------- Это не полный список DCF. Перечислены только несколько конкретных позиций для DS405. .. code:: [DeviceInfo] ... DynamicChannelsSupported=3 ... [DynamicChannels] ; optional since DynamicChannelsSupported=3 NrOfSeg=36 ; see application notes Type1=1 Dir1=ro Range1=0xA080-0xA0BF PPOffset1=0,1 ... Type36=8 Dir36=rww Range36=0xA6C0-0xA6FF PPOffset36=0 ... [OptionalObjects] 1=0xA000 ... [A000] ; Integer8 RO SubNumber=3 ParameterName=Integer8_RO_Variables ObjectType=8 [A000Sub0] ParameterName=NrOfSupportedObjects ObjectType=0x7 DataType=0x0005 AccessType=ro DefaultValue=2 PDOMapping=0 [A000Sub1] ParameterName= ObjectType=0x7 DataType=0x0002 AccessType=ro DefaultValue= PDOMapping=1 [A000Sub2] ParameterName= ObjectType=0x7 DataType=0x0002 AccessType=ro DefaultValue= PDOMapping=1 ... Примечания по применению ------------------------ Сетевые переменные ~~~~~~~~~~~~~~~~~~ Использование динамического присвоения индексов сетевым переменным подразумевает, что область объектного словаря содержит массивы с пробелами. Например, массив может содержать два подобъекта 1 и 5. Проблемы с представлением типов данных ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ В главе 4.2 указано, что представление внутреннего типа данных частично не соответствует требованиям CANopen. Если это произойдет, одни и те же значения данных могут быть представлены по-разному. Пример: ПЛК может иметь порядок байтов, противоположный CANopen. При передаче сетевой переменной типа данных Unsigned16 со значением 1 через PDO в соответствии с пунктом 4.2 изображение процесса будет содержать следующее значение: .. figure:: /img/CiA405-PDO.jpeg Представление данных с помощью PDO на несоответствующих ПЛК CANopen