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);
            }
        }
Esempio n. 2
0
        /// <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
            }
        }
Esempio n. 3
0
        /// <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"]));
        }
Esempio n. 4
0
        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"]));
        }
Esempio n. 5
0
        /// <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);
            }
        }
Esempio n. 7
0
        /// <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"]));
        }
Esempio n. 8
0
        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);
            }
        }