Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: kknm от 29 Сентября 2017, 17:41:20

Название: Вопрос по работе со временем
Отправлено: kknm от 29 Сентября 2017, 17:41:20
Задача. Есть счетчик импульсов СИ8. Нужно 2 раза в сутки снимать показания наработки. Програмного сброса времени нет.Формат выводимых данных на приборе по описанию 99 999:59.  Вывод в поле Строкового значения в скаде будет таким ххххх:хх:хх:ххх. Можно вывести отдельно по часам,минутам, секундам и милисекундам, но это увеличивает количество переменных и кода.
Вопрос в том, что т.к. нет програмного сброса нужно считать разницу между показаниями.
Понимаю, что должен оперировать количеством секунд между показаниями, но как конвертировать показания прибора для этого, какой функцией ? Пните в нужном направлении.
Название: Re: Вопрос по работе со временем
Отправлено: Simple-Scada от 30 Сентября 2017, 09:41:02
Здравствуйте.

Если значение в скаду будет приходить в виде строки вида "ххххх:хх:хх:ххх", то с ней придется работать как со строкой используя функции для работы со строками (https://simple-scada.com/help/script/working-strings.html).  Можно извлекать части времени и сравнивать. Но правильнее передавать в скаду отдельно часы, минуты, секунды как отдельные переменные и переводить их в количество секунд, например так:

Код
var
  aResult: Int64;
begin
  aResult := vrSeconds.AsInt64 + (vrMinutes.AsInt64 * 60) + (vrHours.AsInt64 * 3600).
end;

Время в секундах удобно сравнивать и вычитая показания в секундах мы получим разницу между ними (также в секундах). Далее полученные секунды при необходимости можно привести к виду "чч:мм:сс" готовой функцией SecondsToStr (https://simple-scada.com/help/script/secondstostr.html), либо перевести в TDateTime функцией SecondsToDateTime (https://simple-scada.com/help/script/secondstodatetime.html) и далее с этим типом можно делать что-угодно используя любые функции для работы с датой и временем (https://simple-scada.com/help/script/datetime.html).
Название: Re: Вопрос по работе со временем
Отправлено: kknm от 02 Октября 2017, 09:02:47
Спасибо за ответ, но вопрос был как из ччччч:мм:сс(который можно получить с помощью UTF8Copy(полнаястрока,1,Lenth -4)  получить количество секунд сразу.  Т.е. антипод SecondToStr. Ведь все преобразования нужны для внутренних нужд, а для храненеия нужны именно полное количество секунд, мне так кажется.
Название: Re: Вопрос по работе со временем
Отправлено: Simple-Scada от 02 Октября 2017, 09:07:46
Если работать как со строкой, то нужно проходить по строке в цикле, находить в ней часы, минуты, секунды, переводить их в числа, а затем из этих чисел получать общее количество секунд. Гораздо проще (и правильнее) в данном случае брать часы, минуты, секунды как отдельные переменные и работать с ними как в примере выше.
Название: Re: Вопрос по работе со временем
Отправлено: kknm от 02 Октября 2017, 09:54:16
Вопрос снимается, т.к. прибор оказывается выдает не часы, минуты, секунды, а общее время выраженное в либо в часах, либо в минутах, либо в секундах - что и требовалось.
 Еще раз спасибо за оперативную помощь.