public Boolean IsLineDownTime(LCALineState lineDownTime) { Boolean _IsLineDownTime = true; Boolean _IsHLD1Down = IsMachineDownTime(lineDownTime.HLD1_STATE); Boolean _IsHLD2Down = IsMachineDownTime(lineDownTime.HLD2_STATE); Boolean _IsBSEDown = IsMachineDownTime(lineDownTime.BSE_STATE); Boolean _IsFOSPREPDown = IsMachineDownTime(lineDownTime.FOSPREP_STATE); Boolean _IsREFLOW1Down = IsMachineDownTime(lineDownTime.REFLOW1_STATE); Boolean _IsREFLOW2Down = IsMachineDownTime(lineDownTime.REFLOW2_STATE); Boolean _IsFOSPREP1Down = IsMachineDownTime(lineDownTime.FOSPREP1_STATE); Boolean _IsFOSPREP2Down = IsMachineDownTime(lineDownTime.FOSPREP2_STATE); Boolean _IsREFLOW3Down = IsMachineDownTime(lineDownTime.REFLOW3_STATE); Boolean _IsREFLOW4Down = IsMachineDownTime(lineDownTime.REFLOW4_STATE); Boolean _IsVTAAPDown = IsMachineDownTime(lineDownTime.VTAAP_STATE); Boolean _IsSWG1Down = IsMachineDownTime(lineDownTime.SWG1_STATE); Boolean _IsSWG2Down = IsMachineDownTime(lineDownTime.SWG2_STATE); Boolean _IsULRT1Down = IsMachineDownTime(lineDownTime.ULRT_STATE); _IsLineDownTime = _IsHLD1Down || _IsHLD2Down || _IsBSEDown || _IsSWG1Down || _IsSWG2Down || _IsULRT1Down || _IsFOSPREPDown || _IsREFLOW1Down || _IsREFLOW2Down || _IsFOSPREP1Down || _IsFOSPREP2Down || _IsREFLOW3Down || _IsREFLOW4Down || _IsVTAAPDown; return _IsLineDownTime; }
//Generate Line Time Span Table private void BtnReportLine_Click(object sender, EventArgs e) { #region validate table LCADownTimeDataDriver dataDriver = LCADownTimeDataDriver.Instance; if (!dataDriver.LCADataSet.Tables.Contains("LCA_DOWNTIME") || dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows.Count < 1) { MessageBox.Show("Please load Souce Data Firstly"); return; } dataDriver.WriteTableToList("LCA_DOWNTIME", typeof(LCAMachineState2).FullName); List<LCAMachineState2> dataList = new List<LCAMachineState2>(); foreach (LCAMachineState2 var in dataDriver.LCADataList) { dataList.Add(var); } dataList.Sort(LCAMachineState2.STARTTIMEComparison); DataTable dtNew = new DataTable("LCALineDownTime"); if (dataList == null || dataList.Count == 0) { MessageBox.Show("Please Load Data First"); return; } #endregion #region initial first state row DataRow iniRow; iniRow = dtNew.NewRow(); foreach (LCALineState.HEADERCHAR field in Enum.GetValues(typeof(LCALineState.HEADERCHAR))) { dtNew.Columns.Add(field.ToString(), typeof(LCALineState).GetProperty(field.ToString()).PropertyType); //dtNew.Columns.Add(field.ToString()); } iniRow[LCALineState.HEADERCHAR.START_TIME.ToString()] = startDateTime; iniRow[LCALineState.HEADERCHAR.STOP_TIME.ToString()] = startDateTime; //iniRow[LCALineState.HEADERCHAR.START_TIME.ToString()] = startDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //iniRow[LCALineState.HEADERCHAR.STOP_TIME.ToString()] = startDateTime.ToString("yyyy-MM-dd HH:mm:ss"); iniRow[LCALineState.HEADERCHAR.TIME_OF_STATE.ToString()] = 0; iniRow[LCALineState.HEADERCHAR.HLD1_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.HLD2_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.BSE_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.SWG1_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.SWG2_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.ULRT_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.STATION.ToString()] = "START"; iniRow[LCALineState.HEADERCHAR.ERROR_DESCRIPTION.ToString()] = ""; iniRow[LCALineState.HEADERCHAR.LCA_LINE.ToString()] = strCellNo; dtNew.Rows.Add(iniRow); #endregion #region add new state row DataRow dr; LCALineState[] LineStateArray = new LCALineState[dataList.Count]; LCAMachineState2 thisDownTime, nextDownTime; for (int i = 0; i < dataList.Count; i++) { thisDownTime = (LCAMachineState2)dataList[i]; if (i == dataList.Count - 1) { nextDownTime = new LCAMachineState2(); nextDownTime.START_TIME = maxDateTime; } else { nextDownTime = (LCAMachineState2)dataList[i + 1]; } DataRow lastRow = dtNew.Rows[i]; dr = dtNew.NewRow(); foreach (LCALineState.HEADERCHAR field in Enum.GetValues(typeof(LCALineState.HEADERCHAR))) { dr[field.ToString()] = lastRow[field.ToString()]; } dr[LCALineState.HEADERCHAR.START_TIME.ToString()] = thisDownTime.START_TIME.ToString("yyyy-MM-dd HH:mm:ss"); dr[LCALineState.HEADERCHAR.STOP_TIME.ToString()] = nextDownTime.START_TIME.ToString("yyyy-MM-dd HH:mm:ss"); dr[LCALineState.HEADERCHAR.TIME_OF_STATE.ToString()] = (nextDownTime.START_TIME.Ticks - thisDownTime.START_TIME.Ticks) / TimeSpan.TicksPerSecond; dr[LCALineState.HEADERCHAR.LCA_LINE.ToString()] = thisDownTime.LINE; dr[LCALineState.HEADERCHAR.STATION.ToString()] = thisDownTime.STATION_NAME; dr[LCALineState.HEADERCHAR.ERROR_DESCRIPTION.ToString()] = thisDownTime.ERROR_DESCRIPTION; dr[LCALineState.HEADERCHAR.LCA_LINE.ToString()] = thisDownTime.LINE; int MachineState = (int)thisDownTime.CURRENTSTATE; switch (thisDownTime.STATION_NAME) { case "HGALOAD1": dr[LCALineState.HEADERCHAR.HLD1_STATE.ToString()] = MachineState; break; case "HGALOAD2": dr[LCALineState.HEADERCHAR.HLD2_STATE.ToString()] = MachineState; break; case "BOSSENGAGE": dr[LCALineState.HEADERCHAR.BSE_STATE.ToString()] = MachineState; break; case "SWAGE1": dr[LCALineState.HEADERCHAR.SWG1_STATE.ToString()] = MachineState; break; case "SWAGE2": dr[LCALineState.HEADERCHAR.SWG2_STATE.ToString()] = MachineState; break; case "ULRT": dr[LCALineState.HEADERCHAR.ULRT_STATE.ToString()] = MachineState; break; default: break; } dtNew.Rows.Add(dr); } #endregion dataDriver.addTable(dtNew); DGVlineState.DataSource = dtNew; //dataDriver.WriteDataTableToDB(dtNew,"lca.lca_line_state"); String fileName = "LineState" + startDateTime.ToString("yyyyMMddHH") + "-" + endDateTime.ToString("yyyyMMddHH"); dataDriver.WriteDataToFile(dtNew, fileName); tabControl1.SelectedTab = TPLineState; BtnDrawLineTimeSpanChart.Enabled = true; }
public void CreateCustomHourlyChart(DateTime dtFrom, DateTime dtEnd) { startDateTime = dtFrom; endDateTime = dtEnd; #region load datasource LCADownTimeDataDriver dataDriver = LCADownTimeDataDriver.Instance; if (dataDriver.LCADataSet.Tables.Count > 0) { dataDriver.LCADataSet.Tables.Clear(); } LCAMachineState2 lcaDownTime = new LCAMachineState2(); String sql = LCAMachineState2.CreateSql(startDateTime.ToString("dd-MM-yyyy HH:mm:ss"), endDateTime.ToString("dd-MM-yyyy HH:mm:ss"),strCellNo); dataDriver.CrunchTable(sql, "LCA_DOWNTIME"); for (int i = 0; i < dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows.Count; i++) { if ((DateTime)dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows[i][LCAMachineState2.HEADERCHAR.STOP_TIME.ToString()] > dtEnd) { dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows[i][LCAMachineState2.HEADERCHAR.STOP_TIME.ToString()] = dtEnd; TimeSpan tempSpan = dtEnd - Convert.ToDateTime(dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows[i][LCAMachineState2.HEADERCHAR.START_TIME.ToString()]); dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows[i][LCAMachineState2.HEADERCHAR.TIME_OF_STATE.ToString()] = tempSpan.TotalSeconds; } } DGVstationState.DataSource = dataDriver.LCADataSet.Tables["LCA_DOWNTIME"]; #endregion #region UI if (dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows.Count == 0) { MessageBox.Show("No Record Found"); BtnDrawStationTimeSpanChart.Enabled = false; BtnStationHourlyReport.Enabled = false; BtnReportLine.Enabled = false; BtnDrawLineTimeSpanChart.Enabled = false; buManualImport.Enabled = false; LbxState.Enabled = false; LbxStation.Enabled = false; return; } LbxState.Enabled = true; LbxStation.Enabled = true; tabControl1.SelectedTab = TPStationState; #endregion #region Loda maxdate&mindate from Data Resouce DateTime thisStartTime, thisEndTime; minDateTime = startDateTime; maxDateTime = startDateTime; for (int i = 0; i < dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows.Count; i++) { thisStartTime = (DateTime)dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows[i][LCAMachineState2.HEADERCHAR.START_TIME.ToString()]; thisEndTime = (DateTime)dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows[i][LCAMachineState2.HEADERCHAR.STOP_TIME.ToString()]; if (thisStartTime < minDateTime) { minDateTime = thisStartTime; } if (thisEndTime > maxDateTime) { maxDateTime = thisEndTime; } } totalSecondSpan = (maxDateTime.Ticks - minDateTime.Ticks) / TimeSpan.TicksPerSecond; totalHourSpan = (maxDateTime.Ticks - minDateTime.Ticks) / TimeSpan.TicksPerHour; #endregion #region Load Station Data #region validate Table DataTable dt = (DataTable)DGVstationState.DataSource; DataTable dtNew = new DataTable("LCAHourlyDownTime"); if (dt == null || dt.Rows.Count == 0) { MessageBox.Show("Please Load Data First"); return; } #endregion #region station column&hour row add dtNew.Columns.Add(LCAMachineStateToPeriod.HEADERCHAR.Period.ToString()); foreach (LCABaseInfo.STATION_NAME station in (LCABaseInfo.STATION_NAME[])Enum.GetValues(typeof(LCABaseInfo.STATION_NAME))) { dtNew.Columns.Add(station.ToString()); } for (int i = 0; i < totalHourSpan + 1; i++) { DataRow newRow = dtNew.NewRow(); newRow[LCAMachineStateToPeriod.HEADERCHAR.Period.ToString()] = minDateTime.AddHours(i).ToString("yyyy-MM-dd-HH"); foreach (LCABaseInfo.STATION_NAME station in (LCABaseInfo.STATION_NAME[])Enum.GetValues(typeof(LCABaseInfo.STATION_NAME))) { newRow[station.ToString()] = 0; } dtNew.Rows.Add(newRow); } #endregion for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt.Rows[i]; //LCAMachineState2 lcaDownTime = new LCAMachineState2(); lcaDownTime.START_TIME = (DateTime)dr[LCAMachineState2.HEADERCHAR.START_TIME.ToString()]; lcaDownTime.STOP_TIME = (DateTime)dr[LCAMachineState2.HEADERCHAR.STOP_TIME.ToString()]; lcaDownTime.TIME_OF_STATE = System.Convert.ToInt32(dr[LCAMachineState2.HEADERCHAR.TIME_OF_STATE.ToString()]); lcaDownTime.CURRENTSTATE = System.Convert.ToInt32(dr[LCAMachineState2.HEADERCHAR.CURRENTSTATE.ToString()]); lcaDownTime.STATION_NAME = dr[LCAMachineState2.HEADERCHAR.STATION_NAME.ToString()].ToString(); #region check select option Boolean IsState = false; Boolean IsStation = false; foreach (String state in LbxState.SelectedItems) { if (lcaDownTime.CURRENTSTATE == (int)Enum.Parse(typeof(LCABaseInfo.OEE_STATE), state)) { IsState = true; break; } } if (!IsState) continue; foreach (String station in LbxStation.SelectedItems) { if (lcaDownTime.STATION_NAME == station) { IsStation = true; break; } } if (!IsStation) continue; #endregion #region hourly downtime calculation int HourIndex = Convert.ToInt32((lcaDownTime.START_TIME.Ticks - minDateTime.Ticks) / TimeSpan.TicksPerHour); int hourlydowntime = System.Convert.ToInt32(dtNew.Rows[HourIndex][lcaDownTime.STATION_NAME].ToString()); int stateTime = (int)lcaDownTime.TIME_OF_STATE; if (lcaDownTime.START_TIME.Second + lcaDownTime.START_TIME.Minute * 60 + stateTime > 3600) { dtNew.Rows[HourIndex][lcaDownTime.STATION_NAME] = hourlydowntime + 3600 - lcaDownTime.START_TIME.Second - lcaDownTime.START_TIME.Minute * 60; int j = 1; for (j = 0; j < (stateTime + lcaDownTime.START_TIME.Second + lcaDownTime.START_TIME.Minute * 60) / 3600 - 1; j++) { if (HourIndex + j + 1 > totalHourSpan - 1) { break; } dtNew.Rows[HourIndex + j + 1][lcaDownTime.STATION_NAME] = System.Convert.ToInt32(dtNew.Rows[HourIndex + j + 1][lcaDownTime.STATION_NAME].ToString()) + 3600; } if (HourIndex + j + 1 > totalHourSpan - 1) { continue; } dtNew.Rows[HourIndex + j + 1][lcaDownTime.STATION_NAME] = System.Convert.ToInt32(dtNew.Rows[HourIndex + j + 1][lcaDownTime.STATION_NAME].ToString()) + (lcaDownTime.START_TIME.Second + lcaDownTime.START_TIME.Minute * 60 + stateTime) % 3600; } else { dtNew.Rows[HourIndex][lcaDownTime.STATION_NAME] = hourlydowntime + stateTime; } #endregion } DGVstationHourly.DataSource = dtNew; tabControl1.SelectedTab = TPStationHourly; #endregion #region Draw Station Span Chart GetStationSpanChart(); #endregion #region Load Line Data #region validate table if (!dataDriver.LCADataSet.Tables.Contains("LCA_DOWNTIME") || dataDriver.LCADataSet.Tables["LCA_DOWNTIME"].Rows.Count < 1) { MessageBox.Show("Please load Souce Data Firstly"); return; } dataDriver.WriteTableToList("LCA_DOWNTIME", typeof(LCAMachineState2).FullName); List<object> dataList = dataDriver.LCADataList; DataTable dtLineNew = new DataTable("LCALineDownTime"); if (dataList == null || dataList.Count == 0) { MessageBox.Show("Please Load Data First"); return; } #endregion #region initial first state row DataRow iniRow; iniRow = dtLineNew.NewRow(); foreach (LCALineState.HEADERCHAR field in Enum.GetValues(typeof(LCALineState.HEADERCHAR))) { dtLineNew.Columns.Add(field.ToString(), typeof(LCALineState).GetProperty(field.ToString()).PropertyType); //dtNew.Columns.Add(field.ToString()); } iniRow[LCALineState.HEADERCHAR.START_TIME.ToString()] = startDateTime; iniRow[LCALineState.HEADERCHAR.STOP_TIME.ToString()] = startDateTime; //iniRow[LCALineState.HEADERCHAR.START_TIME.ToString()] = startDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //iniRow[LCALineState.HEADERCHAR.STOP_TIME.ToString()] = startDateTime.ToString("yyyy-MM-dd HH:mm:ss"); iniRow[LCALineState.HEADERCHAR.TIME_OF_STATE.ToString()] = 0; iniRow[LCALineState.HEADERCHAR.HLD1_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.HLD2_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.BSE_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.SWG1_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.SWG2_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.ULRT_STATE.ToString()] = 1000; iniRow[LCALineState.HEADERCHAR.STATION.ToString()] = "START"; iniRow[LCALineState.HEADERCHAR.ERROR_DESCRIPTION.ToString()] = ""; iniRow[LCALineState.HEADERCHAR.LCA_LINE.ToString()] = ""; dtLineNew.Rows.Add(iniRow); #endregion #region add new state row DataRow drLine; LCALineState[] LineStateArray = new LCALineState[dataList.Count]; LCAMachineState2 thisDownTime, nextDownTime; for (int i = 0; i < dataList.Count; i++) { thisDownTime = (LCAMachineState2)dataList[i]; if (i == dataList.Count - 1) { nextDownTime = new LCAMachineState2(); nextDownTime.START_TIME = maxDateTime; } else { nextDownTime = (LCAMachineState2)dataList[i + 1]; } DataRow lastRow = dtLineNew.Rows[i]; drLine = dtLineNew.NewRow(); foreach (LCALineState.HEADERCHAR field in Enum.GetValues(typeof(LCALineState.HEADERCHAR))) { drLine[field.ToString()] = lastRow[field.ToString()]; } drLine[LCALineState.HEADERCHAR.START_TIME.ToString()] = thisDownTime.START_TIME.ToString("yyyy-MM-dd HH:mm:ss"); drLine[LCALineState.HEADERCHAR.STOP_TIME.ToString()] = nextDownTime.START_TIME.ToString("yyyy-MM-dd HH:mm:ss"); drLine[LCALineState.HEADERCHAR.TIME_OF_STATE.ToString()] = (nextDownTime.START_TIME.Ticks - thisDownTime.START_TIME.Ticks) / TimeSpan.TicksPerSecond; drLine[LCALineState.HEADERCHAR.LCA_LINE.ToString()] = thisDownTime.LINE; drLine[LCALineState.HEADERCHAR.STATION.ToString()] = thisDownTime.STATION_NAME; drLine[LCALineState.HEADERCHAR.ERROR_DESCRIPTION.ToString()] = thisDownTime.ERROR_DESCRIPTION; drLine[LCALineState.HEADERCHAR.LCA_LINE.ToString()] = thisDownTime.LINE; int MachineState = (int)thisDownTime.CURRENTSTATE; switch (thisDownTime.STATION_NAME) { case "HgaLoad1": drLine[LCALineState.HEADERCHAR.HLD1_STATE.ToString()] = MachineState; break; case "HgaLoad2": drLine[LCALineState.HEADERCHAR.HLD2_STATE.ToString()] = MachineState; break; case "BossEngage": drLine[LCALineState.HEADERCHAR.BSE_STATE.ToString()] = MachineState; break; case "SWAGE1": drLine[LCALineState.HEADERCHAR.SWG1_STATE.ToString()] = MachineState; break; case "SWAGE2": drLine[LCALineState.HEADERCHAR.SWG2_STATE.ToString()] = MachineState; break; case "ULRT": drLine[LCALineState.HEADERCHAR.ULRT_STATE.ToString()] = MachineState; break; default: break; } dtLineNew.Rows.Add(drLine); } #endregion dataDriver.addTable(dtLineNew); DGVlineState.DataSource = dtLineNew; tabControl1.SelectedTab = TPLineState; #endregion #region Draw Line Data Chart #region Draw Line D/T Chart #region validate table dataDriver = LCADownTimeDataDriver.Instance; if (!dataDriver.LCADataSet.Tables.Contains("LCALineDownTime") || dataDriver.LCADataSet.Tables["LCALineDownTime"].Rows.Count < 1) { MessageBox.Show("Please load Souce Data Firstly"); return; } dataDriver.WriteTableToList("LCALineDownTime", typeof(LCALineState).FullName); List<object> dataLineList = dataDriver.LCADataList; if (dataList == null || dataList.Count == 0) { MessageBox.Show("Please Load Data and LCA line State Report First"); return; } #endregion #region initial Draw Chart setting TimeSpanBarChartDraw ChartDraw = TimeSpanBarChartDraw.Instance; ChartDraw.IniGraphics(); ChartDraw.ChartAreaStartX = 80; ChartDraw.ChartAreaStartY = 80; ChartDraw.BarStartX = 100; ChartDraw.BarStartX = 100; #endregion #region Draw Series Legends SeriesLegend[] SeriesLegends = new SeriesLegend[LCADrawInfo.LineState_Colors().Count]; int SereiesIndex = 0; foreach (KeyValuePair<String, Color> lineStateColor in LCADrawInfo.LineState_Colors()) { SeriesLegends[SereiesIndex] = new SeriesLegend(SereiesIndex, lineStateColor.Key.ToString(), lineStateColor.Value); SereiesIndex++; } ChartDraw.DrawSeriesLengends(SeriesLegends); #endregion DataTable dtLineChartNew = new DataTable("LCALineHourlyDownTime"); LCADownTimeRule rule = LCADownTimeRule.Instance; #region station column&hour row add dtLineChartNew.Columns.Add(LCAMachineStateToPeriod.HEADERCHAR.Period.ToString()); foreach (LCABaseInfo.LINE_STATE lineState in (LCABaseInfo.LINE_STATE[])Enum.GetValues(typeof(LCABaseInfo.LINE_STATE))) { dtLineChartNew.Columns.Add(lineState.ToString()); } for (int i = 0; i < totalHourSpan + 1; i++) { DataRow newRow = dtLineChartNew.NewRow(); newRow[LCAMachineStateToPeriod.HEADERCHAR.Period.ToString()] = minDateTime.AddHours(i).ToString("yyyy-MM-dd-HH"); foreach (LCABaseInfo.LINE_STATE lineState in (LCABaseInfo.LINE_STATE[])Enum.GetValues(typeof(LCABaseInfo.LINE_STATE))) { newRow[lineState.ToString()] = 0; } dtLineChartNew.Rows.Add(newRow); } #endregion for (int i = 0; i < dataDriver.LCADataList.Count; i++) { LCALineState lineDowntime = (LCALineState)dataList[i]; #region Draw Time Span Bar float barStartX = (float)(lineDowntime.START_TIME.Ticks - minDateTime.Ticks) / TimeSpan.TicksPerSecond / totalSecondSpan * ChartDraw.ChartWitdh; float barWidth = (float)lineDowntime.TIME_OF_STATE / totalSecondSpan * ChartDraw.ChartWitdh; TimeSpanBar bar = new TimeSpanBar(0, barStartX, barWidth); bar.BarColor = LCADrawInfo.LineState_Colors()["Pause"]; if (rule.IsLineDownTime(lineDowntime)) { bar.BarColor = LCADrawInfo.LineState_Colors()["Stop"]; } if (rule.IsLineUpTime(lineDowntime)) { bar.BarColor = LCADrawInfo.LineState_Colors()["Run"]; } ChartDraw.DrawBar(bar); #endregion LCAMachineStateToPeriod stateToHour = new LCAMachineStateToPeriod(); lineDowntime.LCA_LINE = "LCA_CELL_2"; #region hourly downtime calculation int HourIndex = Convert.ToInt32((lineDowntime.START_TIME.Ticks - minDateTime.Ticks) / TimeSpan.TicksPerHour); String lineState = LCABaseInfo.LINE_STATE.Pause.ToString(); if (rule.IsLineUpTime(lineDowntime)) { lineState = LCABaseInfo.LINE_STATE.Run.ToString(); } if (rule.IsLineDownTime(lineDowntime)) { lineState = LCABaseInfo.LINE_STATE.Stop.ToString(); } int hourlydowntime = System.Convert.ToInt32(dtLineChartNew.Rows[HourIndex][lineState].ToString()); int stateTime = (int)lineDowntime.TIME_OF_STATE; if (lineDowntime.START_TIME.Second + lineDowntime.START_TIME.Minute * 60 + stateTime > 3600) { dtLineChartNew.Rows[HourIndex][lineState] = hourlydowntime + 3600 - lineDowntime.START_TIME.Second - lineDowntime.START_TIME.Minute * 60; int j = 1; for (j = 0; j < (stateTime + lineDowntime.START_TIME.Second + lineDowntime.START_TIME.Minute * 60) / 3600 - 1; j++) { if (HourIndex + j + 1 > totalHourSpan - 1) { break; } dtLineChartNew.Rows[HourIndex + j + 1][lineState] = System.Convert.ToInt32(dtLineChartNew.Rows[HourIndex + j + 1][lineState].ToString()) + 3600; } if (HourIndex + j + 1 > totalHourSpan - 1) { continue; } dtLineChartNew.Rows[HourIndex + j + 1][lineState] = System.Convert.ToInt32(dtLineChartNew.Rows[HourIndex + j + 1][lineState].ToString()) + (lineDowntime.START_TIME.Second + lineDowntime.START_TIME.Minute * 60 + stateTime) % 3600; } else { dtLineChartNew.Rows[HourIndex][lineState] = hourlydowntime + stateTime; } #endregion } #endregion #region Draw Output Interval Chart #region Get Hourly Output Data string strFrom, strEnd; OleDbUtility oleUtility = new OleDbUtility("ods", "users", "users"); oleUtility.getConnection(); oleUtility.OpenConnection(); strFrom = dtFrom.ToString("yyyy-MM-dd HH:mm"); strEnd = dtEnd.ToString("yyyy-MM-dd HH:mm"); string strSQL = "select to_char(lca.birth_date,'yyyy-MM-dd-hh24') as hourly,count(*) as output from lca.lca_data2 lca where to_char(lca.birth_date,'yyyy-MM-dd hh24:mi') between '" + strFrom + "' and '" + strEnd + "' and lca_line='"+strCellNo+"' group by to_char(lca.birth_date,'yyyy-MM-dd-hh24') order by to_char(lca.birth_date,'yyyy-MM-dd-hh24')"; DataTable dtOutput = new DataTable("OutputSourceData"); dtOutput = oleUtility.SQLQuery_DataTable(strSQL); dtLineChartNew.Columns.Add("Output"); for (int i = 0, j = 0; i < dtLineChartNew.Rows.Count; i++) { if (i >= dtLineChartNew.Rows.Count || j >= dtOutput.Rows.Count) { break; } else { if (dtLineChartNew.Rows[i][0].ToString() == dtOutput.Rows[j][0].ToString()) { dtLineChartNew.Rows[i]["Output"] = dtOutput.Rows[j][1]; j++; } else { dtLineChartNew.Rows[i]["Output"] = 0; } } } //DataTable dtCombine = dataDriver.CombineDataTable(dtNew, dataDriver.LCADataSet.Tables["OutputSourceData"], "HourlyOutput"); #endregion #region Draw TimeSpan Grid SeriesGrid lineGrid = new SeriesGrid(0, "LCA_CELL_2"); ChartDraw.DrawSeriersGrid(lineGrid); for (int i = 0; i < totalHourSpan + 2; i++) { String LabelText = (minDateTime.AddHours(i).Hour).ToString(); TimeSpanGrid gird = new TimeSpanGrid(LabelText, (float)3600 / totalSecondSpan * ChartDraw.ChartWitdh * i, 0, 500); ChartDraw.DrawTimeSpanGrid(gird); } #endregion #region Draw Chart Area TimeIntervalChartDraw graph = TimeIntervalChartDraw.Instance; IntervalChartArea chartArea = new IntervalChartArea(100, 150, 800, 430); graph.colorSplit = 8; graph.IniGraphics(ChartDraw.ChartImg); graph.AddChartArea(chartArea); #endregion #region Get Time Span DataTable dtSQL = new DataTable("SQLTabel"); DataTable dtInterval = new DataTable("IntervalTabel"); dtInterval.Columns.Add("Time", typeof(int)); dtInterval.Columns.Add("Interval", typeof(int)); DataTable dtIntervalGrid = new DataTable("GridData"); dtIntervalGrid.Columns.Add("Time", typeof(DateTime)); dtIntervalGrid.Columns.Add("Interval", typeof(int)); TimeSpan span = dtEnd - dtFrom; strFrom = dtFrom.ToString("yyyy-MM-dd HH:mm:ss"); strEnd = dtEnd.ToString("yyyy-MM-dd HH:mm:ss"); #endregion #region Draw Grid Int32 yMid = Convert.ToInt32(textMid.Text); Int32 yMax = Convert.ToInt32(textMax.Text); span = dtEnd - dtFrom; LegendGrid grid = new LegendGrid(Convert.ToInt32(span.TotalHours), yMid); graph.AddAxis(grid); #endregion #region Output Data strSQL = "select to_char(birth_date,'yyyy-MM-dd hh24:mi:ss') as dateChar from lca.lca_data2 where to_char(birth_date,'yyyy-MM-dd hh24:mi:ss') between '" + strFrom + "' and '" + strEnd + "' and lca_line='2' order by birth_date"; dtSQL = oleUtility.SQLQuery_DataTable(strSQL); if (dtSQL.Rows.Count == 0) { return; } int intRed = 0; int intGreen = 0; int intYellow = 0; #endregion #region Draw First Point IntervalBar barPoint = new IntervalBar(); DataRow newIntervalRow = dtInterval.NewRow(); span = Convert.ToDateTime(dtSQL.Rows[0][0].ToString()) - Convert.ToDateTime(strFrom); newIntervalRow[0] = span.TotalSeconds; newIntervalRow[1] = span.TotalSeconds; if (Convert.ToInt32(newIntervalRow[1]) >= yMid && Convert.ToInt32(newIntervalRow[1]) < yMax) { barPoint.BarHeight = yMid; barPoint.BarColor = Color.Yellow; intYellow++; } else if (Convert.ToInt32(newIntervalRow[1]) >= yMax) { barPoint.BarHeight = yMid; barPoint.BarColor = Color.Orchid; intRed++; } else { barPoint.BarHeight = Convert.ToInt32(newIntervalRow[1]); barPoint.BarColor = Color.LightSkyBlue; intGreen++; } barPoint.XStart = 0; barPoint.YStart = barPoint.BarHeight; barPoint.BarWidth = Convert.ToInt32(newIntervalRow[1]); graph.DrawBarPoint(barPoint); dtInterval.Rows.Add(newIntervalRow); DataRow dtGrid = dtIntervalGrid.NewRow(); if (Convert.ToInt32(newIntervalRow[1]) >= yMax) { dtGrid[0] = Convert.ToDateTime(strFrom).AddSeconds(Convert.ToInt32(newIntervalRow[0])); dtGrid[1] = newIntervalRow[1]; dtIntervalGrid.Rows.Add(dtGrid); } #endregion #region Draw Other Points for (int i = 1; i < dtSQL.Rows.Count; i++) { newIntervalRow = dtInterval.NewRow(); span = Convert.ToDateTime(dtSQL.Rows[i][0].ToString()) - Convert.ToDateTime(strFrom); newIntervalRow[0] = span.TotalSeconds; newIntervalRow[1] = span.TotalSeconds - Convert.ToInt32(dtInterval.Rows[i - 1][0].ToString()); if (Convert.ToInt32(newIntervalRow[1]) >= yMid && Convert.ToInt32(newIntervalRow[1]) < yMax) { barPoint.BarHeight = yMid; barPoint.BarColor = Color.Yellow; intYellow++; } else if (Convert.ToInt32(newIntervalRow[1]) >= yMax) { barPoint.BarHeight = yMid; barPoint.BarColor = Color.Orchid; intRed++; dtGrid = dtIntervalGrid.NewRow(); dtGrid[0] = Convert.ToDateTime(strFrom).AddSeconds(Convert.ToInt32(newIntervalRow[0])); dtGrid[1] = newIntervalRow[1]; dtIntervalGrid.Rows.Add(dtGrid); } else { barPoint.BarHeight = Convert.ToInt32(newIntervalRow[1]); barPoint.BarColor = Color.LightSkyBlue; intGreen++; } barPoint.YStart = barPoint.BarHeight; barPoint.BarWidth = Convert.ToInt32(newIntervalRow[1]); barPoint.XStart = Convert.ToInt32(newIntervalRow[0]) - Convert.ToInt32(newIntervalRow[1]); graph.DrawBarPoint(barPoint); dtInterval.Rows.Add(newIntervalRow); } #endregion #endregion #region Show Chart ON Form dtInvervalAbnormal.DataSource = dtIntervalGrid; graph.AddCountLabel(intRed, intGreen, intYellow); graph.DrawStartLabel(dtSQL.Rows[0][0].ToString()); graph.DrawEndLabel(dtSQL.Rows[dtSQL.Rows.Count - 1][0].ToString()); String fileName = "LineDT" + startDateTime.ToString("yyyy-MM-dd-HH"); DGVlineHourly.DataSource = dtLineChartNew; tabControl1.SelectedTab = TPLineHourly; graph.saveImg(fileName); graph.saveWebImg(fileName); //ChartForm newForm = new ChartForm(); //newForm.Text = graph.ImgFileName; //newForm.Height = ChartDraw.ChartHeight; //newForm.Width = ChartDraw.ChartWitdh; //newForm.BackgroundImage = graph.ChartImg; //newForm.BackgroundImageLayout = ImageLayout.Stretch; //newForm.Show(); #endregion #endregion }
public Boolean IsLineUpTime(LCALineState lineDownTime) { Boolean _IsLineUpTime = false; Boolean _IsHLD1Up = IsMachineUpTime(lineDownTime.HLD1_STATE); Boolean _IsHLD2Up = IsMachineUpTime(lineDownTime.HLD2_STATE); Boolean _IsBSEUp = IsMachineUpTime(lineDownTime.BSE_STATE); Boolean _IsFOSPREPUp = IsMachineUpTime(lineDownTime.FOSPREP_STATE); Boolean _IsREFLOW1Up = IsMachineUpTime(lineDownTime.REFLOW1_STATE); Boolean _IsREFLOW2Up = IsMachineUpTime(lineDownTime.REFLOW2_STATE); Boolean _IsFOSPREP1Up = IsMachineUpTime(lineDownTime.FOSPREP1_STATE); Boolean _IsFOSPREP2Up = IsMachineUpTime(lineDownTime.FOSPREP2_STATE); Boolean _IsREFLOW3Up = IsMachineUpTime(lineDownTime.REFLOW3_STATE); Boolean _IsREFLOW4Up = IsMachineUpTime(lineDownTime.REFLOW4_STATE); Boolean _IsVTAAPUp = IsMachineUpTime(lineDownTime.VTAAP_STATE); Boolean _IsSWG1Up = IsMachineUpTime(lineDownTime.SWG1_STATE); Boolean _IsSWG2Up = IsMachineUpTime(lineDownTime.SWG2_STATE); Boolean _IsULRT1Up = IsMachineUpTime(lineDownTime.ULRT_STATE); _IsLineUpTime = _IsHLD1Up && _IsHLD2Up && _IsBSEUp & _IsSWG1Up && _IsSWG2Up && _IsULRT1Up && _IsFOSPREPUp && _IsREFLOW1Up && _IsREFLOW2Up && _IsFOSPREP1Up && _IsFOSPREP2Up && _IsREFLOW3Up && _IsREFLOW4Up && _IsVTAAPUp; return _IsLineUpTime; }