Пример #1
0
 //要执行的任务
 void DoAt8AM(object state)
 {
     //执行功能:每天8点钟
     if (!Sum.ChangeFileName())
     {
         Environment.Exit(0);
     }
     //System.InvalidOperationException:“线程间操作无效: 从不是创建控件“TxtTotal
     Invoke(new Action(() =>
     {
         TxtTotal.Text = Sum.ReadTotal();
     }));
     //再次设定下一次定时
     SetTaskAtFixedTime();
 }
Пример #2
0
        public Main()
        {
            //CheckForIllegalCrossThreadCalls = false;
            main = this;
            InitializeComponent();
            //显示版本号
            this.Text      += " " + Application.ProductVersion.ToString();
            lblLine.Text   += Pqm.line;
            lblLine.Visible = NTRSjudge.Layout.lineSwitch;
            //新建文件夹(log、pqm、sum)
            Document.CreateDocument();
            //载入统计信息
            try { TxtTotal.Text = Sum.ReadTotal(); }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n请检查下面统计文件格式或删除文件清零\r\n" + Document.pathList[2] + "total_yield.txt"
                                , "载入统计文件", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.Exit(0);
            }
            //创建注册表文件
            try { Registry.LocalMachine.CreateSubKey(@"software\NTRS"); }
            catch (Exception ex) { MessageBox.Show(ex.Message); Environment.Exit(0); }
            //验证(串口)
            if (!Regedit.verifyPort())
            {
checkPort:
                DialogResult dr = MessageBox.Show("串口验证失败,\n按确定键重新设置串口属性或关闭程序。", "错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (dr == DialogResult.No)
                {
                    Environment.Exit(0);
                }
                Port port = new Port();
                port.ShowDialog();
                if (!Regedit.verifyPort())
                {
                    goto checkPort;
                }
            }

            //验证(运动轨迹)
            if (!Regedit.verifyTrajectory())
            {
checkTrajectory:
                DialogResult dr = MessageBox.Show("运动轨迹验证失败,\n按确定键重新设置运动轨迹或关闭程序。", "错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (dr == DialogResult.No)
                {
                    Environment.Exit(0);
                }
                Trajectory trajectory = new Trajectory();
                trajectory.ShowDialog();
                if (!Regedit.verifyTrajectory())
                {
                    goto checkTrajectory;
                }
            }
            #region 布局
            TlpLayout.RowCount    = NTRSjudge.Layout.row;
            TlpLayout.ColumnCount = NTRSjudge.Layout.col;

            for (int i = 0; i < NTRSjudge.Layout.row; i++)
            {
                TlpLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            }
            for (int i = 0; i < NTRSjudge.Layout.col; i++)
            {
                TlpLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
            }

            /*
             * for (int i = 0; i < NTRSjudge.Layout.row; i++)
             * {
             *  for (int j = 0; j < NTRSjudge.Layout.col; j++)
             *  {
             *      Label label = new Label();
             *      label.Dock = DockStyle.Fill;
             *      label.BackColor = Color.Red;
             *      label.Text = "\r\n\r\n\r\n(" + (i + 1).ToString() + "," + (j + 1).ToString() + ")";
             *      tableLayoutPanel1.Controls.Add(label, j, i);
             *      //下面这句要是在行和列不够的情况下,会建到100行1000列
             *      //tableLayoutPanel1.Controls.Add(label1, 100, 1000);
             *  }
             * }
             */
            #endregion
            //定时执行
            SetTaskAtFixedTime();
        }
Пример #3
0
        void Action(string SN)
        {
            Application.DoEvents();
            //填满之后,清空
            object sender = new object { };

            if (sequence == NTRSjudge.Layout.sum)
            {
                BtnClear_Click(sender, new EventArgs());
            }

            //if (mode == Mode.旧机器 && !SN.Contains("ERROR"))
            //    SN = SN.Substring(0, 17);
            if (!SN.Contains("ERROR"))
            {
                SN = SN.Substring(0, 17);
            }

            Judge.judge(SN);
            //Judge.judge("ERROR");
            TxtSN.Text = string.Empty;

            #region 生产模式(不同方式串口发送信息)
            //接收(光子云拍照):一整盘由","隔开的SN
            //ERROR,GH945678901LKRQ01,......GH945678901LKRQ64,
            //发送:一整盘ok发"ok,",存在非"PASS"发送"ng,"
            //"ok,"     "ng,"
            //MessageBox.Show("away API,mode="+mode.ToString());
            if (mode == Mode.光子云)//光子云
            {
                if (AllInfo.SNlist.Count == NTRSjudge.Layout.sum)
                {
                    string sendStr = "ok,";
                    foreach (var var in AllInfo.SNlist)
                    {
                        if (var.result != "PASS")
                        {
                            sendStr = "ng,";
                            break;
                        }
                    }
                    SptReceiveOrSend.Write(sendStr);
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口1发出" + sendStr.Length + "字节Byte:\r\n" + sendStr);
                }
            }
            //接收(扫描器):一个接一个的SN
            //ERROR     GH945678901LKRQ01
            //发送:一整盘ok发"0",存在非"PASS"发送坐标
            //"0"       "X0 = 2,Y0 = 3,X1 = 4,Y1 = 5,"
            //(第2行第3列,第4行第5列材料NG,需要捡出)
            else if (mode == Mode.大研)//大研
            {
                if (AllInfo.SNlist.Count == NTRSjudge.Layout.sum)
                {
                    //string sendStr =type + snInfo.firstTime.ToString("yyyyMMddHHmmss");
                    string sendStr = Pqm.type + Pqm.line.Remove(0, 1) + Pqm.process.Substring(0, 1) + AllInfo.SNlist[AllInfo.SNlist.Count - 1].firstTime.ToString("yyMMddHHmmss").Remove(0, 1);
                    for (int i = 1; i <= AllInfo.SNlist.Count; i++)
                    {
                        if (AllInfo.SNlist[i - 1].result != "PASS")
                        {
                            //如果"01.02.05."去掉"."的话,要是串口数据丢失一个,后面全部都会识别错误
                            //不去掉"."的话,只会识别丢失的位置
                            if (i < 10)
                            {
                                sendStr += "0" + i.ToString();
                            }
                            else
                            {
                                sendStr += i.ToString();
                            }
                        }
                    }
                    SptReceiveOrSend.Write(sendStr + "\r\n");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口1发出" + (sendStr.Length + 1).ToString() + "字节Byte:\r\n" + sendStr + "\r\n(回车)");
                }
            }
            //每次接收分析后发一个信号给串口
            //接收(扫描器):一个接一个的SN+","
            //GH945678901LKRQ01,
            //发送:根据结果"MISS"、"PASS"、"FAIL"、"SKIP"分别发送他们的头一个字母
            //"M"   "P"     "F"     "S"
            else if (mode == Mode.单片机)//单片机
            {
                switch (AllInfo.SNlist[AllInfo.SNlist.Count - 1].result)
                {
                case "MISS":
                    SptSend.Write("M");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出1字节Byte:\r\nM");
                    break;

                case "PASS":
                    SptSend.Write("P");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出1字节Byte:\r\nP");
                    break;

                case "FAIL":
                    SptSend.Write("F");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出1字节Byte:\r\nF");
                    break;

                case "HOLD":
                    SptSend.Write("F");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出1字节Byte:\r\nF");
                    break;

                case "SKIP":
                    SptSend.Write("S");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出1字节Byte:\r\nS");
                    break;

                default:
                    SptSend.Write("F");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出1字节Byte:\r\nF");
                    break;
                }
            }
            //发送错误坐标或ok
            //接收(光子云拍照):一整盘由","隔开的SN
            //ERROR,GH945678901LKRQ01,......GH945678901LKRQ64,
            //发送:一整盘ok发"ok",存在非"PASS"发送坐标加".",最后结尾都加回车
            //"ok\r\n"      "1,1.1,2\r\n"
            else if (mode == Mode.ONS)//供应商
            {
                if (AllInfo.SNlist.Count == NTRSjudge.Layout.sum)
                {
                    string sendStr = "";
                    for (int i = 0; i < AllInfo.SNlist.Count; i++)
                    {
                        if (AllInfo.SNlist[i].result != "PASS")
                        {
                            //固定布局(竖排或横排)
                            //int x = i / APP_Config.row;
                            //int y = i % APP_Config.row;
                            //sendStr += (x + 1).ToString() + "," + (y + 1).ToString() + ".";
                            sendStr += Regedit.Trajectory[i] + ".";
                        }
                    }
                    if (sendStr == "")
                    {
                        sendStr = "ok";
                    }
                    //SptSend.WriteLine(sendStr);//
                    SptSend.Write(sendStr + "\r\n");
                    MessageShow(ChkTest_ShowMessage.Checked, "mode=" + mode + ",串口2发出" + (sendStr.Length + 1).ToString() + "字节Byte:\r\n" + sendStr + "\r\n(回车)");
                }
            }
            #endregion
            //方块布局显示
            int[] location = Array.ConvertAll(Regedit.Trajectory[sequence].Split(','), int.Parse);

            try
            {
                TlpLayout.Controls.Add(NTRSjudge.Layout.paint(AllInfo.SNlist[AllInfo.SNlist.Count - 1]),
                                       location[0] - 1, location[1] - 1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            //数据显示
            SNlab.Text     = AllInfo.SNlist[AllInfo.SNlist.Count - 1].SN;
            TxtDetail.Text = AllInfo.SNlist[AllInfo.SNlist.Count - 1].detail;
            LblJudge.Text  = AllInfo.SNlist[AllInfo.SNlist.Count - 1].result;
            //写log

            Log.WriteLog(SNlab.Text, TxtDetail.Text, LblJudge.Text);
            //非"MISS"("PASS"、"FAIL"、"SKIP"),写sum和csv
            if (LblJudge.Text != "MISS")
            {
                switch (LblJudge.Text)
                {
                case "PASS":
                    Sum.passQty++;
                    break;

                case "FAIL":
                    Sum.failQty++;
                    break;

                case "SKIP":
                    Sum.skipQty++;
                    break;
                }
                Sum.WriteTotal();
                TxtTotal.Text = Sum.ReadTotal();
                Pqm.WriteCSV(AllInfo.SNlist[AllInfo.SNlist.Count - 1]);
            }
            sequence++;
        }