/// <summary> /// Create gear guess selection chart based on gear ratios /// </summary> /// <param name="input">Pre-calculated raw data to estimate from. This should already be smoothed or filtered if desired.</param> /// <returns>Gear guess NumericTimeDataSeries</returns> public static ITimeDataSeries <SprocketCombo> GuessSprockets(INumericTimeDataSeries input, List <SprocketCombo> sprockets) { ITimeDataSeries <SprocketCombo> guessSeries = new TimeDataSeries <SprocketCombo>(); SprocketCombo lastValue = null; // Iterate through entire data series guessing each point foreach (ITimeValueEntry <float> item in input) { float diff = float.MaxValue; SprocketCombo guess = null; // Find closest match out of all gear ratios foreach (SprocketCombo sprocketCombo in sprockets) { float n = Math.Abs(sprocketCombo.GearRatio - item.Value); if (n < diff) { // Current closest match diff = n; guess = sprocketCombo; } } if (guessSeries.Count > 0 && lastValue != guess) { guessSeries.Add(input.EntryDateTime(item).AddMilliseconds(-1), lastValue); } guessSeries.Add(input.EntryDateTime(item), guess); lastValue = guess; } return(guessSeries); }
/// <summary> /// Gets the Sprocket Track for a given activity. Returns an empty track if unable to calculate (for instance if no GPS or Distance track). /// </summary> /// <param name="activity"></param> /// <returns>Returns an ITimeDataSeries<SprocketCombo> of the sprocket combo used, or an empty track if nothing can be calculated.</returns> public static ITimeDataSeries <SprocketCombo> GetSprocketTrack(IActivity activity) { // Raw data INumericTimeDataSeries gearTrack = ActivityGearTrackCache.Instance.CalculateRawTrack(activity); ITimeDataSeries <SprocketCombo> sprocketTrack = new TimeDataSeries <SprocketCombo>(); if (gearTrack.Count > 0) { // Smooth data track float min, max; gearTrack = ZoneFiveSoftware.Common.Data.Algorithm.NumericTimeDataSeries.Smooth(gearTrack, Constants.GearTrackSmoothing, out max, out min); // Estimate/round gear track string id = Options.Instance.GetGearEquipmentId(activity); List <SprocketCombo> sprockets = Options.Instance.GetSprocketCombos(id); sprocketTrack = GearUtils.GuessSprockets(gearTrack, sprockets); } return(sprocketTrack); }
// Use any data track as a base when creating the TrackPoints. // Set GPS properties to null private TrackPoint[] GetTrackPointsFromDataTrack(IActivity activity) { ITimeDataSeries<float> ReferenceTrack; if (activity.DistanceMetersTrack != null) ReferenceTrack = new TimeDataSeries<float>(activity.DistanceMetersTrack); else if (activity.HeartRatePerMinuteTrack != null) ReferenceTrack = new TimeDataSeries<float>(activity.HeartRatePerMinuteTrack); else if (activity.ElevationMetersTrack != null) ReferenceTrack = new TimeDataSeries<float>(activity.ElevationMetersTrack); else if (activity.CadencePerMinuteTrack != null) ReferenceTrack = new TimeDataSeries<float>(activity.CadencePerMinuteTrack); else return null; ReferenceTrack.AllowMultipleAtSameTime = false; List<TrackPoint> tps = new List<TrackPoint>(); foreach (ITimeValueEntry<float> p in ReferenceTrack) { TrackPoint tp = new TrackPoint(); if (p == ReferenceTrack[0]) tp.isStartPoint = true; tp.TimeStamp = ConvertToLocalTime(ReferenceTrack.StartTime.AddSeconds(p.ElapsedSeconds)); DateTime actualTime = ReferenceTrack.StartTime.AddSeconds(p.ElapsedSeconds); // Get distance if (activity.DistanceMetersTrack != null) { if (actualTime < activity.DistanceMetersTrack.StartTime) actualTime = activity.DistanceMetersTrack.StartTime; ITimeValueEntry<float> interpolatedDistance = activity.DistanceMetersTrack.GetInterpolatedValue(actualTime); if (interpolatedDistance != null) { tp.Distance = interpolatedDistance.Value / 1000; if (double.IsNaN((double)tp.Distance)) { tp.Distance = null; } } else { tp.Distance = null; } } else { tp.Distance = null; } // Get elevation track if (activity.ElevationMetersTrack != null) { if (actualTime < activity.ElevationMetersTrack.StartTime) actualTime = activity.ElevationMetersTrack.StartTime; ITimeValueEntry<float> interpolatedElevation = activity.ElevationMetersTrack.GetInterpolatedValue(actualTime); if (interpolatedElevation != null) { tp.Altitude = interpolatedElevation.Value; if (double.IsNaN((double)tp.Altitude)) { tp.Altitude = null; } } else { tp.Altitude = null; } } else { tp.Altitude = null; } // Get heart rate track if (activity.HeartRatePerMinuteTrack != null) { if (actualTime < activity.HeartRatePerMinuteTrack.StartTime) actualTime = activity.HeartRatePerMinuteTrack.StartTime; ITimeValueEntry<float> interpolatedHR = activity.HeartRatePerMinuteTrack.GetInterpolatedValue(actualTime); if (interpolatedHR != null) { float heartRate = interpolatedHR.Value; tp.HR = Convert.ToInt32(heartRate); if (double.IsNaN((double)tp.HR)) { tp.HR = null; } } else { tp.HR = null; } } else { tp.HR = null; } // Get cadence track if (activity.CadencePerMinuteTrack != null) { if (actualTime < activity.CadencePerMinuteTrack.StartTime) actualTime = activity.CadencePerMinuteTrack.StartTime; ITimeValueEntry<float> interpolatedCadence = activity.CadencePerMinuteTrack.GetInterpolatedValue(actualTime); if (interpolatedCadence != null) { float cadence = interpolatedCadence.Value; tp.Cad = Convert.ToInt32(cadence); if (double.IsNaN((double)tp.Cad)) { tp.Cad = null; } } else { tp.Cad = null; } } else { tp.Cad = null; } tp.Latitude = null; tp.Longitude = null; tps.Add(tp); } return tps.ToArray(); }
internal static appData GetMachineConnectData(DateTime dateVal) { SqlConnection conn = ConnectionManager.GetConnection(); DataTable dt = new DataTable(); DataTable dtMachine = new DataTable(); DataTable dtDashboard = new DataTable(); DataTable dtPartCount = new DataTable(); DataTable dtTimes = new DataTable(); DataTable dtStoppages = new DataTable(); DataTable dtAlarmsDatails = new DataTable(); DataTable dtAlarmsSummary = new DataTable(); DataTable dtAlarmsSolution = new DataTable(); appData appData = new appData(); appData.Shifts = new List <Shift>(); appData.PlantMachine = new List <PlantMachines>(); appData.AlarmsSolution = new List <AlarmSolution>(); var ss = dateVal.ToString("yyyy-MM-dd"); try { var cmd = new SqlCommand("[dbo].[FocasWeb_ViewShift&HourwiseSummary]", conn); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandTimeout = 120; cmd.Parameters.AddWithValue("@Date", dateVal.ToString("yyyy-MM-dd"));//dateVal); SqlDataReader rdr = cmd.ExecuteReader(); if (rdr.HasRows) { while (rdr.Read()) { int shiftId = 0; Shift shift = new Shift(); if (int.TryParse(rdr["ShiftID"].ToString(), out shiftId)) { shift.ShiftId = shiftId; } shift.ShiftName = rdr["ShiftName"].ToString(); appData.Shifts.Add(shift); } rdr.NextResult(); while (rdr.Read()) { int plantId = 0; PlantMachines plantMachines = new PlantMachines(); if (int.TryParse(rdr["PlantCode"].ToString(), out plantId)) { plantMachines.PlantID = plantId; } plantMachines.PlantName = rdr["Plantid"].ToString(); appData.PlantMachine.Add(plantMachines); } rdr.NextResult(); //--MachineInformation--- dtMachine.Load(rdr); //---Dashboard Information----- dtDashboard.Load(rdr); //-----PartCount Information--- dtPartCount.Load(rdr); dtTimes.Load(rdr); dtStoppages.Load(rdr); dtAlarmsDatails.Load(rdr); dtAlarmsSummary.Load(rdr); //dtAlarmsSolution.Load(rdr); if (dtMachine.Rows.Count > 0) { for (int i = 0; i < appData.PlantMachine.Count; i++) { appData.PlantMachine[i].Machines = new List <Machine>(); foreach (DataRow item in dtMachine.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "'")) { int machineId = 0; Machine machine = new Machine(); if (int.TryParse(item["MCInterface"].ToString(), out machineId)) { machine.MachineID = machineId;//Convert.ToInt32(item["MCInterface"].ToString()); } machine.MachineName = item["MachineId"].ToString(); machine.LastProgram = item["RunningPart"].ToString(); machine.Downtime = item["Stoppages"].ToString(); machine.Status = item["McStatus"].ToString(); machine.Color = item["color"].ToString(); if (int.TryParse(item["PartsCount"].ToString(), out machineId)) { machine.PartsCount = machineId;// int.Parse(item["PartsCount"].ToString()); } machine.MachineMTB = item["MachineMTB"].ToString().ToUpper(); appData.PlantMachine[i].Machines.Add(machine); } } appData.appDataList = new List <AppDataList>(); AppDataList appdataDay = new AppDataList(); appdataDay.Key = dateVal.ToString("yyyy-MM-dd"); appdataDay.DayData = new List <DayData>(); for (int i = 0; i < appData.PlantMachine.Count; i++) { foreach (Machine item in appData.PlantMachine[i].Machines) { DayData dayData1 = new DayData(); dayData1.DataDate = DateTime.Now.Date; dayData1.MachineID = item.MachineID; dayData1.MachineName = item.MachineName; dayData1.PlantID = appData.PlantMachine[i].PlantID; dayData1.PlantName = appData.PlantMachine[i].PlantName; dayData1.PartsCountData = new List <PartsCountData>(); dayData1.PartCountChartData = new List <PartCountChartData>(); dayData1.TimesData = new List <TimesData>(); dayData1.TimesChartData = new List <TimesChartData>(); dayData1.StoppagesData = new List <StoppagesData>(); dayData1.AlarmsDetails = new List <AlarmData>(); dayData1.AlarmsSummary = new List <AlarmData>(); dayData1.DashboardData = new DashboardData(); dayData1.DashboardData.DashboardDetails = new List <DashboardDetails>(); foreach (DataRow item1 in dtDashboard.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "' AND Machineid = '" + item.MachineName + "'")) { DashboardDetails dashboardDetails = new DashboardDetails(); dashboardDetails.NavId = item1["NavID"].ToString(); dashboardDetails.ColHeaderText = item1["DisplayName"].ToString(); dashboardDetails.ShiftData = new List <string>(); foreach (var shifts in appData.Shifts) { dashboardDetails.ShiftData.Add(item1[shifts.ShiftName].ToString()); } //dashboardDetails.ShiftData.Add(item1["A"].ToString()); //dashboardDetails.ShiftData.Add(item1["B"].ToString()); //dashboardDetails.ShiftData.Add(item1["C"].ToString()); if (item1["NavID"].ToString().Equals("menu.partsCount", StringComparison.OrdinalIgnoreCase)) { dayData1.DashboardData.PartCount = item1["DayValue"].ToString(); } else if (item1["NavID"].ToString().Equals("menu.downtime", StringComparison.OrdinalIgnoreCase)) { dayData1.DashboardData.DownTime = item1["DayValue"].ToString(); } dayData1.DashboardData.DashboardDetails.Add(dashboardDetails); } dayData1.PartsCountData = new List <PartsCountData>(); //for each shift and machine fill the part count data foreach (Shift shift in appData.Shifts) { PartsCountData partCountData = new PartsCountData(); PartCountChartData partCountChartData = new PartCountChartData(); partCountData.ShiftId = partCountChartData.ShiftId = shift.ShiftId; partCountData.ShiftName = partCountChartData.ShiftName = shift.ShiftName; partCountData.details = new List <PartsCountDetails>(); partCountChartData.ChartData = new Chart <PartsCountSeries>(); partCountChartData.ChartData.categories = new List <string>(); partCountChartData.ChartData.series = new List <PartsCountSeries>(); var datarow = dtPartCount.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "' AND Machineid = '" + item.MachineName + "' AND Shiftid = " + shift.ShiftId); //----for part count chart----START-- List <string> programs = datarow.Select(r => r["ProgramID"].ToString()).Distinct().ToList(); programs.Remove(""); List <int> id = datarow.Select(rr => Convert.ToInt32(rr["HourID"].ToString())).Distinct().ToList(); foreach (string prog in programs) { List <int> dataSeries = new List <int>(); id.ForEach(o => dataSeries.Add(0));//dataSeries.Add(int.MinValue)); PartsCountSeries prog1 = new PartsCountSeries() { name = prog, data = dataSeries }; partCountChartData.ChartData.series.Add(prog1); foreach (DataRow row in datarow.Where(r => r["ProgramID"].ToString() == prog)) { int hourId = Int32.Parse(row["HourID"].ToString()) - 1; dataSeries[hourId] = Int32.Parse(row["PartCount"].ToString()); } } //----for part count chart----END-- foreach (DataRow item1 in datarow) { PartsCountDetails partShift = new PartsCountDetails(); partShift.HourText = Convert.ToDateTime(item1["HourStart"].ToString()).ToString("htt").ToLower() + "-" + Convert.ToDateTime(item1["HourEnd"].ToString()).ToString("htt").ToLower(); partShift.Program = item1["ProgramID"].ToString(); partShift.PartsCount = item1["PartCount"].ToString(); partCountData.details.Add(partShift); //----for part count chart------ if (partCountChartData.ChartData.categories.Contains(partShift.HourText) == false) { partCountChartData.ChartData.categories.Add(partShift.HourText); } } dayData1.PartsCountData.Add(partCountData); dayData1.PartCountChartData.Add(partCountChartData); } dayData1.TimesData = new List <TimesData>(); //for each shift and machine fill the times data foreach (Shift shift in appData.Shifts) { TimesData timeData = new TimesData(); TimesChartData timeChart = new TimesChartData(); timeData.ShiftId = timeChart.ShiftId = shift.ShiftId; timeData.ShiftName = timeChart.ShiftName = shift.ShiftName; timeData.details = new List <TimesDetails>(); timeChart.ChartData = new Chart <TimeDataSeries>(); TimeDataSeries power = new TimeDataSeries() { name = "Power On Time", data = new List <int>() }; TimeDataSeries operating = new TimeDataSeries() { name = "Operating Time", data = new List <int>() }; TimeDataSeries cutting = new TimeDataSeries() { name = "CuttingTime", data = new List <int>() }; timeChart.ChartData.categories = new List <string>(); timeChart.ChartData.series = new List <TimeDataSeries>(); timeChart.ChartData.series.Add(power); timeChart.ChartData.series.Add(operating); timeChart.ChartData.series.Add(cutting); foreach (DataRow item1 in dtTimes.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "' AND Machineid = '" + item.MachineName + "' AND Shiftid = " + shift.ShiftId)) { TimesDetails timeShift = new TimesDetails(); timeShift.HourText = Convert.ToDateTime(item1["HourStart"].ToString()).ToString("htt").ToLower() + "-" + Convert.ToDateTime(item1["HourEnd"].ToString()).ToString("htt").ToLower(); timeShift.PowerNo = item1["PowerOntime"].ToString(); timeShift.Operating = item1["OperatingTime"].ToString(); timeShift.Cutting = item1["CuttingTime"].ToString(); timeData.TotalPOT = item1["TotalPOT"].ToString(); timeData.TotalOT = item1["TotalOT"].ToString(); timeData.TotalCT = item1["TotalCT"].ToString(); timeData.details.Add(timeShift); //for chart timeChart.ChartData.categories.Add(timeShift.HourText); power.data.Add(int.Parse(item1["PowerOntimeInt"].ToString())); operating.data.Add(int.Parse(item1["OperatingTimeInt"].ToString())); cutting.data.Add(int.Parse(item1["CuttingTimeInt"].ToString())); } dayData1.TimesData.Add(timeData); dayData1.TimesChartData.Add(timeChart); } dayData1.StoppagesData = new List <StoppagesData>(); //for each shift and machine fill the stoppages data foreach (Shift shift in appData.Shifts) { StoppagesData stoppageData = new StoppagesData(); stoppageData.ShiftId = shift.ShiftId; stoppageData.ShiftName = shift.ShiftName; stoppageData.details = new List <StoppagesDetails>(); foreach (DataRow item1 in dtStoppages.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "' AND Machineid = '" + item.MachineName + "' AND Shiftid = " + shift.ShiftId)) { StoppagesDetails stoppageShift = new StoppagesDetails(); if (string.IsNullOrEmpty(item1["BatchStart"].ToString())) { stoppageShift.Fromtime = null;// Convert.ToDateTime(item1["BatchStart"].ToString()); } else { stoppageShift.Fromtime = Convert.ToDateTime(item1["BatchStart"].ToString()); } if (string.IsNullOrEmpty(item1["BatchEnd"].ToString())) { stoppageShift.ToTime = null;// Convert.ToDateTime(item1["BatchEnd"].ToString()); } else { stoppageShift.ToTime = Convert.ToDateTime(item1["BatchEnd"].ToString()); } stoppageShift.Duration = item1["Stoppagetime"].ToString(); stoppageData.details.Add(stoppageShift); } dayData1.StoppagesData.Add(stoppageData); } //-----for each Alarm Details-------------------- foreach (Shift shift in appData.Shifts) { AlarmData alarmData = new AlarmData(); alarmData.ShiftId = shift.ShiftId; alarmData.ShiftName = shift.ShiftName; alarmData.details = new List <AlarmDetails>(); foreach (DataRow item1 in dtAlarmsDatails.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "' AND Machineid = '" + item.MachineName + "' AND Shiftid = " + shift.ShiftId)) { int alarm = 0; AlarmDetails alarmDetails = new AlarmDetails(); if (int.TryParse(item1["AlarmNo"].ToString(), out alarm)) { alarmDetails.alarmNo = alarm; } if (string.IsNullOrEmpty(item1["Fromtime"].ToString())) { alarmDetails.StartTime = null;// Convert.ToDateTime(item1["Fromtime"].ToString()); } else { alarmDetails.StartTime = Convert.ToDateTime(item1["Fromtime"].ToString()); } if (string.IsNullOrEmpty(item1["Totime"].ToString())) { alarmDetails.EndTime = null;// Convert.ToDateTime(item1["Totime"].ToString()); } else { alarmDetails.EndTime = Convert.ToDateTime(item1["Totime"].ToString()); } alarmDetails.Duration = item1["Duration"].ToString(); alarmDetails.Message = item1["AlarmMSG"].ToString(); if (int.TryParse(item1["Shiftcount"].ToString(), out alarm)) { alarmData.shiftCount = alarm; } alarmData.TotalDuration = item1["Totalduration"].ToString(); alarmData.details.Add(alarmDetails); } dayData1.AlarmsDetails.Add(alarmData); } //---for each Alarm Summary-------------- foreach (Shift shift in appData.Shifts) { AlarmData alarmData = new AlarmData(); alarmData.ShiftId = shift.ShiftId; alarmData.ShiftName = shift.ShiftName; alarmData.details = new List <AlarmDetails>(); foreach (DataRow item1 in dtAlarmsSummary.Select("PlantID = '" + appData.PlantMachine[i].PlantName + "' AND Machineid = '" + item.MachineName + "' AND Shiftid = " + shift.ShiftId)) { int alarm = 0; AlarmDetails alarmDetails = new AlarmDetails(); if (int.TryParse(item1["AlarmNo"].ToString(), out alarm)) { alarmDetails.alarmNo = alarm; } if (string.IsNullOrEmpty(item1["Lastseen"].ToString())) { alarmDetails.LastSeen = null;// Convert.ToDateTime(item1["Lastseen"].ToString()); } else { alarmDetails.LastSeen = Convert.ToDateTime(item1["Lastseen"].ToString()); } alarmDetails.Message = item1["AlarmMSG"].ToString(); if (int.TryParse(item1["NoOfOccurences"].ToString(), out alarm)) { alarmDetails.NoOfOcc = alarm; } alarmData.details.Add(alarmDetails); } dayData1.AlarmsSummary.Add(alarmData); } appdataDay.DayData.Add(dayData1); } } appData.appDataList.Add(appdataDay); } //if (dtAlarmsSolution.Columns.Count > 0) //{ // foreach (DataRow item in dtAlarmsSolution.Rows) // { // int slNo = 0; // AlarmSolution alarmSolution = new AlarmSolution(); // if (int.TryParse(item["Slno"].ToString(), out slNo)) // alarmSolution.SlNo = slNo; // if (int.TryParse(item["AlarmNo"].ToString(), out slNo)) // alarmSolution.AlarmNo = slNo; // alarmSolution.ImageName = item["FilePath"].ToString(); // alarmSolution.Description = item["Description"].ToString(); // alarmSolution.Cause = item["Cause"].ToString(); // alarmSolution.Solution = item["Solution"].ToString(); // alarmSolution.MTB = item["MTB"].ToString().ToUpper(); // appData.AlarmsSolution.Add(alarmSolution); // } //} } if (!rdr.IsClosed) { rdr.Close(); } } catch (Exception ex) { Logger.WriteErrorLog(ex.ToString()); } finally { conn.Close(); } return(appData); }