| | |
| | | CMMLog.Debug($"改AGV参数:10,4"); |
| | | //判断任务起点,找到起点包装机设备号,在中间表MachineInfo中查找上一台设备(包装机)的数据,通过modbus通道传入(数据需要转换,ASCII转16short,可能还需要数据拆分) |
| | | var taskInfo = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", taskNo), "TN_I_TASK_MST"); |
| | | if (plc.deviceType == "21") |
| | | if (plc.deviceType == "22") |
| | | { |
| | | //四钴车间 |
| | | var machine = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("trayCode", taskInfo.CN_S_BATCH_NO), "MachineInfo"); |
| | | var machine = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("trayCode", taskInfo.CN_S_BATCH_NO), "MachineInfoTetracobalt"); |
| | | if (machine != null) |
| | | { |
| | | CMMLog.Debug("进入machine判断"); |
| | |
| | | }); |
| | | if (result.result.Length > 0) |
| | | { |
| | | MongoDBSingleton.Instance.Update<MachineInfo>(Query.EQ("trayCode", model.ext2), Update.Set("secondNg", result.result[2]), UpdateFlags.None); |
| | | if(plc.deviceType == "22") |
| | | { |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(Query.EQ("trayCode", model.ext2), Update.Set("secondNg", result.result[2]), UpdateFlags.None); |
| | | } |
| | | else |
| | | { |
| | | MongoDBSingleton.Instance.Update<MachineInfo>(Query.EQ("trayCode", model.ext2), Update.Set("secondNg", result.result[2]), UpdateFlags.None); |
| | | } |
| | | |
| | | //获取从复称平台读出的 时间戳,并转换处理为 string 字符串 |
| | | //string timeStamp = Convert.ToInt32(Completion(result.result[26]) + Completion(result.result[27]), 2).ToString(); |
| | | string timeStamp = Convert.ToInt32(Completion(result.result[25]) + Completion(result.result[26]), 2).ToString(); |
| | |
| | | if (result.result[0] == 3 && result.result[2] == 1) |
| | | { |
| | | CMMLog.Info($"SecondWeightActionOne:准备生成复称入缓存架任务,开始确定托盘号:{model.ext2}"); |
| | | req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp); |
| | | if(plc.deviceType == "22") |
| | | { |
| | | req = WMSHelper.WMSInTwo(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp); |
| | | } |
| | | else |
| | | { |
| | | req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp); |
| | | } |
| | | |
| | | ERPService.updatePackageInfo(model.machince, model.ext2, result.result); |
| | | //if (req) TSHelper.GoToAGV(cN_S_TASK_NO, 10, 6); |
| | | //else CMMLog.Debug($"WMS返回{req}"); |
| | |
| | | { |
| | | //复称平台复称货物NG——进入NG复称流程 调用WMS接口分配货架库位 |
| | | //TSHelper.GoToAGV(cN_S_TASK_NO, 10, 6); |
| | | req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp); |
| | | if(plc.deviceType == "22") |
| | | { |
| | | req = WMSHelper.WMSInTwo(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp); |
| | | } |
| | | else |
| | | { |
| | | req = WMSHelper.WMSIn(plc.location, model.ext2, ref wmstaskno, ref traycode, timeStamp); |
| | | } |
| | | |
| | | if (req) CMMLog.Info($"SecondWeightActionOne:复称入缓存架NG流程:WMS生成任务成功!"); |
| | | else CMMLog.Info($"SecondWeightActionOne:复称入缓存架NG流程:WMS生成任务失败!"); |
| | | var plcInfo = Settings.GetPlcInfo().Where(a => a.location == model.ext3).FirstOrDefault(); |
| | |
| | | CMMLog.Debug($"三楼双层缓存架卸货交互:trayCode:{trayCodeTask.CN_S_BATCH_NO}"); |
| | | if (plc.deviceType =="22") |
| | | { |
| | | MongoDBSingleton.Instance.Remove<MachineInfoTetracobalt>(Query.EQ("trayCode", trayCodeTask.CN_S_BATCH_NO), "MachineInfo", RemoveFlags.Single); |
| | | MongoDBSingleton.Instance.Remove<MachineInfoTetracobalt>(Query.EQ("trayCode", trayCodeTask.CN_S_BATCH_NO), "MachineInfoTetracobalt", RemoveFlags.Single); |
| | | if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTetracobalt>(Query.EQ("trayCode", trayCodeTask.CN_S_BATCH_NO), "MachineInfoTetracobalt", RemoveFlags.Single); |
| | | } |
| | | else |
| | |
| | | |
| | | public static void WriteCacheStackingData(Settings.PlcInfo plc, TN_I_TASK_MST task, WMSInfo machine) |
| | | { |
| | | if (plc.deviceType == "23") |
| | | if (plc.deviceType == "22") |
| | | { |
| | | //四钴车间 |
| | | var machineTwo = MongoDBSingleton.Instance.FindOne<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", task.CN_S_BATCH_NO), "MachineInfoTwo"); |
| | | var machineTwo = MongoDBSingleton.Instance.FindOne<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", task.CN_S_BATCH_NO), "MachineInfoTwoTetracobalt"); |
| | | CMMLog.Info($"3楼缓存架入叠托:收到信号4,查询MachineInfoTwoTetracobalt表信息:{JsonConvert.SerializeObject(machineTwo)}。"); |
| | | if (machineTwo != null) |
| | | { |
| | |
| | | CMMLog.Info($"3楼缓存架入叠托:返回数据:{JsonConvert.SerializeObject(wirteall01)},IPort:{plc.ip},{plc.port}"); |
| | | if (wirteall01.errCode == 0) |
| | | { |
| | | MongoDBSingleton.Instance.Remove<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", task.CN_S_BATCH_NO), "MachineInfoTwo", RemoveFlags.Single); |
| | | MongoDBSingleton.Instance.Remove<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", task.CN_S_BATCH_NO), "MachineInfoTwoTetracobalt", RemoveFlags.Single); |
| | | } |
| | | } |
| | | } |
| | |
| | | string trayType = ""; |
| | | if(plc.deviceType == "25") trayType = result.result[1] == 1 ? "川字托" : "田字托"; |
| | | bool req = WMSHelper.WMSIn(plc.location, "", ref wmstaskno, ref traycode,"","",false, trayType); |
| | | if (req) CMMLog.Debug($"调用WMS获取三楼叠盘机生成任务成功!"); |
| | | if (req) |
| | | { |
| | | CMMLog.Debug($"调用WMS获取三楼叠盘机生成任务成功!"); |
| | | if (plc.deviceType == "25") |
| | | { |
| | | //记录托盘类型 |
| | | var trayTypeInfo = MongoDBSingleton.Instance.FindOne<trayTypeTable>(Query.EQ("locCode", plc.location), "trayTypeTable"); |
| | | if (trayTypeInfo == null) |
| | | { |
| | | MongoDBSingleton.Instance.Insert<trayTypeTable>(new trayTypeTable |
| | | { |
| | | locCode = plc.location, |
| | | trayType = result.result[1].ToString() |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | else CMMLog.Debug($"调用WMS获取三楼叠盘机生成任务失败!"); |
| | | } |
| | | } |
| | |
| | | { |
| | | CMMLog.Info($"数据处理流程:进入数据处理流程!"); |
| | | |
| | | string empCode = GetTrayCode(result.Take(5).ToArray());//员工编码 |
| | | string empCode = RemoveNull(GetTrayCode(result.Take(5).ToArray()));//员工编码 |
| | | string trayCode = GetTrayCode(result.Skip(5).Take(3).ToArray());//托盘码 |
| | | trayCode = "0"; |
| | | string location = GetTrayCode(result.Skip(8).Take(1).ToArray());//设备货位编码 |
| | | if(trayCode != null && location != null) |
| | | { |
| | |
| | | } |
| | | else CMMLog.Info($"数据处理流程:包装机无MES情况下,模拟MES数据,中间表<MachineInfoTetracobalt>中已有当前包装机号{location}为首的数据"); |
| | | } |
| | | var info = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("machineNo", location), "MachineInfo"); |
| | | var info = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("machineNo", location), "MachineInfoTetracobalt"); |
| | | |
| | | if (info != null) |
| | | { |
| | |
| | | } |
| | | else CMMLog.Info($"数据处理流程:请查询<MachineInfoTetracobalt>表中machineNo字段是否为当前包装机号,并且trayCode是否为0"); |
| | | |
| | | var infoPack = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.And(Query.EQ("machineNo", location), Query.EQ("trayCode", "0")), "MachineInfo"); |
| | | var infoPack = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.And(Query.EQ("machineNo", location), Query.EQ("trayCode", "0")), "MachineInfoTetracobalt"); |
| | | |
| | | if (infoPack != null) |
| | | { |
| | |
| | | //注意:这里赋值中间表参数请对照信息交互表具体通道值对应 |
| | | UpdateBuilder update = Update.Set("palletLayers", info.secondNg.ToString()).Set("overlappingLayers", info.addState.ToString()).Set("bagNo", info.packageCode). |
| | | Set("lotNo", info.lotNo).Set("productType", info.productType).Set("materialCode", info.materialCode).Set("materialName", info.materialName).Set("measurementUnit", info.measurementUnit); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(Query.EQ("machineNo", location), update, "MachineInfo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", trayCode), update, "MachineInfoTwo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(Query.EQ("machineNo", location), update, "MachiMachineInfoTetracobaltneInfo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", trayCode), update, "MachineInfoTwoTetracobalt", UpdateFlags.None); |
| | | } |
| | | //在中间表中找到刚刚插入的MES数据(目前还没有读取并写入设备数据) |
| | | var query1 = Query.And(Query.EQ("machineNo", location), Query.EQ("trayCode", "0")); |
| | | UpdateBuilder updateBuider = Update.Set("empCode", info.empCode).Set("location", info.location). |
| | | Set("trayCode", info.trayCode).Set("productWeight", info.productWeight). |
| | | Set("trayCodeWeight", info.trayCodeWeight).Set("oneTrayWeight", info.oneTrayWeight). |
| | | Set("trayCodeWeight", info.trayCodeWeight).Set("oneTrayWeight", info.oneTrayWeight).Set("trayType", info.trayType).Set("addState", info.addState). |
| | | Set("addWeight", info.addWeight).Set("packNg", info.packNg).Set("secondNg", info.secondNg).Set("productTime", info.productTime). |
| | | Set("jsonData", json).Set("modify", DateTime.Now); |
| | | MongoDBSingleton.Instance.Update<MachineInfo>(query1, updateBuider, "MachineInfo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", trayCode), updateBuider, "MachineInfoTwo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(query1, updateBuider, "MachineInfoTetracobalt", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", trayCode), updateBuider, "MachineInfoTwoTetracobalt", UpdateFlags.None); |
| | | CMMLog.Info($"数据处理流程:更新MachineInfoTetracobalt中间表刚刚插入的MES数据!设备号为:{location},托盘号为:{trayCode}"); |
| | | } |
| | | else |
| | |
| | | Set("trayCodeWeight", info.trayCodeWeight).Set("oneTrayWeight", info.oneTrayWeight). |
| | | Set("addWeight", info.addWeight).Set("packNg", info.packNg).Set("secondNg", info.secondNg).Set("productTime", info.productTime). |
| | | Set("jsonData", json).Set("modify", DateTime.Now); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(query2, updateBuider, "MachineInfo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", trayCode), updateBuider, "MachineInfoTwo", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(query2, updateBuider, "MachineInfoTetracobalt", UpdateFlags.None); |
| | | MongoDBSingleton.Instance.Update<MachineInfoTwoTetracobalt>(Query.EQ("trayCode", trayCode), updateBuider, "MachineInfoTwoTetracobalt", UpdateFlags.None); |
| | | CMMLog.Info($"数据处理流程:更新MachineInfoTetracobalt中间表其他设备的数据!设备号为:{location},托盘号为:{trayCode}"); |
| | | } |
| | | else CMMLog.Info($"数据处理流程:无法在MachineInfoTetracobalt中间表中找到当前设备编号的数据!当前设备编号为:{location},托盘码为:{trayCode}"); |
| | |
| | | internal static void CheckPackingMachineTetracobalt(Settings.PlcInfo pmInfo) |
| | | { |
| | | //var count = MongoDBSingleton.Instance.FindOne<>//occupy |
| | | var count = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("occupy", "1"), "MachineInfo"); |
| | | var count = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("occupy", "1"), "MachineInfoTetracobalt"); |
| | | |
| | | //检查包装机通道0是否有下料信号,如果有生成下料任务。线程循环读取,无需设置循环。——通道0参数为1 |
| | | if (count == null) |
| | |
| | | { |
| | | //获取托盘码等信息 读取通道 11、12、13的数据作为托盘码 读取其它通道 重量 叠包等信息 所有数据存入MachineInfo表 |
| | | GetMachineDataTetracobalt(trayCode.result, false); |
| | | var tray = MongoDBSingleton.Instance.FindOne<MachineInfo>(Query.EQ("machineNo", pmInfo.location), "MachineInfo"); |
| | | var tray = MongoDBSingleton.Instance.FindOne<MachineInfoTetracobalt>(Query.EQ("machineNo", pmInfo.location), "MachineInfoTetracobalt"); |
| | | if (tray != null) |
| | | { |
| | | CMMLog.Debug($"(四钴车间)包装下线流程-{pmInfo.location}:MachineInfoTetracobalt数据插入成功!"); |
| | | bool IsContLaterCode = true; |
| | | if (ERPService.ERPSwitch01 == "1") |
| | | { |
| | | string employeeId = "G" + tray.trayCodeWeight.PadLeft(7, '0'); |
| | | string employeeId = "G" + tray.empCode.PadLeft(7, '0'); |
| | | CMMLog.Debug($"(四钴车间)包装下线流程-{pmInfo.location}:员工编码:{employeeId}"); |
| | | // 判断当前【员工编号】通道信息读出来的员工编号是否已经存在于我们的员工信息表-ERPEmployeeTable(查询字段-employee_id) |
| | | var erpEmployeeInfo = MongoDBSingleton.Instance.FindOne<ERPEmployeeTable>(Query.EQ("employee_id", employeeId), "ERPEmployeeTable"); |
| | | if (erpEmployeeInfo == null) IsContLaterCode = false; |
| | | else CMMLog.Debug($"(四钴车间)包装下线流程-{pmInfo.location}:员工编码查询成功"); |
| | | } |
| | | |
| | | if (IsContLaterCode) |
| | | { |
| | | string timeStamp = ProcessHelper.GetTimeStamp(31, 1, 1); |
| | | tray.trayCode = "VW" + timeStamp; |
| | | MongoDBSingleton.Instance.Update<MachineInfoTetracobalt>(Query.EQ("_id", tray._id), Update.Set("trayCode", tray.trayCode), UpdateFlags.None); |
| | | CMMLog.Debug($"(四钴车间)包装下线流程-{pmInfo.location}:托盘码:{tray.trayCode}"); |
| | | if (tray.addState == 0) |
| | | { |
| | | MongoDBSingleton.Instance.Remove<MachineInfoTetracobalt>(Query.EQ("machineNo", pmInfo.location), "MachineInfo", RemoveFlags.None); |
| | | MongoDBSingleton.Instance.Remove<MachineInfoTetracobalt>(Query.EQ("machineNo", pmInfo.location), "MachineInfoTetracobalt", RemoveFlags.None); |
| | | if (ERPService.ERPSwitch01 == "0") MongoDBSingleton.Instance.Remove<MachineInfoTetracobalt>(Query.EQ("machineNo", pmInfo.location), "MachineInfoTwo", RemoveFlags.None); |
| | | CMMLog.Debug($"(四钴车间)包装下线流程-{pmInfo.location}:叠托层数为0,不允许生成任务"); |
| | | } |
| | | else if (tray.trayCode != "0" && !string.IsNullOrEmpty(tray.trayCode)) |
| | | { |
| | | string timeStamp = ProcessHelper.GetTimeStamp(31, 1, 1); |
| | | HHAmsExecuteResult req = AMSHelper.CreateTask(DateTime.Now.Ticks.ToString(), pmInfo.location, PlcBit02, "3楼包装取料(四钴)", 0, tray.trayCode, timeStamp); |
| | | if (req.success) |
| | | { |
| | | string weight = (double.Parse(tray.oneTrayWeight) / 100).ToString(); |
| | | //int weight = int.Parse(tray.oneTrayWeight) / 100; |
| | | ERPService.packageInfo(tray.machineNo, tray.trayCode, tray.lotNo, weight); |
| | | |
| | | //记录托盘类型 |
| | | var trayTypeInfo = MongoDBSingleton.Instance.FindOne<trayTypeTable>(Query.EQ("locCode", pmInfo.location), "trayTypeTable"); |
| | | if(trayTypeInfo == null) |
| | | { |
| | | MongoDBSingleton.Instance.Insert<trayTypeTable>(new trayTypeTable |
| | | { |
| | | locCode = pmInfo.location, |
| | | trayType = tray.trayType |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Debug($"(四钴车间)包装下线流程-{pmInfo.location}:员工编码查询失败"); |
| | | //检索员工信息失败写入对方通道值1 读取地址+3 |
| | | var wirteall01 = OITcpHelper.RegisterWriteOutPut(new OITcpHelper.RegisterWriteOutPutModel |
| | | { |
| | |
| | | // } |
| | | // else CMMLog.Info($"当前包装机出现故障,无法生成任务。包装机号:{pmInfo.location}"); |
| | | } |
| | | else CMMLog.Debug($"当前machineInfo中间表已存在数据:{JsonConvert.SerializeObject(count)}"); |
| | | else CMMLog.Debug($"当前MachineInfoTetracobalt中间表已存在数据:{JsonConvert.SerializeObject(count)}"); |
| | | } |
| | | |
| | | |