Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Формула подсчета времени работы
- В этой теме 23 ответа, 8 участников, последнее обновление 12 месяцев назад сделано
a80808.
-
АвторСообщения
-
12.03.2019 в 14:23 #11246
Mettall
УчастникПодскажите как реализовать такое выражение: Если значение канала Х > 50 тогда считать время работы(за сутки,месяц) в канал 1, если значение канала Х < 50 тогда считать время работы(за сутки,месяц) в канал 2. ???
-
Тема изменена 7 лет, 1 месяц назад пользователем
Mettall.
12.03.2019 в 16:32 #11248Romiros
УчастникВ чем считать время(минуты, секунды, часы)?
Принцип действия примерно такой
В справочнике формул создаете следующую формулу:public double CalcTime(int CnlNum1, int CnlNum2)
{
int cnlNum = Cnl>50?CnlNum1:CnlNum2;
double val = EncodeDate(DateTime.Now);
SetData(cnlNum, val, 1);
return Cnl;
}
В канале X ставите использовать формулу и пишите: CalcTime(1,2)При значении канала X>50 текущее время будет писаться в канал 1, если меньше 50 в канал 2.
Для расчета наработки нужно знать единицу наработки и использовать функции DayBeg() или MonthBeg()12.03.2019 в 16:39 #11249Mettall
Участниквремя в минутах!
12.03.2019 в 21:39 #11252Romiros
УчастникА Вам обязательно идти именно таким путем? Просто для вычисления разницы во времени понадобятся еще два канала, чтобы хранить предыдущее время переключения. Можно сделать проще. Пусть каналы 1 и 2 будут Минутные ТС. В них пишете следующие формулы:
для канала 1 — DayBeg()?0:Val(X)>50?Cnl+1:Cnl
для канала 2 — DayBeg()?0:Val(X)<=50?Cnl+1:Cnl
В результате каждую минуту будет прибавляться по 1 минуте в удовлетворяющий условию канал. В другом значение фиксируется. В начале дня в обоих каналах будет сброс на 0.
Тоже самое для месяца, только с MonthBeg().13.03.2019 в 10:43 #11256
MikhailМодераторДумаю, наиболее простой подход — поставить для каналов 1 и 2 тип Минутный ТИ и задать формулу как указано выше.
13.03.2019 в 13:14 #11262
baurУчастникУ меня вопрос насчет минутного счетчика по расчету времени наработки оборудование. Я буду считывать сигнал каждую минуту, если сигнал определен и 1 то прибавляем один в остальных случаях (статус 0 значение 1, статус 1 значение 0 и т.д.) ничего не делаем.
Как можно реализовать формулу?
13.03.2019 в 13:26 #11264
baurУчастникя видел формулу Val(номер канала)>0?Cnl+1:Cnl, но там учтен статус
13.03.2019 в 13:43 #11270
MikhailМодераторЕсли точность расчёта наработки не супер критична, то заведите отдельный канал типа Минутный ТИ. Его формула рассчитывается раз в минуту. Что именно написать в формуле минутного канала, зависит от того, как Вы определяете, что оборудование в данный момент включено. Это может быть как значение, например, ток > 0, так и статус > 0, который означает, что прибор отвечает на запросы.
23.11.2019 в 20:13 #14179KoliaMor
Участник24.11.2019 в 15:43 #14182
MikhailМодераторСпасибо )
14.04.2025 в 18:27 #38076alexandr1803
УчастникДобрый вечер, как адаптировать эту формулу на значение канала счетчика (если значение канала 1 статично в течении минуты то считаем время в канале 2, если значение меняется хоть раз , то считаем время в канале 3)
14.04.2025 в 19:02 #38077
manjey73УчастникНапишите более подробно, что вы хотите?
Потому что не совсем ясно, как можно считать два разных канала одновременно?
Типа если канал меняется, то установка работает, а если статична, то считаем простой?-
Ответ изменён 12 месяцев назад пользователем
manjey73.
14.04.2025 в 19:34 #38079alexandr1803
УчастникСовершенно верно.
14.04.2025 в 19:39 #38080alexandr1803
УчастникPrevVal(n) double Предыдущее значение канала n
Может можно с помощью этого как посчитаь. Опрос счетчика раз в минуту Val(n)-PrevVal(n) если равно 0 то простой если не равно 0 то работа и использовать минутные ТИ14.04.2025 в 19:53 #38081
manjey73УчастникPrevVal это предыдущее значение на прошлом цикле обхода формул каналов.
Вряд ли тут это подойдёт. -
Тема изменена 7 лет, 1 месяц назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.