Органицация работы с CAN-шиной

Основой новой распределенной АСУ БТА является обмен данными и командами между главным управляющим компьютером и периферийными контроллерами, к которым подключена вся аппаратура управления. Обмен выполняется через CAN-шину. В управляющий компьютер установлена карта CAN-интерфейса. Сейчас это ISA-карта PCL841 фирмы Advantech. В ближайшем будущем это вероятно будет карта PCI -7841 фирмы ADLink.

Все известные CAN-драйверы для Linux могут использоваться только в одной программе, поэтому возникает проблема использования CAN-шины из нескольких, параллельно работающих, задач. Проблема совместного доступа к CAN-шине была решена традиционным способом -- написанием специальной программы CAN-обмена bta_can_io_net и разработкой межпрограммного интерфейса, позволяющего другим программам работать через нее с CAN-шиной.

Интерфейс реализован в виде библиотеки can_io.

Будем называть программу bta_can_io_net CAN-сервером, а взаимодействующие с ней программы CAN-клиентами. Сейчас CAN-клиентами являются bta_control_can, bta_sew_can и bta_meteo_can.

Для CAN-карты PCL841 используется универсальный драйвер простых CAN-карт can4Linux фирмы PORT (http://www.port.de). Этот драйвер фиксирует точное время прихода каждого CAN-пакета, что необходимо для решения проблем синхронизации в распределенной системе.

После запуска программа bta_can_io_net делится (fork) на четыре взаимосвязанных процесса:

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

  1. can_io для использования только в пределах одного компьютера (без сетевых возможностей);
  2. can_io_net в которую добавлена возможность обмена CAN-пакетеми по сети.

Первый вариант реализует местную связь CAN-клиентов со вторым и третим процессами CAN-сервера. В сетевой вариант библиотеки добавлены функции связи с CAN-сервером на другом компьютере. Оба варианта библиотеки разработаны таким образом, что они же включаются в сам CAN-сервер. Поэтому возникает несколько вариантов клиент-серверной работы:

\includegraphics[width=15cm,keepaspectratio]{can_io_arc.gif}

Сетевой обмен CAN-пакетами настраивается при помощи файла конфигурации bta_can_net_conf. Он должен располагаться в текущем справочнике (в котором запускается программа). Файл состоит из следующих строк:

  1. CANgate = host.сетевое имя машины с CAN-картой;
  2. CANport = номер сетевого порта;
  3. CANkey = четыре символа -- ключ доступа, передаваемый с каждым CAN-пакетом по сети. Он должен совпадать на обоих компьютерах, иначе CAN-сервер принимающего компьютера не пропустит пакет в CAN-шину.

Shergin V. 2005-11-21