在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例Windows系统编程 → C#SECS开发

C#SECS开发

Windows系统编程

下载此实例
  • 开发语言:C#
  • 实例大小:5.09M
  • 下载次数:160
  • 浏览次数:1022
  • 发布时间:2020-04-09
  • 实例类别:Windows系统编程
  • 发 布 人:jackfan
  • 文件格式:.zip
  • 所需积分:2
 相关标签: cs 开发 C#

实例介绍

【实例简介】

1.       运行概要:

在没有配置文件(第一次运行)或者正确的配置文件(配置文件被错误修改)的条件下,若想正常运行本程序,需要先将正确的配置文件放入本程序的运行程序所处的文件夹中,若无正确的配置文件,则可以先运行程序,然后在设置页面将设置正确的基本信息(注意:MES_IP就是本程序的服务器的IP,IP地址必须跟程序所处的电脑的IP一致,部分信息如:资源代号、设备工站等只能通过切换PLC的基本信息页面来获取,),然后点击保存,之后重新运行程序即可

【实例截图】

from clipboard

【核心代码】

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;
            */

标签: cs 开发 C#

实例下载地址

C#SECS开发

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 ryyy 发表于: 2023-08-04 15:24 34
用不了,源代码边连窗体文件都没有

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警