Ejemplo n.º 1
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);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 发送报文,并返回发送成功。
        /// </summary>
        /// <param name="CraneNo"></param>
        /// <param name="TaskID"></param>
        /// <returns></returns>
        private bool SendTelegram(string CraneNo, DataRow  drTaskID)
        {
            bool blnSend = false;
            //判断dCraneState[CraneNo] 是否空闲;
            if (!dCraneState.ContainsKey(CraneNo))
            {
                dCraneState.Add(CraneNo, "");
                SendTelegramCRQ(CraneNo);
            }

            //状态在没有收到CSR的时候,dCraneState[CraneNo]=""
            if (string.IsNullOrEmpty(dCraneState[CraneNo]))  //等待堆垛机应答。
            {
                if (dCraneWait[CraneNo] == null && drTaskID != null)
                {
                    dCraneWait[CraneNo] = drTaskID;
                    return false;
                }
                return false;
            }
            //堆垛机正忙。
            if (dCraneState[CraneNo] == "1")
                return true;

            //堆垛机空闲,自行找任务执行
            TaskDal dal = new TaskDal();
            DataRow drTaskCrane = null;

            //出库任务调用堆垛机,drTaskID无任务,自行找出任务
            if (drTaskID==null && dtCrane!=null)
            {
                //读取二楼出库站台是否有烟包,PLC
                //按照任务等级,任务时间,产品形态,
                //FORDERBILLNO 如果有校验不合格,需另外批次替代,产生的新出库单,原始出库单号FORDERBILLNO,排序不会乱掉
                DataRow[] drs = dtCrane.Select(string.Format("CRANE_NO='{0}' and STATE=0 and TASK_TYPE in ('12','22','13','14')", CraneNo), "TASK_LEVEL,TASK_DATE,BILL_NO,IS_MIX,PRODUCT_CODE,TASK_ID");
                for (int i = 0; i < drs.Length; i++)
                {
                     //如果是二楼出库,判断当前任务的产品是不是
                    if (drs[i]["TASK_TYPE"].ToString() == "22")
                    {

                        //判断是否能出库
                        bool blnCan = dal.ProductCanToCar(drs[i]["FORDERBILLNO"].ToString(), drs[i]["FORDER"].ToString(), drs[i]["IS_MIX"].ToString(), false, blnOutOrder);  //判断能否出库
                        if (!blnCan)
                            continue;
                    }
                    drTaskCrane=drs[i];
                    break;
                }
            }
            else  //根据任务编号发送报文。
            {
                drTaskCrane = drTaskID;
            }

            if (drTaskCrane != null)
            {
                if (dCraneState[CraneNo] == "0")
                {
                    string TaskType=drTaskCrane["TASK_TYPE"].ToString();
                    //Task_Detail ITEM_NO字段
                    //TaskType:13盘点 14移库
                    string ItemNo=drTaskCrane["ITEM_NO"].ToString();
                    //正常1,2楼出库、1楼盘点移库(非同巷道)
                    if (TaskType.Substring(1, 1) == "2" || (TaskType == "13" && ItemNo == "1") || (TaskType == "14" && ItemNo == "1" && drTaskCrane["CRANE_NO"].ToString() != drTaskCrane["NEW_CRANE_NO"].ToString()))
                    {
                        //读取出库站台有无货物,如有直接返回
                        object t = ObjectUtil.GetObject(WriteToService(drTaskCrane["SERVICE_NAME"].ToString(), drTaskCrane["ITEM_NAME_1"].ToString()));//读取当前出库站台是否有货位
                        if (t.ToString() != "0")
                        {
                            blnSend = false;
                            return blnSend;
                        }
                    }
                    //出库任务,以堆垛机为第一步路线
                    if (ItemNo == "1")
                    {
                        //产生TASK_DETAIL明细,并返回TASKNO
                        string strTaskDetailNo = dal.InsertTaskDetail(drTaskCrane["TASK_ID"].ToString());

                        DataRow[] drs = dtCrane.Select(string.Format("TASK_ID='{0}'", drTaskCrane["TASK_ID"]));
                        if (drs.Length > 0)
                        {
                            drs[0].BeginEdit();
                            drs[0]["TASK_NO"] = strTaskDetailNo;
                            drs[0]["ASSIGNMENT_ID"] = strTaskDetailNo.PadLeft(8, '0');
                            drs[0].EndEdit();
                            dtCrane.AcceptChanges();
                        }
                    }
                    SendTelegramARQ(drTaskCrane, true);//发送报文
                    blnSend = true;
                }
            }

            return blnSend;
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 发送报文,并返回发送成功。
        /// </summary>
        /// <param name="CraneNo"></param>
        /// <param name="TaskID"></param>
        /// <returns></returns>
        private bool SendTelegram(string CraneNo, DataRow  drTaskID)
        {
            bool blnSend = false;
            //判断dCraneState[CraneNo] 是否空闲;
            if (!dCraneState.ContainsKey(CraneNo))
            {
                dCraneState.Add(CraneNo, "");
                SendTelegramCRQ(CraneNo);
            }

            if (string.IsNullOrEmpty(dCraneState[CraneNo]))  //等待堆垛机应答。
            {
                if (dCraneWait[CraneNo] == null && drTaskID != null)
                {
                    dCraneWait[CraneNo] = drTaskID;
                    return false;
                }
                return false;

            }
            if (dCraneState[CraneNo] == "1") //堆垛机正忙。
                return true;
            TaskDal dal = new TaskDal();
            DataRow drTaskCrane = null;
            if (drTaskID==null && dtCrane!=null) //出库任务调用堆垛机
            {
                //读取二楼出库站台是否有烟包,PLC
                //按照任务等级,任务时间,产品形态,
                DataRow[] drs = dtCrane.Select(string.Format("CRANE_NO='{0}' and STATE=0 and TASK_TYPE in ('12','22','13','14')", CraneNo), "TASK_LEVEL,TASK_DATE,BILL_NO,IS_MIX,PRODUCT_CODE,TASK_ID");
                for (int i = 0; i < drs.Length; i++)
                {
                    //判断能否出库
                    if (drs[i]["TASK_TYPE"].ToString() == "22") //二楼出库,判断能否出库
                    {
                        bool blnCan = dal.ProductCanToCar(drs[i]["FORDERBILLNO"].ToString(), drs[i]["FORDER"].ToString(), drs[i]["IS_MIX"].ToString());  //判断能否出库
                        if (!blnCan)
                            continue;
                    }
                    drTaskCrane=drs[i];
                    break;
                }

            }
            else  //根据任务编号发送报文。
            {
                drTaskCrane = drTaskID;
            }
            if (drTaskCrane != null)
            {
                if (dCraneState[CraneNo] == "0")
                {
                    string TaskType=drTaskCrane["TASK_TYPE"].ToString();
                    string ItemNo=drTaskCrane["ITEM_NO"].ToString();
                    if (TaskType.Substring(1, 1) == "2" || (TaskType.Substring(1, 1) == "3" && ItemNo == "1") || (TaskType.Substring(1, 1) == "4" && ItemNo == "1" && drTaskCrane["CRANE_NO"].ToString() != drTaskCrane["NEW_CRANE_NO"].ToString()))
                    {
                        object t = ObjectUtil.GetObject(WriteToService(drTaskCrane["SERVICE_NAME"].ToString(), drTaskCrane["ITEM_NAME_1"].ToString()));//读取当前出库站台是否有货位
                        if (t.ToString() != "0")
                        {
                            blnSend = false;
                            return blnSend;
                        }
                    }
                    if (drTaskCrane["ITEM_NO"].ToString() == "1")
                    {

                        string strTaskDetailNo = dal.InsertTaskDetail(drTaskCrane["TASK_ID"].ToString());

                        DataRow[] drs = dtCrane.Select(string.Format("TASK_ID='{0}'", drTaskCrane["TASK_ID"]));
                        if (drs.Length > 0)
                        {
                            drs[0].BeginEdit();
                            drs[0]["TASK_NO"] = strTaskDetailNo;
                            drs[0]["ASSIGNMENT_ID"] = strTaskDetailNo.PadLeft(8, '0');
                            drs[0].EndEdit();
                            dtCrane.AcceptChanges();
                        }
                    }
                    SendTelegramARQ(drTaskCrane, true);//发送报文
                    blnSend = true;
                }
            }

            return blnSend;
        }
Ejemplo n.º 5
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]));//���»�λ�������վ̨��

                     //���µ��ݿ�ʼ

                 }
             }
        }