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;
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
 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);
            }
        }
示例#7
0
 public LedStateManage(string stateItemCode, IProcessDispatcher dispatcher)
 {
     this.stateItemCode = stateItemCode;
     this.dispatcher    = dispatcher;
     GetParameters();
     ShowData();
 }
示例#8
0
        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)
            {

            }
        }
示例#9
0
 public void Release()
 {
     processDispatcher = null;
     serviceDispatcher = null;
     deviceManager     = null;
     processes         = null;
     services          = null;
 }
示例#10
0
        public Context()
        {
            Dispatcher dispatcher = new Dispatcher(this);
            processDispatcher = dispatcher;
            serviceDispatcher = dispatcher;

            deviceManager = new DeviceManager();
        }
示例#11
0
        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);
            }
        }
示例#13
0
        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);
            }
        }
示例#14
0
        public Context()
        {
            Dispatcher dispatcher = new Dispatcher(this);

            processDispatcher = dispatcher;
            serviceDispatcher = dispatcher;

            deviceManager = new DeviceManager();
        }
示例#15
0
        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);
            }
        }
示例#16
0
        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);
        }
示例#17
0
        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);
            }
        }
示例#18
0
        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);
            }
        }
示例#21
0
 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);
 }
示例#22
0
        /*  处理事项:
         *  倒库烟包 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);
            }
        }
示例#23
0
        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));
                    }
                }
            }
        }
示例#24
0
        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);
            }
        }
示例#25
0
        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);
            }
        }
示例#26
0
        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);
            }
        }
示例#28
0
        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;
        }
示例#29
0
        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);
            }
        }
示例#31
0
        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;
        }
示例#32
0
        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);
            }
        }
示例#34
0
        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);
            }
        }
示例#35
0
 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);
            }
        }
示例#38
0
        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;
        }
示例#39
0
 protected abstract void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher);
示例#40
0
        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);
            }
        }
示例#42
0
        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);
            }
        }
示例#44
0
        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);
            }
        }
示例#45
0
        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);
                }
        }
示例#47
0
        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);
            }
        }
示例#49
0
 protected abstract void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher);
        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);
            }
        }
示例#51
0
        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);
            }
        }
示例#53
0
        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;
            }
        }
示例#54
0
        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);
            }
        }
示例#55
0
文件: CarProcess.cs 项目: qq5013/ROBO
        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);
            }
        }