Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Открытый проект умного дома

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2014, 13:59   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Описание протокола "Умный дом"

Я использовал read в модуле AquaLog
Для коректного чтения в ардуино, после получения запроса нужно выдержать паузу 100мс и после пауза отправлять данные
Admin вне форума   Ответить с цитированием
Старый 05.06.2014, 15:41   #2
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: Описание протокола "Умный дом"

read не работает с нулевыми байтами насколько я понял и ещё похоже, что переменные в скрипте не могут содержать нулевые байты.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 07.06.2014, 08:22   #3
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: Описание протокола "Умный дом"

Создал простой модуль для тестирования работы по протоколу modbus при помощи скрипта в shell.

Посылки из javascript я научился делать, crc считается, всё нормально. Эмулятор принимает и распознаёт посылки, но почему-то не передаёт данные в ответ. Это странно, не могу пока объяснить такое поведение.

Пробовал функции чтения 03 и 04. На картинки видно, что запрос принят, но ответной посылки нет. Зато запись (функция 06) работает.

В общем осталось разобраться почему эмулятор не выдаёт запрошенные данные.

П.С. Возможно дело в каком-то таймауте или задержке. Надо бы попробовать на каком-нибудь реальном железе.
Миниатюры
Нажмите на изображение для увеличения
Название: 2014-06-07 10-16-21 Скриншот экрана.jpg
Просмотров: 346
Размер:	56.2 Кб
ID:	1729  
__________________
Россия навсегда!

Последний раз редактировалось uni; 07.06.2014 в 08:55.
uni вне форума   Ответить с цитированием
Старый 07.06.2014, 09:27   #4
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: Описание протокола "Умный дом"

С другим симулятором работает. Ура. На картинке чтение (03) с адреса 0x0000, где находится значение 0x0A (10).

Осталось унифицировать интерфейс и проверить работу с реальным железом. В общем и целом это означает, что можно при помощи нескольких строк в shell со стандартными командами и дополнительных функций на javascript реализовывать протоколы, основанные на обмене массивами байт, в том числе с расчетом crc.
Миниатюры
Нажмите на изображение для увеличения
Название: 2014-06-07 11-25-07 Скриншот экрана.jpg
Просмотров: 334
Размер:	77.4 Кб
ID:	1730  
__________________
Россия навсегда!

Последний раз редактировалось uni; 07.06.2014 в 09:33.
uni вне форума   Ответить с цитированием
Старый 07.06.2014, 10:48   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Описание протокола "Умный дом"

Проверить нет возможности, вернусть 13 июня, протестирую
Admin вне форума   Ответить с цитированием
Старый 07.06.2014, 11:00   #6
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию 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.
uni вне форума   Ответить с цитированием
Старый 19.06.2014, 12:05   #7
lvovitch
Senior Member
 
Регистрация: 14.04.2010
Сообщений: 239
Вес репутации: 0
lvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond repute
По умолчанию Re: Описание протокола "Умный дом"

Цитата:
Сообщение от uni Посмотреть сообщение
К тому времени попробую оформить интерфейс более универсально, добавлю настройки для последовательного порта и выложу архив с модулем для CyberWrt. У меня в принципе есть плата с avr и прошивка для modbus slave, просто симулятором тестировать сейчас быстрее.

Желательно попробовать на реальном модуле ввода-вывода каком-нибудь, промышленном или около того.

П.С. Нашёл crc16 алгоритм для bash: crc16 algorithm from C++ to bash. Не уверен, что он будет работать для произвольных данных. Не знаю как его использовать для произвольных бинарных данных.
И ещё один вариант: CRC-16 checksum of a string.
А Вы не проверяли эти функции? Они будут работать на нашей версии shell?
lvovitch вне форума   Ответить с цитированием
Старый 19.06.2014, 17:33   #8
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию 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
Возьмём два примера из поста про modbus:
Код:
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="001005000006000001") получим ответ: 0x0BEC
Для второй строки (string="001133003") получим ответ: 0x9102

На хабре меня не поправили. Оказывается можно считать crc, если представить числа в "интерпретируемом виде".
__________________
Россия навсегда!

Последний раз редактировалось uni; 19.06.2014 в 20:23.
uni вне форума   Ответить с цитированием
Старый 19.06.2014, 21:21   #9
lvovitch
Senior Member
 
Регистрация: 14.04.2010
Сообщений: 239
Вес репутации: 0
lvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond reputelvovitch has a reputation beyond repute
По умолчанию Re: Описание протокола "Умный дом"

чего-то у меня не выходит
попробовал перевести 599517 - вывело 0x427C
а должно быть 0925DD
lvovitch вне форума   Ответить с цитированием
Старый 19.06.2014, 21:33   #10
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию 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
Также нужно не забывать, что crc16 отличаются полиномами. Этот алгоритм использует число 0xA001.

Цитата:
а должно быть 0925DD
У crc16 длина crc равна 16 битам, т.е. двум байтам, а не трём.
__________________
Россия навсегда!

Последний раз редактировалось uni; 19.06.2014 в 23:24.
uni вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:02. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика