using System.Runtime.InteropServices;
using System.Collections.Generic;

using System.Text;
using System.Data;
using System;
using System.Linq;
using CommLayerFactory;
using ICommLayer;
using DBFactory;
using CommonLib;

namespace WcfControlMonitorLib
{

    /// <summary>
    /// Creator:Richard.liu
    /// ¼à¿Øµ÷¶ÈÀà
    /// </summary>

    public class CControl
    {
        int StackMutexXCoor = 4800;
        int minStackMutexXCoor = 2400;
        int StackZeroXCoor = 1950;
        StringBuilder AheadDetectUnallow = new StringBuilder();//20110505
        StringBuilder sql = new StringBuilder();
        char[] dd = new char[1] { '.' };//20101124
        string[] DS;//20101124
        private Object thisLock = new Object();
        DBOperator dbo = CStaticClass.dbo;
        DBOperator dboM = CStaticClass.dboM;

        Model.MDevice devinfo;

        Model.MDevice devinfo11;//add by lyj 20180223
        Model.MDevice devinfodaocha;//add by lyj 20171124
        ISendDeviceOrder sdo;
        CCommonFunction ccf = new CCommonFunction();
        int _DeviceIdx = 0;//É豸Ë÷Òý
        int _routeID = 0;//·¾¶Î¨Ò»Ë÷Òý
        int _serialNumber = 0;//·¾¶ÉϵÄÉ豸·½ÏòÐÔÁ´±íµÄÐòºÅ
        int _ManageTaskIdx = 0;//µ÷¶ÈÈÎÎñË÷Òý
        int _ManageKindIdx = 0;//µ÷¶ÈÈÎÎñÀàÐÍ
        int _DeviceOrder = 0;//É豸ÃüÁî
        int _LockedState = 0;
        int _Associate = 0;
        int _ManTaskReserve = 0;
        string _AheadDetect = "";
        int _NumParam1 = 0;
        int _NumParam2 = 0;
        int _NumParam3 = 0;
        int _NumParam4 = 0;
        int _NumParam5 = 0;
        int _NumParam6 = 0;
        string _TxtParam = "-";
        int _DeviceKind = 0;
        int _OutsideAltDevice = 0;
        int _InsideAltDevice = 0;
        int _StartDevice = 0;
        int _EndDevice = 0;
        int _RouteKind = 0;

        //int _UseAwayFork = 1;
        int _AgvNo = 65535;
        string _CControlError = "";//¼à¿Øµ÷¶ÈÀà´íÎó˵Ã÷
        public string CControlError
        {
            get { return _CControlError; }
            set
            {
                _CControlError = value;
                RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", _CControlError);
                OnRefreshMonitor(rme);
            }
        }
        public static event CDataSourceChangeEventHandler DataChange;
        public static void OnDataChange(object sender, CDataChangeEventArgs e)
        {
            if (DataChange != null)
            {
                DataChange(sender, e);
            }
        }
        public static event RefreshMonitorEventHandler RefreshMonitor;
        public static void OnRefreshMonitor(RefreshMonitorEventArgs e)
        {
            if (RefreshMonitor != null)
            {
                RefreshMonitor(e);
            }
        }
        public CControl()
        {
            //dbo.Open();
        }
        //~CControl()
        //{
        //    dbo.Close();
        //}
        public void StartOrder()
        {
            //Ê×Ïȼì²âµÚÒ»¸öµ÷¶ÈÈÎÎñµ¥µÄ¡°µÚÒ»¸ö¡±£¨ËùÓÐÊ£ÏÂÖеĵÚÒ»¸ö£©É豸ÊÇ·ñ±»Õ¼Ó㬱»Õ¼ÓÃÔòÖ´ÐÐÏÂÒ»¸öµ÷¶ÈÈÎÎñµ¥£»
            //È»ºó¼ì²âµÚÒ»¸öÉ豸µÄF_AheadDetect¶¼ÊÇ·ñÂú×ãÌõ¼þ£¬²»Âú×㣬ÔòÖ´ÐÐÏÂÒ»¸öµ÷¶ÈÈÎÎñµ¥£»
            //×îºó¿ªÊ¼Ö´ÐÐʱ¼ì²éͬ²½ÔËÐеĹØÁªÉ豸F_AssociateDeviceIndex,×¼±¸¸ø¸ÃÉ豸·¢Ö¸Á
            //¸ü¸Ä×÷Òµ¼Ç¼µÄ״̬F_StatusΪ1,¸ü¸ÄÉ豸ΪռÓÃ״̬£¨T_Base_deviceµÄF_LockedState=É豸ָÁîµ¥£©
            //¸øµ÷¶ÈÈÎÎñ±í»ØÐ´µ÷¶ÈÈÎÎñIO_ControlµÄÕýÔÚÖ´ÐÐ״̬FSTATUS=1;T_Manage_TaskµÄÕýÔÚÖ´ÐÐ״̬FSTATUS=1
            //·¾¶Ã÷ϸ±íF_LockedDeviceIndexÀïµÄËùÓжÔÓ¦É豸Ë÷Òý¼ÓËø£¬µ«ÊǹØÁªÉ豸²»¼ÓËø
            StringBuilder taskkind = new StringBuilder();
            DataView dv = new DataView(); DataView dvM = new DataView();
            try
            {

                #region//20140604 ɽ¶«µçÁ¦£¬·¢ËÍÃüÁî֮ǰÏȼì²éÔÚ T_Base_Lane_Gate ±íÖÐF_Top ×Ö¶ÎÉèÖÃ1µÄ ÐУ¬·¢ËÍϽµÐźÅ
                //sql.Remove(0, sql.Length);
                //sql.Append(string.Format("select * from T_Base_Lane_Gate where F_Top = 1"));
                //dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //if (dv.Count > 0) // ÓÐû·¨ËÍϽµÐźŵÄվ̨
                //{
                //    string bb = dv[0]["F_LaneGateDeviceIndex"].ToString();
                //    string cc = "";
                //    int devicebyte = 0;
                //    if (bb.Length == 6)
                //    {
                //        cc = bb.Substring(0, 5);
                //    }
                //    else
                //    {
                //        cc = bb;
                //    }
                //    int.TryParse(cc, out devicebyte);
                //    if (CStaticClass.GetDevicePhotoelectric(devicebyte, 1) != 1) // ¼ì²â½ü²æÓлõÐźÅ
                //    {
                //        sdo = CommModeCreate.CreateSendDeviceOrder(Convert.ToInt32(dv[0]["F_LaneGateDeviceIndex"]));
                //        sdo.SendDeviceOrder(4, 0, 0, Convert.ToInt32(dv[0]["F_LaneGateDeviceIndex"]), 0); // ¸øÊäËÍ»ú·¢Ëͱê־λ4£¬¸´Î»ÃüÁ²»ÓÃÈÎÎñºÅ£¡
                //        sql.Remove(0, sql.Length);
                //        sql.Append(string.Format("update T_Base_Lane_Gate set F_Top = 0 where F_LaneGateDeviceIndex =  '{0}'", dv[0]["F_LaneGateDeviceIndex"].ToString()));
                //        dbo.ExceSQL(sql.ToString());
                //        CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "Ïò¶¥Éýվ̨·¢ËÍϽµÈÎÎñÍê³É:", dv[0]["F_LaneGateDeviceIndex"].ToString().Substring(0, 5), dv[0]["F_LaneGateDeviceIndex"].ToString() + ",F_Top£¬ÖÃλ0£¡");
                //    }
                //}

                #endregion//20140604

                if (CStaticClass.Order == true )
                {
                    taskkind.Append(" (F_ManageTaskKindIndex = 1 or F_ManageTaskKindIndex = 2 or F_ManageTaskKindIndex = 4) "); //µ÷¶ÈÈÎÎñÓëµ÷¶ÈÉú³ÉµÄ×Ô¶¯ÈÎÎñ

                }
                else
                {


                    return;
                }

                dvM = new DataView();

                char[] sep = new char[1] { '-' };

                //»ñµÃ¹ÜÀíµ¥¾Ý
                sql.Remove(0, sql.Length);
                //20120820
                sql.Append("SELECT DISTINCT F_ManageTaskIndex AS MIndex,F_MonitorTaskLevel,F_ManageTaskKindIndex,F_SplitTime FROM T_Monitor_Task where ").Append(
                    taskkind.ToString()).Append(" order by F_ManageTaskKindIndex desc, F_MonitorTaskLevel desc,F_SplitTime asc, F_ManageTaskIndex asc");//20120616

                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    for (int i = 0; i < dv.Count; i++)
                    {
                        try
                        {
                            //1£ºÌáȡÿ¸ö¹ÜÀíµ¥¾ÝµÄµÚÒ»¸öÉ豸ָÁî 
                            sql.Remove(0, sql.Length);
                            sql.Append("select top 1  min(F_MonitorIndex) as minMidx,f_status from T_Monitor_Task where ").Append(taskkind.ToString()).Append(" and F_ManageTaskIndex = ").Append(dv[i]["MIndex"]).Append(" GROUP BY F_MonitorIndex, F_Status");

                            dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dvM.Count > 0)
                            {//20110412

                                if (dvM[0]["F_Status"].ToString() == "0" && dvM[0]["minMidx"] != DBNull.Value)
                                {
                                    SendMonitorTask(Convert.ToInt32(dvM[0]["minMidx"]));

                                }
                                else
                                {
                                    continue;
                                }

                            }
                            else
                            {
                                continue;
                            }
                        }
                        catch (Exception ex)
                        {
                            CControlError = string.Format("·¢ËÍÃüÁîµ÷ÓÃStartOrderʱ£º{0}", ex.StackTrace + ex.Message);
                        }

                    }//forÓï¾ä½áÊø
                    //20091107



                    return;
                }// dv.Count > 0
                else
                {



                    return;
                }


            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                dv.Dispose();

                dvM.Dispose();
            }
        }
        /// <summary>
        /// Ìáȡÿ¸ö¹ÜÀíµ¥¾ÝµÄµÚÒ»¸öÉ豸ÊÇ·ñ±»Ëø¶¨,true±íʾ±»Ëø¶¨£»false±íʾ¿ÕÏÐ
        /// </summary>
        /// <param name="minMidx">µ÷¶ÈÈÎÎñºÅ</param>
        /// <returns>true±íʾ±»Ëø¶¨£»false±íʾ¿ÕÏÐ</returns>
        public bool GetFirstDeviceIFLocked(int minMidx, bool checkLockedstate)
        {
            char[] sep = new char[1] { '-' };
            int msgIdx = 0;//ÏûÏ¢±àºÅ
            int adidx = 0;//¹ØÁªÉ豸µÄÉ豸ָÁîË÷Òý
            DataView dv = new DataView();
            try
            {

                //»ñµÃÒª·¢Ë͵ÄÐÅÏ¢
                if (GetSendInfo(minMidx) == false)
                {//20120420
                    return true;
                }

                int DeviceIdx = _DeviceIdx;//É豸Ë÷Òý
                int routeID = _routeID;//·¾¶Î¨Ò»Ë÷Òý
                int serialNumber = _serialNumber;//·¾¶ÉϵÄÉ豸·½ÏòÐÔÁ´±íµÄÐòºÅ
                int ManageTaskIdx = _ManageTaskIdx;//µ÷¶ÈÈÎÎñË÷Òý
                int ManageKindIdx = _ManageKindIdx;//µ÷¶ÈÈÎÎñÀàÐÍ
                int DeviceOrder = _DeviceOrder;//É豸ÃüÁî
                int LockedState = _LockedState;
                int Associate = _Associate;
                int ManTaskReserve = _ManTaskReserve;
                string AheadDetect = _AheadDetect;
                int NumParam1 = _NumParam1;
                int NumParam2 = _NumParam2;
                int NumParam3 = _NumParam3;
                int NumParam4 = _NumParam4;
                int NumParam5 = _NumParam5;
                int NumParam6 = _NumParam6;
                string TxtParam = _TxtParam;
                int DeviceKind = _DeviceKind;
                int OutsideAltDevice = _OutsideAltDevice;
                int InsideAltDevice = _InsideAltDevice;
                int StartDevice = _StartDevice;
                int EndDevice = _EndDevice;
                int RouteKind = _RouteKind;
                int AgvNo = _AgvNo;

                #region É豸¹ÊÕÏʱÊÇ·ñ×Ô¶¯¸ÄµÀ

                if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1")
                {//20100108
                    #region Ö»Õë¶ÔÓëRGVÓйصÄÎå¸ö¶¯×÷ÅжϸÄ·¾¶
                    //20100108 ÊäËÍ»úµÄ½Ó»õ¶Ô½ÓÖ¸Áî²»²ÎÓë¸ÄµÀ
                    if ((_DeviceKind == 4) || ((_DeviceKind == 2) && ((_DeviceOrder == 3))) && (RouteKind != 3))
                    {
                        bool IfModify = false, IfUseNegativeDevice = false;//20100610
                        //20091102 RGVµÄµÚÒ»¸ö±»Ìáǰ´¥·¢µÄÔ˶¯Ö¸Áî²»ÐèÒª¸ü¸Ä·¾¶
                        if ((_DeviceKind == 4) && (_DeviceOrder == 7) &&
                            (ccf.GetSerialNumberFromRouteDevice(_routeID, _DeviceIdx) >
                            ccf.GetSerialNumberFromRouteDevice(_routeID, _NumParam1)))
                        {
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT MIN(F_MonitorIndex) AS mmi FROM dbo.T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(ManageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)");
                            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dv.Count > 0)
                            {
                                //20091218

                                if ((dv[0]["mmi"] != DBNull.Value) && (dv[0]["mmi"].ToString() == minMidx.ToString()))
                                {
                                    IfModify = true;
                                    IfUseNegativeDevice = true;//20100610
                                }
                            }

                        }
                        else if ((_DeviceKind == 4) && ((_DeviceOrder == 3) || (_DeviceOrder == 5)))
                        {//20100108¶Ô´©Ëó³µËÍ»õ¶Ô½ÓÓ¦¸Ã¼ÓÓÚÏÞÖÆ£¬ÔØ»õ£¬¿ÕÏÐ
                            devinfo = Model.CGetInfo.DeviceInfo[DeviceIdx];
                            if ((devinfo.RunState == 0) && (devinfo.HaveGoods == true))
                            {
                                IfModify = true;
                                IfUseNegativeDevice = false;//20100610
                            }
                            devinfo = null;
                        }
                        else
                        {
                            IfModify = true;
                            IfUseNegativeDevice = true;//20100610

                        }
                        if (IfModify == true)
                        {
                            int altsn = ccf.GetSerialNumberFromRouteDevice(_routeID, _OutsideAltDevice);
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT F_SerialNumber FROM T_Base_Device,T_Base_Route_Device,T_Base_Device_State where ").Append(
                            " T_Base_Device.F_DeviceIndex = T_Base_Route_Device.F_DeviceIndex and F_ErrorCode =F_DeviceErrorIndex and ").Append(
                            " T_Base_Device_State.F_DeviceKindIndex = T_Base_Device.F_DeviceKindIndex AND T_Base_Device.F_ErrorCode > 0 AND ").Append(
                            " T_Base_Route_Device.F_SerialNumber > ").Append(_serialNumber).Append(" AND T_Base_Route_Device.F_SerialNumber > ").Append(
                            altsn).Append(" AND T_Base_Route_Device.F_RouteIDSub = ").Append(_routeID).Append(" and F_ErrorLevel=2 ");
                            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dv.Count > 0)
                            {
                                //ÅжÏÄÜ·ñ¸ÄµÀ;Ïò¹ÜÀíÉêÇë¸ÄµÀ;°ÑManageTaskIdx£¬ManageKindIdx µÄµ÷¶ÈÈÎÎñÈ«²¿ÉêÇë¸ÄµÀ
                                if (GetUsableDestination(_ManageTaskIdx, _ManageKindIdx) == true)
                                {

                                    return true;
                                }
                            }
                            #region RGVÄ¿±êλÖñ»Õ¼ÓÃÐèÒªÉêÇë¸ÄµÀ
                            //20100610
                            devinfo = null;
                            if (_DeviceKind == 4)
                            {//RGV
                                devinfo = Model.CGetInfo.GetDeviceInfo(CDisassembleTask.GetNextDevice(_routeID, _serialNumber)[0]);
                            }
                            else
                            {//ÊäËÍ»úËÍ»õ
                                devinfo = Model.CGetInfo.GetDeviceInfo(CDisassembleTask.GetNextDevice(_routeID, _serialNumber)[0]);//RGV
                                int sn = 0;
                                if (devinfo != null)
                                {
                                    sn = ccf.GetSerialNumberFromRouteDevice(_routeID, devinfo.DeviceIndex);
                                }
                                devinfo = Model.CGetInfo.GetDeviceInfo(CDisassembleTask.GetNextDevice(_routeID, sn)[0]);//½Ó»õÊäËÍ»ú

                            }
                            if (devinfo != null)
                            {
                                if (devinfo.HaveGoods == true)
                                {//Ä¿±êλÖñ»Õ¼Óã¬ÉêÇë¸ÄµÀ
                                    if (GetRGVIdleDestination(_ManageTaskIdx, _ManageKindIdx, devinfo.DeviceIndex, IfUseNegativeDevice) == true)
                                    {
                                        return true;
                                    }
                                }
                            }
                            #endregion
                        }

                    }
                    #endregion

                }

                #endregion

                if (DeviceKind == 6)
                {//20100512 AGV
                    #region AGV

                    if (AgvNo != 65535)//Èç¹ûÊÇÒѾ­·ÖÅä³µºÅµÄAGVÃüÁ¼ì²éÕâ¸ö³µºÅ¶ÔÓ¦µÄÉ豸Ë÷ÒýÊÇ·ñ±»Ëø¶¨
                    {
                        LockedState = Convert.ToInt32(dbo.GetSingle("SELECT F_LockedState FROM T_Base_Device where F_DeviceIndex=" + (DeviceIdx + AgvNo) + ""));
                        if (LockedState > 0) return true;
                    }
                    if (AheadDetectOK(minMidx, _AheadDetect) == true)//Ìáǰ¼ì²âͨ¹ý
                    {
                        #region Ë«²æAGV¼ì²â£¬ÄÜͬ²½µÄ¹ØÁªÈÎÎñÊÇ·ñAheadDetectOK
                        //20100323
                        devinfo = Model.CGetInfo.GetDeviceInfo(_DeviceIdx);
                        if (devinfo.IfCorrelDoubleFork == "1")
                        {
                            int[] synctask = Model.CGeneralFunction.MutiForkIfSync(minMidx, _DeviceIdx, _DeviceKind);
                            if (synctask != null)//20120616
                            {
                                if ((synctask.GetLength(0) == 1) && (synctask[0] == minMidx)) return true;//20120616µÈ´ýδ²ð·ÖµÄ¿Éͬ²½Ö´ÐеÄÈÎÎñ
                                string[] df = null;
                                Dictionary<int, string[]> mforkmonitorinfo = Model.CGeneralFunction.GetDoubleForkMonitorInfo(minMidx, _DeviceIdx);
                                foreach (int i in mforkmonitorinfo.Keys)
                                {
                                    df = mforkmonitorinfo[i];
                                    if (df != null)
                                    {
                                        if (AheadDetectOK(Convert.ToInt32(df[0]), df[1]) == false)//¶à²æ¹ØÁªÌáǰ¼ì²âʧ°Ü
                                        {
                                            return true;
                                        }
                                        #region ¹ØÁªÖ¸Áî²»ÊǵÚÒ»¸öÖ¸Áî²»ÄÜ·¢ËÍ
                                        int rmankind = Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(Convert.ToInt32(df[0]));
                                        long rman = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(Convert.ToInt32(df[0]));
                                        sql.Remove(0, sql.Length);
                                        sql.Append("SELECT MIN(F_MonitorIndex) AS mmi FROM dbo.T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(rman).Append(") AND (F_ManageTASKKINDINDEX = ").Append(rmankind).Append(")");
                                        dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dv.Count > 0)
                                        {
                                            if ((dv[0]["mmi"] != DBNull.Value) && (dv[0]["mmi"].ToString() != df[0]))
                                            {
                                                return true;
                                            }
                                        }
                                        #endregion
                                    }
                                }
                            }

                        }
                        #endregion

                        return false;
                    }
                    else
                    {
                        return true;
                    }

                    #endregion
                }
                else
                {//·ÇAGVÉ豸£ºÊäËÍ»ú¡¢¶Ñ¶â»ú¡¢RGVµÈ
                    #region ·ÇAGVÉ豸£ºÊäËÍ»ú¡¢¶Ñ¶â»ú¡¢RGVµÈ

                    //µÚÒ»¸öÉ豸ÊÇ·ñ±»Õ¼Óã¬RGVºÍ¶Ñ¶â»úÒª¿¼ÂÇ·Ö²½¿ØÖÆÊ±£¬Ã»Ö´ÐÐÍêÁ¬Ðø¶¯×÷ʱ²»½ÓÊÜеĵ÷¶ÈÈÎÎñ

                    if (((_LockedState == 0) && (checkLockedstate == true)) || (checkLockedstate == false))
                    {

                        #region ¼ì²éRGV¡¢¶Ñ¶â»úµÈÊÇ·ñ±»µ÷¶ÈÈÎÎñÔ¤Ô¼F_ManTaskReserve

                        if (_ManTaskReserve > 0)
                        {
                            devinfo = Model.CGetInfo.GetDeviceInfo(_DeviceIdx);
                            if (devinfo.IfCorrelDoubleFork == "1")
                            {
                                #region ¶à²æ¹ØÁª
                                Dictionary<int, string[]> mforkmonInfo = Model.CGeneralFunction.GetDoubleForkMonitorInfo(minMidx, _DeviceIdx);
                                bool iftrue = true;
                                int relfid = ccf.GetRELATIVECONTORLIDFromManageTask(_ManageKindIdx, _ManageTaskIdx);

                                if (_ManTaskReserve.ToString() == _ManageKindIdx.ToString() + _ManageTaskIdx.ToString())
                                {
                                    iftrue = false;
                                }
                                else
                                {
                                    if (relfid > 0)
                                    {//20130704
                                        dv = dbo.ExceSQL(string.Format("SELECT FID FROM  T_Manage_Task where F_RELATIVECONTORLID={0} and F_ManageTaskKindIndex={1}", relfid, _ManageKindIdx)).Tables[0].DefaultView;
                                        for (int mt = 0; mt < dv.Count; mt++)
                                        {
                                            if (_ManTaskReserve.ToString() == _ManageKindIdx.ToString() + dv[mt]["FID"].ToString())
                                            {
                                                iftrue = false;
                                            }
                                        }
                                    }
                                }
                                if (iftrue == true)
                                {
                                    UpdateAheadDetectUnallow(new StringBuilder(_DeviceIdx.ToString() + "±»ÈÎÎñÔ¤Ô¼" + _ManTaskReserve.ToString().Substring(1)), minMidx);
                                    return true;
                                }
                                #endregion
                            }
                            else
                            {
                                
                                if (devinfo.DeviceKind == 1 || devinfo.DeviceKind == 4)//ÉϺ£êɵú´Ë´¦ÔÝʱ¹âÅжϴ©Ëó°æºÍ´©Ëó³µ
                                {
                                    if (_ManTaskReserve.ToString() != _ManageKindIdx.ToString() + _ManageTaskIdx.ToString())
                                    {
                                        UpdateAheadDetectUnallow(new StringBuilder(_DeviceIdx.ToString() + "±»ÈÎÎñÔ¤Ô¼" + _ManTaskReserve.ToString().Substring(1)), minMidx);
                                        return true;
                                    }
                                }
                            }

                        }


                        #endregion

                        //3£ºF_AheadDetect¼ì²â(¼ì²â¿ª¹Ø±àºÅ×é¡°;¡±)
                        if (AheadDetectOK(minMidx, _AheadDetect) == true)//Ìáǰ¼ì²âͨ¹ý 

                        //      if(true)
                        {
                            devinfo = Model.CGetInfo.GetDeviceInfo(_DeviceIdx);
                            if (_DeviceIdx == devinfo.VirtualStack)
                            {//20111020
                                AssignStackNo(_DeviceIdx, minMidx, ManageKindIdx, ManageTaskIdx);
                                return true;//20120906

                            }
                            #region ¶à²æ¶Ñ¶â»ú¼ì²â£¬ÄÜͬ²½µÄDoubleForkÊÇ·ñAheadDetectOK
                            //20100323
                            devinfo = Model.CGetInfo.GetDeviceInfo(_DeviceIdx);
                            if (devinfo.IfCorrelDoubleFork == "1" && devinfo.DeviceKind == 1)
                            {
                                int[] synctask = Model.CGeneralFunction.MutiForkIfSync(minMidx, _DeviceIdx, _DeviceKind);
                                if (synctask != null)//20120616
                                {
                                    if ((synctask.GetLength(0) == 1) && (synctask[0] == minMidx)) return true;//20120616µÈ´ýδ²ð·ÖµÄ¿Éͬ²½Ö´ÐеÄÈÎÎñ
                                    string[] df = null;
                                    Dictionary<int, string[]> mforkmonitorinfo = Model.CGeneralFunction.GetDoubleForkMonitorInfo(minMidx, _DeviceIdx);
                                    foreach (int i in mforkmonitorinfo.Keys)
                                    {
                                        if (Array.IndexOf<int>(synctask, i) >= 0)
                                        {//20120906
                                            df = mforkmonitorinfo[i];
                                            if (df != null)
                                            {
                                                if (AheadDetectOK(Convert.ToInt32(df[0]), df[1]) == false)//¶à²æ¹ØÁªÌáǰ¼ì²âʧ°Ü
                                                {
                                                    return true;
                                                }
                                                #region ¹ØÁªÖ¸Áî²»ÊǵÚÒ»¸öÖ¸Áî²»ÄÜ·¢ËÍ
                                                int rmankind = Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(Convert.ToInt32(df[0]));
                                                long rman = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(Convert.ToInt32(df[0]));
                                                sql.Remove(0, sql.Length);
                                                sql.Append("SELECT MIN(F_MonitorIndex) AS mmi FROM dbo.T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(rman).Append(") AND (F_ManageTASKKINDINDEX = ").Append(rmankind).Append(")");
                                                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                                if (dv.Count > 0)
                                                {
                                                    if ((dv[0]["mmi"] != DBNull.Value) && (dv[0]["mmi"].ToString() != df[0]))
                                                    {
                                                        return true;
                                                    }
                                                }
                                                #endregion
                                            }
                                        }
                                    }
                                }

                            }
                            #endregion

                            //¼ì²éͬ²½ÔËÐеĹØÁªÉ豸F_AssociateDeviceIndex
                            //4£ºÊÇ·ñÓйØÁªÉ豸ÃüÁ
                            #region ÊÇ·ñÓйØÁªÉ豸ÃüÁî

                            //AssociateDevice = ccf.GetAssociateDevice(minMidx);
                            if (_Associate != 0)
                            {
                                //5£ºÈç¹ûÓУ¬ÕÒµ½¿ÉÒÔÔËÐеĹØÁªÉ豸µÄÉ豸ָÁî,ÄÜ·ñÔËÐУ¿
                                //ÖØ¸´µÝ¹éµ½2
                                //split = AssociateDevice.Split(sep);
                                adidx = _Associate;
                                if (adidx != 0)
                                {
                                    #region ÓйØÁªÈÎÎñ

                                    if (ccf.GetAssociateMonitor(minMidx) == 0)
                                    {
                                        RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "É豸ָÁ" + minMidx.ToString() + "ÎÞ·¨»ñµÃ¹ØÁªÈÎÎñ" + adidx.ToString() + "£¬²»ÄÜ·¢ËÍ´ËÀàÃüÁ");
                                        OnRefreshMonitor(rmea);
                                        return true;
                                    }
                                    if (GetFirstDeviceIFLocked(adidx, false) == false)
                                    {
                                        //6£º·¢Ë͹ØÁªÉ豸ÃüÁî
                                        //CStaticClass.MessageIndex++;
                                        CStaticClass.MessageIndex = 1;
                                        msgIdx = (CStaticClass.MessageIndex);
                                        sdo = CommModeCreate.CreateSendDeviceOrder(_DeviceIdx);
                                        //ÅжÏÊÇ·ñΪ¶Ñ¶â»úÉ豸
                                        bool sendok;
                                        int[] gc = new int[6] { _NumParam2, _NumParam3, _NumParam1, _NumParam5, _NumParam6, _NumParam4 }; //ccf.GetCoordinatesFromMonitorTask(adidx);//»ñµÃ×ø±ê

                                        if ((_DeviceKind == 1) || (_DeviceKind == 6))
                                        {

                                            //1£º¶Ñ¶â»ú£»4£ºRGV£»6£ºAGVÈç¹ûÐèÒªÓÅ»¯µ÷¶È£¨É豸±íµÄF_NeedOptimize='1'£©
                                            //Ö±½ÓдÈë±í£ºT_Monitor_Task_Child£¬²»·¢ËÍÃüÁî
                                            if (ccf.NeedOptimize(_DeviceIdx) == true)
                                            {
                                                ccf.InsertMonitorOptimizeChildTask(adidx);
                                                sendok = true;
                                            }
                                            else
                                            {
                                                sendok = sdo.SendDeviceOrder(msgIdx, adidx, _DeviceOrder,
                                                    _DeviceIdx, gc[0], gc[1], gc[2], gc[3], gc[4], gc[5]);
                                            }

                                        }
                                        else if (_DeviceKind == 4)
                                        {
                                            if (ccf.NeedOptimize(_DeviceIdx) == true)
                                            {
                                                ccf.InsertMonitorOptimizeChildTask(adidx);
                                                sendok = true;
                                            }
                                            else
                                            {
                                                sendok = sdo.SendDeviceOrder(msgIdx, adidx, _DeviceOrder, _DeviceIdx, gc[2]);
                                            }

                                        }
                                        else
                                        {
                                            sendok = sdo.SendDeviceOrder(msgIdx, adidx, _DeviceOrder, _DeviceIdx, gc[5]);
                                        }
                                        if (sendok == false)
                                        {
                                            return true;
                                        }
                                        else
                                        {
                                            //8£º¸ü¸Ä×÷Òµ¼Ç¼µÄ״̬F_StatusΪ1,¸ü¸ÄÉ豸ΪռÓÃ״̬£¨T_Base_deviceµÄF_LockedState=É豸ָÁîµ¥£©
                                            sql.Remove(0, sql.Length);
                                            sql.Append("update T_Monitor_Task set F_StartTime='").Append(DateTime.Now.ToString("u")).Append("',F_Status='1' where F_MonitorIndex=").Append(adidx);
                                            dbo.ExceSQL(sql.ToString());


                                            //·µ»Øµ½Ô­À´É豸ֵ
                                            _DeviceIdx = DeviceIdx;//É豸Ë÷Òý
                                            _routeID = routeID;//·¾¶Î¨Ò»Ë÷Òý
                                            _serialNumber = serialNumber;//·¾¶ÉϵÄÉ豸·½ÏòÐÔÁ´±íµÄÐòºÅ
                                            _ManageTaskIdx = ManageTaskIdx;//µ÷¶ÈÈÎÎñË÷Òý
                                            _ManageKindIdx = ManageKindIdx;//µ÷¶ÈÈÎÎñÀàÐÍ
                                            _DeviceOrder = DeviceOrder;//É豸ÃüÁî
                                            _LockedState = LockedState;
                                            _Associate = Associate;
                                            _ManTaskReserve = ManTaskReserve;
                                            _AheadDetect = AheadDetect;
                                            _NumParam1 = NumParam1;
                                            _NumParam2 = NumParam2;
                                            _NumParam3 = NumParam3;
                                            _NumParam4 = NumParam4;
                                            _NumParam5 = NumParam5;
                                            _NumParam6 = NumParam6;
                                            _TxtParam = TxtParam;
                                            _DeviceKind = DeviceKind;
                                            _OutsideAltDevice = OutsideAltDevice;
                                            _InsideAltDevice = InsideAltDevice;
                                            _StartDevice = StartDevice;
                                            _EndDevice = EndDevice;
                                            _RouteKind = RouteKind;
                                            _AgvNo = AgvNo;
                                            return false;
                                        }


                                    }
                                    else
                                    {
                                        return true;
                                    }
                                    #endregion
                                }
                                else//
                                {
                                    #region MyRegion


                                    //·µ»Øµ½Ô­À´É豸ֵ
                                    _DeviceIdx = DeviceIdx;//É豸Ë÷Òý
                                    _routeID = routeID;//·¾¶Î¨Ò»Ë÷Òý
                                    _serialNumber = serialNumber;//·¾¶ÉϵÄÉ豸·½ÏòÐÔÁ´±íµÄÐòºÅ
                                    _ManageTaskIdx = ManageTaskIdx;//µ÷¶ÈÈÎÎñË÷Òý
                                    _ManageKindIdx = ManageKindIdx;//µ÷¶ÈÈÎÎñÀàÐÍ
                                    _DeviceOrder = DeviceOrder;//É豸ÃüÁî
                                    _LockedState = LockedState;
                                    _Associate = Associate;
                                    _ManTaskReserve = ManTaskReserve;
                                    _AheadDetect = AheadDetect;
                                    _NumParam1 = NumParam1;
                                    _NumParam2 = NumParam2;
                                    _NumParam3 = NumParam3;
                                    _NumParam4 = NumParam4;
                                    _NumParam5 = NumParam5;
                                    _NumParam6 = NumParam6;
                                    _TxtParam = TxtParam;
                                    _DeviceKind = DeviceKind;
                                    _OutsideAltDevice = OutsideAltDevice;
                                    _InsideAltDevice = InsideAltDevice;
                                    _StartDevice = StartDevice;
                                    _EndDevice = EndDevice;
                                    _RouteKind = RouteKind;
                                    #endregion
                                    CControlError = string.Format("²ð·Öµ÷¶ÈÈÎÎñµÃµ½µÄÉ豸ָÁîÓëÏêϸ·¾¶µÄ¼ìË÷µ½µÄ¹ØÁªÉ豸ָÁƥÅ䣬ϵͳ×÷ΪûÓйØÁªÉ豸ָÁî´¦Àí£¡");
                                    return false;
                                }

                            }
                            else
                            {
                                #region ·µ»Øµ½Ô­À´É豸ֵ

                                //·µ»Øµ½Ô­À´É豸ֵ
                                _DeviceIdx = DeviceIdx;//É豸Ë÷Òý
                                _routeID = routeID;//·¾¶Î¨Ò»Ë÷Òý
                                _serialNumber = serialNumber;//·¾¶ÉϵÄÉ豸·½ÏòÐÔÁ´±íµÄÐòºÅ
                                _ManageTaskIdx = ManageTaskIdx;//µ÷¶ÈÈÎÎñË÷Òý
                                _ManageKindIdx = ManageKindIdx;//µ÷¶ÈÈÎÎñÀàÐÍ
                                _DeviceOrder = DeviceOrder;//É豸ÃüÁî
                                _LockedState = LockedState;
                                _Associate = Associate;
                                _ManTaskReserve = ManTaskReserve;
                                _AheadDetect = AheadDetect;
                                _NumParam1 = NumParam1;
                                _NumParam2 = NumParam2;
                                _NumParam3 = NumParam3;
                                _NumParam4 = NumParam4;
                                _NumParam5 = NumParam5;
                                _NumParam6 = NumParam6;
                                _TxtParam = TxtParam;
                                _DeviceKind = DeviceKind;
                                _OutsideAltDevice = OutsideAltDevice;
                                _InsideAltDevice = InsideAltDevice;
                                _StartDevice = StartDevice;
                                _EndDevice = EndDevice;
                                _RouteKind = RouteKind;

                                #endregion
                                return false;
                            }

                            #endregion
                        }
                        else
                        {
                            #region ÉϺ£êɵú£¬19003ÌáÉý»úÈ¡»õʱ ÅÐ¶Ï Í¬²ãÊÇ·ñÒѾ­ÓÐ2¸öÒÔÉϵȴý·Ö³µµÄÈÎÎñ£¬ÇÒҪȥµÃ²ãÎÞ³µ Ïò¹ÜÀíÉêÇë¸ÄµÀ

                            if (DeviceIdx == 19003 && DeviceOrder == 2)
                            {
                                long fid = ccf.GetManageTaskIndexfromMonitor(minMidx);
                                int mti = ccf.GetManageTaskKindIndexFromMonitor(minMidx);
                                int endlayer = ccf.GetFEndLayerFromManageTask(mti, fid);
                                string barcode = ccf.GetBarCodeFromMonitor(minMidx);
                                sql.Remove(0, sql.Length);
                                sql.Append("SELECT * FROM SHUTTLE_POSITION  WHERE F_LaneOut=0 and F_Postion = ").Append(endlayer); //F_LaneOut=0 ±íʾ³µÔÚÏïµÀÀï ³µ»µÁËÒÆ³öÈ¥F_LaneOut=1
                                if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0) 
                                {
                                    //ÅжÏûÓе½´Ë²ãµÄ»»²ãÈÎÎñ »ò´Ó´Ë²ã³ö·¢µÄ»»²ãÈÎÎñ
                                    sql.Remove(0, sql.Length);
                                    sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5 AND ((FEndLayer = ").Append(endlayer).Append(") or  (FStartLayer = ").Append(endlayer).Append("))");
                                    if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
                                    {
                                        //ÓÐÁ½¸öÒÔÉÏÈë¿âÈÎÎñ ÇÒ³µÎª10000 ÖÕÖ¹²ãΪendlayer
                                        int stack = 10000;
                                        sql.Remove(0, sql.Length);
                                        sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 1 AND (FEndLayer = ").Append(endlayer).Append(") and  (FSTACK = ").Append(stack).Append(")");
                                        dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dv.Count > 1)
                                        {
                                            dbo.TransBegin(IsolationLevel.ReadCommitted);
                                            sql.Remove(0, sql.Length);
                                            sql.Append("delete  from T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(fid).Append(") and  (F_ManageTASKKINDINDEX = ").Append(mti).Append(")");
                                            dbo.ExceSQL(sql.ToString());


                                            sql.Remove(0, sql.Length);
                                            sql.Append("delete  from T_Manage_Task WHERE FCONTROLTASKTYPE = 1 AND (FID = ").Append(fid).Append(") and  (F_ManageTaskKindIndex = ").Append(mti).Append(")");
                                            dbo.ExceSQL(sql.ToString());
                                            if (mti == 1)
                                            {
                                                sql.Remove(0, sql.Length);
                                                sql.Append("update IO_CONTROL set CONTROL_STATUS=100 WHERE  (CONTROL_ID = ").Append(fid).Append(")");
                                                dboM.ExceSQL(sql.ToString()); //¸æËß¹ÜÀíÒª¸ÄµÀ100
                                            }

                                            CommonClassLib.CCarryConvert.WriteDarkCasket("Ìáǰ¼ì²âʱÌõÂë"+barcode,
                                            "×Ô¶¯É¾³ýÈÎÎñÏò¹ÜÀí¸ÄµÀcontrol_id:",
                                            fid.ToString(),
                                            "Åжϵ½ÒªÈ¥²ãÎÞ³µÇÒÓÐ2¸öÒÔÉÏδ·Ö³µÈÎÎñ" );


                                            dbo.TransCommit();


                                        }


                                    }
                                }

                            }

                            #endregion

                            return true;
                        }

                    }
                    else
                    {

                        return true;

                    }
                    #endregion
                }


            }
            catch (Exception ex)

            {
                dbo.TransRollback();
                CControlError = string.Format("·¢ËÍÃüÁîµ÷ÓÃGetFirstDeviceIFLockedʱ£º{0}", ex.StackTrace + ex.Message);

                return true;
            }
            finally
            {
                dv.Dispose();
            }
        }
        /// <summary>
        /// ¼ì²âÖ¸¶¨É豸ÃüÁîµÄÖ´ÐÐÏȾöÌõ¼þÊÇ·ñ³ÉÁ¢
        /// </summary>
        /// <param name="minMidx">¼à¿ØÎ¨Ò»Ë÷Òý</param>
        /// <returns>ÊÇ·ñ¼ì²âͨ¹ý£¬true±íʾÉ豸ִÐÐÃüÁîµÄÏȾöÌõ¼þ³ÉÁ¢</returns>
        public bool AheadDetectOK(int minMidx, string _AheadDetect)
        {
            AheadDetectUnallow.Remove(0, AheadDetectUnallow.Length);//20110505
            int[] States;
            string dtime = DateTime.Now.ToString("u");
            dtime = dtime.Substring(0, dtime.Length - 1);
            int DeviceIdx = _DeviceIdx;
            int TaskIdx = minMidx;
            long fid = ccf.GetManageTaskIndexfromMonitor(TaskIdx);
            int mti = ccf.GetManageTaskKindIndexFromMonitor(TaskIdx);
            int DeviceKind = ccf.GetDeviceKindIdx(DeviceIdx);//20100617
            int order = ccf.GetDeviceOrderFromMonitor(TaskIdx);
            int StartDevice = _StartDevice;//µ±Ç°µ÷¶ÈÈÎÎñÆðµã
            int EndDevice = _EndDevice;//µ±Ç°µ÷¶ÈÈÎÎñÖÕµã
            string BarCode = ccf.GetBarCodeFromMonitor(TaskIdx);
            #region ²¹³ä¶¥Éý»ú²»ÔÚ¸ßλµÄ¶¥ÉýÃüÁî
            //if ((DeviceIdx >= 35000) && (DeviceIdx <= 35003)&&(order ==4))
            //{//20120110²¹³ä¶¥Éý»ú²»ÔÚ¸ßλµÄ¶¥ÉýÃüÁî

            //    if (_AheadDetect.IndexOf("D-32036.6") >= 0)
            //    {
            //        if(CStaticClass.GetDevicePhotoelectric(32036,7)==1)
            //        {
            //            InsertUpDeviceUP(32036, mti, fid,minMidx);
            //        }
            //    }
            //    else if (_AheadDetect.IndexOf("D-32049.6") >= 0)
            //    {
            //        if (CStaticClass.GetDevicePhotoelectric(32049, 7) == 1)
            //        {
            //            InsertUpDeviceUP(32049, mti, fid, minMidx);
            //        }
            //    }
            //}
            #endregion
            //20100706
            devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIdx);
            if (ccf.GetBarCodeFromMonitor(minMidx) == "brbrbr")//±ÜÈÃÖ¸Áî¼ì²âÌõ¼þ20120110
            {
                int zc = 1, xc = 0;
                GetStackRunX_Zcoor(DeviceIdx, out xc, out zc);
                if (devinfo.RunState == 0 && xc == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            if (DeviceKind == 1 && order == 1)//»ØÔ­µã¼ì²âÌõ¼þ20120110
            {
                if (devinfo.RunState == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

            //¼ì²â(¼ì²â¿ª¹Ø±àºÅ×é¡°;¡±)
            DataView dv = new DataView();
            DataView dvdv = new DataView();
            DataView barcodeDV = new DataView();
            try
            {

                if (devinfo.CommType == "OPCClient")//20100706 Ö»ÓÐOPCClientͨѶÀàÐ͵ļì²éÉ豸״̬
                {
                    #region OPCͨѶÉ豸¼ì²âÉ豸ÊÇ·ñ¹ÊÕÏ


                    //        //gds = CommModeCreate.CreateGetDeviceState(DeviceIdx);
                    //        try
                    //        {
                    //            //States = gds.GetDeviceState(DeviceIdx, TaskIdx);//1Íê³É,2ÈÎÎñºÅ,5É豸ºÅ
                    //            if (DeviceKind == 13)
                    //            {
                    //                DeviceIdx = GetNowDevice(minMidx);
                    //            }
                    //            States = CStaticClass.GetDeviceState(DeviceIdx);

                    //        }
                    //        catch (Exception ex)
                    //        {//20110505
                    //            RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "Ìáǰ¼ì²âʱ£º" + ex.Message);
                    //            OnRefreshMonitor(rmea);
                    //            return false;
                    //        }
                    //        if (States == null)//û½ÓÊÕµ½Èκηµ»ØÖµ
                    //        {
                    //            RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "·¢ËÍÃüÁîʱ£¬Ìáǰ¼ì²âûÊÕµ½PLCÊý¾Ý£¡");
                    //            OnRefreshMonitor(rmea);

                    //            return false;
                    //        }

                    //        if (((States[1] == 1) || (States[1] >= 30)) && ((DeviceKind != 13) && (DeviceKind != 31)))//ÔËÐлòÕß¹ÊÕÏ
                    //        {
                    //            if (States[1] >= 30)
                    //            {
                    //                devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIdx);
                    //                int ErrId = States[1];
                    //                //20110505
                    //                errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(_DeviceKind.ToString() + States[1].ToString()));
                    //                AheadDetectUnallow.Append(DeviceIdx + "ÓйÊÕÏ£º" + errs.ErrorName);
                    //                //20090910
                    //                //Óйý¼Ç¼µÄ¹ÊÕÏÉ豸µÄÈÎÎñºÅ£¬²»ÔÙÖØ¸´´¦Àí
                    //                sql.Remove(0, sql.Length);
                    //                sql.Append("SELECT F_DeviceIndex FROM T_Base_Device where F_DeviceIndex=" ).Append( DeviceIdx ).Append( " and F_ErrorTaskNo=" ).Append( TaskIdx );
                    //                ;
                    //                dt = dbo.ExceSQL(sql.ToString()).Tables[0];
                    //                if (dt.Rows.Count >= 1)
                    //                {
                    //                    //20110505
                    //                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                    //                    return false;
                    //                }
                    //                //¼Ç¼·¢Éú¹ÊÕϵÄÉ豸ÕýÔÚÖ´ÐеÄÈÎÎñºÅ
                    //                sql.Remove(0, sql.Length);
                    //                sql.Append("update T_Base_Device set F_ErrorTaskNo= " ).Append( TaskIdx ).Append( "  where F_DeviceIndex= " ).Append( DeviceIdx);
                    //                dbo.ExceSQL(sql.ToString());

                    //                if (CStaticClass.IsEquals(devinfo.ReturnMessage, States, 2) == true) return false;

                    //                //if ((_DeviceKind == 2) || (_DeviceKind == 4))
                    //                //{//ÊäËÍ»ú¹ÊÕÏÇåÁã
                    //                //    sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx);
                    //                //    sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
                    //                //}
                    //                //if (_DeviceKind == 1) //¶Ñ¶â»ú¡¢RGV
                    //                //{

                    //                //    sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx);
                    //                //    sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
                    //                //}
                    //                //20110505
                    //                RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "É豸Ë÷Òý" + DeviceIdx + "ÓйÊÕÏ£º" + errs.ErrorName);
                    //                OnRefreshMonitor(rmea);
                    //                rmea = new RefreshMonitorEventArgs("notifyIcon1", "¾¯¸æ:" + devinfo.DeviceName + "," + DeviceIdx + "·¢Éú¹ÊÕÏ£º" + errs.ErrorName);
                    //                OnRefreshMonitor(rmea);

                    //                if (mti == 1)
                    //                {
                    //                    sql.Remove(0, sql.Length);
                    //                    sql.Append("update IO_Control set ERROR_TEXT='" ).Append( "×¼±¸Ö´ÐйÜÀíÈÎÎñʱ£º" ).Append( devinfo.DeviceName ).Append( "," ).Append( DeviceIdx ).Append( errs.ErrorName ).Append( "' where Control_ID=" ).Append( fid);
                    //                    dboM.ExceSQL(sql.ToString());
                    //                }
                    //                sql.Remove(0, sql.Length);
                    //                sql.Append("update T_Manage_Task set FERRORCODE='" ).Append( "×¼±¸Ö´ÐйÜÀíÈÎÎñʱ£º" ).Append( devinfo.DeviceName ).Append( "," ).Append( DeviceIdx ).Append( errs.ErrorName ).Append( "' where F_ManageTaskKindIndex=" ).Append( mti ).Append( " and FID=" ).Append( fid);
                    //                dbo.ExceSQL(sql.ToString());
                    //                CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null);
                    //                OnDataChange("·¢ËÍÖ¸ÁîÌáǰ¼ì²âʱ£¬",cea);


                    //            }
                    //            return false;
                    //        }
                    //        #endregion

                    //}
                    //else
                    //{
                    //    #region ÑÓ¼ª£º20100319 AGVµÄÖ¸Áî67£ºÔÊÐíAGV·Å²ÐÍÐʱ£¬Èç¹ûÓÐ1219µÄËͳöÖ¸Áî¡¢1220µÄÖ¸ÁîÕýÔÚÖ´ÐлòÕßÒÑ·¢ËÍ£¬Ìáǰ¼ì²âʧ°Ü£¬ÐèÒªµÈ´ý


                    //    //

                    //    //if (ccf.GetDeviceOrderFromMonitor(minMidx) == 67)
                    //    //{
                    //    //    dv = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = 1219) AND (F_DeviceCommandIndex = 6) AND (F_Status > 0)").Tables[0].DefaultView;
                    //    //    if (dv.Count > 0)
                    //    //    {
                    //    //        return false;
                    //    //    }
                    //    //    dv = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = 1220) AND (F_Status > 0)").Tables[0].DefaultView;
                    //    //    if (dv.Count > 0)
                    //    //    {
                    //    //        return false;
                    //    //    }
                    //    //}
                    #endregion
                }
                #region ¸ß¶ËÉ豸UÏßÕýÔÚÔËÐÐ×ÜÊý¿ØÖÆ
                //if ((DeviceKind == 13) && (order==6))
                //{//20120328
                //    int arrdevice = ccf.GetDeviceArrowFromMonitor(minMidx);
                //    int startdevice = ccf.GetDeviceStartFromMonitor(minMidx);
                //    object ob0 = dbo.GetSingle(string.Format("SELECT count(F_MonitorIndex) as UTaskCount FROM T_Monitor_Task where F_DeviceIndex={0} and F_DeviceCommandIndex={1} and F_Status>0", DeviceIdx, order));
                //    DataView dvu = dbo.ExceSQL(string.Format("SELECT F_MaxRunTask,F_OutputUDevice,F_InputUDevice FROM T_Base_UArea WHERE (F_UCODE = {0})", DeviceIdx)).Tables[0].DefaultView;
                //    if ((dvu.Count>0) && (ob0 != null))
                //    {
                //        if (arrdevice == Convert.ToInt32(dvu[0]["F_OutputUDevice"]))
                //        {
                //            //if (Convert.ToInt32(ob0) >= Convert.ToInt32(dvu[0]["F_MaxRunTask"]))
                //            //{
                //            //    AheadDetectUnallow.Append("UÏߣº" + DeviceIdx.ToString() + "ÕýÔÚÔËÐÐÈÎÎñÒѾ­³¬ÏÞ£¡");
                //            //    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            //    return false;
                //            //}

                //        }
                //        else
                //        {
                //            if ((Convert.ToInt32(ob0) >= (Convert.ToInt32(dvu[0]["F_MaxRunTask"]) - 2)) && (startdevice == Convert.ToInt32(dvu[0]["F_InputUDevice"])))
                //            {
                //                AheadDetectUnallow.Append("UÏߣº" + DeviceIdx.ToString() + "ÕýÔÚÔËÐÐÈÎÎñÒѾ­³¬ÏÞ£¡");
                //                UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //                return false;
                //            }
                //            if ((Convert.ToInt32(ob0) >= (Convert.ToInt32(dvu[0]["F_MaxRunTask"]) - 1)) && (startdevice != Convert.ToInt32(dvu[0]["F_InputUDevice"])))
                //            {
                //                //AheadDetectUnallow.Append("UÏߣº" + DeviceIdx.ToString() + "ÕýÔÚÔËÐÐÈÎÎñÒѾ­³¬ÏÞ£¡");
                //                //UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //                //return false;
                //            }
                //        }
                //    }


                //}
                #endregion




                #region Ìáǰ¼ì²âÐÅÏ¢´¦Àí
                if ((_AheadDetect != "") && (_AheadDetect != null))
                {


                    char[] cc = new char[1];
                    cc[0] = ';';
                    string[] AheadDetect = _AheadDetect.Split(cc);
                    string[] sp;

                    //ͨ¹ý³éÏóÀ๤³§»ñµÃIGetDeviceStateµÄÅÉÉúÀà
                    //IGetDeviceState GDS;
                    int s = 0;
                    //int[] sss;
                    int fs = 1;
                    //int[] fsss;
                    //ÌáÈ¡¹âµç¿ª¹ØË÷ÒýÖµ
                    int devk = 0;
                    if (CStaticClass.TestSendOrder == false) //µ±²âÊÔ·¢ËÍʱ²»½øÐÐÌáǰ¼ì²âµÄÅжÏ
                    {
                        for (int i = AheadDetect.GetLowerBound(0); i <= AheadDetect.GetUpperBound(0); i++)
                        {
                            if (AheadDetect[i].Trim().Length <= 0) continue;
                            #region ¼ì²âÂß¼­ÓÐ̽Îï

                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "H")//¼ì²âÂß¼­ÓÐ̽Îï
                            {
                                devk = ccf.GetDeviceKindIdx(Convert.ToInt32(AheadDetect[i].Trim().Substring(1)));
                                if (devk == 9)
                                {//»ų́ÐèÒª´Ó¹ÜÀíÉ豸±í¶ÁÈ¡
                                    //sql.Remove(0, sql.Length);
                                    //sql.Append("SELECT FID FROM T_ITEMDEVICESTATION WHERE (FCODE = '" ).Append( AheadDetect[i].Trim().Substring(1) ).Append( "') AND (FSTATUS = '1002')");
                                    //if (dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
                                    //{
                                    //    fs = fs & 1;
                                    //}
                                    //else
                                    //{
                                    //    fs = fs & 0;
                                    //}
                                }
                                else
                                {
                                    //±¾µØÉ豸±í¶ÁÈ¡
                                    sql.Remove(0, sql.Length);
                                    sql.Append("SELECT F_DeviceIndex, F_HaveGoods FROM T_Base_Device where F_DeviceIndex=").Append(
                                        Convert.ToInt32(AheadDetect[i].Trim().Substring(1)));
                                    dvdv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                    if (dvdv.Count > 0)
                                    {
                                        int havegoods = -1;
                                        if (Convert.ToInt32(dvdv[0]["F_HaveGoods"]) == 0)//20110505
                                        {
                                            havegoods = 0;
                                            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "É豸Âß¼­ÎÞÎ");
                                        }
                                        else
                                        {
                                            havegoods = 1;
                                        }
                                        fs = fs & havegoods;
                                    }
                                }
                                continue;
                            }

                            #endregion

                            #region ¼ì²âÂß¼­ÎÞ̽Îï

                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "N")//¼ì²âÂß¼­ÎÞ̽Îï
                            {
                                devk = ccf.GetDeviceKindIdx(Convert.ToInt32(AheadDetect[i].Trim().Substring(1)));
                                if (devk == 9)
                                {//»ų́ÐèÒª´Ó¹ÜÀíÉ豸±í¶ÁÈ¡;20101028¹ÜÀíÒÀÀµÈÎÎñ¿ØÖÆ»ų́µÄվ̨ÊÇ·ñÓÐÎï
                                    //if (dboM.ExceSQL("SELECT FID FROM T_ITEMDEVICESTATION WHERE (FCODE = '" + AheadDetect[i].Trim().Substring(1) + "') AND (FSTATUS = '1002')").Tables[0].DefaultView.Count > 0)
                                    //{
                                    //    fs = fs & 1;
                                    //}
                                    //else
                                    //{
                                    //    fs = fs & 0;
                                    //}
                                }
                                else
                                {
                                    //±¾µØÉ豸±í¶ÁÈ¡
                                    // 20140311 ÏÈÅжÏAheadDetect[i].Trim().Substring(1)³¤¶È£¬Èç¹ûÊÇ6룬½ØÈ¡Ç°5λ ɽ¶«
                                    string idev = string.Empty;
                                    if (AheadDetect[i].Trim().Substring(1).Length == 6)
                                    {
                                        idev = AheadDetect[i].Trim().Substring(1).Substring(0, 5);
                                    }
                                    else
                                    {
                                        idev = AheadDetect[i].Trim().Substring(1);
                                    }

                                    sql.Remove(0, sql.Length);
                                    sql.Append("SELECT F_DeviceIndex, F_HaveGoods FROM T_Base_Device where  F_DeviceIndex=").Append(
                                        Convert.ToInt32(idev));
                                    dvdv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                    if (dvdv.Count > 0)
                                    {
                                        if (Convert.ToInt32(dvdv[0]["F_HaveGoods"]) > 0)//20110505
                                        {
                                            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "É豸Âß¼­ÓÐÎ");
                                        }
                                        s = s + Convert.ToInt32(dvdv[0]["F_HaveGoods"]);
                                    }
                                }
                                continue;
                            }

                            #endregion

                            #region ¼ì²âÉ豸ÊÇ·ñ¿ÕÏÐ

                            //20090803¼ì²âÉ豸ÊÇ·ñ¿ÕÏÐidle
                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "I")//¼ì²âÉ豸ÊÇ·ñ¿ÕÏÐidle
                            {



                                int idev = Convert.ToInt32(AheadDetect[i].Trim().Substring(1));
                                if (idev.ToString().Length == 6)
                                {
                                    idev = Convert.ToInt32(idev.ToString().Substring(0, 5));
                                }
                                States = CStaticClass.GetDeviceState(idev);

                                #region 20210326_ÉϺ£êɵú£¬Èç¹û¼ì²â¿ÕÏÐÊdzöÈë¿âµÄÌáÉý»ú19003ºÍ19004£¬Í¬Ê±¼ì²âÊÇ·ñÓÐÕýÔÚÖ´ÐеĻ»²ãÈÎÎñ£¬Èç¹ûÓУ¬²»Ö´ÐÐ

                                //if ((idev == 19003 || idev == 19004) && DeviceIdx != 19005)
                                //{
                                //    sql.Remove(0, sql.Length);
                                //    sql.Append(
                                //        "SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5 AND FSTATUS <> 0");



                                //    if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
                                //    {
                                //        AheadDetectUnallow.Append("19005ÕýÔÚÖ´Ðл»²ãÈÎÎñ");
                                //        States[1] = 1;
                                //    }
                                //}

                                #endregion

                                if (States != null)
                                {
                                    if ((States[1] == 5) && (ccf.GetDeviceKindIdx(Convert.ToInt32(AheadDetect[i].Trim().Substring(1))) == 2))
                                    {//20120409Ö»ÓÐÊäËÍ»úµÄÍê³É¿É×÷Ϊ¿ÕÏÐ
                                        States[1] = 0;
                                    }
                                    if (DeviceHandTaskIfRun(Convert.ToInt32(AheadDetect[i].Trim().Substring(1))) == true)
                                    {//20120207
                                        AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "ÊÖ¹¤ÈÎÎñ»òÕß±ÜÈÃÈÎÎñÕýÔÚÔËÐУ¡");
                                        States[1] = 1;
                                    }
                                    if (States[1] != 0)//20110505
                                    {
                                        AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "É豸²»¿ÕÏУ¡");
                                    }
                                    s = s + States[1];
                                }
                                continue;
                            }

                            #endregion

                            #region ¼ì²âF_NumParam1£¬F_NumParam4É豸ÎÞÕýÔÚÔËÐеÄÈÎÎñ

                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "U")//¼ì²âF_NumParam1£¬F_NumParam4É豸ÎÞÕýÔÚÔËÐеÄÈÎÎñ
                            {
                                sql.Clear();
                                sql.Append(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_NumParam1 = {0} or F_NumParam4 = {0}) AND (F_Status > 0)", Convert.ToInt32(AheadDetect[i].Trim().Substring(1))));
                                dvdv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                if (dvdv.Count > 0)
                                {
                                    s = s + 1;
                                    AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "ÓÐÈÎÎñÕýÔÚÖ´ÐУ¡");
                                }
                                else
                                {
                                    s = s + 0;
                                }

                                continue;
                            }
                            #endregion

                            #region ¼ì²â»ý·ÅÏßÕýÔÚÖ´ÐÐÈÎÎñ¸öÊý

                            //if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "J")//¼ì²â»ý·ÅÏßÕýÔÚÖ´ÐÐÈÎÎñ¸öÊý£¨J12008,2£©
                            //{
                            //    cc[0] = ',';
                            //    sp = AheadDetect[i].Trim().Substring(1).Split(cc);
                            //    if (sp.GetLength(0) == 2)
                            //    {
                            //        sql.Clear();
                            //        sql.Append(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex={0}) AND (F_Status > 0)", Convert.ToInt32(sp[0])));
                            //        dvdv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            //        if (dvdv.Count >= Convert.ToInt32(sp[1]))
                            //        {
                            //            s = s + 1;
                            //            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "»ý·ÅÈÎÎñ³¬ÏÞ£¡");
                            //        }
                            //        else
                            //        {
                            //            s = s + 0;
                            //        }
                            //    }
                            //    continue;
                            //}

                            #endregion

                            //ÉϺ£êɵú³ö¿âË«Éì¹ÜÀí¿ØÖÆ ½üÈÎÎñÖ´ÐкóÔÙÏÂÔ¶ÈÎÎñ
                            #region êɵú¼ì²âË«Éý»õλÈë¿âÍâ²à»õλʱ£¬ÏµÍ³ÎÞδÍê³ÉµÄ¶ÔÓ¦µÄÀï²à»õλÈë¿âÈÎÎñ
                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "J")
                            {
                                long Index = ccf.GetManageTaskIndexfromMonitor(minMidx);
                                int Mk = ccf.GetManageTaskKindIndexFromMonitor(minMidx);
                                sql.Clear();
                                sql.Append(string.Format("SELECT FLANEWAY,FENDCELL,F_RELATIVECONTORLID FROM T_Manage_Task WHERE (FID = {0} and F_ManageTaskKindIndex={1} )", Index, Mk));
                                dvdv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                if (dvdv.Count > 0)
                                {
                                    if ((Convert.ToInt32(dvdv[0]["FENDCELL"].ToString().Substring(0, 2)) % 4 == 1) || (Convert.ToInt32(dvdv[0]["FENDCELL"].ToString().Substring(0, 2)) % 4 == 0))
                                    {
                                        s = s + 0;//Ô¶¶Ñ¶â»ú Ö±½ÓÈë
                                    }
                                    else//µ±Ç°½øÐеÄÊÇ Èë¿âÈ¡»õ¼ì²é
                                    {
                                        string ZZ = "";
                                        int ZZZ = 0;
                                        ZZZ = Convert.ToInt32(Convert.ToInt32(dvdv[0]["FENDCELL"].ToString().Substring(0, 2)));
                                        //if (Convert.ToInt32(dvdv[0]["FENDCELL"].ToString().Substring(0, 2)) % 4 == 2)
                                        //{
                                        //    ZZ = string.Format("{0:D2}", ZZZ - 1);
                                        //}
                                        //else 
                                        if (Convert.ToInt32(dvdv[0]["FENDCELL"].ToString().Substring(0, 2)) % 4 == 3)
                                        {
                                            ZZ = string.Format("{0:D2}", ZZZ + 1);
                                        }

                                        string cell = ZZ + dvdv[0]["FENDCELL"].ToString().Substring(2, (dvdv[0]["FENDCELL"].ToString().Length - 2));

                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM IO_CONTROL WHERE (END_DEVICE_CODE = '{0}'  and CONTROL_STATUS='0' )", cell));
                                        DataView dvdd = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvdd.Count > 0)
                                        {
                                            //¹ÜÀíϵͳÖÐÓÐδ»ñÈ¡µÄ
                                            s = s + 1;
                                            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "½ü¶â»úÈë/ÒÆ¿âÈ¡»õʱ¹ÜÀíÓÐÔ¶¶â»úÈÎÎñδ»ñÈ¡£¬Ô¶¶â»úÈÎÎñ»ñȡִÐкó²ÅÄÜÈ¡½ü¶â»ú£¡");
                                        }



                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE (FENDCELL = '{0}' and ((FCONTROLTASKTYPE =1)or (FCONTROLTASKTYPE =3)) )", cell));
                                        DataView dvda = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvda.Count == 1)//
                                        {
                                            //ÅжϸÃÈÎÎñÓÐÎÞ²ð·Ö
                                            if ((Convert.ToInt32(dvda[0]["FIntoStepOK"]) == 0))//δ²ð·Ö
                                            {
                                                s = s + 1;
                                                AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "½ü¶â»úÈë/ÒÆ¿âÈÎÎñÈ¡»õÓжÔÓ¦Ô¶¶â»úδ²ð·Ö£¡");
                                            }
                                            else//ÒѾ­²ð·ÖÈç¹û¶ÔÓ¦µÄ¶Ñ¶â»úÈ¡·ÅÖ¸Áî¶¼Íê³ÉÁ˾ͿÉÒÔͨ¹ý
                                            {

                                                // ½ðºÅÔö¼ÓÅÐ¶Ï Èç¹ûÊǹØÁªÈÎÎñ ¼ì²âÈÃÆäͨ¹ý 
                                                //if ((Convert.ToInt32(dvdv[0]["F_RELATIVECONTORLID"]) == Convert.ToInt32(dvda[0]["F_RELATIVECONTORLID"])) && (-1 != Convert.ToInt32(dvda[0]["F_RELATIVECONTORLID"])))
                                                //{
                                                //    s = s + 0;//¹ØÁªÈÎÎñ·ÅÐУ¬×îºó·¢ËÍʱÏÈ·¢Ô¶¶â»ú²à¼´¿É
                                                //}
                                                //else
                                                //{
                                                string[] split = new string[3];
                                                split = cell.Split('-');
                                                sql.Clear();
                                                sql.Append(string.Format("SELECT * FROM T_Monitor_Task WHERE (F_NumParam4 = {0} and  F_NumParam5 = {1} and  F_NumParam6 = {2} )", Convert.ToInt32(split[0]), Convert.ToInt32(split[1]), Convert.ToInt32(split[2])));
                                                DataView dvdb = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                                if (dvdb.Count > 0)//Ô¶¶â»úÈ¡·ÅÈÎÎñ»¹Î´Íê³É ¼ì²â²»ÄÜͨ¹ý
                                                {
                                                    s = s + 1;
                                                    AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "½ü¶â»úÈë/ÒÆ¿âÈÎÎñÈ¡»õÓжÔÓ¦Ô¶¶â»úÈë¿â»òÒÆ¿âδÍê³É£¡");
                                                }
                                                else
                                                {
                                                    s = s + 0;//Ô¶¶â»úÈ¡·ÅÈÎÎñÒѾ­×öÍê
                                                }
                                                //}

                                            }
                                        }
                                        else if (dvda.Count > 1)
                                        {
                                            s = s + 1;
                                            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "½ü¶â»úÈë/ÒÆ¿âÈÎÎñÈ¡»õÓжÔÓ¦ÖÁÉÙÁ½ÌõµÄÔ¶¶â»úÈë¿â»òÒÆ¿âδÍê³É£¡");
                                        }
                                        else
                                        {
                                            s = s + 0;//²¢Ã»ÓжÔÓ¦µÄÀï²àÅÅÈë¿âÈÎÎñ
                                        }
                                    }
                                }
                                else
                                {
                                    s = s + 0;
                                }

                                continue;
                            }
                            #endregion

                            #region êɵú¼ì²âË«Éý»õλ³ö¿â»òÕßÒÆ¿âÄÚ²â»õλʱ£¬ÏµÍ³ÖÐÎÞδÍê³ÉµÄ¶ÔÓ¦µÄÍâ²à»õλ³ö¿âÈÎÎñ

                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "M")//
                            {
                                long Index = ccf.GetManageTaskIndexfromMonitor(minMidx);
                                int Mk = ccf.GetManageTaskKindIndexFromMonitor(minMidx);
                                sql.Clear();
                                sql.Append(string.Format("SELECT FLANEWAY,FSTARTCELL,F_RELATIVECONTORLID FROM T_Manage_Task WHERE (FID = {0} and F_ManageTaskKindIndex={1} )", Index, Mk));
                                dvdv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                if (dvdv.Count > 0)
                                {

                                    if ((Convert.ToInt32(dvdv[0]["FSTARTCELL"].ToString().Substring(0, 2)) % 4 == 2) || (Convert.ToInt32(dvdv[0]["FSTARTCELL"].ToString().Substring(0, 2)) % 4 == 3))
                                    {
                                        s = s + 0;//½ü¶Ñ¶â»ú Ö±½Ó³ö
                                    }
                                    else //
                                    {
                                        string ZZ = "";
                                        int ZZZ = 0;
                                        ZZZ = Convert.ToInt32(Convert.ToInt32(dvdv[0]["FSTARTCELL"].ToString().Substring(0, 2)));
                                        //if (Convert.ToInt32(dvdv[0]["FSTARTCELL"].ToString().Substring(0, 2)) % 4 == 1)
                                        //{
                                        //    ZZ = string.Format("{0:D2}", ZZZ + 1);
                                        //}
                                        //else 
                                        if (Convert.ToInt32(dvdv[0]["FSTARTCELL"].ToString().Substring(0, 2)) % 4 == 0)
                                        {
                                            ZZ = string.Format("{0:D2}", ZZZ - 1);
                                        }

                                        string cell = ZZ + dvdv[0]["FSTARTCELL"].ToString().Substring(2, (dvdv[0]["FSTARTCELL"].ToString().Length - 2));

                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM IO_CONTROL WHERE (START_DEVICE_CODE = '{0}'  and CONTROL_STATUS='0' )", cell));
                                        DataView dvdd = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvdd.Count > 0)
                                        {
                                            //¹ÜÀíϵͳÖÐÓÐδ»ñÈ¡µÄ
                                            s = s + 1;
                                            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "Ô¶¶â»ú³ö/ÒÆ¿âÈ¡»õʱ¹ÜÀíÓнü¶â»úÈÎÎñδ»ñÈ¡£¬½ü¶â»úÈÎÎñ»ñȡִÐкó²ÅÄÜȡԶ¶â»ú£¡");
                                        }

                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE (FSTARTCELL = '{0}' and (FCONTROLTASKTYPE =2 or FCONTROLTASKTYPE =3) )", cell));
                                        DataView dvda = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvda.Count == 1)//ÓжÔÓ¦µÄ½ü¶â»ú³ö¿âºÍÒÆ¿âÈÎÎñ
                                        {
                                            //ÅжϸÃÈÎÎñÓÐÎÞ²ð·Ö
                                            if ((Convert.ToInt32(dvda[0]["FIntoStepOK"]) == 0))//ͬÖÕµãδ²ð·Ö
                                            {
                                                s = s + 1;
                                                AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "Ô¶¶â»ú³ö/ÒÆ¿âÈÎÎñÈ¡»õÓжÔÓ¦½ü¶â»úÈÎÎñδ²ð·Ö£¡");
                                            }
                                            else//²»Í¬ÖÕµãÒѾ­²ð·ÖÈç¹û¶ÔÓ¦µÄ¶Ñ¶â»úÈ¡·ÅÖ¸Áî¶¼Íê³ÉÁ˾ͿÉÒÔͨ¹ý
                                            {

                                                //// ½ðºÅÔö¼ÓÅÐ¶Ï Èç¹ûÊǹØÁªÈÎÎñ ¼ì²âÈÃÆäͨ¹ý 
                                                //if ((Convert.ToInt32(dvdv[0]["F_RELATIVECONTORLID"]) == Convert.ToInt32(dvda[0]["F_RELATIVECONTORLID"])) && (-1 != Convert.ToInt32(dvda[0]["F_RELATIVECONTORLID"])))
                                                //{
                                                //    s = s + 0;//¹ØÁªÈÎÎñ·ÅÐУ¬×îºó·¢ËÍʱÏÈ·¢½ü¶Ñ¶â»ú²à¼´¿É
                                                //}
                                                //else
                                                //{
                                                // ½ðºÅÔö¼ÓÅÐ¶Ï  ²»ÊǹØÁªÈÎÎñ²»ÄÜͨ¹ý
                                                string[] split = new string[3];
                                                split = cell.Split('-');
                                                sql.Clear();
                                                sql.Append(string.Format("SELECT * FROM T_Monitor_Task WHERE (F_NumParam1 = {0} and  F_NumParam2 = {1} and  F_NumParam3 = {2} )", Convert.ToInt32(split[0]), Convert.ToInt32(split[1]), Convert.ToInt32(split[2])));
                                                DataView dvdb = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                                if (dvdb.Count > 0)//½ü¶â»úÈ¡·ÅÈÎÎñ»¹Î´Íê³É ¼ì²â²»ÄÜͨ¹ý
                                                {

                                                    s = s + 1;
                                                    AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "Ô¶¶â»ú³ö/ÒÆ¿âÈÎÎñÈ¡»õÓжÔÓ¦½ü¶â»úÈÎÎñδÍê³É£¡");
                                                }
                                                else
                                                {
                                                    s = s + 0;//½ü¶â»úÈ¡·ÅÈÎÎñÒѾ­×öÍê
                                                }
                                                //}
                                            }

                                        }
                                        else if (dvda.Count > 1)
                                        {
                                            s = s + 1;
                                            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "Ô¶¶â»ú³ö/ÒÆ¿âÈÎÎñÈ¡»õÓÐÁ½ÌõÒÔÉ϶ÔÓ¦½ü¶â»úÈÎÎñ£¬ÇëÈ˹¤¼ì²é£¡");
                                        }
                                        else
                                        {
                                            s = s + 0;//²¢Ã»ÓÐÆä¶ÔÓ¦µÄ ½ü¶â»úµÄδÍê³ÉµÄÈÎÎñ
                                        }
                                    }
                                }
                                else
                                {
                                    s = s + 0;
                                }

                                continue;
                            }
                            #endregion

                            #region ¼ì²âÉ豸ÊÇ·ñ±»¶Ñ¶â»úÔ¤Ô¼
                            //20120409
                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "R")//¼ì²âÉ豸ÊÇ·ñ±»¶Ñ¶â»úÔ¤Ô¼
                            {
                                sql.Remove(0, sql.Length);
                                sql.Append("select F_ManTaskReserve from  T_Base_Device where F_ManTaskReserve>0 and F_DeviceIndex=").Append(Convert.ToInt32(AheadDetect[i].Trim().Substring(1)));
                                object obr = dbo.GetSingle(sql.ToString());
                                if (obr != null)
                                {
                                    if (obr.ToString() != (mti.ToString() + fid.ToString()))
                                    {
                                        s = s + 1;
                                        AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "±»µ÷¶ÈÈÎÎñ:").Append(obr.ToString()).Append("Ô¤Ô¼£¡");
                                    }
                                    else
                                    {
                                        s = s + 0;
                                    }
                                }
                                continue;
                            }

                            #endregion

                            #region ¼ì²âÉ豸¹âµçÐźÅ

                            //¼ì²âÉ豸µÄ¹âµçÐźţºD-12001.0±íʾÊäËÍ»ú12001µÄÈë¿Ú¿ª¹ØÓÐÎD12001.1±íʾÊäËÍ»ú12001µÄÈë¿Ú¿ª¹ØÎÞÎï
                            //D-12001.2±íʾÊäËÍ»ú12001µÄ¶¥Éý¸ß루¸ßµ½Î»£©£»D12001.3±íʾÊäËÍ»ú12001µÄ¶¥Éý²»ÔÚµÍ루²»Êǵ͵½Î»£©
                            if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "D")
                            {
                                int devicebyte = 0, devbit = 0;
                                DS = AheadDetect[i].Trim().Substring(1).Split(dd);
                                int.TryParse(DS[0], out devicebyte);
                                int.TryParse(DS[1], out devbit);
                                //ÅжÏÊÇ·ñ¼ì²â¸ºÊýË÷ÒýÖµ£¨¸ºÊý´ú±íÊÇ·ñÂú×㿪¹ØÁ¿£½£±µÄÖ´ÐÐǰÌᣩ
                                if (devicebyte < 0)
                                {
                                    #region ¸ºÊý´ú±íֵΪ£±µÄ¿ª¹ØÁ¿¼ì²â

                                    int fsn = CStaticClass.GetDevicePhotoelectric(-devicebyte, devbit);//20101124

                                    if (fsn != 1)//20110505
                                    {
                                        StringBuilder kg = new StringBuilder();
                                        switch (devbit)
                                        {
                                            case 0:
                                                kg.Append(".0ÓÐÎï");
                                                break;
                                            case 1:
                                                kg.Append(".1ÓÐÎï/²æÎ´ÊÕµ½Î»");
                                                break;
                                            case 2:

                                                if (ccf.GetDeviceKindIdx(-devicebyte) == 31)
                                                {
                                                    kg.Append("¸ßλ");
                                                }
                                                else
                                                {
                                                    kg.Append(".2ÓÐÎï/²æÎ´É쵽λ");

                                                }
                                                break;
                                            case 3:
                                                kg.Append(".3µÍλ");

                                                break;
                                            case 4:
                                                kg.Append(".4¸ßλ");
                                                break;
                                            case 5:
                                                kg.Append("ÓÐÎï");
                                                break;
                                            case 6:
                                                kg.Append("¸ßλ");
                                                break;
                                            case 7:
                                                kg.Append("µÍλ");
                                                break;

                                            default:
                                                break;
                                        }
                                        AheadDetectUnallow.Append(Convert.ToInt32((-devicebyte)).ToString() + kg.ToString() + "¹âµç¿ª¹Ø²»ÕÚµ²£¡");
                                    }
                                    fs = fs & fsn;

                                    #endregion
                                }
                                else
                                {//
                                    #region ÕýÊýÖµ²»ÄÜΪ£±µÄ¿ª¹ØÁ¿¼ì²â

                                    int sssn = CStaticClass.GetDevicePhotoelectric(devicebyte, devbit);

                                    if (sssn != 0)//20110505
                                    {
                                        StringBuilder kg = new StringBuilder();
                                        switch (devbit)
                                        {
                                            case 0:
                                                kg.Append(".0ÓÐÎï");
                                                break;
                                            case 1:
                                                kg.Append(".1ÓÐÎï");
                                                break;
                                            case 2:

                                                if (ccf.GetDeviceKindIdx(devicebyte) == 31)
                                                {
                                                    kg.Append("¸ßλ");
                                                }
                                                else
                                                {
                                                    kg.Append(".2ÓÐÎï");

                                                }
                                                break;
                                            case 3:
                                                kg.Append(".3µÍλ");

                                                break;
                                            case 4:
                                                kg.Append(".4¸ßλ");
                                                break;
                                            case 5:
                                                kg.Append("ÓÐÎï");
                                                break;
                                            case 6:
                                                kg.Append("¸ßλ");
                                                break;
                                            case 7:
                                                kg.Append("µÍλ");
                                                break;
                                            default:
                                                break;
                                        }
                                        AheadDetectUnallow.Append(devicebyte.ToString() + kg.ToString() + "¹âµç¿ª¹ØÕÚµ²£¡");
                                    }
                                    s = s + sssn;
                                    #endregion
                                }


                            }

                            #endregion

                            #region ÉϺ£êɵú£¬¼ì²âÊÇ·ñÓгäµçËø

                            //if (AheadDetect[i].Trim().Substring(0, 1).ToUpper() == "C")
                            //{
                            //    sql.Remove(0, sql.Length);
                            //    sql.Append(
                            //            "select F_SwitchLock from  T_Base_Device where F_SwitchLock>0 and F_DeviceIndex=")
                            //        .Append(Convert.ToInt32(AheadDetect[i].Trim().Substring(1)));
                            //    object obr = dbo.GetSingle(sql.ToString());
                            //    if (obr != null)
                            //    {
                            //        if (obr.ToString() != (mti.ToString() + fid.ToString()))
                            //        {
                            //            //ÊÇ·ñ¿ÉÒÔÔÚ´Ë´¦Ç¿ÖÆÅжÏһϵçÁ¿ÒѾ­´óÓÚ50 Ç¿ÖÆ½âËø°Ñ³µµ÷×ߣ¬ÔÚËÍ»õ¹ý³ÌÖоÍ×Ô¶¯³äºÃdzf

                            //            s = s + 1;
                            //            AheadDetectUnallow.Append(AheadDetect[i].Trim().Substring(1) + "±»³äµçÈÎÎñ:").Append(obr.ToString()).Append("Ô¤Ô¼£¡");
                            //        }
                            //        else
                            //        {
                            //            s = s + 0;
                            //        }
                            //    }
                            //}

                            #endregion

                        }
                    }

                    #region ·ÇÊÖ¹¤ÈÎÎñ£¬Èç¹ûÓÐÊÖ¹¤ÈÎÎñµÈ´ýÖ´ÐÐÏÈÖ´ÐÐÊÖ¹¤ÈÎÎñ
                    if (mti != 4)
                    {//20120405
                        if (DeviceHandTaskIfWaitRun(devinfo.DeviceIndex) == true)
                        {
                            AheadDetectUnallow.Append(devinfo.DeviceIndex.ToString() + "ÊÖ¹¤ÈÎÎñ»òÕß±ÜÈÃÈÎÎñµÈ´ýÔËÐУ¡");
                            s += 1;
                        }
                    }
                    #endregion

                    #region ¼ì²âÏò¹ÜÀíÉêÇëÈë¿âÈÎÎñÌõÂëºÍPLCASK¼Ç¼ÊÇ·ñÆ¥Åä êɵú
                    //Ôö¼ÓÊäËÍվ̨Ïò¹ÜÀíÉêÇëÈë¿âÈÎÎñ£¬»òÕßÌõÂë±È¶ÔµÄÈÎÎñ£¬É¨ÃèºóÈ˹¤ËæÒâ°á×ßÏä×ӵı£»¤£¬Èë¿âÈÎÎñÌõÂëºÍPLCAsk¼Ç¼µÄ²»Ïàͬ²»ÔÙÖ´ÐÐÈÎÎñ
                    sql.Remove(0, sql.Length);
                    sql.Append("SELECT T_Base_Device.F_DeviceIndex FROM T_Base_Device,T_Base_PLC_Ask WHERE  ( T_Base_Device.F_DeviceIndex = T_Base_PLC_Ask.F_DeviceIndex)  and  (T_Base_Device.F_DeviceKindIndex = 7) AND T_Base_PLC_Ask.F_BindingDevice = ").Append(devinfo.DeviceIndex);
                    object obr1 = dbo.GetSingle(sql.ToString());
                    if (obr1 != null)
                    {
                        sql.Remove(0, sql.Length);
                        sql.Append("SELECT F_BarCode FROM T_Base_PLC_Ask where  F_BindingDevice=").Append(devinfo.DeviceIndex);
                        object obr = dbo.GetSingle(sql.ToString());
                        if (obr != null)
                        {
                            if ((obr.ToString().IndexOf(ccf.GetBarCodeFromMonitor(minMidx)) < 0) && (ccf.GetBarCodeFromMonitor(minMidx).IndexOf(obr.ToString()) < 0))
                            {
                                s = s + 1;
                                AheadDetectUnallow.Append(devinfo.DeviceIndex.ToString() + "¼Ç¼µÄÌõÂë:").Append(obr.ToString()).Append("£¬ºÍÈÎÎñÌõÂë").Append(ccf.GetBarCodeFromMonitor(minMidx)).Append("²»Æ¥Å䣡");
                            }

                        }

                    }

                    #endregion

                    if ((s != 0) || (fs != 1))
                    {
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;
                    }

                }




                #endregion

                #region Óл¥³âÉ豸µÄ¶Ñ¶â»ú20111020
                if (DeviceKind == 1 && devinfo.VirtualStack > 0)
                {
                    int mutex = ccf.GetStackMutexDevice(DeviceIdx);
                    if (mutex > 0)
                    {//¼ì²é»¥³âÉ豸¿ÕÏÐʱµÄλÖúÍÔËÐеÄÄ¿±êλÖÃ
                        Model.MDevice mutexdev = Model.CGetInfo.GetDeviceInfo(mutex);

                        int mutexDeviceLockedState = ccf.GetDeviceLockedState(mutex);
                        if (mutexDeviceLockedState == -1) return true;//20120110
                        int mutexManTaskReserve = ccf.GetManTaskReserve(mutex);
                        if ((mutexdev.RunState == 0) && (mutexManTaskReserve <= 0) && (mutexDeviceLockedState == 0))
                        {//
                            #region mutex¿ÕÏС¢ÎÞÈÎÎñ¡¢ÎÞ¹ÜÀíÈÎÎñÔ¤Ô¼Ëø

                            int xcoor = Model.CGeneralFunction.GetXCoorFromMonitor(TaskIdx, DeviceIdx, ccf.GetDeviceOrderFromMonitor(TaskIdx));
                            int zcoor = Model.CGeneralFunction.GetZCoorFromMonitor(TaskIdx, DeviceIdx, ccf.GetDeviceOrderFromMonitor(TaskIdx));
                            int BCcoor = GetBarcodeCoor(xcoor, zcoor);
                            if (mutex > DeviceIdx)
                            {//mutex=35002

                                if ((BCcoor + StackMutexXCoor) >= mutexdev.XCoor)//mdev.XCoorÈç¹ûÊÇÌõÂë´øÖµÐèҪת»»ÎªÁÐÖµ
                                {
                                    InsertStackMutexOrder(mutex, 2, (BCcoor + StackMutexXCoor), 5);
                                    if (mutexdev.XCoor > 52000)//20120110
                                    {
                                        return true;
                                    }
                                    else
                                    {
                                        if (devinfo.XCoor <= mutexdev.XCoor - minStackMutexXCoor)
                                        {
                                            return true;
                                        }

                                        else
                                        {
                                            return false;
                                        }
                                    }
                                }
                            }
                            else
                            {//mutex35001
                                if (BCcoor >= (StackMutexXCoor + StackZeroXCoor))
                                {
                                    BCcoor = (BCcoor - StackMutexXCoor);
                                }
                                else
                                {
                                    return true;//¶Ô¿ª±¨¾¯°É£¬¹ÜÀíÏÂÈÎÎñ´íÁË£¬»òÕß·ÖÅä¶Ñ¶â»úÉ豸´íÎó
                                }
                                if (BCcoor <= mutexdev.XCoor)//mdev.XCoorÈç¹ûÊÇÌõÂë´øÖµÐèҪת»»ÎªÁÐÖµ
                                {
                                    InsertStackMutexOrder(mutex, 2, BCcoor, 5);
                                    if (mutexdev.XCoor < 4481)//20120110
                                    {
                                        return true;
                                    }
                                    else
                                    {
                                        if (devinfo.XCoor > mutexdev.XCoor + minStackMutexXCoor)
                                        {
                                            return true;
                                        }

                                        else
                                        {
                                            return false;
                                        }

                                    }

                                }
                            }

                            #endregion
                        }
                        else
                        {//mutexÓÐÈÎÎñÔËÐÐ
                            int xcoor = Model.CGeneralFunction.GetXCoorFromMonitor(TaskIdx, DeviceIdx, ccf.GetDeviceOrderFromMonitor(TaskIdx));
                            int zcoor = Model.CGeneralFunction.GetZCoorFromMonitor(TaskIdx, DeviceIdx, ccf.GetDeviceOrderFromMonitor(TaskIdx));
                            int bccoor = GetBarcodeCoor(xcoor, zcoor);
                            int mutXcoor; int mutZcoor;
                            GetStackRunX_Zcoor(mutex, out mutXcoor, out mutZcoor);
                            if (mutXcoor > 0)
                            {
                                #region »¥³âÓÐÈÎÎñÕýÔÚÔËÐÐ

                                int mutbccoor = GetBarcodeCoor(mutXcoor, mutZcoor);
                                if (mutex > DeviceIdx)
                                {
                                    if (mutbccoor <= (bccoor + StackMutexXCoor))
                                    {
                                        if (mutbccoor > 52000)
                                        {//20120110
                                            return true;
                                        }
                                        else
                                        {
                                            return false;
                                        }
                                    }


                                }
                                else
                                {//mutexС
                                    if (bccoor >= (StackMutexXCoor + StackZeroXCoor))
                                    {
                                        if (mutbccoor >= (bccoor - StackMutexXCoor))
                                        {

                                            if (mutbccoor < 4481)//20120110
                                            {//20120110
                                                return true;
                                            }
                                            else
                                            {
                                                return false;
                                            }


                                        }
                                    }
                                    else
                                    {
                                        if (bccoor >= 52000)
                                        {
                                            return true;
                                        }
                                        else
                                        {
                                            return false;
                                        }
                                    }
                                }

                                #endregion
                            }
                            else
                            {//ÓÐÈÎÎñ£¬±»Ô¤Ô¼£¬µ«Ã»ÔËÐÐÈÎÎñ,¿ÉÄܱ¨¾¯»òÕß´¥ÃþÆÁ¿ØÖÆ
                                if ((mutexdev.RunState > 0) || (mutexDeviceLockedState != 0))
                                {// ±¨¾¯»òÕß±»ÈÎÎñËø¶¨
                                    #region »¥³âÉ豸²»¿ÕÏÐ

                                    if (mutex > DeviceIdx)
                                    {//mutex=35002
                                        if (mutexdev.XCoor <= (bccoor + StackMutexXCoor))
                                        {
                                            return false;//»òÕß·ÅÐÐÖ±½Ó±¨¾¯
                                        }

                                    }
                                    else
                                    {//mutex=35001
                                        if (bccoor >= (StackMutexXCoor + StackZeroXCoor))
                                        {
                                            if (mutexdev.XCoor >= (bccoor - StackMutexXCoor))
                                            {
                                                return false;
                                            }
                                        }
                                        else
                                        {
                                            return false;

                                        }
                                    }

                                    #endregion
                                }
                                else
                                {
                                    #region mutex±»¹ÜÀíÈÎÎñÔ¤Ô¼ÁË£¬µ«ÊÇ»¹Ã»ÔËÐУ¨¡¾ËÍ»õ¡¿µÈ´ýÔËÐУ©
                                    int deviceorder = GetDeviceOrderFromManTaskReserve(mutexManTaskReserve, mutex);
                                    if (deviceorder == -1) return false;
                                    GetStackRunReserveX_Zcoor(mutex, out mutXcoor, out mutZcoor);
                                    if (mutex > DeviceIdx)
                                    {
                                        if (mutexdev.XCoor <= (bccoor + StackMutexXCoor))
                                        {
                                            //È¥»õλ¸ß¶ÈºÏÊÊλÖñÜÈ㬻òÕßµ½52ÁУ¨60000£©
                                            InsertStackMutexOrder(mutex, deviceorder, (bccoor + StackMutexXCoor), GetLayerHigh(mutZcoor, mutXcoor));
                                            if (mutexdev.XCoor > 52000)//20120110
                                            {
                                                return true;
                                            }
                                            else
                                            {
                                                if (devinfo.XCoor < mutexdev.XCoor - minStackMutexXCoor)
                                                {
                                                    return true;
                                                }

                                                else
                                                {
                                                    return false;
                                                }
                                            }
                                        }

                                    }
                                    else
                                    {//mutexС
                                        if (bccoor >= (StackMutexXCoor + StackZeroXCoor))
                                        {
                                            if (mutexdev.XCoor >= (bccoor - StackMutexXCoor))
                                            {
                                                //È¥»õλ¸ß¶ÈºÏÊÊλÖñÜÈ㬻òÕßµ½0ÁУ¨2000£©
                                                InsertStackMutexOrder(mutex, deviceorder, (bccoor - StackMutexXCoor), GetLayerHigh(mutZcoor, mutXcoor));
                                                if (mutexdev.XCoor < 4481)
                                                {
                                                    return true;
                                                }
                                                else
                                                {
                                                    if (devinfo.XCoor > mutexdev.XCoor + minStackMutexXCoor)
                                                    {
                                                        return true;
                                                    }

                                                    else
                                                    {
                                                        return false;
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            return false;

                                        }
                                    }

                                    #endregion
                                }
                            }
                        }
                    }
                }
                #endregion


                #region ¶¥Éý»úÏÈ¿ØÖƽü²æÊäËÍ»úËͳö
                ////20111226
                //string r1 = "12001,42001,32001,12009,42009,32009,12017,42017,32017";
                //if ((r1.IndexOf(DeviceIdx.ToString()) >= 0) &&(devinfo.IfCorrelDoubleFork!="1"))
                //{
                //    if (IFExitTopPriDeviceIdxTaskWait(DeviceIdx+1) == true)
                //    {
                //        return false;
                //    }
                //}
                #endregion

                int CONTROLTASKTYPE = ccf.GetFCONTROLTASKTYPEFromManageTask(mti, fid);

                #region ¶¥Éý»ú¹¹×Ô¹ØÁªÈë¿âÈÎÎñµ¥¶À´¦Àí//20101011

                //20100406Èë¿â¶¥Éýʱ±ØÒª¼ì²â£º1102ÄÚ̽Îï¡°-11021¡±£»1121µÍµ½Î»¡°-11212¡±£»ÓйØÁªÈÎÎñʱ£¬1102Íâ̽Îï¡°-11022¡±£»
                if ((ccf.GetCorrel_DeviceIndex(devinfo.DeviceIndex, true) == "0") && (CONTROLTASKTYPE == 1) && (devinfo.IfCorrelDoubleFork == "1"))//¶¥ÉýÉ豸×Ô¹ØÁª£¬Èë¿âÈÎÎñ20101124Ôö¼Ó¶¥ÉýÉ豸ÊÇ·ñË«²æÅжÏ
                {
                    string[] CorrelInfo = ccf.GetOwnCorrel_DeviceInfo(devinfo.DeviceIndex);
                    if (CorrelInfo == null)
                    {
                        //20110505
                        AheadDetectUnallow.Append("¶¥Éý»ú¹¹" + devinfo.DeviceIndex.ToString() + "ûÓÐ×Ô¹ØÁª£¡");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;

                    }
                    if ((CStaticClass.GetDevicePhotoelectric(CorrelInfo[5]) == 1) && (CStaticClass.GetDevicePhotoelectric(CorrelInfo[2]) == 1))//½üÏïµÀÓÐÎ¶¥ÉýµÍλ//20101124
                    {
                        #region µÈ´ý¹ØÁªÈÎÎñÅä¶Ô
                        //ÔÚCStaticClass.DoubleForkWaitTime¹æ¶¨Ê±¼äÄڵȴý£»1102£¨11027£©×ª¶¯µÈ´ý
                        sql.Remove(0, sql.Length);
                        sql.Append("SELECT F_TaskIndex,F_DeviceIndex,F_Remark FROM T_Base_PLC_Ask WHERE (F_TaskIndex =").Append(TaskIdx).Append(") AND (F_Remark <> '') AND (F_DeviceIndex=").Append(devinfo.DeviceIndex).Append(")");
                        dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dv.Count > 0)
                        {

                            //(Convert.ToDateTime(dv[0]["F_Remark"]).AddSeconds(Convert.ToInt32(CStaticClass.DoubleForkWaitTime)) > DateTime.Now) ||
                            if ((GetIOControlStatus(minMidx) != Model.CGeneralFunction.TASKSINGLEFORKRUN) ||
                                ((CStaticClass.GetDevicePhotoelectric(CorrelInfo[6]) == 1) && (CStaticClass.GetDevicePhotoelectric(CorrelInfo[4]) == 0)))//20101124
                            {
                                if ((CStaticClass.GetDevicePhotoelectric(CorrelInfo[6]) == 1)
                                    && (CStaticClass.GetDevicePhotoelectric(CorrelInfo[4]) == 0))//Íâ̽ÎÔËÐÐ//20101124
                                {
                                    //²éÕÒ±¾µØ¹ÜÀíÈÎÎñ×ö¶à²æ¹ØÁªÅä¶Ô£¬¹ØÁªÈÎÎñ·ÖÅä½ü²æ
                                    long mfid = GetEnableDoubleForkManageTask(1, devinfo.DeviceIndex, fid);
                                    if (mfid > 0)
                                    {
                                        sql.Remove(0, sql.Length);
                                        sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(mfid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(fid);
                                        dbo.ExecuteSql(sql.ToString());
                                        sql.Remove(0, sql.Length);
                                        sql.Append("update T_Manage_Task set FUseAwayFork='0',F_RELATIVECONTORLID=").Append(fid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(mfid);
                                        dbo.ExecuteSql(sql.ToString());
                                        sql.Remove(0, sql.Length);
                                        sql.Append("update T_Monitor_Task set F_UseAwayFork='0' where F_ManageTASKKINDINDEX=").Append(mti).Append(" and F_ManageTaskIndex=").Append(mfid).Append("");
                                        dbo.ExecuteSql(sql.ToString());
                                        //ÓÉÓÚÒѾ­·ÖÅä·¾¶²»Ò»¶¨·ûºÏÔ¶½ü»õ²æµÄ·ÖÅäÔ­Ôò£¬ÐèÒª¸ÄµÀ
                                        AlterRoutePath(mti, mfid, CONTROLTASKTYPE, '0', devinfo.DeviceIndex);
                                    }

                                    return true;
                                }
                                else
                                {
                                    //20110505
                                    AheadDetectUnallow.Append("¶¥Éý»ú¹¹" + devinfo.DeviceIndex.ToString() + "µÈ´ý¹ØÁªÈÎÎñ£¡");
                                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                                    return false;
                                }
                            }
                            else
                            {//³¬¹ýµÈ´ýʱ¼ä»òÕß¹ÜÀíÇ¿ÖÆÖ´Ðе¥²æÈÎÎñ
                                if (CStaticClass.GetDevicePhotoelectric(CorrelInfo[4]) == 1)//20101124
                                {
                                    sql.Remove(0, sql.Length);
                                    sql.Append("update T_Base_PLC_Ask set F_Remark='").Append(dtime).Append("' where (F_DeviceIndex=").Append(devinfo.DeviceIndex).Append(")");
                                    dbo.ExecuteSql(sql.ToString());
                                    //20110505
                                    AheadDetectUnallow.Append("¶¥Éý»ú¹¹" + devinfo.DeviceIndex.ToString() + "µÈ´ý¹ØÁªÈÎÎñ£¡");
                                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                                    return false;
                                }
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Base_PLC_Ask set F_TaskIndex=0,F_Remark='' where (F_DeviceIndex=").Append(devinfo.DeviceIndex).Append(")");
                                dbo.ExecuteSql(sql.ToString());
                                return true;

                            }
                        }
                        else
                        {
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT F_TaskIndex,F_DeviceIndex,F_Remark FROM T_Base_PLC_Ask WHERE (F_TaskIndex =0) AND (F_Remark = '') AND (F_DeviceIndex=").Append(devinfo.DeviceIndex).Append(")");
                            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dv.Count > 0)
                            {

                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Base_PLC_Ask set F_TaskIndex=").Append(TaskIdx).Append(",F_Remark='").Append(dtime).Append("' where (F_DeviceIndex=").Append(devinfo.DeviceIndex).Append(")");
                                dbo.ExecuteSql(sql.ToString());
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Monitor_Task set F_UseAwayFork='1' where F_ManageTASKKINDINDEX=").Append(mti).Append(" and F_ManageTaskIndex=").Append(fid).Append("");
                                dbo.ExecuteSql(sql.ToString());
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Manage_Task set FUseAwayFork='1' where F_ManageTASKKINDINDEX=").Append(mti).Append(" and FID=").Append(fid).Append("");
                                dbo.ExecuteSql(sql.ToString());
                                //ÓÉÓÚÒѾ­·ÖÅä·¾¶²»Ò»¶¨·ûºÏÔ¶½ü»õ²æµÄ·ÖÅäÔ­Ôò£¬ÐèÒª¸ÄµÀ
                                AlterRoutePath(mti, fid, CONTROLTASKTYPE, '1', devinfo.DeviceIndex);
                                return false;
                            }
                        }

                        #endregion
                    }
                    else
                    {
                        //20110505
                        AheadDetectUnallow.Append("¶¥Éý»ú¹¹" + devinfo.DeviceIndex.ToString() + "²»Âú×ã¹ØÁª×´Ì¬£¡");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;
                    }

                }

                #endregion
                #region ɽ¶«Ê±´ú20250303 12051 ÖÕµã³ö¿â£¬¼ì²éµçÆø³öÈë¿âģʽ
                if (CONTROLTASKTYPE == 2 && EndDevice == 12051&&StartDevice!=13008)
                {
                    // Ôö¼ÓÒ»¸öÉ豸ºÅ 12000£¬µçÆøÉϱ¨×´Ì¬µ½state×Ö½Ú 0£¬1
                    Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15101);
                    if (devOutMode.RunState == 1) // Èë¿âģʽ 1£¨ÔËÐУ©£ºÈë¿â 2 ³ö¿â£¨Íê³É£©
                    {
                        AheadDetectUnallow.Append("12051Èë¿âģʽ£¡");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;
                    }
                }
                 else  if (CONTROLTASKTYPE == 2 &&StartDevice == 13008 && EndDevice != 12051)
                {
                    // Ôö¼ÓÒ»¸öÉ豸ºÅ 12000£¬µçÆøÉϱ¨×´Ì¬µ½state×Ö½Ú 0£¬1
                    Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15101);
                    if (devOutMode.RunState == 2) // Èë¿âģʽ 1£¨ÔËÐУ©£ºÈë¿â 2 ³ö¿â£¨Íê³É£©
                    {
                        AheadDetectUnallow.Append("12051³ö¿âģʽ£¡");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;
                    }
                }


                if (CONTROLTASKTYPE == 2 && EndDevice == 120004 && StartDevice != 14004)//»ØÍËÈÎÎñ²»¼ì²â
                {
                    // Ôö¼ÓÒ»¸öÉ豸ºÅ 12000£¬µçÆøÉϱ¨×´Ì¬µ½state×Ö½Ú 0£¬1
                    Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15102);
                    if (devOutMode.RunState == 1) // Èë¿âģʽ 1£¨ÔËÐУ©£ºÈë¿â 2 ³ö¿â£¨Íê³É£©
                    {
                        AheadDetectUnallow.Append("12004Èë¿âģʽ£¡");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;
                    }
                }
                else if (CONTROLTASKTYPE == 2 && StartDevice == 14004 && EndDevice != 12004)
                {
                    // Ôö¼ÓÒ»¸öÉ豸ºÅ 12000£¬µçÆøÉϱ¨×´Ì¬µ½state×Ö½Ú 0£¬1
                        Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15102);
                    if (devOutMode.RunState == 2) // Èë¿âģʽ 1£¨ÔËÐУ©£ºÈë¿â 2 ³ö¿â£¨Íê³É£©
                    {
                        AheadDetectUnallow.Append("12004³ö¿âģʽ£¡");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                        return false;
                    }
                }

                #endregion

                #region ɽ¶«Ê±´ú¶Ñ¶â»úɨÂë¼ì²â,ÐèÒªPLCASKºÍÈÎÎñÌõÂëÒ»Ö lzm

                if (CONTROLTASKTYPE == 2 && order == 3&&DeviceKind==1 && mti==1) { //3£ºËÍ»õÈÎÎñ  ²»Ó°ÏìÊÖ¶¯ÈÎÎñ
                    DataView data = new DataView();
                    // var device = Model.CGetInfo.GetDeviceInfo(dcode);
                    data = dbo.ExceSQL(string.Format("SELECT F_BarCode FROM T_Base_PLC_Ask WHERE F_BindingDevice={0})", DeviceIdx)).Tables[0].DefaultView;//´ÓÊÓͼ±í»ñÈ¡ÈÎÎñÌõÂë
                    if (data.Count > 0)
                    if (data.Count > 0)
                    {
                        if (data[0]["F_BarCode"].ToString() != BarCode.ToString())//ÌõÂëºÍɨÂë½á¹ûÒ»ÖÂÕý³£»Ø¸´
                        {
                            AheadDetectUnallow.Append($"¶Ñ¶â»úÉ豸{DeviceIdx}ÈÎÎñÌõÂë{data[0]["F_BarCode"].ToString()}ÓëʵÎïÌõÂë{BarCode.ToString()}²»Ò»ÖÂ");
                            UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                            return false;
                        }
                    }
                }
                #endregion
                #region Ë«ÉìλµÄ¶Ñ¶â»úÔÚÖ´ÐÐÆðµãÊÇÀïλ(1,4ÅÅ)µÄÈÎÎñʱ,ÅжÁÊÇ·ñÓÐÆðµãÊÇÍâλ(2,3ÅÅ)µÄÈÎÎñ ͬʱÅÐ¶Ï ËÍ»õµ½»õλʱ(ÖÕµãΪ2,3)ÅжÏÓÐûÓÐ(1,4)µÄÈÎÎñ£¬¿ØÖƽüÔ¶²æÈ¡ËÍ»õÏȺó
                if (devinfo.StackReach == 2 && DeviceKind == 1 && (order == 4))// Ë«Éì¶Ñ¶â»ú£¬ È¡»õ
                {
                    int[] zxy = ccf.GetCoordinatesFromMonitorTask(minMidx);
                    string neighborzxy = string.Empty;
                    string sqlstrzxy = string.Empty;//
                    string sqlman = string.Empty;
                    //bool insidecell = false;//µ±Ç°ÈÎÎñ¶ÔÓ¦µÄÀïλ»¹ÊÇÍâλ
                    bool check = false;
                    if (zxy != null)
                    {
                        int getZ = zxy[0];//È¡»õµÄÅÅ×ø±ê
                        int sendZ = zxy[3]; //ËÍ»õλÖöÔÓ¦µÄÅÅ×ø±ê
                        int newZ, newX, newY;
                        int tempZ = getZ;


                        // if (tempZ>4)
                        //{
                        tempZ = getZ % 4;
                        //}


                        if (tempZ == 1 || tempZ == 0)//Àïλȡ»õʱ£¬ÒªÅжÁÊÇ·ñÓÐÍâλµÄÈ¡»õÈÎÎñ
                        {//»ñÈ¡ÍâÎ»×ø±ê
                            if (tempZ == 1)
                            {
                                newZ = getZ + 1;
                            }
                            else
                            {
                                newZ = getZ - 1;
                            }
                            neighborzxy = string.Format("{0:D3}-{1:D3}-{2:D3}", newZ, zxy[1], zxy[2]);//»ñµÃÍâÎ»×ø±ê
                            sqlstrzxy = string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE  (F_DeviceCommandIndex =4)  and (F_NumParam1 = {0}) AND (F_NumParam2 = {1}) AND (F_NumParam3 = {2}) and (F_DeviceIndex={3})", newZ, zxy[1], zxy[2], DeviceIdx);
                            //sqlstrzxy
                            sqlman = string.Format("SELECT FID FROM T_Manage_Task WHERE  (FSTATUS = 0) AND(FSTARTDEVICE = {0}) AND (FSTARTCELL = '{1}') ", StartDevice, neighborzxy);
                            //sqlstrzxy


                            check = true;

                            if (check)
                            {
                                dvdv = dbo.ExceSQL(sqlstrzxy).Tables[0].DefaultView;
                                if (dvdv.Count > 0)// 
                                {

                                    AheadDetectUnallow.Append(string.Format("´æÔÚÏàÁÚ»õλ{0}µÄÓÅÏÈÈÎÎñ£¬¸ÃÈÎÎñÔÝʱ²»ÄÜÖ´ÐÐ! ", neighborzxy));

                                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                                    return false;//²»ÄÜÖ´Ðгö¿âÈÎÎñ



                                }
                                dvdv = dbo.ExceSQL(sqlman).Tables[0].DefaultView;
                                if (dvdv.Count > 0)// 
                                {

                                    AheadDetectUnallow.Append(string.Format("´æÔÚÏàÁÚ»õλ{0}µÄÓÅÏÈÈÎÎñ£¬¸ÃÈÎÎñÔÝʱ²»ÄÜÖ´ÐÐ! ", neighborzxy));

                                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                                    return false;//²»ÄÜÖ´Ðгö¿âÈÎÎñ
                                }
                            }
                        }
                        tempZ = sendZ;
                        //if (tempZ>4)
                        //{
                        tempZ = sendZ % 4;
                        //}
                        if (tempZ == 2 || tempZ == 3)//ÍâλËÍ»õʱ£¬ÒªÅжÁÊÇ·ñÓÐÀïλµÄËÍ»õÈÎÎñ
                        {//»ñÈ¡ÀïÎ»×ø±ê
                            if (tempZ == 2)
                            {
                                newZ = sendZ - 1;
                            }
                            else
                            {
                                newZ = sendZ + 1;
                            }
                            neighborzxy = string.Format("{0:D3}-{1:D3}-{2:D3}", newZ, zxy[4], zxy[5]);//»ñµÃÍâÎ»×ø±ê
                            sqlstrzxy = string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE  ( F_DeviceCommandIndex =5)  and (F_NumParam4 = {0}) AND (F_NumParam5 = {1}) AND (F_NumParam6 = {2}) and (F_DeviceIndex={3})", newZ, zxy[4], zxy[5], DeviceIdx);
                            sqlman = string.Format("SELECT FID FROM T_Manage_Task WHERE  (FSTATUS = 0) AND(FENDDEVICE = {0}) AND (FENDCELL = '{1}') ", EndDevice, neighborzxy);
                            check = true;
                            if (check)
                            {
                                dvdv = dbo.ExceSQL(sqlstrzxy).Tables[0].DefaultView;
                                if (dvdv.Count > 0)// 
                                {

                                    AheadDetectUnallow.Append(string.Format("´æÔÚÏàÁÚ»õλ{0}µÄÓÅÏÈÈÎÎñ£¬¸ÃÈÎÎñÔÝʱ²»ÄÜÖ´ÐÐ! ", neighborzxy));

                                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                                    return false;//²»ÄÜÖ´Ðгö¿âÈÎÎñ
                                }
                                dvdv = dbo.ExceSQL(sqlman).Tables[0].DefaultView;
                                if (dvdv.Count > 0)// 
                                {
                                    AheadDetectUnallow.Append(string.Format("´æÔÚÏàÁÚ»õλ{0}µÄÓÅÏÈÈÎÎñ£¬¸ÃÈÎÎñÔÝʱ²»ÄÜÖ´ÐÐ! ", neighborzxy));

                                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                                    return false;//²»ÄÜÖ´Ðгö¿âÈÎÎñ
                                }
                            }
                        }

                    }

                }
                #endregion


                #region   lzm20250225 ×¢ÊÍÆäËûÏîÄ¿
                //20101011
                //#region Ë«²æ¶Ñ¶â»úµÄÈ¡»õÈÎÎñÔÚ´ËÅжÏÊÇ·ñ¹ØÁªË«²æ¡¢Ñé֤˫²æÈÎÎñÊÇ·ñΪ˫²æ¼«ÏÞ»õλ
                //if ((devinfo.DeviceKind == 1) && (devinfo.IfCorrelDoubleFork == "1") && (ccf.GetDeviceOrderFromMonitor(minMidx) == 4))
                //{
                //    string[] DevLanewayIOInfo = ccf.GetDeviceLaneGateInfoFromStackCoor(devinfo.DeviceIndex, minMidx);
                //    if (DevLanewayIOInfo == null)
                //    {
                //        //²»ÊÇÏïµÀ¿ÚµÄÈ¡»õÈÎÎñ²»ÐèÒª¹ØÁª
                //        CommonClassLib.CCarryConvert.WriteDarkCasket("µ¥²æÖ´ÐÐÔ­Òò", minMidx.ToString(), devinfo.DeviceIndex.ToString(), "²»ÊÇÏïµÀ¿ÚµÄÈ¡»õÈÎÎñ²»ÐèÒª¹ØÁª");
                //        return true;
                //    }
                //    Dictionary<int, string[]> corrinfo = Model.CGeneralFunction.GetDoubleForkMonitorInfo(minMidx, devinfo.DeviceIndex);

                //    if (corrinfo == null)//20110412û¹ØÁªÈÎÎñ
                //    {
                //        #region 20110412¶Ñ¶â»úÔÚ¶¥Éý»úÈ¡µ¥²æÈÎÎñ£¬ÑéÖ¤ÊÇ·ñÐèÒª»»»õ²æ
                //        string ChangeForkCell = ccf.IfLimitCellChangeFork(minMidx, devinfo.DeviceIndex);

                //        if (ChangeForkCell != "-")//Ö÷ÈÎÎñÐèÒªµ¹»»»õ²æ
                //        {
                //            ccf.ChangeEndCellCode(minMidx, ChangeForkCell, devinfo.DeviceIndex);

                //        }
                //        #endregion

                //        #region û¹ØÁªÈÎÎñ

                //        //string IfCorrel = ccf.GetCorrel_DeviceIndex(minMidx);//20110505
                //        //if (IfCorrel == "")//ÎÞ¹ØÁª
                //        //{
                //        //}
                //        //else if (IfCorrel == "0")//×Ô¹ØÁª
                //        //{
                //        //    //20110108
                //        //    dbo.ExecuteSql("update T_Monitor_Task set F_UseAwayFork='1' where F_ManageTASKKINDINDEX=" + mti + " and F_ManageTaskIndex=" + fid + "");
                //        //    dbo.ExecuteSql("update T_Manage_Task set FUseAwayFork='1' where F_ManageTASKKINDINDEX=" + mti + " and FID=" + fid + "");

                //        //    #region 20110412¶Ñ¶â»úÔÚ¶¥Éý»úÈ¡µ¥²æÈÎÎñ£¬ÑéÖ¤ÊÇ·ñÐèÒª»»»õ²æ
                //        //    string ChangeForkCell = ccf.IfLimitCellChangeFork(minMidx, devinfo.DeviceIndex);

                //        //    if (ChangeForkCell != "-")//Ö÷ÈÎÎñÐèÒªµ¹»»»õ²æ
                //        //    {
                //        //        ccf.ChangeEndCellCode(minMidx, ChangeForkCell, devinfo.DeviceIndex);

                //        //    }
                //        //    #endregion
                //        //}

                //        //else
                //        //{//ÓйØÁªÕ¾Ì¨
                //        //    #region Ë«²æ¶ÔµÈվ̨µÄµ¥ÈÎÎñÔڴ˵ȴý¹ØÁª£¬Ë«²æ¼«ÏÞ»õλ²»¹ØÁª

                //        //    if ((CStaticClass.GetDevicePhotoelectric(DevLanewayIOInfo[3]) == 1) && (CStaticClass.GetDevicePhotoelectric(DevLanewayIOInfo[1]) == 1))//Óлõ£¬¶¥Éý¸ßλ
                //        //    {
                //        //        #region ¶¥Éý¸ßλÓлõ
                //        //        bool isend;
                //        //        return GetCorrManageTask(DevLanewayIOInfo, TaskIdx, CONTROLTASKTYPE, mti, fid, dtime,out isend);

                //        //        #endregion
                //        //    }
                //        //    else
                //        //    {
                //        //        CommonClassLib.CCarryConvert.WriteDarkCasket("µ¥²æÖ´ÐÐÔ­Òò", minMidx.ToString(), devinfo.DeviceIndex.ToString(), "¶¥Éý¸ßλºÍÓÐÎïÐźŲ»Âú×ãÌõ¼þ");
                //        //    }
                //        //    #endregion

                //        //}

                //        #endregion
                //    }
                //    else
                //    {
                //        #region ÓйØÁªÈÎÎñÐÅÏ¢
                //        #region ÅжÏÊÇ·ñ»¹ÓпɹØÁªµÄ¹ØÁªÕ¾Ì¨ÈÎÎñ20120906
                //        //bool isend;
                //        //GetCorrManageTask(DevLanewayIOInfo, TaskIdx, CONTROLTASKTYPE, mti, fid, dtime,out isend);
                //        //if (isend == false) return false;
                //        #endregion
                //        foreach (int CorrTaskindex in corrinfo.Keys)
                //        {
                //            #region Ë«²æÈÎÎñÔÚ´ËÑéÖ¤£¬ÊÇ·ñΪ˫²æ¼«ÏÞ»õλ£¬Ë«¼«ÏÞ»õλʹÓÃË«²æµ¹¿â»õλÐÞ¸ÄÈÎÎñ
                //            //°Ñµ¹¿â»õλ×÷Ϊȡ»õºÍËÍ»õ¶¯×÷µÄÄ¿±ê»õ룬Ôö¼ÓÈ¡»õºÍËÍ»õ¶¯×÷¶ÔÓÚµ¹¿â»õλµÄÂß¼­ÓÐÎïµÄÌáǰ¼ì²â
                //            //±¨¸æµ¹¿â»õλÍê³Éʱ£¬×·¼Óµ¹¿â»õλ---¡·ÐèÒª»»²æµÄ¼«ÏÞ»õλµÄÈ¡»õºÍËÍ»õÈÎÎñ

                //            #region ¼ì²é¹ØÁªÈÎÎñ
                //            string ChangeForkCell1 = ccf.IfLimitCellChangeFork(CorrTaskindex, devinfo.DeviceIndex);

                //            #endregion
                //            if (ChangeForkCell1 != "-") //¹ØÁªÈÎÎñÐèÒªµ¹»»»õ²æ
                //            {
                //                ccf.ChangeEndCellCode(CorrTaskindex, ChangeForkCell1, devinfo.DeviceIndex);
                //            }
                //            #endregion
                //        }

                //        #endregion
                //    }




                //}
                //#endregion

                //#region Ë«²æAGVµÄÈë¿âÈ¡»õÈÎÎñÔÚ´ËÅжÏÊÇ·ñ¹ØÁªË«²æ¡¢Ñé֤˫²æÈÎÎñÊÇ·ñΪ˫²æ¼«ÏÞ»õλ
                //if ((devinfo.DeviceKind == 6) && (devinfo.IfCorrelDoubleFork == "1") && (ccf.GetDeviceOrderFromMonitor(minMidx) == 2) && ((CONTROLTASKTYPE == 1) || (CONTROLTASKTYPE == 4)))
                //{

                //    Dictionary<int, string[]> corrinfo = Model.CGeneralFunction.GetDoubleForkMonitorInfo(minMidx, devinfo.DeviceIndex);

                //    if (corrinfo == null)
                //    {
                //        #region Ë«²æ¶ÔµÈվ̨µÄµ¥ÈÎÎñÔڴ˵ȴý¹ØÁª£¬Ë«²æ¼«ÏÞ»õλ²»¹ØÁª
                //        if (GetIOControlStatus(TaskIdx) != Model.CGeneralFunction.TASKSINGLEFORKRUN)
                //        {//Ã»Ç¿ÖÆµ¥²æÖ´ÐÐ

                //            //²éÕÒ¹ØÁªÕ¾Ì¨
                //            int agvCorrel = GetAGVCorrelIndex(TaskIdx);
                //            if (agvCorrel != -1)
                //            {
                //                //²éÕÒ±¾µØ¹ÜÀíÈÎÎñ×ö¶à²æ¹ØÁªÅä¶Ô£¬¹ØÁªÈÎÎñ·ÖÅä»õ²æ
                //                int mfid = GetAGVEnableDoubleForkManageTask(CONTROLTASKTYPE, agvCorrel, devinfo.DeviceIndex);
                //                if (mfid > 0)
                //                {
                //                    #region Ë«²æÍ¬ÎªÇ°¼«ÏÞºóÕߺó¼«ÏÞ²»¹ØÁª£¬µ¥¶ÀÖ´ÐÐ
                //                    if ((IfInSameLimitX(fid, mfid, mti) == true) && (mti == 1))
                //                    {
                //                        sql.Remove(0, sql.Length);
                //                        sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(fid).Append(")");
                //                        dboM.ExecuteSql(sql.ToString());
                //                        sql.Remove(0, sql.Length);
                //                        sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(mfid).Append(")");
                //                        dboM.ExecuteSql(sql.ToString());
                //                        return true;
                //                    }
                //                    #endregion
                //                    sql.Remove(0, sql.Length);
                //                    sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(mfid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(fid);
                //                    dbo.ExecuteSql(sql.ToString());
                //                    sql.Remove(0, sql.Length);
                //                    sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(fid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(mfid);
                //                    dbo.ExecuteSql(sql.ToString());
                //                    return true;
                //                }

                //                else
                //                {
                //                    //20110505
                //                    AheadDetectUnallow.Append("Ë«²æAGVÔÚË«²æÐ£±íվ̨ȡ»õ" + "£¬µÈ´ý¶à²æ¹ØÁªÕ¾Ì¨" + agvCorrel.ToString() + "µÄÈÎÎñ£¡");
                //                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //                    return false;
                //                }
                //            }
                //            else
                //                return true;
                //        }
                //        else
                //        {//¹ÜÀíÇ¿ÖÆÖ´Ðе¥²æÈÎÎñ
                //            return true;

                //        }


                //        #endregion
                //    }

                //}
                //#endregion

                //#region Ë«²æAGVµÄ³ö¿â¿ÚÊäËÍ»úÈ¡»õÈÎÎñÔÚ´ËÅжÏÊÇ·ñ¹ØÁªË«²æ20110412
                //if ((devinfo.DeviceKind == 6) && (devinfo.IfCorrelDoubleFork == "1") && ((ccf.GetDeviceOrderFromMonitor(minMidx) == 2)
                //    || (ccf.GetDeviceOrderFromMonitor(minMidx) == 4)) && (CONTROLTASKTYPE == 2))
                //{

                //    Dictionary<int, string[]> corrinfo = Model.CGeneralFunction.GetDoubleForkMonitorInfo(minMidx, devinfo.DeviceIndex);

                //    if (corrinfo == null)
                //    {
                //        #region Ë«²æ¶ÔµÈվ̨µÄµ¥ÈÎÎñÔڴ˵ȴý¹ØÁª£¬Ë«²æ¼«ÏÞ»õλ²»¹ØÁª
                //        if (GetIOControlStatus(TaskIdx) != Model.CGeneralFunction.TASKSINGLEFORKRUN)//20110429²âÊÔÓ¦¸ÃΪGetIOControlStatus(TaskIdx)£¡=
                //        {//Ã»Ç¿ÖÆµ¥²æÖ´ÐÐ

                //            //²éÕÒ¹ØÁªÕ¾Ì¨
                //            int agvCorrel = GetAGVCorrelConveyorIndex(TaskIdx);
                //            if (agvCorrel != -1)
                //            {
                //                #region ²éÕÒ¶ÓÁÐÖÐÊÇ·ñÓÐagvCorrelµÄÈÎÎñ£ºÈç¹ûûÓУ¬²»Ôٵȴý£¬µ¥²æÖ´ÐУ»

                //                if (GetAGVEnableDoubleForkManageTask(2, agvCorrel, devinfo.DeviceIndex) <= 0)//ûÓÐÄܹØÁªµÄÈÎÎñ£¬²»Ôٵȴý£¬µ¥²æÖ´ÐÐ
                //                {
                //                    sql.Remove(0, sql.Length);
                //                    sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(fid).Append(")");
                //                    dboM.ExecuteSql(sql.ToString());
                //                    return true;
                //                }

                //                #endregion
                //                #region 20110412ÓÐÄܹØÁªµÄÈÎÎñ£¬ÅжÏagvCorrelÊÇ·ñÓÐÎï¶øÇÒÈÎÎñÒѾ­µ½È¡»õ״̬
                //                int[] cstates = CStaticClass.GetDeviceState(agvCorrel);
                //                int cssstate = -1;
                //                if (cstates != null)
                //                {
                //                    cssstate = cstates[1];
                //                }
                //                if ((cssstate != 0) || (CStaticClass.GetDevicePhotoelectric(agvCorrel - 2, 0) != 1) || (CStaticClass.GetDevicePhotoelectric(agvCorrel, 2) != 1))//20110412¶¥Éý»ú¿ÕÏС¢Óлõ¡¢µÍλ
                //                {
                //                    //20110505
                //                    AheadDetectUnallow.Append("Ë«²æAGVÔÚË«²æÐ£±íվ̨ȡ»õ" + "£¬µÈ´ý¶à²æ¹ØÁªÕ¾Ì¨" + agvCorrel.ToString() + "µÄÈÎÎñ£¡");
                //                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //                    return false;
                //                }
                //                #endregion
                //                //²éÕÒ±¾µØ¹ÜÀíÈÎÎñ×öË«²æÔÚÊäËÍ»úÈ¡»õÈÎÎñ¹ØÁªÅä¶Ô£¬¹ØÁªÈÎÎñ·ÖÅä»õ²æ
                //                int mfid = GetAGVFromConveyorDoubleForkGetGoodManageTask(2, agvCorrel, devinfo.DeviceIndex);
                //                if (mfid > 0)
                //                {
                //                    #region Öյ㲻Ïàͬ£¬µ¥²æ·Ö±ðÖ´ÐÐ
                //                    if (IFHaveSameEndDevice(fid, mfid, mti) == false)
                //                    {
                //                        sql.Remove(0, sql.Length);
                //                        sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(fid).Append(")");
                //                        dboM.ExecuteSql(sql.ToString());
                //                        sql.Remove(0, sql.Length);
                //                        sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(mfid).Append(")");
                //                        dboM.ExecuteSql(sql.ToString());
                //                        return true;
                //                    }
                //                    #endregion
                //                    #region Ë«²æÍ¬ÎªÇ°¼«ÏÞºóÕߺó¼«ÏÞ²»¹ØÁª£¬µ¥¶ÀÖ´ÐÐ
                //                    //if ((IfInSameLimitX(fid, mfid, mti) == true) && (mti == 1))
                //                    //{
                //                    //    sql.Remove(0, sql.Length);
                //                    //    sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(fid).Append(")");
                //                    //    dboM.ExecuteSql(sql.ToString());
                //                    //    sql.Remove(0, sql.Length);
                //                    //    sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(mfid).Append(")");
                //                    //    dboM.ExecuteSql(sql.ToString());
                //                    //    return true;
                //                    //}
                //                    #endregion
                //                    sql.Remove(0, sql.Length);
                //                    sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(mfid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(fid);
                //                    dbo.ExecuteSql(sql.ToString());
                //                    sql.Remove(0, sql.Length);
                //                    sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(fid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(mfid);
                //                    dbo.ExecuteSql(sql.ToString());
                //                    return true;
                //                }

                //                else
                //                {
                //                    //20110505
                //                    AheadDetectUnallow.Append("Ë«²æAGVÔÚÊäËÍ»úÈ¡»õ" + "£¬Ã»ÕÒµ½¶à²æ¹ØÁªÈÎÎñ£¬¹ØÁªÕ¾Ì¨" + agvCorrel.ToString() + "ÓÐÒì³£ÎïÌåÕÚµ²¿ª¹Ø£¡");
                //                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //                    return false;
                //                }
                //            }
                //            else
                //                return true;
                //        }
                //        else
                //        {//¹ÜÀíÇ¿ÖÆÖ´Ðе¥²æÈÎÎñ
                //            return true;

                //        }


                //        #endregion
                //    }

                //}
                //#endregion

                //#region Ãñº½¶þËù£¬´©Ëó°åÖ´ÐÐÈÎÎñǰ¼ì²âÊÇ·ñ»¹Óе±Ç°²ãµÄÈÎÎñ£¬Èç¹û»¹ÓУ¬²»È¥Ö´ÐÐÆäËû²ãµÄÈÎÎñ
                //if (devinfo.IsShuttleBorad == 1 && devinfo.DeviceKind == 1 && _NumParam3 != devinfo.YCoor  && CONTROLTASKTYPE != 0)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append("SELECT * FROM T_Monitor_Task WHERE F_DeviceIndex = '")
                //        .Append(devinfo.DeviceIndex.ToString()).Append("' AND F_DeviceCommandIndex = 3 AND F_Status = 0 AND F_NumParam3 =")
                //        .Append(devinfo.YCoor).Append(" AND F_MonitorIndex <> ").Append(minMidx);
                //    if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°å£º" + devinfo.DeviceIndex.ToString() + "´æÔÚËùÔÚ²ãµÄÈÎÎñ£¬ÓÅÏÈÖ´ÐÐËùÔÚ²ãÈÎÎñ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }
                //}


                //#endregion

                //#region Ãñº½¶þËù£¬14003 ,14004£¬Èç¹ûÓл»²ãÈÎÎñÒѾ­·¢ËÍÇÒµ½ÌáÉý»ú£¬ÏȲ»Ö´ÐÐ

                //if (DeviceIdx == 14003 || DeviceIdx == 14004)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5  and  FENDDEVICE ='14005' and F_ChangeStatus =10  and FSTATUS<>0  AND FID <>").Append(fid.ToString());
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {


                //            ////´Ë´¦ÐèÒªÅжÏÌáÉý»ú19005ÈÎÒâÒ»¸öÈÎÎñÈÎÎñÒѾ­·¢ËÍ ²»Äܶ¯
                //            //sql.Remove(0, sql.Length);
                //            //sql.Append(string.Format("SELECT * FROM T_Monitor_Task WHERE (F_DeviceIndex = {0} ) and  F_Status<>0", 19005));
                //            //dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //            //if (dv.Count > 0)
                //            //{
                //            //    AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º19005ÕýÔÚÖ´Ðл»²ãÈÎÎñ£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //            //    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            //    return false;
                //            //}

                //            AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º14005ÕýÔÚÖ´Ðл»²ãÈÎÎñ"+ dv[0]["FID"].ToString() + "£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //            UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            return false;



                //    }

                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0}) and F_ManTaskReserve<>0 ", 14005));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14005µ÷¶ÈÔ¤Ô¼Ëø ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }

                //}

                //#endregion

                //#region Ãñº½¶þËù£¬14002 ,14001£¬Èç¹ûÓл»²ãÈÎÎñÒѾ­·¢ËÍÇÒµ½ÌáÉý»ú£¬ÏȲ»Ö´ÐÐ

                //if (DeviceIdx == 14002 || DeviceIdx == 14001)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5  and  FENDDEVICE ='14006' and F_ChangeStatus =10 and FSTATUS<>0 AND FID <>").Append(fid.ToString());
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {


                //            ////´Ë´¦ÐèÒªÅжÏÌáÉý»ú19005ÈÎÒâÒ»¸öÈÎÎñÈÎÎñÒѾ­·¢ËÍ ²»Äܶ¯
                //            //sql.Remove(0, sql.Length);
                //            //sql.Append(string.Format("SELECT * FROM T_Monitor_Task WHERE (F_DeviceIndex = {0} ) and  F_Status<>0", 19005));
                //            //dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //            //if (dv.Count > 0)
                //            //{
                //            //    AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º19005ÕýÔÚÖ´Ðл»²ãÈÎÎñ£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //            //    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            //    return false;
                //            //}

                //            AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º14006ÕýÔÚÖ´Ðл»²ãÈÎÎñ" + dv[0]["FID"].ToString() + "£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //            UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            return false;



                //    }

                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0}) and F_ManTaskReserve<>0 ", 14006));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14006µ÷¶ÈÔ¤Ô¼Ëø ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }

                //}

                //#endregion

                //#region Ãñº½¶þËù£¬14003 ,14004ÌáÉý»úÈ¡»õÃüÁÈç¹ûÓл»²ãÈÎÎñÒѾ­·¢ËÍÏȲ»Ö´ÐÐ

                //if ((DeviceIdx == 14003 || DeviceIdx == 14004)&& order == 4)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5 and  FENDDEVICE ='14005' and FSTATUS<>0 and  FID <>").Append(fid.ToString());
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {



                //            AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º´æÔÚÒѾ­·¢Ë͵Ļ»²ãÈÎÎñ" + dv[0]["FID"].ToString() + "£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //            UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            return false;



                //    }

                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0}) and F_ManTaskReserve<>0 ", 14005));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14005µ÷¶ÈÔ¤Ô¼Ëø ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }

                //}

                //#endregion

                //#region Ãñº½¶þËù£¬14001 ,14002ÌáÉý»úÈ¡»õÃüÁÈç¹ûÓл»²ãÈÎÎñÒѾ­·¢ËÍÏȲ»Ö´ÐÐ

                //if ((DeviceIdx == 14001 || DeviceIdx == 14002) && order == 4)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5 and  FENDDEVICE ='14006' and FSTATUS<>0 and  FID <>").Append(fid.ToString());
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {



                //            AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º´æÔÚÒѾ­·¢Ë͵Ļ»²ãÈÎÎñ" + dv[0]["FID"].ToString() + "£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //            UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //            return false;



                //    }

                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0}) and F_ManTaskReserve<>0 ", 14006));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14006µ÷¶ÈÔ¤Ô¼Ëø ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }

                //}

                //#endregion

                //#region Ãñº½¶þËù£¬»»²ãÌáÉý»ú14005£¬Èç¹ûÓÐ14003ºÍ14004µÄÃüÁîÒѾ­·¢ËÍ»ò14003ºÍ14004µÄµ÷¶ÈÔ¤Ô¼Ëø²»Îª0 ²»·¢ËÍÈÎÎñ

                //if (DeviceIdx == 14005)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Monitor_Task WHERE  ( F_DeviceCommandIndex=4 or  F_DeviceCommandIndex=5 )and F_Status <> 0 and (F_DeviceIndex = {0} or F_DeviceIndex = {1}) ", 14003, 14004));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {

                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ19003ºÍ19004ÒÑ·¢Ë͵ÄÈÎÎñ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;


                //    }
                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0} or F_DeviceIndex = {1}) and F_ManTaskReserve<>0 ", 14003, 14004));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14003ºÍ14004µ÷¶ÈÔ¤Ô¼Ëø ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }


                //}

                //#endregion

                //#region Ãñº½¶þËù£¬»»²ãÌáÉý»ú14006£¬Èç¹ûÓÐ14001ºÍ14002µÄÃüÁîÒѾ­·¢ËÍ»ò14001ºÍ14002µÄµ÷¶ÈÔ¤Ô¼Ëø²»Îª0 ²»·¢ËÍÈÎÎñ

                //if (DeviceIdx == 14006)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Monitor_Task WHERE  ( F_DeviceCommandIndex=4 or  F_DeviceCommandIndex=5 )and F_Status <> 0 and (F_DeviceIndex = {0} or F_DeviceIndex = {1}) ", 14001, 14002));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {

                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14001ºÍ14002ÒÑ·¢Ë͵ÄÈÎÎñ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;


                //    }
                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0} or F_DeviceIndex = {1}) and F_ManTaskReserve<>0 ", 14001, 14002));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°åÌáÉý»ú£º" + devinfo.DeviceIndex.ToString() + "·¢ËÍʱ´æÔÚ14001ºÍ14002µ÷¶ÈÔ¤Ô¼Ëø ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }


                //}

                //#endregion

                //#region Ãñº½¶þËù£¬»»²ãÈÎÎñÖ´ÐУ¬Èç¹ûÓбðµÄ»»²ãÈÎÎñ ÎÞÂÛÄǸöÉ豸¶¼²»·¢ËÍÃüÁî

                //if (CONTROLTASKTYPE==5)
                //{
                //    if (DeviceIdx == 14005|| DeviceIdx == 14006)
                //    {
                //        sql.Remove(0, sql.Length);
                //        sql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5 AND FID <>").Append(fid.ToString());
                //        dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //        if (dv.Count > 0)
                //        {

                //            for (int k = 0; k < dv.Count; k++)
                //            {
                //                //´Ë´¦ÅжÏÓÐÒѾ­¹ýÌáÉý»úµÄÈÎÎñ²»·¢ËÍ
                //                if ((dv[k]["FSTATUS"].ToString() != "0")&& (dv[k]["F_ChangeStatus"].ToString() != "0"))
                //                {
                //                    AheadDetectUnallow.Append("ÓÐÒѾ­¹ýÌáÉý»úµÄÖ´ÐеĻ»²ãÈÎÎñ" + dv[k]["FID"].ToString() + "£¬µÈ´ýÈÎÎñÖ´ÐÐÍê³É");
                //                    UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //                    return false;

                //                }
                //            }

                //        }
                //    }

                //}

                //#endregion

                //#region Ãñº½¶þËù£¬´©Ëó°åÖ´ÐÐÆäËû²ãÈÎÎñ֮ǰÅжϣ¬Èç¹û´æÔÚ¸ÃλÖõĻ»²ãÈÎÎñ£¬ÏÈÖ´Ðл»²ãÈÎÎñ²Å¿ÉÖ´ÐÐÈ¡»õÈÎÎñ

                //if (devinfo.IsShuttleBorad == 1 && devinfo.DeviceKind == 1 && CONTROLTASKTYPE != 5)
                //{
                //    sql.Remove(0, sql.Length);
                //    sql.Append("SELECT * FROM T_Manage_Task WHERE FPALLETBARCODE = '").Append(fid.ToString())
                //        .Append("' AND FCONTROLTASKTYPE = 5");
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´©Ëó°å£º" + devinfo.DeviceIndex.ToString() + "ÕýÔÚÖ´Ðл»²ãÈÎÎñ£¬µÈ´ý»»²ãÈÎÎñÖ´ÐÐÍê³É");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }
                //}

                //#endregion


                //#region Ãñº½¶þËù£¬·¢ËÍ´©Ëó°åÈÎÎñʱÅжÏÊÇ·ñ´æÔÚ³äµçÈÎÎñ

                //if ((devinfo.DeviceKind == 1) && (CONTROLTASKTYPE != 6))
                //{

                //    sql.Remove(0, sql.Length);
                //    sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE (FCONTROLTASKTYPE = 6) and  FSTARTDEVICE = '{0}' and  FSTATUS>=0", devinfo.DeviceIndex.ToString()));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        AheadDetectUnallow.Append("´æÔÚ"+ devinfo.DeviceKind .ToString()+ "µÄ³äµçÈÎÎñ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }
                //}

                //#endregion

                //#region Ãñº½¶þËù£¬·¢ËÍ´©Ëó°åÈκÎÈÎÎñ¶¼ÐèÒªÅжÏûÓд©Ëó°åÉϱ¨Ïàͬ²ã

                //if ((devinfo.DeviceKind == 1) )
                //{

                //    sql.Clear();
                //    sql.Append(string.Format("select count(*)-count(distinct F_Postion) as num from SHUTTLE_POSITION  "));
                //    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //    if (dv.Count > 0)
                //    {
                //        if (Convert.ToInt32(dv[0]["num"]) != 0)
                //        {
                //            AheadDetectUnallow.Append("·¢ËÍÈÎÎñʱÓгµÉϱ¨Ïàͬ²ã");
                //            UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);

                //        }


                //    }
                //}

                //#endregion

                //#region Ãñº½¶þËù£¬14005 14006 ÔÚÈ¡³µÖ¸ÁîǰÅжÏ.2ÊÇ·ñΪ1£¬1±íʾ²æ×ÓÒѾ­ÊÕµ½Î» .1Ϊ1±íÃ÷²æ×ÓÉ쵽λ .2Ϊ1±íÃ÷²æ×ÓÊÕµ½Î»

                //if ((DeviceIdx == 14005|| DeviceIdx == 14006) && (order == 4|| order == 5))
                //{
                //    if (devinfo.SplitByte_2 != 1)
                //    {
                //        AheadDetectUnallow.Append("ÌáÉý»ú"+ DeviceIdx.ToString() + "²æ×ÓδÊÕµ½ÕýȷλÖÃ");
                //        UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx);
                //        return false;
                //    }
                //}

                //#endregion

                #endregion
                return true;


            }
            catch (Exception ex)
            {
                RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", "·¢ËÍÖ¸ÁîÌáǰ¼ì²âʱ·¢Éú´íÎó£º" + ex.StackTrace + ex.Message);
                OnRefreshMonitor(rme);
                return false;
            }
            finally
            {
                dv.Dispose();
                dvdv.Dispose();
                barcodeDV.Dispose();
            }
        }

        private bool IFExitTopPriDeviceIdxTaskWait(int DeviceIdx)
        {
            sql.Clear();
            DataView dv0 = new DataView(); DataView dv = new DataView();
            try
            {
                sql.Append(string.Format("SELECT F_ManageTaskIndex, F_ManageTASKKINDINDEX FROM T_Monitor_Task WHERE (F_DeviceIndex = {0})", DeviceIdx));
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                for (int i = 0; i < dv.Count; i++)
                {
                    sql.Clear();
                    sql.Append(string.Format("SELECT top 1 F_DeviceIndex,F_Status FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) and F_ManageTaskIndex={1} order by F_MonitorIndex asc", Convert.ToInt32(dv[i]["F_ManageTASKKINDINDEX"]), Convert.ToInt32(dv[i]["F_ManageTASKINDEX"])));
                    dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                    if (dv0.Count > 0)
                    {
                        if ((dv0[0]["F_DeviceIndex"].ToString() == DeviceIdx.ToString()) && (dv0[0]["F_Status"].ToString() == "0"))
                        {
                            return true;
                        }
                    }
                }
                return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv0.Dispose();
            }
        }

        private int GetBarcodeCoor(int xcoor, int zcoor)
        {
            DataView dv = new DataView();
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT BarcodeCoor FROM T_Base_BarcodeCoor WHERE (XCoor = {0}) AND (ZCoor = {1})", xcoor, zcoor)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return Convert.ToInt32(dv[0][0]);
                }
                else
                {
                    dv = dbo.ExceSQL(string.Format("SELECT BarcodeCoor FROM T_Base_BarcodeCoor WHERE (XCoor1 = {0}) AND (ZCoor1 = {1})", xcoor, zcoor)).Tables[0].DefaultView;
                    if (dv.Count > 0)
                    {
                        return Convert.ToInt32(dv[0][0]);
                    }
                    else
                    {
                        return 0;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }

        /// <summary>
        /// »ñµÃ·¢ËÍÐÅÏ¢
        /// </summary>
        /// <param name="minMidx">É豸ָÁîË÷Òý</param>
        public bool GetSendInfo(int minMidx)
        {
            DataView dvD = new DataView();
            try
            {

                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_DeviceKindIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,").Append(
                    "F_NumParam5,F_NumParam6,F_TxtParam,F_AheadDetect,F_ManTaskReserve,F_LockedState,").Append(
                    "F_Associate,F_SerialNumber,F_RouteID,F_DeviceIndex,F_DeviceCommandIndex,").Append(
                    "F_MonitorIndex,F_ManageTaskIndex,F_ManageTaskKindIndex,F_OutsideAltDevice,").Append(
                    "F_InsideAltDevice,F_StartDevice,F_EndDevice,F_RouteKind,F_UseAwayFork,F_AgvNo ").Append(
                    " FROM  V_Monitor_Route_Device where F_MonitorIndex=").Append(minMidx);

                dvD = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;

                if (dvD.Count > 0)
                {
                    if (dvD[0]["F_AheadDetect"] != DBNull.Value)
                    {
                        _AheadDetect = dvD[0]["F_AheadDetect"].ToString();
                    }
                    else
                    {
                        _AheadDetect = "";
                    }
                    if (dvD[0]["F_ManTaskReserve"] != DBNull.Value)
                    {
                        _ManTaskReserve = Convert.ToInt32(dvD[0]["F_ManTaskReserve"]);
                    }
                    else
                    {
                        _ManTaskReserve = 0;
                    }
                    if (dvD[0]["F_Associate"] != DBNull.Value)
                    {
                        _Associate = Convert.ToInt32(dvD[0]["F_Associate"]);
                    }
                    else
                    {
                        _Associate = 0;
                    }
                    if (dvD[0]["F_LockedState"] != DBNull.Value)
                    {
                        _LockedState = Convert.ToInt32(dvD[0]["F_LockedState"]);
                    }
                    else
                    {
                        _LockedState = 0;
                    }
                    if (dvD[0]["F_NumParam1"] != DBNull.Value)
                    {
                        _NumParam1 = Convert.ToInt32(dvD[0]["F_NumParam1"]);
                    }
                    else
                    {
                        _NumParam1 = 0;
                    }
                    if (dvD[0]["F_NumParam2"] != DBNull.Value)
                    {
                        _NumParam2 = Convert.ToInt32(dvD[0]["F_NumParam2"]);
                    }
                    else
                    {
                        _NumParam2 = 0;
                    }
                    if (dvD[0]["F_NumParam3"] != DBNull.Value)
                    {
                        _NumParam3 = Convert.ToInt32(dvD[0]["F_NumParam3"]);
                    }
                    else
                    {
                        _NumParam3 = 0;
                    }
                    if (dvD[0]["F_NumParam4"] != DBNull.Value)
                    {
                        _NumParam4 = Convert.ToInt32(dvD[0]["F_NumParam4"]);
                    }
                    else
                    {
                        _NumParam4 = 0;
                    }
                    if (dvD[0]["F_NumParam5"] != DBNull.Value)
                    {
                        _NumParam5 = Convert.ToInt32(dvD[0]["F_NumParam5"]);
                    }
                    else
                    {
                        _NumParam5 = 0;
                    }
                    if (dvD[0]["F_NumParam6"] != DBNull.Value)
                    {
                        _NumParam6 = Convert.ToInt32(dvD[0]["F_NumParam6"]);
                    }
                    else
                    {
                        _NumParam6 = 0;
                    }
                    if (dvD[0]["F_TxtParam"] != DBNull.Value)
                    {
                        _TxtParam = dvD[0]["F_TxtParam"].ToString();
                    }
                    else
                    {
                        _TxtParam = "-";
                    }
                    _serialNumber = Convert.ToInt32(dvD[0]["F_SerialNumber"]);
                    _routeID = Convert.ToInt32(dvD[0]["F_RouteID"]);
                    _DeviceIdx = Convert.ToInt32(dvD[0]["F_DeviceIndex"]);
                    _DeviceOrder = Convert.ToInt32(dvD[0]["F_DeviceCommandIndex"]);
                    _ManageKindIdx = Convert.ToInt32(dvD[0]["F_ManageTaskKindIndex"]);
                    _ManageTaskIdx = Convert.ToInt32(dvD[0]["F_ManageTaskIndex"]);
                    _DeviceKind = Convert.ToInt32(dvD[0]["F_DeviceKindIndex"]);
                    if (dvD[0]["F_OutsideAltDevice"] != DBNull.Value)
                    {
                        _OutsideAltDevice = Convert.ToInt32(dvD[0]["F_OutsideAltDevice"]);
                    }
                    else
                    {
                        _OutsideAltDevice = 0;
                    }
                    if (dvD[0]["F_InsideAltDevice"] != DBNull.Value)
                    {
                        _InsideAltDevice = Convert.ToInt32(dvD[0]["F_InsideAltDevice"]);
                    }
                    else
                    {
                        _InsideAltDevice = 0;
                    }
                    _StartDevice = Convert.ToInt32(dvD[0]["F_StartDevice"]);
                    _EndDevice = Convert.ToInt32(dvD[0]["F_EndDevice"]);
                    _RouteKind = Convert.ToInt32(dvD[0]["F_RouteKind"]);

                    if (dvD[0]["F_AgvNo"] != DBNull.Value)
                    {
                        _AgvNo = Convert.ToInt32(dvD[0]["F_AgvNo"]);
                    }
                    else
                    {
                        _AgvNo = 65535;
                    }
                    return true;
                }
                else
                {//20120420
                    CControlError = string.Format("·¢ËÍÃüÁîµ÷ÓÃGetSendInfoʱ£ºÂ·¾¶±íÀ{0}¡¿É豸Ë÷Òý²»´æÔÚ£¡", GetDeviceFromMonitor(minMidx).ToString());

                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dvD.Dispose();
            }
        }
        /// <summary>
        /// ·¢ËÍÖ¸¶¨µ÷¶ÈÈÎÎñºÅµÄÃüÁî
        /// </summary>
        /// <param name="MonitorIndex"></param>
        /// <returns></returns>
        public bool SendMonitorTask(int MonitorIndex)
        {
            try
            {
                lock (thisLock)
                {
                    char[] sep = new char[1] { '-' };
                    int msgIdx = 0;//ÏûÏ¢±àºÅ
                    bool sendok;
                    int jiangqunum = 0;
                    int boxnum = 0;// add by lyj20180503
                    #region ×¢ÊÍ by lyj20180619 ¶à²æ¹ØÁªÉ豸ָÁÈç¹û²»ÄÜͬ²½Ö´ÐУ¬·¢Ë;àÀë¶Ñ¶â»úµ±Ç°Î»ÖýüµÄÉ豸ָÁî
                    //MonitorIndex = GetDoubleForkMinRouteTask(MonitorIndex);
                    //if (MonitorIndex == -1) { return false; }
                    #endregion

                    //»ñµÃÒª·¢Ë͵ÄÐÅÏ¢
                    if (GetSendInfo(MonitorIndex) == false) { return false; }



                    int deviceIdx = _DeviceIdx;
                    int deviceKind = _DeviceKind;
                    int deviceOrder = _DeviceOrder;
                    int manageKindIdx = ccf.GetManageTaskKindIndexFromMonitor(MonitorIndex);
                    long manageTaskIdx = ccf.GetManageTaskIndexfromMonitor(MonitorIndex);
                    int tasktype = ccf.GetFCONTROLTASKTYPEFromManageTask(manageKindIdx, manageTaskIdx);
                    devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);

                    int relaiddd = ccf.GetRELATIVECONTORLIDFromManageTask(manageKindIdx, manageTaskIdx);
                    #region add by lyj20180508ÓйØÁªµÄËÍ»õÈÎÎñ£¬·¢ËÍʱ¼ì²âÊÇ·ñÓÐÈ¡»õÖ¸ÁÈç¹ûÓÐÔò²»·¢ËÍ
                    if (deviceKind==40&&deviceOrder==5&&relaiddd>0)
                    {
                        bool flags = ccf.getSentOrNoTask(deviceOrder,relaiddd);

                        if(flags==true)
                        {
                            return false;
                        }
                    }
                    #endregion
                    //if (((deviceKind == 1 && (devinfo.YCoor == 0)) || (deviceKind == 4) && (devinfo.XCoor == 0) && (devinfo.YCoor == 0)) && (devinfo.VirtualStack != deviceIdx))//20130510
                    //{
                    //    AheadDetectUnallow.Clear();
                    //    AheadDetectUnallow.Append(_DeviceIdx.ToString() + "µÄ¹âͨѶ±»ÕÚµ²£¬»òÕßûÉϵ磡");
                    //    UpdateAheadDetectUnallow(AheadDetectUnallow, MonitorIndex);
                    //    return false;
                    //}
                    #region  add by ÉϺ£êɵú·ÖÅä´©Ëó°å Ãñº½¶þËù
                    //if (devinfo.IsShuttleBorad == 1 && devinfo.DeviceKind == 1 && deviceIdx == 11000)
                    //{
                    //    if (deviceOrder==2)
                    //    {
                    //       int shuttleBoardNum= getShuttleBoradNum(MonitorIndex, deviceIdx);

                    //       if (shuttleBoardNum > 0)
                    //       {
                    //           deviceIdx = shuttleBoardNum;
                    //       }
                    //       else 
                    //       {
                    //           return false;
                    //       }
                            
                    //    }
                    //}
                    #endregion
                    else 
                    {
                        

                        if (deviceOrder == 5 && devinfo.DeviceKind == 1 && jiangqunum > 0 && devinfo.IsShuttleBorad != 1)
                        {
                            return false;
                        }

                    }

                   






                    if (ccf.GetManageTaskKindIndexFromMonitor(MonitorIndex) == 4)
                    {
                        #region ÊÖ¹¤ÈÎÎñ
                        string ah = "I" + deviceIdx.ToString();
                        if ((deviceKind != 1) && ((deviceKind != 4)))
                        {
                            ah = "";
                        }
                        if (AheadDetectOK(MonitorIndex, ah) == false) //²»·ûºÏÔËÐÐÌõ¼þccf.GetBeDetectedDevices(_DeviceIdx))
                        {
                            return false;
                        }

                        //CStaticClass.MessageIndex++;
                        CStaticClass.MessageIndex = 1;
                        msgIdx = (CStaticClass.MessageIndex);

                        sdo = CommModeCreate.CreateSendDeviceOrder(deviceIdx);

                        int[] gc = new int[6] { _NumParam2, _NumParam3, _NumParam1, _NumParam5, _NumParam6, _NumParam4 };

                        if ((deviceKind == 1) || (deviceKind == 6))
                        {

                            #region 20201021_C2³§·¿£¬Éϱ¨´©Ëó°å½«ÒªÇ°ÍùÄÄÒ»²ã
                            //if (devinfo.IsShuttleBorad == 1 && deviceOrder == 4)
                            //{
                            //    sql.Remove(0, sql.Length);
                            //    sql.Append("SELECT * FROM SHUTTLE_POSITION WHERE F_DeviceIndex = ")
                            //        .Append(deviceIdx.ToString());
                            //    DataView dv = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            //    if (dv.Count > 0)
                            //    {
                            //        if (gc[1] != Convert.ToInt32(dv[0]["F_Postion"]))
                            //        {
                            //            sql.Remove(0, sql.Length);
                            //            sql.Append("UPDATE SHUTTLE_POSITION SET F_Postion = ")
                            //                .Append(gc[1].ToString()).Append(" WHERE F_DeviceIndex = ")
                            //                .Append(deviceIdx.ToString());
                            //            dboM.ExecuteSql(sql.ToString());
                            //            CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "¸üйÜÀí´©Ëó°åλÖÃ",
                            //                deviceIdx.ToString(),
                            //                "¸ü¸ÄΪ£º" + gc[1].ToString("D2"));
                            //        }
                            //    }

                            //}
                            #endregion

                            sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder,
                               deviceIdx, gc[0], gc[1], gc[2], gc[3], gc[4], gc[5]);

                        }
                        else if (deviceKind == 4)
                        {
                            if (ccf.NeedOptimize(deviceIdx) == true)
                            {
                                ccf.InsertMonitorOptimizeChildTask(MonitorIndex);
                                sendok = true;
                            }
                            else
                            {

                                sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder, deviceIdx, gc[2]);
                            }

                        }

                        else
                        {

                            sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder, deviceIdx, gc[5]);
                        }
                        if (sendok == false)
                        {
                            if (sdo.CommLayerError != null)
                            {
                                RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", sdo.CommLayerError);
                                OnRefreshMonitor(rmea);
                            }
                            return false;
                        }
                        else
                        {
                            //////////////////////////
                            ccf.SendOrderSuccess(manageKindIdx, manageTaskIdx, MonitorIndex, deviceIdx, _routeID);
                            #region ¶à²æ¹ØÁªÈÎÎñ£¬ÄÜͬ²½µÄͬʱ±¨¸æ·¢ËÍÃüÁî³É¹¦
                            //20100323
                            devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
                            if (devinfo.IfCorrelDoubleFork == "1")
                            {
                                int[] mforkMoninfo = Model.CGeneralFunction.MutiForkIfSync(MonitorIndex, deviceIdx, deviceKind);
                                if (mforkMoninfo != null)
                                {
                                    Dictionary<int, string[]> corr = Model.CGeneralFunction.GetDoubleForkMonitorInfo(MonitorIndex, deviceIdx);
                                    for (int i = 0; i < mforkMoninfo.GetLength(0); i++)
                                    {
                                        ccf.SendOrderSuccess(ccf.GetManageTaskKindIndexFromMonitor(mforkMoninfo[i]), ccf.GetManageTaskIndexfromMonitor(mforkMoninfo[i]), mforkMoninfo[i], Convert.ToInt32(corr[mforkMoninfo[i]][2]), Convert.ToInt32(corr[mforkMoninfo[i]][3]));

                                    }
                                }
                            }
                            #endregion
                            return true;
                        }
                        #endregion
                    }


                    #region ×Ô¶¯ÃüÁî(taskkind == 1£¬2)
                    //(taskkind == 1£¬2)×Ô¶¯ÃüÁîºÍÁÙʱ¹ÜÀí¹ÜÀíÃüÁî
                    ///////////////////////////////////////
                    //2--6Ó¦¸Ã×öµÝ¹éµ÷Óú¯Êý
                    ///////////////////////////////////////
                    /////////////////////
                    //20100208
                    #region »·Ðδ©Ëó³µRGV·ÖÅä³µºÅÐÞ¸ÄÌáǰ¼ì²â

                    #endregion
                    ////////////////////


                    //2£ºÌáȡÿ¸ö¹ÜÀíµ¥¾ÝµÄµÚÒ»¸öÉ豸״̬


                   
                    if (GetFirstDeviceIFLocked(MonitorIndex, true) == false)//ûÓб»Ëø¶¨£¬¿ÕÏÐ
                    {
                        devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);

                        

                        //7£º·¢ËÍ´ËÉ豸ÃüÁî
                        //CStaticClass.MessageIndex++;
                        CStaticClass.MessageIndex = 1;
                        msgIdx = (CStaticClass.MessageIndex);
                        sdo = CommModeCreate.CreateSendDeviceOrder(deviceIdx);
                        //ÅжÏÉ豸ÊÇ·ñΪ¶Ñ¶â»úRGVºÍ£Á£Ç£Ö
                        int[] gc = new int[6] { _NumParam2, _NumParam3, _NumParam1, _NumParam5, _NumParam6, _NumParam4 };//»ñµÃ×ø±ê
                        if (gc == null)
                        {
                            this.CControlError += string.Format("·¢ËÍÃüÁîʱ²»ÄÜÈ¡µÃÉè±¸×ø±ê£¡");
                            return false;
                        }
                        #region ͬÆðµã´æÔÚ¶àÌõµÈ´ýÏ·¢ÈÎÎñ£¬Òì³£¿ØÖÆ
                        if (deviceKind == 2)//
                        {//ÊäËÍÏß,Ö±´©,»·´©
                            int StartStation = GetMonitorStartStationfromMonitor(MonitorIndex);//Æðµãվ̨
                            DataView taskMsgs = new DataView();
                            //»ñȡͬÆðµãµÄµÈ´ýÏ·¢µÄ×ÓÈÎÎñÐÅÏ¢
                            taskMsgs = dbo.ExceSQL(string.Format("select F_ManageTaskIndex,F_MonitorIndex" +
                                  " from T_Monitor_Task where F_NumParam1={0}  and F_Status=0 ",
                                  StartStation)).Tables[0].DefaultView;
                            //ɸѡÆäÖÐÕýҪ׼±¸Ï·¢µÄÈÎÎñ
                            int count = 0;
                            foreach (DataRowView taskMsg in taskMsgs)
                            {
                                var taskNumMin = dbo.ExceSQL(string.Format("select top 1 F_MonitorIndex" +
                                    " from T_Monitor_Task where F_ManageTaskIndex={0} order by F_MonitorIndex",
                                    taskMsg["F_ManageTaskIndex"])).Tables[0].DefaultView;
                                var MinTaskNum = taskNumMin[0]["F_MonitorIndex"].ToString();
                                var NowTaskNum = taskMsg["F_MonitorIndex"].ToString();
                                if (MinTaskNum == NowTaskNum)
                                {//×îСÈÎÎñ==µ±Ç°ÈÎÎñ£¬¼ÆÊý¼Ó1
                                    count++;
                                }
                            }
                            if (count > 1)
                            {
                                AheadDetectUnallow.Clear();
                                AheadDetectUnallow.Append(string.Format("µ±Ç°ÈÎÎñÆðµã´æÔÚ¶àÌõµÈ´ýÏ·¢µÄÈÎÎñ£¬Çë´¦ÀíÒì³£ÈÎÎñ", deviceIdx));
                                UpdateAheadDetectUnallow(AheadDetectUnallow, MonitorIndex);
                                return false;
                            }
                        }
                        #endregion
                        if ((deviceKind == 1) || (deviceKind == 6))
                        {

                            //1£º¶Ñ¶â»ú£»4£ºRGV£»6£ºAGVÈç¹ûÐèÒªÓÅ»¯µ÷¶È£¨É豸±íµÄF_NeedOptimize='1'£©
                            //Ö±½ÓдÈë±í£ºT_Monitor_Task_Child£¬²»·¢ËÍÃüÁî
                            if (ccf.NeedOptimize(deviceIdx) == true)
                            {
                                ccf.InsertMonitorOptimizeChildTask(MonitorIndex);
                                sendok = true;
                            }
                            else
                            {
                                sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder,
                                    deviceIdx, gc[0], gc[1], gc[2], gc[3], gc[4], gc[5]);
                            }


                        }
                        else if (_DeviceKind == 4)
                        {
                            if (ccf.NeedOptimize(deviceIdx) == true)
                            {
                                ccf.InsertMonitorOptimizeChildTask(MonitorIndex);
                                sendok = true;
                            }
                            else
                            {
                                sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder, deviceIdx, gc[2]);
                            }

                        }
                        else if (_DeviceKind == 7)
                        {
                            int ControlType = ccf.GetFCONTROLTASKTYPEFromManageTask(_ManageKindIdx, _ManageTaskIdx);
                            #region ÌõÂëÉ豸ֱ½Ó±È¶Ô
                            DataView dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Base_PLC_Ask ,T_Monitor_Task WHERE T_Base_PLC_Ask.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex AND T_Base_PLC_Ask.F_BarCode = T_Monitor_Task.F_TxtParam and (T_Monitor_Task.F_MonitorIndex = {0})", MonitorIndex)).Tables[0].DefaultView;
                            if ((dv.Count > 0) || (ControlType != 1))
                            {//±È¶ÔÕýÈ·
                                object[] obj = new object[3] { _ManageKindIdx, _ManageTaskIdx, Model.CGeneralFunction.TASKABEND };
                                dbo.ExecuteSql(string.Format("UPDATE T_Manage_Task SET FExceptionNO=NULL WHERE (F_ManageTaskKindIndex ={0}) AND (FID ={1}) and FExceptionNO={2}", obj));

                                Model.CGeneralFunction.ActionComplete(deviceIdx, MonitorIndex, 0);
                            }
                            else
                            {//±È¶Ô´íÎ󣬸ĵÀÒì³£´¦Àí¿Ú 
                                //ÐÞ¸ÄÄ¿±êλÖÃÖÁÒì³£¿Ú
                                dv = dbo.ExceSQL(string.Format("SELECT F_Remark,F_BindingDevice,F_BarCode FROM T_Base_PLC_Ask WHERE T_Base_PLC_Ask.F_DeviceIndex = {0}", deviceIdx)).Tables[0].DefaultView;
                                if (dv.Count > 0)
                                {
                                    if ((CStaticClass.DeviceErrorAutoModifyRoutePath == "1") && (dv[0]["F_BarCode"].ToString() != "111111"))
                                    {
                                        object[] obj = new object[5] { _ManageKindIdx, _ManageTaskIdx, Convert.ToInt32(dv[0][" "]), Model.CGeneralFunction.TASKABEND, Convert.ToInt32(dv[0]["F_BindingDevice"]) };
                                        dbo.ExecuteSql(string.Format("UPDATE T_Manage_Task SET FExceptionNO={3},FSTARTDEVICE ={4}, FSTARTCELL ='-',FENDDEVICE ={2}, FENDCELL ='-',  FENDUCODE =0 WHERE (F_ManageTaskKindIndex ={0}) AND (FID ={1})", obj));
                                        ccf.GetUseableRouteIDSubAndModifyRoute(_ManageTaskIdx, _ManageKindIdx, Convert.ToInt32(dv[0]["F_BindingDevice"]));
                                    }
                                    else
                                    {
                                        Model.MError me;
                                        if (dv[0]["F_BarCode"].ToString() == "-")//ɨÃèÆ÷δ¶ÁÌõÂë
                                        {
                                            me = null;
                                            Model.CGeneralFunction.ActionComplete(deviceIdx, MonitorIndex, 0);
                                            //me = Model.CGetInfo.GetErrorInfo(732);
                                            //dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_Status=32 WHERE (T_Monitor_Task.F_MonitorIndex = {0})", MonitorIndex));
                                        }
                                        else if (dv[0]["F_BarCode"].ToString().IndexOf("111111") >= 0)
                                        {//"1111111111"ÌõÂëδ¶Áµ½
                                            object[] obj = new object[3] { _ManageKindIdx, _ManageTaskIdx, Model.CGeneralFunction.TASKABEND };
                                            dbo.ExecuteSql(string.Format("UPDATE T_Manage_Task SET FExceptionNO={2} WHERE (F_ManageTaskKindIndex ={0}) AND (FID ={1})", obj));

                                            Model.CGeneralFunction.ActionComplete(deviceIdx, MonitorIndex, 0);
                                            //dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_Status=30 WHERE (T_Monitor_Task.F_MonitorIndex = {0})", MonitorIndex));
                                            me = Model.CGetInfo.GetErrorInfo(730);

                                        }
                                        else
                                        {//ÌõÂë²»ÕýÈ·
                                            object[] obj = new object[3] { _ManageKindIdx, _ManageTaskIdx, Model.CGeneralFunction.TASKABEND };
                                            dbo.ExecuteSql(string.Format("UPDATE T_Manage_Task SET FExceptionNO={2} WHERE (F_ManageTaskKindIndex ={0}) AND (FID ={1})", obj));

                                            Model.CGeneralFunction.ActionComplete(deviceIdx, MonitorIndex, 0);
                                            // dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_Status=31 WHERE (T_Monitor_Task.F_MonitorIndex = {0})", MonitorIndex));
                                            me = Model.CGetInfo.GetErrorInfo(731);

                                        }
                                        if (me != null)
                                        {
                                            RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("notifyIcon1", "¾¯¸æ:" + devinfo.DeviceName + "," + deviceIdx + "·¢Éú¹ÊÕÏ£º" + me.ErrorName);
                                            OnRefreshMonitor(rmea);
                                        }
                                    }
                                    if (_ManageKindIdx == 1)
                                    {
                                        sql.Remove(0, sql.Length);
                                        sql.Append("update IO_Control set ERROR_TEXT='").Append(devinfo.DeviceName).Append(",").Append(deviceIdx).Append("ÌõÂë²»ÕýÈ·£¡").Append("' where CONTROL_ID=").Append(manageTaskIdx);
                                        dboM.ExceSQL(sql.ToString());
                                    }
                                }
                            }
                            //20130709 dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '-' WHERE (F_DeviceIndex = {0}) ", deviceIdx));

                            #endregion
                            return true;
                        }
                        else if (_DeviceKind == 8)
                        {//20130510ÔÚ¶©ÔÄ´¦Àí³ÆÖØÈÎÎñºÍÖØÁ¿
                            //#region ³ÆÖØ
                            ////DataView dv = dbo.ExceSQL(string.Format("SELECT F_BoxBarcode FROM T_Base_PLC_Ask WHERE F_BoxBarcode<>'0' and T_Base_PLC_Ask.F_DeviceIndex = {0}", deviceIdx)).Tables[0].DefaultView;
                            ////if (dv.Count > 0)
                            ////{
                            ////    //Ïò¹ÜÀíдÈëÖØÁ¿
                            ////    dboM.ExecuteSql(string.Format("UPDATE IO_CONTROL SET CONTROL_REMARK ={0} WHERE  CONTROL_ID={1}", dv[0][0].ToString(), manageTaskIdx));
                            ////    Model.CGeneralFunction.ActionComplete(deviceIdx, MonitorIndex, 0);
                            ////    dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BoxBarcode = '0' WHERE (F_DeviceIndex = {0})", deviceIdx));

                            ////}

                            //#endregion
                            //return true;
                            sendok = true;
                        }
                        #region  add by lyj20180428¼ÓÈë´©Ëó°å¿âË«²æÌáÉý»ú
                        else if (_DeviceKind == 40)
                        {

                            boxnum = Model.CGeneralFunction.getDoubleForkMonitorCount(MonitorIndex,tasktype,deviceOrder);

                            sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder, deviceIdx, gc[5], boxnum);
                        }
                        #endregion
                        else 
                        {
                            sendok = sdo.SendDeviceOrder(msgIdx, MonitorIndex, deviceOrder, deviceIdx, gc[5]);
                        }

                        if (sendok == false)
                        {
                            if (sdo.CommLayerError != null)
                            {
                                RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", sdo.CommLayerError);
                                OnRefreshMonitor(rmea);
                            }
                            return false;
                        }
                        else//·¢ËÍÃüÁî³É¹¦
                        {
                            #region 20210425_ÉϺ£êɵú£¬·¢ËͳäµçÈÎÎñ³É¹¦£¬ÉèÖóäµçËø
                            //if (tasktype == 6)
                            //{
                            //    sql.Remove(0, sql.Length);
                            //    sql.Append("UPDATE T_Base_Device SET F_SwitchLock = ").Append(MonitorIndex)
                            //        .Append(" WHERE F_DeviceIndex = ").Append(deviceIdx);
                            //    dbo.ExecuteSql(sql.ToString());
                            //}
                            #endregion

                            sql.Remove(0, sql.Length);
                            sql.Append("update T_Monitor_Task set F_SendFlag='1' where F_MonitorIndex=").Append(MonitorIndex);
                            dbo.ExecuteSql(sql.ToString());//20100905Ö»ÖØ·¢Ö÷ÈÎÎñ

                            ccf.SendOrderSuccess(manageKindIdx, manageTaskIdx, MonitorIndex, deviceIdx, _routeID);
                          
                             #region ¶à²æ¹ØÁªÈÎÎñ£¬ÄÜͬ²½µÄͬʱ±¨¸æ·¢ËÍÃüÁî³É¹¦
                            //20100323
                            devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
                            int[] corrtask = Model.CGeneralFunction.MutiForkIfSync(MonitorIndex, deviceIdx, deviceKind);
                            if (devinfo.IfCorrelDoubleFork == "1" && devinfo.DeviceKind == 40  && boxnum == 2 )
                            {
                               
                                if (corrtask != null)
                                {
                                    long rfid = 0;
                                    int  rmankind = 0, rdev = 0;
                                    for (int i = 0; i < corrtask.GetLength(0); i++)
                                    {
                                        if (corrtask[i]!=0) 
                                        {
                                            rfid = ccf.GetManageTaskIndexfromMonitor(corrtask[i]);
                                            rmankind = ccf.GetManageTaskKindIndexFromMonitor(corrtask[i]);
                                            rdev = ccf.GetDeviceindexFromMonitor(corrtask[i]);
                                            ccf.SendOrderSuccess(rmankind, rfid, corrtask[i], rdev, 0);
                                        }
                                        
                                      
                                    }
                                }
                            }
                            //else if (devinfo.IfCorrelDoubleFork == "1" && devinfo.DeviceKind == 40 && tasktype == 2 && boxnum == 2)
                            //{ 

                            //}
                            #endregion
                            return true;
                        }
                    }
                    else
                    {
                        
                        return false;
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {//20110608
                CControlError = string.Format("·¢ËÍÃüÁîµ÷ÓÃSendMonitorTaskʱ£º{0}", ex.StackTrace + ex.Message);

                return false;
            }
        }

        int GetDeviceFromMonitor(int monitorIndex)
        {
            DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(monitorIndex).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return Convert.ToInt32(dv[0]["F_DeviceIndex"]);
                }
                else
                {
                    return -1;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }

        /// <summary>
        /// »ñÈ¡¿ÉÓõÄÄ¿±êλÖãºÈë¿âµÄÏïµÀ»òÕß³ö¿âվ̨
        /// </summary>
        /// <param name="manageTaskIdx">µ÷¶ÈÈÎÎñË÷Òý</param>
        /// <param name="manageKindIdx">µ÷¶ÈÈÎÎñÀà±ð</param>
        /// <returns></returns>
        bool GetUsableDestination(int manageTaskIdx, int manageKindIdx)
        {
            //20100610²éÕÒÒ»¸ö·¾¶¿ÉÓã¬ÈÎÎñÊý×îÉÙµÄÖÕµãÉ豸
            Dictionary<int, int> advDev = new Dictionary<int, int>();
            object ob;
            DataView dv = new DataView();
            DataRowView dr = null;
            DataView dvIO = new DataView();
            DataTable dtd = new DataTable();
            DataTable dt = new DataTable();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT * FROM T_Manage_Task WHERE (FID = ").Append(manageTaskIdx).Append(") AND (F_ManageTaskKindIndex = ").Append(manageKindIdx).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count <= 0)
                {
                    return false;
                }
                dr = dv[0];

                //20091107
                sql.Remove(0, sql.Length);
                sql.Append("select CONTROL_ID, CONTROL_STATUS from IO_Control where (CONTROL_ID = ").Append(Convert.ToInt32(dr["FID"])).Append(") AND ((CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(") or (CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEREPLY).Append("))");
                dvIO = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dvIO.Count <= 0)
                {
                    //Ö»ÐÞÉêÇë¸Äµ÷¶ÈÈÎÎñµÄ·¾¶£¬²»Ð޸ĵ÷¶È×Ô¶¯ÈÎÎñ·¾¶
                    if (dr["F_ManageTaskKindIndex"].ToString() != "1") return false;

                    string adviceDev = "";
                    sql.Remove(0, sql.Length);
                    sql.Append("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_Warehouse='").Append(dr["FENDWAREHOUSE"]).Append("') and (F_TASKKIND = ").Append(dr["FCONTROLTASKTYPE"]).Append(") and (F_AbendStation=1) and (F_DESTINATION=").Append(dr["FENDDEVICE"]).Append(")");
                    dtd = dbo.ExceSQL(sql.ToString()).Tables[0];
                    if (dtd.Rows.Count > 0)//Ô­À´ÖÕµãÊÇÓ¦¼±Õ¾Ì¨ÄÇô»¹·ÖÅäÕâ¸öվ̨£¬²»ÐèÒª¸Ä±ä
                    {
                        adviceDev = dtd.Rows[0]["F_DESTINATION"].ToString();
                        return false;
                    }
                    else
                    {
                        //²éÕÒ¿ÉÓÃÄ¿±êλÖÃ
                        sql.Remove(0, sql.Length);
                        sql.Append("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_Warehouse='").Append(dr["FENDWAREHOUSE"]).Append("') and (F_TASKKIND = ").Append(dr["FCONTROLTASKTYPE"]).Append(") and (F_DESTINATION <>").Append(dr["FENDDEVICE"]).Append(") and (F_AbendStation=0)");
                        dt = dbo.ExceSQL(sql.ToString()).Tables[0];
                        if (dt.Rows.Count > 0)
                        {
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                if (CDisassembleTask.MinRouteID(Convert.ToInt32(dr["FSTARTDEVICE"]), Convert.ToInt32(dt.Rows[i]["F_DESTINATION"]), dr["FUseAwayFork"]) != -1)
                                {

                                    //20100610ͳ¼Æµ½ÖÕµãÉ豸ÕýÔÚÖ´ÐеÄÈÎÎñÊý
                                    sql.Remove(0, sql.Length);
                                    sql.Append("SELECT count(FENDDEVICE) as counts FROM T_Manage_Task where FENDDEVICE='").Append(dt.Rows[i]["F_DESTINATION"]).Append("' and fstatus>0");
                                    ob = dbo.GetSingle(sql.ToString());
                                    advDev.Add(Convert.ToInt32(dt.Rows[i]["F_DESTINATION"]), Convert.ToInt32(ob));

                                    //20100610 break;
                                }
                            }
                            if (advDev.Count == 0)//20100610
                            {

                                return false;


                            }
                            else
                            {//20100610
                                int mincount = 9999;
                                foreach (int aaa in advDev.Keys)
                                {
                                    if (advDev[aaa] < mincount)
                                    {
                                        mincount = advDev[aaa];
                                        adviceDev = aaa.ToString();
                                    }
                                }
                                if (adviceDev == "")
                                {

                                    return false;

                                }
                            }
                        }
                        else
                        {//20100610
                            return false;
                        }
                    }

                    string dtime = DateTime.Now.ToString("u");
                    dtime = dtime.Substring(0, dtime.Length - 1);
                    //20091128
                    dboM.TransBegin();
                    try
                    {
                        sql.Remove(0, sql.Length);
                        sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(" where CONTROL_ID=").Append(dr["FID"]).Append("");
                        dboM.ExceSQL(sql.ToString());
                        //Ïò¹ÜÀíÉêÇëÐÞ¸ÄÈÎÎñ//
                        int appid = dboM.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID

                        sql.Remove(0, sql.Length);
                        sql.Append("INSERT INTO IO_CONTROL_APPLY ( CONTROL_APPLY_ID,CONTROL_ID,CONTROL_APPLY_TYPE,WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME, ").Append(
                                " CONTROL_APPLY_REMARK)").Append(
                        "VALUES (").Append(appid).Append(",").Append(dr["FID"]).Append(",2,'").Append(dr["FENDWAREHOUSE"]).Append("','").Append(dr["FPALLETBARCODE"]).Append("','").Append(adviceDev).Append("',0,'").Append(dtime).Append("',null)");


                        dboM.ExceSQL(sql.ToString());
                        dboM.TransCommit();
                        //°ÑManageTaskIdx£¬ManageKindIdx µÄµ÷¶ÈÈÎÎñÈ«²¿ÉêÇë¸ÄµÀ
                        sql.Remove(0, sql.Length);
                        sql.Append("UPDATE T_Monitor_Task SET  F_Status = 3 WHERE (F_ManageTaskIndex = ").Append(manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX =").Append(manageKindIdx).Append(")");
                        dbo.ExceSQL(sql.ToString());
                        CommonClassLib.CCarryConvert.WriteDarkCasket("CControl.GetUsableDestination", "¶Ñ¶â»úÈë¿âÄ¿±êλÖ÷¢Éú¸ÄµÀ", "¹ÜÀíÈÎÎñ£º" +
                            manageKindIdx.ToString() + "-" + manageTaskIdx.ToString(), "ÌõÂ룺" + dr["FPALLETBARCODE"].ToString().ToUpper());
                        return true;
                    }
                    catch (Exception ex)
                    {
                        CControlError = string.Format("·¢ËÍÖ¸ÁÉêÇë¸ÄµÀʱ£º{0}", ex.StackTrace + ex.Message);
                        dboM.TransRollback();
                        return false;
                    }


                }
                else
                {
                    return false;

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dt.Dispose();
                dtd.Dispose();
                dv.Dispose();
                dvIO.Dispose();
                dr = null;
            }
        }

        bool GetRGVIdleDestination(int manageTaskIdx, int manageKindIdx, int RGVGateDevice, bool IfUseNegativeDevice)
        {

            //20100610 t_Base_device ±íF_UsableEndDevice×ֶδæ·ÅÈë¿â»òÕß³ö¿â¶ÔµÈµÄÉ豸Ë÷Òý×飨ÒԷֺŸô¿ª£©£º
            //¸ºÊý´ú±íλÓÚµ±Ç°Éè±¸Ç°Ãæ£¨»·ÐÎRGVÐÐ×ß·½ÏòµÄ·´·½Ïò£©£¬Ö»ÔÊÐíÔÚ·¢ËÍRGVÈ¡»õºÍµÚÒ»¡¢¶þ¸öÔ˶¯Ê±Ê¹Óã»
            //ÕýÊý´ú±íµ±Ç°É豸ºóÃæµÄÉ豸£¬¿ÉÒÔÔÚ·¢ËÍËÍ»õºÍ֮ǰµÄËùÓÐÃüÁîʹÓÃ.Ö±µÀRGV¶¼ÊÇÕýÊý¡£
            //T_Base_RGV_GateÐÂÔö×ֶΡ°F_EndDevice¡±ÓÃÓÚ¼ÇÔØÈë¿âʱ¿¿½üÏïµÀÒ»²àµÄRGV³öÈë¿ÚÊäËÍ»úµÄ¶ÔÓ¦µÄÏïµÀÉ豸Ë÷Òý
            //»òÕß³ö¿âʱ¿¿½ü³ö¿âվ̨һ²àµÄÊäËÍ»ú¶ÔÓ¦µÄ³ö¿âվ̨Ë÷Òý

            //¿É±ä¸üÄ¿±êλÖõÄÑ¡ÔñÔ­Ôò£ºRGVÄ¿±êλÖÿÕÏС¢ÎÞÎĿ±êλÖòÎÓëµÄÕýÔÚÖ´Ðеĵ÷¶ÈÈÎÎñÊý×îÉÙ

            DataView dv = new DataView();
            DataRowView dr = null;

            string adviceDev = "";
            char[] cc = new char[1] { ';' };
            string[] sp;
            DataView dvIO = new DataView();
            Dictionary<int, int> advDev = new Dictionary<int, int>();
            object ob;
            DataView dvu = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT * FROM T_Manage_Task WHERE (FID = ").Append(manageTaskIdx).Append(") AND (F_ManageTaskKindIndex = ").Append(manageKindIdx).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count <= 0)
                {
                    return false;
                }
                dr = dv[0];
                //Ö»ÐÞÉêÇë¸Äµ÷¶ÈÈÎÎñµÄ·¾¶£¬²»Ð޸ĵ÷¶È×Ô¶¯ÈÎÎñ·¾¶
                if (dr["F_ManageTaskKindIndex"].ToString() != "1") return false;
                sql.Remove(0, sql.Length);
                sql.Append("select CONTROL_ID, CONTROL_STATUS from IO_Control where (CONTROL_ID = ").Append(Convert.ToInt32(dr["FID"])).Append(") AND ((CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(") or (CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKCANCEL).Append(") or(CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEREPLY).Append("))");
                dvIO = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dvIO.Count <= 0)
                {

                    #region ¸ù¾ÝT_Base_Device±íµÄF_UsableEndDevice²éÕÒ¿ÉÓÃÖÕµãÉ豸
                    sql.Remove(0, sql.Length);
                    sql.Append("select F_UsableEndDevice from T_Base_Device where F_UsableEndDevice is not null and F_DeviceIndex=").Append(RGVGateDevice).Append("");
                    dvu = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                    if (dvu.Count > 0)
                    {
                        int enddv = 0, DESTINATION = 0;
                        sp = dvu[0]["F_UsableEndDevice"].ToString().Split(cc);

                        for (int i = sp.GetLowerBound(0); i <= sp.GetUpperBound(0); i++)
                        {
                            if (int.TryParse(sp[i], out enddv) == false) continue;
                            enddv = Convert.ToInt32(sp[i]);
                            if (enddv < 0)
                            {
                                //¸ºÊý´ú±íµ±Ç°Éè±¸Ç°ÃæµÄÉ豸£¨»·ÐÎRGVÐÐ×ß·½ÏòµÄ·´·½Ïò£©
                                if (IfUseNegativeDevice == true)
                                {
                                    enddv = -(enddv);
                                }
                                else
                                {
                                    continue;
                                }
                            }
                            devinfo = Model.CGetInfo.GetDeviceInfo(enddv);
                            if ((devinfo.HaveGoods == true) || (devinfo.RunState == 2))
                            {//Ä¿±êλÖñ»Õ¼ÓûòÕß¹ÊÕÏ
                                continue;
                            }
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT F_EndDevice FROM T_Base_RGV_Gate WHERE (F_RGVGateDeviceIndex = ").Append(enddv).Append(") AND (F_EndDevice IS NOT NULL)");
                            ob = dbo.GetSingle(sql.ToString());
                            if (ob == null) continue;
                            DESTINATION = Convert.ToInt32(ob);
                            if (CDisassembleTask.MinRouteID(Convert.ToInt32(dr["FSTARTDEVICE"]), DESTINATION, dr["FUseAwayFork"]) != -1)
                            {
                                //20100609ͳ¼Æµ½ÖÕµãÉ豸ÕýÔÚÖ´ÐеÄÈÎÎñÊý
                                sql.Remove(0, sql.Length);
                                sql.Append("SELECT count(FENDDEVICE) as counts FROM T_Manage_Task where FENDDEVICE='").Append(DESTINATION).Append("' and fstatus>0");
                                ob = dbo.GetSingle(sql.ToString());
                                advDev.Add(DESTINATION, Convert.ToInt32(ob));

                            }

                        }
                    }
                    else
                    {
                        return false;
                    }

                    if (advDev.Count <= 0)
                    {
                        return false;
                    }
                    else
                    {
                        int mincount = 9999;
                        foreach (int aaa in advDev.Keys)
                        {
                            if (advDev[aaa] < mincount)
                            {
                                mincount = advDev[aaa];
                                adviceDev = aaa.ToString();
                            }
                        }
                        if (adviceDev == "")
                        {

                            return false;

                        }
                    }
                    #endregion

                    //20101108int fid = dboM.GetManageTableIndex("IO_CONTROL_APPLY");
                    string dtime = DateTime.Now.ToString("u");
                    dtime = dtime.Substring(0, dtime.Length - 1);

                    dboM.TransBegin();
                    try
                    {
                        sql.Remove(0, sql.Length);
                        sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(" where CONTROL_ID=").Append(dr["FID"]).Append(" and CONTROL_STATUS<>").Append(Model.CGeneralFunction.TASKCANCEL).Append("");
                        dboM.ExceSQL(sql.ToString());
                        //Ïò¹ÜÀíÉêÇëÐÞ¸ÄÈÎÎñ
                        int appid = dboM.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID

                        sql.Remove(0, sql.Length);
                        sql.Append("INSERT INTO IO_CONTROL_APPLY (CONTROL_APPLY_ID, CONTROL_ID, WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)").Append(
                        "VALUES (").Append(appid).Append(",").Append(dr["FID"]).Append(",'").Append(dr["FENDWAREHOUSE"]).Append("','").Append(dr["FPALLETBARCODE"]).Append("','").Append(adviceDev).Append("',0,'").Append(dtime).Append("',null)");

                        dboM.ExceSQL(sql.ToString());
                        dboM.TransCommit();
                        //°ÑManageTaskIdx£¬ManageKindIdx µÄµ÷¶ÈÈÎÎñÈ«²¿ÉêÇë¸ÄµÀ
                        sql.Remove(0, sql.Length);
                        sql.Append("UPDATE T_Monitor_Task SET  F_Status = 3 WHERE (F_ManageTaskIndex = ").Append(manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX =").Append(manageKindIdx).Append(")");
                        dbo.ExceSQL(sql.ToString());
                        CommonClassLib.CCarryConvert.WriteDarkCasket("CControl.GetRGVIdleDestination", "´©Ëó³µÄ¿±êλÖ÷¢Éú¸ÄµÀ", "¹ÜÀíÈÎÎñ£º" +
                        manageKindIdx.ToString() + "-" + manageTaskIdx.ToString(), "ÌõÂ룺" + dr["FPALLETBARCODE"].ToString().ToUpper());
                        return true;
                    }
                    catch (Exception ex)
                    {
                        dboM.TransRollback();
                        CControlError = string.Format("·¢ËÍÖ¸ÁÉêÇë¸ÄµÀʱ£º{0}", ex.StackTrace + ex.Message);
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                CControlError = string.Format("·¢ËÍÖ¸ÁÉêÇë¸ÄµÀʱ£º{0}", ex.StackTrace + ex.Message);
                return false;
            }
            finally
            {
                dv.Dispose();
                dr = null;
                cc = null;
                sp = null;
                dvIO.Dispose();
                dvu.Dispose();
            }
        }
        /// <summary>
        /// ·µ»ØÔÚ¶¥Éý´¦Èë¿âÈÎÎñ¿ÉÒÔ¶à²æ¹ØÁªµÄµ÷¶ÈÈÎÎñË÷Òý
        /// </summary>
        /// <param name="controlTaskType">¿ØÖÆÈÎÎñÀàÐÍ</param>
        /// <param name="devindex">É豸Ë÷Òý</param>
        /// <returns></returns>
        long GetEnableDoubleForkManageTask(int controlTaskType, int devindex, long FID)
        {
            DataView dv0 = new DataView(); DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_MonitorIndex,T_Monitor_Task.F_ManageTaskIndex,T_Monitor_Task.F_ManageTASKKINDINDEX FROM T_Monitor_Task ,T_Manage_Task where T_Monitor_Task.F_ManageTaskIndex = T_Manage_Task.FID AND T_Monitor_Task.F_ManageTASKKINDINDEX = T_Manage_Task.F_ManageTaskKindIndex AND F_DeviceIndex=").Append(devindex).Append(" and FCONTROLTASKTYPE=").Append(controlTaskType);
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    for (int i = 0; i < dv.Count; i++)
                    {
                        sql.Remove(0, sql.Length);
                        sql.Append("select min(F_MonitorIndex) as mm from T_Monitor_Task where F_ManageTaskIndex=").Append(dv[i]["F_ManageTaskIndex"]).Append(" and F_ManageTASKKINDINDEX=").Append(dv[i]["F_ManageTASKKINDINDEX"]);
                        dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dv0.Count > 0)
                        {
                            if (dv0[0]["mm"].ToString() == dv[i]["F_MonitorIndex"].ToString())
                            {
                                if (FID != Convert.ToInt64(dv[i]["F_ManageTaskIndex"]))
                                {
                                    return Convert.ToInt64(dv[i]["F_ManageTaskIndex"]);
                                }
                            }
                        }
                    }
                    return -1;
                }
                else
                {
                    return -1;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv0.Dispose();
            }
        }
        /// <summary>
        /// »ñµÃ¶Ñ¶â»úÔÚ¶ÔµÈվ̨ȡ»õµÄ¶à²æ¹ØÁªÈÎÎñ
        /// </summary>
        /// <param name="controlTaskType">¿ØÖÆÈÎÎñÀàÐÍ</param>
        /// <param name="Stackdevindex">¶Ñ¶â»úÉ豸Ë÷Òý</param>
        /// <param name="StationDevice">վ̨É豸Ë÷Òý</param>
        /// <param name="FID">µ÷¶ÈÈÎÎñË÷Òý</param>
        /// <returns></returns>
        int GetEnableDoubleForkManageTask(int controlTaskType, int Stackdevindex, int StationDevice, int FID)
        {
            DataView dv1 = new DataView();
            DataView dv0 = new DataView();
            DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_ZXY FROM T_Base_Lane_Gate,T_Base_LaneInfo WHERE ").Append(
                    "(T_Base_Lane_Gate.F_LaneIndex = T_Base_LaneInfo.F_LaneDeviceIndex) and (T_Base_LaneInfo.F_StackIndex = ").Append(
                    Stackdevindex).Append(") and (F_LaneGateDeviceIndex=").Append(StationDevice).Append(")");
                dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv1.Count <= 0) return -1;
                char[] cc = new char[1] { '-' };
                string[] zxy = dv1[0]["F_ZXY"].ToString().Split(cc);

                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_MonitorIndex,T_Monitor_Task.F_ManageTaskIndex,T_Monitor_Task.F_ManageTASKKINDINDEX ").Append(
                    " FROM T_Monitor_Task ,T_Manage_Task where T_Monitor_Task.F_ManageTaskIndex = T_Manage_Task.FID AND ").Append(
                    "T_Monitor_Task.F_ManageTASKKINDINDEX = T_Manage_Task.F_ManageTaskKindIndex AND F_DeviceIndex=").Append(
                    Stackdevindex).Append(" and FCONTROLTASKTYPE=").Append(controlTaskType).Append(" and F_NumParam1=").Append(zxy[0]).Append(
                    " and F_NumParam2=").Append(zxy[1]).Append(" and F_NumParam3=").Append(zxy[2]).Append(" and F_RELATIVECONTORLID<>").Append(FID);
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    for (int i = 0; i < dv.Count; i++)
                    {
                        sql.Remove(0, sql.Length);
                        sql.Append("select min(F_MonitorIndex) as mm from T_Monitor_Task where F_ManageTaskIndex=").Append(dv[i]["F_ManageTaskIndex"]).Append(" and F_ManageTASKKINDINDEX=").Append(dv[i]["F_ManageTASKKINDINDEX"]).Append(" ");
                        dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dv0.Count > 0)
                        {
                            if (dv0[0]["mm"].ToString() == dv[i]["F_MonitorIndex"].ToString())
                            {
                                if (FID != Convert.ToInt32(dv[i]["F_ManageTaskIndex"]))
                                {
                                    return Convert.ToInt32(dv[i]["F_ManageTaskIndex"]);
                                }
                            }
                        }
                    }
                    return -1;
                }
                else
                {
                    return -1;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv0.Dispose();
                dv1.Dispose();
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Mankind">µ÷¶ÈÈÎÎñÀàÐÍË÷Òý</param>
        /// <param name="FID">µ÷¶ÈÈÎÎñË÷Òý</param>
        /// <param name="ControlTaskType">µ÷¶ÈÈÎÎñÀàÐÍ</param>
        /// <param name="UseAwayFork">×îºó·ÖÅäµÄÔ¶¡¢½ü»õ²æ</param>
        void AlterRoutePath(int Mankind, long FID, int ControlTaskType, char UseAwayFork, int NowDevice)
        {
            DataView dv = new DataView(); DataView dv1 = new DataView(); DataView dvnew = new DataView();

            //ÏÈÕÒµ½ÒÔǰµÄ·¾¶ÊÇ·ñÓë×îºó·ÖÅäµÄ»õ²æÆ¥Å䣬²»Æ¥ÅäµÄ¸ÄµÀ
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT  T_Monitor_Task.F_MonitorIndex,T_Monitor_Task.F_DeviceIndex FROM T_Monitor_Task,T_Base_Route_Device where ").Append(
                    " T_Monitor_Task.F_RouteID = T_Base_Route_Device.F_RouteIDSub AND T_Monitor_Task.F_DeviceIndex = T_Base_Route_Device.F_DeviceIndex and T_Monitor_Task.F_ManageTaskIndex=").Append(
                    FID).Append(" and T_Monitor_Task.F_ManageTASKKINDINDEX=").Append(Mankind).Append(" and T_Base_Route_Device.F_UseAwayFork<>'").Append(UseAwayFork).Append("'");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    sql.Remove(0, sql.Length);
                    sql.Append("select * from T_Manage_Task where F_ManageTaskKindIndex=").Append(Mankind).Append(" and FID=").Append(FID);
                    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                    if (dv.Count > 0)
                    {
                        //20100702
                        sql.Remove(0, sql.Length);
                        sql.Append("SELECT T_Base_Route_Device.F_RouteIDSub FROM T_Base_Route,T_Base_Route_Device where T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID ").Append(
                            " and (T_Base_Route_Device.F_UseAwayFork = '").Append(UseAwayFork).Append("') AND (T_Base_Route_Device.F_DeviceIndex = ").Append(NowDevice).Append(") AND (T_Base_Route.F_StartDevice = ").Append(
                            dv[0]["FSTARTDEVICE"]).Append(") AND (T_Base_Route.F_EndDevice = ").Append(dv[0]["FENDDEVICE"]).Append(" and F_RouteKind=").Append(ControlTaskType).Append(")");
                        ;
                        dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dv1.Count > 0)
                        {
                            int routeidNew = Convert.ToInt32(dv1[0][0]);
                            //ɾ³ýÔ­À´µÄÉêÇëÐ޸ķ¾¶ÈÎÎñ£¬²ð·ÖеÄÈÎÎñ²¢ÇÒÖ»±£ÁôÏÖÓÐÉ豸¿ªÊ¼µÄÈÎÎñ
                            sql.Remove(0, sql.Length);
                            sql.Append("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(FID).Append(") AND (F_ManageTASKKINDINDEX =").Append(Mankind).Append(")");
                            dbo.ExceSQL(sql.ToString());
                            if (CDisassembleTask.CreateMonitor(Mankind, FID, routeidNew, dv[0], 3) > 0)
                            {
                                sql.Remove(0, sql.Length);
                                sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(
                                                FID).Append(") AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_DeviceIndex = ").Append(
                                                NowDevice).Append(") AND (F_RouteID = ").Append(routeidNew).Append(
                                                ") AND (F_Status = 3) ");
                                dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                if (dvnew.Count > 0)
                                {
                                    sql.Remove(0, sql.Length);
                                    sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append(
                                    FID).Append(") AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_Status = 3)");
                                    dbo.ExceSQL(sql.ToString());
                                    sql.Remove(0, sql.Length);
                                    sql.Append("update  T_Monitor_Task set F_Status =0 where  (F_ManageTaskIndex = ").Append(
                                    FID).Append(") AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_Status = 3)");
                                    dbo.ExceSQL(sql.ToString());


                                }
                            }
                        }

                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv1.Dispose();
                dvnew.Dispose();
            }
        }

        /// <summary>
        /// ÅжÏË«²æÈÎÎñ²»ÄÜ
        /// </summary>
        /// <param name="taskno"></param>
        /// <returns></returns>
        int GetDoubleForkMinRouteTask(int taskno)
        {
            DataView dv = new DataView();
            try
            {

                //²»ÊÇË«²æµÄÖ±½Ó·µ»Øtaskno£»ÊÇË«²æµ«ÊÇ¿ÉÒÔͬ²½µÄÖ±½Ó·µ»Øtaskno
                //Ë«²æ²»ÄÜͬ²½µÄ·´À¡¾àÀ뵱ǰ¶Ñ¶â»úλÖÃ×î¶ÌµÄtaskno

                int manKind = Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(taskno);
                long manFid = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(taskno);
                int deviceindex = Model.CGeneralFunction.GetDeviceIndexFromMonitor(taskno);
                int devKind = Model.CGeneralFunction.GetDeviceKindIdx(deviceindex);
                int devOrder = Model.CGeneralFunction.GetDeviceOrderFromMonitor(taskno);

                devinfo = Model.CGetInfo.GetDeviceInfo(deviceindex);

                int nX = Model.CGeneralFunction.GetXCoorFromMonitor(taskno, deviceindex, devOrder);
                int nY = Model.CGeneralFunction.GetYCoorFromMonitor(taskno, deviceindex, devOrder);
                double nXY = 0, doubleXY = 0, doubleX = 0, doubleY = 0;
                nXY = Math.Pow((double)(nX - devinfo.XCoor), 2) + (Math.Pow((double)(nY - devinfo.YCoor), 2));

                if (devinfo.IfCorrelDoubleFork == "1")
                {
                    Dictionary<int, string[]> df = Model.CGeneralFunction.GetDoubleForkMonitorInfo(taskno, deviceindex);
                    if (df == null) return taskno;
                    if (Model.CGeneralFunction.MutiForkIfSync(taskno, deviceindex, devKind) == null)
                    {
                        #region ±éÀúÿ¸ö¹ØÁªÈÎÎñ

                        foreach (int cortask in df.Keys)
                        {
                            //20120906
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT F_MonitorIndex FROM dbo.T_Monitor_Task WHERE (F_MonitorIndex = ").Append(cortask).Append(") AND (F_status = 0)");
                            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dv.Count <= 0)
                            {
                                continue;
                            }

                            #region ¹ØÁªÖ¸Áî²»ÊǵÚÒ»¸öÖ¸Áî²»ÄÜ·¢ËÍ
                            int rmankind = Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(cortask);
                            long rman = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(cortask);
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT MIN(F_MonitorIndex) AS mmi FROM dbo.T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(rman).Append(") AND (F_ManageTASKKINDINDEX = ").Append(rmankind).Append(")");
                            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dv.Count > 0)
                            {
                                if ((dv[0]["mmi"] != DBNull.Value) && (dv[0]["mmi"].ToString() != cortask.ToString()))
                                {
                                    return -1;
                                }
                            }
                            #endregion
                            if (devKind == 1)//¶Ñ¶â»ú
                            {//Èç¹û´æÔÚµ¹¿â»õ룬ÔòºóÖ´ÐиÃÈÎÎñ20120906¼ÎÐ˵çÁ¦¸Ä½ø£¬µ¹¿â»õλµÄÈ¡»õÃüÁî¼ì²â¶Ñ¶â»ú»õ²æ¶ÔÓ¦¿ª¹ØÊÇ·ñÓлõ
                                //if (devOrder == 5)//ËÍ»õÖ¸ÁîʱÅжÏ20110505
                                //{

                                //    if (true == IfChangeForkCell_LastRun(cortask))
                                //    {
                                //        continue;
                                //    }

                                //}
                                doubleX = Model.CGeneralFunction.GetXCoorFromMonitor(cortask, deviceindex, devOrder);
                                doubleY = Model.CGeneralFunction.GetYCoorFromMonitor(cortask, deviceindex, devOrder);
                                doubleXY = Math.Pow((double)(doubleX - devinfo.XCoor), 2) + (Math.Pow((double)(doubleY - devinfo.YCoor), 2));
                                if (nXY > doubleXY)
                                {
                                    nXY = doubleXY;
                                    taskno = cortask;
                                }

                            }
                            else if (devKind == 6)//AGV
                            {
                                sql.Remove(0, sql.Length);
                                sql.Append("SELECT F_Sequence FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = ").Append(nX).Append(")");
                                nXY = Convert.ToInt32(dbo.GetSingle(sql.ToString()));
                                sql.Remove(0, sql.Length);
                                sql.Append("SELECT F_Sequence FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = ").Append(doubleX).Append(")");
                                doubleXY = Convert.ToInt32(dbo.GetSingle(sql.ToString()));
                                if (nXY < doubleXY)
                                {
                                    return taskno;
                                }
                                else
                                {
                                    return Convert.ToInt32(df[0]);
                                }
                            }
                            else
                            {
                                return taskno;
                            }
                        }

                        #endregion
                        //·µ»Ø×îСֵµÄÈÎÎñºÅ
                        return taskno;

                    }
                    else
                    {
                        #region ±éÀúÿ¸ö¹ØÁªÈÎÎñ

                        foreach (int cortask in df.Keys)
                        {

                            #region ¹ØÁªÖ¸Áî²»ÊǵÚÒ»¸öÖ¸Áî²»ÄÜ·¢ËÍ
                            int rmankind = Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(cortask);
                            long rman = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(cortask);
                            sql.Remove(0, sql.Length);
                            sql.Append("SELECT MIN(F_MonitorIndex) AS mmi FROM dbo.T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(rman).Append(") AND (F_ManageTASKKINDINDEX = ").Append(rmankind).Append(")");
                            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                            if (dv.Count > 0)
                            {
                                if ((dv[0]["mmi"] != DBNull.Value) && (dv[0]["mmi"].ToString() != cortask.ToString()))
                                {
                                    return -1;
                                }
                            }
                            #endregion

                        }

                        #endregion

                        return taskno;
                    }

                }
                else
                {
                    return taskno;
                }
            }
            catch (Exception ex)
            {
                CControlError = string.Format("·¢ËÍÃüÁîµ÷ÓÃGetDoubleForkMinRouteTaskʱ£º{0},{1}", sql.ToString(), ex.StackTrace + ex.Message);
                return taskno;
            }
            finally
            {
                dv.Dispose();
            }

        }


        bool IFAGVGate(int devIndex)
        {
            sql.Remove(0, sql.Length);
            sql.Append("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = ").Append(devIndex).Append(")");
            if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// ͬ¹ìÁ½¸ö¶Ñ¶â»ú×éºÏ×÷Òµ£¬Í¨¹ýÖÐת»õλ½»Ìæ×÷Òµ
        /// </summary>
        /// <param name="taskindex"></param>
        /// <param name="ChangeStackCell"></param>
        /// <param name="StackIndex"></param>
        void ChangeStackCellCode(int taskindex, string ChangeStackCell, int StackIndex)
        {//20120820
            int[] zxy = ccf.GetCoordinatesFromMonitorTask(taskindex);
            StringBuilder zxystr = new StringBuilder();
            DataView dvl = new DataView(); DataView dv = new DataView();
            if (zxy != null)
            {
                zxystr.Append((zxy[3].ToString().Length == 1 ? "0" + zxy[3].ToString() : zxy[3].ToString())).Append("-").Append(
                    ((zxy[4].ToString().Length == 1) ? ("0" + zxy[4].ToString()) : (zxy[4].ToString()))).Append("-").Append(
                    ((zxy[5].ToString().Length == 1) ? ("0" + zxy[5].ToString()) : (zxy[5].ToString())));
            }
            int laneway = 0;
            dvl = dbo.ExceSQL(string.Format("SELECT F_LaneDeviceIndex FROM  T_Base_LaneInfo WHERE (F_StackIndex = {0})", StackIndex)).Tables[0].DefaultView;
            if (dvl.Count > 0)
            {
                laneway = Convert.ToInt32(dvl[0]["F_LaneDeviceIndex"]);
            }
            else
                return;

            char[] cc = new char[1] { '-' };
            string[] endCell = ChangeStackCell.Split(cc);
            long fid = ccf.GetManageTaskIndexfromMonitor(taskindex);
            int Mankind = ccf.GetManageTaskKindIndexFromMonitor(taskindex);
            //dbo.TransBegin();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate,T_Base_Device WHERE (T_Base_Lane_Gate.F_LaneGateDeviceIndex = T_Base_Device.F_DeviceIndex) and (F_ZXY = '").Append(ChangeStackCell).Append("') and F_LaneIndex=").Append(laneway);
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    sql.Remove(0, sql.Length);//20120420
                    sql.Append("update T_Monitor_Task set F_AheadDetect=F_AheadDetect+'").Append(";N").Append(dv[0]["F_LaneGateDeviceIndex"].ToString()).Append(";R").Append(dv[0]["F_LaneGateDeviceIndex"].ToString())
                        .Append("', F_NumParam4=").Append(endCell[0]).Append(",F_NumParam5=").Append(endCell[1]).Append(",F_ChangeStackCell='").Append(laneway.ToString() + "," + ChangeStackCell
                        ).Append("',F_NumParam6=").Append(endCell[2]).Append(" where F_ManageTaskIndex=").Append(fid).Append(" and F_ManageTASKKINDINDEX=").Append(Mankind).Append(" and F_DeviceIndex=").Append(StackIndex);
                    dbo.ExecuteSql(sql.ToString());
                    sql.Remove(0, sql.Length);
                    sql.Append("update T_Manage_Task set FREMARK='").Append(zxystr.ToString()).Append("',FExceptionNO=").Append(Model.CGeneralFunction.TASKCHANGESTACK).Append(" where FID=").Append(fid).Append(" and F_ManageTaskKindIndex=").Append(Mankind);
                    dbo.ExecuteSql(sql.ToString());
                }
                //dbo.TransCommit();
            }
            catch (Exception ex)
            {
                throw ex;
                //dbo.TransRollback();
            }
            finally
            {
                dv.Dispose();
                dvl.Dispose();
            }
        }
        int GetIOControlStatus(int TaskIndex)
        {
            int mankind = ccf.GetManageTaskKindIndexFromMonitor(TaskIndex);
            long Fid = ccf.GetManageTaskIndexfromMonitor(TaskIndex);
            if (mankind == 1)
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT CONTROL_STATUS FROM IO_CONTROL WHERE (CONTROL_ID = ").Append(Fid).Append(")");
                object ob = dboM.GetSingle(sql.ToString());
                if (ob != null)
                {
                    return Convert.ToInt32(ob);
                }
                else
                {
                    return 1;
                }
            }
            else
            {
                return 1;
            }
        }
        /// <summary>
        /// ·µ»ØAGVË«²æµÄ¹ØÁªÕ¾Ì¨,¡°-1¡±´ú±íûÓйØÁª
        /// </summary>
        /// <param name="taskindex">É豸ָÁîË÷Òý</param>
        /// <returns></returns>
        int GetAGVCorrelIndex(int taskindex)
        {
            sql.Remove(0, sql.Length);
            sql.Append("SELECT F_NumParam2 FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(taskindex).Append(")");
            object ob = dbo.GetSingle(sql.ToString());
            if (ob != null)
            {
                int cs = Convert.ToInt32(ob);
                if (cs % 2 == 0)
                {
                    return (cs - 1);
                }
                else
                {
                    return (cs + 1);
                }
            }
            else
            {
                return -1;
            }
        }
        int GetAGVCorrelConveyorIndex(int taskindex)
        {
            sql.Remove(0, sql.Length);
            sql.Append("SELECT F_NumParam2 FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(taskindex).Append(")");
            object ob = dbo.GetSingle(sql.ToString());
            if (ob != null)
            {
                int cs = Convert.ToInt32(ob);
                if (cs % 2 == 0)
                {
                    return (cs + 1);
                }
                else
                {
                    return (cs - 1);
                }
            }
            else
            {
                return -1;
            }
        }
        /// <summary>
        /// ·µ»ØAGVÔÚ´Ëվ̨ȡ»õµÄµ÷¶ÈÈÎÎñË÷Òý
        /// </summary>
        /// <param name="controltype">¿ØÖÆÈÎÎñÀàÐÍ</param>
        /// <param name="stationIndex">AGVվ̨Ë÷Òý</param>
        /// <returns></returns>
        int GetAGVEnableDoubleForkManageTask(int controltype, int stationIndex, int agv)
        {//20110412
            DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_MonitorIndex,T_Monitor_Task.F_ManageTaskIndex,T_Monitor_Task.F_ManageTASKKINDINDEX  ").Append(
                    " FROM T_Monitor_Task ,T_Manage_Task where T_Monitor_Task.F_ManageTaskIndex = T_Manage_Task.FID AND ").Append(
                    "T_Monitor_Task.F_ManageTASKKINDINDEX = T_Manage_Task.F_ManageTaskKindIndex and FCONTROLTASKTYPE=").Append(
                    controltype).Append(" and F_NumParam2=").Append(stationIndex).Append(" and F_DeviceIndex=").Append(agv).Append(" and F_Status=0 and F_DeviceCommandIndex=2");

                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return Convert.ToInt32(dv[0]["F_ManageTaskIndex"]);
                }

                return -1;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }
        bool IfInSameLimitX(int fid, int mfid, int manKind)
        {
            DataView dv = new DataView(); DataView dv1 = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_ForwardLimitX,F_BackLimitX,FEndCol FROM T_Manage_Task,T_Base_LaneInfo WHERE T_Manage_Task.FLANEWAY = T_Base_LaneInfo.F_LaneDeviceIndex and (F_ManageTaskKindIndex = ").Append(manKind).Append(") AND (FID = ").Append(fid).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count == 0)
                {
                    return false;
                }
                sql.Remove(0, sql.Length);
                sql.Append("SELECT F_ForwardLimitX,F_BackLimitX,FEndCol FROM T_Manage_Task,T_Base_LaneInfo WHERE T_Manage_Task.FLANEWAY = T_Base_LaneInfo.F_LaneDeviceIndex and (F_ManageTaskKindIndex = ").Append(manKind).Append(") AND (FID = ").Append(mfid).Append(")");
                dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv1.Count == 0)
                {
                    return false;
                }
                if ((dv[0]["FEndCol"].ToString() == dv[0]["F_ForwardLimitX"].ToString()) && (dv1[0]["F_ForwardLimitX"].ToString() == dv1[0]["FEndCol"].ToString()))
                {
                    return true;
                }
                if ((dv[0]["FEndCol"].ToString() == dv[0]["F_BackLimitX"].ToString()) && (dv1[0]["F_BackLimitX"].ToString() == dv1[0]["FEndCol"].ToString()))
                {
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv1.Dispose();
            }
        }
        int GetAGVFromConveyorDoubleForkGetGoodManageTask(int controltype, int stationIndex, int agv)
        {
            DataView dv0 = new DataView();
            DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT T_Monitor_Task.F_ManageTaskIndex,F_MonitorIndex,T_Manage_Task.F_ManageTaskKindIndex  ").Append(
                    " FROM T_Monitor_Task ,T_Manage_Task where T_Monitor_Task.F_ManageTaskIndex = T_Manage_Task.FID AND ").Append(
                    "T_Monitor_Task.F_ManageTASKKINDINDEX = T_Manage_Task.F_ManageTaskKindIndex and FCONTROLTASKTYPE=").Append(
                    controltype).Append(" and F_NumParam2=").Append(stationIndex).Append(" and F_DeviceIndex=").Append(agv).Append("  and F_Status=0  and F_DeviceCommandIndex=2 order by F_MonitorIndex asc");//20110412
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    for (int i = 0; i < dv.Count; i++)
                    {
                        sql.Remove(0, sql.Length);
                        sql.Append("SELECT top 1 F_MonitorIndex  ").Append(" FROM T_Monitor_Task where T_Monitor_Task.F_ManageTaskIndex = ")
                            .Append(dv[i]["F_ManageTaskIndex"].ToString()).Append(
                            " and F_ManageTASKKINDINDEX = ").Append(dv[i]["F_ManageTaskKindIndex"].ToString()).Append(" order by F_MonitorIndex asc");
                        dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dv0[0]["F_MonitorIndex"].ToString() == dv[i]["F_MonitorIndex"].ToString())
                        {

                            return Convert.ToInt32(dv[i]["F_ManageTaskIndex"]);
                        }
                    }
                }

                return -1;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv0.Dispose();
            }
        }
        bool IFHaveSameEndDevice(int fid, int CorrelFid, int mti)
        {
            DataView dv0 = new DataView(); DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT FENDDEVICE, FENDCELL, FUseAwayFork FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = ").Append(mti).Append(") AND (FID = ").Append(fid).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    sql.Remove(0, sql.Length);
                    sql.Append("SELECT FENDDEVICE, FENDCELL, FUseAwayFork FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = ").Append(mti).Append(") AND (FID = ").Append(CorrelFid).Append(")");
                    dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                    if (dv0.Count > 0)
                    {
                        if ((dv[0]["FENDDEVICE"].ToString() == dv0[0]["FENDDEVICE"].ToString()) && (dv[0]["FENDDEVICE"].ToString() == "28001") && (Math.Abs(Convert.ToInt32(dv[0]["FENDCELL"]) - Convert.ToInt32(dv0[0]["FENDCELL"])) == 1))//20110412
                        {
                            if ((Convert.ToInt32(dv[0]["FENDCELL"]) > Convert.ToInt32(dv0[0]["FENDCELL"])) && (Convert.ToInt32(dv[0]["FUseAwayFork"]) > Convert.ToInt32(dv0[0]["FUseAwayFork"])))
                            {
                                return true;
                            }
                            if ((Convert.ToInt32(dv[0]["FENDCELL"]) < Convert.ToInt32(dv0[0]["FENDCELL"])) && (Convert.ToInt32(dv[0]["FUseAwayFork"]) < Convert.ToInt32(dv0[0]["FUseAwayFork"])))
                            {
                                return true;
                            }
                            return false;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                dv0.Dispose();
            }
        }
        void UpdateAheadDetectUnallow(StringBuilder aheadUnallow, int taskindex)
        {
            #region 20110505Ôö¼ÓµÄÐÅÏ¢Ìáʾ
            int rec = 0;
            if (aheadUnallow.Length > 0)
            {
                rec = dbo.ExecuteSql(string.Format("UPDATE T_Monitor_Task SET  F_ErrorCode ='{0}' WHERE F_MonitorIndex ={1} and F_ErrorCode <>'{0}'", aheadUnallow.ToString(), taskindex));
            }
            else
            {
                rec = dbo.ExecuteSql(string.Format("UPDATE T_Monitor_Task SET  F_ErrorCode ='' WHERE F_MonitorIndex ={1} and F_ErrorCode <>''", aheadUnallow.ToString(), taskindex));
            }
            if (rec > 0)
            {
                CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null);
                OnDataChange("·¢ËÍÌáǰ¼ì²âʱ£¬Òì³£", cea);

            }
            #endregion
        }
        /// <summary>
        /// Èç¹ûÊǵ¹²æ»õ룬ÄÇËüºóÖ´ÐÐ
        /// </summary>
        /// <param name="TaskIndex"></param>
        /// <returns></returns>
        bool IfChangeForkCell_LastRun(int TaskIndex)
        {//20110505
            DataView dv = new DataView();
            try
            {

                int laneway = ccf.GetLaneWayFromLaneInfo(ccf.GetDeviceindexFromMonitor(TaskIndex));
                int[] zxy = ccf.GetCoordinatesFromMonitorTask(TaskIndex);
                string zxystr = (zxy[3].ToString().Length == 1 ? "0" + zxy[0].ToString() : zxy[3].ToString()) + "-" +
                        ((zxy[4].ToString().Length == 1) ? ("0" + zxy[4].ToString()) : (zxy[4].ToString())) + "-" +
                        ((zxy[5].ToString().Length == 1) ? ("0" + zxy[5].ToString()) : (zxy[5].ToString()));
                int lanedev = ccf.GetChangeCellStationFromLaneGate(laneway, zxystr);

                dv = dbo.ExceSQL(string.Format("SELECT F_ChangeForkCell FROM T_Base_LaneInfo WHERE F_LaneDeviceIndex={0} and (F_ChangeForkCell like '%{1}%' or F_ChangeForkCell like '%{2}%')", laneway, zxystr, lanedev)).Tables[0].DefaultView;
                if (dv.Count > 0)//µ¹¿â»õλµÄÈÎÎñºóÖ´ÐÐ
                {
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();

            }

        }
        /// <summary>
        /// ·ÖÅäʵ¼Ê¹¤×÷µÄ¶Ñ¶â»úÉ豸Ë÷Òý20111020
        /// </summary>
        /// <param name="deviceIndex">ÐéÄâ¶Ñ¶â»úÉ豸Ë÷Òý</param>
        /// <param name="taskIndex">É豸ָÁîË÷Òý</param>
        /// <param name="manKind">µ÷¶ÈÈÎÎñÀàÐÍ</param>
        /// <param name="fid">µ÷¶ÈÈÎÎñË÷Òý</param>
        bool AssignStackNo(int deviceIndex, int taskIndex, int manKind, int fid)
        {//20120820
            DataView dv = new DataView();
            Model.MDevice devinfo; int resDev = 0;
            try
            {
                int Xcoor = Model.CGeneralFunction.GetXCoorFromMonitor(taskIndex, deviceIndex, ccf.GetDeviceOrderFromMonitor(taskIndex));
                int Zcoor = Model.CGeneralFunction.GetZCoorFromMonitor(taskIndex, deviceIndex, ccf.GetDeviceOrderFromMonitor(taskIndex));
                int XcoorS = Model.CGeneralFunction.GetXCoorFromMonitor(taskIndex, deviceIndex, 5);
                int ZcoorS = Model.CGeneralFunction.GetZCoorFromMonitor(taskIndex, deviceIndex, 5);
                int sno = 0; bool IfCombinedWork = false;
                GetSpecialStackNo(deviceIndex, Zcoor, Xcoor, ZcoorS, XcoorS, out sno, out IfCombinedWork);
                //ÏÈ¿¼ÂÇÌØÊâÇé¿ö20111226
                if (IfCombinedWork == true)
                {
                    //Á½¸ö¶Ñ¶â»ú×éºÏ½»Ìæ×÷Òµ
                    string ChangeStackCell = GetChangeStackCell(deviceIndex);
                    if (ChangeStackCell != "")
                    {

                        ChangeStackCellCode(taskIndex, ChangeStackCell, deviceIndex);
                        SetStackNo(deviceIndex, sno, manKind, fid);
                        return true;
                    }
                    else
                    {//20120820ûÓпÕÏеÄÁ½¸ö¶Ñ¶â»ú¹«ÓõĽ»½Ó»õλ
                        return false;
                    }
                }
                //È»ºóÆäÓàÇé¿ö¸ù¾Ý×ÜÁÐÊýÕÛÖзÖÅ䏸Á½¸ö¶Ñ¶â»ú
                resDev = GetPRIStackNo(deviceIndex, Zcoor, Xcoor, ZcoorS, XcoorS);

                devinfo = Model.CGetInfo.GetDeviceInfo(resDev);
                if (devinfo.RunState == 0 && ccf.GetManTaskReserve(resDev) <= 0 && ccf.GetDeviceLockedState(resDev) == 0)
                {//¿ÕÏС¢ÎÞÈÎÎñÖ´ÐС¢ÎÞ¹ÜÀíÈÎÎñÔ¤Ô¼Ëø
                    SetStackNo(deviceIndex, resDev, manKind, fid);
                    return true;
                }
                else
                {//¸ù¾Ý35001µ±Ç°Î»ÖúÍÕýÔÚÖ´ÐеÄÈÎÎñµÄÄ¿±êλÖÿ¼ÂÇÊÇ·ñ·ÖÅä35002
                    resDev = devinfo.MutexStack;
                    devinfo = Model.CGetInfo.GetDeviceInfo(resDev);
                    if (devinfo.RunState == 0 && ccf.GetManTaskReserve(resDev) <= 0 && ccf.GetDeviceLockedState(resDev) == 0)
                    {
                        sql = new StringBuilder(string.Format("SELECT F_DeviceCommandIndex,F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4, F_NumParam5, F_NumParam6 FROM T_Monitor_Task WHERE (F_Status > 0) AND (F_DeviceIndex = {0})", devinfo.MutexStack));
                        dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dv.Count > 0)
                        {
                            if (dv[0]["F_DeviceCommandIndex"].ToString() == "4")//È¡»õ
                            {
                                if ((GetBarcodeCoor(Convert.ToInt32(dv[0]["F_NumParam2"]), Convert.ToInt32(dv[0]["F_NumParam1"])) + StackMutexXCoor) <= GetBarcodeCoor(Xcoor, Zcoor))
                                {
                                    SetStackNo(deviceIndex, resDev, manKind, fid);
                                    return true;
                                }
                            }
                            if (dv[0]["F_DeviceCommandIndex"].ToString() == "5")//ËÍ»õ
                            {
                                if ((GetBarcodeCoor(Convert.ToInt32(dv[0]["F_NumParam5"]), Convert.ToInt32(dv[0]["F_NumParam4"])) + StackMutexXCoor) <= GetBarcodeCoor(Xcoor, Zcoor))
                                {
                                    SetStackNo(deviceIndex, resDev, manKind, fid);
                                    return true;
                                }
                            }
                        }
                        else
                        {//(resDev - devinfo.MutexStack)É豸±àºÅСµÄÉ豸£¬Êµ¼ÊÐÐ×ßλÖõÄ×ø±êֵҲС
                            int xcMutex = (resDev - devinfo.MutexStack) * (GetBarcodeCoor(Xcoor, Zcoor) - Model.CGetInfo.GetDeviceInfo(devinfo.MutexStack).XCoor);//20120513
                            int xMutex = Math.Abs(GetBarcodeCoor(Xcoor, Zcoor) - Model.CGetInfo.GetDeviceInfo(devinfo.MutexStack).XCoor);
                            int xDev = Math.Abs(GetBarcodeCoor(Xcoor, Zcoor) - Model.CGetInfo.GetDeviceInfo(resDev).XCoor);
                            devinfo = Model.CGetInfo.GetDeviceInfo(devinfo.MutexStack);//20120513
                            if ((xDev < xMutex) || ((devinfo.RunState >= 2) && (devinfo.RunState <= 4) && (xcMutex > StackMutexXCoor)))//20120513
                            {
                                SetStackNo(deviceIndex, resDev, manKind, fid);
                                return true;
                            }
                        }
                    }
                }

                return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }

        private string GetChangeStackCell(int stack)
        {//20120820¸ù¾ÝÁ½¸ö¶Ñ¶â»úµÄ×éºÏÈÎÎñÅжÏÄĸö¸ü»»¶Ñ¶â»úվ̨¿ÕÏÐ
            DataView dv = new DataView();
            int fids = 0; string cell = ""; int minfids = int.MaxValue;
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT F_LaneDeviceIndex, F_ChangeStackCell  FROM  T_Base_LaneInfo where F_StackIndex={0}", stack)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    char[] cc = new char[1] { ';' };
                    string[] sp = dv[0]["F_ChangeStackCell"].ToString().Split(cc);
                    string ChangeStackCell = string.Empty;
                    int lanedev = 0;
                    for (int i = 0; i < sp.GetLength(0); i++)
                    {//T_Monitor_Task±íÐÂÔö F_ChangeStackCell  "18001,01-30-02"
                        int.TryParse(sp[i], out lanedev);
                        if (lanedev > 0)
                        {//T_Base_LaneInfo±íµÄ F_ChangeStackCell ºÍF_ChangeForkCell×ֶοÉÒÔÌîдµ¹²æ»õλ¶ÔÓ¦ÐéÄâվ̨µÄÉ豸Ë÷Òý
                            sp[i] = ccf.GetChangeCellFromLaneGate(Convert.ToInt32(dv[0]["F_LaneDeviceIndex"]), lanedev);
                        }
                        ChangeStackCell = dv[0]["F_LaneDeviceIndex"].ToString() + "," + sp[i];
                        fids = Convert.ToInt32(dbo.GetSingle(string.Format("SELECT count(distinct F_ManageTaskIndex) as fids  FROM T_Monitor_Task where F_ChangeStackCell='{0}'", ChangeStackCell)));
                        if (fids < minfids)
                        {
                            minfids = fids;
                            cell = sp[i];
                        }
                    }
                }

                return cell;


            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }
        void SetStackNo(int dummyStackno, int stackno, int manKind, int fid)
        {
            //20111226¿¼Âǵ÷ÕûÅäÌ×µÄվ̨ºÍÌáǰ¼ì²â£¬35001-32038£»35002-32036
            if (StackIfExitTask(stackno) == true) return;

            object[] ob = new object[4] { stackno, manKind, fid, dummyStackno };
            dbo.ExecuteSql(string.Format("UPDATE T_Monitor_Task SET F_DeviceIndex ={0}  WHERE (F_ManageTASKKINDINDEX = {1}) AND (F_ManageTaskIndex = {2}) AND (F_DeviceIndex = {3})", ob));
            dbo.ExecuteSql(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect =replace(F_AheadDetect,{3},{0})  WHERE (F_ManageTASKKINDINDEX = {1}) AND (F_ManageTaskIndex = {2}) ", ob));
        }
        void GetStackRunX_Zcoor(int StackdeviceIndex, out int Xcoor, out int Zcoor)
        {//20111020
            DataView dv = new DataView();
            try
            {
                Xcoor = 0;
                Zcoor = 1;
                sql = new StringBuilder(string.Format("SELECT F_DeviceCommandIndex,F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4, F_NumParam5, F_NumParam6 FROM T_Monitor_Task WHERE (F_Status > 0) AND (F_DeviceIndex = {0})", StackdeviceIndex));
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    if ((dv[0]["F_DeviceCommandIndex"].ToString() == "2") || (dv[0]["F_DeviceCommandIndex"].ToString() == "4"))//½«È¡£¬È¡»õ
                    {
                        Zcoor = Convert.ToInt32(dv[0]["F_NumParam1"]);
                        Xcoor = Convert.ToInt32(dv[0]["F_NumParam2"]);
                    }
                    else if (dv[0]["F_DeviceCommandIndex"].ToString() == "5")//ËÍ»õ
                    {
                        Zcoor = Convert.ToInt32(dv[0]["F_NumParam4"]);
                        Xcoor = Convert.ToInt32(dv[0]["F_NumParam5"]);

                    }

                }
                //else
                //{

                //    int ManTaskReserve = ccf.GetManTaskReserve(StackdeviceIndex);
                //    if (ManTaskReserve > 0)
                //    {
                //        int mti =Convert.ToInt32( ManTaskReserve.ToString().Substring(0, 1));
                //        int fid = Convert.ToInt32(ManTaskReserve.ToString().Substring(1));
                //        sql = new StringBuilder(string.Format("SELECT F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4, F_NumParam5, F_NumParam6 FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX={0}) AND (F_ManageTaskIndex = {1}) order by F_MonitorIndex asc", mti, fid));
                //        dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                //        if (dv.Count > 0)
                //        {
                //            if (dv[0]["F_DeviceIndex"].ToString() == StackdeviceIndex.ToString())
                //            {
                //                if ((dv[0]["F_DeviceCommandIndex"].ToString() == "2") || (dv[0]["F_DeviceCommandIndex"].ToString() == "4"))//½«È¡£¬È¡»õ
                //                {
                //                    Zcoor = Convert.ToInt32(dv[0]["F_NumParam1"]);
                //                    Xcoor = Convert.ToInt32(dv[0]["F_NumParam2"]);
                //                }
                //                else if (dv[0]["F_DeviceCommandIndex"].ToString() == "5")//ËÍ»õ
                //                {
                //                    Zcoor = Convert.ToInt32(dv[0]["F_NumParam4"]);
                //                    Xcoor = Convert.ToInt32(dv[0]["F_NumParam5"]);

                //                }
                //            }
                //        }
                //    }
                //}
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }

        }
        void GetStackRunReserveX_Zcoor(int StackdeviceIndex, out int Xcoor, out int Zcoor)
        {//20111020
            Xcoor = 0;
            Zcoor = 1; DataView dv = new DataView();
            try
            {
                int ManTaskReserve = ccf.GetManTaskReserve(StackdeviceIndex);
                if (ManTaskReserve > 0)
                {
                    int mti = Convert.ToInt32(ManTaskReserve.ToString().Substring(0, 1));
                    int fid = Convert.ToInt32(ManTaskReserve.ToString().Substring(1));
                    sql = new StringBuilder(string.Format("SELECT F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4, F_NumParam5, F_NumParam6 FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX={0}) AND (F_ManageTaskIndex = {1}) order by F_MonitorIndex asc", mti, fid));
                    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                    if (dv.Count > 0)
                    {
                        if (dv[0]["F_DeviceIndex"].ToString() == StackdeviceIndex.ToString())
                        {
                            if ((dv[0]["F_DeviceCommandIndex"].ToString() == "2") || (dv[0]["F_DeviceCommandIndex"].ToString() == "4"))//½«È¡£¬È¡»õ
                            {
                                Zcoor = Convert.ToInt32(dv[0]["F_NumParam1"]);
                                Xcoor = Convert.ToInt32(dv[0]["F_NumParam2"]);
                            }
                            else if (dv[0]["F_DeviceCommandIndex"].ToString() == "5")//ËÍ»õ
                            {
                                Zcoor = Convert.ToInt32(dv[0]["F_NumParam4"]);
                                Xcoor = Convert.ToInt32(dv[0]["F_NumParam5"]);

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }

        }
        /// <summary>
        /// ²åÈë±ÜÈÃÖ¸Áî
        /// </summary>
        /// <param name="stackno">±ÜÈöѶâ»ú</param>
        /// <param name="order">Ö¸Áî</param>
        /// <param name="Barcodecoor">±ÜÈõ½´ïµÄÌõÂë×ø±ê</param>
        /// <param name="layerhigh">±ÜÈöѶâ»úµÄ»õÎï²ã¸ß¶È</param>
        void InsertStackMutexOrder(int stackno, int order, int Barcodecoor, int layerhigh)
        {//20111020
            DataView dv = new DataView();
            try
            {
                dv = dbo.ExceSQL("SELECT MAX(BarcodeCoor) AS maxcoor, MIN(BarcodeCoor) AS mincoor FROM T_Base_BarcodeCoor").Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    if (Barcodecoor > Convert.ToInt32(dv[0]["maxcoor"]))
                    {
                        Barcodecoor = Convert.ToInt32(dv[0]["maxcoor"]);
                    }
                    if (Barcodecoor < Convert.ToInt32(dv[0]["mincoor"]))
                    {
                        Barcodecoor = Convert.ToInt32(dv[0]["mincoor"]);
                    }
                }
                else
                {
                    return;
                }
                if (order == 2 || order == 4)
                {
                    if (CStaticClass.GetDevicePhotoelectric(stackno, 0) == 0)//20120110
                    {
                        order = 2;

                    }
                    else
                    {
                        order = 1;
                    }


                }
                else
                {
                    if (CStaticClass.GetDevicePhotoelectric(stackno, 0) == 1)//20120110
                    {
                        order = 3;

                    }
                    else
                    {
                        order = 1;
                    }

                }
                int zc = 0, xc = 0, yc = 0, zc1 = 0, xc1 = 0, yc1 = 0;
                if (stackno == 35001)
                {
                    dv = dbo.ExceSQL(string.Format("SELECT TOP 1 ABS(MIN(BarcodeCoor - {0})) AS Expr1, XCoor, ZCoor FROM T_Base_BarcodeCoor where BarcodeCoor<={0} and layerhigh<={1} and (brorder=0 or brorder={2}) GROUP BY XCoor, ZCoor ORDER BY Expr1", Barcodecoor, layerhigh, order)).Tables[0].DefaultView;
                }
                else
                {
                    dv = dbo.ExceSQL(string.Format("SELECT TOP 1 ABS(MIN(BarcodeCoor - {0})) AS Expr1, XCoor, ZCoor FROM T_Base_BarcodeCoor where BarcodeCoor>={0} and layerhigh<={1} and (brorder=0 or brorder={2}) GROUP BY XCoor, ZCoor ORDER BY Expr1", Barcodecoor, layerhigh, order)).Tables[0].DefaultView;

                }

                if (dv.Count > 0)
                {

                    if (order == 2)
                    {
                        zc = Convert.ToInt32(dv[0]["ZCoor"]);
                        xc = Convert.ToInt32(dv[0]["XCoor"]);
                        if (xc == 51) xc = 52;//20120110
                        if (xc <= 5)
                        {
                            zc = 2;
                            xc = 2;
                        }
                        yc = 1;
                        if (xc == 52) zc = 1;
                    }
                    else
                    {
                        zc1 = Convert.ToInt32(dv[0]["ZCoor"]);
                        xc1 = Convert.ToInt32(dv[0]["XCoor"]);
                        if (xc1 == 51) xc1 = 52;//20120110
                        if (xc1 <= 5)
                        {
                            zc1 = 2;
                            xc1 = 2;
                        }
                        yc1 = 1;

                        if (xc1 == 52) zc1 = 2;
                    }
                }
                else
                {
                    if (order != 1)
                    {
                        return;
                    }
                }


                dv = dbo.ExceSQL(string.Format("select F_MonitorIndex from T_Monitor_Task where F_DeviceIndex={0} and F_TxtParam='brbrbr'", stackno)).Tables[0].DefaultView;
                if (dv.Count <= 0)
                {
                    int hidx = ccf.GetTempManageIdx();
                    int hmindx = ccf.GetMonitorIndex(hidx, 2);
                    sql.Remove(0, sql.Length);
                    sql.Append("insert into T_Monitor_Task(F_MonitorTaskLevel,F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex,").
                            Append("F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_TxtParam,F_AheadDetect) ").
                            Append("values(2,").Append(ccf.GetRouteIDsub(stackno)).Append(",").
                            Append(hidx).Append(",4,").Append(hmindx).Append(",").Append(stackno).
                            Append(",").Append(order).Append(",").Append(zc).Append(",").Append(xc).Append(",").Append(yc).Append(",").Append(zc1).Append(",").Append(xc1).Append(",").Append(yc1).Append(",'brbrbr','-')");
                    dbo.ExecuteSql(sql.ToString());
                }
            }
            catch (Exception ex)
            {
                CControlError = string.Format("²åÈ뻥³â¶Ñ¶â»ú±ÜÈÃÖ¸Áîʱ£º{0}", ex.StackTrace + ex.Message);

            }
            finally
            {
                dv.Dispose();
            }
        }
        int GetNowDevice(int taskindex)
        {
            DataView dvb = new DataView();
            try
            {
                sql.Remove(0, sql.Length);
                sql.Append("SELECT  F_NumParam1 FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(taskindex).Append(")");
                dvb = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dvb.Count > 0)
                {
                    return Convert.ToInt32(dvb[0]["F_NumParam1"]);
                }
                else
                {
                    return 0;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dvb.Dispose();
            }
        }

        /// <summary>
        /// É豸ָÁî¶ÓÁÐÖÐÊÇ·ñ´æÔÚ¿ÉÒÔ¹ØÁª¶Ñ¶â»úµÄÈ¡»õÃüÁî
        /// </summary>
        /// <param name="Stackdev">¶Ñ¶â»ú</param>
        /// <param name="zxy">È¡»õ»õλ</param>
        /// <param name="Correlzxy">¹ØÁª»õλ</param>
        /// <param name="nottaskindex">´Ë´ÎÉ豸ָÁîË÷Òý</param>
        /// <returns></returns>
        bool IFHaveStackCorrelGetCommand(int Stackdev, string zxy, string Correlzxy, int nottaskindex)
        {
            DataView dv = new DataView();
            char[] cc = new char[1] { '-' };
            string[] zxystr = zxy.Split(cc);
            string[] zxystrCorrl = Correlzxy.Split(cc);
            try
            {
                int laneway = ccf.GetLaneWayNoFromStack(Stackdev);
                int corrdev = 0;
                dv = dbo.ExceSQL(string.Format("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_LaneIndex = {0}) AND (F_ZXY = '{1}')", laneway, Correlzxy)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    corrdev = Convert.ToInt32(dv[0]["F_LaneGateDeviceIndex"]);
                }

                object[] ob = new object[8] { Stackdev, nottaskindex, Convert.ToInt32(zxystr[0]), Convert.ToInt32(zxystr[1]),Convert.ToInt32(zxystr[2]),
                Convert.ToInt32(zxystrCorrl[0]),Convert.ToInt32(zxystrCorrl[1]),Convert.ToInt32(zxystrCorrl[2]) };
                dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_DeviceCommandIndex =4) AND (F_MonitorIndex<>{1}) and (((F_NumParam1 = {2}) AND (F_NumParam2 = {3}) AND (F_NumParam3 = {4})) or ((F_NumParam1 = {5}) AND (F_NumParam2 = {6}) AND (F_NumParam3 = {7})))", ob)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {//20120906²»ÊÇÒѾ­µÈ´ý¶à²æ¹ØÁªÈÎÎñ
                    sql.Remove(0, sql.Length);//ÊäËÍ»úµÈ´ýË«²æÈÎÎñºÅµÈÓڶѶâ»úÈ¡»õTaskIdx
                    sql.Append("SELECT F_TaskIndex,F_DeviceIndex,F_Remark FROM T_Base_PLC_Ask WHERE (F_TaskIndex =").Append(Convert.ToInt32(dv[0]["F_MonitorIndex"])).Append(") AND (F_DeviceIndex=").Append(corrdev).Append(")");
                    dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                    if (dv.Count > 0)
                    {
                        return false;
                    }
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
                cc = null;
                zxystrCorrl = null;
                zxystr = null;
            }
        }
        int GetDeviceOrderFromManTaskReserve(int manTaskReserve, int deviceIndex)
        {
            DataView dv = new DataView();
            try
            {
                int mti = Convert.ToInt32(manTaskReserve.ToString().Substring(0, 1));
                int fid = Convert.ToInt32(manTaskReserve.ToString().Substring(1));
                dv = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex,F_DeviceCommandIndex FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) order by F_MonitorIndex asc", mti, fid)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    if (deviceIndex == Convert.ToInt32(dv[0]["F_DeviceIndex"]))
                    {
                        return Convert.ToInt32(dv[0]["F_DeviceCommandIndex"]);
                    }
                    else
                    {
                        return -1;
                    }
                }
                else
                {
                    return -1;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }
        int GetLayerHigh(int Zcoor, int Xcoor)
        {
            DataView dv = new DataView();
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT LayerHigh FROM T_Base_BarcodeCoor WHERE (ZCoor = {0}) AND (XCoor = {1})", Zcoor, Xcoor)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return Convert.ToInt32(dv[0][0]);

                }
                else
                {
                    return 3;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }
        void InsertUpDeviceUP(int updevice, int Mankind, int ManFID, int mindex)
        {
            DataRowView drv = null; DataView dv = new DataView();
            try
            {


                dv = dbo.ExceSQL(string.Format("SELECT F_MonitorTaskLevel, F_RouteID, F_TxtParam, F_UseAwayFork,F_PriorMonitor FROM  T_Monitor_Task  WHERE F_MonitorIndex={0}", mindex)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    mindex = Convert.ToInt32(dv[0]["F_PriorMonitor"]);
                    drv = dv[0];
                }
                else
                    return;
                StringBuilder ah = new StringBuilder();
                ah.Append("D-").Append(updevice).Append(".7;D").Append(updevice).Append(".0;I").Append(updevice);
                if (DeviceAndOrderExitInMonitor(Mankind, ManFID, updevice, 9, 0) == false)
                {
                    #region Éú³ÉÊäËÍ»úÃüÁî


                    sql.Remove(0, sql.Length);
                    sql.Append("INSERT INTO T_Monitor_Task ").Append(
                        "(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append(
                        " F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,").Append(
                        " F_AheadDetect,F_TxtParam,F_UseAwayFork)").Append(
                    "VALUES (").Append(ManFID).Append(",").Append(Mankind).Append(",").Append(mindex).Append(",").Append(drv["F_MonitorTaskLevel"]
                        ).Append(",").Append(updevice).Append(",").Append(9).Append(",").Append(drv["F_RouteID"]).Append(",").Append(0).Append(",").Append(updevice).Append("," + 0
                        ).Append(",'").Append(ah).Append("','").Append(drv["F_TxtParam"]).Append("','").Append(drv["F_UseAwayFork"]).Append("')");
                    dbo.ExceSQL(sql.ToString());


                    #endregion
                }
            }
            catch (Exception ex)
            {
                CControlError = "²åÈë¶¥Éý»úÉÏÉýÖ¸Áîʱ£º" + ex.StackTrace + ex.Message;

            }
            finally
            {
                dv.Dispose();
                drv = null;
            }
        }
        /// <summary>
        /// Åжϵ÷¶È±íT_Monitor_TaskÊÇ·ñ´æÔÚµ÷¶ÈÈÎÎñµÄÉ豸ºÍÃüÁî
        /// </summary>
        /// <param name="Mankind">µ÷¶ÈÈÎÎñÀàÐÍ</param>
        /// <param name="ManFID">µ÷¶ÈÈÎÎñË÷Òý</param>
        /// <param name="DeviceIndex">É豸ËùÒý</param>
        /// <param name="Order">É豸ÃüÁî</param>
        /// <returns></returns>
        public bool DeviceAndOrderExitInMonitor(int Mankind, int ManFID, int DeviceIndex, int Order, int ArrowAddress)
        {
            DataView dv = new DataView();
            try
            {
                if (Order == -1) return true;
                sql.Remove(0, sql.Length);
                switch (ccf.GetDeviceKindIdx(DeviceIndex))
                {
                    case 1://¶Ñ¶â»ú
                        sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(ManFID).Append(")").Append(
                        " AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_DeviceIndex = ").Append(DeviceIndex).Append(")").Append(
                        " AND (F_DeviceCommandIndex = ").Append(Order).Append(")");
                        break;
                    case 2://ÊäËÍ»ú
                        sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(ManFID).Append(")").Append(
                        " AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_DeviceIndex = ").Append(DeviceIndex).Append(")").Append(
                        " AND (F_DeviceCommandIndex = ").Append(Order).Append(")");
                        break;
                    case 4://RGV
                        sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(ManFID).Append(")").Append(
                        " AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_DeviceIndex = ").Append(DeviceIndex).Append(")").Append(
                        " AND (F_DeviceCommandIndex = ").Append(Order).Append(") and F_NumParam1=").Append(ArrowAddress);
                        break;
                    case 6://AGV
                        sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(ManFID).Append(")").Append(
                        " AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_DeviceIndex = ").Append(DeviceIndex).Append(")").Append(
                        " AND (F_DeviceCommandIndex = ").Append(Order).Append(")");
                        break;
                    default:
                        sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(ManFID).Append(")").Append(
                        " AND (F_ManageTASKKINDINDEX = ").Append(Mankind).Append(") AND (F_DeviceIndex = ").Append(DeviceIndex).Append(")").Append(
                        " AND (F_DeviceCommandIndex = ").Append(Order).Append(")");
                        break;
                }
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                CControlError = "ControlSystem.CControl.DeviceAndOrderExitInMonitor:" + ex.StackTrace + ex.Message;
                return false;
            }
            finally
            {
                dv.Dispose();

            }
        }
        /// <summary>
        /// ¶Ñ¶â»úÊÇ·ñ´æÔÚ±ÜÈÃÖ¸ÁîÕýÔÚÔËÐÐ
        /// </summary>
        /// <param name="DeviceIndex"></param>
        /// <returns></returns>
        bool DeviceHandTaskIfRun(int DeviceIndex)
        {
            DataView dv = new DataView();
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task where F_ManageTASKKINDINDEX=4 and F_DeviceIndex={0} and F_Status>0", DeviceIndex)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }

        }
        /// <summary>
        /// ¶Ñ¶â»úÊÇ·ñ´æÔÚ±ÜÈÃÖ¸ÁîµÈ´ýÔËÐÐ
        /// </summary>
        /// <param name="DeviceIndex"></param>
        /// <returns></returns>
        bool DeviceHandTaskIfWaitRun(int DeviceIndex)
        {
            DataView dv = new DataView();
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task where F_ManageTASKKINDINDEX=4 and F_DeviceIndex={0} and F_Status=0", DeviceIndex)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }

        }
        bool StackIfExitTask(int stackno)
        {
            DataView dv = new DataView();
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex  FROM  T_Monitor_Task where  F_DeviceIndex={0}", stackno)).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dv.Dispose();
            }
        }

        void GetSpecialStackNo(int virStack, int startZ, int startX, int endZ, int endX, out int stackno, out bool IfCombinedWork)
        {
            stackno = 0; IfCombinedWork = false;
            int Getdevice = 0, Sendevice = 0;
            char[] fcc = new char[1] { ';' };
            char[] dcc = new char[1] { ',' };
            char[] hcc = new char[1] { '-' };
            DataView dv = new DataView();
            string[] zxys; string[] zx_x; string[] x_x;
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT T_Base_StackInfo.F_StackIndex, T_Base_StackInfo.F_SpecialZXArea,T_Base_StackInfo.F_PRIZXArea FROM T_Base_StackInfo WHERE T_Base_StackInfo.F_Mutex IS NOT NULL and T_Base_StackInfo.F_VirtualStack={0}", virStack)).Tables[0].DefaultView;

                for (int i = 0; i < dv.Count; i++)
                {
                    zxys = dv[i]["F_SpecialZXArea"].ToString().Split(fcc);//1,0-2;2,0-5

                    for (int d = 0; d < zxys.GetLength(0); d++)
                    {
                        zx_x = zxys[d].Split(dcc);
                        if (zx_x.GetLength(0) > 1)
                        {
                            for (int h = 1; h < zx_x.GetLength(0); h++)
                            {
                                x_x = zx_x[h].Split(hcc);

                                if (x_x.GetLength(0) > 1)
                                {
                                    if ((Convert.ToInt32(zx_x[0]) == startZ) && (startX >= Convert.ToInt32(x_x[0])) && (startX <= Convert.ToInt32(x_x[1])))
                                    {
                                        Getdevice = Convert.ToInt32(dv[i]["F_StackIndex"]);
                                    }
                                    if ((Convert.ToInt32(zx_x[0]) == endZ) && (endX >= Convert.ToInt32(x_x[0])) && (endX <= Convert.ToInt32(x_x[1])))
                                    {
                                        Sendevice = Convert.ToInt32(dv[i]["F_StackIndex"]);
                                    }
                                }
                            }
                        }
                    }
                }
                stackno = Getdevice;
                if (Getdevice != Sendevice)
                {
                    devinfo = Model.CGetInfo.GetDeviceInfo(Getdevice);
                    if (Sendevice == devinfo.VirtualStack)
                    {
                        IfCombinedWork = true;
                    }
                    else
                    {
                        IfCombinedWork = false;
                    }
                }
                else
                {
                    IfCombinedWork = false;
                }
            }
            catch (Exception ex)
            {
                CControlError = "·ÖÅä¶Ñ¶â»úºÅGetSpecialStackNo:" + ex.StackTrace + ex.Message;
            }
            finally
            {

            }
        }

        int GetPRIStackNo(int virStack, int startZ, int startX, int endZ, int endX)
        {
            int Getdevice = 0;
            char[] fcc = new char[1] { ';' };
            char[] dcc = new char[1] { ',' };
            char[] hcc = new char[1] { '-' };
            DataView dv = new DataView();

            string[] zxys; string[] zx_x; string[] x_x;
            try
            {
                dv = dbo.ExceSQL(string.Format("SELECT T_Base_StackInfo.F_StackIndex, T_Base_StackInfo.F_SpecialZXArea,T_Base_StackInfo.F_PRIZXArea FROM T_Base_StackInfo WHERE T_Base_StackInfo.F_Mutex IS NOT NULL and T_Base_StackInfo.F_VirtualStack={0}", virStack)).Tables[0].DefaultView;


                for (int i = 0; i < dv.Count; i++)
                {
                    zxys = dv[i]["F_PRIZXArea"].ToString().Split(fcc);//1,0-2;2,0-5

                    for (int d = 0; d < zxys.GetLength(0); d++)
                    {
                        zx_x = zxys[d].Split(dcc);
                        if (zx_x.GetLength(0) > 1)
                        {
                            for (int h = 1; h < zx_x.GetLength(0); h++)
                            {
                                x_x = zx_x[h].Split(hcc);

                                if (x_x.GetLength(0) > 1)
                                {
                                    if ((Convert.ToInt32(zx_x[0]) == startZ) && (startX >= Convert.ToInt32(x_x[0])) && (startX <= Convert.ToInt32(x_x[1])))
                                    {
                                        Getdevice = Convert.ToInt32(dv[i]["F_StackIndex"]);
                                    }

                                }
                            }
                        }
                    }
                }
                return Getdevice;
            }
            catch (Exception ex)
            {
                CControlError = "·ÖÅä¶Ñ¶â»úºÅGetPRIStackNo:" + ex.StackTrace + ex.Message;
                return Getdevice;
            }
            finally
            {
                dv.Dispose();

            }

        }
        /// <summary>
        /// »ñÈ¡¿É¹ØÁªµÄÈÎÎñ½øÐÐÅä¶à²æ¹ØÁª
        /// </summary>
        /// <param name="DevLanewayIOInfo">ÏïµÀ³öÈë¿ÚÐÅÏ¢</param>
        /// <param name="TaskIdx">É豸ָÁîË÷Òý</param>
        /// <param name="CONTROLTASKTYPE">¿ØÖÆÈÎÎñÀàÐÍ</param>
        /// <param name="mti">¿ØÖÆÈÎÎñÀà±ð</param>
        /// <param name="fid">¿ØÖÆÈÎÎñ±àºÅ</param>
        /// <param name="dtime">µ±Ç°Ê±¼ä</param>
        /// <returns></returns>
        bool GetCorrManageTask(string[] DevLanewayIOInfo, int TaskIdx, int CONTROLTASKTYPE, int mti, int fid, string dtime, out bool IfCorrTaskEnd)
        {
            IfCorrTaskEnd = false;
            DataView dv = new DataView();
            try
            {
                sql.Remove(0, sql.Length);//ÊäËÍ»úµÈ´ýË«²æÈÎÎñºÅµÈÓڶѶâ»úÈ¡»õTaskIdx
                sql.Append("SELECT F_TaskIndex,F_DeviceIndex,F_Remark FROM T_Base_PLC_Ask WHERE (F_TaskIndex =").Append(Convert.ToInt32(TaskIdx)).Append(") AND (F_Remark <> '') AND (F_DeviceIndex=").Append(DevLanewayIOInfo[0]).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    #region ÓÐÈÎÎñµÈ´ý¹ØÁªÈÎÎñ

                    string zxy = DevLanewayIOInfo[9];
                    int waitdevice = Convert.ToInt32(dv[0]["F_DeviceIndex"]);
                    //DevLanewayIOInfo[8]°üº¬¶à¸ö¹ØÁªÉ豸ÐÅÏ¢ÖðÒ»¼ì²é20120906
                    char[] cc = new char[1] { ';' };
                    string[] CorrStations = DevLanewayIOInfo[8].Split(cc);
                    foreach (string cs in CorrStations)
                    {
                        DevLanewayIOInfo = ccf.GetLanewayDeviceInfoFromStackDev(devinfo.DeviceIndex, Convert.ToInt32(cs));//¹ØÁªÕ¾Ì¨µÄÐÅÏ¢
                        string Correlzxy = DevLanewayIOInfo[9];
                        DateTime dtq = Convert.ToDateTime(dv[0]["F_Remark"]).AddSeconds(Convert.ToInt32(CStaticClass.DoubleForkWaitTime));
                        if ((GetIOControlStatus(TaskIdx) != Model.CGeneralFunction.TASKSINGLEFORKRUN) && (dtq > DateTime.Now))
                        {
                            #region û³¬Ê±,²»Êǵ¥²æÔËÐÐ

                            //20111231û³¬Ê±,²»Êǵ¥²æÔËÐÐ
                            //²éÕÒ±¾µØ¹ÜÀíÈÎÎñ×ö¶à²æ¹ØÁªÅä¶Ô£¬¹ØÁªÈÎÎñ·ÖÅä»õ²æ
                            int mfid = GetEnableDoubleForkManageTask(CONTROLTASKTYPE, devinfo.DeviceIndex, int.Parse(DevLanewayIOInfo[0]), fid);
                            if (mfid > 0)
                            {
                                #region Ë«²æÍ¬ÎªÇ°¼«ÏÞºóÕߺó¼«ÏÞ²»¹ØÁª£¬µ¥¶ÀÖ´ÐÐ
                                if ((IfInSameLimitX(fid, mfid, mti) == true) && (mti == 1))
                                {
                                    sql.Remove(0, sql.Length);
                                    sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(fid).Append(")");
                                    dboM.ExecuteSql(sql.ToString());
                                    sql.Remove(0, sql.Length);
                                    sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(mfid).Append(")");
                                    dboM.ExecuteSql(sql.ToString());
                                    CommonClassLib.CCarryConvert.WriteDarkCasket("µ¥²æÖ´ÐÐÔ­Òò", TaskIdx.ToString(), devinfo.DeviceIndex.ToString(), "Ë«²æÍ¬ÎªÇ°¼«ÏÞºóÕߺó¼«ÏÞ²»¹ØÁª£¬µ¥¶ÀÖ´ÐÐ");
                                    IfCorrTaskEnd = true;
                                    return true;
                                }
                                #endregion

                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(fid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(fid);
                                dbo.ExecuteSql(sql.ToString());
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Manage_Task set F_RELATIVECONTORLID=").Append(fid).Append(" where F_ManageTaskKindIndex=").Append(mti).Append(" and FID=").Append(mfid);
                                dbo.ExecuteSql(sql.ToString());
                                //ÅжÏÊÇ·ñΪ1²æµÄ¹ØÁªÈÎÎñ:ÊÇ£¬Å䲿½áÊø
                                if (ccf.GetManageTaskStackFork(mti, mfid) == "1")
                                {
                                    sql.Remove(0, sql.Length);
                                    sql.Append("update T_Base_PLC_Ask set F_Remark='' where (F_TaskIndex=").Append(TaskIdx).Append(")");
                                    dbo.ExecuteSql(sql.ToString());
                                    IfCorrTaskEnd = true;
                                }
                                continue;
                            }
                            else
                            {
                                //20110505
                                AheadDetectUnallow.Append(devinfo.DeviceIndex.ToString() + "Ë«²æ¶Ñ¶â»úµÈ´ý¶à²æ¹ØÁªÈ¡»õÈÎÎñ£¡");
                                UpdateAheadDetectUnallow(AheadDetectUnallow, TaskIdx);
                                continue;
                            }

                            #endregion
                        }
                        else
                        {
                            #region 20111230µ¥²æÖ´Ðм«ÏÞ»õλÐèÒªµ¹»õ²æ
                            #region ¶Ñ¶â»úÔÚ¶¥Éý»úÈ¡µ¥²æÈÎÎñ£¬ÑéÖ¤ÊÇ·ñÐèÒª»»»õ²æ
                            string ChangeForkCell = ccf.IfLimitCellChangeFork(TaskIdx, devinfo.DeviceIndex);

                            if (ChangeForkCell != "-")//Ö÷ÈÎÎñÐèÒªµ¹»»»õ²æ
                            {
                                ccf.ChangeEndCellCode(TaskIdx, ChangeForkCell, devinfo.DeviceIndex);
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Base_PLC_Ask set F_TaskIndex=0,F_Remark='' where (F_DeviceIndex=").Append(waitdevice).Append(")");
                                dbo.ExecuteSql(sql.ToString());
                                CommonClassLib.CCarryConvert.WriteDarkCasket("µ¥²æÖ´ÐÐÔ­Òò", TaskIdx.ToString(), devinfo.DeviceIndex.ToString(), "Ö÷ÈÎÎñÐèÒªµ¹»»»õ²æ");
                                IfCorrTaskEnd = true;
                                return true;
                            }
                            #endregion
                            #endregion

                            if ((IFHaveStackCorrelGetCommand(devinfo.DeviceIndex, zxy, Correlzxy, TaskIdx) == true) && (GetIOControlStatus(TaskIdx) != Model.CGeneralFunction.TASKSINGLEFORKRUN))//20101124
                            {//¶ÓÁÐÖÐÓпÉÒÔ¹ØÁªµÄÈÎÎñ£¬ÖØÐ¼ÆÊ±
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Base_PLC_Ask set F_Remark='").Append(dtime).Append("' where (F_DeviceIndex=").Append(waitdevice).Append(")");
                                dbo.ExecuteSql(sql.ToString());
                                //20110505
                                AheadDetectUnallow.Append(devinfo.DeviceIndex.ToString() + "Ë«²æ¶Ñ¶â»úÔÚË«²æ¶ÔµÈվ̨ȡ»õ" + "£¬µÈ´ý¶à²æ¹ØÁªÈÎÎñ£¡");
                                UpdateAheadDetectUnallow(AheadDetectUnallow, TaskIdx);
                                return false;
                            }
                            else
                            {//³¬Ê±»òÕß¹ÜÀíÇ¿ÖÆÖ´Ðе¥²æÈÎÎñ
                                sql.Remove(0, sql.Length);
                                sql.Append("update T_Base_PLC_Ask set F_TaskIndex=0,F_Remark='' where (F_DeviceIndex=").Append(waitdevice).Append(")");
                                dbo.ExecuteSql(sql.ToString());
                                CommonClassLib.CCarryConvert.WriteDarkCasket("µ¥²æÖ´ÐÐÔ­Òò", TaskIdx.ToString(), devinfo.DeviceIndex.ToString(), "³¬Ê±»òÕß¹ÜÀíÇ¿ÖÆÖ´Ðе¥²æÈÎÎñ");
                                IfCorrTaskEnd = true;
                                return true;
                            }

                        }
                    }
                    #endregion
                }
                return false;
            }
            catch (Exception ex)
            {
                CControlError = "»ñÈ¡¶Ñ¶â»ú¹ØÁªÅ䲿GetCorrManageTask:" + ex.StackTrace + ex.Message;
                return false;
            }
            finally
            {
                dv.Dispose();
            }
        }



      /*  
       * ·½·¨Ãû:getStackNum
       * ×÷  ÕߣºLYJ  
       * ·½·¨¹¦ÄÜ£º¸ù¾ÝÌõ¼þΪÏàÓ¦µÄÈÎÎñ·ÖÅä¶Ñ¶â»ú
       * ²ÎÊý½éÉÜ£ºtasknum±íʾÈÎÎñºÅ£»deviceIndx±íʾÉ豸Ë÷Òý£»order±íʾÃüÁî×Ö
       * ·µ »Ø Öµ£º¶Ñ¶â»ú±àºÅ £¬Èç¹ûֵΪÁãÔòû·Öµ½¶Ñ¶â»ú£¬Èç¹ûÖµ´óÓÚÁãÔò±íʾ·µ»Ø¶Ñ¶â»ú±àºÅ 
       * Íê³ÉÈÕÆÚ£º2018/01/11
       * ά»¤ÈËÔ±£º
       * ά»¤ÈÕÆÚ£º
       * ά»¤Ô­Òò£º
       * µ±Ç°°æ±¾£º1.0 
       * ǰ¼Ì°æ±¾£º1.0beta  
       */      
        public  int getStacknum(int tasknum, int deviceIndx, int order)
        {
            int stacknum1 = 0;           
            int stacknum = 0;
            int ordernum = 0;
            int x = 0;
            int z = 0;
            int laneInfo = 0;
            int lanesimple = 0;
            string lanefromz = string.Empty;
            DataView dvlane;
            DataView dvmanager;
            DataView dvlanestack;
            StringBuilder mysql = new StringBuilder();
            Model.MDevice deviceinfo = null;          
            long managernum = 0;
            DBOperator dbo = CStaticClass.dbo;
            int goallane = 0;
            int x1 = 0;
           
            try
            {
                ordernum = Model.CGeneralFunction.GetDeviceOrderFromMonitor(tasknum);
                x = Model.CGeneralFunction.GetXCoorFromMonitor(tasknum, deviceIndx, ordernum);
                z = Model.CGeneralFunction.GetZCoorFromMonitor(tasknum, deviceIndx, ordernum);
                managernum = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(tasknum);
                goallane = getStackGoalLaneNo(tasknum, deviceIndx, ordernum);
                if (z > 0)
                {
                    mysql.Append("select top 1 * from ST_CELL where F_Z=").Append(z);
                    dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                    if (dvlane.Count > 0)
                    {
                        laneInfo = Convert.ToInt32(dvlane[0]["FLaneWay"]);
                    }
                    if (laneInfo > 0)
                    {
                        switch (laneInfo)
                        {
                            case 18001:
                                lanesimple = 1;
                                break;
                            case 18002:
                                lanesimple = 2;
                                break;
                            case 18003:
                                lanesimple = 3;
                                break;
                            case 18004:
                                lanesimple = 4;
                                break;
                        }
                        #region  add by lyj 20171207  ±¾ÏïµÀÓжѶâ»úÔò²»·ÖÅä

                        mysql.Remove(0, mysql.Length);
                        mysql.Append("select  * from T_Base_StackLaneAndLayuerInfo where F_StackStatus<>0 and F_LaneNum=").Append(lanesimple);
                        dvlanestack = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                        
                        if(dvlanestack.Count>0)
                        {
                            return 0;
                        }
                        #endregion

                        #region  add by lyj 20171206 Èç¹û¸ÃÏïµÀÓÐÕýÔÚÖ´ÐеĹÜÀíÈÎÎñÔò ²»·ÖÅä¶Ñ¶â»ú
                        mysql.Remove(0, mysql.Length);
                       // mysql.Append("select * from T_Manage_Task where FSTATUS=1 and (FSTARTDEVICE=").Append(laneInfo).Append(" or FENDDEVICE=").Append(laneInfo).Append(")");
                        mysql.Append("select F_ManageTaskIndex from T_Monitor_Task where F_NumParam1 in (select distinct F_Z from ST_CELL  where FLaneWay=").Append(laneInfo).Append(") and F_Status=1");
                        dvmanager = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                        if (dvmanager.Count > 0)
                        {
                            return 0;
                        }
                        #endregion
                        if (order == 4)
                        {


                            mysql.Remove(0, mysql.Length);
                            mysql.Append("select  * from  T_Base_StackLaneAndLayuerInfo where F_LaneNum=").Append(lanesimple).Append(" order by F_Col desc");
                            dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                            #region ¹ÜÀíÏ´ïÈÎÎñËùÔÚÏïµÀµÄ¶Ñ¶â»ų́Êý

                            if (dvlane.Count>0) 
                            {
                                stacknum1 = Convert.ToInt32(dvlane[0]["F_DeviceIndex"]);
                                if (dvlane.Count == 1)
                                {
                                   
                                    deviceinfo = Model.CGetInfo.GetDeviceInfo(stacknum1);
                                    //if (deviceinfo.RunState == 0 && deviceinfo.ManTaskReserve == 0)
                                    if (deviceinfo.RunState == 0)
                                    {
                                        stacknum = stacknum1;

                                    }

                                }
                                else if (dvlane.Count == 2)
                                {
                                    x1 = Convert.ToInt32(dvlane[0]["F_Col"]);
                                    int inlane = getStackInLaneNo(stacknum1);
                                   
                                    if (x1 <= x&&inlane!=goallane)//Ä¿±êλÖò»ÊDZ¾ÏïµÀ£¬ÈÎÎñ·ÖÅä¸øÔ¶ÊäËÍÏ߶˵ĶѶâ»ú
                                    {

                                        deviceinfo = Model.CGetInfo.GetDeviceInfo(stacknum1);
                                        //if (deviceinfo.RunState == 0 && deviceinfo.ManTaskReserve == 0)
                                        if (deviceinfo.RunState == 0)
                                        {
                                            stacknum = stacknum1;

                                        }
                                    }
                                    else
                                    {

                                        deviceinfo = Model.CGetInfo.GetDeviceInfo(stacknum1);
                                        //if (deviceinfo.RunState == 0 && deviceinfo.ManTaskReserve == 0)
                                            if (deviceinfo.RunState == 0 )
                                        {

                                            sentStackLeave(stacknum1);

                                        }

                                    }


                                }
                            }
                           
                            else if (dvlane.Count == 0)
                            {

                                mysql.Remove(0, mysql.Length);
                                mysql.Append("select top 1 * from T_Base_StackLaneAndLayuerInfo where abs(F_LaneNum-").Append(lanesimple).Append(")>=1 and F_StackStatus=0  order by abs(F_LaneNum-").Append(lanesimple).Append("), F_Col desc");
                                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;

                                if (dvlane.Count > 0)
                                {

                                    stacknum1 = Convert.ToInt32(dvlane[0]["F_DeviceIndex"]);
                                }
                                deviceinfo = Model.CGetInfo.GetDeviceInfo(stacknum1);
                               // if (deviceinfo.RunState == 0 &&deviceinfo.ManTaskReserve == 0)
                                if (deviceinfo.RunState == 0)
                                {
                                    stacknum = stacknum1;
                                }
                                #region  add by lyj20190310ÑÝʾģʽÏÂÒ»ÏïµÀÖ»·ÖÅäÒ»ºÅ¶Ñ¶â»ú
                                //mysql.Remove(0, mysql.Length);
                                //mysql.Append("select * from T_WareHouse_DemoSet where FWarehouseType='T' and FDemoFlag=1");
                                //dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                                //if (dvlane.Count > 0)
                                //{
                                    if (lanesimple == 1 || lanesimple == 2)
                                    {
                                        stacknum = 11001;
                                    }

                                //}
                                #endregion
                            }

                            if (stacknum > 0)
                            {
                                mysql.Remove(0, mysql.Length);
                                mysql.Append("update T_Manage_Task set FSTACK=").Append(stacknum).Append("  where FID=").Append(managernum);
                                int a = dbo.ExecuteSql(mysql.ToString());
                                mysql.Remove(0, mysql.Length);
                                mysql.Append("update T_Monitor_Task set F_DeviceIndex=").Append(stacknum).Append(",F_AheadDetect=REPLACE(F_AheadDetect,'11000','").Append(stacknum.ToString()).Append("  ') where F_DeviceIndex=11000 and F_ManageTaskIndex=").Append(managernum);
                                int b = dbo.ExecuteSql(mysql.ToString());
                            }
                        }
                        else if (order == 5)
                        {
                            //mysql.Remove(0, mysql.Length);
                            //mysql.Append("select F_StackNum from T_Base_Device where F_DeviceKindIndex=10  and F_DeviceIndex=").Append(laneInfo);
                            //dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                            //if (dvlane.Count > 0)
                            //{
                            //    stacknumonlane = Convert.ToInt32(dvlane[0]["F_StackNum"]);

                            //    if (stacknumonlane > 0)
                            //    {

                            //        deviceinfo1 = Model.CGetInfo.GetDeviceInfo(stacknumonlane);

                            //        //if (deviceinfo1.RunState == 0 && deviceinfo1.ManTaskReserve == 0)
                            //            if (deviceinfo1.RunState == 0)
                            //        {

                            //            sentStackLeave(stacknumonlane);
                            //        }

                            //    }
                            //}

                        }
                            #endregion
                    }
                }

                return stacknum; ;

            }
            catch (Exception gsn)
            {
                return 0;
            }

        }
        /*  
         * ·½·¨Ãû:sentStackLeave
         * ×÷  ÕߣºLYJ  
         * ·½·¨¹¦ÄÜ£º°ÑÄ¿±êÏïµÀµÄ¿ÕÏжѶâ»úµ÷×ß
         * ²ÎÊý½éÉÜ£ºstacknum±íʾ¶Ñ¶â»ú±àºÅ
         * ·µ »Ø Öµ£ºtrue±íʾµ÷Àë³É¹¦£¬false±íʾµ÷Àëʧ°Ü
         * Íê³ÉÈÕÆÚ£º2018/01/11
         * ά»¤ÈËÔ±£º
         * ά»¤ÈÕÆÚ£º
         * ά»¤Ô­Òò£º
         * µ±Ç°°æ±¾£º1.0 
         * ǰ¼Ì°æ±¾£º1.0beta  
         */      

        public bool sentStackLeave(int stacknum)
        {
            int temlanenum = 0;
            StringBuilder mysqlleave = new StringBuilder();
            DataView dvlanee;
            string sxy = "-36-01";
            string sz = string.Empty;
            string goalcell = string.Empty;
            bool blreturn = false;
            #region
            mysqlleave.Remove(0, mysqlleave.Length);
           // mysqlleave.Append("select  F_DeviceIndex from T_Base_Device where F_DeviceKindIndex=10 and F_IsShuttleBorad=0 and F_IsVirtualDevice=0 and F_StackNum=0").Append(" and F_DeviceIndex<>").Append(laneno).Append(" order by F_DeviceIndex desc");
            mysqlleave.Append("select  F_DeviceIndex from T_Base_Device where F_DeviceKindIndex=10 and F_IsShuttleBorad=0 and F_IsVirtualDevice=0 and F_StackNum=0 order by F_DeviceIndex desc");
            dvlanee = dbo.ExceSQL(mysqlleave.ToString()).Tables[0].DefaultView;
            if (dvlanee.Count > 0)
            {
                temlanenum = Convert.ToInt32(dvlanee[0]["F_DeviceIndex"]);

            }
            switch (temlanenum)
            {
                case 18001:
                    sz = "01";
                    break;
                case 18002:
                    sz = "03";
                    break;
                case 18003:
                    sz = "05";
                    break;
                case 18004:
                    sz = "07";
                    break;

            }
            #endregion

            if (sz != null && !sz.Equals(""))
            {
                goalcell = sz + sxy;
            }

            string errorfinfo = string.Empty;
            //SControlMonitor scm = new SControlMonitor();
            try
            {

                Model.HandTask ht = new Model.HandTask(stacknum, 2, 0, "0", goalcell, goalcell, 0, "");

                if(compareGoalAndSearchManageGoal(goalcell)==false)
                {
                  //blreturn = scm.InsertHandTask(ht, out errorfinfo);
                    blreturn = ccf.InsertHandTask(ht, out errorfinfo);
                }

              

                CommonClassLib.CCarryConvert.WriteDarkCasket("²åÈëµ÷Àë¶Ñ¶â»úÈÎÎñ", "·µ»Ø²åÈëµÄ²¼¶ûÐͽá¹û:" + blreturn.ToString(), "¶Ñ¶â»úµÄÉ豸±àºÅ:" + stacknum.ToString(), "Ä¿±êλÖÃ:" + goalcell);

                return true;
            }
            catch (Exception ee116) { return false; }
            finally
            {

               // scm = null;

                goalcell = null;

            }



            
        }

        /// <summary>
        /// »õÎïÒÑ·¢Ë͵ĶѶâ»úÈÎÎñÊý add by lyj 20171124
        /// </summary>       
        /// <returns></returns>
        public int getSentStackTask()
        {
            int senttasknum = 0;
           
            StringBuilder mysql = new StringBuilder();
          
            DBOperator dbo = CStaticClass.dbo;
            DataView dvlane;

            try
            {


                mysql.Append("select * from T_Monitor_Task where F_Status=1 and F_DeviceIndex like '1100%'");
                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                if (dvlane.Count > 0)
                {
                    senttasknum = dvlane.Count;
                }


                return senttasknum; ;

            }
            catch (Exception gsn)
            {
                return 0;
            }
            finally 
            {
               
                dvlane = null;
                mysql = null;
            }
        }
        /*  
        * ·½·¨Ãû:getStackInLaneNo
        * ×÷  ÕߣºLYJ  
        * ·½·¨¹¦ÄÜ£º»ñÈ¡¶Ñ¶â»úËùÔÚµÄÏïµÀºÅ
        * ²ÎÊý½éÉÜ£ºdeviceindex±íʾÉ豸Ë÷Òý
        * ·µ »Ø Öµ£º·µ»Ø¶Ñ¶â»úËùÔÚµÄÏïµÀºÅ
        * Íê³ÉÈÕÆÚ£º2018/01/12
        * ά»¤ÈËÔ±£º
        * ά»¤ÈÕÆÚ£º
        * ά»¤Ô­Òò£º
        * µ±Ç°°æ±¾£º1.0 
        * ǰ¼Ì°æ±¾£º1.0beta  
        */
        public int getStackInLaneNo(int deviceindex)
        {

            int laneno = 0;

            StringBuilder mysql = new StringBuilder();
           
            DataView dvlane;

            try
            {
                mysql.Append("select F_LaneNumAll from T_Base_StackLaneAndLayuerInfo where F_DeviceIndex=").Append(deviceindex);
                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                if (dvlane.Count > 0)
                {
                    laneno = Convert.ToInt32(dvlane[0]["F_LaneNumAll"]);
                }


                return laneno; ;

            }
            catch (Exception gsn)
            {
                return 0;
            }
            finally
            {
                //dbo = null;
                dvlane = null;
                mysql = null;
            }

        }



        /*  
    * ·½·¨Ãû:getStackGoalLaneNo
    * ×÷  ÕߣºLYJ  
    * ·½·¨¹¦ÄÜ£º»ñÈ¡¶Ñ¶â»úËùÔÚµÄÏïµÀºÅ
    * ²ÎÊý½éÉÜ£ºtasknum±íʾÈÎÎñºÅ, deviceIndx±íʾÉ豸Ë÷Òý, ordernum±íʾ¶Ñ¶â»úÃüÁî
    * ·µ »Ø Öµ£º·µ»Ø¶Ñ¶â»úËÍ»õλÖÃËùÔÚµÄÏïµÀºÅ
    * Íê³ÉÈÕÆÚ£º2018/01/15
    * ά»¤ÈËÔ±£º
    * ά»¤ÈÕÆÚ£º
    * ά»¤Ô­Òò£º
    * µ±Ç°°æ±¾£º1.0 
    * ǰ¼Ì°æ±¾£º1.0beta  
    */
        public int getStackGoalLaneNo(int tasknum, int deviceIndx, int ordernum)
        {

            int laneno = 0;
            int z = 0;
            StringBuilder mysql = new StringBuilder();

            DataView dvlane;

            try
            {
                z = Model.CGeneralFunction.GetZCoorFromMonitor(tasknum, deviceIndx, ordernum);
                if (z > 0)
                {
                    mysql.Append("select top 1 * from ST_CELL where F_Z=").Append(z);
                    dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                    if (dvlane.Count > 0)
                    {
                        laneno = Convert.ToInt32(dvlane[0]["FLaneWay"]);
                    }
                }


                return laneno; ;

            }
            catch (Exception gsn)
            {
                return 0;
            }
            finally
            {
              
                dvlane = null;
                mysql = null;
            }

        }

        /*  
         * ·½·¨Ãû:sentStackLeaveOuter
         * ×÷  ÕߣºLYJ  
         * ·½·¨¹¦ÄÜ£º¶Ñ¶â»úËÍ»õʱ£¬Èç¹ûÄ¿±êÏïµÀÓпÕÏеĶѶâ»ú£¬Ôò½«Æäµ÷Àë
         * ²ÎÊý½éÉÜ£ºtasknum±íʾÈÎÎñºÅ, deviceIndx±íʾÉ豸Ë÷Òý, ordernum±íʾ¶Ñ¶â»úÃüÁî
         * ·µ »Ø Öµ£º·µ»Øtrue±íʾµ÷Àë³É¹¦£¬false±íʾµ÷Àëʧ°Ü
         * Íê³ÉÈÕÆÚ£º2018/01/12
         * ά»¤ÈËÔ±£º
         * ά»¤ÈÕÆÚ£º
         * ά»¤Ô­Òò£º
         * µ±Ç°°æ±¾£º1.0 
         * ǰ¼Ì°æ±¾£º1.0beta  
         */
        public bool sentStackLeaveOuter(int tasknum, int deviceIndx, int ordernum )
        {

            //int laneno = 0;

            StringBuilder mysql = new StringBuilder();
            int laneInfo = 0;
            int stacknumonlane = 0;
            DataView dvlane;
            int z = 0;
            Model.MDevice deviceinfo1 = null;
           
            try
            {
                z = Model.CGeneralFunction.GetZCoorFromMonitor(tasknum, deviceIndx, ordernum);
             

                if (z > 0)
                {
                    mysql.Append("select top 1 * from ST_CELL where F_Z=").Append(z);
                    dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                    if (dvlane.Count > 0)
                    {
                        laneInfo = Convert.ToInt32(dvlane[0]["FLaneWay"]);
                    }
                }
                mysql.Remove(0, mysql.Length);
                mysql.Append("select F_StackNum from T_Base_Device where F_DeviceKindIndex=10  and F_DeviceIndex=").Append(laneInfo);
                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                if (dvlane.Count > 0)
                {
                    stacknumonlane = Convert.ToInt32(dvlane[0]["F_StackNum"]);

                    if (stacknumonlane > 0)
                    {

                        deviceinfo1 = Model.CGetInfo.GetDeviceInfo(stacknumonlane);

                        //if (deviceinfo1.RunState == 0 && deviceinfo1.ManTaskReserve == 0)
                        if (deviceinfo1.RunState == 0)
                        {

                            sentStackLeave(stacknumonlane);
                        }

                    }
                }

                return true; ;

            }
            catch (Exception gsn)
            {
                return false;
            }
            finally
            {
               
                dvlane = null;
                mysql = null;
            }

        }
        /*  
         * ·½·¨Ãû:getJiangQuTaskNum
         * ×÷  ÕߣºLYJ  
         * ·½·¨¹¦ÄÜ£º»ñÈ¡monitor±íÀォȡµÄÈÎÎñÊý
         * ²ÎÊý½éÉÜ£º
         * ·µ »Ø Öµ£º·µ»Ømonitor±íÀォȡµÄÈÎÎñÊý
         * Íê³ÉÈÕÆÚ£º2018/01/15
         * ά»¤ÈËÔ±£º
         * ά»¤ÈÕÆÚ£º
         * ά»¤Ô­Òò£º
         * µ±Ç°°æ±¾£º1.0 
         * ǰ¼Ì°æ±¾£º1.0beta  
         */

        public int getJiangQuTaskNum()
        {

            int jiangqu = 0;

            StringBuilder mysql = new StringBuilder();

            DataView dvlane;

            try
            {
                mysql.Append("select COUNT(*) as num from T_Monitor_Task where F_DeviceCommandIndex=2 and F_DeviceIndex in(11001,11002,11003)");
                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                if (dvlane.Count > 0)
                {
                    jiangqu = Convert.ToInt32(dvlane[0]["num"]);
                }


                return jiangqu; ;

            }
            catch (Exception gsn)
            {
                return 0;
            }
            finally
            {
                //dbo = null;
                dvlane = null;
                mysql = null;
            }

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="MonitorIdx"></param>
        /// <returns></returns>
        public int GetMonitorStartStationfromMonitor(int MonitorIdx)
        {
            DataView dv = new DataView();
            try
            {
                //20100108
                //20101124
                sql.Remove(0, sql.Length);
                sql.Append("SELECT  F_NumParam1  FROM  T_Monitor_Task WHERE (F_MonitorIndex = ").Append(MonitorIdx).Append(")");
                dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dv.Count > 0)
                {
                    return Convert.ToInt32(dv[0]["F_NumParam1"]);
                }
                else
                {
                    return -1;
                }
            }
            catch (Exception ex)
            {//20100108
                throw ex;
            }
            finally
            {//20100108
                dv.Dispose();
            }
        }

        /*  
         * ·½·¨Ãû:compareGoalAndSearchManageGoal
         * ×÷  ÕߣºLYJ  
         * ·½·¨¹¦ÄÜ£º±È½Ï´«ÈëµÄÄ¿±êλÖúͽ«È¡µÄÄ¿±êλÖÃÊÇ·ñÒ»Ö£¬Èç¹ûÒ»Ö·µ»Øtrue£¬²»Ò»Ö·µ»Øfalse
         * ²ÎÊý½éÉÜ£ºgoalcellcode´«ÈëµÄÄ¿±êλÖÃ
         * ·µ »Ø Öµ£º·µ»Øtrue±íʾÏàͬ£¬false±íʾ²»Í¬
         * Íê³ÉÈÕÆÚ£º2018/01/15
         * ά»¤ÈËÔ±£º
         * ά»¤ÈÕÆÚ£º
         * ά»¤Ô­Òò£º
         * µ±Ç°°æ±¾£º1.0 
         * ǰ¼Ì°æ±¾£º1.0beta  
         */

        public bool compareGoalAndSearchManageGoal(string goalcellcode)
        {

            bool reflag = false;

            StringBuilder mysql = new StringBuilder();

            DataView dvlane;

            try
            {
                mysql.Append("select * from T_Manage_Task where F_ManageTaskKindIndex=4 and FSTARTCELL='").Append(goalcellcode).Append("' or FENDCELL='").Append(goalcellcode).Append("'");
                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                if (dvlane.Count > 0)
                {
                   reflag=true;
                }


                return reflag; ;

            }
            catch (Exception gsn)
            {
                return false;
            }
            finally
            {
                //dbo = null;
                dvlane = null;
                mysql = null;
            }

        }


        /*  
      * ·½·¨Ãû:compareGoalAndSearchManageGoal
      * ×÷  ÕߣºLYJ  
      * ·½·¨¹¦ÄÜ£º±È½Ï´«ÈëµÄÄ¿±êλÖúͽ«È¡µÄÄ¿±êλÖÃÊÇ·ñÒ»Ö£¬Èç¹ûÒ»Ö·µ»Øtrue£¬²»Ò»Ö·µ»Øfalse
      * ²ÎÊý½éÉÜ£ºgoalcellcode´«ÈëµÄÄ¿±êλÖÃ
      * ·µ »Ø Öµ£º·µ»Øtrue±íʾÏàͬ£¬false±íʾ²»Í¬
      * Íê³ÉÈÕÆÚ£º2018/01/15
      * ά»¤ÈËÔ±£º
      * ά»¤ÈÕÆÚ£º
      * ά»¤Ô­Òò£º
      * µ±Ç°°æ±¾£º1.0 
      * ǰ¼Ì°æ±¾£º1.0beta  
      */

        public int isOrNotExistStack(int laneno)
        {

            int  reflag = 0;

            StringBuilder mysql = new StringBuilder();

            DataView dvlane;

            try
            {
                mysql.Append("select * from T_Base_Device where  F_StackNum<>0 and  F_DeviceIndex=").Append(laneno);
                dvlane = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                if (dvlane.Count > 0)
                {
                    reflag = Convert.ToInt32(dvlane[0]["F_StackNum"]);
                }


                return reflag; ;

            }
            catch (Exception gsn)
            {
                return 0;
            }
            finally
            {
                //dbo = null;
                dvlane = null;
                mysql = null;
            }

        }



        
        public int getShuttleBoradNum(int tasknum, int deviceIndx)
        {
            
            int ordernum = 0;
            int x = 0;
            int z = 0;
            int y = 0;
            int shutttleboardNum = 0;
            DataView dv, dvlane, dvCurrent, dvRunStack;
           
            StringBuilder mysql = new StringBuilder();
            Model.MDevice deviceinfo = null;
            long managernum = 0;
            AheadDetectUnallow.Clear();
            int uselifer = 0;//Ãñº½¶þËù
            sql.Remove(0, sql.Length);
            sql.Append("select * from T_WareHouse_DemoSet");
            dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                if (Convert.ToInt32(dv[0]["F_Lifter"]) == 1)
                {
                    uselifer = 14005;
                }
                else if (Convert.ToInt32(dv[0]["F_Lifter"]) == 0)
                {
                    uselifer = 14006;
                }
            }
            try
            {
                ordernum = Model.CGeneralFunction.GetDeviceOrderFromMonitor(tasknum);

                //int elevator = 8;


                //Èç¹û³öÏÖ²ãÖµÏàͬ²»·Ö³µ
                sql.Clear();
                sql.Append(string.Format("select count(*)-count(distinct F_Postion) as num from SHUTTLE_POSITION where F_LaneOut=0  "));
                dvCurrent = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                if (dvCurrent.Count > 0)
                {
                    if (Convert.ToInt32(dvCurrent[0]["num"])!=0)
                    {
                        AheadDetectUnallow.Append("·Ö³µÊ±ÓгµÉϱ¨Í¬²ã");
                        UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                        shutttleboardNum = 0;
                        return shutttleboardNum;
                    }

                    
                }

                if (ordernum==2) 
                {
                    x = Model.CGeneralFunction.GetXCoorFromMonitor(tasknum, deviceIndx, ordernum);
                    z = Model.CGeneralFunction.GetZCoorFromMonitor(tasknum, deviceIndx, ordernum);
                    y = Model.CGeneralFunction.GetYCoorFromMonitor(tasknum, deviceIndx, ordernum);
                    int iTargetZ = Model.CGeneralFunction.GetZCoorFromMonitor(tasknum, deviceIndx, 5);
                    int iTargetX = Model.CGeneralFunction.GetXCoorFromMonitor(tasknum, deviceIndx, 5);
                    int iTargetY = Model.CGeneralFunction.GetYCoorFromMonitor(tasknum, deviceIndx, 5);
                    managernum = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(tasknum);

                    mysql.Append("SELECT * FROM SHUTTLE_POSITION  WHERE F_LaneOut=0 and F_Postion = ").Append(y); //F_LaneOut=0 ±íʾ³µÔÚÏïµÀÀï ³µ»µÁËÒÆ³öÈ¥F_LaneOut=1
                    dvCurrent = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;
                    if (dvCurrent.Count > 0) //20210122_ÉϺ£êɵú£¬Èç¹ûÈÎÎñËùÔÚ²ãÓгµ£¬½«¸ÃÈÎÎñ·ÖÅ䏸¸Ã³µ
                    {
                        
                        Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvCurrent[0]["F_DeviceIndex"]));
                        if (devinfo.RunState >=2)
                        {
                            AheadDetectUnallow.Append("·Ö³µÊ±ËùÑ¡³µ" + Convert.ToInt32(dvCurrent[0]["F_DeviceIndex"]).ToString() + "״̬Ϊ¹ÊÕÏ¿ÕÏлòÍ£Óà ");
                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                            shutttleboardNum = 0;
                            return shutttleboardNum;
                        }

                        //ÓÉÓÚµçÆø»»²ãʱ²ãÖµÖͺ󣬴˴¦ÐèÒªÔö¼ÓÅжÏÓиòãµÄÕâ¸ö³µÃ»Óл»²ãÈÎÎñ,Óл»²ãÈÎÎñÒ»Ö±µÈ
                        sql.Clear();
                        sql.Append("SELECT * FROM T_Manage_Task WHERE ( FCONTROLTASKTYPE=5 ) and FSTACK = ").Append(Convert.ToInt32(dvCurrent[0]["F_DeviceIndex"]));
                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                        if (dvlane.Count == 0)
                        {
                            mysql.Remove(0, mysql.Length);
                            mysql.Append("SELECT F_SwitchLock FROM T_Base_Device WHERE F_DeviceIndex = ")
                                .Append(dvCurrent[0]["F_DeviceIndex"]);
                            if (Convert.ToInt32(dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView[0]["F_SwitchLock"]) ==
                                0)
                            {
                                shutttleboardNum = Convert.ToInt32(dvCurrent[0]["F_DeviceIndex"]);
                                mysql.Remove(0, mysql.Length);
                                mysql.Append("update T_Manage_Task set FSTACK=").Append(dvCurrent[0]["F_DeviceIndex"].ToString()).Append("  where FID=").Append(managernum);
                                int a = dbo.ExecuteSql(mysql.ToString());
                                mysql.Remove(0, mysql.Length);
                                mysql.Append("update T_Monitor_Task set F_DeviceIndex=").Append(dvCurrent[0]["F_DeviceIndex"].ToString()).Append(",F_AheadDetect=REPLACE(F_AheadDetect,'11000','").Append(shutttleboardNum.ToString()).Append("') where F_DeviceIndex=11000 and F_ManageTaskIndex=").Append(managernum);
                                int b = dbo.ExecuteSql(mysql.ToString());
                                CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient",
                                       "ÒѾ­·Ö³µ:",
                                       shutttleboardNum.ToString(),
                                       "³µºÅ£º" + shutttleboardNum.ToString() + "FID£º" + managernum.ToString());


                            }
                        }
                        
                    }
                    //Èç¹ûÈÎÎñËùÔÚ²ãyûÓгµ£¬²é¿´ÆäËû²ãÊÇ·ñÓпÕÏеijµ
                    else
                    {
                        //Ò»°ãy=iTargetY,ÅжÏûÓе½Õâ²ãµÄ»»²ãÈÎÎñÒÔ¼°´ÓÕâ²ã³ö·¢µÄ»»²ãÈÎÎñ
                        mysql.Remove(0, mysql.Length);
                        mysql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 5 AND ((FEndLayer = ").Append(iTargetY).Append(") or  (FStartLayer = ").Append(iTargetY).Append("))");
                        if (dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView.Count <= 0)
                        {
                            mysql.Remove(0, mysql.Length);
                            mysql.Append("SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 6 AND ((FEndLayer = ").Append(iTargetY).Append(") or  (FStartLayer = ").Append(iTargetY).Append("))");
                            if (dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView.Count <= 0)
                            {
                                mysql.Remove(0, mysql.Length);
                                mysql.Append(
                                        "SELECT DISTINCT T_Base_Device.F_DeviceIndex FROM T_Base_Device, SHUTTLE_POSITION WHERE T_Base_Device.F_SwitchLock = 0 AND  SHUTTLE_POSITION.F_LaneOut=0 and T_Base_Device.F_DeviceIndex = SHUTTLE_POSITION.F_DeviceIndex AND F_DeviceKindIndex = 1 AND T_Base_Device.F_DeviceIndex NOT IN ")
                                    .Append(
                                        "(SELECT DISTINCT(T_Manage_Task.FSTACK) FROM T_Manage_Task WHERE T_Manage_Task.FSTACK = T_Base_Device.F_DeviceIndex and ((T_Manage_Task.FCONTROLTASKTYPE=2 and T_Manage_Task.F_OutStatus<>10)or(T_Manage_Task.FCONTROLTASKTYPE<>2 and T_Manage_Task.F_OutStatus=0))")
                                    .Append(
                                        " AND T_Base_Device.F_DeviceKindIndex = 1 )");//Ôö¼Ó AND  SHUTTLE_POSITION.F_LaneOut=0  not in ºóÃæ±ØÐ뽫ÓÐÈÎÎñµÄ³µ»òÕß½«ÒªÖ´ÐÐÈÎÎñµÄ³µÑ¡³öÀ´
                                dvRunStack = dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView;

                                //Èç¹ûÆäËû²ãÓпÕÏеijµ£¬·ÖÅ䏸¸Ã³µ
                                if (dvRunStack.Count > 0)
                                {
                                    for (int i = 0; i < dvRunStack.Count; i++)
                                    {
                                        Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]));
                                        if (devinfo.RunState >= 2)
                                        {
                                            AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ"+ Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString()+ "״̬Ϊ¹ÊÕÏ»òÀëÏß»òÍ£Óà ");
                                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            continue;
                                        }

                                        sql.Remove(0, sql.Length);//³µÒѾ­±»±ðµÄÈÎÎñÔ¤Ô¼ Ò²²»ÄÜ·Ö
                                        sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0} ) and F_ManTaskReserve<>0 ", Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"])));
                                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvlane.Count > 0)
                                        {
                                            AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "ÒѾ­±»±ðµÄÈÎÎñÔ¤Ô¼ ");
                                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            continue;
                                        } 

                                        if (devinfo.XCoor == 0 && devinfo.YCoor == 0 && devinfo.Battery_Status == 0)
                                        {
                                            AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "״̬¾ùΪ0 ");
                                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            continue;
                                        }


                                        if (uselifer == 14005)
                                        {
                                            if (devinfo.XCoor == 1)//ÁÐֵΪ1 ²»ÄÜ»»²ã
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "ÁÐֵΪ1 ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                        }
                                        else if (uselifer == 14006)
                                        {
                                            if (devinfo.XCoor == 32)//ÁÐֵΪ1 ²»ÄÜ»»²ã
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "ÁÐֵΪ1 ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                        }


                                            //´Ë´¦Ôö¼ÓÅжÏÈç¹ûÑ¡ÖеijµËùÔڲ㻹Óгö¿âÒÔ¼°ÒÆ¿âÈÎÎñ ¾Ícontinue £¬ 
                                            //´Ë´¦Öزéһϣ¬²»Óà devinfo.YCoor;
                                        sql.Clear();
                                        sql.Append("SELECT * FROM SHUTTLE_POSITION  WHERE F_LaneOut=0 and F_DeviceIndex = ").Append(Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]));
                                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvlane.Count > 0)
                                        {
                                            //if (Convert.ToInt32(dvlane[0]["F_Postion"]) == elevator)//µçÆø½«²ãÎó±¨ÔÚÌáÉý»úÉÏʱ  ûÓл»²ãÈÎÎñÈ´ÔÚ8²ã 
                                            //{

                                            //    AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ"+ Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString()+ "ÔÚ8²ã ");
                                            //    UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            //    continue;
                                            //}

                                      

                                            //Ñ¡³öÀ´µÄ³µÓÐËùÔÚ²ãÒÆ¿âÈÎÎñÒѾ­·Ö´Ë³µ ²»ÄÜ»»²ã
                                            sql.Clear();
                                            sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=3 and  FSTACK = {0} and  FStartLayer = {1}  ", Convert.ToInt32(dvlane[0]["F_DeviceIndex"]), Convert.ToInt32(dvlane[0]["F_Postion"])));
                                            DataView dvlane2 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                            if (dvlane2.Count > 0)
                                            {
                                                
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "»¹ÓÐÒÆ¿âÈÎÎñ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }

                                            //Ñ¡³öÀ´µÄ³µÓгäµçÈÎÎñÒѾ­·Ö´Ë³µ ÇÒû¹ýÌáÉý»ú ²»ÄÜ»»²ã
                                            sql.Clear();
                                            sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=6  and  FSTARTDEVICE = {0} and  FStartLayer = {1}  ", Convert.ToInt32(dvlane[0]["F_DeviceIndex"]), Convert.ToInt32(dvlane[0]["F_Postion"])));
                                            DataView dvlane4 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                            if (dvlane4.Count > 0)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "ËùÔÚ²ãÓгäµçÈÎÎñ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }



                                            //»»²ãÓÃ14005¼Ó³ö¿âÅÐ¶Ï Ãñº½¶þËù
                                            //Ñ¡³öÀ´µÄ³µÓгö¿âÈÎÎñÒѾ­·Ö´Ë³µ ÇÒû¹ýÌáÉý»ú ²»ÄÜ»»²ã
                                            if (uselifer == 14005)
                                            {
                                                sql.Clear();
                                                sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=2 and F_OutStatus=0 and  FSTACK = {0} and  FStartLayer = {1}  ", Convert.ToInt32(dvlane[0]["F_DeviceIndex"]), Convert.ToInt32(dvlane[0]["F_Postion"])));
                                                DataView dvlane3 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                                if (dvlane3.Count > 0)
                                                {
                                                    AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "»¹Óгö¿âÈÎÎñδ¹ýÌáÉý»ú ");
                                                    UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                    continue;
                                                }
                                            }


                                            //»»²ãÓÃ14006¼ÓÈë¿âÅÐ¶Ï Ãñº½¶þËù
                                            //´Ë´¦Ôö¼ÓÅжÏÈç¹ûÑ¡ÖеijµËùÔڲ㻹ÓÐÈë¿âÈÎÎñ ¶øÇÒÈë¿âÈÎÎñÒѾ­¹ýÌáÉý»ú F_OutStatus=20  ¾Ícontinue £¬ 
                                            if (uselifer == 14006)
                                            {
                                                sql.Clear();
                                                //sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=1 and F_OutStatus=20 and  FSTACK = {0} and  FEndLayer = {1}  ", Convert.ToInt32(dvlane[0]["F_DeviceIndex"]), Convert.ToInt32(dvlane[0]["F_Postion"])));
                                                sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=1 and F_OutStatus=20 and  FEndLayer = {0}  ", Convert.ToInt32(dvlane[0]["F_Postion"])));
                                                dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                                if (dvlane.Count > 0)
                                                {
                                                    AheadDetectUnallow.Append("»»²ãÈÎÎñʱËùÑ¡³µ" + Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]).ToString() + "µÄ²ã»¹ÓÐÈë¿âÈÎÎñÒѾ­¹ýÌáÉý»ú ");
                                                    UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);

                                                    continue;
                                                }
                                            }

                                        }


                                        //»»²ãÓÃ14005¼Ó³ö¿âÅÐ¶Ï Ãñº½¶þËù
                                        //´Ë´¦Ôö¼ÓÈç¹û19003ºÍ19004 µ÷¶ÈÔ¤Ô¼Ëø²»Îª0,Ôò²»Éú³É»»²ãÈÎÎñ
                                        if (uselifer == 14005)
                                        {
                                            sql.Remove(0, sql.Length);
                                            sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0} or F_DeviceIndex = {1}) and F_ManTaskReserve<>0 ", 14003, 14004));
                                            dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                            if (dvlane.Count > 0)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14003»ò14004µ÷¶ÈÔ¤Ô¼Ëø²»Îª0 ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                            Model.MDevice devinfo14003 = Model.CGetInfo.GetDeviceInfo(14003);
                                            Model.MDevice devinfo14004 = Model.CGetInfo.GetDeviceInfo(14004);
                                            Model.MDevice devinfo14005 = Model.CGetInfo.GetDeviceInfo(14005);
                                            if (devinfo14003.SplitByte_0 == 1)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14003Óлõ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                            if (devinfo14004.SplitByte_0 == 1)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14004Óлõ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                            if (devinfo14005.SplitByte_0 == 1)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14005Óлõ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                        }


                                        //»»²ãÓÃ14006¼Ó³ö¿âÅÐ¶Ï Ãñº½¶þËù
                                        if (uselifer == 14006)
                                        {
                                            sql.Remove(0, sql.Length);
                                            sql.Append(string.Format("SELECT * FROM T_Base_Device WHERE (F_DeviceIndex = {0} or F_DeviceIndex = {1}) and F_ManTaskReserve<>0 ", 14001, 14002));
                                            dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                            if (dvlane.Count > 0)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14001»ò14002µ÷¶ÈÔ¤Ô¼Ëø²»Îª0 ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                            Model.MDevice devinfo14001 = Model.CGetInfo.GetDeviceInfo(14001);
                                            Model.MDevice devinfo14002 = Model.CGetInfo.GetDeviceInfo(14002);
                                            Model.MDevice devinfo14006 = Model.CGetInfo.GetDeviceInfo(14006);
                                            if (devinfo14001.SplitByte_0 == 1)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14001Óлõ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                            if (devinfo14002.SplitByte_0 == 1)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14002Óлõ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                            if (devinfo14006.SplitByte_0 == 1)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱ14006Óлõ ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }
                                        }

                                        // ÅжÏÄ¿±êµÄ²ã Èç¹ûÒѾ­·Ö³µµÄÈÎÎñ ²»·Ö  Ä¿±ê²ãΪy
                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=2 and F_OutStatus=0 and  FSTACK >{0}   and  FStartLayer = {1}  ", 11000, y));
                                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvlane.Count > 0)
                                        {
                                            
                                            AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³ÉʱºòÄ¿±ê²ã´æÔÚÒѾ­·Ö³µ³ö¿âÈÎÎñ ");
                                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            continue;
                                        }
                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=3 and  FSTACK > {0} and  FStartLayer = {1}  ",11000, y));
                                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvlane.Count > 0)
                                        {
                                            
                                            AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³ÉʱºòÄ¿±ê²ã´æÔÚÒѾ­·Ö³µÒÆ¿âÈÎÎñ ");
                                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            continue;
                                        }
                                        sql.Clear();
                                        sql.Append(string.Format("SELECT * FROM T_Manage_Task WHERE  FCONTROLTASKTYPE=1  and  FSTACK > {0} and  FEndLayer = {1}  ", 11000, y));
                                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvlane.Count > 0)
                                        {
                                           
                                            AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³ÉʱºòÄ¿±ê²ã´æÔÚÒѾ­·Ö³µÈë¿âÈÎÎñ ");
                                            UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                            continue;
                                        }

                                     
                                        //sql.Clear();
                                        //sql.Append("SELECT * FROM SHUTTLE_POSITION  WHERE F_Postion = ").Append(elevator);//»»²ãÈÎÎñÉú³Éʱ ²»ÄÜÓÐÈκÎÒ»¸ö³µ±¨ÔÚÌáÉý»úÉÏ
                                        //dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        //if (dvlane.Count > 0)
                                        //{
                                        //    AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱºò´æÔÚÓÐÔÚ8²ãµÄ´©Ëó°å ");
                                        //    UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                        //    continue;
                                        //}


                                        //Ãñº½¶þËù УÑéÈκÎÒ»¸ö³µµÄÁÐÖµ¶¼²»ÄÜΪ1   //Ãñº½¶þËù ÍòÒ»ÓгµÊÖ¶¯¿ªÔÚÌáÉý»úÉÏ ²¢ÇÒµçÆø¿ª¹Ø²»ÄÜÈ«¸²¸Ç »»²ãʱ´æÔÚ·çÏÕµ«Èí¼þÒѼì²âÁËËùÓÐÌõ¼þ û°ì·¨ÁË
                                        int xcoor1 = 0;
                                        if (uselifer == 14005)
                                        {
                                             xcoor1 = 1;
                                        }
                                        else if (uselifer == 14006)
                                        {
                                            xcoor1 = 32;
                                        }

                                        sql.Clear();
                                        sql.Append("SELECT * FROM SHUTTLE_POSITION where  F_LaneOut=0 ");//»»²ãÈÎÎñÉú³Éʱ ²»ÄÜÓÐÈκÎÒ»¸ö³µ±¨ÔÚÌáÉý»úÉÏ
                                        dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
                                        if (dvlane.Count > 0)
                                        {
                                            int num = 0;
                                            for (int s = 0; s < dvlane.Count; s++)
                                            {
                                                Model.MDevice devinfoaa = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvlane[s]["F_DeviceIndex"]));
                                                if (devinfoaa.XCoor == xcoor1)
                                                {
                                                    num = num + 1;
                                                }

                                            }
                                            if (num > 0)
                                            {
                                                AheadDetectUnallow.Append("»»²ãÈÎÎñÉú³Éʱºò´æÔÚÓÐÉϱ¨ÁÐֵΪ"+ xcoor1 .ToString()+ "µÄ´©Ëó°å ");
                                                UpdateAheadDetectUnallow(AheadDetectUnallow, tasknum);
                                                continue;
                                            }

                                        }


                                            shutttleboardNum = Convert.ToInt32(dvRunStack[i]["F_DeviceIndex"]);
                                        //ͬÑù²»·Ö³µ£¬µÈ´ý³µÍê³ÉÈÎÎñʱÔÙ·Ö³µ
                                        mysql.Remove(0, mysql.Length);
                                        mysql.Append("update T_Manage_Task set FSTACK=").Append(shutttleboardNum).Append("  where FID=").Append(managernum);
                                        int a = dbo.ExecuteSql(mysql.ToString());
                                        mysql.Remove(0, mysql.Length);
                                        mysql.Append("update T_Monitor_Task set F_DeviceIndex=").Append(shutttleboardNum).Append(",F_AheadDetect=REPLACE(F_AheadDetect,'11000','").Append(shutttleboardNum.ToString()).Append("') where F_DeviceIndex=10000 and F_ManageTaskIndex=").Append(managernum);
                                        int b = dbo.ExecuteSql(mysql.ToString());
                                        //Éú³É»»²ãÈÎÎñ
                                        mysql.Remove(0, mysql.Length);
                                        mysql.Append("SELECT * FROM SHUTTLE_POSITION WHERE F_DeviceIndex = ")
                                            .Append(shutttleboardNum);
                                        int iCurrentLayer =
                                            Convert.ToInt32(
                                                dbo.ExceSQL(mysql.ToString()).Tables[0].DefaultView[0]["F_Postion"]);
                                        string strTargetCell = string.Format("{0:D2}-{1:D2}-{2:D2}", z, x, y);
                                        string strStartCell = string.Format("{0:D2}-{1:D2}-{2:D2}", 1, 1, iCurrentLayer);



                                        //Éú³ÉÈÎÎñ
                                        int hidx1 = ccf.GetTempManageIdx();
                                        string dTime1 = DateTime.Now.ToString("u");
                                        dTime1 = dTime1.Substring(0, dTime1.Length - 1);
                                        string strBarcode = DateTime.Now.ToString("yyyyMMddhhmmss");
                                        mysql.Remove(0, mysql.Length);
                                        mysql.Append("INSERT INTO T_Manage_Task")
                                            .Append(
                                                "(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FCONTROLTASKTYPE,FIntoStepOK,FSTARTDEVICE,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE,FUseAwayFork,FSTACK, FStartLayer, FEndLayer) values('")
                                            .Append(managernum)
                                            .Append("',")
                                            .Append(hidx1)
                                            .Append(",2,-1,5,0,'")
                                            .Append(shutttleboardNum)
                                            .Append("','").Append(strStartCell)
                                            .Append("','")
                                            .Append(uselifer.ToString())
                                            .Append("','").Append(strTargetCell)
                                            .Append("','").Append(dTime1)
                                            .Append("',0,0,").Append(shutttleboardNum).Append(",").Append(iCurrentLayer).Append(",")
                                            .Append(iTargetY).Append(")");
                                        dbo.ExecuteSql(mysql.ToString());
                                        #region 20210329_Éú³É»»²ãÈÎÎñ¾Í½«´©Ëó°åÓÃF_ManTaskReserve×Ö¶ÎËø¶¨³µ£¬±£Ö¤³µÖ»½øÐл»²ãÈÎÎñ

                                        mysql.Remove(0, mysql.Length);
                                        mysql.Append("UPDATE T_Base_Device SET F_ManTaskReserve = ").Append(2.ToString() + hidx1.ToString())
                                            .Append(" WHERE F_DeviceIndex = ").Append(shutttleboardNum);
                                        dbo.ExecuteSql(mysql.ToString());

                                        #endregion
                                        CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient",
                                            "×Ô¶¯Éú³É´©Ëó°æ»»²ãÈÎÎñ:",
                                            shutttleboardNum.ToString(),
                                            "ÆðʼµØÖ·£º" + strStartCell + "Ä¿±êλÖãº" + strTargetCell + "Òª»»²ãµÄFID£º" + managernum.ToString());
                                        break;
                                    }
                                }
                            }
                        

                        }
                        //ûÓпÕÏеijµ£¬²»·Ö³µ
                        else
                        {
                            shutttleboardNum = 0;
                        }
                    }



                }





                return shutttleboardNum;

            }
            catch (Exception gsn)
            {
                return 0;
            }

        }
       
    }
}