Ограничения и рекомендации.
В этом документе рассматриваются следующие вопросы:
В институте ядерной физики в качестве физической среды 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. Скорость кодируется двумя битами в соответствии со следующей таблицей.
|
Скорость |
|
1 Мбод |
|
500 Кбод |
|
250 Кбод |
|
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 |
Назначение | Приоритет | Адрес | Модификатор |
Код 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 – восстановление после потери связи.
На сегодняшний день существуют следующие типы устройства.
Код | Название |
0 | Резерв |
1 | CANDAC16 |
2 | CANADC40 |
3 | CDAC20 |
4 | CAC208 |
5 | SLIO24 |
6 | CGVI8 |
7 | CPKS8 |
8 | CKVCH |
9 | 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 байта являются байтами данных.
Пример:
8А | 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- причина высылки пакета:
|
|