• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Modbus TCP / RTU RS-485 + WEB server

DimonBiya

New member
Если UART овен плк 110 подключу к UART esp, при этом ESP мастер, плк слэйв. Все должно заработать?
 

DimonBiya

New member
Имеется МВА8 с датчиками PT100. Как сделать графики на 8 каналов. Запись показаний каждый час в течении года? Подключать планирую так: RX мва8 на TX есп, TX мва8 через делитель к RX есп.
DSC_0002.JPG
 

pvvx

Активный участник сообщества
Имеется МВА8 с датчиками PT100. Как сделать графики на 8 каналов. Запись показаний каждый час в течении года? Подключать планирую так: RX мва8 на TX есп, TX мва8 через делитель к RX есп.
А пока нет никаких записей и логирования.
 

ddv

New member
Всем привет!
что-то я не как не смог разобраться как нстроить модбас по уарту.
имеем: железка (ардуинка) на ней modbus клиент (19200 baud, 8-bits, even, 1-bit stop). 16 2-х байтных ячеек с 1-16.

Modbus-Master-Slave-for-Arduino/simple_slave2.ino at master · smarmengol/Modbus-Master-Slave-for-Arduino · GitHub

модбас на ней 100% работает (пулинг этих 16 ячеек проверял).
Но никак не могу в вашем проекте настроить опрос этой железки %(
пробовал разные прошивки, разные собирал WEB профили..

какая-то каша у меня в голове. или мне нужно было брать прошивку для 485? и там выставлять "управляющий ПИН = null" ?

Если делать опрос ESP через modbus tcp (slave id = 50), то железка опрашивается.
ячейки через ваб-админку меняю, в опросе они приходят..

Если делать опрос ESP через modbus tcp (slave id = 1, это ид модбаса на ардуинке), то железка опрашивается, но данных нет (reply time-out)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Всем привет!
что-то я не как не смог разобраться как нстроить модбас по уарту.
имеем: железка (ардуинка) на ней modbus клиент (19200 baud, 8-bits, even, 1-bit stop). 16 2-х байтных ячеек с 1-16.
Modbus-Master-Slave-for-Arduino/simple_slave2.ino at master · smarmengol/Modbus-Master-Slave-for-Arduino · GitHub
Про Ардуино сказать ничего не могу.
ESP (slave id = 50) - это адрес внутреннего устройcтва, для опроса внешнего устройства надо по TCP запрашивать внешний адрес, а не назначать его для ESP. Для чтения с внешнего устройства в таблицу ESP устройства существуют "транзакторы".
Пока все имеющиеся у меня устройства с modbus RTU на RS-485 полудуплеском работают. Или выставили что неправильно, или в Ардуино у вас не modbus RTU на RS-485 полудуплекс.
Из всех настроек на ESP у нас есть всего порт Modbus TCP, адрес внутреннего устройства и параметры порта RS-485 (скорость, parity и stop). Остальное - это уже внешнее ПО или устройства.
 
Последнее редактирование:

ddv

New member
Блин, у меня в старом хроме сортировки в твоих вэбовских таблицах идут в обратном порядке! могу скрин прислать.
в firefox все ок. счас "кликаю" по транзакторам, хоть стали лампочки моргать... хотя транзактор количество ошибок увеличивает, кстати, как глянуть кода ошибки? ты вроде писал что протоколируешь ошибки..
Я правильно делаю: транзактор на опрос первых 9 ячеек слейва с ид-1 в 0 внутренний адес 0 будет таким web.cgi?mdbt0=1,4,9,0,0,0,0
команда №4 это же опрос hold регистров?
 

ddv

New member
Уфф. разобрался! :) автору БОЛЬШОЙ РЕСПЕКТ, а я пошел выкидывать свой велосипед :)
итого для опроса по UART нужно:
В настройках ModBus: Boud 19203, Parity 1 stop(1)
Транзактор (опрос 8 ячеек с 1, ложить в 1): 1,4,8,1,1,1,0

Вопрос один: как сохранить настройки транзактора? ну типа я поигрался, настроил, и получить файл "с конфигурацией", и потом ее в прошивку закинуть...и

---
сам себе отвечу - mdb.bin

А можно заменить
WEBFS22.exe:
на что-то кросс-платформенное? ну скрипт какой... у меня везде Linux, приходится идти на машину с виндой...

или через тот же веб-интерфейс mdb.bin задеплоить...
 
Последнее редактирование:

ddv

New member
"64-х битный аппаратный MacTimer"

А для какой задачи его можно использовать? и, главное зачем? вот такой нубский вопрос возник :)
 

Surkov

New member
@pvvx читал, искал, но так и не нашел. Понятно, что я могу достучаться до GPIO выводов ESP8266 через web переменные. Можно ли работать с ними через coil команды modbus без промежуточной записи во flash память (чтобы избежать старения)?
 

pvvx

Активный участник сообщества
@pvvx читал, искал, но так и не нашел. Понятно, что я могу достучаться до GPIO выводов ESP8266 через web переменные. Можно ли работать с ними через coil команды modbus без промежуточной записи во flash память (чтобы избежать старения)?
Через coil нет. Они доступны через Holding Registers.
Смотрите Info-Help (c главной страницы web) и вкладку Modbus
Там Системные переменные с 1100 по 1109:
1100 16bit GPIO_IN Значения со входов: бит 0 = GPIO0, …, бит 15 = GPIO15
1101 16bit GPIO_OUT Выходные значения: бит 0 = GPIO0, …, бит 15 = GPIO15
1102 16bit GPIO_OUT_SET Установка выхода: бит равный 1 выставляет бит в GPIO_OUT
1103 16bit GPIO_OUT_CLEAR Сброс выхода: бит равный 1 сбрасывает бит в GPIO_OUT

...
 

NightScream

New member
Автору безусловно респект.
Подскажите или дайте ссыль на ebay покупку модуля, на котором я смогу поднять этот шлюз, просто их штук 11 разновидностей + какието версии еще.
Просто скажите что лучше и удобно из esp, может уже распаянные есть на плате с выводами.
Спасибо.
 

А возможно ли в ESP8266 реализовать юарт 9 бит режим?
Он там есть. В настройках parity - 1 stop.
Дело в том что мне нужно читать 9-й бит в прошивке ESP8266, которую я пилю, но не понимаю как это делать и как настроить на 9-ти битный режим.. Пока то что я нашел это
WRITE_PERI_REG(UART_CONF0(0),
(0x1 << UART_STOP_BIT_NUM_S) // 1 stop bit
| (0x3 << UART_BIT_NUM_S)); // 8 data bits
и описание регистра настройки ЮАРТ http://esp8266.ru/esp8266-uart-reg/ где ничего не сказано про 9 бит режим

stop_bit_num [5:4] 2'd1 R/W Set stop bit: 1:1bit 2:1.5bits 3:2bits
bit_num [3:2] 2'd3 R/W Set bit num: 0:5bits 1:6bits 2:7bits 3:8bits

Подскажите, что я понимаю не так, или чего не знаю?))
 

pvvx

Активный участник сообщества
Дело в том что мне нужно читать 9-й бит в прошивке ESP8266, которую я пилю, но не понимаю как это делать и как настроить на 9-ти битный режим.. Пока то что я нашел это
WRITE_PERI_REG(UART_CONF0(0),
(0x1 << UART_STOP_BIT_NUM_S) // 1 stop bit
| (0x3 << UART_BIT_NUM_S)); // 8 data bits
и описание регистра настройки ЮАРТ http://esp8266.ru/esp8266-uart-reg/ где ничего не сказано про 9 бит режим

stop_bit_num [5:4] 2'd1 R/W Set stop bit: 1:1bit 2:1.5bits 3:2bits
bit_num [3:2] 2'd3 R/W Set bit num: 0:5bits 1:6bits 2:7bits 3:8bits

Подскажите, что я понимаю не так, или чего не знаю?))
9-ть бит данных в Modbus не используется. Символ в Modbus RTU состоит из 11 бит:
1 старт,
8 данных,
1 стоп,
1 четности или как доп. стоп бит.
Прошивка и настройки позволяют задать вместо 2 стоп бита, 1 стоп бит без бита четности. Выходит всего 10 бит.
 
А мне не для Модбаса) А для MDB протокола.. просто я никогда раньше с 9 бит режимом не сталкивался... я так и не могу понять, возможно ли реализовать этот режим на 8266?

То есть мне нужен 9600 Baud, 9 data bits, no parity bit, and one stopbit
 
Последнее редактирование:

pvvx

Активный участник сообщества
А мне не для Модбаса) А для MDB протокола.. просто я никогда раньше с 9 бит режимом не сталкивался... я так и не могу понять, возможно ли реализовать этот режим на 8266?

То есть мне нужен 9600 Baud, 9 data bits, no parity bit, and one stopbit
А тут тема про Modbus RTU и Modbus TCP...
 

pistoletov

New member
А мне не для Модбаса) А для MDB протокола.. просто я никогда раньше с 9 бит режимом не сталкивался... я так и не могу понять, возможно ли реализовать этот режим на 8266?

То есть мне нужен 9600 Baud, 9 data bits, no parity bit, and one stopbit
mdb это немного другое. Протокол платежных систем. 9 бит нечасто в уартах встречаются. stm32 и 51 мк имеют 9 бит. Интересно зачем Вам на есп mdb?
 

pvvx

Активный участник сообщества
Сверху Снизу