예제 #1
0
        private void 條碼讀取器動作執行緒(object obj)
        {
            while (true)
            {
                // 讀檔
                if (GlobalData.DM[DmTable.DM_8120CCD讀取2D碼].Equals("1"))
                {
                    if (formStartModel.允許2D讀取Tag)
                    {
                        GlobalParameter.ReadContent = readerAccessor.ExecCommand("LON", 8000);
                        if (string.IsNullOrEmpty(GlobalParameter.ReadContent))
                        {
                            readerAccessor.ExecCommand("LOFF");
                            PLCMethod.WriteSingle(DmTable.DM_8221CCD讀2D檔失敗, 1);
                        }
                        else
                        {
                            PLCMethod.WriteSingle(DmTable.DM_8220CCD讀2D碼完成, 1);
                        }
                    }
                    else
                    {
                        PLCMethod.WriteSingle(DmTable.DM_8220CCD讀2D碼完成, 1);
                    }

                    PLCMethod.WriteSingle(DmTable.DM_8120CCD讀取2D碼, 0);
                }
                Thread.Sleep(100);

                // 寫入
                if (GlobalData.DM[DmTable.DM_81212D碼通知寫入].Equals("1"))
                {
                    string xmlString = "<?xml version='1.0' encoding='UTF-8'?>"
                                       + "<COMMAND>"
                                       + "<COM_NUM>11</COM_NUM>"
                                       + "<INFORMATION>"
                                       + "<ID>" + GlobalParameter.ReadContent + "</ID>"
                                       + "</INFORMATION>"
                                       + "</COMMAND>";
                    socket.SendTimeout    = 10000;
                    socket.ReceiveTimeout = 5000;

                    // 送出XML
                    XmlDocument doc = new XmlDocument();
                    doc.InnerXml = xmlString;
                    Byte[] sendBuf = Encoding.UTF8.GetBytes(doc.OuterXml);
                    socket.Send(sendBuf, sendBuf.Length, SocketFlags.None);

                    // 回傳XML
                    Byte[] recvBuf = new Byte[0x40000];
                    for (Int32 i = 0; i < recvBuf.Length; i++)
                    {
                        recvBuf[i] = 0;
                    }
                    socket.Receive(recvBuf, 0, recvBuf.Length, SocketFlags.None);

                    // 取得子節點參數,正確:"0"、錯誤:"1"
                    XElement xmlroot = XElement.Parse(TypeMethod.FormtXmlDoc(Encoding.UTF8.GetString(recvBuf)));
                    string   error   = ((XElement)(xmlroot.Element("ERROR"))).Value;
                    int      dm      = (error == "0") ? DmTable.DM_82222D碼寫入完成 : DmTable.DM_82232D碼寫入失敗;
                    PLCMethod.WriteSingle(dm, 1);

                    // PLC:DM_81212D碼通知寫入,清空點位
                    PLCMethod.WriteSingle(DmTable.DM_81212D碼通知寫入, 0);
                }
                Thread.Sleep(100);
            }
        }
예제 #2
0
        /// <summary>
        /// 條碼讀取器-讀取/寫入Hioki
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnReadWrite_Click(object sender, EventArgs e)
        {
            try
            {
                // 異動紀錄
                AddRecChangeMethod("手動流程:條碼讀取並寫入Hioki機台");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

            if (GlobalParameter.UseMode.Equals("0"))
            {
                MessageBox.Show("測試模式,無法讀取。"); return;
            }
            try
            {
                string readCode = readerAccessor.ExecCommand("LON", 8000);
                lblText.Text = readCode;
                if (string.IsNullOrEmpty(readCode))
                {
                    readerAccessor.ExecCommand("LOFF");
                    MessageBox.Show("讀取錯誤,請檢查讀取器或材料是否有異常。");
                    return;
                }

                string xmlString = "<?xml version='1.0' encoding='UTF-8'?>"
                                   + "<COMMAND>"
                                   + "<COM_NUM>11</COM_NUM>"
                                   + "<INFORMATION>"
                                   + "<ID>" + readCode + "</ID>"
                                   + "</INFORMATION>"
                                   + "</COMMAND>";
                socket.SendTimeout    = 10000;
                socket.ReceiveTimeout = 5000;

                // 送出XML
                XmlDocument doc = new XmlDocument();
                doc.InnerXml = xmlString;
                Byte[] sendBuf = Encoding.UTF8.GetBytes(doc.OuterXml);
                socket.Send(sendBuf, sendBuf.Length, SocketFlags.None);

                // 回傳XML
                Byte[] recvBuf = new Byte[0x40000];
                for (Int32 i = 0; i < recvBuf.Length; i++)
                {
                    recvBuf[i] = 0;
                }
                socket.Receive(recvBuf, 0, recvBuf.Length, SocketFlags.None);

                // 取得子節點參數,正確:0、錯誤:1
                XElement xmlroot = XElement.Parse(TypeMethod.FormtXmlDoc(Encoding.UTF8.GetString(recvBuf)));
                string   error   = ((XElement)(xmlroot.Element("ERROR"))).Value;
                MessageBox.Show(error.Equals("0") ? "寫入成功" : "寫入失敗");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception錯誤:" + ex.Message);
            }
        }