четверг, 1 декабря 2011 г.

Мониторинг спортивных состязаний.

Иногда возникает необходимость получать информацию о текущем спортивном состязании, чтобы, например, можно было наложить ее на телевизионную картинку. Все данные об игре передаются по 485 интерфейсу используя протокол NiBUS. Подробные сведения по устройству протокола можно прочитать в документе NiBUS.pdf. Если Вы для прослушивания протокола NiBUS будете использовать компьютер под управлением Windows, а в качестве конвертера RS485-RS232 трансивер Siolynx/Siolynx2 (siolynx2.tech_ref.pdf), Вам необходимо будет установить на него службу NiBUS. На данный момент последняя версия nibus-v3.0.780.10.msi. После установки службы может потребоваться ее настройка (Настройка службы NIBUS). Этот дистрибутив также содержит примеры на C++:
  • NibusLog (VC2003), который снифит данные поступающие по nibus
  • NibusListener (VC2008), заготовка для написания обработчиков спортивных событий
Последний пример-заготовка позволяет быстро написать свой обработчик спортивных событий (время, счет и т.д). При необходимости можно добавить обработчики используя документ с расшифровкой основных информационных сообщений для спорта SportInfo.pdf. Обратите внимание 
  • CAppModuleEx::Init() - здесь строится стек протокола nibus (NibusListener.cpp)
  • CAppModuleEx::DoCapture(TRUE) - включить прослушку.
  • CNibusListenerView - получает и разбирает датаграммы
  • CNibusListenerView::OnTimerChanged - изменились данные таймера
  • CNibusListenerView::OnScoreChanged - изменился счет
  • CNibusListenerView::OnPeriodChanged - изменился период
Вместо Pin 1 для питания можно использовать Pin 2. 12V используется для питания пульта и может отсутствовать. Pin 4 и Pin 5 должны быть на одной паре, например - синяя и бело-синяя жилы, также как и Pin 3 и Pin 1/2.
Если возникли вопросы, то отпишитесь в комментариях  к данному сообщению.

Дополнение:

Гораздо удобнее с протоколом NiBUS можно работать с помощью .NET 4.0, поэтому, если для подключения к шине NiBUS Вы используете компьютер с Windows и установленным .NET Framework 4.0, то возможно стоит посмотреть как это реализовано на C#. В этом случае Вам не требуется установка службы NiBUS. Клиент для коммуникации по протоколу NiBUS должен использовать библиотеку libnibus.dll написанную на C#, также понадобятся библиотеки Async-CTP-v3 (AsyncCtpLibrary.dll, System.Threading.Tasks.Dataflow.dll) и NLog.dll для ведения журнала. Все это можно загрузить с с нашего ftp-сайта. Там же есть простейший пример для хоккея в архиве IceHockeyViewer.zip. Чтобы скомпилировать пример понадобится VS2010 и установленный Visual Studio Async CTP (Version 3). libnibus.xml - содержит подсказки для студии, а в libnibusdoc.chm - справка к библиотеке. Пример использует 14 COM-порт для взаимодействия с NiBUS, Вы должны не забыть указать свой. Также учтите, что при установленной VS 11 Beta пример не компилируется.

Важное дополнение:

Все примеры выше используют в качестве конвертера RS485<->RS232 Siolynx2 нашего производства. Наш конвертер, в отличие от обычных конвертеров, является более "интеллектуальным" устройством. Помимо приема/передачи данных он отвечает за разрешение коллизий в протоколе NiBUS. На выход пользователю он выдает Сетевой уровень (Глава 3 nibus.pdf). Если Вы используете обычный конвертер RS485<->RS232 Вам нужно обратить внимание на Канальный уровень (Глава 2). Он отличается от сетевого наличием специальных двухбайтовых маркеров, причем используется режим когда данные содержат 9 бит! Старший бит установлен именно у маркеров. Не все конвертеры могут поддерживать 9 бит данных. Обычно он обрезается до 8 бит. Некоторые конвертеры обрезают этот старший бит (данные можно обработать), другие могут обрезать младший (в этом случае информация неполная).

Комментариев нет:

Отправить комментарий