Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (Global.Global_Tag_Data[Temp_Node_Name + ".ТС"] != null && Regex.IsMatch(ParametersTM, @"Отработано суток за период"))
- {
- // Массив значений ТС за диапазон дат.
- List<object[]> tsData = new List<object[]>();
- // Тег ТС.
- TagObject tempTag = (TagObject)Global.Global_Tag_Data[TempNode.Value + ".ТС"];
- // Получаем массив значений.
- tsData = GetData.DR_Get_Tag_History(StartDate, EndDate, (int)tempTag.Tag_ID);
- // Количество суток отработанных.
- double jobDay = 0;
- // Состояния ТС.
- int checkState;
- // Точка времени.
- DateTime checkDateTime = Convert.ToDateTime(StartDate);
- if (tsData.Count > 0)
- {
- // Состояние ТС равно первому в архивном массиве.
- checkState = Convert.ToInt32(tsData[0][0]);
- // Если дата первого элемента массива раньше StartDate, то счет начинаем 1 элемента массива, если нет, то с 0.
- int firstElement = (Convert.ToDateTime(tsData[0][1]) < Convert.ToDateTime(StartDate)) ? 1 : 0;
- // Т.к. хранимка возвращает первое значение с меткой времени до StartDate, начинаем перебор с 1.
- for (int k = firstElement, kLen = tsData.Count; k < kLen; k++)
- {
- // Если Вработе затем Останов
- if (checkState == 1 && Convert.ToInt32(tsData[k][0]) == 0)
- {
- DateTime secondDate = Convert.ToDateTime(tsData[k][1]);
- TimeSpan delta = secondDate.Subtract(checkDateTime);
- double hourState = delta.TotalHours;//(secondDate - checkDateTime).Hours;
- jobDay += hourState;
- }
- // Если Вработе затем Вработе
- if (checkState == 1 && Convert.ToInt32(tsData[k][0]) == 1)
- {
- DateTime secondDate = Convert.ToDateTime(tsData[k][1]);
- TimeSpan delta = secondDate.Subtract(checkDateTime);
- double hourState = delta.TotalHours;//(secondDate - checkDateTime).Hours;
- jobDay += hourState;
- }
- // Приравнять текущее состояние ТС.
- checkState = Convert.ToInt32(tsData[k][0]);
- // Приравнять текущую дату.
- checkDateTime = Convert.ToDateTime(tsData[k][1]);
- }
- // Если последнее состояние из массива Вработе, то высчитываем разницу от EndDate - Предыдущей даты.
- if (checkState == 1)
- {
- DateTime secondDate = Convert.ToDateTime(EndDate);
- TimeSpan delta = secondDate.Subtract(checkDateTime);
- // Интервал в минутах между последним значением в массиве и EndDate
- double minuteState = Convert.ToInt32(Math.Round(delta.TotalMinutes, 0));
- // Если интервал между последней датой из массива и EndDate меньше чем интервал архивирования тега, то добавич часы работы.
- if (tempTag.Arc_TimeDeadband >= minuteState)
- {
- double hourState = delta.TotalHours;//(secondDate - checkDateTime).Hours;
- jobDay += hourState;
- }
- }
- }
- // Т.к. рассчет велся в часах, делим все на 24, для поиска кол. суток.
- Row_Data[6] = Math.Round(jobDay/24, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement