Показаны сообщения с ярлыком nibus. Показать все сообщения
Показаны сообщения с ярлыком nibus. Показать все сообщения

пятница, 2 октября 2020 г.

Получение спортивной статистки по протоколу UDP


Для упрощения доступа к статистике спортивных состязаний (раньше требовалось подключаться по RS485 и разбирать протокол NiBUS) добавлена возможность получения этих сообщений по протоколу UDP.
Загрузите файл rconsoles.dll
Замените старый файл (сохраните его перед этим), зарегистрируйте его командой:


>regsvr32 rconsoles.dll

Рекомендую обновить также game.dll и, если хоккей, icehockey.dll, которые тоже нужно регистрировать.

Внесите изменения в конфигурационный XML-файл (сохранитесь)
Откройте его в текстовом редакторе и попробуйте найти слово GameRetranslator.

А) Если не нашли, то ... (смотрите Б, если нашли)
Найдите объект Game и добавьте строку внутрь объекта:
  <bind_to id="GameRetranslator" dispname="Game"/>
Должно получиться как-то так:
<object name="Game" clsid="progid:Game.GameLogic" description="Игра">
  <bind_to id="IceHockeyLogic" dispname="Game"/>
  <bind_to id="GameRetranslator" dispname="Game"/>
  ...
</object>
Добавьте на уровень объектов:
<object name="GameRetranslator" clsid="progid:rconsoles.GameRetranslator" description="Игра: ретранслятор">
  <property dispname="TimerUdpPort" value="55555" />
  <property dispname="GameUdpPort" value="55556" />
  <property dispname="Address" value="192.168.1.255" />
  <bind_to id="IceHockeyLogic" dispname="TimeRetranslator"/>
</object>
Здесь можно видеть, что задаются три параметра:
TimerUdpPort - порт для передачи тамера (0-65535)
GameUdpPort - порт для передачи игровых моментов
Address - это адрес подсети для широковещательной рассылки (в конце 255 для сетей x.x.x.x/24), в которую отправлять пакеты UDP, можно не задавать тогда будет отправляться в 255.255.255.255. Не задавайте этот параметр, если не знаете что указать! 

Б) Если нашли, то добавьте три параметра в GameRetranslator как в предыдущем примере.

Теперь по указанным портам будут отправлены широковещательные пакеты UDP.
Значения таймеров будут отправлятся в формате:
1-й символ R (running) или P (paused) - состояние таймера
2-й символ P (primary) или S (secondary) - тип таймера (основное время/таймаут например)
потом пробел и собственно строка со значением таймера.

Игровые события:
два или три поля разделенных символом |
первое поле команда (если нужно указать) HOME/GUESTS
Например: HOME|SCORE|значение
Второе поле (или первое если команда не нужна)
SCORE - очки команды
RESTS - таймауты команды
FOULS - командные фолы
NAME - название команды
TOURNAMENT - название турнира 
PERIOD - период
и последнее поле - это значение.

Можно обратится в техподдержку и предоставить нам удаленный доступ с помощью AnyDesk, чтобы мы сами внесли изменения.

четверг, 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 бит. Некоторые конвертеры обрезают этот старший бит (данные можно обработать), другие могут обрезать младший (в этом случае информация неполная).

пятница, 25 ноября 2011 г.

APGuard. Следим за AdvertisePro.

К сожалению программам иногда свойственно зависать или падать, особенно если они работают круглосуточно. Не является исключением и наша программа вывода видео на табло - AdvertisePro. Чтобы сделать нашу жизнь чуточку проще :) - я написал службу, которая следит за тем, чтобы наша программа всегда была запущена и по возможности определяет, что программа продолжает трудится и не отлынивает зависнув. Необходимо уточнить, что программа будет запущенна сразу после входа пользователя в систему (имя пользователя можно указать). Поэтому может понадобиться настройка системы на автологон при рестарте или запуске компьютера. Также наша служба может следить и за некоторыми другими службами, которые нужны для программы - первый кандидат служба nibus. Итак, встречайте AdvertisePro Guard (APGuard)
Перед установкой убедитесь, что установлен .NET Framework 2.0, скачайте файл msi и установите его. После установки служба APGuard будет автоматически запускаться после рестарта, поэтому необходимо внести все настройки в конфигурационный файл APGuard.exe.config расположенном в папке с установленной программой. Рекомендую сделать резервную копию перед внесением изменений. После внесения изменений можно запустить службу командой net start apguard.

Теперь подробнее про файл APGuard.exe.config.

Открываем его текстовым редактором и находим нужный нам раздел.
Красным подчеркнут полный путь к наше программе, зеленым выделено пустое значение, а синим показан элемент списка названий служб, за которыми нам надо следить, просто добавьте такую же строчку, поменяв название службы, если необходимо следить еще за какой-нибудь службой. Временной интервал задается в формате ЧЧ:ММ:СС. Теперь описания каждого параметра:
  • AdvertiseProFile - полный путь к программе.
  • WorkingDir - рабочая папка. Если не задана, то папка с программой.
  • GuardTimerInterval - интервал проверки работоспособности, здесь каждые 10 сек.
  • CommandLineArgs - параметры для запуска программы.
  • WatchIpgm - проверять зависший ipgm.exe (если вы не знаете для чего это - оставьте).
  • IpgmMaxDuration - время в течении которого ожидается завершение выполнения ipgm.exe.
  • WatchApplication - выполнять наблюдение (True/False).
  • UserName - имя пользователя, при входе которого будет начато наблюдение и запущена программа. Если не указано, то для любого.
  • AppMoniker - название префикса моникера для нахождения запущенного экземпляра программы. Задается в файле конфигурации AdvertisePro.cfg, пример: <process priority="default" autonomous="false" debug_level="0" moniker="AdvertisePro:"></process>. Необязательный параметр. В случае задания позволяет лучше определить работоспособность программы AdvertisePro.
  • ShedulerName - имя компонента Планировщик (см. статьи про Планировщик и компоненты). Необязательный параметр. В случае задания позволяет лучше определить работоспособность программы AdvertisePro. Работает при указании AppMoniker.
  • RestartDelay - задержка при перезапуске программы. Необходима, так как при быстром рестарте предыдущий экземпляр программы не успевает выгрузиться и блокирует новый.
  • WatchedServices - список служб для наблюдения.
После внесения изменений запустите службу командой net start apguard. Если вы все указали правильно, то программа должна запуститься.
Служба APGuard хранит файл с журналом сообщений в папке .\logs в которую у нее должен быть доступ (касается особенно для систем Vista+ с активным UAC).

понедельник, 17 октября 2011 г.

Настройка управления яркостью видеоэкранов

В прошлой статье рассказывалось как настроить службу NiBUS, после чего можно перейти к вопросу как правильно настроить управление яркостью из ПО AdvertisePro. Это необходимо если в журнале сообщений есть сообщение "Не задана конфигурация цифровой магистрали" или периодически появляются сообщения "Ошибка установки MIB-переменной Brightness".
Откройте программу, выберите меню Сервис/Настройка.../DVIMaster. В окне справа необходимо задать адрес "нулевого" входного модуля. Если список пуст, добавьте новое устройство кнопкой в правой части окна. Адрес вводится в шестнадцатеричном формате в виде Домен.Группа.Устройство. Домен всегда равен FF, устройство равно 01, а группа задается во входном модуле с адресом 0.0 видном на индикаторах на задней панели. Номер группы хранится в 15 параметре. Чтобы его посмотреть или изменить используйте три кнопки на плате управления модулем. Нажмите среднюю кнопку, чтобы перейти в режим правки/просмотра (нажатие 1 и 3 кнопки одновременно выведет модуль в обычный режим, выход также осуществляется при переходе к следующему параметру при редактировании последнего параметра а также при истечении таймаута нажатия кнопок в течении 40 секунд ). На индикаторе слева будет показан номер параметра, справа его значение. Для перехода к следующему параметру жмите первую (левую) кнопку, для перехода к предыдущему первую и вторую одновременно. Нажатие средней кнопки увеличивает значение, правой - уменьшает значение параметра. Список всех параметров можно найти в документе .\docs\mcdvi.tech_ref.pdf. Переходим к 15 параметру (номер параметров и их значения отображаются шестнадцатеричном формате) и запоминаем его или меняем на требуемый. Обычные значения группы FF (255) или 00. Чтобы не бегать в экран при вводе адреса можно попробовать ввести сначала адрес FF.FF.01 или FF.00.01, в поле MIB-файл нужно выбрать mcdvi.mib.xsd (для старых LVDS экранов здесь нужно указать dvimaster.mib.xsd)  и нажать кнопку проверить. Если появится сообщение MIB-устройство успешно опрошено можно жать кнопку OK и попробовать изменить яркость экрана ползунком для задания яркости экрана в программе. Если в сообщении указано, что устройство опрошено но не совпадает тип, значит мы указали адрес другого устройства (обычно это DVI-мастер в экранах с передачей по оптике). Попробуйте следующий адрес. Если и он не подходит, то следует убедиться, что все устройства подключены к 485 интерфейсу и все таки посмотреть 15 параметр у входного модуля, чтобы быть уверенным, что адрес задан правильно.

Настройка службы NIBUS.

После установки ПО AdvertisePro (Nata Supervision) в списке доступных служб (Панель управления/Администрирование/Службы) появляется служба nibus, которая позволяет обмениваться информацией с NiBUS устройствами по одноименному протоколу, используя 485 интерфейс. В частности для управления яркостью экрана. После установки требуется задать порт, через который будет проходить обмен информацией и скорость обмена. Чтобы задать эти параметры необходимо выполнить команду (Пуск/Выполнить или набрать в командной строке):
nibuss -c
В открывшемся окне укажите порт и скорость. Если у Вас Windows 7/Vista и включен UAC, то команду нужно запускать от имени администратора. Для связи по 485 интерфейсу используется трансиверы внешний Siolynx (подключается к RS232) или Siolynx 2 - подключается к USB и бывает внутренний в виде платы или внешний. Также возможно прямое подключение RS232 -> DVI master. Если подключение прямое к DVI-master, то скорость должна быть указана 28800, во всех остальных случаях 115200. Чтобы проверить правильность настроек и работоспособность трансивера Siolynx можно ввести команду:
ipgm -mib siolynx -ds
На выводе должен быть что-то похоже на это:

Nata-Info iDevices programmer. v.1.0.80, Jan  5 2009
Developed by Andrey Ivanov <support@nata-info.ru>
Copyright (c) 2009 Nata-Info Ltd. All rights reserved.

>> Parsing device MIB siolynx: OK
>> Binding to pipe: OK
>> Ackquiring device data (19 variables): .................OK
--- Трансивер SioLynx ---------------------------------------
1.                                     Address: 00:00:00:00:5C:6A
2.                                     Версия устройства: 2.0 [0x7]
3.                                Время с момента старта: 1091707, с
4.                                        Результат POST: 1792
5.    Коллизий при передаче дейтаграмм в rs485-интерфейсе: 0
6.                      Принято байт по rs485-интерфейсу: 0
7.                 Передано дейтаграмм в rs485-интерфейс: 2983
8.            Не отправлено дейтаграмм в rs485-интерфейс: 0
9.                      Обнаружено маркеров захвата шины: 0
10.                 Обнаружено маркеров освобождения шины: 0
11.                           Таймаутов освобождения шины: 0
12.              Ошибок синхронизации на rs485 интерфейсе: 0
13.          Игнорировано старт-битов на rs485 интерфейсе: 0
14.              Ошибок синхронизации на rs232 интерфейсе: 0
15.           Ошибок контрольной суммы в rs232 интерфейсе: 0
16.                Принято дейтаграмм по rs232 интерфейсу: 2998
17.                                     Переполнений фифо: 0
18.                             Записей в журнале событий: 0
Красным выделен MAC-адрес трансивера
Если вывод отличается, то скорее всего неправильно задан порт или трансивер Siolynx не исправен. После успешной проверки можно, например, запустить gMib2 указать тип устройства (меню Файл/Найденные в системе), его адрес и, если устройство доступно, активируются кнопки Обновить и Отправить.
В следующей статье будет рассказано как настроить настроить управление яркостью видеоэкрана.