Добрый Самурай

Протокол Орион Болид

113 posts in this topic

Доброго времени суток, господа!

Сталкивался ли кто со спецификацией протокола обмена Болид (Орион)? Я понимаю что эти данные закрыты, но возможно народные умельцы смогли понять его работу?

Share this post


Link to post
Share on other sites
ferrum    14

Ничего там сверхестественного нет . Протокол и протокол. Сам посмотри. Каждая запрос начинается с заголовка(адреса, размера посылки) ,тела(команды, данные) и оканчивается CRC. Длина посылки зависит от контекста.Код CRC и является препятствием(для меня) для воспроизведения. Интерес к протоколу упал после выхода C2000-ПП

Share this post


Link to post
Share on other sites
КЭС    1394

Здравствуйте! Тоже столкнулся с необходимостью расковырять этот протокол.

Код CRC и является препятствием

Как раз это и не проблема. Вот пример вычисления (на PureBasic) CRC реального ответа от "Сигнал-20", где первый байт (132) -это адрес прибора(4) плюс 128 (не понятно почему так), второй байт(5)-это кол-во байт в посылке, последний, шестой байт- это CRC, его мы успешно и получаем.


; CRC ОРИОН
; Побайтное вычисление CRC8
;

Procedure Crc8(inbait ,incrc)
bait.c=inbait
crc.c=incrc
For i=0 To 7
If bait ! crc & 1 = 1
 crc=((crc ! %00011000) >> 1 ) | %10000000
Else
 crc=crc >> 1
EndIf
bait = bait >> 1
Next i
ProcedureReturn crc
EndProcedure
Dim Data_Array.c(7)
CRC.c=0
; размер массива равен полной длине посылки (включая адрес), но без последнего байта-это и есть CRC
; пример ответа от Сигнал-20: 132 5 178 156 176 26
Data_Array(0) = 132
Data_Array(1) = 5
Data_Array(2) = 178
Data_Array(3) = 156
Data_Array(4) = 176

For k=0 To 4
crc=Crc8(Data_Array(k) ,crc )
Next k
Debug crc

А вот с оставшимися байтами (3-5) просто беда! При одинаковом состоянии шлейфов ответы от "Сигнал-20" каждый раз разные! Может знает кто, как выдернуть инфу о состоянии шлейфов?

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments приглашают 26 июня принять участие в вебинаре, где инженер по применению беспроводных технологий компании TI расскажет, как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств. С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее. Вебинар проводит инженер по применению беспроводных технологий в TI Мари Хернес(будет дублированный перевод).

Подробнее...

КЭС    1394

Немного разобрался! Приборы, с которыми я экспериментировал (Сигнал-20, С2000-СП1), отвечают на запросы контроллера С2000 шестибайтными посылками, в байтах 3-5 содержится информация (считаем байт адреса за первый). Чтобы её получить, необходимо произвести между двумя из байт операцию "исключающее ИЛИ" ("XOR"). При этом получается три байта: (b3 XOR b5) -как-то связано с номером шлейфа, а так же состояние при стартовом опросе прибора, (b4 XOR b5) -счетчик посылок, сбрасывается при изменении состояния шлейфов, (b3 XOR b4) -типа ответ на команду ("статус"). Таким образом у меня получилось-таки отлавливать события (сработки, взятие-невзятие и т.д.), включение-выключение реле на СП1, чего и остальным страждущим искренне желаю!

Share this post


Link to post
Share on other sites
ferrum    14

Интересно, надо попробывать этот алгоритм. Сейчас нет преобразователя, чтоб поковырять, вернут - попробую.

Я разные приборы пробывал, разные сетевые опросчики (С2000, uprog,pprog,shleifes) и могу сказать что посылки достаточно разной длинны, полностью зависит от контекста, типов приборов и программ. Даже поиск приборов программами и пультом происходит немного по разном. Припамянаю, что при обмене с прибором было число, которое принималось прибором, инкрементировалось на еденицу и в ответе отправлялось опросчику(думаю это какой то механизм контроля подмены прибора )

Share this post


Link to post
Share on other sites

Видео вебинара «Уникальный подход MORNSUN к разработке DC/DC-преобразователей. Что на выходе?»

На сайте КОМПЭЛ доступны материалы вебинара, посвященные последнему поколению DC/DC преобразователей с фиксированным входом R3 от MORNSUN. Вы можете посмотреть видеозапись, ознакомиться с презентацией и ответами на вопросы.

Подробнее...

КЭС    1394

Выше я писал, что адрес прибора передается увеличенным на 128. С этим тоже прояснилось: пока прибор не обнаружен, контроллер посылает запрос на присутствие, в заголовке которого указан "чистый" адрес, после обнаружения обмен информацией ведется с использованием адреса, увеличенного на 128. Теперь понятно, почему в системе может быть не более 127 адресов (нулевой адрес, как известно, используется для широковещательных сообщений).

Edited by КЭС

Share this post


Link to post
Share on other sites
ferrum    14

что то не припомню широковещания у болида, есть примеры? Видимо страший бит байта адреса несет в себе какой то смысл, флаг чего то.

127 адресов в болиде скорее наверное исторически. Изначально взяли драйвера 485го с 1\4 UL , потом решили, чего зря биту пропадать и заняли какой то служебной информацией. А сейчас куча драйверов с 1\8 ul, казалось бы взяли бы и увеличили максимальное количество устройств до 256, да вот незадача бита нехватает :) Это ведь не этап разработки, миллионы устройств по России уже наверное в работе!

Share this post


Link to post
Share on other sites
КЭС    1394

Широковещалка у болида есть. Например, если заглянуть в программе pprog в страничку, где указывается, каким приборам передавать события (страницы->разное->передача событий->приборам), там есть ярлычек "Всем". Если его выбрать, в правой части окна программы (инспектор (события)) будет указан адрес"0".

На счет 8го бита в адресе. Он действительно занят служебной информацией: это флаг того, что прибор с этим адресом обнаружен и находится в работе. Об этом я и писал в своем предыдущем посте.

Edited by КЭС

Share this post


Link to post
Share on other sites
Anthon    0

Здравствуйте! Тоже разбираюсь с Орионом, хочу программно запустить релюшку с прибора с2000-2! Насколько я понял это можно сделать из под программ ОРИОНА, но я пищу свой софт, к порту подключился, а вот как послать команду не знаю, напишите кто нибудь как это программно реализовать, простой пример! Пишу на C#! Заранее спасибо!

Share this post


Link to post
Share on other sites
ferrum    14

Напрямую управлять реле с2000-2 нельзя(например как у Сигнала,С2000-4, СП1,КПБ). Жестко привязан к локальной тактике работы. Нужно сформировать сообщение сетевого контроллера чтото типа "Разрешить доступ"

Share this post


Link to post
Share on other sites
Anthon    0

Да, но из под программы "Администратор базы данных" у меня например получается послать сигнал на с2000-2 замыкания контактов, так почему нельзя это запрограммировать послав аналогичную команду из под другого программного обеспечения? Насколько я понял, мне только и надо одну лишь команду найти?!

Share this post


Link to post
Share on other sites
КЭС    1394

из под программы "Администратор базы данных" у меня например получается послать сигнал на с2000-2 замыкания контактов

Ну так и смотри на СОМ-порту, что посылает программа, попробуй смоделировать такую же посылку.

Share this post


Link to post
Share on other sites
ferrum    14

Anthon, АРМ есть купленный? Если да , то делаешь сценарий с нужными действиями, вешаешь его на горячую клавишу, затем своей программой посылаешь оперативной задаче сочетание клавиш.

Кстати если у тебя на этом компе крутится оперативная задача , то порт ею занят, если ОЗ нет, а есть С2000(М) то пойдут потери приборов у пульта. Потому что доступ детерминированный, и сетевой контроллер решает кому когда говорить.

пс Вот как раз АБД формирует "Разрешить доступ" значит, только я у АБД не припомню такую функцию, может у тебя Орион ПРО ? :umnik2:

Edited by ferrum

Share this post


Link to post
Share on other sites
Anthon    0

В АБД на релюшке меняешь свойства включить, включить на время, после сохраняешь и между контактами +12В1 и DOOR1 проскакивает импульс. Да я вот и думаю, надо попробовать прослушать порт, а вот по поводу оперативной задачи, это походу тоже проблема, ведь если порт уже каким-то приложением будет открыт, его же уже из под другого не запустишь?!

Share this post


Link to post
Share on other sites
ferrum    14

Если есть оперативная задача, то я уже сказал как тебе решить. Если расскажешь свою задачу вкомплексе, то может придумаем решение.

Здесь люди лезут в дебри, потомучто это интересно, а не потому что без этого никиак. Многие вещи можно сделать некустарными методами.

Причем здесь Door1 и +12В когда речь идет о реле,Door это ведь СМК двери или датчик прохода турникета.

Если хочется заморочится, то проэмулируй работу прибора со считывателем, пересылаяя Ориону идентификатор с достаточным уровнем прав. Эмулировать приборы - реально, что и доказал КЭС.

Edited by ferrum

Share this post


Link to post
Share on other sites
Anthon    0

Задача у меня такая: Есть одноразовые пропуска на территорию, ну тобишь для посторонних лиц, делать им проксимити-карты смысла нет, придумали наносить на одноразовые пропуска штрих коды, дальше свой считыватель, ну и подружить все это хотел через комп, свая база данных, учет посторонних лиц и т.д.! Короче основная задача открыть турникет с постороннего считывателя через Bolid-контроллер! А вообще можно же как-то через rs232 управлять реле на прямую?!

Share this post


Link to post
Share on other sites
ferrum    14

Вроде все просто, согласуй какой нибудь управляющий сигнал компорта с входом контроллера "Открывание по кнопке". Свой\чужой решение примает твоё ПО, в зависимости от данных баркодсканера, при успехе дергаешь за линию компорта - турникет открывается. соответственно все временные пропуска регистрируются Орионом одинаково "Кнопка", а учет проходов ведешь в своей программе.

В этом случае неплохо было бы предусмотреть ввод в ПО информации с датчика прохода. А то пропуск приложат, а не пройдут. А в твоей базе - человек находится внутри!! И "ты" поидее обязан его искать с охраной, по просроку по времени. Может он где то в яму упал по незнанке. А так прохода небыло - пропуск в девственном состоянии.

Повторяю, напрямую управлять реле нельзя, это не реле контрольного прибора и не релейный блок - команды "Включить, включить на время и др." он незнает. Максимум что можно, это имитировать АРМ "Орион" и командовать "Разрешить доступ" централизованно, но для этого Оперативная задача должна быть ВЫКЛЮЧЕНА и соответственно нужно знать часть протокола .

Не понимаю почему не хочешь через оперативную задачу сделать, чистый программизм никакого железа

Edited by ferrum

Share this post


Link to post
Share on other sites
ferrum    14
Может знает кто, как выдернуть инфу о состоянии шлейфов?

Voila...

Получаем состояние ШС

Запрос: Адр Кол 0 25 ШС 0 CRC

Ответ: Адр Кол 26 ШС ССТ CRC

где ССТ - состояние шлейфа

Например : 109 -Снят, 24 - Взят, 3 -Тревога, 17-Невзятие

Получаем значение АЦП

Запрос: Адр Кол 0 27 ШС 0 CRC

Ответ: Адр Кол 28 ШС АЦП CRC

пс Пробывал с прибором Сигнал-20П Smd v.2.02

Edited by ferrum

Share this post


Link to post
Share on other sites
КЭС    1394

ferrum, сдается мне, что твой ребус мало кому поможет. :umnik2: Я так понимаю, запросы ты взял с uprog? Они там фиксированные, ответы Сигнала-20 на них-тоже. Если же "слушать" RS-485 "разговора" С2000 с Сигналом-20, там будут совсем другие посылки. Чтобы добыть истину, байты надо "ксорить", как я писал в 4м посте.

Share this post


Link to post
Share on other sites
ferrum    14

ХА, ты подслушиваешь чужие обмены?

Ну незнаю, кому может помочь, но работает, достоверные данные о ШС получаю, уже можно Сигнал использовать с собоственным ПО.

Снифание обменов скорее будет полезным взломщикам, чем людям прикручивающим болидовские железяки в свою систему.

Я ,например, не передавал бы(еслиб протокол был мой) состояние ШС без причины, запрашивал бы признак изменения состояния ШС прибора с последнего опроса. Если б признак получал, то тогда бы запросил нужные ШС, а так чего просто так забивать интерфейс.

пс Uprog не опрашивает состояние ШС, взял у пр. Shleifes

Edited by ferrum

Share this post


Link to post
Share on other sites
КЭС    1394

Я бы ,например, не передавал бы(еслиб протокол был мой) состояние ШС без причины, запрашивал бы признак изменения состояния ШС прибора с последнего опроса.

Так и есть. Если состояние шлейфов неизменно, от Сигналов передаются только посылки, подтверждающие присутствие прибора. Про Uprog -это я перепутал по запарке, действительно Shleifes запрашивает. Снифер я делал, бесполезная вещь, т.к. неизвестно состояние шлейфов (реле) на момент запуска снифера, можно только отловить события. Именно поэтому я и заморочился с эмуляцией СП1.

Share this post


Link to post
Share on other sites
ferrum    14

КЭС, напиши как пульт управляет твоей псевдоСПшкой, какие там обмены

Share this post


Link to post
Share on other sites
КЭС    1394

Попытаюсь.

Добавляем в конфигурацию С2000 (через pprog) новый прибор, делаем его СП1, версия не имеет значения, присваиваем ему адрес, например 50.

После этого контроллер будет периодически запрашивать этот прибор . Здесь я делаю маленькое отступление: везде, где будут встречаться указания кодов посылок, будет иметься ввиду "проксоренная" последовательность. Пример: принята последовательность 178;6;45;46;47;48;31;. Байты считаем слева направо от 1. Получается: 1й байт(178)-адрес прибора, которому адресован запрос(50) плюс 128;, 2й байт(6)-длина посылки(без CRC), 3-6 байты - собственно запрос, 7байт-CRC.

Теперь необходимо с каждую пару байт "проксорить" между собой. Получится последовательность из (х*х-х)/2 байт,где х- число исходных байт, в нашем случае их 4.

Вот процедурка для такой обработки:

Procedure.s detect(xyz.s)
Dim xvrem.c(0)
rez.s=""

For a=3 To CountString(xyz.s, ";")-1
ReDim xvrem.c(a-3)
xvrem(a-3)=Val(StringField(xyz.s, a, ";"))
Next a


For b=0 To a-4
For k=b+1 To a-4
rez.s+Str(xvrem.c(!xvrem.c(k))+";"
st+1
Next k

Next b
ProcedureReturn rez.s
EndProcedure

Debug detect("178;6;45;46;47;48;31;")

На выходе процедура выдаст "3;2;29;1;30;31;" (в нашем примере). Вот это и есть "голая правда" протокола Болид!

Теперь, собственно о "разговоре" С2000 с СП1.

Пока прибор не обнаружен, С2000 посылает запрос "1;0;254;1;255;254;".

Дальше необходимо отметить, что в СП1 имеется счетчик , инкременирующийся при каждой новой передаче (не совсем так, об этом позже)

он используется при формировании ответа.

Следующие строчки я переписывал несколько раз, книга получается! давайте я выложу исходник своей недоделанной, но рабочей версии эмулятора, написана на PureBasic 4.10. ну и скомпилированный вариант.болид1.rar

Будут вопросы (а они будут!), отвечу.

Share this post


Link to post
Share on other sites
nekto    1

На выходе процедура выдаст "3;2;29;1;30;31;" (в нашем примере).

И что с этим делать , проксоренным...

Пример не работает что-то( . Пульт не обнаруживает ваш эмуль и команды вкл. реле непроходят.

Из листинга -

If adrabs=77  ;почему-то с этим адресом приходится менять нормальный CRC на 252

Потому что Болид неиспользует расчет CRC8 с помощью полинома. У них таблица изменена намеренно, вот вы и натыкаетесь на эти грабли.

Share this post


Link to post
Share on other sites
КЭС    1394

Не обнаруживает, потому что это не реализовано, там ответ надо формировать соответствующий, надо вручную сконфигурить в pprog' е.

Задержку перед ответом надо поставить >=1мс (у меня работает с значениями 1-5). Программа не закончена, сейчас не имею возможности разбираться, только после 20го (по заезду на вахту).

О какой таблице речь? CRC вычисляется программно, в запросах от контроллера несоответствий вычисленного и принятого замечено не было.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Сообщения

    • Фокус почти удался
    • Нет, оно не так работает. Там стоит мелкий конденсатор, который поддерживает открытым транзистор. А транзистор держит включенным реле. Магнитолу питать он не будет. Так что либо ставить нормальный АКБ, либо вешать конденсаторы на магнитолу. Либо, как вариант, можешь протянуть провод прямо от клеммы АКБ. Там просадка напряжения будет меньше, чем в проводке машины.
    • В принципе, хоть ранее я и не заострял на этом внимание, твои слова вполне укладываются в мои выводы о том, что общество не созрело. Ведь как получается: такие вот идеальные ангелы земные не хотят идти туда, где можно наводить порядок, а те, которые хотят - исчадия ада   Дурилка ты картонная... Как ты не понимаешь, что у дерева есть ствол, крона и корни... И каждый из элементов важен и состоит из других частей. Но целиком - это дерево. Есть явление, которое НЕИЗБЕЖНО вызывает конфликты, состоит оно из "невинного" национализма, нехорошего "нацизма" и плохого "фашизма", в каждом течении есть "радикальные", "умеренные" и еще какие-то течения-учения... Но все это надо назвать каким-то одним словом, чисто для удобства. И я готов принять любое для обозначения явления, которое всегда начинается с выделения по "праву рождения" какого-то критерия, а кончается уничтожением всех, кто не соответствует этому критерию. Как ты предлагаешь это назвать? Национализм - это фашизм в детстве.  И не игнорируй мои пояснения, как будто они не верны. Академические формулировки - вещь, безусловно, хорошая. Но хорошая для академических споров. Наука и говно изучает и разделяет его на массу видов, подвидов и категорий. Но обычным людям вполне достаточно общего термина - говно. Можно дискутировать об истоках термина "национализм", о том, как его искажают или извращают, но останется это тем же говном, что и было. Кстати, а почему никто про Грузию не говорит? Мы с женой собирались съездить в отпуске (который уже прошел, есличо), но передумали - по цене ничем не лучше других мест, а смотреть на горы - я их и в Абхазии насмотрелся. А теперь даже рад, что не поехал. И не поеду никогда. Как и на украину. 
    • Список : наименование - кол-во - цена ICL7107CPL(Кр572ПВ2А) 6 50
      IL311ANM(К554СА3) 12 8
      КА7806 20 8
      KIA7805 80 7
      MC78L05ACD (MC78L05ACDR2G) 100 5
      NCP1117DT33G 25 10
      LP2992AIM5-1.8 15 25

      L7809AC21DC 48 10
      LM2575T-5,0 15 35
      LM393D 4 8
      LP2950ACZ 50 15
      NE555P(Кр1006ВИ1) 90 7
      PC817(DIP4) 30 4
      PIC18F4520-I/P (DIP40) 40 60
      PSD-0505SL 5 50
      TL071C (SOIC8) 45 8
      МОС3083 150 8
      DS18S20+ 10 35
      J1121AS12VDC 40 35
      SW-338 DC-2.5 Ghz, GAAS SPDT 15 50
      SW-419 10 70
      HMC545ETR SOT-26
      LM2673S-ADJ 12 100
      UMZ-198-D16-G
      PTH05060WAH, 30WAH 3 600
      USBN9604-28M/NOPB 5 100
      DF08S, 85 10
      MAX202ECSE+ 18 40
      XC9572XL-5TQ100C 5 300

      PCA9515D 90 15
      МС33161D 50 20
      MM74HC126N 50 4
      MM74HC14 20 4
      MC14053 SO-16 40 8
      HEF4053BT SO-16 20 5
      HEF4066BT SO 30 4
      CD4013BPWR 25 6
      CD4520BPW 30 15
      SN74LVC2G06DBVR 30 4
      SN74LVC1G57DBVR 7 4
      SN74LVC2G17DBVR 9 7
      IR2113S 4 80
      UC2875DWP 3 300
      LTV357T 6 20
      ICM7555IBA 20 10
      DG406DN 2 100
      L4981AD ST 2 100
      TDA9820 25 20
      ADR130AUJZ-REEL7CT 5 80
      HMC539LP3 8 100

      TS922ID 6 40
      CYP15G0101DXB-BBC 1 1000
      LTM4619 6 80
      LM833M 30 15
      IN74AC14N 20 8
      LMX2315TMD 15 90

      MC33262 3 15
      HMC241G16 6 100
      SR3.3TST 5 15
      NGA-686 3


      полевой МLP1N06CL 75 40
      2SK1462 2 70
      3А627А 2 100
      BCP68 20 4
      BSR-135 140 1,5
      BCR158 80 1,5
      BCR185 80 1,5
      BCR191 150 1,5
      MBR745 7 10
      BCW66H 180 5
      BCW68H 180 6
      симистор ВТА26600BW 150 25 пары AD161 и AD162 = 16 пар 900 руб за пару
      ASZ 15 = 12 шт 400 руб
      германиевые SFT 306(Болгария) 20 шт  80руб-шт
       германиевые ГТ2308(Болгария) 50 шт 80 руб-шт
       германиевые ГТ905А 15 шт 20 руб - шт
       ГТ404В -7 шт 20руб-шт
      ГТ 404Г - 5шт 20руб-шт При опте возможны скидки.
      По всем вопросам обращаться в личку.

      Самовывоз из С-Петербурга, заказ от 500р.
      Возможна отправка за Ваш счёт Почтой России, ТК, заказ от 300р.
      Оплата на карту Сбера или наличкой при самовывозе.
      Список будет пополняться.
    • Похоже на анекдот: Встретились два бывших одноклассника, первый стал успешным бизнесменом, а второй еле-еле концы с концами сводит. Первый рассказывает о своих последних покупках, достижениях. Второй говорит: "а я три дня ничего не ел...". На что следует совет первого: "ты должен себя заставить!".
    • Теоретически - да. А на практике место пайки датчика может окислиться и контачить через раз от всякого дуновения ветра. И вы будете в полной уверенности заходить в парную, думая, что там 90 градусов, а там всего 50. Или 150. Приятная неожиданность. Правильно, так и есть. Но на приеме датчик просто проигнорирует то, что не понял, и, соответственно, при последующем запросе ответит "не так", как ожидалось. Для большинства "термометров" и не надо делать попытки чтения, достаточно продолжать некоторое время делать обычные запросы, не обновляя выходные данные, а потом, если нормальные пакеты так и не поступят, перейти в состояние "ошибка". Но, разумеется, я никогда не указываю, кому как стрелять себе в ногу - это каждый выбирает для себя сам.