Beispiel #1
0
        public ActionResult Edit(int id)
        {
            TaskDal taskDal = new TaskDal();
            Task    task    = taskDal.GetTaskById(id);

            return(View(task));
        }
Beispiel #2
0
        /// <summary>
        /// 托盘入库方式
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPalletIn_Click(object sender, EventArgs e)
        {
            PalletSelect frm = new PalletSelect();



            if (frm.ShowDialog() == DialogResult.OK)
            {
                object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_122_1"));
                if (obj == null || obj.ToString() != "0")
                {
                    return;
                }
                if (frm.Flag == 1)  //单托盘入库
                {
                    string writeItem = "01_2_122_";
                    int[]  ServiceW  = new int[3];
                    ServiceW[0] = 9999; //任务号
                    ServiceW[1] = 131;  //目的地址
                    ServiceW[2] = 4;


                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务
                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "2", 1);        //PLC写入任务
                }
                else if (frm.Flag == 2)
                {
                    PalletBillDal Billdal     = new PalletBillDal();
                    string        TaskID      = Billdal.CreatePalletInBillTask(true); //空托盘组入库单,生成Task.
                    string        FromStation = "122";
                    string        ToStation   = "122";
                    string        writeItem   = "01_2_122_";

                    string   strWhere  = string.Format("TASK_ID='{0}'", TaskID);
                    TaskDal  dal       = new TaskDal();
                    string[] CellValue = dal.AssignCell(strWhere, ToStation); //货位申请

                    string        TaskNo = dal.InsertTaskDetail(CellValue[0]);
                    SysStationDal sysDal = new SysStationDal();
                    DataTable     dt     = sysDal.GetSationInfo(CellValue[1], "11", "3");


                    dal.UpdateTaskState(CellValue[0], "1");                                                                               //更新任务开始执行
                    ProductStateDal StateDal = new ProductStateDal();
                    StateDal.UpdateProductCellCode(CellValue[0], CellValue[1]);                                                           //更新Product_State 货位

                    dal.UpdateTaskDetailStation(FromStation, ToStation, "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CellValue[0])); //更新货位申请起始地址及目标地址。
                    int[] ServiceW = new int[3];
                    ServiceW[0] = int.Parse(TaskNo);                                                                                      //任务号
                    ServiceW[1] = int.Parse(dt.Rows[0]["STATION_NO"].ToString());                                                         //目的地址
                    ServiceW[2] = 2;

                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW);                                                           //PLC写入任务
                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "2", 1);                                                                  //PLC写入任务
                    dal.UpdateTaskDetailStation(ToStation, dt.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=2", CellValue[0])); //更新货位到达入库站台,

                    //更新单据开始
                }
            }
        }
Beispiel #3
0
        public bool Stop(long taskid)
        {
            NodeTaskRuntimeInfo nodetask = TaskPool.Instance().Get(taskid.ToString());

            if (nodetask == null)
            {
                LogHelper.WriteInfo("" + taskid + "任务没有在运行");
                return(false);
            }
            if (Dispose(taskid, nodetask))
            {
                try
                {
                    TaskDal   taskdal = new TaskDal();
                    TaskModel model   = taskdal.GetById(GlobalConfig.TaskDataBaseConnectString, taskid.ToString());
                    model.TaskState    = 0;
                    model.TaskStopTime = DateTime.Now;
                    taskdal.EditTask(GlobalConfig.TaskDataBaseConnectString, model);
                    return(true);
                }
                catch (Exception ex)
                {
                    LogHelper.WriteError(ex);
                    return(false);
                }
            }
            return(false);
        }
Beispiel #4
0
        public ActionResult Index()
        {
            TaskDal     taskDal = new TaskDal();
            List <Task> tasks   = taskDal.List();

            return(View(tasks));
        }
Beispiel #5
0
 private bool FinishPut()
 {
     try
     {
         if (CurrentTask != null)
         {
             if (CurrentTask.NextPositionID == CurrentTask.EndPositionID)
             {
                 WriteFinishPutState(CurrentTask.NextPositionName, "0");
             }
             else
             {
                 TaskDal taskDal          = new TaskDal();
                 string  nextPositionName = taskDal.GetTaskNextTwoPosition(CurrentTask.ID);
                 WriteFinishPutState(CurrentTask.NextPositionName, nextPositionName);
             }
             return(true);
         }
         return(false);
     }
     catch (Exception ex)
     {
         Logger.Error("SRM.FinishPut 出错,原因:" + ex.Message + "/n" + ex.StackTrace);
     }
     return(false);
 }
Beispiel #6
0
 /// <summary>
 /// 生成装车任务
 /// </summary>
 private void btnCreateTask_Click(object sender, EventArgs e)
 {
     try
     {
         object obj = null;
         if ((obj = this.InvokeScript(M_SUB_BILL)) == null)
         {
             MsgBox.Warn("未找到已排序订单!");
             return;
         }
         List <SortMapReceiveDataEntity> list = JsonConvert.DeserializeObject <List <SortMapReceiveDataEntity> >(obj.ToString());
         if (list == null || list.Count == 0)
         {
             MsgBox.Warn("未找到已排序订单");
             return;
         }
         if (list.Count == this._list.Count ||
             MsgBox.AskOK("还有未排序的订单,是否继续提交?") == DialogResult.OK)
         {
             string billIDs = string.Empty;
             List <OrderSortEntity> sortList = new List <OrderSortEntity>();
             foreach (SortMapReceiveDataEntity data in list)
             {
                 SOHeaderEntity header = this._list.Find(new Predicate <SOHeaderEntity>(
                                                             (item) =>
                 {
                     return(item.BillNO == data.orderId);
                 }));
                 if (header == null)
                 {
                     continue;
                 }
                 sortList.Add(new OrderSortEntity()
                 {
                     VehicleNo     = ConvertUtil.ToString(this._vehicle.ID),
                     BillNo        = data.orderId,
                     InVehicleSort = ConvertUtil.ToInt(data.paixu),
                     PiecesQty     = data.boxNum,
                     Attri1        = 10
                 });
             }
             // 存储排序记录
             OrderSortDal.Insert(sortList);
             string selectedBillIDs = StringUtil.JoinBySign <SOHeaderEntity>(this._list, "BillID");
             string errMsg          = TaskDal.CreateLoadingTask(selectedBillIDs, ConvertUtil.ToString(this._vehicle.ID));
             if (!string.IsNullOrEmpty(errMsg))
             {
                 throw new Exception(errMsg);
             }
             this.DialogResult = DialogResult.OK;
         }
     }
     catch (Exception ex)
     {
         MsgBox.Err("错误:" + ex.Message);
     }
 }
Beispiel #7
0
        /// <summary>
        /// 盘点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCheckScan_Click(object sender, EventArgs e)
        {
            object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_195"));

            if (obj == null || obj.ToString() == "0")
            {
                return;
            }
            string strTaskNo = obj.ToString().PadLeft(4, '0');

            if (int.Parse(obj.ToString()) >= 9800 && int.Parse(obj.ToString()) < 9999)  //盘点
            {
                string[] str = new string[3];

                str[0] = "6";


                str[1] = "";
                str[2] = "";
                TaskDal   dal           = new TaskDal(); //更具任务号,获取TaskID及BILL_NO
                string[]  strInfo       = dal.GetTaskInfo(strTaskNo);
                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_";

                    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;

                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW);                                                                                                                         //PLC写入任务
                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "3", 1);                                                                                                                                //PLC写入任务

                    dal.UpdateTaskDetailStation("195", dtstation.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=3", strInfo[0]));                                                              //更新货位到达入库站台,
                    dal.UpdateTaskDetailCrane(dtstation.Rows[0]["STATION_NO"].ToString(), dr["CELL_CODE"].ToString(), "0", dtstation.Rows[0]["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO=4", strInfo[0])); //更新调度堆垛机的其实位置及目标地址。
                    break;
                }
            }
        }
Beispiel #8
0
        public JsonResult JsonResult()
        {
            TaskDal     task   = new TaskDal();
            List <Task> tasks  = task.List();
            JsonResult  result = new JsonResult();

            result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
            result.Data = tasks;
            return(result);
        }
Beispiel #9
0
 public void LoadDataAndBindGrid()
 {
     try
     {
         bindingSource1.DataSource = TaskDal.GetCurrentTask();
     }
     catch (Exception ex)
     {
         MsgBox.Warn(ex.Message);
     }
 }
Beispiel #10
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);
            }
        }
Beispiel #11
0
        public ActionResult Delete(int id)
        {
            TaskDal taskDal = new TaskDal();

            if (taskDal.DelUser(id) > 0)
            {
                return(View("Index", taskDal.List()));
            }
            else
            {
                return(Content("删除失败"));
            }
        }
Beispiel #12
0
        public ActionResult UpModel(Task task)
        {
            TaskDal taskDal = new TaskDal();

            if (taskDal.UpUser(task) > 0)
            {
                return(RedirectToAction("Index"));
            }
            else
            {
                return(RedirectToAction("Edit"));
            }
        }
Beispiel #13
0
        public ActionResult CreateModel(Task task)
        {
            TaskDal taskDal = new TaskDal();

            if (taskDal.AddUser(task) > 0)
            {
                return(RedirectToAction("Index"));
            }
            else
            {
                return(RedirectToAction("Create"));
            }
        }
Beispiel #14
0
        private bool CheckPositionTask()
        {
            TaskDal taskDal = new TaskDal();

            if (CurrentTask != null && taskDal.CheckPositionTask(CurrentTask.CurrentPositionID))
            {
                return(true);
            }
            else
            {
                Logger.Error(string.Format("{0}取货时检查到当前位置同时存在多个任务或无任务,而当前任务可能是错误或无效任务!", Name));
                return(false);
            }
        }
Beispiel #15
0
        internal void Read()
        {
            if (!ScanManagerView.InitCigaretteScanInfoStack())
            {
                return;
            }
            TaskDal task  = new TaskDal();
            var     table = task.FindStockInProduct();

            if (table.Rows.Count > 0)
            {
                foreach (DataRow row in table.Rows)
                {
                    ProductDal        productDal = new ProductDal();
                    CigaretteScanInfo info       = productDal.FindProductForScan(Convert.ToString(row["product_code"]));
                    if (info != null && !CigaretteScanInfoStack.Keys.Contains(Convert.ToString(row["product_code"])))
                    {
                        info.ProductCode = Convert.ToString(row["product_code"]);
                        info.ProductName = Convert.ToString(row["product_name"]);
                        info.Quantity    = Convert.ToInt32(row["task_quantity"]);
                        info.Index       = 0;
                        info.State       = "0";
                        lock (CigaretteScanInfoStack)
                        {
                            CigaretteScanInfoStack.Add(info.ProductCode, info);
                        }
                    }
                    else if (info == null)
                    {
                        XtraMessageBox.Show(string.Format("当前卷烟 {0} : {1} 没有尺寸信息,请先行进行维护!",
                                                          Convert.ToString(row["product_code"]), Convert.ToString(row["product_name"]))
                                            , "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        XtraMessageBox.Show(string.Format("当前卷烟 {0} : {1} 已有扫码任务!",
                                                          Convert.ToString(row["product_code"]), Convert.ToString(row["product_name"]))
                                            , "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                AutomationContext.Write(memoryServiceName, memoryItemName, CigaretteScanInfoStack);
            }
            else
            {
                XtraMessageBox.Show("当前没有卷烟入库任务!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            Refresh();
        }
Beispiel #16
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);
            }
        }
Beispiel #17
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);
            }
        }
Beispiel #18
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);
            }
        }
Beispiel #19
0
        /// <summary>
        /// 抽检,补料托盘入库;
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSpotCheck_Click(object sender, EventArgs e)
        {
            object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_195"));

            if (obj == null || obj.ToString() == "0")
            {
                return;
            }
            string strTaskNo = obj.ToString().PadLeft(4, '0');

            string[] str = new string[3];
            if (int.Parse(strTaskNo) >= 9000 && int.Parse(strTaskNo) <= 9299) //补料
            {
                str[0] = "1";
            }
            else if (int.Parse(strTaskNo) >= 9300 && int.Parse(strTaskNo) <= 9499)//抽检
            {
                str[0] = "2";
            }

            str[1] = "";
            str[2] = "";
            TaskDal dal = new TaskDal(); //更具任务号,获取TaskID及BILL_NO

            string[]  strInfo       = dal.GetTaskInfo(strTaskNo);
            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");
                    Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", 1); //PLC写入任务
                }
                break;
            }
        }
Beispiel #20
0
        internal void New()
        {
            if (!ScanManagerView.InitCigaretteScanInfoStack())
            {
                return;
            }
            TaskDal task  = new TaskDal();
            var     table = task.FindStockInProduct();

            if (table.Rows.Count > 0)
            {
                CreateScanTaskDialog createScanTaskDialog = new CreateScanTaskDialog(table);
                if (createScanTaskDialog.ShowDialog() == DialogResult.OK && createScanTaskDialog.Quantity > 0)
                {
                    ProductDal        productDal = new ProductDal();
                    CigaretteScanInfo info       = productDal.FindProductForScan(createScanTaskDialog.SelectedCigaretteCode);
                    if (info != null && !CigaretteScanInfoStack.Keys.Contains(createScanTaskDialog.SelectedCigaretteCode))
                    {
                        info.ProductCode = createScanTaskDialog.SelectedCigaretteCode;
                        info.ProductName = createScanTaskDialog.SelectedCigaretteName;
                        info.Quantity    = createScanTaskDialog.Quantity;
                        info.Index       = 0;
                        info.State       = "0";
                        lock (CigaretteScanInfoStack)
                        {
                            CigaretteScanInfoStack.Add(info.ProductCode, info);
                        }
                        AutomationContext.Write(memoryServiceName, memoryItemName, CigaretteScanInfoStack);
                    }
                    else if (info == null)
                    {
                        XtraMessageBox.Show("当前卷烟没有尺寸信息,请先行进行维护!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        XtraMessageBox.Show("当前卷烟已有扫码任务!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            else
            {
                XtraMessageBox.Show("当卷烟没有入库任务!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            Refresh();
        }
        /*  处理事项:
         *  空托盘组出库到达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);
            }
        }
Beispiel #22
0
        /// <summary>
        /// 倒库出库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMoveOut_Click(object sender, EventArgs e)
        {
            object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_122"));

            if (obj == null || obj.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(obj.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;

                Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务

                Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "2", 1);        //PLC写入任务
                break;
            }
        }
        public JsonResult LoginIn(string name, int pwd)
        {
            TaskDal     dal        = new TaskDal();
            List <Task> tasks      = dal.LoginSel(name, pwd);
            JsonResult  jsonResult = new JsonResult();

            if (tasks != null && tasks.Count >= 1)
            {
                string     json   = JsonConvert.SerializeObject(tasks.FirstOrDefault());
                HttpCookie cookie = new HttpCookie("Login", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(json)));
                Response.Cookies.Add(cookie);
                jsonResult.Data = new { data = json, state = "200" };
                jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                return(jsonResult);
            }
            else
            {
                jsonResult.Data = new { data = "未找到用户!", state = "403" };
                return(jsonResult);
            }
        }
Beispiel #24
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            TaskDal   taskDal = new TaskDal();
            DataTable dt      = taskDal.TaskOutToDetail();
            DataTable dt2     = null;

            //if (IndexStar == 0)
            //{
            //    string strWhere = string.Format("TASK_TYPE IN ({0}) AND DETAIL.STATE IN ({1})  AND DETAIL.CRANE_NO IS NOT NULL ", "11,21,12,13,14", "0,1");
            //    dt2 = taskDal.CraneTaskIn(strWhere);
            //    strWhere = string.Format("TASK_TYPE IN ({0}) AND DETAIL.STATE IN ({1}) AND DETAIL.CRANE_NO IS NOT NULL ", "22", "0,1,2");
            //    DataTable dtout = taskDal.CraneTaskIn(strWhere);
            //    dt2.Merge(dtout);
            //}
            DataTable[] dtSend = new DataTable[2];
            dtSend[0] = dt;
            dtSend[1] = dt2;
            Context.Processes["CraneProcess"].Start();
            Context.ProcessDispatcher.WriteToProcess("CraneProcess", "StockOutRequest", dtSend);
            IndexStar++;
        }
Beispiel #25
0
        /// <summary>
        /// 任务开启
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public bool Start(long taskid)
        {
            LogHelper.WriteInfo("启动" + taskid + "任务");
            try
            {
                NodeTaskRuntimeInfo nodetask = TaskPool.Instance().Get(taskid.ToString());
                if (nodetask != null)
                {
                    LogHelper.WriteInfo("" + taskid + "任务已经开启");
                    return(false);
                }
                TaskDal taskdal = new TaskDal();
                nodetask           = new NodeTaskRuntimeInfo();
                nodetask.Tasklock  = new TaskLock();
                nodetask.TaskModel = taskdal.GetById(GlobalConfig.TaskDataBaseConnectString, taskid.ToString());
                string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalConfig.TaskDLL, nodetask.TaskModel.Id.ToString());  //任务dll在节点service存放地址
                string srcpath  = Path.Combine(nodetask.TaskModel.TaskClassPath, nodetask.TaskModel.TaskFileName);
                DeCompressionHelper.UnCompress(srcpath, filepath);

                AppDomainSetup setup = new AppDomainSetup();
                setup.ShadowCopyFiles = "true";
                setup.ApplicationBase = System.IO.Path.GetDirectoryName(filepath);

                var         appdomain = AppDomain.CreateDomain(Path.Combine(filepath, nodetask.TaskModel.TaskClassNamespace), null, setup);
                BaseTaskDLL taskdll   = (BaseTaskDLL)appdomain.CreateInstanceFromAndUnwrap(Path.Combine(filepath, nodetask.TaskModel.TaskFileName), nodetask.TaskModel.TaskClassNamespace);

                nodetask.TaskDLL = taskdll;

                TaskPool.Instance().Add(taskid.ToString(), nodetask);

                LogHelper.WriteInfo("节点开启成功");
                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex);
                return(false);
            }
        }
Beispiel #26
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                this.btnStart.Enabled = false;
                this.btnStop.Enabled  = true;

                TaskDal taskDal = new TaskDal();
                //获取出1楼跟2楼的状态为0还未执行的堆垛机的出入库任务信息=dt
                DataTable dt = taskDal.TaskOutToDetail();
                //获取出1楼跟2楼的状态为1正在执行的堆垛机的出入库任务信息=dt2
                DataTable dt2 = null;
                if (IndexStar == 0)
                {
                    //获取堆垛机的要执行或正在执行的所有任务
                    string strWhere = string.Format("TASK_TYPE IN ({0}) AND DETAIL.STATE IN ({1})  AND DETAIL.CRANE_NO IS NOT NULL ", "11,21,12,13,14", "0,1");
                    dt2      = taskDal.CraneTaskIn(strWhere);
                    strWhere = string.Format("TASK_TYPE IN ({0}) AND DETAIL.STATE IN ({1}) AND DETAIL.CRANE_NO IS NOT NULL ", "22", "1");
                    DataTable dtout = taskDal.CraneTaskIn(strWhere);
                    dt2.Merge(dtout);
                }
                DataTable[] dtSend = new DataTable[2];
                dtSend[0] = dt;
                dtSend[1] = dt2;
                Context.Processes["CraneProcess"].Start();
                Context.ProcessDispatcher.WriteToProcess("CraneProcess", "StockOutRequest", dtSend);
                IndexStar++;

                timer1.Enabled = true;
                timer1.Start();
                timer1.Interval = 3000000;
                timer1.Tick    += new EventHandler(timer1_Tick);
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
            }
        }
Beispiel #27
0
 public void CancelTask()
 {
     if (ConnectState == true)
     {
         lock (this)
         {
             if (CurrentTask != null && !CurrentTask.GetFinish)
             {
                 if (Write("b_O_Get_Permit", false) &&
                     Write("b_O_Put_Permit", false) &&
                     Write("b_I_Get_Finish", false) &&
                     Write("b_I_Put_Finish", false) &&
                     Write("b_O_Cancel_Task", true) &&
                     WriteCancelTaskState())
                 {
                     TaskDal taskDal = new TaskDal();
                     taskDal.UpdateTaskStateToWaiting(CurrentTask.ID);
                     CurrentTask        = null;
                     CurrentTaskFactory = null;
                     XtraMessageBox.Show("当前任务已取消!");
                 }
                 else
                 {
                     XtraMessageBox.Show("当前任务取消失败,可能无法连接到堆垛机或密集库PLC!");
                 }
             }
             else if (CurrentTask != null && CurrentTask.GetFinish)
             {
                 XtraMessageBox.Show("当前任务已取货完成,请处理完故障后选择重发任务!");
             }
             else
             {
                 XtraMessageBox.Show("当前任务不存在,或不可取消!");
             }
         }
     }
 }
Beispiel #28
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;
            }

            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);
            }
        }
Beispiel #30
0
        private void CarStateChange(string Objstate, string CarNO, string CarItem, string WriteItem)
        {
            string CarNo = "";

            if (Objstate == "2") //送货完成
            {
                TaskDal dal = new TaskDal();

                #region 送货完成,写入站台
                object[] obj1 = ObjectUtil.GetObjects(WriteToService("StockPLC_02", CarItem + "_1")); //小车任务号,状态
                object[] obj2 = ObjectUtil.GetObjects(WriteToService("StockPLC_02", CarItem + "_2")); //读取小车位置,目标地址

                DataRow[] drsAddress = dtCarAddress.Select(string.Format("CAR_ADDRESS >'{0}' and CAR_ADDRESS<'{1}'", long.Parse(obj2[1].ToString()) - MaxDifferenceValue, long.Parse(obj2[1].ToString()) + MaxDifferenceValue));
                if (drsAddress.Length > 0)
                {
                    string strStationNo = drsAddress[0]["STATION_NO"].ToString();
                    string strItemName  = "";
                    string strItemState = "02_1_" + strStationNo;
                    if (strStationNo == "340" || strStationNo == "360")
                    {
                        strItemName = "StockOutCarFinishProcess";
                    }
                    else
                    {
                        if (strStationNo == "301" || strStationNo == "305" || strStationNo == "309" || strStationNo == "313" || strStationNo == "317" || strStationNo == "323")
                        {
                            strItemName = "PalletToCarStationProcess";
                        }
                    }

                    if (strItemName != "")
                    {
                        WriteToProcess(strItemName, strItemState, obj1[0].ToString());
                    }
                }

                string FinshedTaskType = "";
                if (dtCar == null)
                {
                    return;
                }

                DataRow[] drexist = dtCar.Select(string.Format("CAR_NO='{0}' and STATE=1", CarNo));//获取小车开始执行完毕之后
                if (drexist.Length > 0)
                {
                    FinshedTaskType = drexist[0]["TASK_TYPE"].ToString();
                    dtCar.Rows.Remove(drexist[0]);
                }
                #endregion

                DataRow[] drs = dtCar.Select(string.Format("CAR_NO='{0}' and STATE=0", CarNo));
                //有待分配的任务
                if (drs.Length > 0)
                {
                    #region  待分配的任务
                    DataRow dr = drs[0];
                    dr.BeginEdit();
                    dr["STATE"] = 1;
                    dr.EndEdit();

                    int    CurPostion  = 0;
                    int    ToPostion   = 0;
                    string FromStation = "";
                    string ToStation   = "";
                    string TargetCode  = "";
                    if (dr["TASK_TYPE"].ToString() == "21")
                    {
                        CurPostion  = int.Parse(dr["IN_STATION_ADDRESS"].ToString());
                        ToPostion   = int.Parse(dr["STATION_NO_ADDRESS"].ToString());
                        FromStation = dr["IN_STATION"].ToString();
                        ToStation   = dr["STATION_NO"].ToString();
                    }
                    else
                    {
                        CurPostion  = int.Parse(dr["STATION_NO_ADDRESS"].ToString());
                        ToPostion   = int.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                        FromStation = dr["STATION_NO"].ToString();
                        ToStation   = dr["OUT_STATION_1"].ToString();

                        if (!dBillUseTarget.ContainsKey(dr["FORDERBILLNO"].ToString()))
                        {
                            dBillUseTarget.Add(dr["FORDERBILLNO"].ToString(), false);
                            dBillTargetCode.Add(dr["FORDERBILLNO"].ToString(), "");
                        }

                        if (dBillUseTarget[dr["FORDERBILLNO"].ToString()]) //已经使用过两次
                        {
                            if (dBillTargetCode[dr["FORDERBILLNO"].ToString()] == "370")
                            {
                                ToPostion = int.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                ToStation = dr["OUT_STATION_1"].ToString();
                            }
                            else
                            {
                                ToPostion = int.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                ToStation = dr["OUT_STATION_2"].ToString();
                            }
                        }
                        else
                        {
                            //制丝线1 正常走360,390拆盘有故障的时候,走340
                            if (dr["TARGET_CODE"].ToString().Trim() == "01")
                            {
                                int objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_390")).ToString());
                                if (objstate == 0)
                                {
                                    ToPostion  = int.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                    ToStation  = dr["OUT_STATION_2"].ToString();
                                    TargetCode = "390";
                                }
                                else
                                {
                                    objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_370")).ToString());
                                    if (objstate == 0)
                                    {
                                        ToPostion  = int.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                        ToStation  = dr["OUT_STATION_1"].ToString();
                                        TargetCode = "370";
                                    }
                                }
                            }
                            else  //制丝线02,03 走340 如果370拆盘坏掉,走360至390处拆盘
                            {
                                int objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_370")).ToString());
                                if (objstate == 0)
                                {
                                    ToPostion  = int.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                    ToStation  = dr["OUT_STATION_1"].ToString();
                                    TargetCode = "370";
                                }
                                else
                                {
                                    objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_390")).ToString());
                                    if (objstate == 0)
                                    {
                                        ToStation  = dr["OUT_STATION_2"].ToString();
                                        ToPostion  = int.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                        TargetCode = "390";
                                    }
                                }
                            }

                            if (dBillTargetCode[dr["FORDERBILLNO"].ToString()] != "" && dBillTargetCode[dr["FORDERBILLNO"].ToString()] != TargetCode)
                            {
                                dBillUseTarget[dr["FORDERBILLNO"].ToString()]  = true;
                                dBillTargetCode[dr["FORDERBILLNO"].ToString()] = TargetCode;
                            }
                            else
                            {
                                dBillTargetCode[dr["FORDERBILLNO"].ToString()] = TargetCode;
                            }
                        }
                    }
                    int[] WriteValue = new int[2];

                    WriteValue[0] = CurPostion;
                    WriteValue[1] = ToPostion;

                    int TaskNo = int.Parse(dr["TASK_NO"].ToString());

                    int   ProductType    = int.Parse(dr["PRODUCT_TYPE"].ToString());
                    int[] WriteTaskValue = new int[2];
                    WriteTaskValue[0] = TaskNo;
                    WriteTaskValue[1] = ProductType;

                    string barcode    = "";
                    string palletcode = "";
                    if (dr["PRODUCT_CODE"].ToString() != "0000") //
                    {
                        barcode    = dr["PRODUCT_BARCODE"].ToString();
                        palletcode = dr["PALLET_CODE"].ToString();
                    }

                    byte[] b = new byte[190];
                    Common.ConvertStringChar.stringToByte(barcode, 80).CopyTo(b, 0);
                    Common.ConvertStringChar.stringToByte(palletcode, 110).CopyTo(b, 80);
                    WriteToService("StockPLC_02", dr["WriteItem"].ToString() + "_1", WriteTaskValue); //任务号。
                    WriteToService("StockPLC_02", dr["WriteItem"].ToString() + "_2", WriteValue);     //地址。
                    WriteToService("StockPLC_02", dr["WriteItem"].ToString() + "_3", b);
                    WriteToService("StockPLC_02", dr["WriteItem"].ToString() + "_4", 1);

                    dal.UpdateTaskDetailCar(FromStation, ToStation, "1", dr["CAR_NO"].ToString(), string.Format("TASK_ID='{0}' and ITEM_NO='{1}'", dr["TASK_ID"], dr["ITEM_NO"]));

                    #endregion
                }
                else  //小车空闲,且没任务。
                {
                    #region 小车空闲,且没任务。 按顺序查找任务
                    long   CurPostion  = 0;
                    long   ToPostion   = -1;
                    string FromStation = "";
                    string ToStation   = "";
                    string TargetCode  = "";

                    DataRow[] drsNotCar = dtCar.Select("CAR_NO='' and STATE=0", "Index");
                    if (drsNotCar.Length > 0)
                    {
                        for (int i = 0; i < drs.Length; i++)
                        {
                            DataRow dr = drs[i];

                            if (dr["TASK_TYPE"].ToString() == "21")
                            {
                                CurPostion  = long.Parse(dr["IN_STATION_ADDRESS"].ToString());
                                ToPostion   = long.Parse(dr["STATION_NO_ADDRESS"].ToString());
                                FromStation = dr["IN_STATION"].ToString();
                                ToStation   = dr["STATION_NO"].ToString();
                            }
                            else
                            {
                                CurPostion = long.Parse(dr["STATION_NO_ADDRESS"].ToString());
                                //判断使用哪个出口?
                                ToPostion   = long.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                ToStation   = dr["OUT_STATION_1"].ToString();
                                FromStation = dr["STATION_NO"].ToString();

                                ToPostion = -1;

                                //判断二楼能否出库
                                bool blnCan = false;

                                blnCan = dal.ProductCanToCar(dr["FORDERBILLNO"].ToString(), dr["FORDER"].ToString(), dr["IS_MIX"].ToString(), true, blnOutOrder);
                                if (blnCan)
                                {
                                    if (!dBillUseTarget.ContainsKey(dr["FORDERBILLNO"].ToString()))
                                    {
                                        dBillUseTarget.Add(dr["FORDERBILLNO"].ToString(), false);
                                        dBillTargetCode.Add(dr["FORDERBILLNO"].ToString(), "");
                                    }

                                    if (dBillUseTarget[dr["FORDERBILLNO"].ToString()]) //已经使用过两次
                                    {
                                        if (dBillTargetCode[dr["FORDERBILLNO"].ToString()] == "370")
                                        {
                                            ToPostion = long.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                            ToStation = dr["OUT_STATION_1"].ToString();
                                        }
                                        else
                                        {
                                            ToPostion = long.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                            ToStation = dr["OUT_STATION_2"].ToString();
                                        }
                                    }
                                    else
                                    {
                                        if (dr["TARGET_CODE"].ToString().Trim() == "01")
                                        {
                                            //读取370拆盘有无故障
                                            int objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_390")).ToString());
                                            if (objstate == 0)
                                            {
                                                ToPostion  = long.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                                ToStation  = dr["OUT_STATION_2"].ToString();
                                                TargetCode = "390";
                                            }
                                            else
                                            {
                                                //读取390拆盘有无故障
                                                objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_370")).ToString());
                                                if (objstate == 0)
                                                {
                                                    ToPostion  = long.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                                    ToStation  = dr["OUT_STATION_2"].ToString();
                                                    TargetCode = "370";
                                                }
                                            }
                                        }
                                        else
                                        {
                                            int objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_370")).ToString());
                                            if (objstate == 0)
                                            {
                                                ToPostion  = long.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                                ToStation  = dr["OUT_STATION_1"].ToString();
                                                TargetCode = "370";
                                            }
                                            else
                                            {
                                                objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_390")).ToString());
                                                if (objstate == 0)
                                                {
                                                    ToStation  = dr["OUT_STATION_2"].ToString();
                                                    ToPostion  = long.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                                    TargetCode = "390";
                                                }
                                            }
                                        }

                                        if (dBillTargetCode[dr["FORDERBILLNO"].ToString()] != "" && dBillTargetCode[dr["FORDERBILLNO"].ToString()] != TargetCode)
                                        {
                                            dBillUseTarget[dr["FORDERBILLNO"].ToString()]  = true;
                                            dBillTargetCode[dr["FORDERBILLNO"].ToString()] = TargetCode;
                                        }
                                        else
                                        {
                                            dBillTargetCode[dr["FORDERBILLNO"].ToString()] = TargetCode;
                                        }
                                    }
                                }
                            }

                            if (ToPostion != -1)
                            {
                                long[] WriteValue = new long[2];

                                WriteValue[0] = CurPostion;
                                WriteValue[1] = ToPostion;

                                int TaskNo = int.Parse(dr["TASK_NO"].ToString());

                                int ProductType = int.Parse(dr["PRODUCT_TYPE"].ToString());

                                int[] WriteTaskValue = new int[2];
                                WriteTaskValue[0] = TaskNo;
                                WriteTaskValue[1] = ProductType;

                                string barcode    = "";
                                string palletcode = "";
                                if (dr["PRODUCT_CODE"].ToString() != "0000") //
                                {
                                    barcode    = dr["PRODUCT_BARCODE"].ToString();
                                    palletcode = dr["PALLET_CODE"].ToString();
                                }

                                byte[] b = new byte[190];
                                Common.ConvertStringChar.stringToByte(barcode, 80).CopyTo(b, 0);
                                Common.ConvertStringChar.stringToByte(palletcode, 110).CopyTo(b, 80);
                                WriteToService("StockPLC_02", WriteItem + "_1", WriteTaskValue); //任务号。
                                WriteToService("StockPLC_02", WriteItem + "_2", WriteValue);     //地址。
                                WriteToService("StockPLC_02", WriteItem + "_3", b);
                                WriteToService("StockPLC_02", WriteItem + "_4", 1);

                                dal.UpdateTaskDetailCar(FromStation, ToStation, "1", dr["CAR_NO"].ToString(), string.Format("TASK_ID='{0}' and ITEM_NO='{1}'", dr["TASK_ID"], dr["ITEM_NO"]));
                                break;
                            }
                        }
                    }
                    #endregion

                    #region 小车空闲,且找不到任务,则移动到最大目的地址的下一个工位
                    if (ToPostion == -1)
                    {
                        obj2 = ObjectUtil.GetObjects(WriteToService("StockPLC_02", CarItem + "_2"));//读取小车位置
                        //判断当前位
                        DataTable dtOrder = GetCarOrder(int.Parse(obj2[0].ToString()));
                        DataRow[] drMax   = dtOrder.Select("state=1", "ToStationOrder desc");
                        //按照最大目的地址倒排。最大目的地址大于当前位置,则下任务给小车移动到最大目的地址+1个工位。
                        if (drMax.Length > 0)
                        {
                            if ((int)drMax[0]["ToStation"] > int.Parse(obj2[1].ToString()))
                            {
                                string strNextStation = GetNextStation(obj2[1].ToString());
                                long[] WriteValue     = new long[2];

                                WriteValue[0] = long.Parse(obj2[0].ToString());;
                                WriteValue[1] = long.Parse(strNextStation);//下任务给小车移动到最大目的地址+1个工位。;

                                int TaskNo = 9999;

                                int   ProductType    = 5;
                                int[] WriteTaskValue = new int[2];
                                WriteTaskValue[0] = TaskNo;
                                WriteTaskValue[1] = ProductType;

                                string barcode    = "";
                                string palletcode = "";

                                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 + "_1", WriteTaskValue); //任务号。
                                WriteToService("StockPLC_02", WriteItem + "_2", WriteValue);     //地址。
                                WriteToService("StockPLC_02", WriteItem + "_3", b);
                                WriteToService("StockPLC_02", WriteItem + "_4", 1);
                            }
                        }
                    }
                    #endregion
                }
            }
            else
            {
                #region 烟包接货完成,处理目前位置与目的地之间的空闲小车
                if (Objstate == "1")                                                                     //
                {
                    object[] obj = ObjectUtil.GetObjects(WriteToService("StockPLC_02", CarItem + "_2")); //读取小车位置
                    //判断当前位置

                    DataTable dtOrder = GetCarOrder(int.Parse(obj[0].ToString()));
                    DataRow[] drMax   = dtOrder.Select(string.Format("state=0 and CurStation>={0} and CurStation<={1}", obj[1], obj[2]), "orderNo desc");

                    //按照最大目的地址倒排。最大目的地址大于当前位置,则下任务给小车移动到最大目的地址+1个工位。
                    if (drMax.Length > 0)
                    {
                        for (int i = 0; i < drMax.Length; i++)
                        {
                            string strNextStation = GetNextStation(obj[2].ToString());

                            long[] WriteValue = new long[2];

                            WriteValue[0] = long.Parse(drMax[i]["CurStation"].ToString());
                            WriteValue[1] = long.Parse(strNextStation);//下任务给小车移动到最大目的地址+1个工位。;

                            int TaskNo = 9999;

                            int   ProductType    = 5;
                            int[] WriteTaskValue = new int[2];
                            WriteTaskValue[0] = TaskNo;
                            WriteTaskValue[1] = ProductType;

                            string barcode    = "";
                            string palletcode = "";

                            byte[] b = new byte[190];
                            Common.ConvertStringChar.stringToBytes(barcode, 80).CopyTo(b, 0);
                            Common.ConvertStringChar.stringToBytes(palletcode, 110).CopyTo(b, 80);
                            WriteToService("StockPLC_02", drMax[i]["WriteItem"].ToString() + "_1", WriteTaskValue); //任务号。
                            WriteToService("StockPLC_02", drMax[i]["WriteItem"].ToString() + "_2", WriteValue);     //地址。
                            WriteToService("StockPLC_02", drMax[i]["WriteItem"].ToString() + "_3", b);
                            WriteToService("StockPLC_02", drMax[i]["WriteItem"].ToString() + "_4", 1);
                        }
                    }
                }
                #endregion
            }
        }