Страница 1 из 3

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

Добавлено: 30 янв 2017, 09:09
Siberian
Происходит остановка генератора на время опроса датчиков.
Особенно проявляется с DHT22.
Проверял в версиях FLProg 2.1.1 и 2.3.

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

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

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

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

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

Добавлено: 30 янв 2017, 19:57
Siberian
Для этого нужно отдельный блок на C для FLProg...
В стандартном варианте, конечно очень ограничивает возможности с использованием генераторов...

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

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

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

Добавлено: 31 янв 2017, 12:26
Слимпер
Siberian, А Что вам нужен за генератор, который не должен останавливаться?Что он должен делать?

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

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

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

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

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

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

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

Получился бы своеобразный диспетчер задач, как в RTOS, но с ручной настройкой.

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

Добавлено: 31 янв 2017, 13:19
Слимпер
BorodaЗдесь  Автор писал

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

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

Добавлено: 31 янв 2017, 14:05
support
Уже готово. что будет - можно посмотреть здесь

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

Добавлено: 31 янв 2017, 14:42
Boroda
Слимпер, о как, не заметил!
support, Спасибо огромное!

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 01 фев 2017, 09:19
Boroda
Ну смотря где система используется. Если в комнате стоит, то 15 минут за глаза. Если в санузле, то минуты хватит.

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

Добавлено: 01 фев 2017, 10:38
Siberian
Инкубатор.
Период опроса не реже, чем раз в секунду.

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

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

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

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

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

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

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

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

Добавлено: 01 фев 2017, 12:16
support
Ну с DHT ситуация ещё хуже. Его опрос занимает 0.8 секунды. Попробуйте HTU-21. Он опрашивается намного быстрее, да и точнее он.