using System; using System.Data; using System.Linq; using MesDataFunction; using MesServerWork; using MisDataFunDll; using MisDataSaveDate; namespace MesServerFunctions { partial class FunctionMES { /// /// 保存完成(针对半自动和手动压装工位) /// /// /// private void MesRead(object e) { try { var msgEvent = (DeviceDriver_BasicData.CustomeEvetnArgs)e; string OpName = Convert.ToString(msgEvent.OpName); int tagValue = Convert.ToInt32(msgEvent.TagValue); int EngineTypeID; string EngineType; string EngineID; int PartPallet_Code; string OrderForm; if (tagValue == 1) { MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", "PLC允许保存数据!"); MIS_BASE.Read_QualityMask(OpName, out int qualityMask); #region 工位特殊操作部分 //// 判断是否需要手动选择OK/NG 不需要了 按照PLC给的合格标志做 //if (MisDataFun.GetSpecialOpExist(OpName, "手动OKNG放行")) //{ // MIS_BASE.Read_ConfirmOkGo(OpName, out bool okGo); // MIS_BASE.Read_FalseGo(OpName, out bool falseGo); // if (!okGo && !falseGo) // { // string errMsg = $"【{OpName}】请在界面选择 OK/NG 放行"; // MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", errMsg); // SendMessageFun.AsyncSendMessage_Notice(OpName, errMsg); // return; // } // if (okGo) qualityMask = 1; // if (falseGo) qualityMask = 2; //} #endregion MIS_BASE.GetEngineTypeFromPLC(OpName, out EngineTypeID, out EngineType, out EngineID, out PartPallet_Code, out OrderForm); string code; string message; if (MisDataFun.GetSpecialOpExist(OpName, "自动入箱工位")) { // 把模组码和箱体码绑定到执行计划列表中 DBB640-679 string TrunEngineID = MIS_BASE.Read_TagValueByTagTypeID(203, OpName); // 调用接口进行物料装配验证 CallWebService.Call_miAssmebleAndCollectDataForSfc(OpName, EngineID, TrunEngineID,"", out code, out message); if (code != "0") { MisDataFun.LogRecording_OP(OpName, "ERROR", "MIS", "PACK装配模组失败!message: " + message); return; } // 把PLC给得 模组码存入Pack中 同时给 模组记录Pack信息 MisDataFun.WorkPlan_TurnLine(EngineID, TrunEngineID, 1); } // PDC产线plc只写了发动机号和机型代码,其余要从数据库中读取 MisDataFun.Moby_Select_PDC(EngineID, out OrderForm, out EngineType, out EngineTypeID); // 保存质量数据 MisDataSaveDateMesRead.Funtion.MesRead(OpName, tagValue.ToString(), msgEvent.TagID.ToString()); //MisDataFun.MOM_SaveQDataToUpload(OpName, EngineID); // 数据存至临时表 MisDataFun.WorkStartInsert(OpName, qualityMask); // 保存不合格过站信息 // 判断是否存在首件标志 if (MIS_BASE.Read_TagValueByTagTypeID(62, OpName) == "1") MisDataFun.Save_FristWorkData(OpName, EngineID); // 第一个产品 存首件数据 // 保存物料数据 MisDataFun.Material_Insert(OpName, qualityMask); // 从数据库查出质量数据组 MOM_质量数据_上传_查询 MisDataFun.GetPartQualityGroupParams(OpName, EngineID, out DataTable dt_quality); // 调用工厂MES出站接口 if (dt_quality.Rows.Count > 0) { CallWebService.Call_dataCollectForSfcEx(OpName, EngineID, dt_quality, qualityMask, out code, out message); } else { CallWebService.Call_sfcComplete(OpName, EngineID, qualityMask, out code, out message); } if (code == "0") { MIS_BASE.Write_OpNameIsOk(OpName, qualityMask); // 写入加工合格还是不合格 根据工位合格标志写 } else if (code == "13921") // 质量判定不合格 走不合格放行 { qualityMask = 2; MIS_BASE.Write_OpNameIsOk(OpName, qualityMask); MisDataFun.WorkStartInsert(OpName, qualityMask); // 保存不合格过站信息 } else { string msg = "出站失败:" + EngineID + ",code:" + code + ",message:" + message; MisDataFun.LogRecording_OP(OpName, "ERROR", "MOM", msg); return; } // 保存过站信息 MisDataFun.WorkStartInsert(OpName, qualityMask); // 如果不合格 同时 是人工PC工位 则 需要屏幕上点放行后才能放行 if (qualityMask != 1 && MisDataFun.GetSpecialOpExist(OpName, "人工PC工位")) { SendInfomation("showOpWorkFalseGoBox", "1", OpName); // 显示不合格刷卡放行弹窗 MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", $"{EngineID} 产品不合格 待人工确认后不合格放行!"); return; } //通知PLC,MES工作完成 MIS_BASE.Write_MesWorkFinish(OpName, true); //通知PLC,MES保存完成 MIS_BASE.Write_MesReadOver(OpName, true); MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", "MES保存数据完成!"); MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", "MES工作完成!"); } else { MIS_BASE.Write_MesReadOver(OpName, false); MIS_BASE.Write_MesWorkFinish(OpName, false); // 写入加工合格还是不合格 根据工位合格标志写 MIS_BASE.Write_OpNameIsOk(OpName, -99); MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", "PLC允许保存数据取消!"); } } catch (Exception err) { ////ApplicationLog.WriteLog(err, "Function08:MesReadOver"); } } } }