Прикладной уровень: CANopen
Прикладной уровень модели OSI обеспечивает интерфейс между сетью и программным приложением, которое может взаимодействовать с аналогичными приложениями в других устройствах сети. На прикладном уровне реализуется также механизм синхронизации между устройствами.
К сожалению, разработка CAN закончилась на первых двух уровнях модели OSI. Это привело к появлению множества несовместимых между собой протоколов прикладного уровня, среди которых самыми распространенными и поддерживаемыми организацией CiA являются CANopen [CANopen - CANopen] и DeviceNet
Канальный уровень CAN, рассмотренный выше, практически невозможно использовать в SCADA-пакетах, поскольку он оперирует битами, фреймами, полями. Для написания же прикладных программ нужно использовать понятия: переменная, массив, событие, клиент, сервер, имя устройства и т. п.
Рассмотрим наиболее распространенный стандарт прикладного уровня CANopen. Для упрощения применения стандарта вводятся несколько специфических для CANopen понятий. Все функциональные возможности прикладного уровня делятся между так называемыми сервисами (элементами услуг). Программные приложения взаимодействуют между собой путем вызова соответствующих сервисов прикладного уровня. Сервисы обмениваются данными с равными им (одноранговыми) сервисами через CAN-сеть с помощью определенного протокола. Этот протокол описывается в спецификации протокола сервиса.
Вводится понятие сервисного примитива, который представляет собой средство (языковую конструкцию), с помощью которого программное приложение взаимодействует с прикладным уровнем. В CANopen существует четыре различных примитива:
o запрос приложения к прикладному уровню, публикуемый приложением для вызова сервиса;
o индикация, публикуемая прикладным уровнем для приложения, чтобы сообщить о внутренних событиях, обнаруженных прикладным уровнем или чтобы показать, что сервис запрошен;
o ответ, публикуемый приложением для прикладного уровня, чтобы ответить на ранее полученную индикацию;
o подтверждение, публикуемое прикладным уровнем для приложения, чтобы отчитаться о результатах ранее изданного запроса.
Cервисы также делятся на несколько типов сервисов:
o локальный сервис - который выполняет запрос приложения без взаимодействия с другими сервисами того же ранга;
o неподтвержденный сервис - который вовлекает в выполнение запроса один или более других одноранговых сервисов. Приложение посылает запрос к локальному сервису. Этот запрос передается далее сервису (сервисам) того же ранга;
o подтвержденный сервис может вовлечь только один сервисный объект того же ранга. Приложение издает запрос к его локальному сервису. Этот запрос передается сервису того же ранга, который передает его другому приложению как индикацию. Другое приложение издает ответ, который передается исходному сервису, который передает его как подтверждение запрашивающему приложению;
o сервис, инициированный провайдером - вовлекает только локальный сервис.
CANopen предлагает серию стандартизованных коммуникационных механизмов и функций, выполняемых устройствами в сети (профилей). Серия профилей доступна и поддерживается организацией CiA (CAN in Automation); для ее использования не требуется лицензий.
Устройство в сети CANopen представляется состоящим из трех частей:
o коммуникационный интерфейс (к шине CAN) и программный протокол обмена;
o словарь объектов;
o интерфейс к устройствам ввода-вывода и прикладная программа.
Коммуникационный интерфейс и программный протокол обеспечивают сервис по передаче и получению через сеть коммуникационных объектов. Словарь объектов описывает типы данных, коммуникационные объекты и прикладные объекты, использованные в устройстве для обмена через интерфейс к устройствам ввода вывода. Прикладная программа обеспечивает внутреннее управление функциями устройства и интерфейсом к устройствам ввода-вывода.
Наиболее важной частью устройства в CANopen является словарь объектов. Под объектами понимаются типы данных, профили устройств, коммуникационные объекты, регистр ошибок. Каждый объект в словаре адресуется 16-битным индексом.
В CANopen используются следующие типы данных: Boolean, Integer, UnsignedN, Float, Date, Time, которые имеют общепринятый смысл. Имеется также несколько сложных типов данных для PDO и SDO параметров ( Process Data Object - объект данных технологического процесса и Service Data Object - объект сервисных данных).
Объекты PDO и SDO используются для передачи данных. Сообщения PDO позволяют передавать данные в реальном времени. Существует два типа объектов PDO. Первый из них выполняет передачу данных ( Transmit-PDO или TPDO), второй - прием данных (Receve- PDO или RPDO). Коммуникационные параметры PDO определяют его коммуникационные возможности и описываются в словаре объектов.
Объект SDO обеспечивает доступ к словарю объектов. SDO может использоваться также для передачи групп данных от клиента к серверу и наоборот.
Имеются также объекты специального назначения (объекты для синхронизации, объекты меток времени, объекты аварийных ситуаций), а также объекты управления сетью (объекты начальной загрузки, объекты контроля ошибок и сообщения для управления сетью).