Ограничения и рекомендации.
В этом документе рассматриваются следующие вопросы:
В институте ядерной физики в качестве физической среды 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- причина высылки пакета:
| Козак Виктор Романович, Новосибирск, 
        23-мая-2014 г.  | |
|  |