public LaserPrinting() { InitializeComponent(); SetDefultEvent(); toolStripbtnSet.Enabled = false; toolStripbtnPoint.Enabled = false; if (GlobalParameter.UseMode.Equals("1")) { #region 測試後不用要刪除 PLCMethod.PLC_Connect(); Thread.Sleep(1000); #endregion 測試後不用要刪除 panel1.Enabled = false; try { if (!GlobalData.PLC初始連線是否成功) { MessageBox.Show("PLC連線失敗:請檢查PLC連線IP、機台是否異常。"); return; } if (!GlobalData.PLC線路異常) { ThreadPool.QueueUserWorkItem(DM8123雷射打印執行緒); } else { MessageBox.Show("PLC線路異常。"); return; } SerialPortMethod.LaserOpenPort(GlobalParameter.LaserSerialPort); } catch (Exception ex) { logger.Error(ex, "Exception錯誤"); MessageBox.Show("Exception錯誤:" + ex.Message); return; } try { if (LaserConnectionPort.LaserPort.IsOpen) { ModelSTS modelSTS = LaserExecuteWrite.執行STS狀態請求讀取(LaserCommand.STS狀態請求讀取); formStartModel.LSR雷射狀態 = modelSTS.LSRStatus; formStartModel.SHT遮光閥狀態 = modelSTS.SHTStatus; DefultLaserControll(); } } catch (Exception ex) { logger.Error(ex, "Exception錯誤"); MessageBox.Show("請檢查雷射是否斷線、未開機、未開啟REMOTE。"); } panel1.Enabled = true; } }
public Reader() { InitializeComponent(); ButtonProperty.SetProperty(btnRead, true); ButtonProperty.SetProperty(btnReadWrite, true); if (GlobalParameter.UseMode.Equals("1")) { #region 測試後不用要刪除 PLCMethod.PLC_Connect(); Thread.Sleep(1000); #endregion 測試後不用要刪除 // PLC連線、條碼讀取器連線 try { if (!GlobalData.PLC初始連線是否成功) { MessageBox.Show("PLC連線失敗:請檢查PLC連線IP、機台是否異常。"); return; } if (!GlobalData.PLC線路異常) { ThreadPool.QueueUserWorkItem(DM8120讀取2D碼執行緒); } else { MessageBox.Show("PLC線路異常。"); return; } bool check = LiveviewFormProperty.ReadConnect(liveviewForm1, readerAccessor, GlobalParameter.ReadIP); if (!check) { MessageBox.Show("條碼讀取器連線異常。"); return; } } catch (Exception ex) { logger.Error(ex, "Exception錯誤"); MessageBox.Show("Exception錯誤:" + ex.Message); return; } // Hoioke機台連線 try { IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(GlobalParameter.HiokiIP), 32006); this.socket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Thread tread = new Thread(new ThreadStart(CheckSocketConnect)); tread.Start(); this.socket.Connect(ipe); } catch (Exception) { MessageBox.Show("Hiorki連線: Hiorki機台連線異常,請檢查IP位置或網路線路是否異常。"); } } }
/// <summary> /// 傳送資料 TO PLC /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnPLCWrite_Click(object sender, EventArgs e) { try { // 使用者異動紀錄 recChangeService.AddData(new RecChange { NowTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:ss:mm")), Message = "PLC傳送資料", UserName = GlobalParameter.UserName }); if (string.IsNullOrEmpty(lblPartNo.Text)) { MessageBox.Show("未選取一筆"); return; } if (GlobalData.PLC初始連線是否成功 && !GlobalData.PLC線路異常) { // DWORD List <string> data = new List <string>(); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceSizeX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceSizeY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceSizeT, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PositionX2D, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PositionY2D, data); PLCMethod.SetDefultParameter("0", 20, data); PLCMethod.SetParameterSplit(partNoJoinTrayAndLaser.TrayNo.ToString(), data); PLCMethod.SetParameterSplit(partNoJoinTrayAndLaser.DivideNoX.ToString(), data); PLCMethod.SetParameterSplit(partNoJoinTrayAndLaser.DivideNoY.ToString(), data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.DividePitchX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.DividePitchY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceCenterX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceCenterY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayThickness, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayCenter, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayLength, data); PLCMethod.SetDefultParameter("0", 10, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayOffsetX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayOffsetY, data); PLCMethod.SetDefultParameter("0", 6, data); PLCcommand.PLC_Write(PLCcommand.Cmd_Mode.Mode_Write_Multiple, PLCcommand.PLC_IO.DM, DmTable.DM_8300DWORD_板寬X, 0, data.Count, data); } else { MessageBox.Show("PLC斷線異常"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void DM8110結批(object obj) { while (true) { if (GlobalData.DM[DmTable.DM_8110結批].Equals("1")) { // 產出資料 // PLC:DM_8110結批,清空點位 PLCMethod.WriteSingle(DmTable.DM_8110結批, 0); } Thread.Sleep(100); } }
private void 雷射動作執行緒(object obj) { while (true) { if (GlobalData.DM[DmTable.DM_8123雷射打印開始].Equals("1")) { if (formStartModel.允許雷射打印Tag) { if (GlobalData.DM[DmTable.DM_8104停止].Equals("1") || GlobalData.DM[DmTable.DM_8110結批].Equals("1")) { lblAutoRun.Text = "停止運轉"; splitContainer1.Enabled = true; } else { string cmd = string.Empty, response = string.Empty; Thread.Sleep(200); if (formStartModel.SHT遮光閥狀態.Equals("0")) { cmd = LaserCommand.MKM指令接收控制設定("1"); response = LaserExecuteWrite.執行MRK印字觸控制設定(cmd); if (ValidateUtility.DisplayMessage(response)) { return; } formStartModel.SHT遮光閥狀態 = "1"; } Thread.Sleep(200); cmd = LaserCommand.MRK印字觸控制設定("1"); response = LaserExecuteWrite.執行MRK印字觸控制設定(cmd); int dm = ValidateUtility.DisplayMessage(response).Equals(true) ? DmTable.DM_8230雷射打印異常 : DmTable.DM_8229雷射打印完畢; PLCMethod.WriteSingle(dm, 1); } } else { PLCMethod.WriteSingle(DmTable.DM_8229雷射打印完畢, 1); } // PLC:DM_8123雷射打印開始,清空點位 PLCMethod.WriteSingle(DmTable.DM_8123雷射打印開始, 0); } Thread.Sleep(100); } }
private void Step2寫入PLC資料() { // DWORD List <string> data = new List <string>(); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceSizeX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceSizeY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceSizeT, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PositionX2D, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PositionY2D, data); PLCMethod.SetDefultParameter("0", 20, data); PLCMethod.SetParameterSplit(partNoJoinTrayAndLaser.TrayNo.ToString(), data); PLCMethod.SetParameterSplit(partNoJoinTrayAndLaser.DivideNoX.ToString(), data); PLCMethod.SetParameterSplit(partNoJoinTrayAndLaser.DivideNoY.ToString(), data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.DividePitchX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.DividePitchY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceCenterX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.PieceCenterY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayThickness, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayCenter, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayLength, data); PLCMethod.SetDefultParameter("0", 10, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayOffsetX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinTrayAndLaser.TrayOffsetY, data); PLCMethod.SetDefultParameter("0", 6, data); PLCcommand.PLC_Write(PLCcommand.Cmd_Mode.Mode_Write_Multiple, PLCcommand.PLC_IO.DM, DmTable.DM_8300DWORD_板寬X, 0, data.Count, data); // judge判斷寫入PLC List <string> listJudge = partNoJoinTrayAndLaser.JudgeStatus.Split('、').ToList(); List <int> listDM = new List <int> { { DmTable.DM_8231PASS }, { DmTable.DM_8232UNTEST }, { DmTable.DM_8233LO }, { DmTable.DM_8234LEAK }, { DmTable.DM_8235CCD }, { DmTable.DM_8236OPEN }, { DmTable.DM_8237LOW4W }, { DmTable.DM_8238VISUAL }, { DmTable.DM_8239FAIL10 }, { DmTable.DM_8240FAIL11 }, { DmTable.DM_8241FAIL12 }, { DmTable.DM_8242FAIL13 }, { DmTable.DM_8243SKIP } }; if (listJudge.Count == listDM.Count) { for (int i = 0; i < listJudge.Count; i++) { int value = listJudge[i] == "ON" ? 1 : 0; PLCcommand.PLC_Write(PLCcommand.Cmd_Mode.Mode_Write_Single, PLCcommand.PLC_IO.DM, listDM[i], value, 0, null); } } }
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); } }
public FormStart() { InitializeComponent(); SetDefultEvent(); // 條碼讀取器,預設顯示還是不顯示 label3.Visible = lblCCD.Visible = liveviewForm1.Visible = false; ToolStripMenuItemSW(false, "FormStart"); DefultListViewInit(); ThreadPool.QueueUserWorkItem(日期時間執行緒); if (GlobalParameter.UseMode.Equals("1")) { // PLC連線 PLCMethod.PLC_Connect(); Thread.Sleep(1000); if (GlobalData.PLC初始連線是否成功) { ThreadPool.QueueUserWorkItem(警示燈執行緒); } else { MessageBox.Show("PLC連線失敗:請檢查PLC連線IP、機台是否異常。"); return; } // 雷射功能連線 try { SerialPortMethod.LaserOpenPort(GlobalParameter.LaserSerialPort); if (LaserConnectionPort.LaserPort.IsOpen) { ModelSTS modelSTS = LaserExecuteWrite.執行STS狀態請求讀取(LaserCommand.STS狀態請求讀取); formStartModel.LSR雷射狀態 = modelSTS.LSRStatus; formStartModel.SHT遮光閥狀態 = modelSTS.SHTStatus; DefultLaserControll(); } } catch (Exception ex) { MessageBox.Show("請檢查雷射是否斷線、未開機、未開啟REMOTE。" + ex.Message); return; } // 條碼讀取器連線 try { bool check = LiveviewFormProperty.ReadConnect(liveviewForm1, readerAccessor, GlobalParameter.ReadIP); if (!check) { MessageBox.Show("條碼讀取器連線異常、請確認IP位置。"); return; } label3.Visible = lblCCD.Visible = liveviewForm1.Visible = true; } catch (Exception ex) { logger.Error(ex, "Exception錯誤"); MessageBox.Show("Exception錯誤:" + ex.Message); return; } // Hoioke機台連線 try { IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(GlobalParameter.HiokiIP), 32006); this.socket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Thread tread = new Thread(new ThreadStart(CheckSocketConnect)); tread.Start(); this.socket.Connect(ipe); } catch (Exception ex) { MessageBox.Show("Hiorki連線: Hiorki機台連線異常,請檢查IP位置或網路線路是否異常。" + ex.Message); } } }
/// <summary> /// 設定存檔 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripbtnSet_Click(object sender, EventArgs e) { string cmd = string.Empty, response = string.Empty, record = string.Empty; toolStripbtnSet.Enabled = false; toolStripbtnPoint.Enabled = true; try { // 異動紀錄 AddRecChangeMethod("手動流程:雷射設定存檔"); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } if (GlobalParameter.UseMode.Equals("0")) { MessageBox.Show("測試模式,無法設定存檔。"); return; } // 驗證資料 List <string> parameter = new List <string> { { cbBoxPartNo.Text }, { lblFNO.Text }, { lblPower.Text }, { lblSpeed.Text } }; response = ValidateUtility.CheckParameter(parameter); if (ValidateUtility.DisplayMessage(response)) { return; } // 板子計算方式 PieceResultModel pieceResultModel = new PieceCalculationMethod() .PieceCalculation(new PieceRequestModel { 板子X尺寸 = Convert.ToDouble(partNoJoinLaser[0].PieceSizeX), 板子Y尺寸 = Convert.ToDouble(partNoJoinLaser[0].PieceSizeY), X偏移位置 = Convert.ToDouble(lblXoffset.Text), Y偏移位置 = Convert.ToDouble(lblYoffset.Text), 台與雷射中心點差距 = GlobalParameter.VehicleAndPieceCenter }); #region PLC寫入 try { if (!GlobalData.PLC線路異常) { List <string> data = new List <string>(); PLCMethod.SetParameterSplitForPoint(partNoJoinLaser[0].PieceSizeX, data); PLCMethod.SetParameterSplitForPoint(partNoJoinLaser[0].PieceSizeY, data); PLCMethod.SetParameterSplitForPoint(partNoJoinLaser[0].PieceSizeT, data); PLCMethod.SetParameterSplitForPoint(partNoJoinLaser[0].PositionX2D, data); PLCMethod.SetParameterSplitForPoint(partNoJoinLaser[0].PositionY2D, data); PLCMethod.SetDefultParameter("0", 20, data); PLCMethod.SetParameterSplit(dataTray.TrayNo.ToString(), data); PLCMethod.SetParameterSplit(dataTray.DivideNoX.ToString(), data); PLCMethod.SetParameterSplit(dataTray.DivideNoY.ToString(), data); PLCMethod.SetParameterSplitForPoint(dataTray.DividePitchX, data); PLCMethod.SetParameterSplitForPoint(dataTray.DividePitchY, data); PLCMethod.SetParameterSplitForPoint(dataTray.PieceCenterX, data); PLCMethod.SetParameterSplitForPoint(dataTray.PieceCenterY, data); PLCMethod.SetParameterSplitForPoint(dataTray.TrayThickness, data); PLCMethod.SetParameterSplitForPoint(dataTray.TrayCenter, data); PLCMethod.SetParameterSplitForPoint(dataTray.TrayLength, data); PLCMethod.SetDefultParameter("0", 10, data); PLCMethod.SetParameterSplitForPoint(dataTray.TrayOffsetX, data); PLCMethod.SetParameterSplitForPoint(dataTray.TrayOffsetY, data); PLCMethod.SetDefultParameter("0", 6, data); PLCcommand.PLC_Write(PLCcommand.Cmd_Mode.Mode_Write_Multiple, PLCcommand.PLC_IO.DM, DmTable.DM_8300DWORD_板寬X, 0, data.Count, data); } else { MessageBox.Show("PLC線路異常。"); return; } } catch (Exception ex) { logger.Error(ex, "Exception錯誤"); MessageBox.Show("Exception_PLC系統異常錯誤:" + ex.Message); return; } #endregion PLC寫入 #region 雷射寫入 try { if (SHT遮光閥狀態.Equals("1")) { cmd = LaserCommand.MKM指令接收控制設定("0"); response = LaserExecuteWrite.執行MRK印字觸控制設定(cmd); if (ValidateUtility.DisplayMessage(response)) { return; } SHT遮光閥狀態 = "0"; record += "1.SHT,"; } // 設定 FNO cmd = LaserCommand.FNO文件變更控制設定(lblFNO.Text); response = LaserExecuteWrite.執行FNO文件變更控制設定(cmd); if (ValidateUtility.DisplayMessage(response)) { return; } record += "2.FNO,"; // 雷射功率 cmd = LaserCommand.LPW激光功率控制設定(string.Format("{0:000.0}", Convert.ToInt32(lblPower.Text))); response = LaserExecuteWrite.執行LPW激光功率控制設定(cmd); if (ValidateUtility.DisplayMessage(response)) { return; } record += "3.LPW,"; // 掃描速度 cmd = LaserCommand.SSP掃描速度控制設定(string.Format("{0:00000}", Convert.ToInt32(lblSpeed.Text))); response = LaserExecuteWrite.執行SSP掃描速度控制設定(cmd); if (ValidateUtility.DisplayMessage(response)) { return; } record += "4.SSP,"; // 設定座標位置 List <double> list = new List <double> { { pieceResultModel.X位置 }, { pieceResultModel.Y位置 } }; List <string> laserList = TypeMethod.SetFormatValue(list, "{0:000.000}"); ModelSPC modelSPC = new ModelSPC { SonCmd = "S", Xposition = laserList[0], Yposition = laserList[1] }; cmd = LaserCommand.SPC文字條件控制設定(modelSPC); response = LaserExecuteWrite.執行SPC文字條件控制設定(cmd); if (ValidateUtility.DisplayMessage(response)) { return; } record += "5.SPC,"; // 雷射參數儲存 LaserExecuteWrite.執行FOR文件覆盖保存控制設定(LaserCommand.FOR文件覆盖保存控制設定); record += "6.FOR,"; // DB資料寫入 IDataLaserService dataLaserService = new DataLaserService(); ResponseModel ResponseModel = dataLaserService.UpdateData(new DataLaser { PartNo = cbBoxPartNo.Text, FnoNo = lblFNO.Text, Xoffset = lblXoffset.Text, Yoffset = lblYoffset.Text, Power = lblPower.Text, Speed = lblSpeed.Text }); if (ResponseModel.Status.Equals(StatusEnum.Error)) { logger.Error(ResponseModel.ResponseMsg); MessageBox.Show(ResponseModel.ResponseMsg); return; } record += "7.DB"; if (!ValidateUtility.DisplayMessage(response)) { MessageBox.Show("設定完成,執行紀錄:" + record); } } catch (Exception ex) { logger.Error(ex, "Exception_Error:" + record); MessageBox.Show("Exception_雷射系統異常錯誤:" + ex.Message + ",執行紀錄:" + record); } #endregion 雷射寫入 }