|
05.06.2014, 13:59 | #1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Описание протокола "Умный дом"
Я использовал read в модуле AquaLog
Для коректного чтения в ардуино, после получения запроса нужно выдержать паузу 100мс и после пауза отправлять данные |
05.06.2014, 15:41 | #2 |
Senior Member
|
Re: Описание протокола "Умный дом"
read не работает с нулевыми байтами насколько я понял и ещё похоже, что переменные в скрипте не могут содержать нулевые байты.
__________________
Россия навсегда! |
07.06.2014, 08:22 | #3 |
Senior Member
|
Re: Описание протокола "Умный дом"
Создал простой модуль для тестирования работы по протоколу modbus при помощи скрипта в shell.
Посылки из javascript я научился делать, crc считается, всё нормально. Эмулятор принимает и распознаёт посылки, но почему-то не передаёт данные в ответ. Это странно, не могу пока объяснить такое поведение. Пробовал функции чтения 03 и 04. На картинки видно, что запрос принят, но ответной посылки нет. Зато запись (функция 06) работает. В общем осталось разобраться почему эмулятор не выдаёт запрошенные данные. П.С. Возможно дело в каком-то таймауте или задержке. Надо бы попробовать на каком-нибудь реальном железе.
__________________
Россия навсегда! Последний раз редактировалось uni; 07.06.2014 в 08:55. |
07.06.2014, 09:27 | #4 |
Senior Member
|
Re: Описание протокола "Умный дом"
С другим симулятором работает. Ура. На картинке чтение (03) с адреса 0x0000, где находится значение 0x0A (10).
Осталось унифицировать интерфейс и проверить работу с реальным железом. В общем и целом это означает, что можно при помощи нескольких строк в shell со стандартными командами и дополнительных функций на javascript реализовывать протоколы, основанные на обмене массивами байт, в том числе с расчетом crc.
__________________
Россия навсегда! Последний раз редактировалось uni; 07.06.2014 в 09:33. |
07.06.2014, 10:48 | #5 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: Описание протокола "Умный дом"
Проверить нет возможности, вернусть 13 июня, протестирую
|
07.06.2014, 11:00 | #6 |
Senior Member
|
Re: Описание протокола "Умный дом"
К тому времени попробую оформить интерфейс более универсально, добавлю настройки для последовательного порта и выложу архив с модулем для CyberWrt. У меня в принципе есть плата с avr и прошивка для modbus slave, просто симулятором тестировать сейчас быстрее.
Желательно попробовать на реальном модуле ввода-вывода каком-нибудь, промышленном или около того. П.С. Нашёл crc16 алгоритм для bash: crc16 algorithm from C++ to bash. Не уверен, что он будет работать для произвольных данных. Не знаю как его использовать для произвольных бинарных данных. И ещё один вариант: CRC-16 checksum of a string.
__________________
Россия навсегда! Последний раз редактировалось uni; 07.06.2014 в 13:11. |
19.06.2014, 12:05 | #7 | |
Senior Member
Регистрация: 14.04.2010
Сообщений: 239
Вес репутации: 0 |
Re: Описание протокола "Умный дом"
Цитата:
|
|
19.06.2014, 17:33 | #8 |
Senior Member
|
Re: Описание протокола "Умный дом"
Оказывается, что будут. С доработкой конечно. Я поначалу не мог понять смысла, почему они имеют в виду строки. Оказывается это нужно, чтобы интерпретатор мог работать с байтами как с числами.
Скрипт может выглядеть так: Код:
string="001005000006000001" cnt=${#string} let 'cnt -= 3' crc=0xFFFF for i in `seq 0 3 $cnt`; do crc=$(( crc ^ ${string:$i:3} )) for j in `seq 0 7`; do c=$(( crc >> 1 )) if [ $(( crc & 1 )) = 1 ]; then let 'c ^= 0xA001' fi crc=$c done done printf "0x%04X" "$crc" echo Код:
2014.06.18 13:47:30 [INFO:30500] ( => ) 0x01_0x05_0x00_0x06_0x00_0x01_0xEC_0x0B 2014.06.18 13:47:30 [INFO:30500] ( <= ) 0x01_0x85_0x03_0x02_0x91 Для второй строки (string="001133003") получим ответ: 0x9102 На хабре меня не поправили. Оказывается можно считать crc, если представить числа в "интерпретируемом виде".
__________________
Россия навсегда! Последний раз редактировалось uni; 19.06.2014 в 20:23. |
19.06.2014, 21:21 | #9 |
Senior Member
Регистрация: 14.04.2010
Сообщений: 239
Вес репутации: 0 |
Re: Описание протокола "Умный дом"
чего-то у меня не выходит
попробовал перевести 599517 - вывело 0x427C а должно быть 0925DD |
19.06.2014, 21:33 | #10 | |
Senior Member
|
Re: Описание протокола "Умный дом"
Там числа нужно было вводить в десятичном представлении по три разряда на число, т.е. 0x85 = 113.
Вот новый вариант, где можно hex'ами побайтно писать: Код:
string="010500060001" cnt=${#string} let 'cnt -= 2' crc=0xFFFF for i in `seq 0 2 $cnt`; do crc=$(( crc ^ 0x${string:$i:2} )) for j in `seq 0 7`; do c=$(( crc >> 1 )) if [ $(( crc & 1 )) = 1 ]; then let 'c ^= 0xA001' fi crc=$c done done printf "0x%04X" "$crc" echo Цитата:
__________________
Россия навсегда! Последний раз редактировалось uni; 19.06.2014 в 23:24. |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|