ModBus TCP/IP
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
ModBus TCP/IP
[ref]garant[/ref], имхо, не взлетит, ресурсов крайне мало в ардуине для такого рода задач. Не зря выносят обработку сетевых протоколов на отдельные платы. Вариант использовать мост TCP-RTU для этого тоже нужен атмега 2560, так как 328 не вытягивает большого количества тегов из-за малого объёма памяти.
ModBus TCP/IP
Добрый Уважаемые гуру данного форума!
Подскажите кто сталкивался или в курсе данной проблемы!
Готовлю проект по удаленному мониторингу объекта. Обмен данными происходит по протоколу modbus TCP.
В качестве мастера использую мега+w5100+дисплей 2004+ энкодер.
меню собранно по принципу "красивое меню" с данного форума.
Как только начинаю подключать подключать теги,данные приходят, но резко пропадает отзывчивость энкодера, и меню не возможно управлять.
по отдельности все работает нормально. Скетч занимает 20% памяти меги.
Что это? нехватка оперативной памяти? или что другое?
Подскажите кто сталкивался или в курсе данной проблемы!
Готовлю проект по удаленному мониторингу объекта. Обмен данными происходит по протоколу modbus TCP.
В качестве мастера использую мега+w5100+дисплей 2004+ энкодер.
меню собранно по принципу "красивое меню" с данного форума.
Как только начинаю подключать подключать теги,данные приходят, но резко пропадает отзывчивость энкодера, и меню не возможно управлять.
по отдельности все работает нормально. Скетч занимает 20% памяти меги.
Что это? нехватка оперативной памяти? или что другое?
-
- Полковник
- Сообщения: 4016
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 168 раз
ModBus TCP/IP
Точно дисплей тормозит - вернее его библиотека. Может еще какие-то библиотеки в которых используется оператор delay() (например DS1820 - 1,2 сек, DHT11, DHT22, HC-SR04).
Вывод одной строки Lcd на скорости шины i2c 100кгц занимает около 30мс, четырех строк длиной 20 символов 122мс.
Вывод одной строки Lcd на скорости шины i2c 400кгц занимает около 12мс, четырех строк длиной 20 символов 49мс.
Вывод одной строки Lcd на скорости шины i2c 600кгц занимает около 10мс, четырех строк длиной 20 символов 39мс.
По умолчанию библиотека Wire.h устанавливает скорость 100кГц.
Есть другие библиотеки для Arduino и адаптированные под FLProg, но при их использовании нужно использовать дополнительный метод, обеспечивающий параллельно выполнение задач.
Это не сложно и такая библиотека с блоком под FLProg тоже есть.
Вывод одной строки Lcd на скорости шины i2c 100кгц занимает около 30мс, четырех строк длиной 20 символов 122мс.
Вывод одной строки Lcd на скорости шины i2c 400кгц занимает около 12мс, четырех строк длиной 20 символов 49мс.
Вывод одной строки Lcd на скорости шины i2c 600кгц занимает около 10мс, четырех строк длиной 20 символов 39мс.
По умолчанию библиотека Wire.h устанавливает скорость 100кГц.
Есть другие библиотеки для Arduino и адаптированные под FLProg, но при их использовании нужно использовать дополнительный метод, обеспечивающий параллельно выполнение задач.
Это не сложно и такая библиотека с блоком под FLProg тоже есть.
Последний раз редактировалось ecoins 19 авг 2018, 09:59, всего редактировалось 2 раза.
ModBus TCP/IP
На самом мастере датчиков никаких нет, только дисплей и энкодер. тормозить начинает именно тогда, когда подключаю хоть один тег modbus TCP.
Касаемо библиотеке LCD, использую блок LCD Русский Автор Слимпер
-
- Полковник
- Сообщения: 4016
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 168 раз
ModBus TCP/IP
Вот эта библиотека и тормозит. Так как я описал выше.
Можете сами проверить. Сделайте блок пользовательский micros() - на выходе блока значение функции micros();
Запомните результат перед и после вывода на Lcd, вычислите разницу и посмотрите это значение (вывести можно на терминал или на тот же LCD).
Можете сами проверить. Сделайте блок пользовательский micros() - на выходе блока значение функции micros();
Запомните результат перед и после вывода на Lcd, вычислите разницу и посмотрите это значение (вывести можно на терминал или на тот же LCD).
ModBus TCP/IP
Дисплей подключен на прямую, без i2c расширителя
А можете тыкнуть пальцем или ткнуть носом, а то поиск по форуму не помогает мне...ecoins писал(а): 19 авг 2018, 07:23
Есть другие библиотеки для Arduino и адаптированные под FLProg, но при их использовании нужно использовать дополнительный метод, обеспечивающий параллельно выполнение задач.
Это не сложно и такая библиотека с блоком под FLProg тоже есть.
Пока воткнул дополнительно к меги-уно с подключенный w5100?, т.с. разделил задачи, Уно только получает данные с модбас, а мега отображает на экране и все остальное...
-
- Полковник
- Сообщения: 4016
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 168 раз
ModBus TCP/IP
Чтобы передать один байт на Lcd по 4-х битной шины нужно выполнить четыре транзакции.
Так и написана библиотека. А между транзакциями стоит все тот же оператор delay().
Еще раз рекомендую найти временной тормоз - можно как написал выше, можно через логический анализатор.
Так и написана библиотека. А между транзакциями стоит все тот же оператор delay().
Еще раз рекомендую найти временной тормоз - можно как написал выше, можно через логический анализатор.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость