Умный Дом по Ethernet

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: Умный Дом по Ethernet

Сообщение Urbas81 » 01 окт 2013, 15:05

wanvo писал(а):
DOCSIMUS писал(а):Создал проект в Proteus.
Работает. Сеть работает тоже - т.е. можно общаться с виртуальной мегой из браузера или сервера.
Если кому надо - обращайтесь.
Определил IP сетевухи c помощью строки "c:\Program Files\Labcenter Electronics\Proteus 7 Professional\BIN\iflist.exe" и прописал его в модель ENC28J60.
Установил WinPcap.Запускаю на симуляцию.
Из браузера адрес http://192.168.0.14/sec/ не видит. При нажатии на кнопки сведиоды отзываются. Через некоторое время ISIS вылетает из симуляции и сам закрывается.
Пробовал как с версией протеуса 7.10SP0 так и с 8.0SP0. В версии 8.0 вылетает позже, но молча .
Пока отладкой не занимался, прицепил последний из HEXов который был на форуме. Но что-то мне подсказывет, что дело не в прошивке.

C помощью iflist определяется номер карты 0,1,2 и тд, который заносится в свойства ENC, если hex заливается по умолчанию, то в сетевой карте ip должен быть в одной подсети 192.168.0.xx, у меня на ноуте была ситуация когда к реальному LAN ничего не подключено, симуляция тоже не запускалась, на другом работало и без втыкания Ethernet разъема. Можно проверить запустив реально рабочие проекты из папки C:\Program Files\Labcenter Electronics\Proteus 7 Professional\SAMPLES\VSM MPLAB Viewer\Eval Boards\Ethernet

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 01 окт 2013, 20:28

необязательно использовать iflist
можно что угодно использовать
да вот просто средствами Win7
вот этот адрес внес - работает, пользуюсь до сих пор
насчет вылетов... не могу ничего сказать, т.к. работает, но долго не проверял - мин 5 точно
проблемы могут быть какие угодно - вплоть до кривого лечения
Вложения
ip.jpg
ip.jpg (116.62 КБ) 14230 просмотров

wanvo
Сообщения: 164
Зарегистрирован: 30 сен 2013, 09:45
Откуда: Russia, Rostov-on-Don

Re: Умный Дом по Ethernet

Сообщение wanvo » 01 окт 2013, 21:59

Urbas81, DOCSIMUS спасибо!
Действительно, когда установил принудительный адрес 192.168.0.200 все заработало, ура!
Правда интернет перестает работать, т.к. мне IP должен роутер назначать, а он назначает в другой подсети, обычно 192.168.1.101
P.S.
Поменял подсеть роутера и теперь все работает. Супер!

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: Умный Дом по Ethernet

Сообщение Urbas81 » 02 окт 2013, 00:14

wanvo писал(а):Urbas81, DOCSIMUS спасибо!
Действительно, когда установил принудительный адрес 192.168.0.200 все заработало, ура!
Правда интернет перестает работать, т.к. мне IP должен роутер назначать, а он назначает в другой подсети, обычно 192.168.1.101
P.S.
Поменял подсеть роутера и теперь все работает. Супер!
Я обычно меняю сразу ip в hex, т.к к роутеру подключено много всего со статическим ip.

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 07 окт 2013, 00:04

Подскажите пожалуйста, почему после изменения типа порта производится RESET? Т.е. происходит перезапуск с нулевого адреса с соответствующей реинициализацией всего, как при первом включении меги.

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 07 окт 2013, 17:14

DOCSIMUS, процедура "настройки" портов происходит сразу после инициализации устройства. В принципе, наверное, можно было вынести эту процедуру в отдельную функцию, вызываемую для конкретного порта. Но какой-то уж очень большой необходимости в этом вроде бы нет.

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 07 окт 2013, 19:31

Спасибо за ответ. Нет, никакой необходимости нет. Просто кое-что тут переделываю, возникли сомнения насчет - нужен ли ресет? Может чего не разглядел в прошивке в смысле.

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 11 окт 2013, 11:09

Андрей, не могли бы вы объяснить логику работы прошивки?
Есть функция browserresult_callback. Запускается она при ответе сервера на сообщение меги.
Сообщение меги возникает при сработавшем входе.
При этом в функции browserresult_callback
- если ответ сервера 200 OK, то отрабатывается команда, поступившая от сервера
- если ответ сервера не 200 OK, то отрабатывается прописанная в Action команда
При этом (во втором случае) в функции browserresult_callback необходимо знать о каком сработавшем входе идет речь и это решается использованием переменной cur_input, которая в свою очередь инициализируется в основном цикле при проверке состояния входов.
Вот тут для меня не совсем понятно. Насколько я понял функция client_browse_url является асинхронной - т.е. мы отправили сообщение серверу и не дожидаемся от него ответа, т.е. возврат из этой функции произойдет сразу, независимо от того получили мы ответ или нет? Или все-таки она синхронная, т.е. пока внутри нее таймаут не случится, то возврата из нее не происходит? Я не изучал работу стека tuxgraphics, поэтому такие вопросы.

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 11 окт 2013, 12:16

DOCSIMUS, здесь возможны две ситуации
1. Сервер ответил, но не 200 (ну, например, 404 или 500), тогда port_execute сработает из callback.
2. Сервер не ответил, тогда port_execute сработает из основного цикла по таймауту, который также обрабатывается в основном цикле.

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 11 окт 2013, 16:56

Да, Андрей. Это как раз я все понял. Мне остался непонятным один момент.
Когда мы хотим отослать сообщение серверу, то вызываем функцию client_browse_url, в которой есть callback.
Непонятно для меня следующая вещь - как работает client_browse_url? Отослала сообщение и закончила свою работу? Т.е. произошел возврат из функции client_browse_url и передача управления далее по тексту программы. А callback сработает когда придет ответ от сервера. Или по другому - client_browse_url отсылает сообщение серверу и не делает возврата: ждет пока придет ответ от сервера и возврат осуществляет либо после прихода ответа (любого - 200, 404, 500... - тут срабатывает callback), либо, если ответ от сервера не пришел, то по таймауту (своему собственному). Это два варианта работы - асинхронный и синхронный. Асинхронный - отослали что-то, но ответ в функции не ждем, соответственно не приостанавливаем работу основной программы, а ответ обрабатывается ну например по прерыванию (так работает UART). Синхронный - отослали и ждем ответ, пока ответ не придет, ничего не делаем, пока не случится таймаут, тогда продолжаем работу. Как работает client_browse_url? Насколько я понял - ничего не ждет. Отослала и завершилась. Так?

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 11 окт 2013, 17:40

Конечно, не ждет. Эта функция инициализирует TCP-соединение, отправляет HTTP-запрос и завершает свою работу.
Клиентский callback вызывается только в тот момент, когда либо TCP-соединение ресетится, либо приходит ответ от сервера.

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 11 окт 2013, 22:38

Но тогда получается, что в случае прихода от сервера сообщения отличного от 200, нет гарантии, что в клиентском callback сработает нужный action.
Насколько я вижу в прошивке для того, чтобы отработать в callback нужный Action используется переменная cur_input. cur_input перезаписывается в цикле проверки состояния входов в основном цикле программы. После срабатывания входа вызывается client_browse_url, которая отошлет сообщение серверу и цикл продолжится. В cur_input запишется новое значение. В случае, если это произойдет раньше, чем придет ответ от сервера (не 200), то в callback отработается Action, соответствующий другому порту.

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 12 окт 2013, 12:21

DOCSIMUS, да, вы совершенно правильно обратили на это внимание. Собственно, Action отрабатывался и по статусу, отличного от 200, по той простой причине, что в этом блоке программы не сбрасывался флаг таймаута и Action запускался по таймауту основного цикла.
Поправил.

http://ab-log.ru/files/File/ip_manager3 ... _beta1.zip
http://ab-log.ru/files/File/ip_manager3 ... a1_hex.zip

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 12 окт 2013, 13:30

Может быть, кому-нибудь будет интересно.
Провел следующий эксперимент.
Сервер отправляет сообщение Мегадевайсу 1 (исп. модуль с реле) на замыкание контакта. Мегадевайс 2 детектирует замыкание и отправляет информацию на сервер.
Сервер фиксирует время отправки сообщения Мегадевайсу 1 и получения сообщения от Мегадевайса 2.
Полученные результаты. Общее время от отправки команды до получения ответа составляет 0,027-0,030 секунды. Эксперимент был проведен с целью оценки отзывчивости системы на нажатие кнопки. Исходя из полученных данных, можно предположить, что сервер получит информацию о нажатии через 0,01-0,015 секунды (или попросту говоря: "на глаз вообще не заметно").
Конечно, на это время очень большое влияние оказывает производительность сервера.

zarbazan
Сообщения: 1
Зарегистрирован: 22 окт 2013, 20:08

Re: Умный Дом по Ethernet

Сообщение zarbazan » 22 окт 2013, 20:30

Уважаемые форумчане!
Заранее прошу прощения, если эти вопрос уже обсуждались, возможно я не нашел :)
Суть вопроса: сейчас один Мегадевайс поддерживает максимальное количество входов - 14 штук. Есть ли модификации с увеличенным количеством входов/выходов, например, до 32 и более?
Еще один вопрос: если я буду использовать несколько Мегадевайсов, соединенных между собой по Ethernet, можно ли настроить их таким образом, чтобы при нажатии кнопки, подключенной к одному Мегадевайсу, срабатывал выход на другом девайсе (без использования компьютера, с компом, понятно, можно)?
И последний вопрос: какая из схем и разводок плат, представленных на сайте, самая стабильная и удобная в сборке?

Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

Re: Умный Дом по Ethernet

Сообщение Mixman » 22 окт 2013, 20:50

zarbazan писал(а):Суть вопроса: сейчас один Мегадевайс поддерживает максимальное количество входов - 14 штук. Есть ли модификации с увеличенным количеством входов/выходов, например, до 32 и более?
Ну если мега+исполнительный модуль с этого сайта, то 7входов/7выходов
zarbazan писал(а):Еще один вопрос: если я буду использовать несколько Мегадевайсов, соединенных между собой по Ethernet, можно ли настроить их таким образом, чтобы при нажатии кнопки, подключенной к одному Мегадевайсу, срабатывал выход на другом девайсе (без использования компьютера, с компом, понятно, можно)?
Можно без сервера. Для этого есть NetAction, читайте внимательнее

DOCSIMUS
Сообщения: 184
Зарегистрирован: 07 сен 2013, 01:02

Re: Умный Дом по Ethernet

Сообщение DOCSIMUS » 22 окт 2013, 21:34

С какой целью пин INT энки подключен к D2 атмеги? Прерывания от энки никак не обрабатываются. Это некий задел на будущее или просто забыли и даром пропадает порт?

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 23 окт 2013, 04:04

С какой целью пин INT энки подключен к D2 атмеги?
просто так :D пробывал работу энки по прерываниям , все работает отлично, но ввиду примитивности устройства это не дает ни какой выгоды , так что можете использывать вывод int как обычный порт

comparator
Сообщения: 516
Зарегистрирован: 20 окт 2012, 12:40
Откуда: Мюнхен

Re: Умный Дом по Ethernet

Сообщение comparator » 23 окт 2013, 09:06

alexsis_76 писал(а):
С какой целью пин INT энки подключен к D2 атмеги?
просто так :D пробывал работу энки по прерываниям , все работает отлично, но ввиду примитивности устройства это не дает ни какой выгоды , так что можете использывать вывод int как обычный порт
Позволю себе дополнить, если взглянуть в ERRATA пункт 6 "Receive Packet Pending Interrupt Flag (PKTIF) unreliable", то использование прерывания становится бессмысленным. А так это все таки позволило бы сэкономить немало ресурсов. Вывод: даром пропадает порт.

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 23 окт 2013, 16:55

не знаю как там "Receive Packet Pending Interrupt Flag (PKTIF) unreliable, но сколько я гонял схему все было нормально

Код: Выделить всё

 А так это все таки позволило бы сэкономить немало ресурсов
я думаю не очень много , контроллер в главном цикле постоянно опрашивает EPKTCNT
plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
функция enc28j60PacketReceive начинается с
if( enc28j60Read(EPKTCNT) ==0 ){
return(0);
}
еще ниже
uint8_t enc28j60Read(uint8_t address)
{
// set the bank
enc28j60SetBank(address);
// do the read
return enc28j60ReadOp(ENC28J60_READ_CTRL_REG, address);
}
uint8_t enc28j60ReadOp(uint8_t op, uint8_t address)
{
CSACTIVE;
// issue read command
SPDR = op | (address & ADDR_MASK);
waitspi();
// read data
SPDR = 0x00;
waitspi();
// do dummy read if needed (for mac and mii, see datasheet page 29)
if(address & 0x80)
{
SPDR = 0x00;
waitspi();
}
// release CS
CSPASSIVE;
return(SPDR);
}
т. е контроллер постоянно дергает spi на предмет общения с енс если EPKTCNT пуст возвращаем 0 , если нет длинну пакета , сам пакет ложится в буфер , в дальнейшем plen использует функция более высокого уровня
packetloop_icmp_tcp
, повыше можно увидеть такое
//if( !(enc28j60Read(EIR) & EIR_PKTIF) )
// The above does not work. See Rev. B4 Silicon Errata point 6.
о чем писалось выше, пробывал расскоментировать когда начинал работу с контроллером, не работало вообще, на INT прерывания возникают регулярно
если enc28j60Read(EPKTCNT) !=0, то принимаем пакет , прерывания избавляют от необходимости ногодрыгания
но так как контроллер более ни чем не занят то сойдет и так :D
DOCSIMUS если хотите выложу код для работы с прерываниями

Ответить