using System; using System.Configuration; using System.Data; using bizFacade; //using SystemFramework; using MesServerWork; namespace MesServerFunctions { partial class Functions_BASE_26 { /// /// 申请上线 /// /// /// private void PartLoad(object e) { try { //object locker = new object(); //lock (locker) { DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e; string OpName = Convert.ToString(msgEvent.OpName); int tagValue = Convert.ToInt32(msgEvent.TagValue); PartLoad(OpName, tagValue.ToString()); } } catch (Exception err) { ////ApplicationLog.WriteLog(err, "Function03:PartLoad"); } } /// /// MES将盆子码(DB24-63)[74]、小车号(DBB20)[112]、机型代码(DBB22)[73]、机型(DBB64-103)[75]信息写到交互DB块中 /// (DBX0.1=1)[5] MES传递机型 /// public void PartLoad(string OpName, string tagValue) { //获得 盆子码(发动机号)、小车号、机型代码、机型 取最小的一个 try { int desType = 1; int engineTypeID; string engineID; string engineType; byte kuweiNum; string kuweiNumStr; //小车是否需要报警 Boolean carIsWarning = false; if (tagValue == "1") { //订单完成 1 没完成 0 //DtWebApi.ReadWritePLC.WritePLC("52", OpName, true); //DtWebApi.ReadWritePLC.WritePLC("52", OpName, false); // // BaseDataSystemMES.MesServer_Process_EngineTypeOver(OpName); DataTable dt; BaseDataSystemMES.GetUpLoadBarCodeEngineID(OpName, out dt); if (dt.Rows.Count == 0) { // 库里无件时去判断需不需要给清料信号 // 1.根据工位号获取上个订单盆子过站数量 判断是否全部订单都绑定了盆子 绑定了就给清料 DataTable dt4; BaseDataSystemMES.GetMaxPartCount(OpName, out dt4); // 3.判断是否全部订单都绑定了盆子 绑定了就给清料 if (Convert.ToInt32(dt4.Rows[0]["未绑定数"]) == 0) { // 4.返回清料信号 DtWebApi.ReadWritePLC.WritePLC("52", OpName, true); //5.删除工位小车所有信息,上料位置,抓取位置等 //BaseDataSystemMES.ClearOpCarData(OpName); } // 告诉PLC MES 程序处理完成了 DtWebApi.ReadWritePLC.WritePLC("26", OpName, true); return; } // 有件时去把清料信号给去掉 DtWebApi.ReadWritePLC.WritePLC("52", OpName, false); engineTypeID = Convert.ToInt32(dt.Rows[0]["机型代码"]); desType = Convert.ToInt32(dt.Rows[0]["加工方式"]); engineID = dt.Rows[0]["发动机号"].ToString(); engineType = dt.Rows[0]["发动机型号"].ToString(); kuweiNum = Convert.ToByte(dt.Rows[0]["库位号"]); kuweiNumStr = dt.Rows[0]["库位号"].ToString(); string OrderForm = dt.Rows[0]["订单号"].ToString(); MIS_BASE.Read_PalletCode(OpName, out int PartPallet_Code); //BaseDataSystemMES.OpName_MIS_MOBY_Insert(OpName, OrderForm, engineTypeID, engineType, engineID, PartPallet_Code, 0, 0, ""); //判断对应小车的低车位是否有料 String[] carSensorStr = { "76", "61", "62", "63", "64", "65" }; String carCheckStr = carSensorStr[Convert.ToInt32(kuweiNumStr) -1]; Boolean checkGo = Convert.ToBoolean(DtWebApi.ReadWritePLC.ReadPLC(carCheckStr, OpName)); //如果当前车位无工件信号就报警 carIsWarning = !checkGo; // 在高车位时判断低车位是否有件 if (Convert.ToInt32(kuweiNumStr) % 2 == 0 && !carIsWarning) { String checkLowCar = carSensorStr[Convert.ToInt32(kuweiNumStr) - 2]; carIsWarning = Convert.ToBoolean(DtWebApi.ReadWritePLC.ReadPLC(checkLowCar, OpName)); } //判断三个小车位是否存在信号 String[] carSensorStr2 = { "33", "34", "35" }; String carCheckStr2 = carSensorStr2[((Convert.ToInt32(kuweiNumStr) + 1) / 2) - 1]; //如果车位无信号就报警 if (!Convert.ToBoolean(DtWebApi.ReadWritePLC.ReadPLC(carCheckStr2, OpName))) { carIsWarning = true; } //判断是否需要给报警信号 if (carIsWarning) { DtWebApi.ReadWritePLC.WritePLC("25", OpName, true); return; } DtWebApi.ReadWritePLC.WritePLC("25", OpName, false); ////将产品信息写入PLC MIS_BASE.Write_EngineTypeID_MES(OpName, engineTypeID); MIS_BASE.Write_EngineType_MES(OpName, engineType); MIS_BASE.Write_EngineID_MES(OpName, engineID); MIS_BASE.Write_TagTypeID(116, OpName, OrderForm); // 库位号 DtWebApi.ReadWritePLC.WritePLC("112", OpName, kuweiNum); // DES1 DES2 DtWebApi.ReadWritePLC.WritePLC("88", OpName, desType); //获取订单号,发动机型号,发动机型号代码(在线首工位将选择的订单,机型等信息保存到监控表中) // bizFacade.BaseDataSystemMES.OpName_MIS_CreateMoby_Select(OpName, out string orderForm, out engineTypeID, out engineType, out engineID, out string palletCode, out int isRepair, out string repairCode); // 判断空死盆子 发送到地址变量 70 DataTable dt2 = BaseDataSystemMES.WorkPlatePartSelect(OpName, engineType); if (dt2.Rows.Count > 0) { if (dt2.Rows[0]["零件名称"].ToString() == "通盆子") { MIS_BASE.WritePLC(70, OpName, 1); } else { MIS_BASE.WritePLC(70, OpName, 0); } } // 写入MES传递机型 MIS_BASE.Write_EngineTypeGetOver_MES(OpName, true); // 写占用盆子 更新数据库是否占用 = 1 //BaseDataSystemMES.UpdateKuWeiStatus(OpName, kuweiNumStr); // 告诉PLC MES 程序处理完成了 DtWebApi.ReadWritePLC.WritePLC("26", OpName, true); } } catch (Exception err) { ////ApplicationLog.WriteLog(err, "Function03:PartLoad"); } } } }