using System; using System.Threading; using System.Xml.Linq; using bizFacade; //using SystemFramework; using MesServerWork; namespace MesServerFunctions { partial class FunctionMES { object lockBarcode = new object(); ///第一步,判断条码类型,根据条码类型,执行对应的存储过程 ///第二步,条码类型(将扫描的条码保存到对应的表中) ///第三步,扫描完成之后给出允许工作信号 /// 处理页面扫描条码 /// /// /// public void Barcode(object e) { lock(lockBarcode) { try { DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e; string OpName = Convert.ToString(msgEvent.OpName); string OpName_mes = Convert.ToString(msgEvent.OpName) + "_mes"; string barcode = Convert.ToString(msgEvent.TagValue); //将随工单零件号写入PLC MIS_BASE.Write_EngineType_MES(OpName_mes, ""); //将唯一标识写入PLC MIS_BASE.Write_EngineID_MES(OpName_mes, ""); // 判断条码格式是否正确 if (barcode.Split(';').Length > 2) { //m003000214179;p23003;x0;g|JS8C.12.825|1|22-K-255-1/组件|ZM6|20230109134927285001740003 //[0]m003000214179 //[1]p23003 //[2]x0 //[3]g //[4]JS8C.12.825 //[5]1 //[6]22-K-255-1/组件z //[7]ZM6 //[8]20230109134927285001740003 var barArray = barcode.Split(new char[] { ';', '|' }); var orderNo = barArray[0].Substring(1); // 订单号 var batchNo = barArray[1].Substring(1); // 批次号 var partNo = barArray[4]; // 零件号/机型 var partName = barArray[6].Split('/')[1]; //零件名称 var partSort = barArray[6].Split('/')[0]; //零件类别 var partSortType = barArray[6].Split('/')[0]; //零件类别 var partSnNo = barArray[8]; // 零件唯一码 string EngineType = partNo;//机型 string EngineID = partSnNo.Substring(0,18);//发动机号 //为产品生成唯一标识(扫码时间戳) TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); //EngineID = Convert.ToInt64(ts.TotalMilliseconds).ToString(); bool IsNotRepeatedNumber = false; // 是否重号 int IsTodayPlan = 0; // 是否是今天的计划 //判断当前设备的模式:手动、自动、脉动 //自动模式: MIS_BASE.Read_TagTypeID(63, OpName, out string workModel); switch (workModel.ToLower()) { case "true": case "1": workModel = "1"; break; default: workModel = "0"; break; } //1:获得申请上线信息后,扫描条码才处理业务 bool ispartload = false; MIS_BASE.Read_PartLoad(OpName, out ispartload); if (!ispartload) { SendMessageFun.AsyncSendMessage_Notice(OpName, "等待人工扫码信号!!"); return; } if (workModel.ToString() == "1" && ispartload ) { string opName_db = ""; //自动模式时,进行工位转换 if (OpName == "OP10") { OpName_mes = "OP10_mes"; opName_db = "OP20"; } else if (OpName == "OP30") { OpName_mes = "OP30_mes"; opName_db = "OP40"; } else { opName_db = OpName; } //判断该产品标识在该工位是否重复 IsNotRepeatedNumber = BaseDataSystemMES.EngineTypeID_IsNotRepeatedNumber(EngineID, opName_db); if (IsNotRepeatedNumber) { // 判断是否是今天的计划 BaseDataSystemMES.GetEngineTypeUpLoadOpName(EngineID, partNo, opName_db, orderNo, batchNo, out IsTodayPlan); if (IsTodayPlan == 1) { BaseDataSystemMES.OpName_MIS_MOBY_Insert(opName_db, MobyTagType.WorkStartIn, DateTime.Now.ToString()); //将唯一标识写入PLC //MIS_BASE.Write_EngineID_MES(OpName_mes, EngineID); MIS_BASE.WritePLC(74, OpName_mes, EngineID); //将随工单零件号写入PLC //MIS_BASE.Write_EngineType_MES(OpName_mes, EngineType); MIS_BASE.WritePLC(75, OpName_mes, EngineType); SendMessageFun.AsyncSendMessage_Notice(OpName, "收到扫码信号···········"); //先把延时屏蔽掉看看效果如何 //Thread.Sleep(5000); MIS_BASE.Write_EngineTypeGetOver_MES(OpName_mes, true); // MES传递机型 //string WriteStr1 = MIS_BASE.ReadPLC(74, OpName_mes).ToString(); //string WriteStr2 = MIS_BASE.ReadPLC(75, OpName_mes).ToString(); //if (WriteStr1 != "" && WriteStr2 != "") //{ // MIS_BASE.Write_EngineTypeGetOver_MES(OpName_mes, true); // SendMessageFun.AsyncSendMessage_Notice(OpName, "扫码成功·········"); //} //else //{ // SendMessageFun.AsyncSendMessage_Notice(OpName, "写入传递机型时码值为空!!!!!!!!"); //} //显示当前订单信息 SendMessage.ShowMoby(opName_db); //通知web显示 SendMessageFun.SendMessage("13", "111", opName_db); MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + barcode); } else { MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + ""); SendMessageFun.AsyncSendMessage_Notice(opName_db, "计划不匹配!!"); } } else { MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + barcode); SendMessageFun.AsyncSendMessage_Notice(opName_db, "工件零件号重号,请确认!"); } return; } //获取脉动模式: MIS_BASE.Read_TagTypeID(64, OpName, out string workModel_MD); //获取手动模式: MIS_BASE.Read_TagTypeID(62, OpName, out string workModel_SD); switch (workModel_MD.ToLower()) { case "true": case "1": workModel_MD = "1"; break; default: workModel_MD = "0"; break; } switch (workModel_SD.ToLower()) { case "true": case "1": workModel_SD = "1"; break; default: workModel_SD = "0"; break; } //手动模式: if (workModel_MD.ToString() == "1" || workModel_SD.ToString() == "1") { } else { SendMessageFun.AsyncSendMessage_Notice(OpName, "PLC模式不正确!!"); return; } //2:从数据库判断判断是否已经扫描过这个码 IsRepeatedNumber true 不重号;false 重号; IsNotRepeatedNumber = BaseDataSystemMES.EngineTypeID_IsNotRepeatedNumber(EngineID, OpName); if (IsNotRepeatedNumber) { // 判断是否是今天的计划 BaseDataSystemMES.GetEngineTypeUpLoadOpName(EngineID, partNo, OpName, orderNo, batchNo, out IsTodayPlan); if (IsTodayPlan == 1) { //将随工单零件号写入PLC MIS_BASE.Write_EngineType_MES(OpName_mes, EngineType); //将唯一标识写入PLC MIS_BASE.Write_EngineID_MES(OpName_mes, EngineID); Thread.Sleep(1000); // MES传递机型 MIS_BASE.Write_EngineTypeGetOver_MES(OpName_mes, true); //显示当前订单信息 SendMessage.ShowMoby(OpName); //通知web显示 SendMessageFun.SendMessage("13", "111", OpName); MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + barcode); } else { SendMessageFun.AsyncSendMessage_Notice(OpName, "计划不匹配!!"); MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + ""); } } else { SendMessageFun.AsyncSendMessage_Notice(OpName, "工件零件号重号,请确认!"); MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + barcode); } } else { SendMessageFun.AsyncSendMessage_Notice(OpName, "工件条码格式不正确,请确认!"); MIS_BASE.asyncSendMessage("MES|showBarcode|" + OpName + "|" + barcode); } } catch (Exception err) { ////ApplicationLog.WriteLog(err, "Function08:Barcode"); } } } } }