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

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

Автор Тема: Вопрос по работе со временем  (Прочитано 3097 раз)

kknm

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Вопрос по работе со временем
« : 29 Сентября 2017, 17:41:20 »
Задача. Есть счетчик импульсов СИ8. Нужно 2 раза в сутки снимать показания наработки. Програмного сброса времени нет.Формат выводимых данных на приборе по описанию 99 999:59.  Вывод в поле Строкового значения в скаде будет таким ххххх:хх:хх:ххх. Можно вывести отдельно по часам,минутам, секундам и милисекундам, но это увеличивает количество переменных и кода.
Вопрос в том, что т.к. нет програмного сброса нужно считать разницу между показаниями.
Понимаю, что должен оперировать количеством секунд между показаниями, но как конвертировать показания прибора для этого, какой функцией ? Пните в нужном направлении.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Вопрос по работе со временем
« Ответ #1 : 30 Сентября 2017, 09:41:02 »
Здравствуйте.

Если значение в скаду будет приходить в виде строки вида "ххххх:хх:хх:ххх", то с ней придется работать как со строкой используя функции для работы со строками.  Можно извлекать части времени и сравнивать. Но правильнее передавать в скаду отдельно часы, минуты, секунды как отдельные переменные и переводить их в количество секунд, например так:

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

Время в секундах удобно сравнивать и вычитая показания в секундах мы получим разницу между ними (также в секундах). Далее полученные секунды при необходимости можно привести к виду "чч:мм:сс" готовой функцией SecondsToStr, либо перевести в TDateTime функцией SecondsToDateTime и далее с этим типом можно делать что-угодно используя любые функции для работы с датой и временем.
« Изменён: 30 Сентября 2017, 10:19:22 от Simple_Scada »

kknm

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопрос по работе со временем
« Ответ #2 : 02 Октября 2017, 09:02:47 »
Спасибо за ответ, но вопрос был как из ччччч:мм:сс(который можно получить с помощью UTF8Copy(полнаястрока,1,Lenth -4)  получить количество секунд сразу.  Т.е. антипод SecondToStr. Ведь все преобразования нужны для внутренних нужд, а для храненеия нужны именно полное количество секунд, мне так кажется.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Вопрос по работе со временем
« Ответ #3 : 02 Октября 2017, 09:07:46 »
Если работать как со строкой, то нужно проходить по строке в цикле, находить в ней часы, минуты, секунды, переводить их в числа, а затем из этих чисел получать общее количество секунд. Гораздо проще (и правильнее) в данном случае брать часы, минуты, секунды как отдельные переменные и работать с ними как в примере выше.
« Изменён: 02 Октября 2017, 09:09:35 от Simple-Scada »

kknm

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопрос по работе со временем
« Ответ #4 : 02 Октября 2017, 09:54:16 »
Вопрос снимается, т.к. прибор оказывается выдает не часы, минуты, секунды, а общее время выраженное в либо в часах, либо в минутах, либо в секундах - что и требовалось.
 Еще раз спасибо за оперативную помощь.