Остановка генератора на время опроса датчиков.

В данный форум Вы можете заносить найденные Вами ошибки.При добавления ошибки пожалуйста приложите файлик error.log который находится в папке с установленной программой
Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#1

Сообщение Siberian » 30.01.2017{, 09:09}

Происходит остановка генератора на время опроса датчиков.
Особенно проявляется с DHT22.
Проверял в версиях FLProg 2.1.1 и 2.3.

Добавлено (30.01.2017, 09:09)
---------------------------------------------
Так-же происходит остановка генератора в блоке "Меню" при использовании входов "+" и "-" с ускорением.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#2

Сообщение Boroda » 30.01.2017{, 19:21}

Ну это нормально, хоть генератор (ton/tof/симметр/ассиметр) и построен на внутреннем RealTime-счетчике, но обращение к блоку генератора, где сравнивается время, происходит только после того, как выполнится предыдущая часть программы. В данном случае медицина бессильна. Тут поможет только вручную код писать.

П.С. Я, например, делал опрос DS18B20 по одному биту в прерывании каждые 2мс, тут же показ очередного знакоместа динамической индикации, сканирование кнопок и расчет всех таймеров, применяемых в программе. Но это на ПИКе и программа текстом.

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#3

Сообщение Siberian » 30.01.2017{, 19:57}

Для этого нужно отдельный блок на C для FLProg...
В стандартном варианте, конечно очень ограничивает возможности с использованием генераторов...
Последний раз редактировалось Siberian 30.01.2017{, 19:58}, всего редактировалось 1 раз.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#4

Сообщение Boroda » 31.01.2017{, 10:03}

Для этого нужны блоки, заменяющие все кривые библиотеки и надо определьться со структурой программы, которая подойдет почти под все проекты. Но сами понимаете - это не реально.
     Если для динамической индикации, RS485 Modbus, DS18B20, NEC-IR, кнопок, АЦП, ЦифрФильтров, часов реального времени без DS1307 (одновременно работающих) подойдет способ прерывания 2мс и кучи маленьких подпрограмм, срабатывающих по флагам, то для опроса DHT22 надо использовать ногу с аппаратным прерыванием или таймером в режиме захвата, иначе RS485 и динамическая индикация будут работать некорректно, т.к. придется отключать все прерывания.
     Работу с граф. экранами от сотиков тоже надо разбивать на кусочки, начинаем заполнять, потом происходит прерывание по таймеру, далее надо пробежаться по всей программе и снова продолжить заполнять экран.
     Все датчики должны опрашиваться последовательно по таймеру. Все тяжелые преобразования Int_to_string, деления/умножения и т.д. должны отрабатывать только по изменению этого ИНТа, а не в каждом цикле и вначале программы инициализироваться. Дисплеи должны обновляться раз в секунду (защита от помех) или только по изменению выводимых данных (у меня это завязано на факт нажатия кнопок меню </>/+/-). Динамическая индикация у меня работает с буфером, закинул в него данные и оно там само крутится. И никаких Delay в программе, даже на 100 мкс.
Последний раз редактировалось Boroda 31.01.2017{, 10:18}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Остановка генератора на время опроса датчиков.

#5

Сообщение Слимпер » 31.01.2017{, 12:26}

Siberian, А Что вам нужен за генератор, который не должен останавливаться?Что он должен делать?

Просто я дела генератор импульсов на выходе (пине) и подсчет импульсов времени на прерываниях. 

А так Boroda, сейчас программа выполняется последовательно и некоторые операции занимают очень много времени.

Кстати в некоторых библиотеках умудряются в коде использовать паузы на несколько секунд, в шоке был когда это первый раз увидел.

Обойти это можно так как он писал выше или перенести критически важные операции в параллельный процесс, который можно реализовать только на прерываниях.

Опешите суть конкретной проблемы, может смогу подсказать или помочь чем.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#6

Сообщение Boroda » 31.01.2017{, 13:00}

Я тогда предлагал встроить в каждую плату "Условие выполнения". Выполнение платы по таймеру или по внешнему биту разрешения, который может подключаться к выходам лог. элементов в других платах. Но это не поддержали, мотивируя это тем, что есть ПользБлоки (ПБ). Но ПБ не поддерживают большинство датчиков, блоки EEPROM и т.д. (поддержка эта отключена, т.к. ПБ может использоваться несколько раз в программе).

Получился бы своеобразный диспетчер задач, как в RTOS, но с ручной настройкой.
Последний раз редактировалось Boroda 31.01.2017{, 13:03}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Остановка генератора на время опроса датчиков.

#7

Сообщение Слимпер » 31.01.2017{, 13:19}

BorodaЗдесь  Автор писал

Сейчас займусь (пока пару дней есть). В свойствах платы появится настройка условия выполнения платы, возможно циклическое выполнение, но это я ещё не продумал.

Аватара пользователя
support
Супермодератор
Сообщения: 1849
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 700
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Остановка генератора на время опроса датчиков.

#8

Сообщение support » 31.01.2017{, 14:05}

Уже готово. что будет - можно посмотреть здесь
Автор программы FLProg.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#9

Сообщение Boroda » 31.01.2017{, 14:42}

Слимпер, о как, не заметил!
support, Спасибо огромное!

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#10

Сообщение Siberian » 31.01.2017{, 17:34}

Слимпер писал(а):Siberian, А Что вам нужен за генератор, который не должен останавливаться?Что он должен делать?
Несколько плат с генератором.
Увеличение - уменьшение в менюшке, нарастание-убывание ШИМ, и т.д.
Проект большой, "костыли" не хочу вставлять...

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

Остановка генератора на время опроса датчиков.

#11

Сообщение OlegAn1962 » 31.01.2017{, 18:48}

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

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#12

Сообщение Siberian » 31.01.2017{, 19:52}

OlegAn1962 писал(а):А нельзя сделать один генератор, вывести с него сигнал на переменную, и в остальных платах пользоваться этой переменной?
Можно, путем деления-умножения, т.к. частота нужна разная.
Но всё дело в том, что тормозит хоть один, хоть пять генераторов одинаково. Остановка каждого по периоду опроса DHT22.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#13

Сообщение Boroda » 31.01.2017{, 23:24}

Siberian, реже опрашивать. Или как-то для этого датчика прерывание по ножке порта использовать, а там уже запускать таймер и длительность импульсов считать. Сам такое не напишу, с Atmel плохо знаком.

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#14

Сообщение Siberian » 01.02.2017{, 06:30}

Boroda писал(а):Siberian, реже опрашивать.
Реже опрашивать не целесообразно...

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#15

Сообщение Boroda » 01.02.2017{, 09:19}

Ну смотря где система используется. Если в комнате стоит, то 15 минут за глаза. Если в санузле, то минуты хватит.

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#16

Сообщение Siberian » 01.02.2017{, 10:38}

Инкубатор.
Период опроса не реже, чем раз в секунду.

Аватара пользователя
support
Супермодератор
Сообщения: 1849
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 700
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Остановка генератора на время опроса датчиков.

#17

Сообщение support » 01.02.2017{, 11:03}

Siberian писал(а):Период опроса не реже, чем раз в секунду.
Опрос DS18B20 занимает 0,4 секунды, и быстрее ни как. Так что почти половину времени контроллер будет заниматься опросом датчика. При необходимости частого опроса лучше использовать аналоговые датчики (например термосопротивление) с соответствующим масштабированием.
Автор программы FLProg.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Остановка генератора на время опроса датчиков.

#18

Сообщение Boroda » 01.02.2017{, 11:29}

А лучше tl431 + lm35/235/335, TC1047 или mcp9700. Вполне адекватные датчики. Только цифровой фильтр надо ставить. И внимательнее читайте PDF, некоторые датчики терпеть не могут на своем выходе конденсаторы, особенно 0,1мкФ. А вот с влажностью, придется повозиться - все аналоговые датчики термозависимые.

Добавлено (01.02.2017, 11:29)
---------------------------------------------
support писал(а):Опрос DS18B20 занимает 0,4 секунды
Это кривая библиотека. Первый прогон цикла программы должен быть послан запрос на измерение температуры и запуститься таймер, далее продолжаем выполнять программу. Как секунда прошла (таймер все время проверяется в цикле программы) запускаем запрос на чтение температуры и читаем ее, и далее опять выполняем программу. В этом случае общение с датчиком будет занимать время до несколько сотен микросекунд (при динамической индикации это проявляется как еле заметная вспышка одного из разрядов). Если опрос датчика частый (1..5 секунд) можно сделать еще хитрее. Сначала посылаем запрос на чтение температуры, читаем ее, а потом сразу же запрос на измерение. Тоже займет мало времени (меньше милисекунды). Но тут будет эффект "запаздывания" температуры. Я пишу и читаю по одному биту в прерывании по таймеру 2мс и там же обсчитываю все таймера.
Последний раз редактировалось Boroda 01.02.2017{, 11:42}, всего редактировалось 1 раз.

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Остановка генератора на время опроса датчиков.

#19

Сообщение Siberian » 01.02.2017{, 12:04}

support писал(а): При необходимости частого опроса лучше использовать аналоговые датчики (например термосопротивление) с соответствующим масштабированием.
Проблема именно с датчиком влажности, и как раз на время опроса датчика влажности и останавливается генератор...

Аватара пользователя
support
Супермодератор
Сообщения: 1849
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 700
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Остановка генератора на время опроса датчиков.

#20

Сообщение support » 01.02.2017{, 12:16}

Ну с DHT ситуация ещё хуже. Его опрос занимает 0.8 секунды. Попробуйте HTU-21. Он опрашивается намного быстрее, да и точнее он.
Автор программы FLProg.

Ответить

Вернуться в «Новые»