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); } }
/// <summary> ///接收删除指令返回值 /// </summary> /// <param name="state"></param> private void DEC(object state) { Dictionary<string, string> msg = (Dictionary<string, string>)state; if (msg["ReturnCode"] == "000") //序列号出错,重新发送报文 { TaskDal dal = new TaskDal(); DataTable dt = dal.CraneTaskIn(string.Format("DETAIL.CRANE_NO='{0}' AND ASSIGNMENT_ID='{1}'", msg["CraneNo"], msg["AssignmenID"])); DataRow dr = null; if (dt.Rows.Count > 0) dr = dt.Rows[0]; if (dr != null) { #region 错误处理 if (dr["ERR_CODE"].ToString() == "111") //入库,货位有货,重新分配货位 { CellDal cdal = new CellDal(); cdal.UpdateCellErrFlag(dr["CELL_CODE"].ToString(), "货位有货,系统无记录"); string[] strValue = dal.AssignNewCell(string.Format("TASK_ID='{0}'",dr["TASK_ID"].ToString()), dr["CRANE_NO"].ToString());//货位申请 ProductStateDal StateDal = new ProductStateDal(); StateDal.UpdateProductCellCode(strValue[0], strValue[1]); //更新Product_State 货位 SysStationDal sysdal = new SysStationDal(); DataTable dtstation = sysdal.GetSationInfo(strValue[1], dr["TASK_TYPE"].ToString(), dr["ITEM_NO"].ToString()); dal.UpdateTaskDetailCrane(dtstation.Rows[0]["STATION_NO"].ToString(), strValue[1], "1", dtstation.Rows[0]["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO={1}", strValue[0], dr["ITEM_NO"].ToString()));//更新调度堆垛机的其实位置及目标地址。 dr.BeginEdit(); dr["CELLSTATION"] = "30" + strValue[1] + "01"; dr.EndEdit(); SendTelegramARQ(dr, false); //if (dtCrane != null) //{ // DataRow[] drs = dtCrane.Select(string.Format("ASSIGNMENT_ID='{0}'", msg["AssignmenID"])); // if (drs.Length > 0) // dtCrane.Rows.Remove(drs[0]); //} } else if (dr["ERR_CODE"].ToString() == "113")//出库,货位无货, { string ErrMsg = ""; DataRow[] drMsgs = dtErrMesage.Select(string.Format("CODE='{0}'", dr["ERR_CODE"].ToString())); if (drMsgs.Length > 0) ErrMsg = drMsgs[0]["DESCRIPTION"].ToString(); string strBillNo = ""; string[] strMessage = new string[3]; strMessage[0] = "8"; strMessage[1] =dr["TASK_ID"].ToString(); strMessage[2] = "错误代码:" + dr["ERR_CODE"] + ",错误内容:" + ErrMsg; DataTable dtProductInfo = dal.GetProductInfoByTaskID(dr["TASK_ID"].ToString()); while ((strBillNo = FormDialog.ShowDialog(strMessage, dtProductInfo)) != "") { BillDal bdal = new BillDal(); string strNewBillNo = strBillNo; string strOutTaskID = bdal.CreateCancelBillOutTask(dr["TASK_ID"].ToString(), dr["BILL_NO"].ToString(), strNewBillNo); DataTable dtOutTask = dal.CraneTaskOut(string.Format("TASK_ID='{0}'", strOutTaskID)); WriteToProcess("CraneProcess", "CraneInRequest", dtOutTask); CellDal cdal = new CellDal(); cdal.UpdateCellErrFlag(dr["CELL_CODE"].ToString(), "货位无货,系统有记录"); break; } } } #endregion } }
/// <summary> /// 堆垛机状态。 /// </summary> /// <param name="state"></param> private void CSR(object state) { Dictionary<string, string> msg = (Dictionary<string, string>)state; if (!dCraneState.ContainsKey(msg["CraneNo"])) { dCraneState.Add(msg["CraneNo"], ""); } //如果返回错误代码是000时,CraneMode=1表示堆垛机是自动状态,CraneMode 1: automatic 2: stopped 3: manual if (msg["ReturnCode"] == "000") { lock (dCraneState) { if (msg["AssignmenID"] == "00000000" && msg["CraneMode"] == "1") { //此堆垛机状态为空闲 dCraneState[msg["CraneNo"]] = "0"; if (dCraneWait[msg["CraneNo"]] != null) { SendTelegram(msg["CraneNo"], dCraneWait[msg["CraneNo"]]); } else { SendTelegram(msg["CraneNo"], null); } } else dCraneState[msg["CraneNo"]] = "1"; } } else { TaskDal dal = new TaskDal(); DataRow dr = null; if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("ASSIGNMENT_ID='{0}'", msg["AssignmenID"])); if (drs.Length > 0) { dr = drs[0]; } } //如果在datatbale中找不到,再从数据库里查找 if (dr == null) { //根据流水号,获取资料 DataTable dt = dal.CraneTaskIn(string.Format("DETAIL.ASSIGNMENT_ID='{1}' AND DETAIL.CRANE_NO='{0}'", msg["CraneNo"], msg["AssignmenID"])); if (dt.Rows.Count > 0) dr = dt.Rows[0]; } string TaskID = ""; string ItemNo = ""; if (dr != null) { TaskID = dr["TASK_ID"].ToString(); ItemNo = dr["ITEM_NO"].ToString(); string ErrMsg = ""; DataRow[] drMsgs = dtErrMesage.Select(string.Format("CODE='{0}'", msg["ReturnCode"])); if (drMsgs.Length > 0) ErrMsg = drMsgs[0]["DESCRIPTION"].ToString(); Logger.Error(string.Format("堆垛机{0}返回错误代码{1}:{2}", msg["CraneNo"], msg["ReturnCode"], ErrMsg)); dal.UpdateCraneErrCode(TaskID, ItemNo, msg["ReturnCode"]);//更新堆垛机错误编号 } } SendACK(msg); CraneErrWriteToPLC(msg["CraneNo"], int.Parse(msg["ReturnCode"])); }
private void ACP(object state) { Dictionary<string, string> msg = (Dictionary<string, string>)state; TaskDal dal = new TaskDal(); if (!dCraneState.ContainsKey(msg["CraneNo"])) { dCraneState.Add(msg["CraneNo"], ""); } DataRow dr = null; if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("SQUENCE_NO='{0}'", msg["SequenceNo"])); if (drs.Length > 0) { dr = drs[0]; } } //如果在datatbale中找不到,再从数据库里查找 if (dr == null) { //根据流水号,获取资料 DataTable dt = dal.CraneTaskIn(string.Format("DETAIL.SQUENCE_NO='{1}' AND DETAIL.CRANE_NO='{0}'", msg["CraneNo"], msg["SequenceNo"])); if (dt.Rows.Count > 0) dr = dt.Rows[0]; } string TaskType = ""; string TaskID = ""; string ItemNo = ""; if (dr != null) { TaskType = dr["TASK_TYPE"].ToString(); TaskID = dr["TASK_ID"].ToString(); ItemNo = dr["ITEM_NO"].ToString(); } if (msg["ReturnCode"] == "000") { #region 正常处理流程 if (dr != null) { //判断暂存的任务是否是当前完成的任务,如果是清空暂存 if (dCraneWait[msg["CraneNo"]] != null) { if (dCraneWait[msg["CraneNo"]]["TASK_ID"].ToString() == TaskID) { dCraneWait[msg["CraneNo"]] = null; } } string strWhere = string.Format("TASK_ID='{0}' and ITEM_NO='{1}'", TaskID, ItemNo); //出库,一楼盘点出库 if (TaskType.Substring(1, 1) == "2" || (TaskType == "13" && ItemNo == "1")) { if (TaskType == "12") //一楼出库 { CellDal Cdal = new CellDal(); //货位解锁 Cdal.UpdateCellOutFinishUnLock(dr["CELL_CODE"].ToString()); //更新PRODUCTSTATE 出库单号 ProductStateDal psdal = new ProductStateDal(); psdal.UpdateOutBillNo(TaskID); } if(TaskType=="12" || TaskType=="13") dal.UpdateTaskDetailState(strWhere, "2"); //更新堆垛机状态 string ToStation; if (TaskType == "22") ToStation = dr["MEMO"].ToString(); else ToStation = dr["TARGET_CODE"].ToString(); //更新TASK_DETAIL FROM_STATION TO_STATION STATE dal.UpdateTaskDetailStation(dr["STATION_NO"].ToString(), ToStation, "1", string.Format("TASK_ID='{0}' AND ITEM_NO=2", TaskID)); int[] WriteValue = new int[3]; WriteValue[0] = int.Parse(dr["TASK_NO"].ToString()); if (TaskType == "22") WriteValue[1] = int.Parse(dr["MEMO"].ToString()); else WriteValue[1] = int.Parse(dr["TARGET_CODE"].ToString()); WriteValue[2] = int.Parse(dr["PRODUCT_TYPE"].ToString()); string Barcode = dr["PRODUCT_BARCODE"].ToString(); string PalletCode = dr["PALLET_CODE"].ToString(); byte[] b = new byte[190]; Common.ConvertStringChar.stringToByte(Barcode, 80).CopyTo(b, 0); Common.ConvertStringChar.stringToByte(PalletCode, 110).CopyTo(b, 80); //到达出库站台,再下任务给PLC WriteToService(dr["SERVICE_NAME"].ToString(), dr["ITEM_NAME_2"].ToString() + "_1", WriteValue); WriteToService(dr["SERVICE_NAME"].ToString(), dr["ITEM_NAME_2"].ToString() + "_2", b); WriteToService(dr["SERVICE_NAME"].ToString(), dr["ITEM_NAME_2"].ToString() + "_3", 1); } //入库完成,更新Task任务完成。 else if (TaskType.Substring(1, 1) == "1" || (TaskType == "13" && dr["ITEM_NO"].ToString() == "4")) { dal.UpdateTaskDetailState(strWhere, "2"); //更新堆垛机状态 dal.UpdateTaskState(TaskID, "2");//更新任务状态。 if (TaskType == "11") { CellDal Cdal = new CellDal(); Cdal.UpdateCellInFinishUnLock(TaskID);//入库完成,更新货位。 } BillDal billdal = new BillDal(); string isBill = "1"; if (dr["PRODUCT_CODE"].ToString() == "0000") isBill = "0"; billdal.UpdateInBillMasterFinished(dr["BILL_NO"].ToString(), isBill);//更新表单 } else if (TaskType == "14") { #region 移库 //如果目标地址与源地址不同巷道 if (dr["CRANE_NO"].ToString() != dr["NEW_CRANE_NO"].ToString()) { dal.UpdateTaskDetailState(strWhere, "2"); //更新堆垛机状态 if (ItemNo == "1") { //更新货位信息 CellDal Cdal = new CellDal(); Cdal.UpdateCellOutFinishUnLock(dr["CELL_CODE"].ToString()); //更新TASK_DETAIL FROM_STATION TO_STATION STATE dal.UpdateTaskDetailStation(dr["STATION_NO"].ToString(), dr["NEW_TARGET_CODE"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=2", TaskID)); //下达给PLC任务 int[] WriteValue = new int[3]; WriteValue[0] = int.Parse(dr["TASK_NO"].ToString()); WriteValue[1] = int.Parse(dr["NEW_TARGET_CODE"].ToString()); WriteValue[2] = int.Parse(dr["PRODUCT_TYPE"].ToString()); string Barcode = dr["PRODUCT_BARCODE"].ToString(); string PalletCode = dr["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(dr["SERVICE_NAME"].ToString(), dr["ITEM_NAME_2"].ToString() + "_1", WriteValue); WriteToService(dr["SERVICE_NAME"].ToString(), dr["ITEM_NAME_2"].ToString() + "_2", b); WriteToService(dr["SERVICE_NAME"].ToString(), dr["ITEM_NAME_2"].ToString() + "_3", 1); BillDal billdal = new BillDal(); billdal.UpdateBillMasterStart(dr["BILL_NO"].ToString(), true);//更新表单 } else { dal.UpdateTaskState(TaskID, "2");//更新任务状态。 CellDal Cdal = new CellDal(); Cdal.UpdateCellInFinishUnLock(dr["NEWCELL_CODE"].ToString()); BillDal billdal = new BillDal(); string isBill = "1"; if (dr["PRODUCT_CODE"].ToString() == "0000") isBill = "0"; billdal.UpdateInBillMasterFinished(dr["BILL_NO"].ToString(), isBill);//更新表单 } } else //相同巷道 { dal.UpdateTaskDetailState(strWhere, "2"); //更新堆垛机状态 dal.UpdateTaskState(TaskID, "2");//更新任务状态。 CellDal Cdal = new CellDal(); Cdal.UpdateCellRemoveFinish(dr["NEWCELL_CODE"].ToString(), dr["CELL_CODE"].ToString()); //入库完成,更新货位。 Cdal.UpdateCellOutFinishUnLock(dr["CELL_CODE"].ToString()); BillDal billdal = new BillDal(); string isBill = "1"; if (dr["PRODUCT_CODE"].ToString() == "0000") isBill = "0"; //更新WMS单据状态 billdal.UpdateInBillMasterFinished(dr["BILL_NO"].ToString(), isBill);//更新表单 } #endregion } lock (dCraneState) { dCraneState[msg["CraneNo"]] = "0"; } //移除完成的任务 if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("TASK_ID='{0}'", TaskID)); if (drs.Length > 0) { dtCrane.Rows.Remove(drs[0]); } } //查找发送下条报文。 GetNextTaskID(msg["CraneNo"], TaskType); } #endregion } else { string ErrMsg = ""; DataRow[] drMsgs = dtErrMesage.Select(string.Format("CODE='{0}'", msg["ReturnCode"])); if (drMsgs.Length > 0) ErrMsg = drMsgs[0]["DESCRIPTION"].ToString(); dal.UpdateCraneErrCode(TaskID, ItemNo, msg["ReturnCode"]);//更新堆垛机错误编号 Logger.Error(string.Format("堆垛机{0}返回错误代码{1}:{2}", msg["CraneNo"], msg["ReturnCode"], ErrMsg)); } SendACK(msg); CraneErrWriteToPLC(msg["CraneNo"], int.Parse(msg["ReturnCode"])); }
/// <summary> /// 发送报文后,堆垛机发送接收确认。 /// </summary> /// <param name="state"></param> private void ACK(object state) { Dictionary<string, string> msg = (Dictionary<string, string>)state; DataRow dr = null; TaskDal dal = new TaskDal(); if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("SQUENCE_NO='{0}'", msg["SequenceNo"])); if (drs.Length > 0) { dr = drs[0]; } } if (dr == null) { //根据流水号,获取资料 DataTable dt = dal.CraneTaskIn(string.Format("DETAIL.SQUENCE_NO='{0}' AND DETAIL.CRANE_NO IS NOT NULL", msg["SequenceNo"])); if (dt.Rows.Count > 0) dr = dt.Rows[0]; } #region 缓存数据存在 if (dr != null) { string TaskType = dr["TASK_TYPE"].ToString(); string ItemNo = dr["ITEM_NO"].ToString(); BillDal bdal = new BillDal(); if (TaskType.Substring(1, 1) == "2" || (TaskType == "13" && ItemNo == "1") || (TaskType == "14" && ItemNo == "1" && dr["CRANE_NO"].ToString() != dr["NEW_CRANE_NO"].ToString())) { dal.UpdateTaskState(dr["TASK_ID"].ToString(), "1"); dal.UpdateTaskDetailCrane(dr["CELL_CODE"].ToString(), dr["STATION_NO"].ToString(), "1", dr["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO={1}", dr["TASK_ID"], dr["ITEM_NO"])); //更新BILL_MASTER 单据状态作业中 bdal.UpdateBillMasterStart(dr["BILL_NO"].ToString(), dr["PRODUCT_CODE"].ToString() == "0000" ? false : true); } else if (TaskType == "14" && ItemNo == "1" && dr["CRANE_NO"].ToString() == dr["NEW_CRANE_NO"].ToString()) { //出库任务 更新任务状态:任务执行中 dal.UpdateTaskState(dr["TASK_ID"].ToString(), "1"); dal.UpdateTaskDetailCrane(dr["CELL_CODE"].ToString(), dr["NEWCELL_CODE"].ToString(), "1", dr["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO={1}", dr["TASK_ID"], dr["ITEM_NO"])); bdal.UpdateBillMasterStart(dr["BILL_NO"].ToString(), true); } else dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' and ITEM_NO={1}", dr["TASK_ID"], dr["ITEM_NO"]), "1"); if (dtCrane != null) { DataRow []drs=dtCrane.Select(string.Format("TASK_ID='{0}'",dr["TASK_ID"])); if(drs.Length>0) { drs[0].BeginEdit(); drs[0]["state"]="1"; drs[0].EndEdit(); dtCrane.AcceptChanges(); } } } #endregion }
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); } }
/// <summary> /// 堆垛机状态。 /// </summary> /// <param name="state"></param> private void CSR(object state) { Dictionary<string, string> msg = (Dictionary<string, string>)state; if (!dCraneState.ContainsKey(msg["CraneNo"])) { dCraneState.Add(msg["CraneNo"], ""); } if (msg["ReturnCode"] == "000") { lock (dCraneState) { if (msg["AssignmenID"] == "00000000" && msg["CraneMode"] == "1") { dCraneState[msg["CraneNo"]] = "0"; if (dCraneWait[msg["CraneNo"]] != null) { SendTelegram(msg["CraneNo"], dCraneWait[msg["CraneNo"]]); } else { SendTelegram(msg["CraneNo"], null); } } else dCraneState[msg["CraneNo"]] = "1"; } } else { lock (dCraneState) { dCraneState[msg["CraneNo"]] = "1"; } Logger.Error(string.Format("堆垛机{0}返回错误代码{1}{2}", msg["CraneNo"], msg["ReturnCode"], "")); #region 堆垛机错误而停止,重新选择出库批次 if (msg["ReturnCode"] == "000") { DataRow dr = null; TaskDal dal = new TaskDal(); if (dtCrane != null) { DataRow[] drs = dtCrane.Select(string.Format("SQUENCE_NO='{0}'", msg["SequenceNo"])); if (drs.Length > 0) { dr = drs[0]; } } if (dr == null) { //根据流水号,获取资料 DataTable dt = dal.CraneTaskIn(string.Format("DETAIL.SQUENCE_NO='{0}' AND DETAIL.CRANE_NO IS NOT NULL", msg["SequenceNo"])); if (dt.Rows.Count > 0) dr = dt.Rows[0]; } if (dr != null) { string ErrMsg = ""; DataRow[] drMsgs = dtErrMesage.Select(string.Format("CODE='{0}'", dr["ERR_CODE"].ToString())); if (drMsgs.Length > 0) ErrMsg = drMsgs[0]["DESCRIPTION"].ToString(); string strBillNo = ""; string[] strMessage = new string[4]; strMessage[0] = "9"; strMessage[1] = dr["TASK_ID"].ToString(); strMessage[2] = "错误代码:" + dr["ERR_CODE"] + ",错误内容:" + ErrMsg; strMessage[3] = msg["CraneNo"]; DataTable dtProductInfo = dal.GetProductInfoByTaskID(dr["TASK_ID"].ToString()); while ((strBillNo = FormDialog.ShowDialog(strMessage, dtProductInfo)) != "") { if (strBillNo != "1") { BillDal bdal = new BillDal(); string strNewBillNo = strBillNo; //产生新的出库单 string strOutTaskID = bdal.CreateCancelBillOutTask(dr["TASK_ID"].ToString(), dr["BILL_NO"].ToString(), strNewBillNo, msg["CraneNo"]); DataTable dtOutTask = dal.CraneTaskOut(string.Format("TASK_ID='{0}'", strOutTaskID)); WriteToProcess("CraneProcess", "CraneInRequest", dtOutTask); //取消当前单据的出货记录 CellDal cdal = new CellDal(); cdal.UpdateCellUnLock(dr["CELL_CODE"].ToString()); dal.UpdateTaskState(dr["TASK_ID"].ToString(), "3"); break; } else { break; } } } if (msg["AssignmenID"] == "00000000") { lock (dCraneState) { dCraneState[msg["CraneNo"]] = "0"; } } } #endregion } SendACK(msg); CraneErrWriteToPLC(msg["CraneNo"], int.Parse(msg["ReturnCode"])); }
private void btnStart_Click(object sender, EventArgs e) { try { this.btnStart.Enabled = false; this.btnStop.Enabled = true; TaskDal taskDal = new TaskDal(); //��ȡ��1¥��2¥��״̬Ϊ0��δִ�еĶѶ���ij����������Ϣ=dt DataTable dt = taskDal.TaskOutToDetail(); //��ȡ��1¥��2¥��״̬Ϊ1����ִ�еĶѶ���ij����������Ϣ=dt2 DataTable dt2 = null; if (IndexStar == 0) { //��ȡ�Ѷ����Ҫִ�л�����ִ�е��������� string strWhere = string.Format("TASK_TYPE IN ({0}) AND DETAIL.STATE IN ({1}) AND DETAIL.CRANE_NO IS NOT NULL ", "11,21,12,13,14", "0,1"); dt2 = taskDal.CraneTaskIn(strWhere); strWhere = string.Format("TASK_TYPE IN ({0}) AND DETAIL.STATE IN ({1}) AND DETAIL.CRANE_NO IS NOT NULL ", "22", "1"); DataTable dtout = taskDal.CraneTaskIn(strWhere); dt2.Merge(dtout); } DataTable[] dtSend = new DataTable[2]; dtSend[0] = dt; dtSend[1] = dt2; Context.Processes["CraneProcess"].Start(); Context.ProcessDispatcher.WriteToProcess("CraneProcess", "StockOutRequest", dtSend); IndexStar++; timer1.Enabled = true; timer1.Start(); timer1.Interval = 3000000; timer1.Tick += new EventHandler(timer1_Tick); } catch (Exception ex) { Logger.Error(ex.Message); } }