public MainWindow() { InitializeComponent(); //enum test SegmentSummaryStates test = SegmentSummaryStates.CycleEnCours; string teste = test.Description(); //System.Windows.MessageBox.Show(teste); }
public void NextSegment() { /************************************************************************************************************** * -> Method : NextSegment * -> Event : "Skip Segmemnt" clicked OR when Segment ends * -> Description: This method skips to the next segment. It also updates the properties of the running and next segment * There is an object of type Segment_Details called "CurrentRunningSegment" and it holds all properties * of a segment adn is updated with each new Segment. **************************************************************************************************************/ try { //If reach Max Segment if (Int32.Parse(CurrentRunningSegment.Segment_Number) == Segments.Count - 1) { MessageBox.Show("No More Segments Available"); RunningRemSegments = "0"; RunningNb = (Int32.Parse(CurrentRunningSegment.Segment_Number) + 1).ToString(); NextNb = "NULL"; NextRampHr = "NULL"; NextRampMin = "NULL"; NextSetPt = "NULL"; NextSoak = "NULL"; return; } //1-Update Running Segment Properties CurrentRunningSegment = Segments[(Int32.Parse(RunningNb))]; //runningNb is 2 lets say, so segment 2. I want to go to segment 3, which is Segments[3-1]=Segments[2]=Segments[RunningNb] RunningNb = (Int32.Parse(CurrentRunningSegment.Segment_Number)).ToString(); RunningRemSegments = (Int32.Parse(NbSegments) - Int32.Parse(RunningNb)).ToString(); RunningRampHrUI = CurrentRunningSegment.MAX_RAMP; RunningRampMinUI = CurrentRunningSegment.MAX_RAMP; SetPt = CurrentRunningSegment.RAMP_SP; RunningSoak = CurrentRunningSegment.SOAK_TIME; //2-Update Next Segment Properties NextNb = (Int32.Parse(RunningNb) + 1).ToString(); NextRampHr = CurrentRunningSegment.MAX_RAMP; NextRampMin = CurrentRunningSegment.MIN_RAMP; NextSetPt = CurrentRunningSegment.RAMP_SP; NextSoak = CurrentRunningSegment.SOAK_SP; SegmentSummaryStates testEnAttente = SegmentSummaryStates.EnAttente; TitleMenuStatus = testEnAttente.Description(); //System.Windows.MessageBox.Show(teste); } catch (Exception Ex) { MessageBox.Show(Ex.Message); } }
//METHODS public void InitializeRecipeSegments() { /************************************************************************************************************** * -> Method : InitializeRecipeSegments * -> Event : When Commit load is clicked * -> Description: This method is used to initialize the chosen recipe by binding all of the properties to the UI. * The list of type Segment_Details called "Segments" holds all segments in the recipe and allows * to skip between the segments. **************************************************************************************************************/ //1-instantiate separate OPC connection on separate thread //with each new segment, need to write on PLC the desired target value, then need to monitor every x amount seconds // need to constantly monitor the values of the PLC for the running segment(maybe on separate thread?, and maybe on separate OPC instance, unsure) //readOPCThread = new Thread(new ThreadStart(() => //{ // OPCReadValues = new OPCUtil(); // if (OPCReadValues.Connect()) // { // MessageBox.Show("Connected!"); // _eventAggregator.GetEvent<UpdatedSourceEvent>().Publish(new OPCObject("Set_Pt", newResult.ToString())); // } //})); //readOPCThread.Start(); //2-Get recipe segments that will be written onto the PLC(Need to access DB) and store as segment objects in list "Segments" using (OracleConnection connection = new OracleConnection(connectionString)) { //string queryString = String.Format("SELECT * FROM RECIPESEGMENT INNER JOIN segment ON RECIPESEGMENT.ID_segment = segment.id INNER JOIN recipe ON RECIPESEGMENT.ID_recipe = recipe.id where recipe.recipe_name = '{0}' order by segment.segment_number", RecipeName); string queryString = String.Format("SELECT * FROM SEGMENTS INNER JOIN RECIPES on SEGMENTS.ID_recipe = recipes.id where recipes.recipe_name = '{0}' order by segment_number", RecipeName); OracleCommand command = new OracleCommand(queryString, connection); connection.Open(); try { using (OracleDataReader reader = command.ExecuteReader()) { DataTable dataTable = new DataTable(); dataTable.Load(reader); for (int i = 0; i < dataTable.Rows.Count; ++i) { Segments.Add(new Segment_Details { ID = Convert.ToInt32(dataTable.Rows[i][0]), Segment_Number = dataTable.Rows[i][2].ToString(), RAMP_SP = dataTable.Rows[i][3].ToString(), MIN_RAMP = dataTable.Rows[i][4].ToString(), MAX_RAMP = dataTable.Rows[i][5].ToString(), SOAK_SP = dataTable.Rows[i][6].ToString(), MIN_SOAK = dataTable.Rows[i][7].ToString(), MAX_SOAK = dataTable.Rows[i][8].ToString(), SOAK_TIME = dataTable.Rows[i][9].ToString(), LOW_TEMP_MODE_SP = dataTable.Rows[i][10].ToString(), ALARM_TEMP_TH = dataTable.Rows[i][11].ToString(), LOW_TEMP_MODE_EN = Convert.ToChar(dataTable.Rows[i][12]), }); } //3-Update Running Segment fields NbSegments = Segments.Count().ToString(); CurrentRunningSegment = Segments[0]; RunningNb = CurrentRunningSegment.Segment_Number; RunningRemSegments = (Int32.Parse(NbSegments) - Int32.Parse(RunningNb)).ToString(); RunningRampHrUI = Segments[0].MAX_RAMP; RunningRampMinUI = Segments[0].MAX_RAMP; SetPt = Segments[0].RAMP_SP; RunningSoak = Segments[0].SOAK_TIME; RunningSegmentStatus purge = RunningSegmentStatus.Purge; RunningStatusUI = purge.Description(); SegmentSummaryStates testEnCours = SegmentSummaryStates.CycleEnCours; TitleMenuStatus = testEnCours.Description(); //4-Update Next Segment Fields NextNb = (Int32.Parse(RunningNb) + 1).ToString(); if (Segments.Count > 1) { NextRampHr = Segments[1].MAX_RAMP; NextRampMin = Segments[1].MIN_RAMP; NextSetPt = Segments[1].RAMP_SP; NextSoak = Segments[1].SOAK_SP; } else { RunningRemSegments = "0"; NextNb = "NULL"; NextRampHr = "NULL"; NextRampMin = "NULL"; NextSetPt = "NULL"; NextSoak = "NULL"; } } } catch (Exception Ex) { MessageBox.Show(Ex.Message); } finally { connection.Close(); } } }