Что значит "нажатии и отжатии"? По щелчку запустить пульсатор на 2-3 секунды?
Или же нужна фиксация?
Что значит "нажатии и отжатии"? По щелчку запустить пульсатор на 2-3 секунды?
Или же нужна фиксация?
Спасибо.
Неточно написал. Правильнее при нажатии(или по щелчку, что тоже самое), то есть по переднему или заднему фронту запускать пульсатор.
ФБ "Выдержка времени", ФБ "Пульсатор" и событие с логическим И.
Спасибо.
Данные точно были, возможно я чего-то напутал со способом формирования. В любом случае я просто удалил отчет и создал с нуля, все появилось.
В целом сейчас решаю такую задачу, может подскажете чего: есть архивируемое мгновенное значение объёма в ёмкости, нужно высчитать расход за период. При это за этот же период ёмкость могут неоднократно дозаправлять. На данный момент я высчитываю мгновенный расход через дифференциал давления (приращение одна секунда). Хотел бы высчитывать дифференциал за бОльший период, но тогда он и будет считаться один раз за этот период, не вижу способа считать, скажем, каждую секунду дифференциал за последние десять секунд. Ставить 10 ФБ дифференциалов и запускать каждый следующий с задержкой в одну секунду - мракобесие.
Отрицательный дифференциал - мгновенный расход топлива, положительный дифференциал - заправка ёмкости, разношу в две разные переменные, отрицательный беру по модулю. Далее в отчете считаю интеграл расхода за период и в принципе получаю полный расход за период. Погрешность - 35 литров на 8 тонн. Правильно ли я в целом делаю, нет ли более простого способа/способа с меньшей погрешностью посчитать расход за период?
В принципе начало и конец каждой заправки у меня фиксируются в архивируемых переменных, так что можно расход за период посчитать как
(Vstart - Vi1) + (Vj1 - Vi2) + (Vj2 - Vi3) + ... + (Vjn - Vin+1) + (Vjn+1 - Vstop), где
Vstart - объём на момент старта выборки
Vjn - объём на момент завершения n-ной заправки
Vin+1 - объём на момент начала n+1-ой заправки
Vstop - объём на момент завершения выборки
При этом член (Vstart - Vi1) не существует, если Tstart приходится на период заправки и член (Vjn+1 - Vstop) не существует, если Tstop приходится на период заправки.
Для наглядности прикладываю картинку.
Объём.jpg
Я подозреваю, что логику подобной сложности можно реализовать в отчете, но не имею ни малейшего представления как это сделать. Это ведь не фильтрация по условию, буду благодарен, если подскажете, в какую сторону копать.
Штатными средствами редактора отчетов задачу точно решить не получится - нужно писать скрипты, находить метки времени когда начиналась заправка, когда заканчивалась и т.д.
Вам нужно найти почасовой расход или просто общий за период? Если общий, то можно обойтись без отчета и решить задачу просто скриптом.
Спасибо.
Я уже нахожу штатными средствами самой мастерСкада метки времени начала и конца заправки. На конец каждой заправки у меня обновляются (перезаписываются) три переменные - время начала заправки, время конца заправки, объём заправки (то есть они сами принадлежат одной временной метке). Я вывожу отчетом построчно начало заправки/конец заправки/объем заправки на каждую заправку.
Мне нужно находить расход за произвольный период. Насколько я понимаю все необходимые данные уже есть (метки времени, архивы мгновенного объёма и мгновенного расхода) и редактор отчетов поддерживает скрипты на C#, осталось понять где вбивать указанные в предыдущем посте условия.
Скриптом вне отчета не хочу делать, потому что надо будет разбираться с работой с переменными временного формата и загрузкой/выгрузкой данных из архива, а хотелось бы пока обойтись малой кровью.
По дифференциалу я правильно понял, что нет возможности находить его каждую секунду за предыдущие n секунд? Скользящий дифференциал или что-нибудь вроде?
Я полностью сформулировал в предыдущем посте, но могу повторить:
(Vstart - Vi1) + (Vj1 - Vi2) + (Vj2 - Vi3) + ... + (Vjn - Vin+1) + (Vjn+1 - Vstop), где
Vstart - объём на момент старта выборки (имеется периодический архив #1 объемов, нужно взять первый объем в выборке + определить, находится он перед началом или концом заправки)
Vjn - объём на момент завершения n-ной заправки (имеется архив #2 объёмов на момент завершения заправок с временными отметками завершения заправок)
Vin+1 - объём на момент начала n+1-ой заправки (имеется архив #3 [#4] объёмов на момент начала заправок с временными метками на момент начала или завершения заправок [два архива, можно так или так записывать])
Vstop - объём на момент завершения выборки (имеется архив #1 объемов, нужно взять последний объем в выборке + определить, находится он перед началом или концом заправки)
При этом член (Vstart - Vi1) не существует, если Tstart приходится на период заправки и член (Vjn+1 - Vstop) не существует, если Tstop приходится на период заправки. (простое логическое условие)
Собственно не нужно за меня расписывать всю формулу внутри отчета, нужно только показать, где там такие вещи можно делать.
Стройте отчет по изменению, у которого параметр "Основной" будет включен только у колонки статуса залива жидкости (клапана). Когда значение колонки True - в этот момент началась заливка жидкость, когда False - закончилась.
Затем с помощью событий бэнда выполняйте обработку остальных колонок - значения уровня.
Чтобы обратится к предыдущему значению используйте функцию Previous из раздела PrintState. Пример оформления функции :
{Previous(ИсточникДанных1,"Время")}
ИсточникДанных1 - имя источника, "Время" - имя колонки.
Спасибо.