Перейти к содержанию

Рекомендуемые сообщения

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

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

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

Код 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" каждый раз разные! Может знает кто, как выдернуть инфу о состоянии шлейфов?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

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

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

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем КЭС
Ссылка на комментарий
Поделиться на другие сайты

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

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

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем КЭС
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Изменено пользователем ferrum

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Изменено пользователем ferrum

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Изменено пользователем ferrum

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

Может знает кто, как выдернуть инфу о состоянии шлейфов?

Voila...

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

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

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

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

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

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

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

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

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

Изменено пользователем ferrum

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем ferrum

абыр абыр абырвалг...

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Попытаюсь.

Добавляем в конфигурацию С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

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

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

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

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

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

Из листинга -

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
×
×
  • Создать...