using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Threading; using System.Windows.Forms; using WCS.Data; using WCS.Entity.Protocol.Station; using WCS_Client.From.From_Montior; namespace WCS_Client.Frm { public partial class Frm_YongGuanMontior : Form { private System.Timers.Timer _timer; private delegate void ShowTextDelegate();// 创建委托和委托对象 private List _plcnameSet = new List(); private List DDJSatatusSet = new List(); private List RGVSatatusSet = new List(); public bool isinitfrm = false; // 防止闪屏 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } public Frm_YongGuanMontior() { isinitfrm = false; InitializeComponent(); Init(); } private void Init() { _plcnameSet.Add("SRM1"); _plcnameSet.Add("SRM2"); _plcnameSet.Add("SRM3"); _plcnameSet.Add("SRM4"); _plcnameSet.Add("SRM5"); _plcnameSet.Add("SRM6"); _plcnameSet.Add("SRM7"); _plcnameSet.Add("SRM8"); _plcnameSet.Add("RGV1"); _plcnameSet.Add("RGV2"); _plcnameSet.Add("RGV3"); _plcnameSet.Add("RGV4"); _plcnameSet.Add("RGV5"); _plcnameSet.Add("RGV6"); _plcnameSet.Add("RGV7"); _plcnameSet.Add("RGV8"); _plcnameSet.Add("RGV9"); _plcnameSet.Add("RGV10"); _plcnameSet.Add("RGV11"); _plcnameSet.Add("RGV12"); _plcnameSet.Add("RGV13"); _plcnameSet.Add("RGV14"); _plcnameSet.Add("Conv"); var plcnameSetsrm = _plcnameSet.Where(value => value.Contains("SRM")).ToList(); for (int i = 0; i < plcnameSetsrm.Count; i++) { var item = plcnameSetsrm[i]; if (!DDJSatatusSet.Any(v => v.SrmName == item)) { var ddjsatatus = new DDJSatatus(); ddjsatatus.SrmName = item; int index = i + 1; ddjsatatus.G = (PictureBox)FindControl("G" + index); ddjsatatus.LblInStatus = (Label)FindControl("lblInStatus" + index); ddjsatatus.LblOutStatus = (Label)FindControl("lblOutStatus" + index); ddjsatatus.DdjMode = (Label)FindControl("ddjMode" + index); ddjsatatus.DdjStatus = (Label)FindControl("ddjStatus" + index); ddjsatatus.DdjOrdId = (Label)FindControl("ddjOrdId" + index); ddjsatatus.DdjOptType = (Label)FindControl("ddjOptType" + index); ddjsatatus.DdjPosCurr = (Label)FindControl("ddjPosCurr" + index); ddjsatatus.DdjWorkTime = (Label)FindControl("ddjWorkTime" + index); ddjsatatus.DdjTotal_KM = (Label)FindControl("ddjTotal_KM" + index); ddjsatatus.DdjPosFrom = (Label)FindControl("ddjPosFrom" + index); ddjsatatus.DdjPosTo = (Label)FindControl("ddjPosTo" + index); DDJSatatusSet.Add(ddjsatatus); } } var plcnameSetrgv = _plcnameSet.Where(value => value.Contains("RGV")).ToList(); for (int i = 0; i < plcnameSetrgv.Count; i++) { var item = plcnameSetrgv[i]; if (!RGVSatatusSet.Any(v => v.RGVName == item)) { var rgvsatatus = new RGVSatatus(); rgvsatatus.RGVName = item; int index; if (item.Length > 4) { index = Convert.ToInt32(item.Substring(3, 2).ToString()); } else { index = Convert.ToInt32(item.Substring(3, 1).ToString()); } rgvsatatus.G = (PictureBox)FindControl("GV" + index); rgvsatatus.RGVMode = (Label)FindControl("rgvMode" + index); rgvsatatus.RGVStatus = (Label)FindControl("rgvStatus" + index); rgvsatatus.RGVOrdId = (Label)FindControl("rgvOrdId" + index); rgvsatatus.RGVPosCurr = (Label)FindControl("rgvPosCurr" + index); rgvsatatus.RGVPosFrom = (Label)FindControl("rgvPosFrom" + index); rgvsatatus.RGVPosTo = (Label)FindControl("rgvPosTo" + index); rgvsatatus.RGVOptType = (Label)FindControl("rgvOptType" + index); RGVSatatusSet.Add(rgvsatatus); } } } private Control FindControl(string controlName) { var control = Controls.Find(controlName, true); if (control.Count() > 0) return control[0]; else return null; } private void Frm_YongGuanMontior_Load(object sender, EventArgs e) { _timer = new System.Timers.Timer(4000); _timer.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件; _timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; //this.BeginInvoke(new ShowTextDelegate(InItpan11)); } private static int _theout = 0; private void theout(object sender, EventArgs e) { if (Interlocked.Exchange(ref _theout, 1) == 0) { try { //Current.RefreshData(true); //var listDDJ = BaseWorkflow.QueryStackerdDataDDJ(_plcnameSet); ShowData(); } catch (Exception ex) { } finally { Interlocked.Exchange(ref _theout, 0); } } } private void ShowData() { try { if (InvokeRequired) { //异步调用委托(后面添加方法需要将方法委托其中) this.BeginInvoke(new ShowTextDelegate(pan11)); } else { } } catch (Exception ex) { LogHelper.Sys_Log.WriteLog(ex.ToString()); } } public void pan11() { try { var pack = eqpData.deviceDataPack; // var frame = pack.Frame;//数据帧(数据产生的时间) var convdata = pack.StationDatas;//输送线数据 var rgvdata = pack.RGVDatas;//穿梭车数据 var scdata = pack.SCDatas;//堆垛机数据 // var robotdata = pack.RobotData;//机器人数据 //var pldata = pack.ProdLineData;//产线数据 //string startTime = DateTime.Now.ToString(); //SRM foreach (var item in scdata.Datas) { //只更新有变更的数据 //if (eqpData.oldDeviceDataPack != null) //{ // var oldItem = eqpData.oldDeviceDataPack.SCDatas.Datas.FirstOrDefault(p => p.Code == item.Code); // if (oldItem.ToString() == item.ToString()) return; //} var ddjstatus = DDJSatatusSet.FirstOrDefault(v => v.SrmName == item.Code); if (ddjstatus != null) { //模式 ddjstatus.DdjMode.Text = item.D521.SRMMode.ToString(); //if(item.D537.SCAlarm.ToString()=="无") if (item.D521.SRMMode.ToString() == "远程") { ddjstatus.G.Image = Properties.Resources.绿; } else if (item.D521.SRMMode.ToString() == "半自动") { ddjstatus.G.Image = Properties.Resources.黄; } else if (item.D521.SRMMode.ToString() == "手动") { ddjstatus.G.Image = Properties.Resources.黄; } else if (item.D521.SRMMode.ToString() == "维修") { ddjstatus.G.Image = Properties.Resources.红; } ////状态 ddjstatus.DdjStatus.Text = item.D521.SRMStatus.ToString(); var task = SugarBase.DB.Queryable().First(v => v.ID == item.D521.TaskID_1); if (task != null) { //任务号 ddjstatus.DdjOrdId.Text = item.D521.TaskID_1.ToString(); //任务类型 ddjstatus.DdjOptType.Text = task.TYPE.ToString(); if (task.TYPE == TaskType.入库) { ddjstatus.LblInStatus.BackColor = Color.Lime; ddjstatus.LblOutStatus.BackColor = Color.DarkGray; } else if (task.TYPE == TaskType.出库) { ddjstatus.LblInStatus.BackColor = Color.DarkGray; ddjstatus.LblOutStatus.BackColor = Color.Lime; } else { ddjstatus.LblInStatus.BackColor = Color.DarkGray; ddjstatus.LblOutStatus.BackColor = Color.DarkGray; } } else { ddjstatus.DdjOrdId.Text = "0"; ddjstatus.DdjOptType.Text = "无"; ddjstatus.LblInStatus.BackColor = Color.DarkGray; ddjstatus.LblOutStatus.BackColor = Color.DarkGray; } ////运行时长 ddjstatus.DdjWorkTime.Text = item.D521.Runtime.ToString() + "h"; ////里程数 ddjstatus.DdjTotal_KM.Text = item.D521.TotalKM.ToString() + "KM"; //起始位置 ddjstatus.DdjPosFrom.Text = item.D521.SLine_1.ToString() + "-" + item.D521.SCol_1.ToString() + "-" + item.D521.SLayer_1.ToString(); //目标位置 ddjstatus.DdjPosTo.Text = item.D521.SLine_1.ToString() + "-" + item.D521.SCol_1.ToString() + "-" + item.D521.SLayer_1.ToString(); } } //RGV foreach (var item in rgvdata.Datas) { //只更新有变更的数据 //var oldItem = eqpData.oldDeviceDataPack.RGVDatas.Datas.FirstOrDefault(p => p.Code == item.Code); //if (oldItem.ToString() == item.ToString()) return; var rgvstatus = RGVSatatusSet.FirstOrDefault(v => v.RGVName == item.Code); if (rgvstatus != null) { string workmode = item.D521.WorkMode.ToString(); //模式 rgvstatus.RGVMode.Text = item.D521.WorkMode.ToString(); if (item.D521.WorkMode.ToString() == "自动") { rgvstatus.G.Image = Properties.Resources.绿; } else if (item.D521.WorkMode.ToString() == "半自动") { rgvstatus.G.Image = Properties.Resources.黄; } else if (item.D521.WorkMode.ToString() == "手动") { rgvstatus.G.Image = Properties.Resources.黄; } else if (item.D521.WorkMode.ToString() == "维护") { rgvstatus.G.Image = Properties.Resources.红; } else if(item.D521.WorkMode.ToString() == "99") { rgvstatus.RGVMode.Text = "手动"; rgvstatus.G.Image = Properties.Resources.黄; } ////状态 rgvstatus.RGVStatus.Text = item.D521.SystemStatus.ToString(); //rgvstatus.RGVOrdId.Text = item.D521.TaskID_1.ToString(); //任务Id if (item.D521.TaskID_1.ToString().Length > 3) { rgvstatus.RGVOrdId.Text = item.D521.TaskID_1.ToString(); } else if (item.D521.TaskID_2.ToString().Length > 3) { rgvstatus.RGVOrdId.Text = item.D521.TaskID_2.ToString(); } else { rgvstatus.RGVOrdId.Text = item.D521.TaskID_1.ToString(); } if (item.D521.Status_1.HasFlag(WCS.Entity.Protocol.RGVStatus.光电) || item.D521.Status_2.HasFlag(WCS.Entity.Protocol.RGVStatus.光电)) { rgvstatus.RGVPosCurr.Text = "true"; } else { rgvstatus.RGVPosCurr.Text = "false"; } //作业类型 rgvstatus.RGVOptType.Text = item.D521.TaskType_1.ToString(); //当前位置 //rgvstatus.RGVPosCurr.Text = item.D521.Position.ToString(); //起始位置 rgvstatus.RGVPosFrom.Text = "0"; //item.D521.StartPosition_1.ToString(); //目标位置 rgvstatus.RGVPosTo.Text = item.D521.DestPosition_1.ToString(); var control = FindControl(item.Code); if (control != null) { if (control is Conveyor_R) { var con = (Conveyor_R)control; con.button1.Text = item.Code.ToString(); if (item.D523.Fault != 0) con.BackColor = Color.Red; else if (item.D523.Status == 0 && item.Code.ToString()!="RGV8") con.BackColor = Color.Yellow; else con.BackColor = Color.FromArgb(0, 144, 154); if (item.D521.Status_1.HasFlag(WCS.Entity.Protocol.RGVStatus.光电)) { if (con.button1.Tag.ToString() != "pall") { con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor_R.png");//1009L1.png con.button1.Tag = "pall"; } } else { if (con.button1.Tag.ToString() != "empty") { con.button1.BackgroundImage = Image.FromFile("Resources/1009L1.png");//1009L1.png con.button1.Tag = "empty"; } } } } //if (control != null) //{ // if (control is Conveyor6) // { // var con = (Conveyor6)control; // con.button1.Text = item.Code; // if (item.D521.PH_Status == true) // { // if (con.button1.Tag.ToString() != "pall") // { // con.button1.BackgroundImage = Image.FromFile("Resources/Rgv02.png"); // con.button1.Tag = "pall"; // } // } // else // { // if (con.button1.Tag.ToString() != "empty") // { // con.button1.BackgroundImage = Image.FromFile("Resources/shelf16UD.png"); // con.button1.Tag = "empty"; // } // } // } // else if (control is Conveyor5) // { // var con = (Conveyor5)control; // con.button1.Text = item.Code; // if (item.D521.PH_Status == true) // { // if (con.button1.Tag.ToString() != "pall") // { // con.button1.BackgroundImage = Image.FromFile("Resources/rgv03.png"); // con.button1.Tag = "pall"; // } // } // else // { // if (con.button1.Tag.ToString() != "empty") // { // con.button1.BackgroundImage = Image.FromFile("Resources/shelf16UD1.png"); // con.button1.Tag = "empty"; // } // } // } //} } } //输送线 foreach (var item in convdata.Datas) { //只更新有变更的数据 var control = FindControl("con" + item.Code); if (control != null) { if (control is Conveyor) { var con = (Conveyor)control; if (item.D523.Alarm != 0) con.BackColor = Color.Red; else if (item.D523.Status == 0) con.BackColor = Color.Yellow; else con.BackColor = Color.FromArgb(0, 144, 154); con.button1.Text = item.Code.ToString(); if (item.D521.Status.HasFlag(WCS.Entity.Protocol.IstationStatus.光电状态)) { if (con.button1.Tag.ToString() != "pall") { con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor.png"); con.button1.Tag = "pall"; } } else { if (con.button1.Tag.ToString() != "empty") { con.button1.BackgroundImage = Image.FromFile("Resources/shelf16UD.png"); con.button1.Tag = "empty"; } } } #region condition else if (control is Conveyor_L) { var con = (Conveyor_L)control; con.button1.Text = item.Code.ToString(); if (item.D523.Alarm != 0) con.BackColor = Color.Red; else if (item.D523.Status == 0) con.BackColor = Color.Yellow; else con.BackColor = Color.FromArgb(0, 144, 154); if (item.D521.Status.HasFlag(WCS.Entity.Protocol.IstationStatus.光电状态)) { if (con.button1.Tag.ToString() != "pall") { con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor_L.png");//1009L11.png con.button1.Tag = "pall"; } } else { if (con.button1.Tag.ToString() != "empty") { con.button1.BackgroundImage = Image.FromFile("Resources/1009L11.png");//1009L11.png con.button1.Tag = "empty"; } } } else if (control is Conveyor_R) { var con = (Conveyor_R)control; con.button1.Text = item.Code.ToString(); if (item.D523.Alarm != 0) con.BackColor = Color.Red; else if (item.D523.Status == 0) con.BackColor = Color.Yellow; else con.BackColor = Color.FromArgb(0, 144, 154); if (item.D521.Status.HasFlag(WCS.Entity.Protocol.IstationStatus.光电状态)) { if (con.button1.Tag.ToString() != "pall") { con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor_R.png");//1009L1.png con.button1.Tag = "pall"; } } else { if (con.button1.Tag.ToString() != "empty") { con.button1.BackgroundImage = Image.FromFile("Resources/1009L1.png");//1009L1.png con.button1.Tag = "empty"; } } } else if (control is Conveyor3_A) { var con = (Conveyor3_A)control; con.button1.Text = item.Code.ToString(); if (item.D523.Alarm != 0) con.BackColor = Color.Red; else if (item.D523.Status == 0) con.BackColor = Color.Yellow; else con.BackColor = Color.FromArgb(0, 144, 154); if (item.D521.Status.HasFlag(WCS.Entity.Protocol.IstationStatus.光电状态)) { if (con.button1.Tag.ToString() != "pall") { con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor3_A_Box.png");//Conveyor3_A_Box.png con.button1.Tag = "pall"; } } else { if (con.button1.Tag.ToString() != "empty") { con.button1.BackgroundImage = Image.FromFile("Resources/1009_A.png");//1009_A.png con.button1.Tag = "empty"; } } } else if (control is Conveyor3_B) { var con = (Conveyor3_B)control; con.button1.Text = item.Code.ToString(); if (item.D523.Alarm != 0) con.BackColor = Color.Red; else if (item.D523.Status == 0) con.BackColor = Color.Yellow; else con.BackColor = Color.FromArgb(0, 144, 154); if (item.D521.Status.HasFlag(WCS.Entity.Protocol.IstationStatus.光电状态)) { if (con.button1.Tag.ToString() != "pall") { con.button1.BackgroundImage = Image.FromFile("Resources/1009R1_B.png");//1009R1_A.png con.button1.Tag = "pall"; } } else { if (con.button1.Tag.ToString() != "empty") { con.button1.BackgroundImage = Image.FromFile("Resources/1009R1.png");//1009R1.png con.button1.Tag = "empty"; } } } #region --- //else if (control is Conveyor4_L_R) //{ // var con = (Conveyor4_L_R)control; // con.button1.Text = item.Code.ToString(); // if (item.D523.Fault != 0) con.BackColor = Color.Red; // else if (item.D523.Status == 0) con.BackColor = Color.Yellow; // else con.BackColor = Color.FromArgb(0, 144, 154); // if (item.D521.PH_STATUS == true) // { // if (con.button1.Tag.ToString() != "pall") // { // con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor4_L_R.png"); // con.button1.Tag = "pall"; // } // } // else // { // if (con.button1.Tag.ToString() != "empty") // { // con.button1.BackgroundImage = Image.FromFile("Resources/1001LR.gif"); // con.button1.Tag = "empty"; // } // } //} //else if (control is Conveyor3) //{ // var con = (Conveyor3)control; // con.button1.Text = item.Code.ToString(); // if (item.D523.Fault != 0) con.BackColor = Color.Red; // else if (item.D523.Status == 0) con.BackColor = Color.Yellow; // else con.BackColor = Color.FromArgb(0, 144, 154); // if (item.D521.PH_STATUS == true) // { // if (con.button1.Tag.ToString() != "pall") // { // con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor3.png");//1009R1_A.png // con.button1.Tag = "pall"; // } // } // else // { // if (con.button1.Tag.ToString() != "empty") // { // con.button1.BackgroundImage = Image.FromFile("Resources/1004LR.png");//1009R1.png // con.button1.Tag = "empty"; // } // } //} //else if (control is Conveyor4_left) //{ // var con = (Conveyor4_left)control; // con.button1.Text = item.Code.ToString(); // if (item.D523.Fault != 0) con.BackColor = Color.Red; // else if (item.D523.Status == 0) con.BackColor = Color.Yellow; // else con.BackColor = Color.FromArgb(0, 144, 154); // if (item.D521.PH_STATUS == true) // { // if (con.button1.Tag.ToString() != "pall") // { // con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor4_left.png"); // con.button1.Tag = "pall"; // } // } // else // { // if (con.button1.Tag.ToString() != "empty") // { // con.button1.BackgroundImage = Image.FromFile("Resources/1001L.gif"); // con.button1.Tag = "empty"; // } // } //} //else if (control is Conveyor4_right) //{ // var con = (Conveyor4_right)control; // con.button1.Text = item.Code.ToString(); // if (item.D523.Fault != 0) con.BackColor = Color.Red; // else if (item.D523.Status == 0) con.BackColor = Color.Yellow; // else con.BackColor = Color.FromArgb(0, 144, 154); // if (item.D521.PH_STATUS == true) // { // if (con.button1.Tag.ToString() != "pall") // { // con.button1.BackgroundImage = Image.FromFile("Resources/Conveyor4_right.png"); // con.button1.Tag = "pall"; // } // } // else // { // if (con.button1.Tag.ToString() != "empty") // { // con.button1.BackgroundImage = Image.FromFile("Resources/1001LR.gif"); // con.button1.Tag = "empty"; // } // } //} #endregion #endregion } } //string endtTime = DateTime.Now.ToString(); //MessageBox.Show("开始时间--" + startTime + ",结束时间--" + endtTime); //eqpData.deviceDataPack = pack; } catch (Exception ex) { } finally { isinitfrm = true; } } private void lblsrm01_Click(object sender, EventArgs e) { Label srm = (Label)sender; string equName = srm.Name.Substring(3); FrmEquMsg_dtl Frm = new FrmEquMsg_dtl(equName); Frm.Show(); } private void Frm_YongGuanMontior_FormClosing(object sender, FormClosingEventArgs e) { _timer.Stop(); _timer.Elapsed -= new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件; } #region load private void con2114_Load(object sender, EventArgs e) { } private void tableCellLabel23_Load(object sender, EventArgs e) { } private void con2035_Load(object sender, EventArgs e) { } private void p_Load(object sender, EventArgs e) { } private void RGV10_Load(object sender, EventArgs e) { } #endregion } public class DDJSatatus { /// /// 状态图标 /// public PictureBox G { get; set; } /// /// 堆垛机名称 /// public string SrmName { get; set; } /// /// 入库状态 /// public Label LblInStatus { get; set; } /// /// 出库状态 /// public Label LblOutStatus { get; set; } /// /// 堆垛机模式 /// public Label DdjMode { get; set; } /// /// 堆垛机工作状态 /// public Label DdjStatus { get; set; } /// /// 堆垛机工作任务 /// public Label DdjOrdId { get; set; } /// /// 堆垛机作业类型 /// public Label DdjOptType { get; set; } /// /// 堆垛机当前位置 /// public Label DdjPosCurr { get; set; } /// /// 运行时间 /// public Label DdjWorkTime { get; set; } /// /// 里程数 /// public Label DdjTotal_KM { get; set; } /// /// 源仓位 /// public Label DdjPosFrom { get; set; } /// /// 目标仓位 /// public Label DdjPosTo { get; set; } } public class RGVSatatus { /// /// 状态图标 /// public PictureBox G { get; set; } /// /// RGV名称 /// public string RGVName { get; set; } /// /// RGV模式 /// public Label RGVMode { get; set; } /// /// RGV工作状态 /// public Label RGVStatus { get; set; } /// /// RGV工作任务 /// public Label RGVOrdId { get; set; } /// /// RGV作业类型 /// public Label RGVOptType { get; set; } /// /// RGV当前位置 /// public Label RGVPosCurr { get; set; } /// /// 起始站台 /// public Label RGVPosFrom { get; set; } /// /// 目标站台 /// public Label RGVPosTo { get; set; } } public class WCS_STATION5201 : WCS_Station520 { public new DateTime UPDATETIME { get; set; } } }