27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

Создадим свой открытый протокол обмена данными между контроллером и модулями

Форум самогонщиков Автоматика
1 ... 7 8 9 10 11 12 10
ys1797 Доцент Санкт-Петербург 1K 339
Отв.180  17 Янв. 17, 13:57
terminal, какие кварцы? Причем тут modbus RTU? Ему вообще фиолетова среда передачи, хоть по tcp сокету может работать.

Я пока в модбас вижу один костыль - это то, что если некое устройство обеспечения безопасности сработает, то оно не может "вякнуть" в шину об этом до того, как ее спросят. В can этой проблемы нет.
mak Модератор Екатеринбург 6.3K 1.8K
Отв.181  17 Янв. 17, 14:25, через 29 мин
ys1797, устройство безопасности пусть вякает сухим контактом
Electric Новичок Смолевичи 9
Отв.182  17 Янв. 17, 23:11
Странный спор. На модбасе целые подстанции построены, которые обеспечивают энергией тысячи людей и это нормально. А самогонный аппарат на модбасе - это, оказываетсч, плохо.
Я искренне желаю Terminsl реализовать свои задумки. Может он и будет тем гением, который создаст революционный протокол по rs485. Но пока это только разговоры, как все плохо в модбасе без предложения какой либо альтернативы.
ys1797 Доцент Санкт-Петербург 1K 339
Отв.183  17 Янв. 17, 23:36, через 26 мин
mak, Тоже вариант. Но лишний шлейф не радует.
Kotische Академик Саратов 8.1K 2.5K
Отв.184  18 Янв. 17, 15:37
Вот вам супер универсальная структура данных, пользуйтесь:
Температура
Давление
Положение по шкале 0-100%
Состояние
Расход
Напряжение
Ток
Время
Текстовое сообщение для пользовательской (какой угодно вспомогательной) информации.PavelSaratov, 09 Янв. 17, 16:41
Нифига не универсально!

Никто не знает как запрос данных в snmp сделан?
Там есть иерархическая (древовидная) структура числовых идентификаторов, есть словарь сопоставляющий числовому идентификатору тип данных.
В принципе можно запрашивать с устройства словарь, и используя данные словаря интерпретировать запрашиваемые данные.
mak Модератор Екатеринбург 6.3K 1.8K
Отв.185  18 Янв. 17, 20:38
поедлагаешь MIBы выпускать?
у нас нет такого разнообразия
makh Профессор Sаmara 2.1K 1K
Отв.186  18 Янв. 17, 21:10, через 32 мин
Чет USB вспомнилось. В рамках USB дескриптора HID класса, вобщем-то, тоже хватит разнообразия для всякого безобразия.
ИМХО вполне можно брать и пользовать готовое -- http://www.usb.org/developers/hidpage/Hut1_12v2.pdf.
Kotische Академик Саратов 8.1K 2.5K
Отв.187  18 Янв. 17, 21:17, через 8 мин
MIBы выпускать?mak, 18 Янв. 17, 20:38
Нет, как информацию к размышленю взять.
Пущай устройсто контроллеру этот миб отдает в фазе инициализации.

Добавлено через 1мин.:

нас нет такого разнообразияmak, 18 Янв. 17, 20:38
Когда появится - под каждое новое устройство протокол переделывать?
ys1797 Доцент Санкт-Петербург 1K 339
Отв.188  18 Янв. 17, 23:59
Пущай устройсто контроллеру этот миб отдает в фазе инициализации.Kotische, 18 Янв. 17, 21:17

Контроллер о MIB ничего не знает, он оперирует только OID.
Т.к. писал snmp агентов знаю, что мибы - это для людишек, как DNS для IP.
Kotische Академик Саратов 8.1K 2.5K
Отв.189  19 Янв. 17, 00:58, через 59 мин
Контроллер о MIB ничего не знаетys1797, 18 Янв. 17, 23:59
MIBы тут непричем! И snmp протокол я привел здесь ДЛЯ ПРИМЕРА!!!

А предложение было следующим:
когда подключаешь "датчик" к шине, контроллер посылает ему команду "get info",
датчик отдает ему "словарь" в котором описано, что я имею на борту 100500 объектов,
тогда контроллер начинает опрашивать каждый объект, посылая ему команду "get info",
каждый объект отвечает контроллеру о своем содержимом.

Каждый объект может быть либо скалярным значением, либо коллекцией объектов.
Если это скалярное значение то оно информирует контроллер о том какого оно типа - целое (n-bit), floar (n-bit), string (n-char), ...
Если это коллекция то сообщает о количестве суб объектов и их IDшниках.
Каждый объект может иметь комментарий для человека.

Короче контроллер при инициализации прибора, оббегает все его суб-объекты, и строит у себя в памяти дерево,
с метками/комментариями, чтоб глянул комментарий и разу понятно что это за величина и нафига.

А в дальнейшем при работе опрос идет по коротким целочисленным ID-шникам, ибо нефиг передавать по шине ворох справочных данных.

Вобщем некий аналог MIBа внедряем внутрь устройства, а не как в уродском snmp где MIB приходится где то искать отдельно и без которого вообще фиг поймешь чего это за дурацкий набор цифирей нам устройство вернуло.
terminal Бакалавр Челябинск 88 7
Отв.190  19 Янв. 17, 08:10
Вот чел тоже дошел до того что нужен свой протокол https://geektimes.ru/post/282176/. Почти тоже самое что я Вам предлагаю (структура). Я понимаю что для нынешних "программистов" влазить в низкоуровневое программирование не айс. Но низкий уровень это то с чего начинается протокол. Если система подразумевает разнесение объектов каждый объект это законченный блок то обмен между блоками должен быть высоко надежным иначе при ошибке система рухнет полностью.К тому же в модбасе адрес устройства задается перемычками а я хочу уйти от перемычек. Адрес устройства можно будет изменять программно, а разносить адреса уже согласно подадресу который генерируется или программируется при изготовлении.
Kotische Академик Саратов 8.1K 2.5K
Отв.191  19 Янв. 17, 08:53, через 44 мин
при работе опрос идет по коротким целочисленным ID-шникам,Kotische, 19 Янв. 17, 00:58
Т.е. ВСЕ скалярные переменные сведены в один плоский список:
ID:Value

ID может быть из двух диапазонов
0:265 и 0:64к
Для запроса значений используем 2 команды
GetData8 и GetData16
колическтво возвращаемых данных зависит от типа значения и описано в словаре.

А иерархия древовидная имеет место только в словаре и служит только для удобства человека при просмотре коментариев, т.к. иерархически группированые данные воспринимаются человеком лучше, а компьютеру удобнее работать   плоским списком.
mak Модератор Екатеринбург 6.3K 1.8K
Отв.192  19 Янв. 17, 09:09, через 16 мин
Kotische, зачем усложнять? у нас потоков данных почти нет, можно оставить один тип 16бит, проще в реализации
Kotische Академик Саратов 8.1K 2.5K
Отв.193  19 Янв. 17, 09:18, через 10 мин
По поводу енумерации устройств.

Изначально устройство имеет зарезервированный адрес 0. И на порпусе датчика имеем кнопку "connct".
Контроллер опрашивает сеть и ищет устройство   номером 0, если находит то присваевает устройству IDшник который устройство запоминает в энергонезависимой памяти.
Если на шине несколько незареганых устройств то нужно по очереди надавить кнопку connect для регистрации устройств.
В дальнейшем устройство отзывается только на свой IDшник.

Таким образом запрос скалярного значения будет выгляделть так:
GetData8 IDустройства, IDячейки

В ответ устройство отдает на шину чепочку байтов:
Reply, b0, b1, b2, ..., crc
Количество байт определяется типом ячейки, который описан в словаре, и контроллер всегда знает сколько байт ожидать от устройства в ответ на запрос.

Добавлено через 4мин.:

можно оставить один тип 16бит,mak, 19 Янв. 17, 09:09
Скорее 8 бит, ибо редкое устройство будет иметь больше 256 ячеек. Но если вдруг - будет жопа.
Поэтому в протокол надо заложить возможность хоть  до 32 бит, но в основном  всегда будет использоваться адресация 8.
А адресацию в 16 закладывать не козырно, почти всегда ячеек меньше 256 и значит будем всегда гонять по шине лишний ноль.
Kotische Академик Саратов 8.1K 2.5K
Отв.194  19 Янв. 17, 09:36, через 18 мин
один тип 16битmak, 19 Янв. 17, 09:09
Можно сделать ход конем.
Контроллер когда выполняет енумерацию присваевает каждому значению 16 битный IDшник, и затем запрос  значения происходит не через ID устройства, а сразу по адресу значения.
Типа планка памяти села на шину ей контроллер выделил диапазон адресов, и в дальнейшем каждая ячейка сама отзывается на свой адрес.
Получаем единый плоский список значений в плоском адресном пространстве.
На сколько это проще/сложнее - затрудняюсь сказать.
mak Модератор Екатеринбург 6.3K 1.8K
Отв.195  19 Янв. 17, 10:00, через 25 мин
хм, что-то в этом есть
Electric Новичок Смолевичи 9
Отв.196  19 Янв. 17, 13:00
Вот чел тоже дошел до того что нужен свой протокол....
К тому же в модбасе адрес устройства задается перемычками а я хочу уйти от перемычек. Адрес устройства можно будет изменять программно, а разносить адреса уже согласно подадресу который генерируется или программируется при изготовлении.terminal, 19 Янв. 17, 08:10
Только комментарии там, увы, далеко не в поддержку автора.
Что касается перемычек - адрес слейва уже даже в самопальных устройствах записывают в память контроллера, а не задают перемычками (хотел выложить ссылку, но не отправляется сообщение, т.к. нет у меня 10 сообщений, поэтому скинул Вам в личку)
terminal Бакалавр Челябинск 88 7
Отв.197  20 Янв. 17, 08:25
Только комментарии там, увы, далеко не в поддержку автора.
Что касается перемычек - адрес слейва уже даже в самопальных устройствах записывают в память контроллера, а не задают перемычками (хотел выложить ссылку, но не отправляется сообщение, т.к. нет у меня 10 сообщений, поэтому скинул Вам в личку)Electric, 19 Янв. 17, 13:00
Ну это как в жизни, кто-то привык ездить на маршрутке ездит и не парится, а кто-то покупает автомобиль и узнает что на дороге можно повернуть на права или лева а можно вообще срезать.

Добавлено через 15мин.:

Id устройства можно сделать с расширением, выделить один бит для флага (7 -15), если бит id установлен то ID имеет 15(32767 устойств) бит если сброшен то 7(127 устройств). По поводу кнопки конект идея хорошая но хотелось бы оставить место для маневра и адрес назначать не от кнопки а от под адреса. Смысл такой же как МАК адрес в инете. Адрес можно менять в программе, а МАК адрес можно менять только через кнопку конект или программно кому как удобнее.
Kotische Академик Саратов 8.1K 2.5K
Отв.198  20 Янв. 17, 11:22
При наличии макадреса кнопка коннект вообще не нужна, но встает две проблемы:
1. обеспечение глобальной уникальности значения макадреса.
2. сложный алгоритм поиска датчика, почитай алгоритм автопоиска датчика ds1820, во где пипец лютый.

А кнопка коннект - это очень простое во всех отношениях решение поиска датчика на шине, она позволяет контроллеру назначить датчику любой адрес. Просто есть специальная широковещательная команда поиска датчика на которую откликается только датчик с нажатой кнопкой. Это решает проблему поиска датчика, если на шине присутствуют несколько неинициализированных датчиков.
Kotische Академик Саратов 8.1K 2.5K
Отв.199  20 Янв. 17, 11:23, через 2 мин
Id устройства можно сделать с расширением, выделить один бит для флага (7 -15), если бит id установлен то ID имеет 15(32767 устойств) бит если сброшен то 7(127 устройств).terminal, 20 Янв. 17, 08:25
Проще выделить такой битик в комманде запроса.