Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Перевести секунды, в часы и минуты
- В этой теме 82 ответа, 6 участников, последнее обновление 1 год, 9 месяцев назад сделано
manjey73.
-
АвторСообщения
-
07.08.2024 в 09:25 #33876
Alexandr
УчастникВсем добрый день,
случаем ни кто не сталкивался с подобным.
Контроллер ДГУ (DeepSea) выдает информацию об отработанном времени в секундах.
В данный момент я использую формулу Cnl / 3600, отображаю как «D», т.е. видно только часы. По хорошему хотелось бы видеть еще и минуты.Возможно кто то имеет подобную формулу расчета?
Как это высчитать я нашел, а как должна быть выполнена формула я не знаю не силен в программировании.
07.08.2024 в 10:28 #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(); }Такое?
07.08.2024 в 10:33 #33895
JurasskParkУчастник07.08.2024 в 11:18 #33901Alexandr
УчастникJurasskPark, спасибо попробую.
еще вопрос, не мог бы ты отправить картинки на почту aleksin@mail.ru.
картинки не могу просмотреть, он и не увеличивает, поэтому ничего не видно07.08.2024 в 11:56 #33905
manjey73УчастникОткройте картинки в новом окне.
А вообще не понимаю, зачем такая умопомрачительная формула, там наверняка время в Unix Time07.08.2024 в 12:23 #33906
JurasskParkУчастникА вообще не понимаю, зачем такая умопомрачительная формула, там наверняка время в Unix Time
об отработанном времени в секундах
07.08.2024 в 12:26 #33908
manjey73УчастникНу и что? Приведите его к TimeSpan если не ошибаюсь, а он и минуты показывает и часы и дни
07.08.2024 в 13:42 #33910Alexandr
УчастникДобрый день!
из документа 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 3207.08.2024 в 13:57 #33911
manjey73УчастникЯ к тому, что более красиво было бы привести к TimeSpan и уже из него отображать дни, часы, секунды работы.
А сам TimeSpan хранить в переменной базы.07.08.2024 в 14:48 #33914Alexandr
УчастникПарни, я бы с радостью это сделал
Подскажите где прочитать посмотреть и т.д.
Я могу хорошо настроить физику, построить маршруты, преобразователи, установить и настроить ИБП, генератор кондиционер.
Устанавливал настраивал zabbix, сейчас перешел во многом на Rapid.07.08.2024 в 14:56 #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.
19.08.2024 в 18:03 #34125
manjey73УчастникНу продолжим тогда тут.
в регистре всегда хранятся секунды и там они аккумулируются сами?
Или секунды каждый раз разные на каждый период работы дизеля?20.08.2024 в 07:01 #34131Alexandr
Участник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 321. Current time since 1/1/70 — в базе Рапид вроде имеется Скрипт для такого рода перевода времени, тут вроде как требуется использовать формулу, вывод время. Но что то у меня не выводится нормальное время))).
2. Время до следующего ТО, отчитывает секундами на контроллере отображает часы и минуты до следующего хотелось что бы и в Скаде отображение было в часах и минутах
3. Время до следующего ТО 1/1/70
4. Engine run time — отработанное время мотора, счетчик секунд начинает увеличиваться когда мотор работает, в режиме покоя значения не изменяется. Контроллер выдает в modbus значение в секундах, а на дисплее отображает в часах и минутах. Также хотелось бы отражать и в скаде.
Этот параметр важен для многих операторов генераторов, так как ведется учет времени и топлива опираясь на данный параметр.
У меня пока выполнено отображение в часах, в канале использую формулу Cnl / 3600.
Но тут возникает вопрос, при работе мотора 30 минут к примеру, значение часов не меняется а топливо уходит))).20.08.2024 в 08:19 #34133
a80808УчастникХмм…по п.4 — так разделите значение канала на 3600 а в графе «Формат» поставьте «Время»
20.08.2024 в 11:16 #34136
a80808УчастникХотя и делить то не надо раз там секунды…
-
Ответ изменён 1 год, 10 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.


