Страница 1 из 1
передача данных по сети
Добавлено: 19.04.2016{, 17:57}
keeper1978
Ребят нужен ваш совет
вводная:
Имеется мега, управляющая оборудованием и возможность её подключения к локальной сети посредством интернет шилда,
и Openhab на OrangePI так же в этой сети.
надо подключить мегу к openhab, при этом допускаю использование в качестве промежутка ещё одну ардуинку, подключённую к апельсине по ком порту.
надо: передовать данные с меги на опенхаб и опенхабом управлять мегой.
как это проще реализовать посредством программы.
mqtt блок не предлагать хоть этот протокол был бы лдля меня более предпочтителен, так как он корректно работает только c передачей, а на прием не работает !!
передача данных по сети
Добавлено: 19.04.2016{, 20:47}
XENOMAN
Как насчет Modbus? Openhab его поддерживает, настройка - проще пареной репы, и не надо городить огородов с html кодами.
Если использование интернет шилда - принципиально.
http://forum.flprogwiki.ru/viewtopic.php?f=18&t=199 - тут я описывал пару костылей для общения openhab и ардуины через W5100. Стабильность работы не гарантирована.
передача данных по сети
Добавлено: 19.04.2016{, 23:30}
keeper1978
у меня нет возможности из того места передать данные по проводам, приходится использовать точку доступа
Добавлено (19.04.2016, 22:40)
---------------------------------------------
Да читал я както давно эту тему ну и подзабыл про неё
но проблема не в этом а в передаче переменных из опен хаба на ардуинку а там я этого не нашел (( может плохо смотрел
а вообще еслиб был в программе блок хотябы mqtt можно былоб уже смело использовать в разработках опенхаб+Flprog на полную катушку
а с модбасом проблемы так как туда нет доступа для кабеля
о всё разобрался вроде работает
Добавлено (19.04.2016, 23:30)
---------------------------------------------
а как тогда апелсинкой принимать Modbus протокол
передача данных по сети
Добавлено: 20.04.2016{, 20:08}
XENOMAN
keeper1978 писал(а):а как тогда апелсинкой принимать Modbus протокол
Купите USB-RS485 переходник. По поводу настройки модбас и OpenHab: есть статья на Хабре -
https://habrahabr.ru/post/252555/
Коротко: ставите плагин, в конфиге вбиваете:
# Частота опроса слейвов
# Настройки соединения, номер порта, скорость и т.д. Конкретно у меня если прописать только СОМ17, то работать не будет.
# id слейва в сети
# Начальный индекс переменной
# Кол-во переменных
# Тип переменной: discrete, coil, input или holding.
Код: Выделить всё
modbus:poll=200
modbus:serial.slave1.connection=COM17:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0
modbus:serial.slave1.length=1
modbus:serial.slave1.type=discrete
З.Ы.
Есть две очень важные особенности.
1) В статье на хабре приведен пример где берется сразу несколько адресов переменных.
Код: Выделить всё
modbus:serial.slave1.connection=COM7
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0 //Начиная с нулевой
modbus:serial.slave1.length=4 //Четыре штуки, т.е. 0,1,2,3.
modbus:serial.slave1.type=holding
Но у меня почему-то такой способ не взлетел, первая переменная выводится без проблем, а последующие - не работают вообще. Поэтому для каждой переменной необходимо в конфиге прописывать код вида:
Код: Выделить всё
modbus:serial.slave1.connection=COM17:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0
modbus:serial.slave1.length=1
modbus:serial.slave1.type=discrete
Для второй переменной этого же слейва соответственно:
Код: Выделить всё
modbus:serial.slave2.connection=COM17:9600:8:none:1:rtu
modbus:serial.slave2.id=1
modbus:serial.slave2.start=16
modbus:serial.slave2.length=1
modbus:serial.slave2.type=discrete
2) Адресация
При использовании переменных типа discrete и coil, есть некоторая пляска с адресами. Цитата автора программы:
Например вы создали 3 переменых модбас с адресами 0 - 2 типа Integer,
Если мастер запросит холдинг-регистр с адресом 0 то получит значение переменной с адресом 0, но это понятно.
если мастер запросит Input Register с адресом 0 полчит значение переменной с адресом 0
если мастер запросит Discrete Inputs с адресом 0 полчит значение нулевого бита переменной с адресом 0 (соответственно запросив Discrete Inputs с адресом 16 полчит значение нулевого бита переменной с адресом 1 )
если мастер запросит Coils с адресом 0 полчит значение нулевого бита переменной с адресом 0 (соответственно запросив Coils с адресом 16 полчит значение
нулевого бита переменной с адресом 1 )
Я думаю понятно - если используете discrete или coil надо учитывать сдвиг 16 бит для каждой последующей переменной(0 для переменной с индексом 0, 16 для 1, 32 для 2 и т.д.). Либо работать с несколькими битами одной переменной.
передача данных по сети
Добавлено: 23.04.2016{, 01:14}
keeper1978
Помогите с настройкой модбаса
в системе
root@orangepipc:/home/keeper# ls -l /dev/ttyS* /dev/ttyUSB*
crw--w---- 1 root tty 251, 0 Apr 22 23:13 /dev/ttyS0
crw-rw---- 1 root dialout 188, 0 Apr 22 23:39 /dev/ttyUSB0 //модбас конвертер
root@orangepipc:/home/keeper#
+-----------------------------------------------------------------------+
| A - Serial Device : /dev/ttyUSB0 |
| B - Lockfile Location : /var/lock |
| C - Callin Program : |
| D - Callout Program : |
| E - Bps/Par/Bits : 9600 8N1 |
| F - Hardware Flow Control : Yes |
| G - Software Flow Control : No |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
конфиг Openhab
modbusoll=200
modbus:serial.slave1.connection=ttyUSB0:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0
modbus:serial.slave1.length=1
modbus:serial.slave1.type=discrete
modbus:serial.slave2.connection=ttyUSB0:9600:8:none:1:rtu
modbus:serial.slave2.id=1
modbus:serial.slave2.start=16
modbus:serial.slave2.length=1
modbus:serial.slave2.type=discrete
modbus:serial.slave3.connection=ttyUSB0:9600:8:none:1:rtu
modbus:serial.slave3.id=1
modbus:serial.slave3.start=32
modbus:serial.slave3.length=1
modbus:serial.slave3.type=discrete
modbus:serial.slave4.connection=ttyUSB0:9600:8:none:1:rtu
modbus:serial.slave4.id=1
modbus:serial.slave4.start=48
modbus:serial.slave4.length=1
modbus:serial.slave4.type=discrete
конфиг Openhab
items
Number Temp_TEST "Temperature [%d °C]" { modbaus="slave1:0" }
переменная в Flprog
reg:0 integer
где ошибка
передача данных по сети
Добавлено: 23.04.2016{, 07:48}
XENOMAN
У Вас тип переменной в конфиге OpenHab - discrete - , он предназначен для передачи значений 1/0(вкл/выкл) в режиме чтение/запись. А ардуино передает температуру, тут надо использовать - input - register, он предназначен для передачи переменных(числовых значений) в режиме только чтение. + ещё пара синтаксических ошибок.
Не уверен насчет COM портов в linuxe, но вроде правильно будет /dev/ttyUSB0.
конфиг Openhab
modbus(двоеточие)poll=1000
modbus:serial.slave1.connection=/dev/ttyUSB0:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0
modbus:serial.slave1.length=1
modbus:serial.slave1.type=input
конфиг Openhab
items
Number Temp_TEST "Temperature [%d °C]" {modbus="slave1:0"}
p.s. Для Input и Holding регистров адреса пишутся как есть, т.е. переменная с индексом 1 в конфиге так же будет иметь индекс 1. А не 16 как в случае с Discrete или Coil.
p.p.s. В параметр modbus:poll=1000 вставляется смайлик, правильно modbus(двоеточие)poll=1000, 1000 - это частота опроса слейвов в мс, как правило 1 раз в секунду более чем достаточно, особенно учитывая то, что при изменении статуса item'а запрос отправляется "вне очереди".
передача данных по сети
Добавлено: 23.04.2016{, 14:23}
keeper1978
а есть какие нибуть визуальные веб утилиты для работы с modbus
хочу проверить данные которые приходят на порт
у меня чего то все равно не заводится опенхаб
хотя в винде в MasterOPC Universal Modbus Server данные без проблем получал
Добавлено (23.04.2016, 14:23)
---------------------------------------------
На винде Опенхаб завелся с пол пинка
но возник вопрос как передать boolean переменную
её ведь нет в переменных модбаса
передача данных по сети
Добавлено: 23.04.2016{, 15:35}
XENOMAN
Передавайте как INT, а в OpenHub принимайте как Discrete или Coil. Не забывайте про особенности адресации таких переменных.
передача данных по сети
Добавлено: 23.04.2016{, 20:13}
keeper1978
Что то я никак не могу разобратся с записью переменной
modbus:serial.slave1.connection=COM14:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=112
modbus:serial.slave1.length=112
modbus:serial.slave1.type=coil
или так
modbus:serial.slave1.connection=COM14:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=7
modbus:serial.slave1.length=7
modbus:serial.slave1.type=holding
никак не получается записать
передача данных по сети
Добавлено: 24.04.2016{, 18:53}
XENOMAN
Первый вариант ближе к истине, НО
Одна переменная это 16 бит.
Нулевой тэг, от 0 до 15, 1 тэг 16-31, 2 тэг 32-47, 3 тэг 48-63, 4 тэг 64-79, 5 тэг 80-95, 6 тэг 96-111, 7 тэг
112-128 и т.д.
Но при этом сам седьмой тег так-же включает в себя 16 бит.
Т.е. в опенхабе код будет иметь вид:
Код: Выделить всё
modbus:serial.slave1.connection=COM14:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=112
modbus:serial.slave1.length=1
modbus:serial.slave1.type=coil
А в Ардуинке Вам нужно будет считать Первый бит этого тэга.
ЕМНИП, то же самое можно сделать и без считывания первого бита, просто подавая переменную на переключатель. При условии что один тег несет одну переменную.
P.S. Надеюсь Вы обратили внимание, что каждая последующая переменная в ОпенХабе меняет название.
Первая переменная:
Код: Выделить всё
modbus:serial.slave1.connection=COM14:9600:8:none:1:rtu
modbus:serial.slave1.id=1
modbus:serial.slave1.start=0
modbus:serial.slave1.length=1
modbus:serial.slave1.type=coil
Вторая
Код: Выделить всё
modbus:serial.slave2.connection=COM14:9600:8:none:1:rtu
modbus:serial.slave2.id=1
modbus:serial.slave2.start=16
modbus:serial.slave2.length=1
modbus:serial.slave2.type=coil
Третья
Код: Выделить всё
modbus:serial.slave3.connection=COM14:9600:8:none:1:rtu
modbus:serial.slave3.id=1
modbus:serial.slave3.start=32
modbus:serial.slave3.length=1
modbus:serial.slave3.type=coil
передача данных по сети
Добавлено: 14.05.2016{, 14:01}
alex2485as
простите что не в тему , а кто нибудь имеет опыт работы в делфи + FLProg ?
нужна помощь...