logo
Промышленные сети

Средства управления доступом к шине в can-протоколе

Передающий узел в CAN-протоколе слышат ВСЕ другие узлы в сети и подтверждают это. Всякий раз, когда шина свободна от передачи, узел может начинать передавать. Если узел передает, эта передача должна быть завершена прежде, чем другой узел может пытаться передавать. Если два или больше узла начинают передавать в одно и то же время, конфликт решается при помощи неразрушающего (non-destructive) поразрядного алгоритма арбитража, использующего поле арбитража.

Поле арбитража, включенное во все фреймы данных, состоит из:

RTR-бит указывает, является ли фрейм фреймом данных или удаленным фреймом.

11-битовое поле идентификатора передается от старшего к младшему значащему биту. Доминирующий уровень — логический 0. Одновременная передача бита с доминирующим уровнем (логический 0) и бита с рецессивным уровнем (логическая 1) дает в результате уровень логического 0.

В течение передачи поля арбитража каждый передатчик контролирует текущий уровень на шине и сравнивает это с битом, который он должен передавать. Если значения равны, узел способен затем продолжить передачу. Если бит с пассивным уровнем (логическая 1) был передан, а активный бит (логический 0) обнаружен на шине, то данный узел теряет право передачи и должен прекратить передачу последующих данных (рис. 6).

Узел, который потерял шину, может сделать попытку передачи снова, когда текущая передача завершена.

Важно следующее: идентификатор с самым низким значением выигрывает арбитраж.

Из сказанного можно сделать следующие выводы.

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

Вторая возможность, которую дает механизм арбитража, использована в сети верхнего уровня DeviceNet. В этой сети количество узлов ограничено 64 и для адресации отведены младшие разряды идентификатора, а старшие разряды предназначены для кодирования видов сообщений. Естественно, что сообщение, имеющее 0 в старшем бите, захватит шину первым, независимо от адреса узла приемника. Это, в свою очередь, обеспечивает передачу сообщений первого вида, например об аварии, по сети первыми, независимо от адресов приемных и передающих узлов.