terminal, какие кварцы? Причем тут modbus RTU? Ему вообще фиолетова среда передачи, хоть по tcp сокету может работать.
Я пока в модбас вижу один костыль - это то, что если некое устройство обеспечения безопасности сработает, то оно не может "вякнуть" в шину об этом до того, как ее спросят. В can этой проблемы нет.
Создадим свой открытый протокол обмена данными между контроллером и модулями
ys1797
Доцент
Санкт-Петербург
1K 339
Отв.180 17 Янв. 17, 13:57
mak
Модератор
Екатеринбург
6.3K 1.8K
Отв.181 17 Янв. 17, 14:25, через 29 мин
ys1797, устройство безопасности пусть вякает сухим контактом
Electric
Новичок
Смолевичи
9
Отв.182 17 Янв. 17, 23:11
Странный спор. На модбасе целые подстанции построены, которые обеспечивают энергией тысячи людей и это нормально. А самогонный аппарат на модбасе - это, оказываетсч, плохо.
Я искренне желаю Terminsl реализовать свои задумки. Может он и будет тем гением, который создаст революционный протокол по rs485. Но пока это только разговоры, как все плохо в модбасе без предложения какой либо альтернативы.
Я искренне желаю 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.
ИМХО вполне можно брать и пользовать готовое -- 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:59MIBы тут непричем! И 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мин.:
Поэтому в протокол надо заложить возможность хоть до 32 бит, но в основном всегда будет использоваться адресация 8.
А адресацию в 16 закладывать не козырно, почти всегда ячеек меньше 256 и значит будем всегда гонять по шине лишний ноль.
Изначально устройство имеет зарезервированный адрес 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, во где пипец лютый.
А кнопка коннект - это очень простое во всех отношениях решение поиска датчика на шине, она позволяет контроллеру назначить датчику любой адрес. Просто есть специальная широковещательная команда поиска датчика на которую откликается только датчик с нажатой кнопкой. Это решает проблему поиска датчика, если на шине присутствуют несколько неинициализированных датчиков.
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Проще выделить такой битик в комманде запроса.