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

Modbus TCP / RTU RS-485 + WEB server

pvvx

Активный участник сообщества
pvvx, извиняюсь, давно не появлялся на форуме, работы много..
по резисторам и общему подключению скопируйте со схемы во втором сообщении отсюда, там вроде как нигде не накосячил)
У вас там по 680 и 120 Ом, что не всегда правильно, если на шине несколько устройств. Ставить джамперы на отключение тнерминатора? Проще внешний. Ну а полярность подтяжек у меня перепутана, глядел не уставшим взглядом и заметил, по этому и спросил :)
 
Последнее редактирование:

A_D

Active member
pvvx, но эти резисторы же ставятся только на краях шины, т.е. на мастере и на самом последнем устройстве или заглушке... на других Slave устройствах вообще никаких резисторов не ставиться. Или я что то не так понял ?
 

Dito85

New member
А цель?
По практике работы с пром. оборудованием, со сложными системами, больше порядка 10 шт не требуется - по 2..3 шт на одни внешний контроллер (один для записи в него конфигурации, другой для считывания конфигурации, и третий для чтения значений). Бывают исключения, но у нас же не десяток внешних контроллеров на шине?
Не десяток, но штук по шесть в линии ).

По тому что питания на RTC у вас нет. Не надо трогать CHIP_EN и всё будет хорошо, если общее питание всегда идет. Он отключает внутренний стабилизатор на 1.1В питания RTC
Я может не так выразился. Я понимаю, что если отключить все источники питания с RTC то данные хранящиеся в ней потеряются, но почему эта область памяти не обнуляется, а заполняется рандомными значениями?
 

pvvx

Активный участник сообщества
Не десяток, но штук по шесть в линии ).
Тогда наблюдается явное несоответствие позиционирования туда ESP8266.
Я может не так выразился. Я понимаю, что если отключить все источники питания с RTC то данные хранящиеся в ней потеряются, но почему эта область памяти не обнуляется, а заполняется рандомными значениями?
Вас интересует технология статической памяти? Условно там триггер на бит. Как его перекинуло при включении питания - ?
 

pvvx

Активный участник сообщества
pvvx, но эти резисторы же ставятся только на краях шины, т.е. на мастере и на самом последнем устройстве или заглушке... на других Slave устройствах вообще никаких резисторов не ставиться. Или я что то не так понял ?
Топология может быть и звездой. Это не запрещено. Тогда терминаторы должны быть на каждом конце. Сопротивление должно быть подобрано по минимуму отражения (в принципе равно волновому сопротивлению провода, но надо учитывать и длину и сопротивление самого провода, если он длинный или короткий :) ), а у "лапши" оно явно не 120 Ом (у вас точнее терминатор = 88.695652 Ом без учета внутренних сопротивлений микросхемы драйвера, что мало и при нескольких таких устройствах посадит сигнал) :)
По этому, чтобы удовлетворить всё, включая безолаберность, проще поставить завышенное сопротивление, чем ничего. Тогда работать будет всегда и без терминаторов и с ними (внешними). Про защиту линии скоростными варисторами (с малыми емкостями), или специальными защитными сборками c диодами и стабилитронами-варисторами, я и не говорю - не тот класс устройства и его цена... а то ещё и громоразрядники :)
 
Последнее редактирование:

pvp

New member
Уважаемый @pvvx!
Огромное спасибо за Ваши труды. Отчасти, из-за Ваших наработок обратил внимание на ESP8266 в принципе.

К сожалению, у меня не собирается esp8266web v0.5.7a (v0.4.5 и 0.5.4 успешно собирал и пробовал в железе). В процессе сборки в конце концов возникают ошибки, описанные на пятой странице в сообщении №97 @Alex'ом.

А начинается всё с того, что не определена ф-я wDev_Set_Beacon_Int. Ну а дальше - как снежный ком (куча неопределённых вызовов). У меня создалось впечатление, что не подключена или не собрана какая-то библиотека. И заканчивается вот этим:

collect2.exe: error: ld returned 1 exit status
../Makefile:289: recipe for target '.output/eagle/image/eagle.app.v6.out' failed
mingw32-make[1]: *** [.output/eagle/image/eagle.app.v6.out] Error 1
mingw32-make[1]: Leaving directory 'C:/ESP8266/esp8266web-0.5.7a/app'
C:/ESP8266/esp8266web-0.5.7a/Makefile:238: recipe for target '.subdirs' failed
mingw32-make.exe: *** [.subdirs] Error 2

Лог прилагаю.

Спасибо.
 

Вложения

MagISTRa

New member
@pvvx
Спасибо за работу над устройством - новая прошивка не собирается :(
(
wifi.c:(.irom0.text+0x2b7): undefined reference to `wifi_fpm_do_wakeup'

wifi.c:(.irom0.text+0x2bd): undefined reference to `wifi_fpm_close'

collect2.exe: error: ld returned 1 exit status

../Makefile:289: recipe for target '.output/eagle/image/eagle.app.v6.out' failed

mingw32-make[1]: *** [.output/eagle/image/eagle.app.v6.out] Error 1

mingw32-make[1]: Leaving directory 'C:/Users/Admin/workspace/Web_Base/app'

C:/Users/Admin/workspace/Web_Base/Makefile:238: recipe for target '.subdirs' failed

mingw32-make.exe: *** [.subdirs] Error 2
 
Последнее редактирование:

pvvx

Активный участник сообщества
новая прошивка не собирается :(
Где-то проблема. Счас погляжу...
В Web_Base\app\sdklib\Makefile:
ADDLIBS_libsdk = \
libmgcc.a \
libmmain.a \
libmphy.a \
libpp.a \
libmwpa.a \
libcrypto.a \
libnet80211.a

Сменил в git -> esp8266web/Makefile at master · pvvx/esp8266web · GitHub
Пытался "оптимизнуть" libpp.a, выкинув лишнее, но не доделал, а в makefile сменил. Так и попала в git, а либа нет :) Старую пока надо.

Просьба протестировать на работу "транзакторы" и запросы с TCP на шину RS-485 в версии 0.5.7a. Не останавливается ли поток этих запросов? К сожалению пока нет времени этим заняться вплотную... проверил как смог, но всё не возможно никогда. Я там всё перекопал по новому в rs485drv.c, т.к. старая версия была с ошибками и кривая (в алго). В новой алго упростил (не надо там многое для данной реализации) и вроде должно работать.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Ещё раз к вопросу:
Скажите, а ограничение в 10 транзакторов, чем то обусловлено или можно увеличить их колличество?
Исходники же даны. Меняйте, но при большом их кол-ве в активном состоянии больше расход памяти, т.к. они генерируют запрос в "heap" и для 10 транзакторов там может быть очередь в 10 запросов с телом запроса и заголовком...
 

pvvx

Активный участник сообщества
Последнее редактирование:

MagISTRa

New member
Я же не знаю, чем вы пользуетесь - компиляцией
Как то не получаеться
Скомпилировал - прошил - уставки по ModBus меняешь - делаем сохранить - не сохраняются.
Как то не могу поставить на тест. старые 2 версии работают хорошо.
Новая компилиться без проблем - WebBin - собирается- его я так понимаю отдельно надо проливать.
И как то не работает. Может руки у меня кривоваты.
 

pvvx

Активный участник сообщества
Как то не получаеться
Скомпилировал - прошил - уставки по ModBus меняешь - делаем сохранить - не сохраняются.
Как то не могу поставить на тест. старые 2 версии работают хорошо.
Если не справиться с компиляцией, то есть же готовые прошивки в Releases · pvvx/esp8266web · GitHub
Берете fullflash_and_webfs_057a.zip, в нем webbin\fullflash_modbusrs485.bin и прошиваете. В данном пакете есть и файлы для Web диска и их сборщик.
Новая компилиться без проблем - WebBin - собирается- его я так понимаю отдельно надо проливать.
А это как вам нравится. Отдельно, через http://192.168.4.1/fsupload надо заливать только на flash больше 512 килобайт. И то, каждый заливает свои файлы, т.к. имеющиеся в пакете HTM - это просто примеры...

Не ясно, зачем вам самому компилировать, если пока в этом плаваете?
Инструкцию для игры в компилятор предлагаете писать? :)
Вот:
1) Скачиваете с гит проект в *.zip
2) Распаковываете
3) В Eclipse от UDK экспортируете проект в ваш workspace
4) Открываете в проекте include/user_config.h, меняете [HASHTAG]#define[/HASHTAG] PROGECT_NUMBER 0 на [HASHTAG]#define[/HASHTAG] PROGECT_NUMBER 1.
5) Запускаете make_webfs_rs485.bat в корне проекта.
6) Для надежности жмете "clobber" в окне "Make Target" Eclipse к данному проекту
7) Жмете "all" в окне "Make Target" Eclipse.
8) Когда странслируется, жмете Flash All там-же и пошиваете. Номер COM порта меняется в Makefile в корневой папке проекта в первых строчках.

Всё. Теперь представляете сколько это может породить дополнительных вопросов от играющих в игру "я компилирую"? :)
Так-же есть ещё много нюансов. Например желательно сменить установки "include" в/для среды Eclipse на название своего проекта:
Eclipse_include.gif
И ещё много-много всяких мелочей... Игра интересная... :) Но обучения она не несет.:(
 
Последнее редактирование:

Dito85

New member
Тестирую уже третьи сутки, два транзактора, скорость опроса 4 раза в секунду. Ни одной ошибки нет. Зависаний тоже не смог повторить, всё работает отлично! Не плохо было бы отслеживать обрыв связи со Slave-ом не счетчиком ошибок, а взведением бита (например, три посылки подряд без ответа, взводим бит. Ответ получен - сбрасываем бит. И так к каждому транзактору). Просто на уровне скады гораздо удобнее отслеживать бит, а не обрабатывать счетчик ошибок.
 

pvvx

Активный участник сообщества
Не плохо было бы отслеживать обрыв связи со Slave-ом не счетчиком ошибок, а взведением бита (например, три посылки подряд без ответа, взводим бит. Ответ получен - сбрасываем бит. И так к каждому транзактору). Просто на уровне скады гораздо удобнее отслеживать бит, а не обрабатывать счетчик ошибок.
Мне кажется, что это безразлично и на вкус и цвет. Счетчик вкуснее - видно сколько ошибок. Передаете сброс в ноль, а через 3 секунды считываете, и если там 3*3 ошибки - значит slave умер или подлежит ремонту.
Команды битовых пересылок я пока в данной версии не делал. Наверное позже займусь.
Так-же нашел возможность появления ошибки в приеме TCP, но она не повязана с modbus TCP...
На счет времени работы без выпадения из сети, тот модуль со StartTime: 02.02.2016 12:53:14 так и работает. Но там устарело всё - старая SDK 1.4.2, много чего нет...
 
Последнее редактирование:

Dito85

New member
Мне кажется, что это безразлично и на вкус и цвет. Счетчик вкуснее - видно сколько ошибок. Передаете сброс в ноль, а через 3 секунды считываете, и если там 3*3 ошибки - значит slave умер или подлежит ремонту.
Как же будет видно сколько ошибок, если вы предлагаете каждые три секунды сбрасывать счетчик? А по поводу битовых пересылок, можно и слово по состоянию транзактора передавать, и даже передавать в него не только живой Slave или нет, но и код ошибок ModBus, будет более подробная диагностика состояния Slave.
 

pvvx

Активный участник сообщества
Как же будет видно сколько ошибок, если вы предлагаете каждые три секунды сбрасывать счетчик?
Это решение для частного случая - подобия вашего.
А по поводу битовых пересылок, можно и слово по состоянию транзактора передавать, и даже передавать в него не только живой Slave или нет, но и код ошибок ModBus, будет более подробная диагностика состояния Slave.
Да не то - команды протокола modbus: Read Coil Status, Read Discrete Inputs, Force Single Coil, Force Multiple Coils. Ничто не мешает их назначить на ту-же область памяти с нуля, но будет работать как битовая, все первые 4096 ячеек.
А специализированные вещи, типа состояний slave я делать пока не буду. Исходники есть для данного случая и каждый решает такие вопросы в них сам, т.к. это адаптация под конкретное внешнее ПО, а не общий случай. Мне, к примеру, вообще другое там надо под свой проект, но нужно ли это другим? Придумайте универсальное решение - тогда и будем думать вставлять или нет. Незачем загромождать проект - там и так в web сервере уже свалка :)
 
Последнее редактирование:

DimonBiya

New member
Здравствуйте. Не до конца понял. Возможно ли реализовать подобный вариант, но при этом по WIFI эмулировать панель оператора? rs485 не нужен.
 

pvvx

Активный участник сообщества
Здравствуйте. Не до конца понял. Возможно ли реализовать подобный вариант, но при этом по WIFI эмулировать панель оператора? rs485 не нужен.
Не до конца понял ваши вопросы.
Если внешний мастер на TCP и управляет данными в ESP по Modbus TCP, то эти данные доступны для вывода на web интерфейс.
 
Сверху Снизу