using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using static Project.StateMachine; namespace Project { public partial class fMain { private void ColorChangeMotionST(arCtl.arLabel ctl, Color c, Boolean isvalue) { if (isvalue) { int r = c.R + 100; int g = c.G + 100; int b = c.B + 100; if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255; if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0; ctl.BackColor = Color.FromArgb(r, g, b); ctl.BackColor2 = c; } else { ctl.BackColor = Color.FromArgb(100, 100, 100); ctl.BackColor2 = Color.FromArgb(90, 90, 90); } } private void BCDHWStatus(Boolean enable, arCtl.arLabel ctl, bool isReady) { if (enable == false) { ctl.BackColor2 = Color.Gray; } else { if (isReady) { ctl.BackColor2 = Color.SeaGreen; } else { if (ctl.BackColor2 == Color.Tomato) { ctl.BackColor2 = Color.Gray; } else { ctl.BackColor2 = Color.Tomato; } } } } void BlinkHwstatus(int row, int col, int value1, int value2) { var curValue = HWState.getValue(row, col); HWState.setValue(row, col, (byte)(curValue == value1 ? value2 : value1)); // } Boolean displayOn = false; private void tmDisplay_Tick(object sender, EventArgs e) { if (displayOn == false) displayOn = true; else { Pub.log.AddAT("Display Timer Overlab");// Console.WriteLine("display overlab"); return; } if (Pub.sm.Step > eSMStep.INIT && panTopMenu.Enabled == false) panTopMenu.Enabled = true; //쓰레드로인해서 메인에서 진행하게한다. SPS는 메인쓰레드에서 진행 됨 //팝을 제거 혹은 표시하는 기능 if (Pub.popup.needShow) Pub.popup.showMessage(); else if (Pub.popup.needClose) Pub.popup.Visible = false; // .setVision(false)(); lbTime.Text = Pub.sm.UpdateTime.ToString("yyyy-MM-dd HH:mm:ss"); //상태 표시 Update_SSStatus(); //H/W 상태표시 Update_HWStatus(); //IO상태(상단줄) 표시 Update_IOStatus(); //display mesasge UpdateResultMessage(); //메세지창이 깜박거려야하는 상황 체크 if (lbMsg.Tag != null) { var bg1 = lbMsg.BackColor; var bg2 = lbMsg.BackColor2; lbMsg.BackColor = bg2; lbMsg.BackColor2 = bg1; lbMsg.Invalidate(); } HWState.Invalidate(); SSInfo.Invalidate(); IOState.Invalidate(); #region retgion"1분 time 루틴" var ts = DateTime.Now - tm1minute; if (ts.TotalMinutes >= 1) { //리셋카운트 _AutoResetCount(); tm1minute = DateTime.Now; } #endregion #region retgion"5분 time 루틴" ts = DateTime.Now - tm5minute; if (ts.TotalMinutes >= 5) { //남은디스크확인 CheckFreeSpace(); tm5minute = DateTime.Now; } #endregion //wat.Stop(); //Console.WriteLine("disp time : " + wat.ElapsedMilliseconds.ToString() + "ms"); displayOn = false; } void Update_IOStatus() { int inputrow = 1; int inputcol = 0; IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.VS_READY) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.VS_OK) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.VS_ERR) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.VS_COMPLETE) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.VS_LOTEND) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); var numver_mz = Pub.plc1.getValue(7902); var numver_sn = Pub.plc1.getValue(7903); var bin_mz = Convert.ToString(numver_mz, 2).PadLeft(16,'0'); var bin_sn = Convert.ToString(numver_sn, 2).PadLeft(16, '0'); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); inputrow = 0; inputcol = 0; IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.MC_START) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.MC_CONFIRM) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, (ushort)(Pub.plc1.getValue(7900, (int)eDIName.MC_LOTEND) ? 1 : 0)); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); IOState.setTitle(inputrow, inputcol, "--"); IOState.setValue(inputrow, inputcol++, 0); //IOState.setTitle(0, inputcol, "DOOR"); IOState.setValue(0, inputcol++, (ushort)(Util_DO.CheckDoorSafty() ? 1 : 2)); //IOState.setTitle(0, inputcol, "SAFTY"); IOState.setValue(0, inputcol++, (ushort)(Pub.flag.get(eFlag.MGZSafty1) && Pub.flag.get(eFlag.MGZSafty2) ? 1 : 2)); //IOState.setTitle(0, inputcol, "FULL"); IOState.setValue(0, inputcol++, (ushort)(Util_DO.GetIOInput(eDIName.UD_FULL) ? 2 : 0)); //IOState.setTitle(0, inputcol, "A/B\nDETECT"); IOState.setValue(0, inputcol++, (ushort)(Util_DO.GetIOInput(eDIName.AB_DETECT) ? 1 : 0)); } void Update_SSStatus() { SSInfo.setTitle(0, 0, Pub.sm.Step.ToString()); SSInfo.setTitle(1, 0, Pub.sm.runStep.ToString()); if (Pub.sm.Step == eSMStep.RUN) SSInfo.setTitle(1, 1, string.Format("{0:N1} sec", Pub.sm.getRunSteptime.TotalSeconds)); else SSInfo.setTitle(1, 1, "--"); } void Update_HWStatus() { var rownum = 1; var colIdx = 0; //if (Pub.light.IsInit == false) BlinkHwstatus(rownum, colIdx++, 3, 4); //else HWState.setValue(rownum, colIdx++, (byte)(Pub.light.IsInit ? 2 : 3)); // if (Pub.plc1.IsValid == false) BlinkHwstatus(rownum, colIdx++, 3, 4); else HWState.setValue(rownum, colIdx++, (byte)(Pub.plc1.IsValid ? 2 : 3)); //PLC if (Pub.Xbee.IsInit == false) BlinkHwstatus(rownum, colIdx++, 3, 4); else HWState.setValue(rownum, colIdx++, (byte)(Pub.Xbee.IsInit ? 2 : 3)); // //if (Pub.camera.IsInit == false) BlinkHwstatus(rownum, colIdx++, 3, 4); //else HWState.setValue(rownum, colIdx++, (byte)(Pub.camera.IsInit ? 2 : 3)); // //if (Pub.bVisionLicense == false) BlinkHwstatus(rownum, colIdx++, 3, 4); //else HWState.setValue(rownum, colIdx++, (byte)(Pub.bVisionLicense ? 2 : 3)); // } /// /// 환경설정에따른 카운트를 리셋처리한다. 171128 /// void _AutoResetCount() { if (Pub.setting.datetime_Check_1 && Pub.setting.datetime_Reset_1 != "") //오전 { try { DateTime SetTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + Pub.setting.datetime_Reset_1 + ":00"); DateTime LastClearTime = Pub.counter.CountReset; //현재 시간이 클리어대상 시간보다 크고, 마지막으로 클리어한 시간이 지정시간보다 작아야함 if (DateTime.Now > SetTime && LastClearTime < SetTime) { Pub.log.AddI("Count Reset #1"); Pub.counter.CountClear(); } } catch { } } if (Pub.setting.datetime_Check_2 && Pub.setting.datetime_Reset_2 != "") //오후 { try { DateTime SetTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + Pub.setting.datetime_Reset_2 + ":00"); DateTime LastClearTime = Pub.counter.CountReset; //현재 시간이 클리어대상 시간보다 크고, 마지막으로 클리어한 시간이 지정시간보다 작아야함 if (DateTime.Now > SetTime && LastClearTime < SetTime) { Pub.log.AddI("Count Reset #2"); Pub.counter.CountClear(); } } catch { } } } DateTime tm1minute = DateTime.Now.AddDays(-1); DateTime tm5minute = DateTime.Now; void UpdateProgressStatus(string title, double value, double max) { UpdateProgressStatus((float)value, (float)max, title); } void UpdateProgressStatus(float value, float max, string title) { if (lbMsg.ProgressEnable == false) lbMsg.ProgressEnable = true; if (lbMsg.ProgressMax != max) lbMsg.ProgressMax = max; if (lbMsg.ProgressValue != value) lbMsg.ProgressValue = value; if (lbMsg.ProgressForeColor != Color.FromArgb(40, 40, 40)) lbMsg.ProgressForeColor = Color.FromArgb(40, 40, 40); if (lbMsg.Text != title) lbMsg.Text = title; } void UpdateStatusMessage(string dispmsg, Color fcolor, Color shadow) { UpdateStatusMessage(dispmsg, Color.DimGray, Color.Gray, fcolor, shadow); } void UpdateStatusMessage(string dispmsg, Color bColor, Color bColor2, Color fcolor, Color shadow, Boolean blank = false) { //if (lbMsg.ProgressEnable == true) lbMsg.ProgressEnable = false; if (dispmsg != lbMsg.Text || lbMsg.ForeColor != fcolor || lbMsg.ShadowColor != shadow || (lbMsg.BackColor != bColor && lbMsg.BackColor2 != bColor)) { lbMsg.BackColor = bColor; lbMsg.BackColor2 = bColor2; lbMsg.ForeColor = fcolor; lbMsg.ShadowColor = shadow; lbMsg.Text = dispmsg; if (blank) lbMsg.Tag = "BLANK"; else lbMsg.Tag = null; } } void UpdateResultMessage() { //모션을 사용한다면 홈 검색여부를 확인한다. //var inspresult = ""; //if (Pub.Result == null || Pub.Result.Result == CResult.eInspectResult.NOTSET) // inspresult = "--"; //else if (Pub.Result.Result == CResult.eInspectResult.OK) // inspresult = "MATCH"; //else if (Pub.Result.Result == CResult.eInspectResult.NG) // inspresult = "MISMATCH"; //최우선 점검 사항 표시 if (Pub.sm.Step > eSMStep.INIT) { if (Pub.flag.get(eFlag.DemoRun)) { UpdateStatusMessage("DEMO RUN", Color.Gold, Color.Yellow, Color.Black, Color.WhiteSmoke, true); } else if (Pub.flag.get(eFlag.START) == true) { UpdateStatusMessage("매거진투입구 안전센서 감지", Color.Tomato, Color.Black); } else if (Pub.Result.Model.Title == "") { UpdateStatusMessage("비젼모델 선택이 필요함", Color.Tomato, Color.Black); } if (Pub.sm.Step == eSMStep.IDLE) { UpdateStatusMessage("준비완료", Color.Lime, Color.Black); } else if (Pub.sm.Step == eSMStep.ERROR) { UpdateStatusMessage("오류 발생", Color.Red, Color.Black); } else if (Pub.sm.Step == eSMStep.PAUSE) { UpdateStatusMessage("정지 됨", Color.Tomato, Color.Black); } else if (Pub.sm.Step == eSMStep.FINISH) UpdateStatusMessage("작업 완료", Color.Lime, Color.Black); else if (Pub.sm.bPause == true) { UpdateStatusMessage("[START]를 누르면 시작 됩니다", Color.Yellow, Color.Black); } else if (Pub.flag.get(eFlag.TestRun)) { UpdateStatusMessage("TEST RUN", Color.DeepSkyBlue, Color.LightSkyBlue, Color.Blue, Color.WhiteSmoke, true); } else { string msg = "진행중"; UpdateStatusMessage(msg, Color.Lime, Color.Black); } } } } }