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); } }
/// <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); } }