Не могу разобраться с подсчетом времени

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Не могу разобраться с подсчетом времени

Сообщение Penumbra » 23.03.2014 (Вс) 16:51

Здравствуйте, немогу написать часть кода по подсчету машинного времени работы механизма. т.е. есть устроуство, которое читаю и в БД ложу время запуска, время остановки, и состояние связи с устройством: "Нет связи", "Связь в норме", "Завершение программы", "Запуск программы", и по всему этому не получается посчитать сколько часов за раб. смену работало устройство, сколько часов не работало устройство, сколько часов за раб. смену не было связи

Код: Выделить всё
t = DateDiff("d", DateTime1(0).Text, DateTime1(1).Text)
If t = 0 Then t = 1

For i = 1 To t
tmpdate = DateAdd("d", i - 1, DateTime1(0).Text)
lstLog.ListItems.Add , "k" & i, tmpdate

sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(0)
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(1)
lstLog.ListItems.Add , "k1" & i, "I смена" '& (sql) & " " & (sql1)
lstLog.ListItems("k1" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1)), 0), " h ч. mm мин.")
lstLog.ListItems("k1" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1)), 0), " h ч. mm мин.")
lstLog.ListItems("k1" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1)), 0), " h ч. mm мин.")
If smenCount > 0 Then
sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(1)
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(2)
lstLog.ListItems.Add , "k2" & i, "II смена" ' & CDate(sql) & " " & CDate(sql1)
lstLog.ListItems("k2" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1), , 1), 0), " h ч. mm мин.")
lstLog.ListItems("k2" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1), , 1), 0), " h ч. mm мин.")
lstLog.ListItems("k2" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1), , 1), 0), " h ч. mm мин.")
End If

If smenCount > 1 Then
sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(2)
tmpdate = DateAdd("d", 1, tmpdate)
sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(3)
If CDate(ListView1.ListItems(ListView1.ListItems.Count).Text) < sql1 Then Exit Sub
lstLog.ListItems.Add , "k3" & i, "III смена" '& CDate(sql) & " " & CDate(sql1)
lstLog.ListItems("k3" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1), , 2), 0), " h ч. mm мин.")
lstLog.ListItems("k3" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1), , 2), 0), " h ч. mm мин.")
lstLog.ListItems("k3" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1), , 2), 0), " h ч. mm мин.")
End If
If smenCount > 2 Then

sql = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(3)
If CDate(ListView1.ListItems(ListView1.ListItems.Count).Text) < sql Then Exit Sub

sql1 = Format(tmpdate, "dd.mm.yyyy") & " " & DateTimes(0)
If CDate(ListView1.ListItems(ListView1.ListItems.Count).Text) < sql1 Then Exit Sub
lstLog.ListItems.Add , "k4" & i, "IV смена" ' & CDate(sql) & " " & CDate(sql1)
lstLog.ListItems("k4" & i).SubItems(1) = Format(TimeSerial(0, GetStatusMinutes("Останов", CDate(sql), CDate(sql1), , 3), 0), " h ч. mm мин.")
lstLog.ListItems("k4" & i).SubItems(2) = Format(TimeSerial(0, GetStatusMinutes("Запуск", CDate(sql), CDate(sql1), , 3), 0), " h ч. mm мин.")
lstLog.ListItems("k4" & i).SubItems(3) = Format(TimeSerial(0, GetStatusMinutes("Связь в норме", CDate(sql), CDate(sql1), , 3), 0), " h ч. mm мин.")

End If


Next


Function GetStatusMinutes(StatusNames As String, StartDate As Date, EndDate As Date, Optional StatusIsActiveInStart As Boolean = False, Optional smena As Integer = 0) As Long
Dim StatusIsActive As Boolean, LastDate As Date, Status As String, StatusDate As Date
LastDate = StartDate
StatusIsActive = StatusIsActiveInStart
For i = 1 To ListView1.ListItems.Count
   Status = ListView1.ListItems(i).SubItems(1)
   
   StatusDate = CDate(ListView1.ListItems(i).Text)
   If StatusDate > EndDate Then Exit For
   If InStr(StatusNames, Status) Then
     If Not StatusIsActive Then
         If StatusDate > LastDate Then LastDate = StatusDate
         StatusIsActive = True
     End If
   ElseIf StatusIsActive Then
     If StatusDate > StartDate Then
        GetStatusMinutes = GetStatusMinutes + DateDiff("n", LastDate, StatusDate)
       ' If GetStatusMinutes > (timeLength(smena) * 60) Then GetStatusMinutes = (timeLength(smena) * 60)
     End If
     StatusIsActive = False
   End If
Next
If StatusIsActive Then
    GetStatusMinutes = GetStatusMinutes + DateDiff("n", LastDate, EndDate)
  '  If GetStatusMinutes > (timeLength(smena) * 60) Then GetStatusMinutes = (timeLength(smena) * 60)
End If

End Function

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не могу разобраться с подсчетом времени

Сообщение Хакер » 23.03.2014 (Вс) 17:25

Топик из разряда «вот куча плохо пахнущего кода, разбирайтесь в нём сами»?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: Не могу разобраться с подсчетом времени

Сообщение Penumbra » 23.03.2014 (Вс) 20:24

Хакер писал(а):Топик из разряда «вот куча плохо пахнущего кода, разбирайтесь в нём сами»?

я и не прошу разбираться в "куче плохо пахнущего кода" я его привел как пример того что у меня есть, мне посути нужен алгоритм по подсчету машинного времени а как я его реализую это уже моя проблема

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не могу разобраться с подсчетом времени

Сообщение Хакер » 23.03.2014 (Вс) 20:27

Никто кроме тебя не знает, что (чёрт возьми) такое алгоритм подсчёта машинного времени. Поэтому единственный шанс: посмотреть на код, чтобы понять, что имелось в виду. Но это чревато слепотой.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: Не могу разобраться с подсчетом времени

Сообщение Penumbra » 23.03.2014 (Вс) 23:20

Хакер писал(а):Никто кроме тебя не знает, что (чёрт возьми) такое алгоритм подсчёта машинного времени. Поэтому единственный шанс: посмотреть на код, чтобы понять, что имелось в виду. Но это чревато слепотой.

неужели я не описал?
Penumbra писал(а):бла бла бла ...в БД ложу время запуска, время остановки, и состояние связи с ... , и по всему этому не получается посчитать сколько часов за раб. смену работало устройство, сколько часов не работало устройство, сколько часов за раб. смену не было связи

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не могу разобраться с подсчетом времени

Сообщение Хакер » 23.03.2014 (Вс) 23:24

Вторая цитата — набор слов какой-то. С ошибками (грамматическими, пунктационными, стилистическими).

Напиши нормально, по-человечески. Понятным текстом с последовательной манерой изложения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: Не могу разобраться с подсчетом времени

Сообщение Penumbra » 23.03.2014 (Вс) 23:29

есть таблица с метками времени во сколько устройство начинало работать, во сколько устройство отключалось, во сколько пропадала связь с устройством , во сколько связь с устройством восстанавливалась, и у меня не получается посчитать сколько времени, за определенный период(рабочую смену), работало устройство, а сколько не работало , а сколько времени с устройсвом не было связи

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не могу разобраться с подсчетом времени

Сообщение Хакер » 23.03.2014 (Вс) 23:34

Хватит насиловать мой (и не только) мозг. Выучи, как ставятся запятые.

Penumbra писал(а):, за определенный период(рабочую смену),

Этот период в рамках задачи всегда непрерывный диапазон? Или он тоже может иметь дырки? Например, вдру ты хочешь узнать суммарное время, в течение которого устройство работал на протяжении недели, но только с учётом рабочий часов. Ы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: Не могу разобраться с подсчетом времени

Сообщение Penumbra » 24.03.2014 (Пн) 0:06

ну русский для меня не родной язык...

есть рабочие сутки начинающиеся с 08:00 которые разбиты на 4 смены по 6 часов 1 смена - с 8:00 по 14:00, 2я - с 14:00 по 20:00, 3я- с 20:00 по 02:00 и 4я с 02:00 по 8:00
надо получить такую таблицу обліку машинного часу :
Вложения
01.png
01.png (24.29 Кб) Просмотров: 2043

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Не могу разобраться с подсчетом времени

Сообщение ger_kar » 24.03.2014 (Пн) 5:51

Penumbra писал(а):есть таблица с метками времени во сколько устройство начинало работать, во сколько устройство отключалось, во сколько пропадала связь с устройством , во сколько связь с устройством восстанавливалась

Penumbra писал(а):надо получить такую таблицу обліку машинного часу :
А какую структуру имеет таблица с метками времени? Какие в ней поля? Как туда производится запись? Какими запросами информация считывается. Т.е. приведи всю структуру, разложив все последовательно по полочкам. У меня есть сомнения относительно того, что сама структура таблиц выбрана не оптимально. А если изначально правильно сделать структуру, то львиную долю работы будут делать запросы, а не расчеты в коде программы.
Бороться и искать, найти и перепрятать

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Не могу разобраться с подсчетом времени

Сообщение bon818 » 24.03.2014 (Пн) 10:33

Разложи по полкам свой код
Для начала вытащи все данные в собственную структуру
например что-то типа этого :
Private Type STATUS_MACHINE_TIME
time1 As Integer
time2 As Byte
time3 As Date
time4() As String
'.....................
'...........................
End Type
Private SMT As STATUS_MACHINE_TIME

Всё! :D
Остальное дело техники (в прямом смысле)

Собственно тоже что сказал ger_kar и даже теми же словами :wink:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Majestic-12 [Bot] и гости: 27

    TopList