Тормозит modbus
Тормозит modbus
Добрый день, создаю проект умного дома на базе Мега2560 с применением modbus tcp , в нем уже используется 32 тэга, все работает НО скорость опроса очень маленькая при изменении значения обновление происходит за 5-7 секунд и бывает пропадают данные одного из параметров до следующего опроса. Кто сталкивался с этим, какие способы решения есть?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Тормозит modbus
[ref]Renigant[/ref], Есть правило, у меня например, - те данные, которые не меняются, например входные температуры и иже с ними, располагаю в InputReg. То-же и с цифровыми входами - свой огород. Считаю это правильным.
Попробуйте.
И, кстати, Вы не указали, кто ведёт опрос.
Попробуйте.
И, кстати, Вы не указали, кто ведёт опрос.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Тормозит modbus
Прежде всего не используй целый байт на одну переменную bool. используя блоки записи и чтения бита, или преобразователи битов в байт и байта в биты ты можешь запихнуть в один тег все свои битовые данные. Избавься от float. Контроллеру очень тяжело работать с этим типом данных. проще всего умножать число на 10 или 100 на передающей стороне, и соответственно делить на то же число на приемной стороне. Это в случае крайней необходимости. Старайся работать без float. Желательно привести все теги к одному виду, оптимально - int16. ну, и если то ускорение, что ты в итоге получишь будет недостаточным, то готовься использовать более мощную платформу, типа Arduino Due
Тормозит modbus
ДедОк, в io brokere не работают coils, поэтому я использую байт, а вот как разложить байт на биты в iobroker я не знаю.
Тормозит modbus
Вот сейчас с этим разбираюсь, единственное полноценно опробовать смогу только завтра с утра. Так что результаты завтра.
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Тормозит modbus
Тема с проблемой большого кол-ва переменных (более 30) в модбас, уже поднималась. Делал проект, в котором было 54 тега. Опрос вела панель оператора.ДедОк писал(а): 05 ноя 2019, 10:28 Желательно привести все теги к одному виду, оптимально - int16. ну, и если то ускорение, что ты в итоге получишь будет недостаточным, то готовься использовать более мощную платформу, типа Arduino Due
Танцы с бубнами были более месяца. Разные контроллеры (328, 644, 2560, DUE), разные скада (на ПК, Каскада, Weintek), все без толку, если переменных 30+.
Проблему решил упаковкой всех койлов в инт на стороне контроллера и распаковкой их в скаде. Александр предлагал увеличить буфер в порту, но руки не дошли - не пробовал этот вариант.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Тормозит modbus
Как Вы это реализовали, я видел только блок Byte->Bits и обратно.Проблему решил упаковкой всех койлов в инт на стороне контроллера и распаковкой их в скаде
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Тормозит modbus
Это он и есть. Потом другой блочок два байта -> word. Они в "конвертация типов".Renigant писал(а): 05 ноя 2019, 11:30 Как Вы это реализовали, я видел только блок Byte->Bits и обратно.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Тормозит modbus
В Вашем проекте две платы, которые выполняются последовательно без каких-либо условий - выполнилась первая плата, затем вторая и сразу первая.
В первой плате у Вас:
шесть DS18B20 - в лучшем случае это задержка 30мс, но и возможно 6 сек (кажется в стандартном блоке так и есть) .
один DHT - это от 5 мс, до 2.5 сек. Зависит от типа датчика и используемой библиотеки.
один опрос аналогового сигнала - то же не быстрая операция.
Общая задержка в пределах 40 мс минимум, 8-9 сек максимум.
Во второй плате у Вас:
пользовательский блок ТА12 - мельком посмотрел
код
--------------------------
start_time = millis();
while((millis()-start_time) < 1000)
{
readValue = analogRead(sensorTA12);
if (readValue > maxValue)
{
maxValue = readValue;
}
}
----
дает задержку 1 сек.
================================================
На круг выходит задержка до 10 сек.
Это и является причиной.
Использовать MоdBus при таком подходе к проектированию проблематично.
В первой плате у Вас:
шесть DS18B20 - в лучшем случае это задержка 30мс, но и возможно 6 сек (кажется в стандартном блоке так и есть) .
один DHT - это от 5 мс, до 2.5 сек. Зависит от типа датчика и используемой библиотеки.
один опрос аналогового сигнала - то же не быстрая операция.
Общая задержка в пределах 40 мс минимум, 8-9 сек максимум.
Во второй плате у Вас:
пользовательский блок ТА12 - мельком посмотрел
код
--------------------------
start_time = millis();
while((millis()-start_time) < 1000)
{
readValue = analogRead(sensorTA12);
if (readValue > maxValue)
{
maxValue = readValue;
}
}
----
дает задержку 1 сек.
================================================
На круг выходит задержка до 10 сек.
Это и является причиной.
Использовать MоdBus при таком подходе к проектированию проблематично.
Тормозит modbus
Товарищ лейтенант ecoins, прошу совета по оптимизации т.к. проект будет только разрастаться и хочется избежать осложнений, чего следует избегать, что необходимо откорректировать?
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Тормозит modbus
Откорректироваить не получится - надо "правильные" блоки DS18B20, DHT, другие.
Необходимо разбить проект на 8-10 задач, задачи вызывать по мере необходимости, например используя "Диспетчер задач".
Об этом несколько последних постов в ветке "Разработки ecoins" - но пока прочитавших их они не понятны.
Необходимо разбить проект на 8-10 задач, задачи вызывать по мере необходимости, например используя "Диспетчер задач".
Об этом несколько последних постов в ветке "Разработки ecoins" - но пока прочитавших их они не понятны.
Тормозит modbus
Блоки ТА12 выкинь, и просто читай АЦП, выбирай максимальный сигнал, и раз в секунду преобразовывай его, передавай в регистр, и сбрасывай его
Тормозит modbus
[ref]ДедОк[/ref], получается используем компоратор и массив и при условии, что последующее число больше предыдущего записываем его в массив и каждую секунду его отправляем и сбрасываем
Тормозит modbus
да там и массива не нужно просто используй функцию MAX и переменную одну, для хранения... 
Отправлено спустя 19 минут 31 секунду: что то похожее должно получиться (без учета обработки данных)

Отправлено спустя 19 минут 31 секунду: что то похожее должно получиться (без учета обработки данных)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Тормозит modbus
[ref]Renigant[/ref], используй mqtt, он есть в iobroker’е и быстро работает в отличие от модбаса. viewtopic.php?f=71&t=4276
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Тормозит modbus
Как mqtt может быстрее ModBus работать, если там посылки гарантированно длиннее?
ModBus очень компактный и достаточно надежный протокол.
Бороться с "тормозами" искать без вскрытие источника проблемы - это как борьба с "призраком".
ModBus очень компактный и достаточно надежный протокол.
Бороться с "тормозами" искать без вскрытие источника проблемы - это как борьба с "призраком".
Последний раз редактировалось ecoins 05 ноя 2019, 21:31, всего редактировалось 1 раз.
Тормозит modbus
Есть замечательная возможность, показать на практике, как правильно делать проекты без тормозов.ecoins писал(а): 05 ноя 2019, 14:13 Откорректироваить не получится - надо "правильные" блоки DS18B20, DHT, другие.
Необходимо разбить проект на 8-10 задач, задачи вызывать по мере необходимости, например используя "Диспетчер задач".
Но увы, похоже мы остаёмся при
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей