Протокол передачи данных от сенсора

Aug 27, 2015 15:19

Заморочился одной тривиальной задачей. Есть устройство на МК, содержащее в себе несколько датчиков. На данный момент это 1х напряжение, 2х температура и 1х уровень, хотя тонкости не так важны ( Read more... )

Электроника, Философия, Вопрос

Leave a comment

Comments 24

kincajou August 27 2015, 13:23:37 UTC
а нельзя сначала передать описание датчиков.. один раз.. а потом просто сами данные слать?

скажем, когда сессия открыта, выслать табличку из id/type/properties, а потом уже id value; id value; id value

не?

Reply

aterentiev August 27 2015, 13:27:47 UTC
такое уже тоже думал, типа посылать структуру устройства раз в минуту, а данные раз в секунду
подключив устройство, в течение минуты ждем, когда придет конфиг-пакет и потом наслаждаемся

Reply

kincajou August 27 2015, 13:50:18 UTC
просто пересылка всего этого мусора КАЖДЫЙ РАЗ... как-то это... если система знает, что датчик #2 это термометр, то зачем всё время присылать "unit": "degC"?

Reply


nicka_startcev August 27 2015, 13:27:46 UTC
а чем вот этот вот дикий ад в простыне лучше чем
leve1=142.40
temperature1=27.69
temperature2=66.6
voltage0=0.70

плюс отдельная команда вкл/выкл посылку (задание интервала от 0 до стопицот), отдельная на выдачу единиц для всех параметров?

Reply

aterentiev August 27 2015, 13:28:48 UTC
наверное, ничем, потому и спрашиваю, дзен ищу...

Reply

nicka_startcev August 27 2015, 13:33:23 UTC
дзена не бывает.

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

примерно как у модема - набор запросов плюс набор ответов строк имя=значение.

или в духе радикального минимализма, в виде хекс-дампа регистров (REGS=F0,0f,c7c8,66666,55aa) с концом строки в конце дампа.

Reply

aterentiev August 27 2015, 13:35:37 UTC
>а сериализацию лучше делать более компактно

но тогда оно становится почти что совсем нечитаемым, что пичалька
через Х лет я забуду что где в дампе, а в удобочитаемом формате достаточно раз глянуть...

пс. все это для себя, не для работы, поэтому есть опасность потерять доку...

Reply


mbr August 27 2015, 13:28:54 UTC
Вообще промышленный стандарт для подобных вещей - modbus.

Reply

aterentiev August 27 2015, 13:29:21 UTC
знаю, но у меня не получается двунаправленного канала, как ни крути...

Reply

mbr August 27 2015, 13:46:24 UTC
Всего-то модификаций не передавать сам запрос, а только ответы. Зато хороший протокол, выдержанный временем. С контрольными суммами, что желательно для уарта. И с возможностью передачи данных как в RTU, так и в ASCII. И без всяких велосипедов.

Reply

alex_avr2 August 27 2015, 14:25:27 UTC
И с аж двумя типами данных :)

Reply


32bit_me August 27 2015, 13:43:48 UTC
А нельзя просто набор цифр?
Передавать строки с именами переменных, это лишнее, имхо, хотя почему бы и нет, с другой стороны, если скорость позволяет?

Reply


rdvv August 27 2015, 19:43:48 UTC
Вот на неделях делал нечто подобное (заикался в комментах), тоже в две стороны делать заморочки не хотел, решил сделать по простому: датчик отправляет данные при первом включении и/или только когда есть изменения. Этого как бы достаточно, время последнего опроса (прихода данных от датчика) можно хранить на сервере и понимать, когда он давно не присылал ничего. На этом решил остановиться, типа погоняю как есть, а там хотелка заработает. Реализовывать двухнаправленную простыню не хотелось, в итоге спустя время оказалось, что этого недостаточно. В моём случае в качестве сервера был обычный апач+пхп (и остальная обвязка на никсе) и захотелось: пинга (без понга) и информации о стартовом запуске (обязательно). Пинг нужен чтобы активировать просто скрипт на сервере, ибо морочиться с таймерами/тригерами - не хотелось.
Ну и по пути передается ряд уникальной информации датчика, плюс всё шифруется (без стандартов, свой алгоритм) и стандартный CRC.

Reply


Leave a comment

Up