Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Время работы за сутки  (Прочитано 1287 раз)

Rolich

  • Пользователь
  • **
  • Сообщений: 78
    • Просмотр профиля
Время работы за сутки
« : 15 Марта 2024, 11:27:13 »
Доброго всем времени суток
В проекте есть битовая переменная, которая меняет значение в зависимости от состояния агрегата, 1 - в работе, 0 - остановлен
За предыдущие 24 часа высчитывается, какое количество времени агрегат был в работе:
Код
DateEnd:= Now;
DateStart:= IncHour(Now, -24);
ArchiveTimeOn(Bool_Val, DateTime_Val, DateStart, DateEnd);
Результат выводится в поле Calendar, с отключенным значением даты и временем в формате hh:mm:ss
Проблема в том, что если агрегат работал все 24 часа, то в поле Calendar выводится 00:00:00
Как сделать так, чтобы в таком случае отображалось 24:00:00 ?
Спасибо
« Изменён: 15 Марта 2024, 12:42:57 от Simple Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 272
    • Просмотр профиля
    • Simple-Scada
Re: Время работы за сутки
« Ответ #1 : 15 Марта 2024, 13:32:29 »
Здравствуйте.

Цитировать
Результат выводится в поле Calendar, с отключенным значением даты и временем в формате hh:mm:ss
Проблема в том, что если агрегат работал все 24 часа, то в поле Calendar выводится 00:00:00
В компонент "Календарь" и переменную типа "DateTime" нельзя вывести значение времени больше чем 23:59:59. Если время наработки/простоя может быть больше 23:59:59, то его можно выводить в компонент "Текст", как это описано в примере №2 по ссылке.

Цитировать
Как сделать так, чтобы в таком случае отображалось 24:00:00 ?
Значение 24:00:00 можно отобразить в компоненте "Текст". Для этого компонент "Текст" нужно связать с переменной "DateTime_Val" и на событие OnDataChange написать универсальный скрипт:

Код: (delphi)
var
  aSeconds: Int64;
begin
  if Sender is TM_Text then   // проверяем, что Sender это текст
    with Sender as TM_Text do // приводим Sender к типу "TM_Text"
    begin
      aSeconds := SecondsBetween(0, DateTime_Val.AsDateTime); // получить кол-во секунд
      Text := SecondsToStr(aSeconds);     // переводит секунды в строку вида "чч:мм:сс".
    end;
end.