реклама на сайте
подробности

 
 
> Диспетчеризация и управление удаленным оборудованием по GPRS каналу.
tehsmart
сообщение Oct 21 2013, 11:23
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 7-04-11
Пользователь №: 64 194



Всем доброго времени суток. Есть небольшой устройство, работающее удаленно, устройство проводит определенный вид работ по расписанию, оснащено GPRS модем производства ОВЕН (ПМ01). Необходимо мониторить в реальном времени текущее состояние установки, а так необходима возможность запуска/остановки работы оборудования. Первый раз столкнулся с подобной задачей и пока слабо представляю реализацию протокола обмена данными между ними. Пока что был написан небольшой модуль на стороне сервера, который мониторит обращения методом GET и складывает данные с полей в файл. Так же со стороны модема была написана утилита, формирующая данный запрос на сервер. Потестировав данный способ, пришел к выводу, что он не совсем подходит для моих целей. Есть ли готовые велосипеды/варианты решения данной проблемы, по возможности поделитесь ссылками на статьи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
Falkon_99
сообщение Oct 21 2013, 13:03
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-03-12
Из: Харьков
Пользователь №: 71 010



А разработчик (овен) что не предоставляет ПО к своим устройствам?
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Oct 22 2013, 04:47
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



В идеале можно поднять на устройстве веб сервер и принимать запросы от клиентов на включение/выключение. Однако это решение требует приличных ресурсов на контроллере и реальный IP для каждого устройства.
Ваш вариант (с http клиентом на устройстве, насколько я понял) можно доработать под использование веб сокетов. Тогда можно реализовать риал тайм мониторинг и всё такое.
Самый простой для реализации вариант - TCP сервер с самопальным протоколом. На устройстве соответственно TCP клиент.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Oct 22 2013, 07:13
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



А еще проще самопальный UDP-сервер в дипетчерской и UDP-клиент на устройстве, периодически (обычно раз в минуту достаточно - чуть чаще, чем разрушение ассоциации портов NAT сотового провайдера, если последний выдает серый IP) отправляющий пакет с телеметрическими данными. В случае необходимости удаленного управления со стороны сервера отсылается управляющий пакет на IP:порт, с которого было получено последнее сообщение.
Пишется все на уровне сокетов, размер кода и ресурсоемкость ничтожны. Причем в крайнем случае даже не обязательно наличие встроенного тсп-стека на клиенте: задача на столько проста, что ее можно даже реализовать вручную, отработав lcp, pap и ipcp фазы ррр и затем формируя ppp-ip-udp побайтно вручную (на любителя, конечно, не тем не менее).
В любом случае, если прикрутили HTTP-GET, то чистый UDP реально на много проще.
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Oct 22 2013, 08:04
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Свой промежуточный сервер лишит необходимости в IP и NAT. Посмотрите в сторону протоколов MQTT, RabbitMQ - достаточно лёгкие для микроконтроллеров, публичных серверов в интернете хватает.


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
tehsmart
сообщение Oct 22 2013, 14:35
Сообщение #6





Группа: Новичок
Сообщений: 2
Регистрация: 7-04-11
Пользователь №: 64 194



Цитата(Falkon_99 @ Oct 21 2013, 16:03) *
А разработчик (овен) что не предоставляет ПО к своим устройствам?


Предоставляет но только для своих ПЛК.

Цитата(andrewlekar @ Oct 22 2013, 07:47) *
В идеале можно поднять на устройстве веб сервер и принимать запросы от клиентов на включение/выключение. Однако это решение требует приличных ресурсов на контроллере и реальный IP для каждого устройства.
Ваш вариант (с http клиентом на устройстве, насколько я понял) можно доработать под использование веб сокетов. Тогда можно реализовать риал тайм мониторинг и всё такое.
Самый простой для реализации вариант - TCP сервер с самопальным протоколом. На устройстве соответственно TCP клиент.


Работаем в данный момент именно в этом направлении. Поднимаем HTTP сервер со статическим IP адресом и пробуем отрабатывать запрос-ответы между устройством (клиент) и сервером. Пробовали работать с сервером, на котором хостится сайт, но сервер настроен так, что после каждого ответа сервера соединение рвется (Connection: close) Возможно будет написан самопальный протокол поверх http.


Цитата(GeGeL @ Oct 22 2013, 10:13) *
А еще проще самопальный UDP-сервер в дипетчерской и UDP-клиент на устройстве, периодически (обычно раз в минуту достаточно - чуть чаще, чем разрушение ассоциации портов NAT сотового провайдера, если последний выдает серый IP) отправляющий пакет с телеметрическими данными. В случае необходимости удаленного управления со стороны сервера отсылается управляющий пакет на IP:порт, с которого было получено последнее сообщение.
Пишется все на уровне сокетов, размер кода и ресурсоемкость ничтожны. Причем в крайнем случае даже не обязательно наличие встроенного тсп-стека на клиенте: задача на столько проста, что ее можно даже реализовать вручную, отработав lcp, pap и ipcp фазы ррр и затем формируя ppp-ip-udp побайтно вручную (на любителя, конечно, не тем не менее).
В любом случае, если прикрутили HTTP-GET, то чистый UDP реально на много проще.



В чем преимущество использования UDP в данном случае?
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Oct 22 2013, 17:44
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Преимущество UDP всегда - в простоте реализации.

Цитата(tehsmart @ Oct 22 2013, 17:35) *
Возможно будет написан самопальный протокол поверх http.


Это сильно: имея http поверх tcp поверх ip, писать поверх еще свою надстройку, чтобы получить собственно исходный функционал ip(udp) sm.gif А использовать "голый" udp на уровне сокетов религия не позволяет? На самом деле это реально проще любых верхних протоколов и реализуется намного легче - буквально в несколько строчек кода С, без никакого геморроя. И если ваш программист крутит носом и говорит, что так нельзя, то он просто этого не умеет, не имеет желания учиться и, главное, обучен решать только формализованные задачи стандартными методами, освоенными в вузе, без тени креатива. То же касается рассуждений об "гарантийности" доставки tcp без понимания интимных механизмов ее реализации на уровне сокета.

MQTT, RabbitMQ - это тоже достойный вариант, но реализация чуть посложнее. Опять же, если необходим внешний сервер, то написать и разместить на самом дешевом VDS под линукс свой легковесный демон с единственным udp-сокетом для пересылки UDP между клиентом и сервером - дело на полчаса.


Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Oct 22 2013, 17:54
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
но сервер настроен так, что после каждого ответа сервера соединение рвется (Connection: close)

Это штатное поведение для http сервера. Чтобы этого избежать, можно использовать keep-alive запросы. Или ознакомиться с принципами работы веб сокетов (нужна поддержка на хостинге, если ваш сервер сидит на стороне).
Go to the top of the page
 
+Quote Post
zebrox
сообщение Oct 23 2013, 13:53
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 17-04-09
Пользователь №: 47 838



+ использования хттп, в том, что можно использовать любой публичный хостинг + использование урл, вместо ип адреса, т.е. безболезненная смена провайдеров.
но минус в том, что публичный сервер генерирует много лишиних заголовков в ответах, которые кушают трафик.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 11:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01459 секунд с 7
ELECTRONIX ©2004-2016