using FreeRedis; using MessagePack; using MessagePack.Resolvers; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using WCS.Data; using WCS.Data.Models; using WCS.Entity.Protocol; using WCS_Client.From.From_Montior; namespace WCS_Client.Frm { public partial class Frm_YongGuanMontior : Form { System.Timers.Timer _timer; private delegate void ShowTextDelegate();// 创建委托和委托对象 private List _plcnameSet = new List(); private List DDJSatatusSet = new List(); private List RGVSatatusSet = new List(); // 防止闪屏 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } RedisClient Redis; public Frm_YongGuanMontior() { InitializeComponent(); Init(); } private void Init() { _plcnameSet.Add("SC1"); _plcnameSet.Add("SC2"); _plcnameSet.Add("SC3"); _plcnameSet.Add("SC4"); _plcnameSet.Add("SC5"); _plcnameSet.Add("RGV1"); _plcnameSet.Add("RGV2"); _plcnameSet.Add("RGV3"); _plcnameSet.Add("RGV4"); _plcnameSet.Add("RGV5"); _plcnameSet.Add("Conv"); var plcnameSetsrm = _plcnameSet.Where(value => value.Contains("SC")).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 = 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(5000); _timer.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件; _timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; if (eqpData.Redis == null) { Redis = new RedisClient("81.69.99.176,database=11"); MessagePackSerializer.DefaultOptions = StandardResolver.Options.WithCompression(MessagePackCompression.Lz4Block); Redis.Serialize = obj => { var bytes = MessagePackSerializer.Serialize(obj); return bytes; }; Redis.DeserializeRaw = (bytes, type) => { var obj = MessagePackSerializer.Deserialize(type, bytes); return obj; }; } eqpData.init(Redis); } 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;//产线数据 foreach (var item in scdata.Datas) { //var equ = SugarBase.DB.Queryable().First(v => v.DEVICECODE == item.DEVICECODE && v.ISLAST == true); var ddjstatus = DDJSatatusSet.FirstOrDefault(v => v.SrmName == item.Code); if (ddjstatus != null) { //模式 ddjstatus.DdjMode.Text = item.D521.Mode.ToString(); if (item.D521.Mode.ToString() == "远程") { ddjstatus.G.Image = Properties.Resources.绿; } else if (item.D521.Mode.ToString() == "半自动") { ddjstatus.G.Image = Properties.Resources.黄; } else if (item.D521.Mode.ToString() == "手动") { ddjstatus.G.Image = Properties.Resources.黄; } else if (item.D521.Mode.ToString() == "维修") { ddjstatus.G.Image = Properties.Resources.红; } ////状态 ddjstatus.DdjStatus.Text = item.D521.Status.ToString(); ////任务Id ddjstatus.DdjOrdId.Text = item.D521.TaskID.ToString(); var task = SugarBase.DB.Queryable().First(v => v.ID == item.D521.TaskID); if (task != null) { //任务类型 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.LblInStatus.BackColor = Color.DarkGray; ddjstatus.LblOutStatus.BackColor = Color.DarkGray; } //当前位置 ddjstatus.DdjPosCurr.Text = item.D521.Tunnel.ToString(); ////运行时长 ddjstatus.DdjWorkTime.Text = item.D521.Runtime.ToString() + "h"; ////里程数 ddjstatus.DdjTotal_KM.Text = item.D521.TotalKM.ToString() + "KM"; //起始位置 ddjstatus.DdjPosFrom.Text = item.D521.SLine.ToString() + "-" + item.D521.SCol.ToString() + "-" + item.D521.SLayer.ToString(); //目标位置 ddjstatus.DdjPosTo.Text = item.D521.ELine.ToString() + "-" + item.D521.ECol.ToString() + "-" + item.D521.ELayer.ToString(); } } //RGV foreach (var item in rgvdata.Datas) { 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.红; } ////状态 rgvstatus.RGVStatus.Text = item.D521.SystemStatus.ToString(); ////任务Id rgvstatus.RGVOrdId.Text = item.D521.TaskID.ToString(); //作业类型 rgvstatus.RGVOptType.Text = item.D521.TaskType.ToString(); //当前位置 rgvstatus.RGVPosCurr.Text = item.D521.Position.ToString(); //起始位置 rgvstatus.RGVPosFrom.Text = item.D521.StartPosition.ToString(); //目标位置 rgvstatus.RGVPosTo.Text = item.D521.DestPosition.ToString(); var control = FindControl("con" + item.Code); 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; con.button1.Text = item.Code.ToString(); 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 Conveyor_L) { var con = (Conveyor_L)control; con.button1.Text = item.Code.ToString(); if (item.D521.PH_STATUS == true) { 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.D521.PH_STATUS == true) { 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 Conveyor4_L_R) { var con = (Conveyor4_L_R)control; con.button1.Text = item.Code.ToString(); 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.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 Conveyor3_A) { var con = (Conveyor3_A)control; con.button1.Text = item.Code.ToString(); if (item.D521.PH_STATUS == true) { 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.D521.PH_STATUS == true) { 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"; } } } else if (control is Conveyor4_left) { var con = (Conveyor4_left)control; con.button1.Text = item.Code.ToString(); 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.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"; } } } } } eqpData.deviceDataPack = pack; } catch (Exception ex) { } } 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);//到达时间的时候执行事件; } private void con2114_Load(object sender, EventArgs e) { } private void tableCellLabel23_Load(object sender, EventArgs e) { } private void con2035_Load(object sender, EventArgs e) { } } 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; } } }