Esempio n. 1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dt"></param>
        private void InsertdtCar(DataTable dt)
        {
            if (dtCar == null)
            {
                dtCar = new DataTable();
                dtCar = dt.Clone();
                DataColumn dcIndex = new DataColumn("Index", Type.GetType("System.Int16"));
                dtCar.Columns.Add(dcIndex);
            }
            if (dt.Rows.Count == 0)
                return;

            //插入

            //调用小车任务插入缓存表

            object[] obj = new object[dt.Columns.Count + 1];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow[] drsExist = dtCar.Select(string.Format("TASK_ID='{0}'", dt.Rows[i]["TASK_ID"]));
                if (drsExist.Length > 0)
                    continue;

                dt.Rows[i].ItemArray.CopyTo(obj, 0);
                obj[dt.Columns.Count] = OrderIndex + i;
                dtCar.Rows.Add(obj);

            }
            dtCar.AcceptChanges();
            DataRow[] drsTask = dtCar.Select(string.Format("TASK_ID='{0}'", dt.Rows[0]["TASK_ID"]));
            if (drsTask.Length > 0)
            {
                DataRow dr = drsTask[0];

                long CurPostion = 0;
                long ToPostion = 0;
                string FromStation = "";
                string ToStation = "";
                string TargetCode = "";
                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();
                }

                TaskDal dal = new TaskDal();

                DataTable dtorder = GetCarOrder(CurPostion);
                DataRow[] drsOrder = dtorder.Select("", "orderNo desc");
                for (int i = 0; i < drsOrder.Length; i++)
                {
                    if (drsOrder[i]["State"].ToString() == "0") //小车空闲
                    {
                        #region 小车空闲
                        if (dr["TASK_TYPE"].ToString() == "22")
                        {
                            ToPostion = -1;

                            //判断二楼能否出库
                            bool 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")
                                    {
                                        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)
                                            {
                                                ToPostion = long.Parse(dr["OUT_STATION_2_ADDRESS"].ToString());
                                                ToStation = dr["OUT_STATION_2"].ToString();
                                                TargetCode = "390";
                                            }
                                        }
                                    }
                                    else
                                    {
                                        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
                                        {
                                            objstate = int.Parse(ObjectUtil.GetObject(WriteToService("StockPLC_02", "02_1_370")).ToString());
                                            if (objstate == 0)
                                            {
                                                ToStation = dr["OUT_STATION_1"].ToString();
                                                ToPostion = long.Parse(dr["OUT_STATION_1_ADDRESS"].ToString());
                                                TargetCode = "370";
                                            }
                                        }
                                    }

                                    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", drsOrder[i]["WriteItem"].ToString() + "_1", WriteTaskValue);//任务号。
                            WriteToService("StockPLC_02", drsOrder[i]["WriteItem"].ToString() + "_2", WriteValue);//地址。
                            WriteToService("StockPLC_02", drsOrder[i]["WriteItem"].ToString() + "_3", b);
                            WriteToService("StockPLC_02", drsOrder[i]["WriteItem"].ToString() + "_4", 1);

                            dr.BeginEdit();
                            dr["CAR_NO"] = drsOrder[i]["CAR_NO"].ToString();
                            dr["STATE"] = 1;
                            dr.EndEdit();

                            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
                    }
                    else
                    {
                        #region 小车不空闲,但是目的地小于当前位置
                        if (int.Parse(drsOrder[i]["ToStation"].ToString()) < CurPostion) //小车不空闲,但是目的地小于当前位置
                        {
                            if (dtCar.Select(string.Format("STATE=0 and CAR_NO='{0}'", drsOrder[i]["CAR_NO"].ToString())).Length == 0) //判断当前小车,是否已经有分配未执行的任务,则给小车分配任务
                            {
                                //判断二楼能否出库
                                bool blnCan = false;
                                if (dr["TASK_TYPE"].ToString() == "21")
                                    blnCan = true;
                                else
                                    blnCan = dal.ProductCanToCar(dr["FORDERBILLNO"].ToString(), dr["FORDER"].ToString(), dr["IS_MIX"].ToString(), true, blnOutOrder);
                                if (blnCan)
                                {
                                    dr.BeginEdit();
                                    dr["CAR_NO"] = drsOrder[i]["CAR_NO"];
                                    dr["WriteItem"] = drsOrder[i]["WriteItem"];
                                    dr.EndEdit();
                                    break;
                                }
                            }
                        }
                        #endregion
                    }
                }
            }
        }
Esempio n. 2
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
            }
        }