实例介绍
【实例简介】
1. 运行概要:
在没有配置文件(第一次运行)或者正确的配置文件(配置文件被错误修改)的条件下,若想正常运行本程序,需要先将正确的配置文件放入本程序的运行程序所处的文件夹中,若无正确的配置文件,则可以先运行程序,然后在设置页面将设置正确的基本信息(注意:MES_IP就是本程序的服务器的IP,IP地址必须跟程序所处的电脑的IP一致,部分信息如:资源代号、设备工站等只能通过切换PLC的基本信息页面来获取,),然后点击保存,之后重新运行程序即可【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Xml; using System.IO; public enum enActionStep { None = -1, LCD_LD = 10086, ACF_LD, FPC_LD, PLASMA, SL2600S5, XMD4019, UL1918, Alarm }; namespace MES { public partial class MESDlg : Form //此类待完成 { public MESDlg() { InitializeComponent(); } private bool m_bOnLine = false; private static List<enActionStep> m_ActionStepList;//处理数据线程的步骤流程链表 private static object m_StepListLock; private bool m_bPause_Scan; private bool[] m_bReset; private SetUp m_Form; private int m_nLine; public static int MES_MsgID; /// <summary> /// 用于显示各种失败、成功、报警信息 /// </summary> /// <param name="msg"></param> /// <param name="bAlarm"></param> void DisPlayEvent(string strMsg, bool bAlarm) { listBox_EventDisplay.ForeColor = bAlarm ? Color.Red : Color.Black; if (listBox_EventDisplay.Items.Count >= 30) listBox_EventDisplay.Items.RemoveAt(0); listBox_EventDisplay.Items.Add(strMsg "\r\n"); } private void ShowEvent(string msg, bool bAlarm = true) { this.BeginInvoke((MethodInvoker)delegate { DisPlayEvent(msg, bAlarm); }); } /// <summary> /// 显示各个Sock的各种状态,注:连接PLC的Sock只有连接和断开两种状态,即调用该事件时,第二个参数只有Add和Remove功能 /// </summary> /// <param name="EndPoint"></param> /// <param name="bAdd"></param> private void ConnectEventShow(string EndPoint, enChangeEventType enType) { this.listBox_ConnectStatus.Invoke((MethodInvoker)delegate { if (enType == enChangeEventType.Add) listBox_ConnectStatus.Items.Add(EndPoint); else { string strSection = (EndPoint.Split(' '))[0]; foreach (object Item in listBox_ConnectStatus.Items) { string node = (string)Item; if (node.Contains(strSection))//当未触发Add事件时,忽略此次Change事件 { listBox_ConnectStatus.Items.Remove(node); if(enType == enChangeEventType.Change) listBox_ConnectStatus.Items.Add(EndPoint); break; } } } }); } private void ShowMsg_MES(string strTitle, string strMsg) { this.dataGridView_MESMsg.Invoke((MethodInvoker)delegate { if (dataGridView_MESMsg.Rows.Count > 30) dataGridView_MESMsg.Rows.RemoveAt(dataGridView_MESMsg.Rows.Count - 2); dataGridView_MESMsg.Rows.AddCopy(0); dataGridView_MESMsg.Rows[0].Cells[0].Value = strTitle; dataGridView_MESMsg.Rows[0].Cells[1].Value = strMsg; }); } private void ShowMsg_PLC(string strMsg) { this.listBox_PLCMsg.Invoke((MethodInvoker)delegate { listBox_PLCMsg.ForeColor = (m_nLine % 2) == 0 ? Color.Green : Color.Black; m_nLine ; if (m_nLine >= 50) m_nLine = 0; if (listBox_PLCMsg.Items.Count >= 30) listBox_PLCMsg.Items.RemoveAt(0); listBox_PLCMsg.Items.Add("从PLC收到数据:" strMsg "\r\n"); }); } private void MESDlg_Load(object sender, EventArgs e) { ConfigMrg.GetInstance().InitSystemCfg(); NetWorkMrg.GetInstance().InitConfig(); DataMrg.GetInstance().InitData_Mrg(); NetWorkMrg.GetInstance().Sock_PLC.EVENTShow_TCP = ShowEvent; NetWorkMrg.GetInstance().Sock_MES.EVENTShow_TCP = ShowEvent; NetWorkMrg.GetInstance().Sock_PLC.EVENTConnect_TCP = ConnectEventShow; NetWorkMrg.GetInstance().Sock_MES.ClientList.ConnectChangeEvent = ConnectEventShow; NetWorkMrg.GetInstance().Sock_MES.Dic_ConnectType.ConnectChangeEvent = ConnectEventShow; NetWorkMrg.GetInstance().Sock_MES.Dic_OnLineType.ConnectChangeEvent = ConnectEventShow; NetWorkMrg.GetInstance().Sock_PLC.Connect(ConfigMrg.GetInstance().ConnectTimeOut_); NetWorkMrg.GetInstance().Sock_MES.Start_Server(); InitMESDlg(); Thread thr = new Thread(ScanPLC_Thread); thr.IsBackground = true; thr.Start(); thr = new Thread(ActionThread); thr.IsBackground = true; thr.Start(); } private void InitMESDlg() { MES_MsgID = 0; m_ActionStepList = new List<enActionStep>(); m_StepListLock = new object(); m_bReset = new bool[5]; m_nLine = 0; //软件标题和版本号 DateTime Edition = File.GetCreationTime(Application.ExecutablePath); this.Text = "EPA_" Edition.Year Edition.Month Edition.Day Edition.Hour; this.Width = Screen.PrimaryScreen.Bounds.Width; this.Height = Screen.PrimaryScreen.Bounds.Height; //groupBox外部的各个控件的初始化 button_LogIn.Location = new Point(12, 12); button_LogIn.Anchor = AnchorStyles.Top | AnchorStyles.Left; button_SetUp.Location = new Point(button_LogIn.Width button_LogIn.Location.X 5, 12); button_SetUp.Anchor = AnchorStyles.Left | AnchorStyles.Top; button_CMDRequest.Location = new Point(button_SetUp.Width button_SetUp.Location.X 5, 12); button_CMDRequest.Anchor = AnchorStyles.Left | AnchorStyles.Top; //groupBox_Status和内部控件的初始化 groupBox_Status.Height = this.Height - button_SetUp.Location.Y - button_SetUp.Height - 30; groupBox_Status.Width = ((this.Width - 30) * 1 / 2) > 350 ? 350 : ((this.Width - 30) * 1 / 2); groupBox_Status.Location = new Point(12, button_SetUp.Location.Y button_SetUp.Height 10); groupBox_Status.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Top; groupBox_Status.Controls.Add(dataGridView_Data); groupBox_Status.Controls.Add(listBox_ConnectStatus); groupBox_Status.Controls.Add(button_ChangeACF); groupBox_Status.Controls.Add(button_CompelUpLoad); listBox_ConnectStatus.Width = groupBox_Status.Width - 12; listBox_ConnectStatus.Height = (groupBox_Status.Height - 30) / 4; listBox_ConnectStatus.Location = new Point(6, 24); listBox_ConnectStatus.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom; dataGridView_Data.Width = groupBox_Status.Width - 12; dataGridView_Data.Height = (groupBox_Status.Height - 30) * 3 / 5; dataGridView_Data.Location = new Point(listBox_ConnectStatus.Location.X, groupBox_Status.Height - dataGridView_Data.Height - 6); dataGridView_Data.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; dataGridView_Data.ColumnCount = 2; dataGridView_Data.Columns[0].HeaderText = "DVID"; dataGridView_Data.Columns[0].ReadOnly = true; dataGridView_Data.Columns[1].HeaderText = "名称"; dataGridView_Data.Columns[1].ReadOnly = true; DataGridViewCheckBoxColumn newColumn = new DataGridViewCheckBoxColumn(); newColumn.HeaderText = "上传选择"; dataGridView_Data.Columns.Insert(0, newColumn); dataGridView_Data.Columns[0].ReadOnly = false; int i = 0; foreach (KeyValuePair<string, int> Node in ConfigMrg.GetInstance().Dic_MesDVID) { DataGridViewRow Rows = new DataGridViewRow(); dataGridView_Data.Rows.Add(Rows); dataGridView_Data.Rows[i].Cells[1].Value = Node.Value; dataGridView_Data.Rows[i].Cells[2].Value = Node.Key; if (ConfigMrg.GetInstance().DVIDSelectList.Contains(Node.Value)) dataGridView_Data.Rows[i].Cells[0].Value = true; else dataGridView_Data.Rows[i].Cells[0].Value = false; i ; } dataGridView_Data.CellStateChanged = CellChange_DataGridView_Data; button_CompelUpLoad.Location = new Point(listBox_ConnectStatus.Location.X, (dataGridView_Data.Location.Y - listBox_ConnectStatus.Location.Y - listBox_ConnectStatus.Height) / 2 - button_CompelUpLoad.Height / 2 - 6 listBox_ConnectStatus.Location.Y listBox_ConnectStatus.Height); button_CompelUpLoad.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;//| AnchorStyles.Top; button_ChangeACF.Location = new Point(groupBox_Status.Width - button_ChangeACF.Width - 6, button_CompelUpLoad.Location.Y); button_ChangeACF.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;//| AnchorStyles.Top; //groupBox_SimulateRun和内部控件初始化 groupBox_SimulateRun.Height = (this.Height - 30) * 3 / 10; groupBox_SimulateRun.Width = (this.Width - 30) - groupBox_Status.Width; groupBox_SimulateRun.Location = new Point(groupBox_Status.Location.X groupBox_Status.Width 6, 12); groupBox_SimulateRun.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; groupBox_SimulateRun.Controls.Add(listBox_EventDisplay); groupBox_SimulateRun.Controls.Add(comboBox_EquipmentNO); groupBox_SimulateRun.Controls.Add(button_Clear); groupBox_SimulateRun.Controls.Add(label_Product1); groupBox_SimulateRun.Controls.Add(label_Product2); groupBox_SimulateRun.Controls.Add(textBox__Product_In1); groupBox_SimulateRun.Controls.Add(textBox__Product_In2); groupBox_SimulateRun.Controls.Add(textBox__Product_Out1); groupBox_SimulateRun.Controls.Add(textBox__Product_Out2); groupBox_SimulateRun.Controls.Add(textBox_Difference1); groupBox_SimulateRun.Controls.Add(textBox_Difference2); listBox_EventDisplay.Width = groupBox_SimulateRun.Width - 12; listBox_EventDisplay.Height = (groupBox_SimulateRun.Height - 30) / 2; listBox_EventDisplay.Location = new Point(6, 24); listBox_EventDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; comboBox_EquipmentNO.Location = new Point(6, listBox_EventDisplay.Height 29); comboBox_EquipmentNO.Anchor = AnchorStyles.Left; abcd;//comboBox_EquipmentNO增加产线号,并选择对应的ConfigMrg.m_strProductNO的选项,目前产线命名规则未知. textBox_Difference2.Location = new Point(groupBox_SimulateRun.Width - textBox_Difference2.Width - 6, groupBox_SimulateRun.Height - textBox_Difference2.Height - 6); textBox_Difference2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; textBox_Difference1.Location = new Point(textBox_Difference2.Location.X, textBox_Difference2.Location.Y - textBox_Difference1.Height - 6); textBox_Difference1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; textBox__Product_Out2.Location = new Point(textBox_Difference2.Location.X - textBox__Product_Out2.Width - 6, textBox_Difference2.Location.Y); textBox__Product_Out2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; textBox__Product_Out1.Location = new Point(textBox_Difference1.Location.X - textBox__Product_Out1.Width - 6, textBox_Difference1.Location.Y); textBox__Product_Out1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; textBox__Product_In2.Location = new Point(textBox__Product_Out2.Location.X - textBox__Product_In2.Width - 6, textBox__Product_Out2.Location.Y); textBox__Product_In2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; textBox__Product_In1.Location = new Point(textBox__Product_Out1.Location.X - textBox__Product_In1.Width - 6, textBox__Product_Out1.Location.Y); textBox__Product_In1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; label_Product2.Location = new Point(textBox__Product_In2.Location.X - label_Product2.Width - 6, textBox__Product_In2.Location.Y 6); label_Product2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; label_Product1.Location = new Point(textBox__Product_In1.Location.X - label_Product1.Width - 6, textBox__Product_In2.Location.Y 6); label_Product1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; button_Clear.Location = new Point(label_Product1.Location.X - button_Clear.Width - 6, textBox__Product_In2.Location.Y); button_Clear.Anchor = AnchorStyles.Right; //groupBox_MSG和内部控件的初始化 groupBox_MSG.Height = (this.Height - 30) - groupBox_SimulateRun.Height; groupBox_MSG.Width = groupBox_SimulateRun.Width; groupBox_MSG.Location = new Point(groupBox_SimulateRun.Location.X, this.Height - groupBox_MSG.Height - 12); groupBox_MSG.Controls.Add(dataGridView_MESMsg); groupBox_MSG.Controls.Add(listBox_PLCMsg); groupBox_MSG.Anchor = AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top; dataGridView_MESMsg.Width = groupBox_MSG.Width - 12; dataGridView_MESMsg.Height = (groupBox_MSG.Height - 36) * 2 / 5; dataGridView_MESMsg.Location = new Point(6, 24); dataGridView_MESMsg.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left; dataGridView_MESMsg.ColumnCount = 2; dataGridView_MESMsg.Columns[0].HeaderText = "消息类型"; dataGridView_MESMsg.Columns[0].ReadOnly = true; dataGridView_MESMsg.Columns[0].Width = 100; dataGridView_MESMsg.Columns[1].HeaderText = "消息内容"; dataGridView_MESMsg.Columns[1].ReadOnly = true; dataGridView_MESMsg.Columns[1].Width = dataGridView_MESMsg.Width - 150; listBox_PLCMsg.Width = groupBox_MSG.Width - 12; listBox_PLCMsg.Height = groupBox_MSG.Height - 36 - dataGridView_MESMsg.Height; listBox_PLCMsg.Location = new Point(dataGridView_MESMsg.Location.X, groupBox_MSG.Height - listBox_PLCMsg.Height - 6); listBox_PLCMsg.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; } /// <summary> /// 扫描PLC获取数据线程 /// </summary> private void ScanPLC_Thread() { m_bPause_Scan = false; PLC_Client Client = NetWorkMrg.GetInstance().Sock_PLC; Deal_Data Math = Deal_Data.GetInstance(); DataMrg PData = DataMrg.GetInstance(); Dictionary<enStation, enDataName> Dic_DataName = new Dictionary<enStation, enDataName>(); Dic_DataName.Add(enStation.AOI检测, enDataName.AOI_Data); Dic_DataName.Add(enStation.本压, enDataName.Press_Data); Dic_DataName.Add(enStation.报警, enDataName.Alarm_Data); Dic_DataName.Add(enStation.上料LCD, enDataName.ID); Dic_DataName.Add(enStation.上料FPC, enDataName.ID); Dic_DataName.Add(enStation.更换ACF, enDataName.ID); Dic_DataName.Add(enStation.清洗, enDataName.Other_Data); int[] NotResetTime = new int[5] {0,0,0,0,0}; //用于记录标志位仍未置位的轮回数,每当扫描一轮回,而标志位仍未置位时,则对应 //的NotResetTime计数值加1,一旦标志位置位成功,对应的NotResetTime计数值将置0 string StrMSG = ""; bool bSucce; int j; Run: while(m_bPause_Scan == false) { try { Dictionary<string, S_StationInfo>[] DicArray = ConfigMrg.GetInstance().Dic_StationInf.ValueToArray(); foreach (Dictionary<string, S_StationInfo> One_Dic in DicArray) { S_StationInfo[] StationArray = One_Dic.Values.ToArray(); foreach (S_StationInfo one_Sta in StationArray) { if (PData.IsRegisterReset(one_Sta.Station)) //判断寄存器置位。 {//SendCmdToPLC函数内部有转码功能,若接收到转码后的字符串为空,则需把函数内部的转码函数去掉 StrMSG = ""; bSucce = Client.SendCmdToPLC(one_Sta.strSta_CMD.TrimEnd() "\r\n", ref StrMSG); j = 0; foreach (string FlagCheck in one_Sta.strCheckWord) { if (bSucce && StrMSG.StartsWith(FlagCheck)) { //解析数据StrMSG,压站位 S_PLC_Data NewData = new S_PLC_Data(); if (Math.AnalysisPLCMsg(StrMSG, Dic_DataName[one_Sta.Station], ref NewData)) { PData.AddData2List(NewData, one_Sta.Station); AddNextStep(one_Sta.Sta_Action[j]); break; } } j ; } } j = 0; } } #region /*if (PData.IsRegisterReset(enStation.上料LCD)) //若该工位有数据未被处理,不扫描,即PLC寄存器仍未置位。 { bSucce = Client.SendCmdToPLC("RDS EM11111.D 123", ref StrMSG); if (bSucce && StrMSG.StartsWith("0001")) { S_PLC_Data NewData = new S_PLC_Data(); if(Math.AnalysisPLCMsg(StrMSG, enDataName.ID, ref NewData)) { PData.AddData2List(NewData, enStation.上料LCD); AddNextStep(enActionStep.LCD_LD); } } } if (PData.IsRegisterReset(enStation.上料FPC)) //判断寄存器置位。 { bSucce = Client.SendCmdToPLC("RDS EM22222.D 123", ref StrMSG); if (bSucce && StrMSG.StartsWith("0001")) { //解析数据StrMSG,压站位 S_PLC_Data NewData = new S_PLC_Data(); if (Math.AnalysisPLCMsg(StrMSG, enDataName.ID, ref NewData)) { PData.AddData2List(NewData, enStation.上料FPC); AddNextStep(enActionStep.FPC_LD); } } } if (PData.IsRegisterReset(enStation.清洗)) //判断寄存器置位。 { bSucce = Client.SendCmdToPLC("RDS EM33333.D 123", ref StrMSG); if (bSucce && StrMSG.StartsWith("0001")) { //解析数据StrMSG,压站位 S_PLC_Data NewData = new S_PLC_Data(); if (Math.AnalysisPLCMsg(StrMSG, enDataName.ID, ref NewData)) { PData.AddData2List(NewData, enStation.清洗); AddNextStep(enActionStep.FPC_LD); } } } if (PData.IsRegisterReset(enStation.本压))//判断寄存器置位。 { bSucce = Client.SendCmdToPLC("RDS EM55555.D 123", ref StrMSG); if (bSucce && StrMSG.StartsWith("0001")) { //解析数据StrMSG,压站位 S_PLC_Data NewData = new S_PLC_Data(); if (Math.AnalysisPLCMsg(StrMSG, enDataName.Press_Data, ref NewData)) { PData.AddData2List(NewData, enStation.本压); AddNextStep(enActionStep.SL2600S5); } } } if (PData.IsRegisterReset(enStation.AOI检测)) //判断寄存器置位。 { bSucce = Client.SendCmdToPLC("RDS EM66666.D 123", ref StrMSG); if (bSucce && StrMSG.StartsWith("0001")) { //解析数据StrMSG,压站位 S_PLC_Data NewData = new S_PLC_Data(); if (Math.AnalysisPLCMsg(StrMSG, enDataName.AOI_Data, ref NewData)) { PData.AddData2List(NewData, enStation.AOI检测); AddNextStep(enActionStep.XMD4019); } } } bSucce = Client.SendCmdToPLC("RDS EM77777.D 123", ref StrMSG);//报警信息扫描 if (bSucce && StrMSG.StartsWith("0001")) { //解析数据StrMSG,压站位 S_PLC_Data NewData = new S_PLC_Data(); if (Math.AnalysisPLCMsg(StrMSG, enDataName.Alarm_Data, ref NewData)) { PData.AddData2List(NewData, enStation.报警);aaa;//现在未增加报警数据链表 AddNextStep(enActionStep.Alarm); } } else if (bSucce && StrMSG.StartsWith("0002")) { }*/ #endregion Thread.Sleep(20); } catch(Exception ex) { DisPlayEvent(ex.ToString(), true); } } while (m_bPause_Scan) { Thread.Sleep(100); } goto Run; } /// <summary> /// 从PLC获取数据后各工位对应的处理 /// </summary> private void ActionThread() { enActionStep enStep; while(true) { enStep = GetNextStep(); if (enStep == enActionStep.None) { Thread.Sleep(50); continue; } switch(enStep) { case enActionStep.LCD_LD: break; case enActionStep.FPC_LD: break; case enActionStep.ACF_LD: break; case enActionStep.PLASMA: break; case enActionStep.SL2600S5: break; case enActionStep.XMD4019: break; case enActionStep.UL1918: break; case enActionStep.Alarm: break; default: break; } } } public static void AddNextStep(enActionStep nextStep) { lock (m_StepListLock) { m_ActionStepList.Add(nextStep); } } public static enActionStep GetNextStep() { if (m_ActionStepList.Count <= 0) return enActionStep.None; enActionStep Res; lock (m_StepListLock) { Res = m_ActionStepList.First(); m_ActionStepList.RemoveAt(0); } return Res; } private void CellChange_DataGridView_Data(object sender, EventArgs e) { DataGridViewSelectedCellCollection cells = dataGridView_Data.SelectedCells; if (cells.Count == 1) { DataGridViewCell cell = cells[0]; if (cell.ColumnIndex == 0) { ConfigMrg CfgMrg = ConfigMrg.GetInstance(); int nDVID = Convert.ToInt32(dataGridView_Data.Rows[cell.RowIndex].Cells[1].Value); if (nDVID == CfgMrg.Dic_MesDVID["物料位置"] || nDVID == CfgMrg.Dic_MesDVID["FLOW_ID"] || nDVID == CfgMrg.Dic_MesDVID["ROUTE_ID"] || nDVID == CfgMrg.Dic_MesDVID["STEP_ID"] || nDVID == CfgMrg.Dic_MesDVID["时间"]) { bool CurrentValue = (bool)dataGridView_Data.Rows[cell.RowIndex].Cells[0].Value; if(CurrentValue == true) CfgMrg.DVIDSelectList.Remove(nDVID); else CfgMrg.DVIDSelectList.Add(nDVID); CfgMrg.SaveParamCfg_XML(CfgMrg.m_strParamCfgPath); dataGridView_Data.Rows[cell.RowIndex].Cells[0].Value = !CurrentValue; dataGridView_Data.ClearSelection(); } } } } private void button_SetUp_Click(object sender, EventArgs e) { SetUp CForm = new SetUp(this); CForm.ShowDialog(); CForm.Dispose(); CForm = null; } private void button_CMDRequest_Click(object sender, EventArgs e) { Cmd_Window CForm = new Cmd_Window(); CForm.ShowDialog(); CForm.Dispose(); CForm = null; } private void button_CompelUpLoad_Click(object sender, EventArgs e) { //触发强制退盘事件Tray Complete Request,即:下料盘满盘时,或者盘未满时,中途强制拿走Tray盘时触发该事件, } private void button_ChangeACF_Click(object sender, EventArgs e) { //换ACF时触发物料UnMount事件(设备此时是停止运行的),当换料完成时需要通过读取某个扫码枪扫得的ACF条码,然后触发Mount事件并等待MES回复, //MES回复为PASS时,提醒人员可以继续运行,否则提醒人员重新换ACF,重新换ACF时则再次触发UnMount与Mount事件。 } private void button_Clear_Click(object sender, EventArgs e) { //产品生产统计清零 } } /// <summary> /// 新套接字连接时的状态枚举 /// </summary> public enum enChangeEventType { Add = 99997, //新连接 Change, //用于套接字服务器与视涯客户端,连接上后通过命令改变连接状态时使用 Remove //断开连接 } /// <summary> /// 工位中文名枚举 /// </summary> public enum enStation { 上料LCD = enActionStep.LCD_LD, 上料FPC = enActionStep.FPC_LD, 更换ACF = enActionStep.ACF_LD, 清洗 = enActionStep.PLASMA, 本压 = enActionStep.SL2600S5, 点胶 = enActionStep.XMD4019, AOI检测 = enActionStep.UL1918, 报警 = enActionStep.Alarm, } aaa;//enStation待修改 } /*button_LogIn.Location = new Point(12, 12); button_LogIn.Dock = DockStyle.Left | DockStyle.Top; button_SetUp.Location = new Point(button_LogIn.Width button_LogIn.Location.X 5, 12); button_SetUp.Dock = DockStyle.Left | DockStyle.Top; button_CMDRequest.Location = new Point(button_SetUp.Width button_SetUp.Location.X 5, 12); button_CMDRequest.Dock = DockStyle.Left | DockStyle.Top; //groupBox_Status和内部控件的初始化 groupBox_Status.Height = this.Height - button_SetUp.Location.Y - button_SetUp.Height - 30; groupBox_Status.Width = (this.Width - 30) * 2 / 5; groupBox_Status.Location = new Point(12, button_SetUp.Location.Y button_SetUp.Height 10); groupBox_Status.Dock = DockStyle.Bottom | DockStyle.Left; groupBox_Status.Controls.Add(dataGridView_Data); groupBox_Status.Controls.Add(listBox_ConnectStatus); groupBox_Status.Controls.Add(button_ChangeACF); groupBox_Status.Controls.Add(button_CompelUpLoad); listBox_ConnectStatus.Location = new Point(6, 24); listBox_ConnectStatus.Dock = DockStyle.Top; dataGridView_Data.Location = new Point(listBox_ConnectStatus.Location.X, groupBox_Status.Height - dataGridView_Data.Height - 6); dataGridView_Data.Dock = DockStyle.Bottom; dataGridView_Data.ColumnCount = 2; dataGridView_Data.Columns[0].HeaderText = "DVID"; dataGridView_Data.Columns[0].ReadOnly = true; dataGridView_Data.Columns[1].HeaderText = "名称"; dataGridView_Data.Columns[1].ReadOnly = true; DataGridViewCheckBoxColumn newColumn = new DataGridViewCheckBoxColumn(); newColumn.HeaderText = "上传选择"; dataGridView_Data.Columns.Insert(0, newColumn); dataGridView_Data.Columns[0].ReadOnly = false; dataGridView_Data.Rows[dataGridView_Data.Rows.Count - 1].ReadOnly = true; int i = 0; foreach (KeyValuePair<string, int> Node in ConfigMrg.GetInstance().Dic_MesDVID) { DataGridViewRow Rows = new DataGridViewRow(); dataGridView_Data.Rows.Add(Rows); dataGridView_Data.Rows[i].Cells[1].Value = Node.Value; dataGridView_Data.Rows[i].Cells[2].Value = Node.Key; if (ConfigMrg.GetInstance().DVIDSelectList.Contains(i)) dataGridView_Data.Rows[i].Cells[0].Value = true; else dataGridView_Data.Rows[i].Cells[0].Value = false; i ; } dataGridView_Data.CellStateChanged = CellChange_DataGridView_Data; button_CompelUpLoad.Location = new Point(listBox_ConnectStatus.Location.X, (dataGridView_Data.Location.Y - listBox_ConnectStatus.Location.Y - listBox_ConnectStatus.Height) / 2 - button_CompelUpLoad.Height / 2 - 6); button_CompelUpLoad.Dock = DockStyle.Left; button_ChangeACF.Location = new Point(button_CompelUpLoad.Width - button_ChangeACF.Width - 6, button_CompelUpLoad.Location.Y); button_ChangeACF.Dock = DockStyle.Right; //groupBox_SimulateRun和内部控件初始化 groupBox_SimulateRun.Height = (this.Width - 30) * 3 / 10; groupBox_SimulateRun.Width = (this.Width - 30) - groupBox_Status.Width; groupBox_SimulateRun.Location = new Point(groupBox_Status.Location.X groupBox_Status.Width 6, 12); groupBox_SimulateRun.Dock = DockStyle.Top | DockStyle.Right | DockStyle.Left; groupBox_SimulateRun.Controls.Add(richTextBox_EventDisplay); groupBox_SimulateRun.Controls.Add(comboBox_EquipmentNO); groupBox_SimulateRun.Controls.Add(button_Clear); groupBox_SimulateRun.Controls.Add(label_Product1); groupBox_SimulateRun.Controls.Add(label_Product2); groupBox_SimulateRun.Controls.Add(textBox__Product_In1); groupBox_SimulateRun.Controls.Add(textBox__Product_In2); groupBox_SimulateRun.Controls.Add(textBox__Product_Out1); groupBox_SimulateRun.Controls.Add(textBox__Product_Out2); groupBox_SimulateRun.Controls.Add(textBox_Difference1); groupBox_SimulateRun.Controls.Add(textBox_Difference2); richTextBox_EventDisplay.Location = new Point(6, 24); richTextBox_EventDisplay.Dock = DockStyle.Top | DockStyle.Left | DockStyle.Right; comboBox_EquipmentNO.Location = new Point(6, richTextBox_EventDisplay.Height 29); comboBox_EquipmentNO.Dock = DockStyle.Left; abcd;//comboBox_EquipmentNO增加产线号,并选择对应的ConfigMrg.m_strProductNO的选项,目前产线命名规则未知. textBox_Difference2.Location = new Point(groupBox_SimulateRun.Width - textBox_Difference2.Width - 6, groupBox_SimulateRun.Height - textBox_Difference2.Height - 6); textBox_Difference2.Dock = DockStyle.Right | DockStyle.Bottom; textBox_Difference1.Location = new Point(textBox_Difference2.Location.X, textBox_Difference2.Location.Y - textBox_Difference1.Height - 6); textBox_Difference1.Dock = DockStyle.Right | DockStyle.Bottom; textBox__Product_Out2.Location = new Point(textBox_Difference2.Location.X - textBox__Product_Out2.Width - 6, textBox_Difference2.Location.Y); textBox__Product_Out2.Dock = DockStyle.Right | DockStyle.Bottom; textBox__Product_Out1.Location = new Point(textBox_Difference1.Location.X - textBox__Product_Out1.Width - 6, textBox_Difference1.Location.Y); textBox__Product_Out1.Dock = DockStyle.Right | DockStyle.Bottom; textBox__Product_In2.Location = new Point(textBox__Product_Out2.Location.X - textBox__Product_In2.Width - 6, textBox__Product_Out2.Location.Y); textBox__Product_In2.Dock = DockStyle.Right | DockStyle.Bottom; textBox__Product_In1.Location = new Point(textBox__Product_Out1.Location.X - textBox__Product_In1.Width - 6, textBox__Product_Out1.Location.Y); textBox__Product_In1.Dock = DockStyle.Right | DockStyle.Bottom; label_Product2.Location = new Point(textBox__Product_In2.Location.X - label_Product2.Width - 6, textBox__Product_In2.Location.Y 6); label_Product2.Dock = DockStyle.Right | DockStyle.Bottom; label_Product1.Location = new Point(textBox__Product_In1.Location.X - label_Product1.Width - 6, textBox__Product_In2.Location.Y 6); label_Product1.Dock = DockStyle.Right | DockStyle.Bottom; button_Clear.Location = new Point(label_Product1.Location.X - button_Clear.Width - 6, textBox__Product_In2.Location.Y); button_Clear.Dock = DockStyle.Right; //groupBox_MSG和内部控件的初始化 groupBox_MSG.Height = (this.Width - 30) - groupBox_SimulateRun.Height; groupBox_MSG.Width = groupBox_SimulateRun.Width; groupBox_MSG.Location = new Point(groupBox_SimulateRun.Location.X, this.Height - groupBox_MSG.Height - 12); groupBox_MSG.Dock = DockStyle.Bottom | DockStyle.Right; dataGridView_MESMsg.Location = new Point(6, 24); dataGridView_MESMsg.Dock = DockStyle.Top; dataGridView_MESMsg.ColumnCount = 2; dataGridView_MESMsg.Columns[0].HeaderText = "消息类型"; dataGridView_MESMsg.Columns[0].ReadOnly = true; dataGridView_MESMsg.Columns[0].Width = 100; dataGridView_MESMsg.Columns[1].HeaderText = "消息内容"; dataGridView_MESMsg.Columns[1].ReadOnly = true; dataGridView_MESMsg.Columns[1].Width = dataGridView_MESMsg.Width - 150; richTextBox_PLCMsg.Location = new Point(dataGridView_MESMsg.Location.X, groupBox_MSG.Height - richTextBox_PLCMsg.Height - 6); richTextBox_PLCMsg.Dock = DockStyle.Bottom; */
好例子网口号:伸出你的我的手 — 分享!
相关软件
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)