Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: George от 21 Августа 2017, 17:10:47

Название: Как перевести числовое значение в количество дней\часов\минут
Отправлено: George от 21 Августа 2017, 17:10:47
Добрый день.
ОРС сервер получает с контроллера время работы оборудования в виде числа (которое равно количеству секунд)
Подскажите, как обработать эту переменную и преобразовать это число в дни\часы\минуты ?
Спасибо.
Название: Re: Как перевести числовое значение в количество дней\часов\минут
Отправлено: Simple-Scada от 21 Августа 2017, 17:19:33
Здравствуйте.

Создайте в проекте объект типа текст (https://simple-scada.com/help/manual/text.html), например с именем Text1 и свяжите его с вашей секундной переменной. Далее на событие OnDataChange напишите такой скрипт:
Код
begin
  Text1.Text := SecondsToStr(Text1.AsInt64);
end.

, где Text1.AsInt - значение переменной связанной с объектом Text1 в виде целого числа;
описание функции SecondsToStr смотрите здесь (https://simple-scada.com/help/script/secondstostr.html).

Второй вариант создать универсальный скрипт:
Код
begin
  if Sender is TM_Text then
    with Sender as TM_Text do
      Text := SecondsToStr(AsInt64);
end.

Такой универсальный скрипт можно назначить на событие OnDataChange разных объектов Текст, каждый из которых связан со своей секундной переменой и всё будет работать (не придется писать отдельный скрипт для каждого объекта Текст, как в первом варианте).
Название: Re: Как перевести числовое значение в количество дней\часов\минут
Отправлено: Ragnarok от 21 Августа 2017, 21:45:20
Здравствуйте!

Я делал так:
aInt_Est - количество секунд.

Код
Text1.Text := IntToStr((aInt_Est.Value div 3600) div 24) + ' дней ' +  IntToStr((aInt_Est.Value div 3600) mod 24) + 'часов ' + IntToStr((aInt_Est.Value mod 3600) div 60) + 'минут';
Название: Re: Как перевести числовое значение в количество дней\часов\минут
Отправлено: George от 22 Августа 2017, 13:58:19
Здравствуйте.

Создайте в проекте объект типа текст (https://simple-scada.com/help/manual/text.html), например с именем Text1 и свяжите его с вашей секундной переменной. Далее на событие OnDataChange напишите такой скрипт:
Код
begin
  Text1.Text := SecondsToStr(Text1.AsInt64);
end.

, где Text1.AsInt - значение переменной связанной с объектом Text1 в виде целого числа;
описание функции SecondsToStr смотрите здесь (https://simple-scada.com/help/script/secondstostr.html).

Второй вариант создать универсальный скрипт:
Код
begin
  if Sender is TM_Text then
    with Sender as TM_Text do
      Text := SecondsToStr(AsInt64);
end.

Такой универсальный скрипт можно назначить на событие OnDataChange разных объектов Текст, каждый из которых связан со своей секундной переменой и всё будет работать (не придется писать отдельный скрипт для каждого объекта Текст, как в первом варианте).

Название: Re: Как перевести числовое значение в количество дней\часов\минут
Отправлено: Simple_Scada от 22 Августа 2017, 14:05:51
Какую версию Simple-Scada Вы используете? Функция SecondsToStr  (https://simple-scada.com/help/script/secondstostr.html)доступна с версии Simple-Scada 2.2.1.0 (16 Мая 2017).  Если у Вас более старая версия, то обновитесь до последней версии - скачать можно по ссылке (https://simple-scada.com/download-simple-scada).
Название: Re: Как перевести числовое значение в количество дней\часов\минут
Отправлено: George от 24 Августа 2017, 16:21:03
Какую версию Simple-Scada Вы используете? Функция SecondsToStr  (https://simple-scada.com/help/script/secondstostr.html)доступна с версии Simple-Scada 2.2.1.0 (16 Мая 2017).  Если у Вас более старая версия, то обновитесь до последней версии - скачать можно по ссылке (https://simple-scada.com/download-simple-scada).

Большое спасибо!
Скачал последнюю версию и все вышеописанное работает, но, если позволите, в дополнение еще пара вопросов:
1. Мы получаем данные в формате чч:мм:сек
Если количество часов превысит 99, то они отобразятся? (т.е. 200 или 1200 часов..)
2. Можно-ли все перевести в формат дни\часы\минуты\сек ?
    (видел процедуру SecondsToDateTime, но не уверен, что это то, что нужно...)
Спасибо!
Название: Re: Как перевести числовое значение в количество дней\часов\минут
Отправлено: Simple-Scada от 24 Августа 2017, 23:48:34
Цитировать
Если количество часов превысит 99, то они отобразятся? (т.е. 200 или 1200 часов..)
Да, отобразятся.

Цитировать
Можно-ли все перевести в формат дни\часы\минуты\сек?
Да, для этого можно использовать пример который предложили участники форума выше, либо воспользоваться функцией SecondsToDateTime, изменённые примеры ниже.

Обычный скрипт:
Код
var
  aDT: TDateTime;
begin
  aDT := SecondsToDateTime(Text1.AsInt64);
  Text1.Text := IntToStr(DaysBetween(aDT, 0)) + ' дней, ' + TimeToStr(aDT);
end.

Универсальный скрипт для любых объектов Текст (https://simple-scada.com/help/manual/text.html):
Код
var
  aDT: TDateTime;
begin
  if Sender is TM_Text then
    with Sender as TM_Text do
    begin
      aDT := SecondsToDateTime(AsInt64);
      Text := IntToStr(DaysBetween(aDT, 0)) + ' дней, ' + TimeToStr(aDT);
    end;
end.