protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { bool needNotify = false; string lineCode = stateItem.ItemName.Split("_"[0])[0]; string channelGroup = stateItem.ItemName.Split("_"[0])[1]; string channelType = stateItem.ItemName.Split("_"[0])[2]; object obj = ObjectUtil.GetObject(stateItem.State); int sortNo = obj != null?Convert.ToInt32(obj) : 0; if (sortNo == 0) { return; } sortNo = sortNo + Convert.ToInt32(Context.Attributes["SupplyAheadCount-" + lineCode + "-" + channelGroup + "-" + channelType]); needNotify = AddNextSupply(lineCode, channelGroup, channelType, sortNo); if (needNotify) { WriteToProcess("LedStateProcess", "Refresh", null); WriteToProcess("ScannerStateProcess", "Refresh", null); dispatcher.WriteToProcess("DataRequestProcess", "SupplyRequest", 1); } } catch (Exception e) { Logger.Error("补货批次生成处理失败,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* ´¦ÀíÊÂÏ * Init£º³õʼ»¯ * Refresh£ºË¢ÐÂLEDÆÁ¡£ * ¡®01¡¯£ºÒ»ºÅÆÁ ÏÔʾÇëÇóÈë¿âÍÐÅÌÐÅÏ¢ * ¡®02¡¯£º¶þºÅÆÁ ÏÔʾÇëÇó²¹»õµÄ»ìºÏÑ̵À²¹»õ˳ÐòÐÅÏ¢ */ string cigaretteName = ""; switch (stateItem.ItemName) { case "Refresh": this.Refresh(); break; case "StockInRequestShow": cigaretteName = Convert.ToString(stateItem.State); this.StockInRequestShow(cigaretteName); break; default: if (stateItem.ItemName != string.Empty && stateItem.State is LedItem[]) { Show(stateItem.ItemName, (LedItem[])stateItem.State); } break; } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { string lineCode = stateItem.ItemName.Split("_"[0])[0]; string channelGroup = stateItem.ItemName.Split("_"[0])[1]; object obj = ObjectUtil.GetObject(stateItem.State); int sortNo = obj != null?Convert.ToInt32(obj) : 0; using (PersistentManager pm = new PersistentManager()) { SupplyDao supplyDao = new SupplyDao(); int sortNo1 = supplyDao.FindSortNoForSupply(lineCode, sortNo.ToString(), channelGroup, Convert.ToInt32(Context.Attributes["SupplyAheadCount-" + lineCode + "-" + channelGroup])); sortNo = sortNo > sortNo1 ? sortNo : sortNo1; } Dictionary <string, string> parameter = new Dictionary <string, string>(); parameter.Add("OrderDate", ""); parameter.Add("BatchNo", ""); parameter.Add("LineCode", lineCode); parameter.Add("ChannelGroup", channelGroup); parameter.Add("SortNo", sortNo.ToString()); WriteToProcess("SupplyRequestProcess", "SupplyRequest", parameter); } catch (Exception e) { Logger.Error(e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { switch (stateItem.ItemName) { case "ACK": object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } string ack = obj.ToString(); Logger.Debug(stateItem.Name + " Receive ACK:" + ack); if (ack.Equals("True") || ack.Equals("1")) { WriteToService(stateItem.Name, "STB", 0); Logger.Debug(stateItem.Name + " Receive ACK 1"); } break; default: break; } } catch (Exception ex) { Logger.Error("CraneACKProcess StateChanged方法出错,原因:" + ex.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * stateItem.ItemName : * Init - 初始化。 * FirstBatch - 生成第一批入库请求任务。 * StockInRequest - 根据请求,生成入库任务。 * * stateItem.State :参数 - 请求的卷烟编码。 */ string cigaretteCode = ""; try { switch (stateItem.ItemName) { case "Init": break; case "FirstBatch": //AddFirstBatch(); break; case "StockInRequest": cigaretteCode = Convert.ToString(stateItem.State); //StockInRequest(cigaretteCode); break; default: break; } } catch (Exception e) { Logger.Error("入库任务请求批次生成处理失败,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二层小车进入缓存站台 */ object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string WriteItem = ""; try { switch (stateItem.ItemName) { case "02_1_475": WriteItem = "02_2_475"; break; case "02_1_440": WriteItem = "02_2_440"; break; case "02_1_412": WriteItem = "02_2_412"; break; } string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strValue[0])) { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=5", strValue[0]), "2"); //更新 ChannelDal cDal = new ChannelDal(); cDal.UpdateOutChannelTime(strValue[0]); WriteToService("StockPLC_02", WriteItem, 1); } //读取码盘机是否处于,申请位; string SeparateItem = ""; object objSeparate = ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_372_1")); if (objSeparate.ToString() != "0") SeparateItem = "02_1_372_1"; else { objSeparate = ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_392_1")); if (objSeparate.ToString() != "0") SeparateItem = "02_1_392_1"; } if (SeparateItem != "") { WriteToProcess("StockOutSeparateProcess", SeparateItem, 1); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutCacheProcess,原因:" + e.Message); } }
public LedStateManage(string stateItemCode, IProcessDispatcher dispatcher) { this.stateItemCode = stateItemCode; this.dispatcher = dispatcher; GetParameters(); ShowData(); }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { Dictionary<string, string> msg = (Dictionary<string, string>)stateItem.State; object o = WriteToService("StockPLC", "PLCFree"); switch (stateItem.ItemName) { case "ARQ": //入库申请 if (o.ToString() == "1") { //入库写入 BLL.BLLBase bll = new BLL.BLLBase(); DataTable dtTask = bll.FillDataTable("WCS.SelectTask", new DataParameter[] { new DataParameter("@TaskNo", msg["TaskNo"]) }); int TaskType = int.Parse(dtTask.Rows[0]["TaskType"].ToString()); string TaskNo = msg["TaskNo"]; string CellCode = dtTask.Rows[0]["CellCode"].ToString(); //写入任务号 WriteToService("StockPLC", "TaskNo1", int.Parse(TaskNo.Substring(0, 4))); WriteToService("StockPLC", "TaskNo2", int.Parse(TaskNo.Substring(4, 4))); WriteToService("StockPLC", "TaskNo3", int.Parse(TaskNo.Substring(8))); //写入起始位,结束位 if (TaskType == 3) { WriteToService("StockPLC", "FromStation1", 0); WriteToService("StockPLC", "FromStation2", 0); WriteToService("StockPLC", "FromStation3", 0); } else { WriteToService("StockPLC", "FromStation1", int.Parse(CellCode.Substring(0, 3))); WriteToService("StockPLC", "FromStation2", int.Parse(CellCode.Substring(0, 3))); WriteToService("StockPLC", "FromStation3", 68); } WriteToService("StockPLC", "ToStation1", int.Parse(CellCode.Substring(0, 3))); WriteToService("StockPLC", "ToStation2", int.Parse(CellCode.Substring(3, 3))); WriteToService("StockPLC", "ToStation3", int.Parse(CellCode.Substring(6))); //写入标识 WriteToService("StockPLC", "WriteFinished", 1); WriteToService("PDATcp", "msg", "1"); } else { WriteToService("PDATcp", "msg", "0"); } break; } } catch (Exception ex) { } }
public void Release() { processDispatcher = null; serviceDispatcher = null; deviceManager = null; processes = null; services = null; }
public Context() { Dispatcher dispatcher = new Dispatcher(this); processDispatcher = dispatcher; serviceDispatcher = dispatcher; deviceManager = new DeviceManager(); }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } BLL.BLLBase bll = new BLL.BLLBase(); string Request = obj.ToString(); if (Request.Equals("True") || Request.Equals("1")) { try { string taskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(stateItem.Name, "Barcode"))); if (taskNo.Trim().Length > 0) { string Barcode = taskNo.PadRight(20, ' ').Substring(10, 10).Trim(); DataTable dt = bll.FillDataTable("WCS.SelectReadTaskByPallet", new DataParameter[] { new DataParameter("@PalletCode", Barcode) }); if (dt.Rows.Count > 0) { string TaskType = dt.Rows[0]["TaskType"].ToString(); string TaskNo = dt.Rows[0]["TaskNo"].ToString(); if (TaskType == "12" || TaskType == "15" || TaskType == "14") //出库,托盘出库,盘点 { DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo) }; bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param); Logger.Info("出库任务完成,任务号:" + TaskNo + " 条码号:" + Barcode); string strValue = ""; string[] str = new string[3]; if (TaskType == "12" || TaskType == "14")//显示拣货信息. { str[0] = "1"; if (TaskType == "14") { str[0] = "2"; } while ((strValue = FormDialog.ShowDialog(str, dt)) != "") { break; } } } } } } catch (Exception ex) { Logger.Error("到达出库口,错误讯息:" + ex.Message); } } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * stateItem.ItemName : * 空托盘组,从小车站台到达入库站台。 * stateItem.State :参数 - 任务号。 */ object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string TaskNo = obj.ToString().PadLeft(4, '0'); try { switch (stateItem.ItemName) { case "02_1_302": break; case "02_1_306": break; case "02_1_310": break; case "02_1_314": break; case "02_1_318": break; case "02_1_324": break; default: break; } TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strValue[1])) { DataTable dtTask = dal.TaskInfo(string.Format("TASK_ID='{0}'", strValue[0])); string CellCode = dtTask.Rows[0]["CELL_CODE"].ToString(); //更新小车站台到达入库站台任务完成。 dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO='3'", strValue[0]), "2"); SysStationDal sysdal = new SysStationDal(); DataTable dtstation = sysdal.GetSationInfo(CellCode, "21","4"); //更新调度堆垛机的起始位置及目标地址。 dal.UpdateTaskDetailCrane(dtstation.Rows[0]["STATION_NO"].ToString(), CellCode, "0", dtstation.Rows[0]["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO=4", strValue[0])); DataTable dt = dal.CraneTaskIn(string.Format("TASK.TASK_ID='{0}' and ITEM_NO='4'", strValue[0])); if (dt.Rows.Count > 0) { WriteToProcess("CraneProcess", "CraneInRequest", dt); } } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.PalletToStationProcess, 原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { string cmd = stateItem.ItemName; Dictionary <string, string> obj = (Dictionary <string, string>)stateItem.State; string IsUpErp = "1"; string ErpMsg = obj["MSG"]; if (obj["Result"].ToUpper() == "N") { IsUpErp = "0"; } string strTaskType = ""; string Where = string.Format("WCS_Task.Barcode like '%{0}%'", obj["BillNo"]); if (cmd.Trim() == "") { Logger.Error("Erp回传内容为空!"); return; } switch (cmd) { case "InStock": strTaskType = "入库"; Where = string.Format(" billid in ( select billid from wcs_task where taskid in (select taskid from WCS_TASK where barcode like '%{0}%' and tasktype='11')) ", obj["BillNo"]); break; case "OutStock": strTaskType = "出库"; Where = string.Format(" billid in ( select BillID from WCS_TASK where barcode like '%{0}%' and tasktype='12') ", obj["BillNo"]); break; case "CheckStock": Where = string.Format("BillID='{0}'", obj["BillNo"]); strTaskType = "盘点"; Where += " and TaskType=14 "; break; } BLL.BLLBase bll = new BLL.BLLBase(); bll.ExecNonQuery("WCS.UpdateBillUpErp", new DataParameter[] { new DataParameter("@IsUpERP", IsUpErp), new DataParameter("@ErpMSG", ErpMsg), new DataParameter("{0}", Where) }); string InfoMesg = strTaskType + "熔次卷号:" + obj["BillNo"] + "返回值为:" + obj["Result"] + "," + obj["MSG"]; if (IsUpErp == "0") { Logger.Error(InfoMesg); } else { Logger.Info(InfoMesg); } } catch (Exception ex) { Logger.Error("ErpProcess出错:" + ex.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } string PalletOut = obj.ToString(); if (PalletOut.Equals("True") || PalletOut.Equals("1")) { //如果工作模式是储存且不是托盘组入库,需产生一个托盘组出库任务 object workmode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("ConveyorPLC2", "GetWorkMode")); Logger.Info("触发出托盘"); //if (Program.mainForm.WorkMode == 1) if (workmode.ToString() == "1") { string CellCode = ""; Logger.Info("开始产生空托盘出库"); DataParameter[] param = new DataParameter[] { new DataParameter("@CraneNo", "01"), new DataParameter("@ProductCode", "0001"), new DataParameter("@CellCode", CellCode), new DataParameter("@Valid", 2), new DataParameter("@WorkMode", Program.mainForm.WorkMode), new DataParameter("@WorkModeId", Program.mainForm.WorkModeId) }; bll.FillDataTable("WCS.Sp_CreateOutTask", param); Logger.Info("空托盘出库已产生"); } } } catch (System.Data.SqlClient.SqlException e) { //如果是存储过程名称是PROC_NAME,而且State是数据库中设置的一个值 如:66 //则该异常就是我们需要特殊处理的一个异常 if (e.Procedure.Equals("Sp_CreateInTask") && e.State == 1) { Logger.Error("Dispatching.Process.StockOutPalletProcess:" + e.Message); } else if (e.Procedure.Equals("Sp_CreateOutTask") && e.State == 1) { Logger.Error("Dispatching.Process.StockOutPalletProcess:" + e.Message); } } catch (Exception e) { Logger.Error("Dispatching.Process.StockOutPalletProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { bool blnChange = false; string strState = ""; string strCarNo = ""; string strReadItem = ""; string strWriteItem = ""; switch (stateItem.ItemName) { case "CarOutRequest": case "CarInRequest": OrderIndex++; blnChange = false; InsertdtCar((DataTable)stateItem.State); break; case "02_1_C01_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "01"; strReadItem = "02_1_C01"; strWriteItem = "02_2_C01"; break; case "02_1_C02_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "02"; strReadItem = "02_1_C02"; strWriteItem = "02_2_C02"; break; case "02_1_C03_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "03"; strReadItem = "02_1_C03"; strWriteItem = "02_2_C03"; break; case "02_1_C04_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "04"; strWriteItem = "02_2_C04"; strReadItem = "02_1_C04"; break; } if (!blnChange) { return; } CarStateChange(strState, strCarNo, strReadItem, strWriteItem); }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二楼空托盘组入库 * 生成入库单,入库作业。 */ try { object[] obj = ObjectUtil.GetObjects(stateItem.State); if (obj[0] == null || obj[0].ToString() == "0") { return; } int PalletCount = int.Parse(obj[1].ToString()); string TaskID = ""; //判断是否还有出库任务 TaskDal dal = new TaskDal(); int TaskOutCount = dal.CarTaskInfo(); if (PalletCount >= 4 || TaskOutCount <= 4) { //获取托盘组入库下达排程任务而小车未接货的任务号,防止托盘组数量变化引起触发 TaskID = dal.GetPalletInTask(); string strWhere = ""; if (TaskID == "") { PalletBillDal Billdal = new PalletBillDal(); TaskID = Billdal.CreatePalletInBillTask(false); strWhere = string.Format("TASK_ID='{0}'", TaskID); string[] CellValue = dal.AssignCellTwo(strWhere);//货位申请 string TaskNo = dal.InsertTaskDetail(CellValue[0]); dal.UpdateTaskState(CellValue[0], "1");//更新任务开始执行 ProductStateDal StateDal = new ProductStateDal(); //更新Product_State 货位 StateDal.UpdateProductCellCode(CellValue[0], CellValue[1]); //更新货位申请起始地址及目标地址。 dal.UpdateTaskDetailStation("357", "359", "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CellValue[0])); } strWhere = string.Format("WCS_TASK.TASK_ID='{0}' AND ITEM_NO=2 AND DETAIL.STATE=0 ", TaskID); DataTable dt = dal.TaskCarDetail(strWhere); WriteToProcess("CarProcess", "CarInRequest", dt); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.PalletInRequestProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 一楼入库烟包处理 */ try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string strBadFlag = ""; //其他情况电控报警处理 switch (obj.ToString()) { case "1": strBadFlag = "左边条码无法读取"; break; case "2": strBadFlag = "右边条码无法读取"; break; case "3": strBadFlag = "两边条码无法读取"; break; case "4": strBadFlag = "两边条码不一致"; break; } string strBarCode; string[] strMessage = new string[3]; strMessage[0] = "3"; strMessage[1] = strBadFlag; while ((strBarCode = FormDialog.ShowDialog(strMessage, null)) != "") { byte[] b = Common.ConvertStringChar.stringToByte(strBarCode, 80); WriteToService("StockPLC_01", "01_2_124_1", b); //写入条码 WriteToService("StockPLC_01", "01_2_124_2", 1); //写入标识。 break; } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.NotReadBarcodeProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二楼空托盘组入库 * 生成入库单,入库作业。 */ try { object[] obj = ObjectUtil.GetObjects(stateItem.State); if (obj[0] == null || obj[0].ToString() == "0") return; int PalletCount = int.Parse(obj[1].ToString()); string TaskID = ""; //判断是否还有出库任务 TaskDal dal = new TaskDal(); int TaskOutCount = dal.CarTaskInfo(); if (PalletCount >= 4 || TaskOutCount <= 4) { //获取托盘组入库下达排程任务而小车未接货的任务号,防止托盘组数量变化引起触发 TaskID = dal.GetPalletInTask(); string strWhere = ""; if (TaskID == "") { PalletBillDal Billdal = new PalletBillDal(); TaskID = Billdal.CreatePalletInBillTask(false); strWhere = string.Format("TASK_ID='{0}'", TaskID); string[] CellValue = dal.AssignCellTwo(strWhere);//货位申请 string TaskNo = dal.InsertTaskDetail(CellValue[0]); dal.UpdateTaskState(CellValue[0], "1");//更新任务开始执行 ProductStateDal StateDal = new ProductStateDal(); //更新Product_State 货位 StateDal.UpdateProductCellCode(CellValue[0], CellValue[1]); //更新货位申请起始地址及目标地址。 dal.UpdateTaskDetailStation("357", "359", "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CellValue[0])); } strWhere = string.Format("WCS_TASK.TASK_ID='{0}' AND ITEM_NO=2 AND DETAIL.STATE=0 ", TaskID); DataTable dt = dal.TaskCarDetail(strWhere); WriteToProcess("CarProcess", "CarInRequest", dt); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.PalletInRequestProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 一楼入库烟包处理 */ try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string strBadFlag = ""; //其他情况电控报警处理 switch (obj.ToString()) { case "1": strBadFlag = "左边条码无法读取"; break; case "2": strBadFlag = "右边条码无法读取"; break; case "3": strBadFlag = "两边条码无法读取"; break; case "4": strBadFlag = "两边条码不一致"; break; } string strBarCode; string[] strMessage = new string[3]; strMessage[0] = "3"; strMessage[1] = strBadFlag; while ((strBarCode = FormDialog.ShowDialog(strMessage, null)) != "") { byte[] b = Common.ConvertStringChar.stringToByte(strBarCode, 80); WriteToService("StockPLC_01", "01_2_124_1", b); //写入条码 WriteToService("StockPLC_01", "01_2_124_2", 1);//写入标识。 break; } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.NotReadBarcodeProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { bool blnChange = false; string strState = ""; string strCarNo = ""; string strReadItem = ""; string strWriteItem = ""; switch (stateItem.ItemName) { case "CarOutRequest": case "CarInRequest": OrderIndex++; blnChange = false; InsertdtCar((DataTable)stateItem.State); break; case "02_1_C01_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "01"; strReadItem = "02_1_C01"; strWriteItem = "02_2_C01"; break; case "02_1_C02_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "02"; strReadItem = "02_1_C02"; strWriteItem = "02_2_C02"; break; case "02_1_C03_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "03"; strReadItem = "02_1_C03"; strWriteItem = "02_2_C03"; break; case "02_1_C04_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "04"; strWriteItem = "02_2_C04"; strReadItem = "02_1_C04"; break; } if (!blnChange) return; CarStateChange(strState, strCarNo, strReadItem, strWriteItem); }
/* 处理事项: * 倒库烟包 122 */ protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object sta = ObjectUtil.GetObject(stateItem.State); if (sta == null || sta.ToString() == "0") { return; } string[] str = new string[3]; str[0] = "4"; str[1] = ""; str[2] = ""; TaskDal dal = new TaskDal(); //更具任务号,获取TaskID及BILL_NO string[] strInfo = dal.GetTaskInfo(sta.ToString().PadLeft(4, '0')); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strInfo[0]); //线程停止 while (FormDialog.ShowDialog(str, dtProductInfo) != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); dal.UpdateTaskState(strInfo[0], "2"); BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1], "1"); string writeItem = "01_2_122_"; int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(strInfo[1]); //任务号 ServiceW[1] = 131; //目的地址 ServiceW[2] = 4; WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 break; } ;//线程继续。 } catch (Exception ex) { Logger.Error("THOK.XC.Process.Process_01.MoveOutToStationProcess:" + ex.Message); } }
private void Run() { while (isRun) { if (queue.Count == 0 || isSuspend) { resetEvent.WaitOne(); if (isSuspend) { state = ProcessState.Suspend; } else { state = ProcessState.Waiting; } } else { state = ProcessState.Processing; StateItem item = null; lock (queue) { item = queue.Dequeue(); } try { IProcessDispatcher dispatcher = null; if (context != null) { dispatcher = context.ProcessDispatcher; } else { dispatcher = new DefaultDispatcher(); } StateChanged(item, dispatcher); } catch (Exception e) { Logger.Error(string.Format("{0}³ö´í¡£ÔÒò£º{1}", GetType(), e.Message)); } } } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 空托盘组出库申请, * 空托盘组到达指定出库位置。 * */ try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string TARGET_CODE = ""; switch (stateItem.ItemName) { case "01_1_158_1": TARGET_CODE = "158"; break; case "01_1_200_1": TARGET_CODE = "200"; break; default: break; } PalletBillDal dal = new PalletBillDal(); string Taskid = dal.CreatePalletOutBillTask(TARGET_CODE); TaskDal task = new TaskDal(); DataTable dt = task.CraneTaskOut(string.Format("TASK_ID='{0}'", Taskid)); if (dt.Rows.Count > 0) { WriteToProcess("CraneProcess", "CraneInRequest", dt); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.PalletOutRequestProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二楼出库条码校验 * */ try { object obj = ObjectUtil.GetObjects(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); string WriteItem = ""; string ReadItem = ""; switch (stateItem.ItemName) { case "02_1_340_1": WriteItem = "02_2_340"; ReadItem = "02_1_340_"; break; case "02_1_360_1": WriteItem = "02_2_360"; ReadItem = "02_1_360_"; break; } object objCheck = ObjectUtil.GetObject(WriteToService("StockPLC_02", ReadItem + "2")); if (objCheck.ToString() == "0") { string BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_02", ReadItem + "3"))); dal.UpdateTaskCheckBarCode(strValue[0], BarCode); } WriteToService("StockPLC_02", WriteItem + "_3", 1); } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.CheckProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二楼出库条码校验 * */ try { object obj = ObjectUtil.GetObjects(stateItem.State); if (obj == null || obj.ToString() == "0") return; string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); string WriteItem = ""; string ReadItem = ""; switch (stateItem.ItemName) { case "02_1_340_1": WriteItem = "02_2_340"; ReadItem = "02_1_340_"; break; case "02_1_360_1": WriteItem = "02_2_360"; ReadItem = "02_1_360_"; break; } object objCheck = ObjectUtil.GetObject(WriteToService("StockPLC_02", ReadItem + "2")); if (objCheck.ToString() == "0") { string BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_02", ReadItem+"3"))); dal.UpdateTaskCheckBarCode(strValue[0], BarCode); } WriteToService("StockPLC_02", WriteItem + "_3", 1); } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.CheckProcess,原因:" + e.Message); } }
/* 处理事项: * 倒库烟包 122 */ protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object sta = ObjectUtil.GetObject(stateItem.State); if (sta == null || sta.ToString() == "0") return; string[] str = new string[3]; str[0] = "4"; str[1] = ""; str[2] = ""; TaskDal dal = new TaskDal(); //更具任务号,获取TaskID及BILL_NO string[] strInfo = dal.GetTaskInfo(sta.ToString().PadLeft(4, '0')); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strInfo[0]); //线程停止 while (FormDialog.ShowDialog(str, dtProductInfo) != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); dal.UpdateTaskState(strInfo[0], "2"); BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1],"1"); string writeItem = "01_2_122_"; int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(strInfo[1]); //任务号 ServiceW[1] = 131;//目的地址 ServiceW[2] = 4; WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 break; } ;//线程继续。 } catch (Exception ex) { Logger.Error("THOK.XC.Process.Process_01.MoveOutToStationProcess:" + ex.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { //object obj = ObjectUtil.GetObject(stateItem.State); //if (obj == null) // return; switch (stateItem.ItemName) { case "CraneTaskFinished": object obj = ObjectUtil.GetObject(stateItem.State); if (obj.ToString() == "50") { string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo"))); //存储过程处理 Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo); //更新任务状态 DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo) }; bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param); WriteToService(stateItem.Name, "ReplyFinished", 49); } break; case "Run": blRun = (int)stateItem.State == 1; break; default: break; } if (blRun) { tmWorkTimer.Start(); Logger.Info("堆垛机联机"); } else { tmWorkTimer.Stop(); Logger.Info("堆垛机脱机"); } return; }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } if (obj.ToString().Trim().Length <= 0) { return; } string PalletBarcode = obj.ToString(); string StationNo = ""; int state = 1; switch (stateItem.ItemName) { case "ToInStation1": StationNo = "AX-" + stateItem.Name.Substring(5, 2) + "-00"; break; case "ToInStation2": StationNo = "AX-" + stateItem.Name.Substring(5, 2) + "-01"; state = 2; break; } try { BLL.BLLBase bll = new BLL.BLLBase(); DataParameter[] param = new DataParameter[] { new DataParameter("@PalletBarcode", PalletBarcode), new DataParameter("@AisleNo", stateItem.Name.Substring(5, 2)), new DataParameter("@State", state) }; bll.ExecNonQueryTran("WCS.UpdateTaskStateByBarcode", param); Logger.Info("托盘/箱号:" + PalletBarcode + "到达入库站台:" + StationNo); } catch (Exception ex) { Logger.Error("InStockToStationProcess出错,原因:" + ex.Message); } }
/* 处理事项: * 空托盘组出库到达158,200 */ protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string writeItem = ""; switch (stateItem.ItemName) { case "01_1_158_2": writeItem = "01_1_158_3"; break; case "01_1_200_2": writeItem = "01_1_200_3"; break; } string TaskNo = ((short)obj).ToString().PadLeft(4, '0'); //根据任务号,获取TaskID及BILL_NO TaskDal dal = new TaskDal(); string[] strInfo = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strInfo[0])) { //更新路线状态 dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); dal.UpdateTaskState(strInfo[0], "2"); //更新BillMaster状态完成 BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1], "0"); //通知电控,空托盘组到达158,200 WriteToService("StockPLC_01", writeItem, 1); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.PalletOutToStationProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { //object obj = ObjectUtil.GetObject(stateItem.State); //if (obj == null) // return; switch (stateItem.ItemName) { case "CraneTaskFinished": object obj = ObjectUtil.GetObject(stateItem.State); if (obj.ToString() == "50") { string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo"))); //存储过程处理 Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo); //更新任务状态 DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo)}; bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param); WriteToService(stateItem.Name, "ReplyFinished", 49); } break; case "Run": blRun = (int)stateItem.State == 1; break; default: break; } if (blRun) { tmWorkTimer.Start(); Logger.Info("堆垛机联机"); } else { tmWorkTimer.Stop(); Logger.Info("堆垛机脱机"); } return; }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { switch (stateItem.ItemName) { case "TaskFinish": TaskFinishProcess(stateItem); break; case "Run": blRun = (int)stateItem.State == 1; if (blRun) { tmWorkTimer.Start(); for (int i = 1; i <= dtCrane.Rows.Count; i++) { if (dtCrane.Rows[i - 1]["ISENABLED"].ToString() == "0") { continue; } WriteToService(ServerName + i.ToString(), "b_O_Auto", true); } Logger.Info("堆垛机联机"); } else { tmWorkTimer.Stop(); Logger.Info("堆垛机脱机"); } break; case "nAlarmCode": ShowAlarm(stateItem); break; default: break; } return; }
/* 处理事项: * 空托盘组出库到达158,200 */ protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string writeItem = ""; switch (stateItem.ItemName) { case "01_1_158_2": writeItem = "01_1_158_3"; break; case "01_1_200_2": writeItem = "01_1_200_3"; break; } string TaskNo = ((short)obj).ToString().PadLeft(4, '0'); //根据任务号,获取TaskID及BILL_NO TaskDal dal = new TaskDal(); string[] strInfo = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strInfo[0])) { //更新路线状态 dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); dal.UpdateTaskState(strInfo[0], "2"); //更新BillMaster状态完成 BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1],"0"); //通知电控,空托盘组到达158,200 WriteToService("StockPLC_01", writeItem, 1); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.PalletOutToStationProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * stateItem.ItemName : * Init - 初始化。 * FirstBatch - 生成第一批入库请求任务。 * StockInRequest - 根据请求,生成入库任务。 * * stateItem.State :参数 - 请求的卷烟编码。 */ string cigaretteCode = ""; try { switch (stateItem.ItemName) { case "Init": break; case "FirstBatch": AddFirstBatch(); break; case "StockInRequest": cigaretteCode = Convert.ToString(stateItem.State); StockInRequest(cigaretteCode); break; default: break; } } catch (Exception e) { Logger.Error("入库任务请求批次生成处理失败,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { bool needNotify = false; switch (stateItem.ItemName) { case "FirstBatch": needNotify = AddFirstSupply(); break; } if (needNotify) { WriteToProcess("LedStateProcess", "Refresh", null); WriteToProcess("ScannerStateProcess", "Refresh", null); dispatcher.WriteToProcess("DataRequestProcess", "SupplyRequest", 1); } } catch (Exception e) { Logger.Error("补货批次生成处理失败,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * stateItem.ItemName : * * stateItem.State :参数 - 任务号。 */ object obj = stateItem.State; if (obj == null || obj.ToString() == "0") return; string TaskNo = obj.ToString().PadLeft(4, '0'); string FromStation = ""; string WriteItem = ""; string ToStation = ""; try { switch (stateItem.ItemName) { case "02_1_301": FromStation = "301"; ToStation = "302"; WriteItem = "02_2_301"; break; case "02_1_305": FromStation = "305"; ToStation = "306"; WriteItem = "02_2_305"; break; case "02_1_309": FromStation = "309"; ToStation = "310"; WriteItem = "02_2_309"; break; case "02_1_313": FromStation = "313"; ToStation = "314"; WriteItem = "02_2_313"; break; case "02_1_317": FromStation = "317"; ToStation = "318"; WriteItem = "02_2_317"; break; case "02_1_323": FromStation = "323"; ToStation = "324"; WriteItem = "02_2_323"; break; } TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strValue[0])); if (!string.IsNullOrEmpty(strValue[0])) { string strWhere = string.Format("TASK_ID='{0}' AND ITEM_NO=2", strValue[0]); dal.UpdateTaskDetailState(strWhere, "2"); //更新小车任务完成 strWhere = string.Format("TASK_ID='{0}' AND ITEM_NO=3", strValue[0]); dal.UpdateTaskDetailStation(FromStation, ToStation, "1", strWhere);//更新货物到达入库站台明细 int[] writestate = new int[3]; writestate[0] = int.Parse(TaskNo); writestate[1] = int.Parse(ToStation); writestate[2] = 2; string barcode = ""; string palletcode = ""; if (dt.Rows[0]["PRODUCT_CODE"].ToString() != "0000") // { writestate[2] = 1; barcode = dt.Rows[0]["PRODUCT_BARCODE"].ToString(); palletcode = dt.Rows[0]["PALLET_CODE"].ToString(); } WriteToService("StockPLC_02", WriteItem + "_1", writestate); byte [] b=new byte[190]; Common.ConvertStringChar.stringToByte(barcode, 80).CopyTo(b, 0); Common.ConvertStringChar.stringToByte(palletcode, 110).CopyTo(b, 80); WriteToService("StockPLC_02", WriteItem + "_2", b); WriteToService("StockPLC_02", WriteItem + "_3", 1); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.PalletToCarStationProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二层出库拆盘完成 * stateItem.State :参数 - 请求的卷烟编码。 */ object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string WriteItem=""; string FromStation = ""; string strTaskItem = ""; object objTaskNo; try { switch (stateItem.ItemName) { case "02_1_372_1": FromStation = "372"; WriteItem = "02_2_372"; strTaskItem = "02_1_372_2"; break; case "02_1_392_1": FromStation = "392"; WriteItem = "02_2_392"; strTaskItem = "02_1_392_2"; break; } objTaskNo = ObjectUtil.GetObject(WriteToService("StockPLC_02", strTaskItem)); string TaskNo = objTaskNo.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strValue[0])) { bool blnvalue = dal.SeparateTaskDetailStart(strValue[0]); //判断该任务是否开始执行 if (!blnvalue) { ChannelDal cdal = new ChannelDal(); string strChannelNo = cdal.InsertChannel(strValue[0], strValue[1]);//分配缓存道 if (strChannelNo != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=4", strValue[0]), "2"); WriteToService("StockPLC_02", WriteItem + "_1", int.Parse(strChannelNo)); WriteToService("StockPLC_02", WriteItem + "_2", 1); dal.UpdateTaskDetailStation(FromStation, strChannelNo, "1", string.Format("TASK_ID='{0}' AND ITEM_NO=5", strValue[0])); } } } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutSeparateProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { //object obj = ObjectUtil.GetObject(stateItem.State); //if (obj == null) // return; switch (stateItem.ItemName) { case "CraneTaskFinished": try { object obj = ObjectUtil.GetObject(stateItem.State); string TaskFinish = obj.ToString(); if (TaskFinish.Equals("True") || TaskFinish.Equals("1")) { string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo"))); if (TaskNo.Length <= 0) return; sbyte[] taskNo = new sbyte[10]; object[] objRow = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService("CranePLC1", "CraneAlarmCode")); int Column = int.Parse(objRow[2].ToString()); int Height = int.Parse(objRow[3].ToString()); int Row = int.Parse(objRow[4].ToString()); //更新任务状态 DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo) }; //bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param); DataTable dtXml = bll.FillDataTable("WCS.Sp_TaskProcess", param); //判断任务号是什么类型,如果是盘点另外处理 param = new DataParameter[] { new DataParameter("{0}", string.Format("WCS_Task.TaskNo='{0}'", TaskNo)) }; DataTable dt = bll.FillDataTable("WCS.SelectTask", param); string Flag = "BatchInStock"; string TaskType = ""; string CellCode = ""; string strState = ""; if (dt.Rows.Count > 0) { TaskType = dt.Rows[0]["TaskType"].ToString(); CellCode = dt.Rows[0]["CellCode"].ToString(); strState = dt.Rows[0]["State"].ToString(); if (TaskType == "12") Flag = "BatchOutStock"; else if (TaskType == "14") Flag = "BatchCheckStock"; } if (dtXml.Rows.Count > 0) { string BillNo = dtXml.Rows[0][0].ToString(); if (BillNo.Trim().Length > 0) { string xml = Util.ConvertObj.ConvertDataTableToXmlOperation(dtXml, Flag); WriteToService("ERP", "ACK", xml); Logger.Info("单号" + dtXml.Rows[0][0].ToString() + "已完成,开始上报ERP系统"); } } string[] str = new string[3]; str[0] = "6"; string strValue = ""; if (TaskType == "14" && strState == "4") { while ((strValue = FormDialog.ShowDialog(str, dt)) != "") { if (strValue != "1") { //更新货位信息 bll.ExecNonQuery("WCS.UpdateErrCell", new DataParameter[] { new DataParameter("@CellCode", CellCode) }); } bll.ExecNonQuery("WCS.UpdateTaskStateByTaskNo", new DataParameter[] { new DataParameter("@State", 5), new DataParameter("@TaskNo", TaskNo) }); //线程继续。 break; } } //清除堆垛机任务号 if (Column == 1 && Height == 1) { int[] cellAddr = new int[9]; cellAddr[0] = 0; cellAddr[1] = 0; cellAddr[2] = 0; cellAddr[3] = 1; cellAddr[4] = 1; cellAddr[5] = Row * 2 - 1; cellAddr[6] = 1; cellAddr[7] = 2; cellAddr[8] = Row * 2 - 1; Util.ConvertStringChar.stringToBytes("", 10).CopyTo(taskNo, 0); Context.ProcessDispatcher.WriteToService("CranePLC1", "TaskAddress", cellAddr); Context.ProcessDispatcher.WriteToService("CranePLC1", "TaskNo", taskNo); Context.ProcessDispatcher.WriteToService("CranePLC1", "WriteFinished", 2); Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo); return; } else { Util.ConvertStringChar.stringToBytes("", 10).CopyTo(taskNo, 0); WriteToService(stateItem.Name, "TaskNo", taskNo); Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo); } } } catch (Exception ex1) { Logger.Info("CraneProcess中CraneTaskFinished出错:" + ex1.Message); } break; case "Run": blRun = (int)stateItem.State == 1; if (blRun) { tmWorkTimer.Start(); Logger.Info("堆垛机联机"); } else { tmWorkTimer.Stop(); Logger.Info("堆垛机脱机"); } break; default: break; } return; }
protected abstract void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher);
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } if (stateItem.ItemName.IndexOf("nAlarmCode") >= 0) { int CraneNo = int.Parse(stateItem.Name.Replace("CranePLC", "")) * 2; ShowLedMessage(CraneNo.ToString(), stateItem); return; } string ItemNo = stateItem.ItemName.Split('_')[0]; ShowLedMessage(GetLedNo(int.Parse(ItemNo)), stateItem); try { if (stateItem.ItemName.IndexOf("TaskNo") >= 0 && (ItemNo == "102" || ItemNo == "106" || ItemNo == "110" || ItemNo == "114" || ItemNo == "118" || ItemNo == "103" || ItemNo == "107" || ItemNo == "111" || ItemNo == "115" || ItemNo == "119")) { string Tasks = ConvertStringChar.BytesToString(ObjectUtil.GetObjects(stateItem.State)); Tasks = Tasks.PadRight(26, ' '); string TaskNo = Tasks.Substring(0, 10).Trim(); if (TaskNo.Length > 0) { BLL.BLLBase bll = new BLL.BLLBase(); DataTable dtTask = bll.FillDataTable("WCS.SelectWCSTask", new DataParameter[] { new DataParameter("{0}", string.Format("TaskID='{0}'", TaskNo)) }); if (dtTask.Rows.Count > 0) { string PalletCode = dtTask.Rows[0]["PALLETID"].ToString(); switch (ItemNo) { case "102": case "106": case "110": case "114": case "118": //更新WCS_Task入库状态 bll.ExecNonQuery("WCS.UpdateWCSTaskStateByStatus", new DataParameter[] { new DataParameter("{0}", "2"), new DataParameter("{1}", TaskNo), new DataParameter("{2}", 1) }); Logger.Info("入库任务:" + TaskNo + "托盘编号:" + PalletCode + "到达入库端!"); break; case "103": case "107": case "111": case "115": case "119": //更新出库完成 bll.ExecNonQueryTran("WCS.SpTaskFinished", new DataParameter[] { new DataParameter("VTaskNo", TaskNo) }); Logger.Info("出库任务:" + TaskNo + "托盘编号:" + PalletCode + "完成任务!"); break; } } } } } catch (Exception ex) { Logger.Error("LEDProcess中StateChanged出现异常" + ex.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* * 一楼入库货位申请 */ try { string FromStation = ""; string writeItem = ""; string ToStation = ""; string TaskID = ""; object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string BarCode = ""; //读取PLC,获得产品编码 switch (stateItem.ItemName) { case "01_1_218_1": FromStation = "210"; ToStation = "218"; writeItem = "01_2_218_"; BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_01", "01_1_218_2"))); break; case "01_1_110_1": FromStation = "101"; ToStation = "110"; writeItem = "01_2_110_"; BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_01", "01_1_110_2"))); break; case "01_1_126_1": FromStation = "124"; ToStation = "126"; writeItem = "01_2_126_"; BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_01", "01_1_126_2"))); break; case "01_1_131": //空托盘组盘入 PalletBillDal Billdal = new PalletBillDal(); TaskID = Billdal.CreatePalletInBillTask(true); //空托盘组入库单,生成Task. FromStation = "124"; ToStation = "131"; writeItem = "01_2_131_"; break; case "PllateInRequest": break; } string strWhere = ""; if (TaskID == "") strWhere = string.Format("PRODUCT_BARCODE='{0}'", BarCode); else strWhere = string.Format("TASK_ID='{0}'", TaskID); TaskDal dal = new TaskDal(); //分配货位,返回 0:TaskID,1:货位 string[] CellValue = dal.AssignCell(strWhere, ToStation);//货位申请 //返回任务号9999 string TaskNo = dal.InsertTaskDetail(CellValue[0]); SysStationDal sysDal = new SysStationDal(); //获取task_detail行走路线item_no=3的信息,也就是堆垛机取货入库的动作 DataTable dt = sysDal.GetSationInfo(CellValue[1], "11","3"); DataTable dtTask = dal.TaskInfo(string.Format("TASK_ID='{0}'", CellValue[0])); //更新任务开始执行 dal.UpdateTaskState(CellValue[0], "1"); //更新Product_State 货位 ProductStateDal StateDal = new ProductStateDal(); StateDal.UpdateProductCellCode(CellValue[0], CellValue[1]); //更新货位申请起始地址及目标地址。 dal.UpdateTaskDetailStation(FromStation, ToStation, "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CellValue[0])); //0:任务号 1:目标地址 2:货物类型 int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(TaskNo); // ServiceW[1] = int.Parse(dt.Rows[0]["STATION_NO"].ToString()); if (stateItem.ItemName == "01_1_131") ServiceW[2] = 2; else ServiceW[2] = 1; //PLC写入任务 WriteToService("StockPLC_01", writeItem + "1", ServiceW); if (stateItem.ItemName == "01_1_131") { WriteToService("StockPLC_01", writeItem + "2", 1); } else { byte[] b = new byte[110]; Common.ConvertStringChar.stringToByte(dtTask.Rows[0]["PALLET_CODE"].ToString(), 110).CopyTo(b, 0); //写入RFID WriteToService("StockPLC_01", writeItem + "2", b); //标识位置1 WriteToService("StockPLC_01", writeItem + "3", 1); } BillDal Bdal = new BillDal(); Bdal.UpdateBillMasterStart(dtTask.Rows[0]["BILL_NO"].ToString(), ServiceW[2] == 1 ? true : false); dal.UpdateTaskDetailStation(ToStation, dt.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=2", CellValue[0]));//更新货位到达入库站台, } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.StockInRequestProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * 堆垛机任务处理 * 出库任务传入Task 需要产生TaskDetail,并更新起始位置及目的地。 * 入库任务传入TaskDetail * Init - 初始化。 * FirstBatch - 生成第一批入库请求任务。 * StockInRequest - 根据请求,生成入库任务。 * * stateItem.State :参数 - 请求的卷烟编码。 */ try { switch (stateItem.ItemName) { case "StockOutRequest": //开始出库,主动调用。 DataTable[] dtSend = (DataTable[])stateItem.State; if (dtSend[1] != null) { InsertCraneQuene(dtSend[1]); } InsertCraneQuene(dtSend[0]); CraneThreadStart();//线程调度堆垛机 break; case "StockOutToCarStation": //烟包经过扫描,正确烟包更新为3,错误更新为4. string[] strdd = (string[])stateItem.State; if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("TASK_ID='{0}'", strdd[0])); if (drs.Length > 0) { TaskDal tdal = new TaskDal(); tdal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=1", drs[0]["TASK_ID"].ToString()), "2"); ProductStateDal psdal = new ProductStateDal(); psdal.UpdateOutBillNo(strdd[0]); dtCrane.Rows.Remove(drs[0]); } CraneThreadStart(); //更新完成之后,线程调用堆垛机,避免堆垛机因调度原因而是堆垛机没有任务。 } break; case "CraneInRequest": //货物到达入库站台,调用堆垛机 DataTable dtInCrane = (DataTable)stateItem.State; InsertCraneQuene(dtInCrane); SendTelegram(dtInCrane.Rows[0]["CRANE_NO"].ToString(), dtInCrane.Rows[0]); break; case "ACP": ACP(stateItem.State); break; case "CSR": CSR(stateItem.State); break; case "ACK": ACK(stateItem.State); break; case "DUM": THOK.CRANE.TelegramData tgd = new CRANE.TelegramData(); THOK.CRANE.TelegramFraming tf = new CRANE.TelegramFraming(); string str = tf.DataFraming("00000", tgd, tf.TelegramDUA); WriteToService("Crane", "DUA", str); break; case "DUU": WriteToService("Crane", "DUM", "<00000CRAN30THOK01DUM0000000>"); break; case "NCK": NCK(stateItem.State); break; case "DEC": DEC(stateItem.State); break; default: break; } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_Crane.CraneProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * stateItem.ItemName : * Init - 初始化。 * FirstBatch - 生成第一批入库请求任务。 * StockInRequest - 根据请求,生成入库任务。 * * stateItem.State :参数 - 请求的卷烟编码。 */ object obj =stateItem.State; if (obj == null || obj.ToString() == "0") return; string FromStation=""; string ToStation=""; string WriteItem = ""; try { switch (stateItem.ItemName) { case "02_1_340": FromStation = "340"; ToStation = "372"; WriteItem = "02_2_340"; break; case "02_1_360": FromStation = "360"; ToStation = "392"; WriteItem = "02_2_360"; break; } string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strValue[0])) { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=3", strValue[0]), "2"); // DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strValue[0])); if (dt.Rows.Count > 0) { int[] WriteValue = new int[3]; WriteValue[0] = int.Parse(TaskNo); WriteValue[1] = int.Parse(FromStation); WriteValue[2] = int.Parse(ToStation); WriteToService("StockPLC_02", WriteItem + "_1", WriteValue); string barcode = dt.Rows[0]["PRODUCT_BARCODE"].ToString(); string palletcode = dt.Rows[0]["PALLET_CODE"].ToString(); byte[] b = new byte[190]; Common.ConvertStringChar.stringToByte(barcode, 80).CopyTo(b, 0); Common.ConvertStringChar.stringToByte(palletcode, 110).CopyTo(b, 80); WriteToService("StockPLC_02", WriteItem + "_2", b); WriteToService("StockPLC_02", WriteItem + "_3", 1); } dal.UpdateTaskDetailStation(FromStation, ToStation, "1", string.Format("TASK_ID='{0}' AND ITEM_NO=4", strValue[0])); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutCarFinishProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } string TaskFinish = obj.ToString(); if (TaskFinish.Equals("True") || TaskFinish.Equals("1")) { //读取产品品种 //Logger.Info("1"); string CellCode = ""; string ProductCode = ""; object[] product = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "ProductInfo")); int key = int.Parse(product[0].ToString()); string ProductNo = dicProductNo[key]; string ProductType = product[1].ToString(); if (ProductType == "1") { DataTable dt = bll.FillDataTable("CMD.SelectProduct", new DataParameter[] { new DataParameter("{0}", string.Format("ProductNo='{0}'", ProductNo)) }); if (dt.Rows.Count > 0) { ProductCode = dt.Rows[0]["ProductCode"].ToString(); } } else { ProductCode = "0001"; } //判断有无等待的此品种入库任务,如有,不再产生任务 DataTable dtTask = bll.FillDataTable("WCS.SelectTask", new DataParameter[] { new DataParameter("{0}", string.Format("WCS_TASK.TaskType='11' and WCS_TASK.State='0' and WCS_TASK.ProductCode='{0}'", ProductCode)) }); if (dtTask.Rows.Count > 0) { return; } DataParameter[] param = new DataParameter[] { new DataParameter("@CraneNo", "01"), new DataParameter("@ProductCode", ProductCode), new DataParameter("@TimeDiff", TimeDiff), new DataParameter("@CellCode", CellCode), new DataParameter("@WorkMode", Program.mainForm.WorkMode), new DataParameter("@WorkModeId", Program.mainForm.WorkModeId) }; bll.FillDataTable("WCS.Sp_CreateInTask", param); ////如果工作模式是储存且不是托盘组入库,需产生一个托盘组出库任务 //if (Program.mainForm.WorkMode == 1 && ProductCode != "0001") //{ // CellCode = ""; // Logger.Info("开始产生空托盘出库"); // param = new DataParameter[] // { // new DataParameter("@CraneNo", "01"), // new DataParameter("@ProductCode", "0001"), // new DataParameter("@CellCode",CellCode), // new DataParameter("@Valid",2), // new DataParameter("@WorkMode",Program.mainForm.WorkMode), // new DataParameter("@WorkModeId",Program.mainForm.WorkModeId) // }; // bll.FillDataTable("WCS.Sp_CreateOutTask", param); // Logger.Info("空托盘出库已产生"); //} //清除申请标识 //WriteToService("ConveyorPLC", "_CarReply", 50); } } catch (System.Data.SqlClient.SqlException e) { //如果是存储过程名称是PROC_NAME,而且State是数据库中设置的一个值 如:66 //则该异常就是我们需要特殊处理的一个异常 if (e.Procedure.Equals("Sp_CreateInTask") && e.State == 1) { Logger.Error("Dispatching.Process.StockInToStationProcess:" + e.Message); } else if (e.Procedure.Equals("Sp_CreateOutTask") && e.State == 1) { Logger.Error("Dispatching.Process.StockInToStationProcess:" + e.Message); } } catch (Exception e) { Logger.Error("Dispatching.Process.StockInToStationProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* * 一楼入库货位申请 */ try { string FromStation = ""; string writeItem = ""; string ToStation = ""; string TaskID = ""; object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string BarCode = ""; //读取PLC,获得产品编码 switch (stateItem.ItemName) { case "01_1_218_1": FromStation = "210"; ToStation = "218"; writeItem = "01_2_218_"; BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_01", "01_1_218_2"))); break; case "01_1_110_1": FromStation = "101"; ToStation = "110"; writeItem = "01_2_110_"; BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_01", "01_1_110_2"))); break; case "01_1_126_1": FromStation = "124"; ToStation = "126"; writeItem = "01_2_126_"; BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_01", "01_1_126_2"))); break; case "01_1_131": //空托盘组盘入 PalletBillDal Billdal = new PalletBillDal(); TaskID = Billdal.CreatePalletInBillTask(true); //空托盘组入库单,生成Task. FromStation = "124"; ToStation = "131"; writeItem = "01_2_131_"; break; case "PllateInRequest": break; } string strWhere = ""; if (TaskID == "") { strWhere = string.Format("PRODUCT_BARCODE='{0}'", BarCode); } else { strWhere = string.Format("TASK_ID='{0}'", TaskID); } TaskDal dal = new TaskDal(); //分配货位,返回 0:TaskID,1:货位 string[] CellValue = dal.AssignCell(strWhere, ToStation);//货位申请 //返回任务号9999 string TaskNo = dal.InsertTaskDetail(CellValue[0]); SysStationDal sysDal = new SysStationDal(); //获取task_detail行走路线item_no=3的信息,也就是堆垛机取货入库的动作 DataTable dt = sysDal.GetSationInfo(CellValue[1], "11", "3"); DataTable dtTask = dal.TaskInfo(string.Format("TASK_ID='{0}'", CellValue[0])); //更新任务开始执行 dal.UpdateTaskState(CellValue[0], "1"); //更新Product_State 货位 ProductStateDal StateDal = new ProductStateDal(); StateDal.UpdateProductCellCode(CellValue[0], CellValue[1]); //更新货位申请起始地址及目标地址。 dal.UpdateTaskDetailStation(FromStation, ToStation, "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CellValue[0])); //0:任务号 1:目标地址 2:货物类型 int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(TaskNo); // ServiceW[1] = int.Parse(dt.Rows[0]["STATION_NO"].ToString()); if (stateItem.ItemName == "01_1_131") { ServiceW[2] = 2; } else { ServiceW[2] = 1; } //PLC写入任务 WriteToService("StockPLC_01", writeItem + "1", ServiceW); if (stateItem.ItemName == "01_1_131") { WriteToService("StockPLC_01", writeItem + "2", 1); } else { byte[] b = new byte[110]; Common.ConvertStringChar.stringToByte(dtTask.Rows[0]["PALLET_CODE"].ToString(), 110).CopyTo(b, 0); //写入RFID WriteToService("StockPLC_01", writeItem + "2", b); //标识位置1 WriteToService("StockPLC_01", writeItem + "3", 1); } BillDal Bdal = new BillDal(); Bdal.UpdateBillMasterStart(dtTask.Rows[0]["BILL_NO"].ToString(), ServiceW[2] == 1 ? true : false); dal.UpdateTaskDetailStation(ToStation, dt.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=2", CellValue[0]));//更新货位到达入库站台, } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.StockInRequestProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二层出库到开包线 * */ object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; try { string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); string WriteItem = ""; string ReadItem = ""; string PackLine = ""; if (!string.IsNullOrEmpty( strValue[0])) { switch (stateItem.ItemName) { case "02_1_250_1": WriteItem = "02_2_250"; ReadItem = "02_1_250_2"; PackLine = "制丝1号线"; break; case "02_1_251_1": WriteItem = "02_2_251"; ReadItem = "02_1_251_2"; PackLine = "制丝2号线"; break; case "02_1_252_1": WriteItem = "02_2_252"; ReadItem = "02_1_252_2"; PackLine = "制丝3号线"; break; case "02_1_253_1": WriteItem = "02_2_253"; ReadItem = "02_1_253_2"; PackLine = "制丝1号线"; break; case "02_1_254_1": WriteItem = "02_2_254"; ReadItem = "02_1_254_2"; PackLine = "制丝2号线"; break; case "02_1_255_1": WriteItem = "02_2_255"; ReadItem = "02_1_255_2"; PackLine = "制丝3号线"; break; } object objCheck = ObjectUtil.GetObject(WriteToService("StockPLC_02", ReadItem )); if (objCheck.ToString() == "0") { Logger.Error(PackLine + "校验出错,请人工处理。"); } dal.UpdateTaskState(strValue[0], "2"); BillDal bDal = new BillDal(); bDal.UpdateOutBillMasterFinished(strValue[1]); WriteToService("StockPLC_02", WriteItem, 1); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutToUnpackLineProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二层小车进入缓存站台 */ object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string WriteItem = ""; string ChannelNo = ""; object objChannel; string strReadItem = ""; try { switch (stateItem.ItemName) { case "02_1_378_1": WriteItem = "02_2_378"; ChannelNo = "415"; strReadItem = "02_1_378_2"; break; case "02_1_381_1": WriteItem = "02_2_381"; ChannelNo = "431"; strReadItem = "02_1_381_2"; break; case "02_1_383_1": WriteItem = "02_2_383"; ChannelNo = "438"; strReadItem = "02_1_383_2"; break; case "02_1_385_1": WriteItem = "02_2_385"; ChannelNo = "461"; strReadItem = "02_1_385_2"; break; case "02_1_387_1": WriteItem = "02_2_387"; ChannelNo = "465"; strReadItem = "02_1_387_2"; break; case "02_1_389_1": WriteItem = "02_2_389"; ChannelNo = "471"; strReadItem = "02_1_389_2"; break; } string TaskNo = obj.ToString().PadLeft(4, '0'); objChannel = ObjectUtil.GetObject(WriteToService("StockPLC_02", strReadItem)); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strValue[0])) { ChannelDal Cdal = new ChannelDal(); ChannelNo = Cdal.GetChannelFromTask(TaskNo, strValue[1]); dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=5", strValue[0]), "2"); //更新 if (objChannel.ToString() == ChannelNo) //返回正确的缓存道。 { int value = Cdal.UpdateInChannelTime(strValue[0], strValue[1], ChannelNo); WriteToService("StockPLC_02", WriteItem + "_1", value); WriteToService("StockPLC_02", WriteItem + "_2", 1); } else { int value = Cdal.UpdateInChannelAndTime(strValue[0], strValue[1], objChannel.ToString()); WriteToService("StockPLC_02", WriteItem + "_1", value); WriteToService("StockPLC_02", WriteItem + "_2", 2); } } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutInCacheProcess,原因:" + e.Message); } }
/* 处理事项: * 抽检,补料,盘点 烟包到达,195 */ protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object sta = ObjectUtil.GetObject(stateItem.State); if (sta==null || sta.ToString() == "0") return; string[] str = new string[3]; if (((short)sta) >= 9000 && ((short)sta) <= 9299) //补料 str[0] = "1"; else if (((short)sta) >= 9300 && ((short)sta) <= 9499)//抽检 str[0] = "2"; else if (((short)sta) >= 9800 && ((short)sta) < 9999) //盘点 str[0] = "6"; str[1] = ""; str[2] = ""; //根据任务号,获取TaskID及BILL_NO TaskDal dal = new TaskDal(); string[] strInfo = dal.GetTaskInfo(sta.ToString().PadLeft(4, '0')); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strInfo[0]); //线程停止 string strValue = ""; while ((strValue = FormDialog.ShowDialog(str, dtProductInfo)) != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); string writeItem = "01_2_195_"; if (str[0] == "1" || str[0] == "2") //抽检,补料 { dal.UpdateTaskState(strInfo[0], "2"); BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1],"1"); int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(strInfo[1]); //任务号 ServiceW[1] = 131;//目的地址 ServiceW[2] = 4; WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 } else //盘点 { DataTable dtTask = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataRow dr = dtTask.Rows[0]; SysStationDal sysdal = new SysStationDal(); DataTable dtstation = sysdal.GetSationInfo(dr["CELL_CODE"].ToString(), "11", "3"); if (strValue != "1") { CellDal celldal = new CellDal(); celldal.UpdateCellErrFlag(dr["CELL_CODE"].ToString(), "条码扫描不一致"); } int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(strInfo[1]); //任务号 ServiceW[1] = int.Parse(dtstation.Rows[0]["STATION_NO"].ToString());//目的地址 ServiceW[2] = 1; WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 dal.UpdateTaskDetailStation("195", dtstation.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=3", strInfo[0]));//更新货位到达入库站台, } //线程继续。 break; } } catch (Exception ex) { Logger.Error("THOK.XC.Process.Process_01.CheckOutToStationProcess:" + ex.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * stateItem.ItemName : * Init - 初始化。 * FirstBatch - 生成第一批入库请求任务。 * StockInRequest - 根据请求,生成入库任务。 * * stateItem.State :参数 - 请求的卷烟编码。 */ //烟包托盘到达出库站台,根据返回的任务号,判断是否正常烟包: // 1、正常烟包,更新原有CranProcess的datatable将状态更改为3,并更改数据库状态。调用WriteToProcess(穿梭车Process). // 2、错误烟包,写入移库单,产生任务,调用调用WriteToProcess(穿梭车Process)。写入出库单,产生任务,并下达出库任务。 object[] obj = ObjectUtil.GetObjects(stateItem.State); if (obj[0] == null || obj[0].ToString() == "0") return; try { string ToStation = ""; string FromStation = ""; string ReadItem2 = ""; switch (stateItem.ItemName) { case "02_1_304_1": FromStation = "303"; ToStation = "304"; ReadItem2 = "02_1_304_2"; break; case "02_1_308_1": FromStation = "307"; ToStation = "308"; ReadItem2 = "02_1_308_2"; break; case "02_1_312_1": FromStation = "311"; ToStation = "313"; ReadItem2 = "02_1_312_2"; break; case "02_1_316_1": FromStation = "315"; ToStation = "316"; ReadItem2 = "02_1_316_2"; break; case "02_1_320_1": FromStation = "319"; ToStation = "320"; ReadItem2 = "02_1_320_2"; break; case "02_1_322_1": FromStation = "321"; ToStation = "322"; ReadItem2 = "02_1_322_2"; break; } string StationState =""; TaskDal dal = new TaskDal(); string[] strTask = dal.GetTaskInfo(obj[0].ToString().PadLeft(4, '0')); if (!string.IsNullOrEmpty(strTask[0])) { //更新 dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strTask[0]), "2"); DataTable dtTask = dal.TaskInfo(string.Format("TASK_ID='{0}'", strTask[0])); string CellCode = dtTask.Rows[0]["CELL_CODE"].ToString(); CellDal Celldal = new CellDal(); //TaskID StationState = strTask[0]; //校验正确烟包 if (obj[1].ToString() == "1") { WriteToProcess("CraneProcess", "StockOutToCarStation", StationState); //解除货位锁定 Celldal.UpdateCellOutFinishUnLock(CellCode); ProductStateDal psdal = new ProductStateDal(); psdal.UpdateOutBillNo(strTask[0]); //更新出库单 //获取任务记录 DataTable dt = dal.TaskCarDetail(string.Format("WCS_TASK.TASK_ID='{0}' AND ITEM_NO=3 AND DETAIL.STATE=0 ", strTask[0])); //调度小车; WriteToProcess("CarProcess", "CarOutRequest", dt); } else //校验错误烟包 { //返回读取到的RFID string NewPalletCode = Common.ConvertStringChar.BytesToString((object[])ObjectUtil.GetObjects(WriteToService("StockPLC_02", ReadItem2))); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strTask[0]); string strBillNo = ""; string[] strMessage = new string[3]; //strMessage[0] 弹出窗口类别,5是校验窗口 strMessage[0] = "5"; strMessage[1] = strTask[0]; strMessage[2] = NewPalletCode; //弹出校验不合格窗口,人工选择处理方式 //strBillNo返回1 继续出库,否则返回替代的入库批次 while ((strBillNo = FormDialog.ShowDialog(strMessage, dtProductInfo)) != "") { string strNewBillNo = strBillNo; if (string.IsNullOrEmpty(strNewBillNo)) { if (strNewBillNo == "1") { WriteToProcess("CraneProcess", "StockOutToCarStation", StationState); //更新堆垛机任务明细为完成状态。 Celldal.UpdateCellOutFinishUnLock(CellCode);//解除货位锁定 ProductStateDal psdal = new ProductStateDal(); psdal.UpdateOutBillNo(strTask[0]); //更新出库单 DataTable dtCar = dal.TaskCarDetail(string.Format("WCS_TASK.TASK_ID='{0}' AND ITEM_NO=3 AND DETAIL.STATE=0 ", strTask[0])); //获取任务ID WriteToProcess("CarProcess", "CarOutRequest", dtCar); //调度小车; } else { //生成二楼退库单 BillDal bdal = new BillDal(); //产生WMS退库单以及WCS任务,并生成TaskDetail。 string CancelTaskID = bdal.CreateCancelBillInTask(strTask[0], strTask[1]); //更新货位错误标志。 Celldal.UpdateCellNewPalletCode(CellCode, NewPalletCode); //更新退库申请货位完成。 dal.UpdateTaskDetailStation(FromStation, ToStation, "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CancelTaskID)); //更新出库任务完成 dal.UpdateTaskState(strTask[0], "2"); string strWhere = string.Format("WCS_TASK.TASK_ID='{0}' AND ITEM_NO=2 AND DETAIL.STATE=0 ", CancelTaskID); DataTable dt = dal.TaskCarDetail(strWhere); //写入调小车的源地址目标地址 if (dt.Rows.Count > 0) { SysStationDal sysdal = new SysStationDal(); DataTable dtCarStation = sysdal.GetCarSationInfo(CellCode, "22"); dt.Rows[0].BeginEdit(); dt.Rows[0]["IN_STATION_ADDRESS"] = dtCarStation.Rows[0]["IN_STATION_ADDRESS"]; dt.Rows[0]["IN_STATION"] = dtCarStation.Rows[0]["IN_STATION"]; dt.Rows[0].EndEdit(); } //调度穿梭车入库。 WriteToProcess("CarProcess", "CarInRequest", dt); //创建替代入库批次的WMS单据,WCS出库任务 string strOutTaskID = bdal.CreateCancelBillOutTask(strTask[0], strTask[1], strNewBillNo); DataTable dtOutTask = dal.CraneTaskOut(string.Format("TASK_ID='{0}'", strOutTaskID)); //调度穿梭车出库 WriteToProcess("CraneProcess", "CraneInRequest", dtOutTask); //延迟 int i = 0; while (i < 100) { i++; } //StationState:原任务TASKID,更新堆垛机Process 状态为2. WriteToProcess("CraneProcess", "StockOutToCarStation", StationState); //插入替换批次记录 DataTable dtNewProductInfo = dal.GetProductInfoByTaskID(strOutTaskID); dal.InsertChangeProduct(dtProductInfo.Rows[0]["PRODUCT_BARCODE"].ToString(), dtProductInfo.Rows[0]["PRODUCT_CODE"].ToString(), dtNewProductInfo.Rows[0]["PRODUCT_BARCODE"].ToString(), dtNewProductInfo.Rows[0]["PRODUCT_CODE"].ToString()); } } break; } } } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutToCarStationProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * * 堆垛机任务处理 * 出库任务传入Task 需要产生TaskDetail,并更新起始位置及目的地。 * 入库任务传入TaskDetail * Init - 初始化。 * FirstBatch - 生成第一批入库请求任务。 * StockInRequest - 根据请求,生成入库任务。 * * stateItem.State :参数 - 请求的卷烟编码。 */ try { switch (stateItem.ItemName) { //开始出库,主动调用。 case "StockOutRequest": DataTable[] dtSend = (DataTable[])stateItem.State; if (dtSend[1] != null) { InsertCraneQuene(dtSend[1]); } InsertCraneQuene(dtSend[0]); //线程调度堆垛机 CraneThreadStart(); break; //二楼出库RFID校验,Task_Detail ItemNo=1 状态更新为2,确认检验完成后,才可下下一产品的下一任务 case "StockOutToCarStation": string strdd = (string)stateItem.State; if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("TASK_ID='{0}'", strdd)); if (drs.Length > 0) { dtCrane.Rows.Remove(drs[0]); } TaskDal tdal = new TaskDal(); //ItemNo=1 状态更新为2 tdal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=1", strdd), "2"); //更新完成之后,线程调用堆垛机,避免堆垛机因调度原因而是堆垛机没有任务。 CraneThreadStart(); } break; //货物到达入库站台,调用堆垛机 case "CraneInRequest": DataTable dtInCrane = (DataTable)stateItem.State; InsertCraneQuene(dtInCrane); SendTelegram(dtInCrane.Rows[0]["CRANE_NO"].ToString(), dtInCrane.Rows[0]); break; case "ACP": ACP(stateItem.State); break; case "CSR": CSR(stateItem.State); break; case "ACK": ACK(stateItem.State); break; case "DUM": SendDUA(); break; case "DUU": SendDUM(); break; case "NCK": NCK(stateItem.State); break; case "DEC": DEC(stateItem.State); break; default: break; } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_Crane.CraneProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* * 一楼入库到达入库站台。 */ try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; switch (stateItem.ItemName) { case "01_1_136": break; case "01_1_148": break; case "01_1_152": break; case "01_1_170": break; case "01_1_178": break; case "01_1_186": break; } //电控系统返回任务号9999 string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal taskDal = new TaskDal(); string[] TaskInfo = taskDal.GetTaskInfo(TaskNo); DataTable dt = taskDal.TaskInfo(string.Format("TASK_ID='{0}'", TaskInfo[0])); if (dt.Rows.Count > 0) { DataRow dr = dt.Rows[0]; string taskType = dt.Rows[0]["TASK_TYPE"].ToString(); string ItemNo = "0"; string NextItemNo="1"; string CellCode = ""; switch(taskType) { //入库 case "11": ItemNo = "2"; NextItemNo = "3"; CellCode = dr["CELL_CODE"].ToString(); break; //盘点 case "13": ItemNo = "3"; NextItemNo = "4"; CellCode = dr["CELL_CODE"].ToString(); break; //移库 case "14": ItemNo = "2"; NextItemNo = "3"; CellCode = dr["NEWCELL_CODE"].ToString(); break; } //更新路线完成状态 taskDal.UpdateTaskDetailState(string.Format("TASK_NO='{0}' AND ITEM_NO='{1}'", TaskNo, ItemNo), "2"); SysStationDal sysdal = new SysStationDal(); DataTable dtstation = sysdal.GetSationInfo(CellCode, "11","3"); //更新调度堆垛机的起始位置及目标地址。 taskDal.UpdateTaskDetailCrane(dtstation.Rows[0]["STATION_NO"].ToString(), CellCode, "0", dtstation.Rows[0]["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO={1}", TaskInfo[0],NextItemNo)); string strWhere = string.Format("TASK_NO='{0}'AND DETAIL.STATE='0' and ITEM_NO='{1}'", TaskNo, NextItemNo); DataTable dtInCrane = taskDal.CraneTaskIn(strWhere); if (dtInCrane.Rows.Count > 0) WriteToProcess("CraneProcess", "CraneInRequest", dtInCrane); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.StockInStationProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { switch (stateItem.ItemName) { case "101_TaskNo": object[] obj = ObjectUtil.GetObjects(stateItem.State); if (obj == null) { return; } string TaskNo = obj[0].ToString() + obj[1].ToString().PadLeft(4, '0') + obj[2].ToString().PadLeft(4, '0'); if (TaskNo.Length > 0) { string StationNo = stateItem.ItemName.Substring(0, 3); string PalletBarcode = ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(stateItem.Name, StationNo + "_RPalletCode"))); try { DataParameter[] param = new DataParameter[] { new DataParameter("{0}", "State='2',Covey_FinishDate=getdate()"), new DataParameter("{1}", string.Format("TaskNo='{0}'", TaskNo)) }; bll.ExecNonQueryTran("WCS.UpdateTaskState", param); Logger.Info("任务号:" + TaskNo + " 聊箱号:" + PalletBarcode + " 到达入库站台:" + StationNo); } catch (Exception ex) { Logger.Error("InStockToStationProcess出错,原因:" + ex.Message); } } break; case "TaskNo": string ReadTaskNo = stateItem.State.ToString(); //下达输送线入库任务 try { DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", string.Format("WCS_Task.TaskType='11'and WCS_Task.State='0' and TaskNo='{0}'", ReadTaskNo)) }; DataTable dt = bll.FillDataTable("WCS.SelectTask", parameter); if (dt.Rows.Count > 0) { string ConveyID = dt.Rows[0]["ConveyFromStation"].ToString(); string PalletCode = dt.Rows[0]["PalletCode"].ToString(); string Destination = dt.Rows[0]["ConveyToStation"].ToString(); int[] iTaskNo = new int[3]; iTaskNo[0] = int.Parse(ReadTaskNo.Substring(0, 2)); iTaskNo[1] = int.Parse(ReadTaskNo.Substring(2, 4)); iTaskNo[2] = int.Parse(ReadTaskNo.Substring(6, 4)); WriteToService(ConveyServer, ConveyID + "_WTaskNo", iTaskNo); WriteToService(ConveyServer, ConveyID + "_WPalletCode", PalletCode); WriteToService(ConveyServer, ConveyID + "_Destination", Destination); //目的地 if (WriteToService(ConveyServer, ConveyID + "_WriteFinished", 1)) { bll.ExecNonQuery("WCS.UpdateTaskState", new DataParameter[] { new DataParameter("{0}", "State=1,Convey_StartDate=getdate()"), new DataParameter("{1}", string.Format("TaskNo='{0}'", ReadTaskNo)) }); Logger.Info("任务号:" + ReadTaskNo + " 料箱号:" + PalletCode + " 已下输送线:" + ConveyID + " 目的地址:" + Destination); } } } catch (Exception ex) { Logger.Error("InStockToStationProcess出错,下达输送入库任务出错,原因:" + ex.Message); } break; } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) return; if (obj.ToString() == "48" || obj.ToString() == "0") return; string carNo = stateItem.ItemName.Substring(0, 2); Logger.Info("小车" + carNo + "接到入库确认请求"); string CraneNo = "01"; if (carNo == "02") CraneNo = "02"; BLL.BLLBase bll = new BLL.BLLBase(); //判断堆垛机状态是否可用 //查找有无请求状态(state='1')的任务,如没有则认为是空托盘回库 string filter = string.Format("WCS_Task.State='1' and WCS_TASK.TaskType='11' and WCS_TASK.CarNo='{0}'", carNo); DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", filter) }; DataTable dt = bll.FillDataTable("WCS.SelectTask", parameter); int rows = 0; if (dt.Rows.Count > 0) { rows = bll.ExecNonQuery("WCS.UpdateTaskState", new DataParameter[] { new DataParameter("@State", 2), new DataParameter("@CarNo", carNo) }); WriteToService("CarPLC", carNo + "_CarReply", 49); Logger.Info("小车:" + carNo + "收到入库请求,更新任务状态,影响行数" + rows); } else { //判断有无正在执行的任务,如有不做处理,如没有则产生一笔空盘回库任务 filter = string.Format("WCS_Task.State='3' and WCS_TASK.TaskType='11' and WCS_TASK.CarNo='{0}'", carNo); parameter = new DataParameter[] { new DataParameter("{0}", filter) }; DataTable dting = bll.FillDataTable("WCS.SelectTask", parameter); if (dting.Rows.Count > 0) { WriteToService("CarPLC", carNo + "_CarReply", 50); return; } //有无盘点回库任务 filter = string.Format("WCS_Task.State='4' and WCS_TASK.TaskType='14' and WCS_TASK.CarNo='{0}'", carNo); parameter = new DataParameter[] { new DataParameter("{0}", filter) }; dting = bll.FillDataTable("WCS.SelectTask", parameter); if (dting.Rows.Count > 0) { //盘点任务改变状态为5,堆垛机调度回库 string TaskNo = dting.Rows[0]["TaskNo"].ToString(); bll.ExecNonQuery("WCS.UpdateTaskStateByTaskNo", new DataParameter[] { new DataParameter("@State", 5), new DataParameter("@TaskNo", TaskNo) }); WriteToService("CarPLC", carNo + "_CarReply", 49); return; } //查找锁定货位,且产品是托盘的货位,如有判断为实托盘出库后,托盘回库 string ProductCode = "00" + CraneNo; parameter = new DataParameter[] { new DataParameter("{0}", string.Format("CMD_Cell.ProductCode='{0}' and CMD_Cell.IsActive='1' and CMD_Cell.IsLock='1' and CMD_Cell.ErrorFlag!='1'",ProductCode)), new DataParameter("{1}", carNo) }; dt = bll.FillDataTable("CMD.SelectCellByCar", parameter); if (dt.Rows.Count > 0) { //产生一笔空托盘入库任务 //锁定货位 parameter = new DataParameter[] { new DataParameter("@CarNo", carNo), new DataParameter("@CraneNo", CraneNo), new DataParameter("@CellCode", dt.Rows[0]["CellCode"].ToString()) }; bll.ExecNonQueryTran("WCS.Sp_RequestPalletInTask", parameter); WriteToService("CarPLC", carNo + "_CarReply", 49); Logger.Info("小车:" + carNo + "接到入库请求,产生一笔托盘回库任务"); } } WriteToService("CarPLC", carNo + "_CarReply", 50); } catch (Exception e) { Logger.Error("Dispatching.Process.CarProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } if (obj.ToString() == "48" || obj.ToString() == "0") { return; } string carNo = stateItem.ItemName.Substring(0, 2); Logger.Info("小车" + carNo + "接到入库确认请求"); string CraneNo = "01"; if (carNo == "02") { CraneNo = "02"; } BLL.BLLBase bll = new BLL.BLLBase(); //判断堆垛机状态是否可用 //查找有无请求状态(state='1')的任务,如没有则认为是空托盘回库 string filter = string.Format("WCS_Task.State='1' and WCS_TASK.TaskType='11' and WCS_TASK.CarNo='{0}'", carNo); DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", filter) }; DataTable dt = bll.FillDataTable("WCS.SelectTask", parameter); int rows = 0; if (dt.Rows.Count > 0) { rows = bll.ExecNonQuery("WCS.UpdateTaskState", new DataParameter[] { new DataParameter("@State", 2), new DataParameter("@CarNo", carNo) }); WriteToService("CarPLC", carNo + "_CarReply", 49); Logger.Info("小车:" + carNo + "收到入库请求,更新任务状态,影响行数" + rows); } else { //判断有无正在执行的任务,如有不做处理,如没有则产生一笔空盘回库任务 filter = string.Format("WCS_Task.State='3' and WCS_TASK.TaskType='11' and WCS_TASK.CarNo='{0}'", carNo); parameter = new DataParameter[] { new DataParameter("{0}", filter) }; DataTable dting = bll.FillDataTable("WCS.SelectTask", parameter); if (dting.Rows.Count > 0) { WriteToService("CarPLC", carNo + "_CarReply", 50); return; } //有无盘点回库任务 filter = string.Format("WCS_Task.State='4' and WCS_TASK.TaskType='14' and WCS_TASK.CarNo='{0}'", carNo); parameter = new DataParameter[] { new DataParameter("{0}", filter) }; dting = bll.FillDataTable("WCS.SelectTask", parameter); if (dting.Rows.Count > 0) { //盘点任务改变状态为5,堆垛机调度回库 string TaskNo = dting.Rows[0]["TaskNo"].ToString(); bll.ExecNonQuery("WCS.UpdateTaskStateByTaskNo", new DataParameter[] { new DataParameter("@State", 5), new DataParameter("@TaskNo", TaskNo) }); WriteToService("CarPLC", carNo + "_CarReply", 49); return; } //查找锁定货位,且产品是托盘的货位,如有判断为实托盘出库后,托盘回库 string ProductCode = "00" + CraneNo; parameter = new DataParameter[] { new DataParameter("{0}", string.Format("CMD_Cell.ProductCode='{0}' and CMD_Cell.IsActive='1' and CMD_Cell.IsLock='1' and CMD_Cell.ErrorFlag!='1'", ProductCode)), new DataParameter("{1}", carNo) }; dt = bll.FillDataTable("CMD.SelectCellByCar", parameter); if (dt.Rows.Count > 0) { //产生一笔空托盘入库任务 //锁定货位 parameter = new DataParameter[] { new DataParameter("@CarNo", carNo), new DataParameter("@CraneNo", CraneNo), new DataParameter("@CellCode", dt.Rows[0]["CellCode"].ToString()) }; bll.ExecNonQueryTran("WCS.Sp_RequestPalletInTask", parameter); WriteToService("CarPLC", carNo + "_CarReply", 49); Logger.Info("小车:" + carNo + "接到入库请求,产生一笔托盘回库任务"); } } WriteToService("CarPLC", carNo + "_CarReply", 50); } catch (Exception e) { Logger.Error("Dispatching.Process.CarProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二层小车进入缓存站台 */ object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") return; string WriteItem = ""; string ChannelNo = ""; object objChannel; string strReadItem = ""; try { switch (stateItem.ItemName) { case "02_1_378_1": WriteItem = "02_2_378"; ChannelNo = "415"; strReadItem = "02_1_378_2"; break; case "02_1_381_1": WriteItem = "02_2_381"; ChannelNo = "431"; strReadItem = "02_1_381_2"; break; case "02_1_383_1": WriteItem = "02_2_383"; ChannelNo = "438"; strReadItem = "02_1_383_2"; break; case "02_1_385_1": WriteItem = "02_2_385"; ChannelNo = "461"; strReadItem = "02_1_385_2"; break; case "02_1_387_1": WriteItem = "02_2_387"; ChannelNo = "465"; strReadItem = "02_1_387_2"; break; case "02_1_389_1": WriteItem = "02_2_389"; ChannelNo = "471"; strReadItem = "02_1_389_2"; break; } string TaskNo = obj.ToString().PadLeft(4, '0'); objChannel = ObjectUtil.GetObject(WriteToService("StockPLC_02", strReadItem)); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); if (!string.IsNullOrEmpty(strValue[0])) { ChannelDal Cdal = new ChannelDal(); ChannelNo = Cdal.GetChannelFromTask(TaskNo, strValue[1]); dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=5", strValue[0]), "2"); //更新 if (objChannel.ToString() == ChannelNo) //返回正确的缓存道。 { int value = Cdal.UpdateInChannelTime(strValue[0], strValue[1], ChannelNo); WriteToService("StockPLC_02", WriteItem + "_1", value); WriteToService("StockPLC_02", WriteItem + "_2", 1); } else { int value = Cdal.UpdateInChannelAndTime(strValue[0], strValue[1], objChannel.ToString()); WriteToService("StockPLC_02", WriteItem + "_1", value); WriteToService("StockPLC_02", WriteItem + "_2", 2); } } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.StockOutInCacheProcess,原因:" + e.Message); } }