Перевести секунды, в часы и минуты

Стартовая страница Форумы Понять, как работает ПО Формулы Перевести секунды, в часы и минуты

Просмотр 15 сообщений - с 1 по 15 (из 83 всего)
  • Автор
    Сообщения
  • #33876
    Alexandr
    Участник

    Всем добрый день,

    случаем ни кто не сталкивался с подобным.
    Контроллер ДГУ (DeepSea) выдает информацию об отработанном времени в секундах.
    В данный момент я использую формулу Cnl / 3600, отображаю как «D», т.е. видно только часы. По хорошему хотелось бы видеть еще и минуты.

    Возможно кто то имеет подобную формулу расчета?

    Как это высчитать я нашел, а как должна быть выполнена формула я не знаю не силен в программировании.

    #33893
    JurasskPark
    Участник
    
      //Перевод секунд в дни, часы, минуты и секунды
      public static string ConvertToTime(double timeSeconds)
      {
          //Отрицательные переводим в положительные
          timeSeconds = Math.Abs(timeSeconds);
    
          int mySeconds = System.Convert.ToInt32(timeSeconds);
          //86400 секунд в 1 дне
          int myDays = mySeconds / 86400;
          mySeconds %= 86400;
          //3600 секунд в 1 часе
          int myHours = mySeconds / 3600;
          mySeconds %= 3600;
          //60 секунд в 1 минуте
          int myMinutes = mySeconds / 60;
          mySeconds %= 60;
    
          string mySec = mySeconds.ToString(),
          myMin = myMinutes.ToString(),
          myHou = myHours.ToString(),
          myDay = myDays.ToString();
    
          if (myDays < 10) { myDay = myDay.Insert(0, ""); }
          if (myHours < 10) { myHou = myHou.Insert(0, "0"); }
          if (myMinutes < 10) { myMin = myMin.Insert(0, "0"); }
          if (mySeconds < 10) { mySec = mySec.Insert(0, "0"); }
    
          //Слова 
          string slovoDay = "";
          string slovoHour = "";
          string slovoMinute = "";
          string slovoSecond = "";
          string chisloDay = "";
          string chisloHour = "";
          string chisloMinute = "";
          string chisloSecond = "";
    
          if ((myDays <= 0) || (myDays == 00))
          {
              slovoDay = "";
              chisloDay = "";
          }
          else
          {
              slovoDay = "дн.";
              chisloDay = myDays.ToString();
          }
    
          if ((myHours <= 0))
          {
              slovoHour = "";
              chisloHour = "";
          }
          else
          {
              slovoHour = "час.";
              chisloHour = myHours.ToString();
          }
    
          if (myMinutes <= 0)
          {
              slovoMinute = "";
              chisloMinute = "";
          }
          else
          {
              slovoMinute = "мин.";
              chisloMinute = myMinutes.ToString();
          }
    
          if (mySeconds <= 0)
          {
              slovoSecond = "";
              chisloSecond = "";
          }
          else
          {
              slovoSecond = "сек.";
              chisloSecond = mySeconds.ToString();
          }
    
          string result = chisloDay + " " + slovoDay + " " + chisloHour + " " + slovoHour + " " + chisloMinute + " " + slovoMinute + " " + chisloSecond + " " + slovoSecond + "";
          return result.Trim();
      }
    

    Такое?

    #33895
    JurasskPark
    Участник

    Convert-To-Time
    Convert-To-Time2
    Convert-To-Time3

    #33901
    Alexandr
    Участник

    JurasskPark, спасибо попробую.

    еще вопрос, не мог бы ты отправить картинки на почту aleksin@mail.ru.
    картинки не могу просмотреть, он и не увеличивает, поэтому ничего не видно

    #33905
    manjey73
    Участник

    Откройте картинки в новом окне.
    А вообще не понимаю, зачем такая умопомрачительная формула, там наверняка время в Unix Time

    #33906
    JurasskPark
    Участник

    А вообще не понимаю, зачем такая умопомрачительная формула, там наверняка время в Unix Time

    об отработанном времени в секундах

    #33908
    manjey73
    Участник

    Ну и что? Приведите его к TimeSpan если не ошибаюсь, а он и минуты показывает и часы и дни

    #33910
    Alexandr
    Участник

    Добрый день!

    из документа DeepSea
    6-7 условный регистр время работы генератора, в секундах.

    В UnixTime привязаны часы контроллера DeepSea.

    10.9 Page 7 – Accumulated Instrumentation
    Notes:
    1. These are read/write registers though some systems may not support writing to some registers.
    2. The ‘Engine run time for load demand’ is used by the hours run balancing scheme, it can be reset independently of the ‘Engine Run Time’ to cope with hire sets being added to a site.

    8xxx/7xxx/6xxx/L40x/4xxx register allocation

    Register offset Name Minimum value Maximum value Scaling factor Units Bits/ Sign
    0-1 Current time since 1/1/70 0 4.29 x109 1 Seconds 32
    2-3 Time to next engine maintenance -2.14 x109 2.14 x109 1 Seconds 32S
    4-5 Time of next engine maintenance since 1/1/70 0 4.29 x109 1 Seconds 32
    6-7 Engine run time 0 4.29×109 1 Seconds 32

    #33911
    manjey73
    Участник

    Я к тому, что более красиво было бы привести к TimeSpan и уже из него отображать дни, часы, секунды работы.
    А сам TimeSpan хранить в переменной базы.

    #33914
    Alexandr
    Участник

    Парни, я бы с радостью это сделал

    Подскажите где прочитать посмотреть и т.д.
    Я могу хорошо настроить физику, построить маршруты, преобразователи, установить и настроить ИБП, генератор кондиционер.
    Устанавливал настраивал zabbix, сейчас перешел во многом на Rapid.

    #33915
    Mikhail
    Модератор

    Добрый день!

    Основная идея следующая. В таблицу Скрипты нужно добавить функцию

    public double SecondsToTime(double val)
    {
      int hour = ... // здесь Ваш расчёт
      int min = ...
      int sec = 0;
      return EncodeDate(new DateTime(1, 1, 1, hour, min, sec));
    }

    Затем вызвать её для канала: SecondsToTime(Cnl) или в другом канале SecondsToTime(Val(101))
    Выбрать формат канала, чтобы он отображался как время.

    • Ответ изменён 1 год, 10 месяцев назад пользователем Mikhail.
    #34125
    manjey73
    Участник

    Ну продолжим тогда тут.

    в регистре всегда хранятся секунды и там они аккумулируются сами?
    Или секунды каждый раз разные на каждый период работы дизеля?

    #34131
    Alexandr
    Участник

    manjey73

    Продолжим))),

    Контроллер имеет несколько временных меток

    Name Minimum value Maximum value Scaling factor Units Bits/ Sign
    Current time since 1/1/70 0 4.29 x109 1 Seconds 32
    Time to next engine maintenance -2.14 x109 2.14 x109 1 Seconds 32S
    Time of next engine maintenance since 1/1/70 0 4.29 x109 1 Seconds 32
    Engine run time 0 4.29 x109 1 Seconds 32

    1. Current time since 1/1/70 — в базе Рапид вроде имеется Скрипт для такого рода перевода времени, тут вроде как требуется использовать формулу, вывод время. Но что то у меня не выводится нормальное время))).
    2. Время до следующего ТО, отчитывает секундами на контроллере отображает часы и минуты до следующего хотелось что бы и в Скаде отображение было в часах и минутах
    3. Время до следующего ТО 1/1/70
    4. Engine run time — отработанное время мотора, счетчик секунд начинает увеличиваться когда мотор работает, в режиме покоя значения не изменяется. Контроллер выдает в modbus значение в секундах, а на дисплее отображает в часах и минутах. Также хотелось бы отражать и в скаде.
    Этот параметр важен для многих операторов генераторов, так как ведется учет времени и топлива опираясь на данный параметр.
    У меня пока выполнено отображение в часах, в канале использую формулу Cnl / 3600.
    Но тут возникает вопрос, при работе мотора 30 минут к примеру, значение часов не меняется а топливо уходит))).

    #34133
    a80808
    Участник

    Хмм…по п.4 — так разделите значение канала на 3600 а в графе «Формат» поставьте «Время»

    #34136
    a80808
    Участник

    Хотя и делить то не надо раз там секунды…

Просмотр 15 сообщений - с 1 по 15 (из 83 всего)
  • Для ответа в этой теме необходимо авторизоваться.