/reference/

Application notes

ANC10 - 2-aug-2005
Особенности использования интерфейса CANbus в ИЯФе

 
 

Ограничения и рекомендации.

В этом документе рассматриваются следующие вопросы:

Физическая реализация.

В институте ядерной физики в качестве физической среды CANbus используется витая пара с экраном с волновым сопротивлением 120 Ом в соответствии со стандартом ISO 11898. Для подключения линии связи к устройству используются разъемы типа  DB-9 (DB-9M для устройства и DB-9F для кабеля). Блок должен подключаться к линии связи с помощью трансивера, специфицированного для скоростного CANbus (типа PCA82C251 или более современного). Трансивер должен быть гальванически развязан с основной платой с помощью быстрых оптронов.

Блок должен поддерживать адресацию и четыре стандартных скорости обмена. Для того чтобы пользователь мог самостоятельно изменить адрес блока или скорость обмена, на плате должен быть установлен набор джамперов (6 для задания адреса и 2 для задания скорости). На большой установке может существовать несколько сетей CANbus, в том числе и с различной скоростью, поэтому не рекомендуется использовать "экономное" программирование адреса и скорости специальными программами, ведь каждый разработчик сделает это "наилучшим образом", но не совпадающим со способом другого разработчика. Рекомендуемое распределение джамперов приводится в таблице ниже.
 

Имя Значение
N5 Бит адреса (старший)
N4 Бит адреса 
N3 Бит адреса 
N2 Бит адреса 
N1 Бит адреса 
N0 Бит адреса (младший)
BR1 Бит скорости
BR0 Бит скорости

Номер устройства образуется из битовых позиций N0-N5, образуя номера от 0 до 63. Скорость кодируется двумя битами в соответствии со следующей таблицей.
 

Код
Скорость
0
1 Мбод
1
500 Кбод
2
250 Кбод
3
125 Кбод

Для единообразия рекомендуется следующее: установленный джампер интерпретируется как логический 0, отсутствие джампера интерпретируется как логическая 1.

В большинстве технической документации приводится следующая таблица, связывающая скорость обмена и допустимую длину трассы.
 

Скорость Длина трассы
1 Мбод
30 м
500 Кбод
100 м
250 Кбод
250 м
125 Кбод
500 м

Практически нигде не упоминается, что эти скорости являются расчетными значениями для случая отсутствия гальванической развязки между трансивером и контроллером. Поскольку в условиях института применяются только варианты с гальванической изоляцией, то все цифры выглядят гораздо менее оптимистическими. Точные значения зависят от типов оптронов, примененных разработчиком. Для случая скорости 1 Мбод реальная длина трассы вряд ли может быть более 10 метров. Для остальных скоростей величина длины трассы тоже должна быть уменьшена, хотя и не так сильно. Поэтому, скорость 1 Мбод использовать без острой необходимости не рекомендуется.

Для использования в качестве трассы лучше всего использовать фирменный кабель, предназначенный для этой цели, однако по нашей бедности и лени допустимо использовать кабель типа КММ. Тонкий кабель можно использовать только на коротких трассах, на длинных трассах следует использовать только толстый КММ. Трасса должна быть согласована с обоих концом резисторами 120 Ом. Оплетка кабеля должна быть заземлена в одном месте, лучше всего около управляющего компьютера.
 
 

Протокол CAN-BINP

Для взаимодействия с блоками в институте используется вариант CANbus с коротким (11 бит) идентификатором. Ниже излагаются те факторы, которые следует считать обязательными для реализации.

Протокол высокого уровня базируется на распределении бит идентификатора и первого информационного байта. Идентификатор определяет тип посылки и адрес абонента, а первый информационный байт определяет собственно команду.

Распределение битов идентификатора
 

Биты идентификатора ID10…ID08 ID07...ID02 ID01…ID00
Поле Поле 1 Поле 2 Поле 3
Назначение Приоритет Адрес Модификатор
Комментарии к адресации: Поле 1 - поле приоритета.

Код 5 - безадресная (широковещательная) посылка (поля 2 и 3 должны быть нулевыми).

Код 6 - нормальная (адресная посылка).

Код 7 - ответная посылка (ответ на адресную).

Код 0 не допускается, остальные комбинации не используются (зарезервированы под возможные расширения).

Поле 2 - поле физического адреса устройства назначения (его значение устанавливается перемычками на плате).

Поле 3 - может быть использовано для адресации внутри устройства или как расширение физического адреса. Блок может выдавать пакеты с различными значениями в этом поле. Пользователь должен посылать устройству нулевую комбинацию.

Устройство получая адресный пакет интерпретирует информацию по ее содержанию. В том случае, если пакет требует ответного пакета информации, она отправляется с идентификатором адресного типа 7. Безадресныепакеты предназначены для бродкастных или мультикастных команд, должны одновременно приниматься и исполняться всеми устройствами, которым это положено.

Во всех блоках должны быть реализованы две команды. Одна команда адресная (код команды FF) и одна команда безадресная (код команды тоже FF). По сути это одна и та же команда, хотя и называется в первом случае "Запрос атрибутов", а во втором случае- "Кто есть на линии". Во обоих случаях, а также в некоторых случаях по собственной инициативе блок высылает одну и ту же ответную посылку:
 

FF Device Code HW version SW version Reason

Device Code- тип устройства.

HW version- аппаратная версия устройства.

SW version- версия программного обеспечения.

Reason- причина высылки пакета:

    0 - После сброса по питанию.
    1 - После сброса по кнопке.
    2 - В ответ на запрос атрибутов (пакетом FF).
    3 - В ответ на широковещательный запрос (Есть ли кто живой?).
    4 - Произошел рестарт по Watchdog таймеру.
    5 - Busoff recovery – восстановление после потери связи.

      На сегодняшний день существуют следующие типы устройства.

    Код  Название
    Резерв
    CANDAC16
    CANADC40
    CDAC20
    CAC208
    SLIO24
    CGVI8
    CPKS8
    CKVCH
    CANIPP
    10 CURVV
    11 CAN-DDS
    12 CAN-ADS3212
    13 CAC168
    14 CAN-MB3M
    15 WELD01 - сварка от Репкова
    16 Не определено
    17 CANIVA

    Прочие команды не определены, однако если разработчик заботится о конечном пользователе, то он попытается по возможности использовать команды одного из распространенных блоков. В частности, практически во всех режимах блоками CANADC40, CDAC20, CAC208, CAC168 может управлять одна и та же программа.
     
     


    Типичная реализация высокоуровневого протокола

    (на основе блока CAC208)

    Блок CAC208 имеет в своем составе 20-канальный АЦП с программируемым коэффициентом усиления, 8-канальный ЦАП и 8-разрядные регистры ввода/вывода.

    Интерпретация поля данных:

    При приеме данных устройство интерпретирует их следующим образом: первый байт (байт 0) является дескриптором пакета, остальные байты являются дополнительной информацией.

    Ниже приводится список дескрипторовпакета (в 16-ричном виде).

    00 - остановка выдачи измерений в линию или самих измерений

    01 - конфигурирование/старт многоканальных измерений

    02 - запрос осциллографического режима

    03 - запрос ранее измеренного значения для многоканальных измерений

    04 - запрос данных из одноканального кольцевого буфера

    80 – 87 – запись в канал ЦАПа номер 0-7

    90 – 97 – запрос кода из канала ЦАПа номер 0-7

    F2 – адресная запись в файл
    F3 - создание таблицы (файла)
    F4 - запись в таблицу (файл)
    F5 - закрытие таблицы (файла)
    F6 - запрос данных из таблицы (файла)
    F7 - старт исполнения таблицы ЦАПов (файла)

    F8 - запрос данных из регистров
    F9 - запись в выходной регистр
    FD - запрос статуса ЦАПа
    FE - запрос статуса прибора
    FF - запрос атрибутов устройства
     
     
      Пакет 00 - остановка выдачи измерений, параметры не требуются, ответа на эту посылку нет.

    Пакет 01 - конфигурирование/старт многоканальных измерений. Пакет имеет вид:
     

    01 ChBeg ChEnd Time Mode Label

    ChBeg- номер начального канала.

    ChEnd- номер конечного канала. Каналы нумеруются с 0 по 7.

    Time- код времени измерения. Значения от 0 до 7.

    Mode- детализация режима.

    Label- метка для группового старта. Нулевое значение означает, что команды группового старта устройством будут игнорироваться.

    Mode детализирует режим измерений.

    Биты 0 и 1 определяют коэффициент усиления четных (0, 2…) каналов.

    Биты 2 и 3 определяют коэффициент усиления нечетных (1, 3…) каналов.

    Бит 4: 0- разовый цикл измерений; 1- непрерывные измерения (до команды СТОП или до следующей записи режима измерений).

    Бит 5 если равен 1, то измеренные значения запоминаются во внутреннем буфере и выдаются в линию. Если этот бит равен 0, то измерения в линию не выдаются.

    В ответ на этот пакет отдаются пакеты вида (если в запросе указано что измерения нужно выдавать в линию):
     

    01 Attribute Low byte Middle byte High byte

    Байт Attribute состоит из номера канала (младшие 6 бит) к которому относится измеренное напряжение и кода усиления (два старших бита), которые были установлены в момент измерения. Следующие три байта содержат измеренное значение.

    Пакет 02 – запрос осциллографических (одноканальных измерений). Пакет имеет вид:
     

    02 Channel Time Mode

    Channel- состоит из номера канала (младшие 6 бит), который требуется измерять, и кода усиления (два старших бита)

    Time- код времени измерения. Значения от 0 до 7.

    Mode- детализация режима. Здесь существенны только два бита.

    Бит 4: 0- разовый цикл измерений; 1- непрерывные измерения (до команды СТОП или до следующей записи режима измерений).

    Бит 5 если равен 1, то измеренные значения не запоминаются во внутреннем буфере и выдаются в линию. Если этот бит равен 0, то измерения в линию не выдаются, но запоминаются во внутреннем кольцевом буфере.

    Примечание: если бит 5 равен нулю (запоминание измерений без выдачи в линию), то бит 4 игнорируется (бессмысленно записывать в память единственное измерение).

    В ответ на этот пакет отдаются пакеты вида (если в запросе указано что измерения нужно выдавать в линию):
     

    02 Attribute Low byte Middle byte High byte

    Байт Attribute состоит из номера канала (младшие 6 бит) к которому относится измеренное напряжение и кода усиления (два старших бита), которые были установлены в момент измерения. Следующие три байта содержат измеренное значение.

    Если в запросе было указано что данные не нужно выдавать в линию, а запоминать во внутреннем буфере, то они запоминаются в этом же формате (4 байта данных с атрибутом).

    Пакет 03 – запрос ранее измеренного значения (в многоканальном режиме). Пакет имеет вид:
     

    03 Channel

    Channel- это номер канала для которого запрашивается ранее измеренное значение.

    В ответ на этот пакет отдаются пакеты вида (если в запросе указано что измерения нужно выдавать в линию):
     

    03 Attribute Low byte Middle byte High byte

    Байт Attribute состоит из номера канала (младшие биты) к которому относится измеренное напряжение. Следующие три байта содержат измеренное значение.  

    Пакет 04 – запрос данных из кольцевого буфера. Пакет имеет вид:
     

    04 Low byte Middle byte

    Здесь в поле данных указывается номер измерения в кольцевом буфере. Полная емкость кольцевого буфера- 4096 измерений. Если устройство записывало данные достаточно долго, то для правильной интерпретации данных (более старые и более новые), нужно знать текущее значение указателя записи. Это значение может быть считано командой запроса статуса FE.

    В ответ на этот пакет отдаются пакеты вида (если в запросе указано что измерения нужно выдавать в линию):
     

    04 Attribute Low byte Middle byte High byte

    Байт Attribute состоит из номера канала (младшие биты) к которому относится измеренное напряжение. Следующие три байта содержат измеренное значение.

    80 - 87 – (запись кода в канал ЦАПа номер 0 – 7) следующие 4 байта являются байтами данных.

    Пример:
     

    80 12 80 80
    10-й канал Байт 3 Байт 2 Байт 1 Байт 0

    Эта посылка заносит в 10-й канал ЦАПа значение +18.

    Байт 3 является старшим байтом, байт 0- младшим. Если не используется работа с файлами, то значения младших байтов безразличны.

    90 - 97 – (запрос кода в канале ЦАПа номер 0 – 7) следующие байты отсутствуют. В ответ на этот пакет отдаетсяпакет с данными (байты 3, 2, 1, 0).

    ПРИМЕЧАНИЕ: Байты 2 и 3 перезаписываются в ЦАП, байты 0 и 1 используются при вычислениях при работе с файлами. Если файлы не используются, то содержимое двух младших байт не имеет значения.

    Пакет F8 - запрос данных из регистров не требует параметров. В ответ на этот запрос отдается пакет вида: байт информации выходного регистра, байт информации входного регистра.
     

    F8 Output Register Data Input Register Data

    Пакет F9 - запись в выходной регистр.

    Байт 1 содержит информацию, которая будет занесена в выходной регистр
     

    F9 Output Register Data

    Пакет FD - запрос статуса ЦАПа не требует параметров. В ответ на этот запрос отдается пакет вида:
     

    FD Status Descriptor Lpointer Hpointer Lsteps Hsteps

    Здесь:

    FileStatus- статус исполнения файла, побитово:

    b0- файл исполняется;

    b1- принят запрос на исполнение файла;

    b2- исполнение файла приостановлено и может быть продолжено.

    b3- принят запрос на остановку (принята команда PAUSE);

    b4- принят запрос на продолжение исполнения файла (команда RESUME);

    b5- принят запрос на продолжение исполнения файла со следующей записи (команда GO NEXT);

    b6- резерв.

    Descriptor- дескриптор исполняемого файла.

    Lpointer, Hpointer- младший и старший байты указателя в файле.

    Lsteps, Hsteps- младший и старший байты счетчика исполняемой ступени.

    В статусе файла флажки 3 и 4 являются временными. Их присутствие вызвано тем, что отключение паузы может быть задержано от 0 до 10 мс. После снятия режима PAUSE эти флажки также сбрасываются.

    Этот пакет блок может выслать по собственной инициативе после завершения исполнения файла.

    Пакет FE - запрос статуса прибора не требует параметров. В ответ на этот запрос отдается пакет вида:
     

    FE Dev. Mode Label Low pADC High pADC File ident. Low pDAC High pDAC

    Здесь:

    Device Mode- режим устройства. Используются

    Бит 4 – SCAN- флаг, индицирующий, что устройство находится в режиме многоканальных измерений.

    Бит 3 – RUN- флаг, индицирующий, что устройство занято процедурой измерений (многоканальных либо осциллографических).

    Бит 2 – резерв.

    Бит 1 – TableR – флаг, индицирующий принятие запроса на обработку таблицы ЦАПом.

    Бит 0 – Table – флаг, индицирующий процесс исполнения таблицы.

    Label- значение метки глобальных стартов АЦП.

    Low pADC, High pADC- байты указателя кольцевого буфера АЦП. В указателе содержится номер ячейки куда будет произведена следующая запись. Если кольцевой буфер был полностью перезаписан, то этот указатель указывает на самое старое измерение.

    File ident- идентификатор исполняемого файла ЦАПа. Этот байт является значимым только в процессе исполнения файла.

    Low pDAC, High pDAC- байты указателя в файле ЦАПа.

    Пакет FF - запрос атрибутов устройства не требует параметров. В ответ на этот запрос отдается пакет вида:
     

    FF Device Code HW version SW version Reason

    Device Code- тип устройства (для CAC208 тип равен 4).

    HW version- аппаратная версия устройства.

    SW version- версия программного обеспечения.

    Reason- причина высылки пакета:

  1. после сброса по питанию.
  2. После сброса по кнопке.
  3. В ответ на запрос атрибутов (пакетом FF).
  4. В ответ на широковещательный запрос (Есть ли кто живой?).
  5. произошел рестарт по Watchdog таймеру.
    5. busoff recovery – восстановление после потери связи.
ГЛОБАЛЬНЫЕ посылки
Для глобальных посылок в адресной части (в идентификаторе) анализируется только поле 1 (воспринимается комбинация битов =5). Первый байт данных представляет собой команду. Устройство воспринимает следующие глобальные команды:
1 - прекратить работу по таблицам, если таковая ведется.
2 - стартовать работу по таблице.
Для этой команды добавляется байт-спецификатор задания байт 1- дескриптор таблицы: старшие 3 бита - номер таблицы (физический), младшие 4 бита - ее идентификатор. Устройство, получив такую команду, начинает обрабатывать таблицу только в том случае, если в указанной таблице содержится соответствующий идентификатор.
3- СТОП- остановить измерения.
групповой старт измерений, код группы указан во втором байте данных.
приостановить исполнение файла, код группы указан во втором байте данных.
продолжить исполнение файла. Команда 7 имеет два параметра- код группы и дополнительный модификатор. Если младший бит модификатора равен 0, то файл продолжается с точки останова, если же этот бит равен 1, то устройство, снимая паузу, одновременно переходит к обработке следующей записи.
FF- запрос (Кто есть на линии). По этой команде все CAN-устройства должны отдать линии пакет с атрибутами (и со своим идентификатором).


 

Козак Виктор Романович, Новосибирск, 2-авг-2005г.
email: kozak (at) inp.nsk.su