Тормозит modbus

Нужна помощь в оптимизации modbas

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#1

Сообщение Renigant » 05.11.2019{, 09:35}

Добрый день, создаю проект умного дома на базе Мега2560 с применением modbus tcp , в нем уже используется 32 тэга, все работает НО скорость опроса очень маленькая при изменении значения обновление происходит за 5-7 секунд и бывает пропадают данные одного из параметров до следующего опроса. Кто сталкивался с этим, какие способы решения есть?
FL_автоматика котельной.flp
(1.39 МБ) 59 скачиваний

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Тормозит modbus

#2

Сообщение Sancho » 05.11.2019{, 10:06}

Renigant, Есть правило, у меня например, - те данные, которые не меняются, например входные температуры и иже с ними, располагаю в InputReg. То-же и с цифровыми входами - свой огород. Считаю это правильным.
Попробуйте.
И, кстати, Вы не указали, кто ведёт опрос.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#3

Сообщение Renigant » 05.11.2019{, 10:16}

Опрос ведет io broker, попробую вечерком изменить на InputReg.

Аватара пользователя
ДедОк
Рядовой
Сообщения: 23
Зарегистрирован: 31.10.2016{, 13:48}
Репутация: 3
Откуда: Славута

Тормозит modbus

#4

Сообщение ДедОк » 05.11.2019{, 10:28}

Прежде всего не используй целый байт на одну переменную bool. используя блоки записи и чтения бита, или преобразователи битов в байт и байта в биты ты можешь запихнуть в один тег все свои битовые данные. Избавься от float. Контроллеру очень тяжело работать с этим типом данных. проще всего умножать число на 10 или 100 на передающей стороне, и соответственно делить на то же число на приемной стороне. Это в случае крайней необходимости. Старайся работать без float. Желательно привести все теги к одному виду, оптимально - int16. ну, и если то ускорение, что ты в итоге получишь будет недостаточным, то готовься использовать более мощную платформу, типа Arduino Due

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#5

Сообщение Renigant » 05.11.2019{, 10:38}

ДедОк, в io brokere не работают coils, поэтому я использую байт, а вот как разложить байт на биты в iobroker я не знаю.

Аватара пользователя
ДедОк
Рядовой
Сообщения: 23
Зарегистрирован: 31.10.2016{, 13:48}
Репутация: 3
Откуда: Славута

Тормозит modbus

#6

Сообщение ДедОк » 05.11.2019{, 10:55}

в скаде своей можешь разложить байт на биты?

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#7

Сообщение Renigant » 05.11.2019{, 10:59}

Вот сейчас с этим разбираюсь, единственное полноценно опробовать смогу только завтра с утра. Так что результаты завтра.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Тормозит modbus

#8

Сообщение Ingwar » 05.11.2019{, 11:23}

ДедОк писал(а):
05.11.2019{, 10:28}
Желательно привести все теги к одному виду, оптимально - int16. ну, и если то ускорение, что ты в итоге получишь будет недостаточным, то готовься использовать более мощную платформу, типа Arduino Due
Тема с проблемой большого кол-ва переменных (более 30) в модбас, уже поднималась. Делал проект, в котором было 54 тега. Опрос вела панель оператора.
Танцы с бубнами были более месяца. Разные контроллеры (328, 644, 2560, DUE), разные скада (на ПК, Каскада, Weintek), все без толку, если переменных 30+.
Проблему решил упаковкой всех койлов в инт на стороне контроллера и распаковкой их в скаде. Александр предлагал увеличить буфер в порту, но руки не дошли - не пробовал этот вариант.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#9

Сообщение Renigant » 05.11.2019{, 11:30}

Проблему решил упаковкой всех койлов в инт на стороне контроллера и распаковкой их в скаде
Как Вы это реализовали, я видел только блок Byte->Bits и обратно.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Тормозит modbus

#10

Сообщение Sancho » 05.11.2019{, 11:36}

Renigant писал(а):
05.11.2019{, 11:30}
Как Вы это реализовали, я видел только блок Byte->Bits и обратно.
Это он и есть. Потом другой блочок два байта -> word. Они в "конвертация типов".
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Тормозит modbus

#11

Сообщение ecoins » 05.11.2019{, 12:25}

В Вашем проекте две платы, которые выполняются последовательно без каких-либо условий - выполнилась первая плата, затем вторая и сразу первая.
В первой плате у Вас:
шесть 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 при таком подходе к проектированию проблематично.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#12

Сообщение Renigant » 05.11.2019{, 13:22}

Товарищ лейтенант ecoins, прошу совета по оптимизации т.к. проект будет только разрастаться и хочется избежать осложнений, чего следует избегать, что необходимо откорректировать?

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Тормозит modbus

#13

Сообщение ecoins » 05.11.2019{, 14:13}

Откорректироваить не получится - надо "правильные" блоки DS18B20, DHT, другие.
Необходимо разбить проект на 8-10 задач, задачи вызывать по мере необходимости, например используя "Диспетчер задач".
Об этом несколько последних постов в ветке "Разработки ecoins" - но пока прочитавших их они не понятны.

Аватара пользователя
ДедОк
Рядовой
Сообщения: 23
Зарегистрирован: 31.10.2016{, 13:48}
Репутация: 3
Откуда: Славута

Тормозит modbus

#14

Сообщение ДедОк » 05.11.2019{, 15:03}

Блоки ТА12 выкинь, и просто читай АЦП, выбирай максимальный сигнал, и раз в секунду преобразовывай его, передавай в регистр, и сбрасывай его

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

Тормозит modbus

#15

Сообщение Renigant » 05.11.2019{, 16:01}

ДедОк, получается используем компоратор и массив и при условии, что последующее число больше предыдущего записываем его в массив и каждую секунду его отправляем и сбрасываем

Аватара пользователя
ДедОк
Рядовой
Сообщения: 23
Зарегистрирован: 31.10.2016{, 13:48}
Репутация: 3
Откуда: Славута

Тормозит modbus

#16

Сообщение ДедОк » 05.11.2019{, 16:45}

да там и массива не нужно просто используй функцию MAX и переменную одну, для хранения... :)

Отправлено спустя 19 минут 31 секунду:
2019-11-05_155941.png
2019-11-05_155941.png (5.18 КБ) 774 просмотра
что то похожее должно получиться (без учета обработки данных)

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

Тормозит modbus

#17

Сообщение User8 » 05.11.2019{, 17:23}

Renigant, используй mqtt, он есть в iobroker’е и быстро работает в отличие от модбаса. viewtopic.php?f=71&t=4276

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Тормозит modbus

#18

Сообщение ecoins » 05.11.2019{, 18:14}

Как mqtt может быстрее ModBus работать, если там посылки гарантированно длиннее?
ModBus очень компактный и достаточно надежный протокол.
Бороться с "тормозами" искать без вскрытие источника проблемы - это как борьба с "призраком".
Последний раз редактировалось ecoins 05.11.2019{, 21:31}, всего редактировалось 1 раз.

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

Тормозит modbus

#19

Сообщение User8 » 05.11.2019{, 18:19}

ecoins, вот так, моментально все.

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Тормозит modbus

#20

Сообщение edyapd » 05.11.2019{, 19:18}

ecoins писал(а):
05.11.2019{, 14:13}
Откорректироваить не получится - надо "правильные" блоки DS18B20, DHT, другие.
Необходимо разбить проект на 8-10 задач, задачи вызывать по мере необходимости, например используя "Диспетчер задач".
Есть замечательная возможность, показать на практике, как правильно делать проекты без тормозов.
Но увы, похоже мы остаёмся при
ecoins писал(а):
05.11.2019{, 14:13}
но пока прочитавших их они не понятны.

Ответить

Вернуться в «Спросить у знатоков»