using System; using System.Collections.Generic; using System.Text; using System.Data; using DBFactory; using System.Threading; using Microsoft.VisualBasic; using System.Windows.Forms; using static ControlSystem.CreateMonitor; using System.Data.SqlTypes; using System.Linq; namespace ControlSystem { /// /// Creator:Richard.liu /// 获取调度任务 /// public static class CObtainTask { static CGetState cgs = new CGetState(); static CCommonFunction ccf = new CCommonFunction(); static Thread mythread; static bool exitThread = false;//20091107 static Model.MDevice devinfo; private static void BeginListen() {//20091107 while (!exitThread ) { try { GetManagerTask(); } catch (Exception ex) { _CObtainTaskError = ex.Message; } } } public static void EndListen() {//20091107 exitThread = true; if (mythread != null) { dbo.Close(); dboM.Close(); mythread.Abort(); mythread = null; } } public static void StartListen() { exitThread = false; mythread = new Thread(new ThreadStart(BeginListen)); mythread.IsBackground = true; mythread.Start(); } static string _CObtainTaskError=""; public static string CObtainTaskError { get { return _CObtainTaskError; } set { _CObtainTaskError = value; } } static DBOperator dbo = new DBOperator(); static DBOperator dboM = new DBOperator("ManConnString", "ManDBFactory"); public static int IsInv = 0;//是否是盘库 0 不是 1是盘库 /// /// 获得调度任务 /// public static int GetManagerTask() { //是否考虑同时读取IO_CONTROLDETAIL表的数据到本地数据库 DataSet dsIOC ; DataView dvIOC; DataView dv; DataView dvnew; DataView dvmi; DataView DMAN; DataView dvc; string[] wv = new string[1] { "2" }; string[] witemnames = new string[1]; object obj = null; try { int RecCount = 0; //等待执行的;已批复的申请改道的 string sql = "select * from IO_CONTROL where ((CONTROL_STATUS=" + Model.CGeneralFunction.TASKWAIT + ") or (CONTROL_STATUS=" + Model.CGeneralFunction.TASKALTERROUTEREPLY + ")) " + " order by CONTROL_TASK_LEVEL desc,CONTROL_ID asc"; dsIOC = dboM.ExceSQL(sql); dvIOC = dsIOC.Tables[0].DefaultView; //string sstite, estite; if (dvIOC.Count > 0) { string FENDCELL = ""; char[] cc = new char[1] { '-' }; int FENDDEVICE = 0; for (int i = 0; i < dvIOC.Count; i++) { #region 任务暂停和恢复 ////20091128 //if ((dvIOC[i]["CONTROL_STATUS"].ToString() == "0") && (dvIOC[i]["CONTROL_ISRETURN"].ToString() == "3")) //{//任务恢复 // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK=0 where (FID = " + Convert.ToInt32(dvIOC[i]["FID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='-')"); // dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // continue; //} //if ((dvIOC[i]["CONTROL_STATUS"].ToString() == "0") && (dvIOC[i]["CONTROL_ISRETURN"].ToString() == "2")) //{ //未拆分的任务暂停 // int rs = dbo.ExecuteSql("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='0')"); // if (rs == 0) // { // //已拆分未执行的任务暂停 // dvMT = dbo.ExceSQL("select fid from T_Manage_Task where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='1') and (FSTATUS=0)").Tables[0].DefaultView; // if (dvMT.Count > 0) // { // dbo.ExceSQL("delete from T_Monitor_Task where (F_ManageTaskIndex= " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // } // } // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // continue; //} //else //{ // //上报管理FSTATUS=940 // #region 正在执行的任务暂停 // if (dvIOC[i]["CONTROL_ISRETURN"].ToString() == "2") // { // //正在执行的任务暂停 // dvMT = dbo.ExceSQL("select fid from T_Manage_Task where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='1') and (FSTATUS>0)").Tables[0].DefaultView; // if (dvMT.Count > 0) // { // //只有暂停“正在运行的堆垛机非送货指令”或者“等待执行的堆垛机送货指令”,输送机无法暂停 // dvMT = dbo.ExceSQL("select F_MonitorIndex,F_Status,F_DeviceIndex,F_DeviceCommandIndex from T_Monitor_Task where (F_ManageTaskIndex= " + // Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) order by F_MonitorIndex asc").Tables[0].DefaultView; // if (dvMT.Count > 0) // { // if (ccf.GetDeviceKindIdx(Convert.ToInt32(dvMT[0]["F_DeviceIndex"])) == 1) // { // if ((dvMT[0]["F_DeviceCommandIndex"].ToString() == "5") && (Convert.ToInt32(dvMT[0]["F_Status"]) == 0)) // {//等待执行的堆垛机送货指令可以改道原货位 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex=" + dvMT[0]["F_MonitorIndex"]); // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (dvMT[0]["F_DeviceCommandIndex"].ToString() == "2") // {//正在执行堆垛机将取指令,后续任务都取消;等待执行的堆垛机将取指令和后续任务都取消 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (dvMT[0]["F_DeviceCommandIndex"].ToString() == "4") // {//正在执行堆垛机取货指令,后续任务都改道原货位;等待执行的堆垛机取货指令和后续任务都取消 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // if (Convert.ToInt32(dvMT[0]["F_Status"]) >= 1) // { // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex>" + // dvMT[0]["F_MonitorIndex"] + " and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // //删除送货之后的输送机任务 // dvSend = dbo.ExceSQL("select F_MonitorIndex from T_Monitor_Task where F_DeviceIndex=" + dvMT[0]["F_DeviceIndex"] // + " and F_DeviceCommandIndex=5 and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // if (dvSend.Count > 0) // { // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // } // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (dvMT[0]["F_Status"].ToString() == "0") // { // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>=" + dvMT[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["FID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // } // else if (dvMT[0]["F_DeviceCommandIndex"].ToString() == "3") // {//正在执行堆垛机将送指令,后续任务都改道原货位;等待执行的堆垛机将送指令和后续任务都改道原货位 // dbo.ExceSQL("update T_Manage_Task set FExceptionNO='940' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // if (dvMT[0]["F_Status"].ToString() == "0") // { // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex>=" + // dvMT[0]["F_MonitorIndex"] + " and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // else if (Convert.ToInt32(dvMT[0]["F_Status"]) >= 1) // { // dbo.ExceSQL("update T_Monitor_Task set F_AheadDetect='',F_NumParam4=F_NumParam1,F_NumParam5=F_NumParam2,F_NumParam6=F_NumParam3 where F_MonitorIndex>" + // dvMT[0]["F_MonitorIndex"] + " and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // //dboM.ExceSQL("update IO_CONTROL set CONTROL_ISRETURN=0 where CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // } // //删除送货之后的输送机任务 // dvSend = dbo.ExceSQL("select F_MonitorIndex from T_Monitor_Task where F_DeviceIndex=" + dvMT[0]["F_DeviceIndex"] // + " and F_DeviceCommandIndex=5 and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // if (dvSend.Count > 0) // { // dbo.ExceSQL("update T_Monitor_Task set F_Status=-1 where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=0 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); // dvMT = dbo.ExceSQL("select * from T_Monitor_Task where F_MonitorIndex>" + dvSend[0]["F_MonitorIndex"] // + " and F_Status=-1 and F_ManageTASKKINDINDEX=1 and F_ManageTaskIndex=" + Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Tables[0].DefaultView; // for (int ii = 0; ii < dvMT.Count; ii++) // { // cgs.ActionComplete(Convert.ToInt32(dvMT[ii]["F_DeviceIndex"]), Convert.ToInt32(dvMT[ii]["F_MonitorIndex"]), 900); // } // } // dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) "); // } // } // continue; // } // } // } // #endregion //} #endregion if (dvIOC[i]["MANAGE_TASK_TYPE"].ToString() == "3") { string Aisle = "18001"; if (dvIOC[i]["STOCK_BARCODE"].ToString() == "11002") { Aisle = "18002"; } DataSet invs = dboM.ExceSQL($"select CellNo from PurchaseOrders_Inv where Aisle = '{Aisle}' group by CellNo"); var fullList = CreateMonitor.DataSetToList(invs); var sortedList = fullList.OrderBy(item => { var parts = item.CellNo.Split('-'); int row = int.Parse(parts[0]); // 排号 int col = int.Parse(parts[1]); // 列号 int layer = int.Parse(parts[2]); // 层号 return (col, layer, row); }).ToList(); int startIndex = int.Parse(dvIOC[i]["STOCK_BARCODE"].ToString()); int CONTROL_ID = Convert.ToInt32(dvIOC[i]["CONTROL_ID"]); foreach (var item in sortedList) { //盘库逻辑,拆分盘库任务 CreateMonitor.CreateMoveInv(startIndex, item.CellNo, 4,CONTROL_ID);//先取货 CreateMonitor.CreateMoveInv(startIndex, item.CellNo, 5, CONTROL_ID);//再放货 } dboM.ExceSQL("update IO_control set CONTROL_status=" + Model.CGeneralFunction.TASKRUN + " where (CONTROL_ID = " + CONTROL_ID + ")"); if (CStaticClass.RealRefresh == true) { //显示设备指令 DataSet ds = dbo.ExceSQL("select * from V_Monitor_Task where " + CStaticClass.Monstatus); FrmControlMonitor.FormInstance.MonitorRefresh(ds.Tables[0].DefaultView); //显示调度任务 FrmControlMonitor.FormInstance.ManagerRefresh( dbo.ExceSQL("select * from V_Manage_Task where " + CStaticClass.Manstatus).Tables[0].DefaultView); } IsInv = 1; continue; } #region 不同结束位置任务数控制 string END_DEVICE_CODE = dvIOC[i]["END_DEVICE_CODE"].ToString(); int managecount = ManageCountControl(END_DEVICE_CODE); DataView dvchaipan= dbo.ExceSQL("select * from T_Manage_Task where FENDDEVICE ='" + END_DEVICE_CODE + "'").Tables[0].DefaultView; if (dvchaipan.Count >= managecount) { continue; } #endregion bool UseOldRoute = false; #region 新任务 //判断(FSTATUS='0') if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKWAIT.ToString()) { #region 20101011同一个逻辑区域可以同时执行的不同批次数在此控制 #endregion string UseAwayFork="-"; //20100329双叉关联调度任务在此同时获取,否则等待,获取后并且直接分配远近货叉(增加一个函数处理关联任务的获取,返回主任务的远近货叉) if (dvIOC[i]["RELATIVE_CONTROL_ID"].ToString() != "-1") { dv = dboM.ExceSQL("select CONTROL_ID from IO_CONTROL where CONTROL_ID=" + dvIOC[i]["RELATIVE_CONTROL_ID"] + "").Tables[0].DefaultView; if (dv.Count > 0) { UseAwayFork = ObtainDoubleForkTask(dvIOC[i]["RELATIVE_CONTROL_ID"],"-"); RecCount++; } else { continue; } } ObtainDoubleForkTask(dvIOC[i]["CONTROL_ID"],UseAwayFork);//主任务 RecCount++; } #endregion #region 修改路径的答复 else if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString()) { if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"])==false ) { obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'"); if (obj != null) { FENDDEVICE = Convert.ToInt32(obj); } else { _CObtainTaskError = "获取任务的修改路径的答复:没找到调度任务索引:" + dvIOC[i]["CONTROL_ID"].ToString() + ",修改后的终点位置!"; continue; } FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); //20100304 if (ccf.GetExceptionNOFromManageTask(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), 1) == Model.CGeneralFunction.TASKREPEATINPUT) { UseOldRoute = true; } } else { FENDDEVICE = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]); //20090910 if (ccf.GetExceptionNOFromManageTask(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), 1) == Model.CGeneralFunction.TASKREPEATINPUT) { dv = dbo.ExceSQL("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = " + dvIOC[i]["CONTROL_TASK_TYPE"] + ") and (F_AbendStation=1) and (F_DESTINATION=" + FENDDEVICE+ ")").Tables[0].DefaultView ; if (dv.Count > 0)//是应急站台,把原来的终点改为起点改道至应急站台 { dbo.ExceSQL("update T_Manage_Task set FSTARTDEVICE=FENDDEVICE,FSTARTCELL=FENDCELL where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1)"); } else { UseOldRoute = true; } } FENDCELL = "-"; #region 20101028转换AGV的坐标为通道 obj = dbo.GetSingle("SELECT F_ChannelsIndex FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = " + Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]) + ") "); if (obj != null) { FENDDEVICE = Convert.ToInt32(obj); FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); } else { FENDDEVICE = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]); FENDCELL = "-"; } #endregion } dbo.ExceSQL("update T_Manage_Task set FExceptionNO=NULL,FENDDEVICE='" + FENDDEVICE + "',FENDCELL='" + FENDCELL + "' where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1)"); //已经开始执行的需要更改调度任务) dvmi = dbo.ExceSQL("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3) order by F_MonitorIndex asc").Tables[0].DefaultView; if (dvmi.Count > 0) {//已经开始执行的需要更改调度任务 //判断申请修改路径的第一个调度任务: int monitorIndex = (int)dvmi[0]["F_MonitorIndex"]; int associateMonitor = -1; if (dvmi[0]["F_Associate"] != DBNull.Value) { associateMonitor = Convert.ToInt32(dvmi[0]["F_Associate"]); } int devindex = Convert.ToInt32(dvmi[0]["F_DeviceIndex"]); int devKind = ccf.GetDeviceKindIdx(Convert.ToInt32(dvmi[0]["F_DeviceIndex"])); int devCommand = Convert.ToInt32(dvmi[0]["F_DeviceCommandIndex"]); int routeID = Convert.ToInt32(dvmi[0]["F_RouteID"]); int NumParam1 = Convert.ToInt32(dvmi[0]["F_NumParam1"]); int NumParam4 = Convert.ToInt32(dvmi[0]["F_NumParam4"]); string AheadDetect = dvmi[0]["F_AheadDetect"].ToString(); ////20090925 WHERE DMAN = dbo.ExceSQL("select * from T_Manage_Task where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1)").Tables[0].DefaultView; if (DMAN.Count > 0) { //20091107 int routeidNew = 0; if (UseOldRoute == false) { routeidNew = CDisassembleTask.MinRouteID(Convert.ToInt32(DMAN[0]["FSTARTDEVICE"]), Convert.ToInt32(DMAN[0]["FENDDEVICE"]), DMAN[0]["FUseAwayFork"]); } else {//970送货时货架有货,还是用原来路径 routeidNew = routeID; } //20091005 if (routeidNew == -1) { //考虑重新向管理申请改道 if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1") {//20091107 GetUsableDestination(DMAN[0]); } continue; } //20091005 //删除原来的申请修改路径任务,拆分新的任务并且只保留现有设备开始的任务 dbo.ExceSQL("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3)"); //20090910 if (CDisassembleTask.CreateMonitor(1, Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), routeidNew, DMAN[0], 3) <= 0) { //重新生成申请修改路径的申请任务 sql = "INSERT INTO T_Monitor_Task " + "(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel," + " F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4," + " F_AheadDetect,F_TxtParam)" + "VALUES (" + dvIOC[i]["CONTROL_ID"] + ",1," + monitorIndex + ",1," + devindex + "," + devCommand + "," + routeID + ",3," + NumParam1 + "," + NumParam4 + ",'" + AheadDetect + "','" + dvIOC[i]["STOCK_BARCODE"] + "')"; dbo.ExceSQL(sql); continue; } if (devKind == 4) { if (devCommand == 7) { int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex); int Consn = ccf.GetSerialNumberFromRouteDevice(routeID, NumParam1); #region RGV运动到接货点 if (RGVsn > Consn) { //删除RGV运动到接货点之前的任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) AND (F_NumParam1 = " + NumParam1 + ")").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion #region RGV运动到送货点 if (RGVsn < Consn) { int RGVsn1 = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货输送机设备索引 List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn1); int condev = nextcon[0]; //删除RGV运动到送货点之前的任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion } #region RGV送货 if ((devCommand == 3) || (devCommand == 5)) { int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货输送机设备索引 List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn); int condev = nextcon[0]; //删除RGV运动到送货点之前的任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion #region RGV接货 if ((devCommand == 2) || (devCommand == 4)) { int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到送货输送机设备索引 List priorcon = CDisassembleTask.GetPriorDevice(routeidNew, RGVsn); int condev = priorcon[0]; //删除RGV运动到接货点之前的任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion } if (devKind == 2) { #region 输送机送货 if (devCommand == 3) { int consn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货RGV设备索引 List nextrgv = CDisassembleTask.GetNextDevice(routeidNew, consn); int rgvdev = nextrgv[0]; //删除RGV运动到接货点之前的任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + rgvdev + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) AND (F_NumParam1 = " + devindex + ")").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion #region 输送机的接货 if (devCommand == 4) { int consn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex); //找到送货RGV设备索引 List priorrgv = CDisassembleTask.GetPriorDevice(routeID, consn); int rgvdev = priorrgv[0]; int rgvsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, rgvdev); List nextdev = CDisassembleTask.GetNextDevice(routeidNew, rgvdev); int condev = nextdev[0]; //删除RGV运动到送货点之前的任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + rgvdev + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) AND (F_NumParam1 = " + condev + ")").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion #region 输送机的送出 if (devCommand == 6) { dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + devindex + ") AND (F_DeviceCommandIndex = 6) AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3) ").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); int CurrentLocation = 0; dvc = dbo.ExceSQL("SELECT FCurrentLocation FROM T_Manage_Task where FID=" + dvIOC[i]["CONTROL_ID"] + " and F_ManageTaskKindIndex=1").Tables[0].DefaultView; if (dvc.Count > 0) { CurrentLocation = Convert.ToInt32(dvc[0]["FCurrentLocation"]); } if (CurrentLocation == 0) continue; dbo.ExceSQL("update T_Monitor_Task set F_DeviceIndex=" + CurrentLocation + " where F_MonitorIndex=" + dvnew[0]["F_MonitorIndex"]); //20090910已经搬运到CurrentLocation(F_NumParam4=CurrentLocation) 删除送出任务 dbo.ExceSQL("delete from T_Monitor_Task where F_DeviceIndex=" + CurrentLocation + " and F_NumParam4=" + CurrentLocation + ""); //20091102 dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_LockedState=" + monitorIndex); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion } #region 堆垛机的送货重和其它任务 if (devKind == 1) { //堆垛机的送货重,只保留堆垛机的送货任务 dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + devindex + ") AND (F_DeviceCommandIndex = " + devCommand + ") AND (F_RouteID = " + routeidNew + ") AND (F_Status = 3)").Tables[0].DefaultView; if (dvnew.Count > 0) { dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex<" + dvnew[0]["F_MonitorIndex"] + " and (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + devindex + ""); dbo.ExceSQL("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); } } #endregion }//20090910 } else//未拆分的,修改目标位置和状态(FSTATUS='40'禁用拆分的FIntoStepOK='-'改为FIntoStepOK='0'; { //20091128必须使用FENDCELL dbo.ExceSQL("update T_Manage_Task set FENDDEVICE='" + FENDDEVICE + "',FENDCELL='" + FENDCELL + "', FIntoStepOK=0 where (FID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='-')"); } //修改T_Manage_Task的FLANEWAY,FSTACK int flaneway = -1, stackno = -1; if (Information.IsNumeric(dvIOC[i]["START_DEVICE_CODE"]) == false) {//货位编码 obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["START_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["START_WAREHOUSE_CODE"] + "'"); if (obj != null) { flaneway =Convert.ToInt32( obj); } } else { if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"]) == false) { obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'"); if (obj != null) { flaneway =Convert.ToInt32( obj); } } } string sss = "SELECT F_StackIndex, F_LaneNo FROM T_Base_StackInfo " + " where (F_LaneNo='" + flaneway + "') OR (F_LaneNo like '%" + ";" + flaneway + "') OR (F_LaneNo='" + flaneway + ";" + "%') "; dv = dbo.ExceSQL(sss).Tables[0].DefaultView; if (dv.Count > 0) { stackno = Convert.ToInt32(dv[0]["F_StackIndex"]); } dbo.ExceSQL("update dbo.T_Manage_Task set FLANEWAY=" + flaneway + ",FSTACK=" + stackno + " where F_ManageTaskKindIndex=1 and FID=" + dvIOC[i]["CONTROL_ID"] + ""); //20091107 dboM.ExceSQL("update IO_control set CONTROL_status=" + Model.CGeneralFunction.TASKRUN + " where (CONTROL_ID = " + Convert.ToInt32(dvIOC[i]["CONTROL_ID"]) + ")"); } #endregion } if (RecCount > 0) { //显示调度任务 if (CStaticClass.RealRefresh == true) { FrmControlMonitor.FormInstance.ManagerRefresh( dbo.ExceSQL("select * from V_Manage_Task where " + CStaticClass.Manstatus).Tables[0].DefaultView); } return RecCount; } else { //_CObtainTaskError = "没有获得任何调度任务!"; return 0; } } else { #region 测试自动生成任务 20120916 // int havegood = CStaticClass.GetDevicePhotoelectric("12112.0"); // int[] status = new int[6]; //// status = CStaticClass.GetDeviceState(12111); // status[1] = 0; // if ((havegood ==1) && (status[1] == 0)) // { // int AutoManageIdx = ccf.GetTempManageIdx(); // string dtime = DateTime.Now.ToString("u");//20101028 // dtime = dtime.Substring(0, dtime.Length - 1);//20101028 // string tempsql = " insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) values(" + AutoManageIdx + ",'343243243243243','1',2,'1','12112','-','1','12115','-',0,0,'-','" + dtime + "',0,0,0,0)"; // DataView tempdv= dbo.ExceSQL("select * from t_manage_task where FSTARTDEVICE =" + 12112).Tables[0].DefaultView; // if (tempdv.Count <=0) // { // return 0; // dbo.ExceSQL(tempsql); // } // } //int havegood = CStaticClass.GetDevicePhotoelectric("12026.0"); //int[] status = new int[6]; //// status = CStaticClass.GetDeviceState(12111); //status[1] = 0; //if ((havegood == 1) && (status[1] == 0)) //{ // int AutoManageIdx = ccf.GetTempManageIdx(); // string dtime = DateTime.Now.ToString("u");//20101028 // dtime = dtime.Substring(0, dtime.Length - 1);//20101028 // string tempsql = " insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) values(" + AutoManageIdx + ",'343243243243243','1',2,'1','12026','-','1','12526','-',0,0,'-','" + dtime + "',0,0,0,0)"; // DataView tempdv = dbo.ExceSQL("select * from t_manage_task where FSTARTDEVICE =" + 12026).Tables[0].DefaultView; // if (tempdv.Count <= 0) // { // dbo.ExceSQL(tempsql); // } // else // { // DataView tempdvmon = dbo.ExceSQL("select * from t_monitor_task where f_deviceindex =12026 ").Tables[0].DefaultView; // if (tempdvmon.Count <= 0) // { // dbo.ExceSQL(tempsql); // } // } //} //int havegood = CStaticClass.GetDevicePhotoelectric("12026.0"); //int[] status = new int[6]; //// status = CStaticClass.GetDeviceState(12111); //status[1] = 0; //if ((havegood == 1) && (status[1] == 0)) //{ // int AutoManageIdx = ccf.GetTempManageIdx(); // string dtime = DateTime.Now.ToString("u");//20101028 // dtime = dtime.Substring(0, dtime.Length - 1);//20101028 // string tempsql = " insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) values(" + AutoManageIdx + ",'343243243243243','1',2,'1','12026','-','1','12043','-',0,0,'-','" + dtime + "',0,0,0,0)"; // DataView tempdv = dbo.ExceSQL("select * from t_manage_task where FSTARTDEVICE =" + 12026).Tables[0].DefaultView; // if (tempdv.Count <= 0) // { // dbo.ExceSQL(tempsql); // } // else // { // } //} #endregion 测试自动生成任务 //_CObtainTaskError = "管理程序没有下达新的搬运任务!"; return 0; } } catch (Exception ex) { _CObtainTaskError = "获得调度任务失败:" + ex.Message; return 0; } finally { dsIOC=null; dvIOC=null; dv = null; dvc = null; dvmi = null; dvnew = null; } } /// /// 根据自动任务修改的获取出入库任务 /// /// 扫描到的托盘号 public static void GetWebManageTask(string gdata) { //任务状态已启动 托盘号是扫描到的 DataView dsIOC = dboM.ExceSQL($"select * from TaskDetails where TaskStatus = 1 and PalletNo='{gdata}'").Tables[0].DefaultView; if (dsIOC.Count>0) { string Sql, _tasktype, _startposition, _startsite = "-", _endposition, _endsite = "-"; DataSet ds; _tasktype = dsIOC[0]["TaskType"].ToString();//入库 _startposition = dsIOC[0]["SourceLocation"].ToString();//起始点 _endposition = dsIOC[0]["Aisle"].ToString();//巷道 int flaneway = 0; int stackno = 0; int startdevicekind = ccf.GetDeviceKindIdx(Convert.ToInt32(_startposition));//20110411 if (_tasktype == "2")//出库 { _startsite = dsIOC[0]["SourceLocation"].ToString();//起点位置 flaneway = Convert.ToInt32(_startposition); if (dbo.Exists("SELECT FID FROM ST_CELL where FCELLSTATUS<> '-1' and FLaneWay=" + flaneway + " and FCELLCODE='" + _startsite + "'") == false) { MessageBox.Show("起始位置和起始货位编码在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if (_tasktype == "1")//入库 { _endsite = dsIOC[0]["TargetLocation"].ToString();//终点位置 flaneway = Convert.ToInt32(_endposition); if (dbo.Exists("SELECT FID FROM ST_CELL where FCELLSTATUS<> '-1' and FLaneWay=" + flaneway + " and FCELLCODE='" + _endsite + "'") == false) { MessageBox.Show("终点位置和终点货位编码在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } try { //20100304 Sql = "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = " + _startposition + ") AND (F_EndDevice = " + _endposition + ")"; ds = dbo.ExceSQL(Sql).Tables[0].DataSet; if (ds.Tables[0].DefaultView.Count <= 0) { MessageBox.Show("起始位置和结束位置不在有效路径的范围内!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string FSTARTCELL = _startsite, FENDCELL = _endsite, UseAwayFork = "-"; int FSTARTDEVICE = Convert.ToInt32(_startposition); int FENDDEVICE = Convert.ToInt32(_endposition); devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE); stackno = Convert.ToInt32(dbo.GetSingle("SELECT F_StackIndex FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ")"));//20101028 string dtime = DateTime.Now.ToString("u");//20101028 dtime = dtime.Substring(0, dtime.Length - 1);//20101028 int AutoManageIdx = ccf.GetTempManageIdx(); //插入临时调度任务T_Manage_Task(监控下的调度任务): int startcol = 0, startlayer = 0;//20110411 if (startdevicekind == 10)//出库或是巷道内移库任务 { startcol = Convert.ToInt32(_startsite.Substring(3, 2)); startlayer = Convert.ToInt32(_startsite.Substring(6, 2)); } Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," + "FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,UNPACK_QUANTITY,BOX_QUANTITY,FStartCol,FStartLayer) " + "values(" + AutoManageIdx + ",'" + dsIOC[0]["RFID"].ToString() + "','" + _tasktype + "',2,'" + ccf.GetWarehouseIndex() + "','" + _startposition + "','" + _startsite + "','" + ccf.GetWarehouseIndex() + "','" + _endposition + "','" + _endsite + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "'," + 1 + "," + int.Parse(dsIOC[0]["TaskQty"].ToString()) + "," + startcol + "," + startlayer + ")";//20101028 ds = dbo.ExceSQL(Sql); } catch (Exception ex) { throw ex; } } } /// /// 本行记录是否需要软确认 /// /// 行视图 /// true必须软确认;false无需软确认 public static bool IfSoftConfirm(string FCONTROLTASKTYPE) { try { DataSet ds = dbo.ExceSQL("SELECT FCODE, FSOFTCONFIRM FROM T_ITEMTASKTYPE where FCODE='" + FCONTROLTASKTYPE+"'"); if (ds.Tables[0].DefaultView.Count > 0) { if (ds.Tables[0].DefaultView[0]["FSOFTCONFIRM"].ToString() == "1") { return true; } else { return false; } } else { return false; } } catch (Exception ex) { throw ex; } } static void FeedBackConfirm(int FID, int FSTARTDEVICE) { //判断每个任务的第一个设备FSTARTDEVICE是否空闲??? try { DataSet dsS = dbo.ExceSQL("SELECT F_DeviceIndex,F_LockedState FROM T_Base_Device Where F_DeviceIndex=" + FSTARTDEVICE + "and F_LockedState=0"); if (dsS.Tables[0].DefaultView.Count > 0) { DataSet ds = dboM.ExceSQL("update IO_CONTROL set CONTROL_STATUS='2' where CONTROL_ID=" + FID); } } catch (Exception ex) { throw ex; } } /// /// 获得FSTARTCELL或者FENDCELL /// /// IO_CONTROL的主键FID /// 设备索引 /// 堆垛机001取坐标;002送坐标 /// 返回FSTARTCELL或者FENDCELL static string GetSite(int fid, int devidx, string kind) { try { DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex FROM T_Base_Device where F_DeviceKindIndex=10 and F_DeviceIndex=" + devidx); if (ds.Tables[0].DefaultView.Count > 0) { DataSet dss = dboM.ExceSQL("SELECT * FROM IO_CONTROLDETAIL where FCONTROLID=" + fid + " and FKIND=" + kind); if (dss.Tables[0].DefaultView.Count > 0) { return dss.Tables[0].DefaultView[0]["FVALUE"].ToString(); } else { _CObtainTaskError = "获取调度任务时,无法取得堆垛机坐标!!!"; return ""; } } else { return "-"; } } catch (Exception ex) { throw ex; } } /// ///判断调度任务A是否为91码盘入库或者92码盘出库; ///如果A的FMANAGEID任务有9搬运木块码盘的任务,不允许插入调度任务A /// /// 调度任务类型 /// /// static bool GetStackPalletTask(string TaskType, int FMANAGEID) { DataSet ds = dbo.ExceSQL("SELECT FCODE, FINTERCODE FROM T_ITEMTASKTYPE Where FCODE='"+TaskType +"'"); if (ds.Tables[0].DefaultView.Count > 0) { if ((ds.Tables[0].DefaultView[0]["FINTERCODE"].ToString() == "91") || (ds.Tables[0].DefaultView[0]["FINTERCODE"].ToString() == "92")) { DataSet dss = dbo.ExceSQL("SELECT FINTERCODE, FCONTROLTASKTYPE,FCODE FROM T_Manage_Task ,T_ITEMTASKTYPE Where FCONTROLTASKTYPE = FCODE and FMANAGEID=" + FMANAGEID + " and FINTERCODE=9 "); if (dss.Tables[0].DefaultView.Count > 0) { return true; } else return false; } else return false; } else _CObtainTaskError ="管理单据传来的搬运任务类型在监控表里不存在!"; return false; } /// ///判断调度任务A是否为开始位置4#站台或者5#站台码盘任务; ///如果A的FMANAGEID任务有9搬运木块码盘的任务,不允许插入调度任务A /// /// 开始位置 /// /// static bool GetStackPalletTask(int FSTARTDEVICE, int FMANAGEID) { if ((FSTARTDEVICE==4)|| (FSTARTDEVICE==5)) { DataSet dss = dbo.ExceSQL("SELECT FINTERCODE, FCONTROLTASKTYPE,FCODE FROM T_Manage_Task ,T_ITEMTASKTYPE Where FCONTROLTASKTYPE = FCODE and FMANAGEID=" + FMANAGEID + " and FINTERCODE=9 "); if (dss.Tables[0].DefaultView.Count > 0) { return true; } else return false; } else return false; } static bool GetStackPalletTask(DataRowView drv) { DataView dv = dbo.ExceSQL("SELECT F_StackPositionDeviceIndex FROM T_BASE_STACK_ROBOT where F_StackPositionDeviceIndex=" +Convert.ToInt32( drv["FSTARTDEVICE"])).Tables[0].DefaultView; //if ((drv["FSTARTDEVICE"].ToString() == "4") || (drv["FSTARTDEVICE"].ToString() == "5")) if(dv.Count>0) { DataSet dss = dboM.ExceSQL("SELECT MANAGE_ID, CONTROL_TASK_TYPE FROM IO_CONTROL where MANAGE_ID=" + Convert.ToInt32(drv["FMANAGEID"]) + " and CONTROL_TASK_TYPE='901'"); if (dss.Tables[0].DefaultView.Count > 0) { return true; } else return false; } else return false; } static void RecordMaxManageTaskFID(int fid) { DataSet ds= dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Manage_Task_Index_Auto_Task"); DataView dv = ds.Tables[0].DefaultView; if (dv.Count > 0) { if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"])) { dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Auto_Task SET F_ManageTaskIndex ="+fid); } } else { dbo.ExceSQL("INSERT INTO T_Base_Manage_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (" + fid + ")"); } } /// /// 20091005 /// 获取可用的目标位置:入库的巷道或者出库站台 /// /// T_Manage_Task表的行记录 /// public static void GetUsableDestination(DataRowView dr) { //20100610查找一个路径可用,任务数最少的终点设备 Dictionary advDev = new Dictionary(); object ob; //只修申请改调度任务的路径,不修改调度自动任务路径 if (dr["F_ManageTaskKindIndex"].ToString() != "1") return; string sql = ""; string adviceDev = ""; DataTable dtd = dbo.ExceSQL("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = " + dr["FCONTROLTASKTYPE"] + ") and (F_AbendStation=1) and (F_DESTINATION=" + dr["FENDDEVICE"] + ")").Tables[0]; if (dtd.Rows.Count > 0)//原来终点是应急站台那么还分配这个站台,不需要改变 { adviceDev = dtd.Rows[0]["F_DESTINATION"].ToString(); //20091005 return; } else { //查找可用目标位置 DataTable dt = dbo.ExceSQL("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = " + dr["FCONTROLTASKTYPE"] + ") and (F_DESTINATION <>" + dr["FENDDEVICE"] + ") and (F_AbendStation=0)").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统计到终点设备正在执行的任务数 ob = dbo.GetSingle("SELECT count(FENDDEVICE) as counts FROM T_Manage_Task where FENDDEVICE='" + dt.Rows[i]["F_DESTINATION"] + "' and fstatus>0"); advDev.Add(Convert.ToInt32(dt.Rows[i]["F_DESTINATION"]), Convert.ToInt32(ob)); //20100610 adviceDev = dt.Rows[i]["F_DESTINATION"].ToString(); //break; } } if (advDev.Count == 0)//20100610 { return ; } else {//20100610 int mincount = 9999; foreach (int aaa in advDev.Keys) { if (advDev[aaa] < mincount) { mincount = advDev[aaa]; adviceDev = aaa.ToString(); } } if (adviceDev == "") { return ; } } } else { return; } } //DataView DV = dboM.ExceSQL("select IO_CONTROL_APPLY_SEQ.NEXTVAL FROM DUAL").Tables[0].DefaultView; //20101108int fid = dboM.GetManageTableIndex("IO_CONTROL_APPLY"); string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); //20091128 dboM.TransBegin(); try { dboM.ExceSQL(" update IO_CONTROL set CONTROL_STATUS=" + Model.CGeneralFunction.TASKALTERROUTEAPPLY + " where CONTROL_ID=" + dr["FID"] + ""); //向管理申请修改任务//20101108CONTROL_APPLY_ID," + fid + ", sql = "INSERT INTO IO_CONTROL_APPLY ( CONTROL_ID,CONTROL_APPLY_TYPE,WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME, " + " CONTROL_APPLY_REMARK)" + "VALUES (" + dr["FID"] + ",2,'" + dr["FENDWAREHOUSE"] + "','" + dr["FPALLETBARCODE"] + "','" + adviceDev + "',0,'" + dtime + "',null)"; dboM.ExceSQL(sql); dboM.TransCommit(); //20091102修改调度任务为不可拆分状态 dbo.ExceSQL("update T_Manage_Task set FIntoStepOK='-' where (FID = " + Convert.ToInt32(dr["FID"]) + ") AND (F_ManageTASKKINDINDEX =1)"); } catch (Exception ex) { _CObtainTaskError = "获取任务时,向管理申请改道:" + ex.Message; dboM.TransRollback(); } } public static bool IfDeleteOutTask(int fid, int deleteflag) { //20091014 try { if (1 != deleteflag) { return false; } string strsql = "select FIntoStepOK from T_Manage_Task where F_ManageTaskKindIndex=1 and FID= " + fid + " and FIntoStepOK <> '1' "; DataView dv = dbo.ExceSQL(strsql).Tables[0].DefaultView; if (dv.Count > 0) { string delsql = "DELETE FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = 1) AND (FID = " + fid + ")"; string cancelsql = "update IO_Control set CONTROL_STATUS=" + Model.CGeneralFunction.TASKCANCEL + " where CONTROL_ID=" + fid; dbo.ExceSQL(delsql); dboM.ExceSQL(cancelsql); return true; } else { return false; } } catch (Exception ex) { throw ex; } } /// /// 20101028获取关联任务,同时返回主任务的应该分配的货叉:0,近货叉;1,远货叉;“-”未分配 /// /// 关联任务FID /// 是否使用远货叉,默认值"-" /// static string ObtainDoubleForkTask(object RelativeControlID,string UseAwayFork) { int i = 0; DataView dvl; object obj = null; string FSTARTCELL = ""; string FENDCELL = ""; char[] cc = new char[1] { '-' }; int FSTARTDEVICE = 0; int FENDDEVICE = 0; string flaneway = "-1"; int stackno = -1; int FStartCol = 0, FStartLayer = 0, FEndCol = 0, FEndLayer = 0; DataView dvIOC = dboM.ExceSQL("select * from IO_CONTROL where CONTROL_ID=" + RelativeControlID + "").Tables[0].DefaultView; if (dvIOC.Count == 0) return "-"; string sql = "SELECT T_Base_Manage_Task_Kind.F_TaskKindIndex, " + "T_Manage_Task.F_ManageTaskKindIndex, T_Manage_Task.FID " + "FROM T_Base_Manage_Task_Kind , T_Manage_Task where " + "T_Base_Manage_Task_Kind.F_TaskKindIndex = T_Manage_Task.F_ManageTaskKindIndex " + " and T_Base_Manage_Task_Kind.F_TaskKindIndex=1 and T_Manage_Task.FID = "; sql = sql + RelativeControlID; dvl = dbo.ExceSQL(sql).Tables[0].DefaultView; if (dvl.Count > 0)// 插入调度任务新记录 { return "-"; } if (Information.IsNumeric(dvIOC[i]["START_DEVICE_CODE"]) == false) {//货位编码 //20101028 dvl = dbo.ExceSQL("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" + dvIOC[i]["START_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["START_WAREHOUSE_CODE"] + "'").Tables[0].DefaultView; if (dvl.Count > 0) { flaneway = dvl[0]["FLaneWay"].ToString(); stackno =Convert.ToInt32( dvl[0]["FStack"]);//20101028 FStartCol =Convert.ToInt32( dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(3, 2)); FStartLayer = Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(6, 2)); } } else { if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"]) == false) { //20101028 dvl = dbo.ExceSQL("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'").Tables[0].DefaultView; if (dvl.Count>0) { flaneway = dvl[0]["FLaneWay"].ToString(); stackno =Convert.ToInt32( dvl[0]["FStack"]);//20101028 FEndCol =Convert.ToInt32( dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(3, 2)); FEndLayer =Convert.ToInt32( dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(6, 2)); } } } //20101028 //记录调度任务最大索引FID到表T_Base_Manage_Task_Index_Auto_Task RecordMaxManageTaskFID(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); if (Information.IsNumeric(dvIOC[i]["START_DEVICE_CODE"]) == true) { obj = dbo.GetSingle("SELECT T_Base_AGV_Gate.F_ChannelsIndex FROM T_Base_Device,T_Base_AGV_Gate where T_Base_Device.F_DeviceIndex = T_Base_AGV_Gate.F_AGVGateDeviceIndex and (T_Base_Device.F_DeviceKindIndex = 9) and (F_AGVGateDeviceIndex = " + Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]) + ") "); if (obj != null) {//AGV站台编码 FSTARTDEVICE = Convert.ToInt32(obj); FSTARTCELL = dvIOC[i]["START_DEVICE_CODE"].ToString(); } else {//站台编码 FSTARTDEVICE = Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]); FSTARTCELL = "-"; } } else {//货位编码 obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["START_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["START_WAREHOUSE_CODE"] + "'"); if (obj != null) { FSTARTDEVICE = Convert.ToInt32(obj); } else { _CObtainTaskError = "获取任务时:没找到调度任务索引:" + dvIOC[i]["CONTROL_ID"].ToString() + ",的起点位置!"; return "-"; } FSTARTCELL = dvIOC[i]["START_DEVICE_CODE"].ToString(); } if (Information.IsNumeric(dvIOC[i]["END_DEVICE_CODE"]) == true) { obj = dbo.GetSingle("SELECT T_Base_AGV_Gate.F_ChannelsIndex FROM T_Base_Device,T_Base_AGV_Gate where T_Base_Device.F_DeviceIndex = T_Base_AGV_Gate.F_AGVGateDeviceIndex and (T_Base_Device.F_DeviceKindIndex = 9) and (F_AGVGateDeviceIndex = " + Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]) + ") "); if(obj!=null) {//AGV站台编码 FENDDEVICE = Convert.ToInt32(obj); FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); } else {//站台编码 FENDDEVICE = Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"]); FENDCELL = "-"; } } else {//货位编码 obj = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL where FCELLCODE='" + dvIOC[i]["END_DEVICE_CODE"] + "' and FWAREHOUSE='" + dvIOC[i]["END_WAREHOUSE_CODE"] + "'"); if (obj != null) { FENDDEVICE = Convert.ToInt32(obj); } else { _CObtainTaskError = "获取任务时:没找到调度任务索引:" + dvIOC[i]["CONTROL_ID"].ToString() + ",的终点位置!"; return "-"; } FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); } //20091014 int FTASKLEVEL = 0;//空托盘组出库的优先级应该最大 FTASKLEVEL = dvIOC[i]["CONTROL_TASK_LEVEL"] == DBNull.Value ? 0 : Convert.ToInt32(dvIOC[i]["CONTROL_TASK_LEVEL"]); if (UseAwayFork == "-") { devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE); if (devinfo != null) { if (Microsoft.VisualBasic.Information.IsNumeric(FSTARTCELL) == true) { obj = dbo.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=" + FSTARTDEVICE + ") and ( F_AGVGateDeviceIndex= " + FSTARTCELL + ")").ToString(); if (obj != null) {//AGV站台的双叉属性 UseAwayFork = obj.ToString(); } } else { if (devinfo.DoubleFork == "1") { UseAwayFork = "0"; } else if (devinfo.DoubleFork == "2") { UseAwayFork = "1"; } } if (FEndCol > 0) {//结束列有数据是巷道货位判断是否为极限列,以极限列为准分配货叉 //obj = dbo.GetSingle("SELECT F_ForwardLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_ForwardLimitX = " + FEndCol + ")"); //if (obj != null) //{ // UseAwayFork = "0"; //} //obj = dbo.GetSingle("SELECT F_BackLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_BackLimitX = " + FEndCol + ")"); //if (obj != null) //{ // UseAwayFork = "1"; //} } } if (UseAwayFork == "-") { devinfo = Model.CGetInfo.GetDeviceInfo(FENDDEVICE); if (devinfo != null) { if (Microsoft.VisualBasic.Information.IsNumeric(FENDCELL) == true) { obj = dbo.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=" + FENDDEVICE + ") and ( F_AGVGateDeviceIndex= " + FENDCELL + ")").ToString(); if (obj != null) { UseAwayFork = obj.ToString(); } } else { if (devinfo.DoubleFork == "1") { UseAwayFork = "0"; } else if (devinfo.DoubleFork == "2") { UseAwayFork = "1"; } } if (FStartCol > 0) {//开始列有数据是巷道货位判断是否为极限列,以极限列为准分配货叉 //obj = dbo.GetSingle("SELECT F_ForwardLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_ForwardLimitX = " + FStartCol + ")"); //if (obj != null) //{ // UseAwayFork = "0"; //} //obj = dbo.GetSingle("SELECT F_BackLimitX FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ") AND (F_BackLimitX = " + FStartCol + ")"); //if (obj != null) //{ // UseAwayFork = "1"; //} } } } } //if (FENDDEVICE==13001||FENDDEVICE==13002) //{ // //FENDDEVICE = 12072; //} //20110428 remark 1280,64取空 " + dvIOC[i]["CONTROL_REMARK"] + " string typeStatus = "-1"; if (dvIOC[i]["MANAGE_TASK_TYPE"].ToString() == "2") { typeStatus = "0"; } sql =$"INSERT INTO T_Manage_Task" + "(FID, F_ManageTaskKindIndex,FMANAGEID,F_RELATIVECONTORLID,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN," + "FSTARTWAREHOUSE, FSTARTCELL, FSTARTDEVICE,FENDWAREHOUSE,FENDCELL,FENDDEVICE, " + "FSTATUS, FBEGTIME, FENDTIME,FIntoStepOK,FREMARK,FLANEWAY,FSTACK,FUseAwayFork,FStartCol,FStartLayer,FEndCol,FEndLayer ,BOX_QUANTITY,UNPACK_QUANTITY)" + "VALUES (" + dvIOC[i]["CONTROL_ID"] + ",1," + dvIOC[i]["MANAGE_ID"] + "," + dvIOC[i]["RELATIVE_CONTROL_ID"] + ",'" + dvIOC[i]["STOCK_BARCODE"] + "','" + dvIOC[i]["MANAGE_TASK_TYPE"] + "','" + dvIOC[i]["CONTROL_TASK_TYPE"] + "'," + FTASKLEVEL + ",'" + 0 + "','" + dvIOC[i]["START_WAREHOUSE_CODE"] + "','" + FSTARTCELL + "','" + FSTARTDEVICE + "','" + dvIOC[i]["END_WAREHOUSE_CODE"] + "','" + FENDCELL + "','" + FENDDEVICE + "','"+ typeStatus + "','" + Convert.ToDateTime(dvIOC[i]["CONTROL_BEGIN_TIME"]).ToString("yyyy-MM-dd HH:mm:ss") + "','" + dvIOC[i]["CONTROL_END_TIME"] + "','" + 0 + "',''," + flaneway + "," + stackno + ",'" + UseAwayFork + "'," + FStartCol + "," + FStartLayer + "," + FEndCol + "," + FEndLayer + "," + Convert.ToInt32(dvIOC[i]["BOX_QUANTITY"]) + "," + Convert.ToInt32(dvIOC[i]["UNPACK_QUANTITY"]) + ")";//20110318 int rc = dbo.ExecuteSql(sql); if (rc == 0) return "-"; else { if (UseAwayFork == "1") { UseAwayFork = "0"; } else if (UseAwayFork == "0") { UseAwayFork = "1"; } //20101011 dboM.ExecuteSql("update IO_CONTROL set CONTROL_STATUS=" + Model.CGeneralFunction.TASKCONTROLREADED + " where CONTROL_ID=" + dvIOC[i]["CONTROL_ID"]); // CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask", "管理CNTROL任务ID" + dvIOC[i]["CONTROL_ID"],"调度任务ID"+, (dt2 - dt1).ToString()); return UseAwayFork; } } /// /// 返回关联任务的CONTROL_ID /// /// /// static int GetDouleForkFID(int fid) {//CONTORL_BATCH LOGIC_AREA END_DEVICE_CODE START_DEVICE_CODE DataView dv = dboM.ExceSQL("select * from IO_CONTROL where CONTROL_ID="+fid).Tables[0].DefaultView; if (dv.Count > 0) { int minFid = -1; double minX = -1; char[] cc=new char[1]{'-'}; DataView dv0 = dboM.ExceSQL("select * from IO_CONTROL where CONTROL_STATUS=0 and CONTORL_BATCH='" + dv[0]["CONTORL_BATCH"] + "' and LOGIC_AREA='" + dv[0]["LOGIC_AREA"] + "' and END_DEVICE_CODE='" + dv[0]["END_DEVICE_CODE"] + "' and START_WAREHOUSE_CODE='" + dv[0]["START_WAREHOUSE_CODE"] + "'").Tables[0].DefaultView; if (dv[0]["START_DEVICE_CODE"].ToString().IndexOf("-") < 0) return -1; string[] sp1=dv[0]["START_DEVICE_CODE"].ToString().Split(cc),sp2; for (int i = 0; i < dv0.Count; i++) {//START_DEVICE_CODE z-x-y if (dv0[0]["START_DEVICE_CODE"].ToString().IndexOf("-") < 0) continue ; if (EqualCellDoubleFork(dv[0]["START_DEVICE_CODE"].ToString(), dv0[0]["START_DEVICE_CODE"].ToString(), dv[0]["START_WAREHOUSE_CODE"].ToString()) == false ) {//不符合双叉原则 continue; } if (InSameLaneWay(dv[0]["START_DEVICE_CODE"].ToString(), dv0[0]["START_DEVICE_CODE"].ToString(), dv[0]["START_WAREHOUSE_CODE"].ToString()) == false) {//不在一个巷道 continue; } sp2=dv0[0]["START_DEVICE_CODE"].ToString().Split(cc); //1、优先考虑:同一巷道的Z,临X(差值是1),同Y,符合双叉原则; if ((sp1[2] == sp2[2])&&(Math.Abs(int.Parse(sp2[1])-int.Parse(sp1[1]))==1)) { return int.Parse(dv0[i]["CONTROL_ID"].ToString()); } //2、其次:同一巷道的Z,X差值平方+Y差值平方,符合双叉原则; if (minX > (Math.Pow(Math.Abs(int.Parse(sp2[1]) - int.Parse(sp1[1])), 2) + Math.Pow(Math.Abs(int.Parse(sp2[2]) - int.Parse(sp1[2])), 2))) { minX = Math.Pow(Convert.ToDouble(Math.Abs(decimal.Parse(sp2[1]) - decimal.Parse(sp1[1]))), 2) + Math.Pow(Convert.ToDouble(Math.Abs(decimal.Parse(sp2[2]) - decimal.Parse(sp1[2]))), 2); minFid = int.Parse(dv0[i]["CONTROL_ID"].ToString()); } } return minFid; } else { return -1; } } /// /// 判断两个货位是否满足双叉原则 /// /// 货位1 /// 货位2 /// 库房位置 /// static bool EqualCellDoubleFork(string Zxy,string Zxy1,string warehouse) { char[] cc = new char[1] { '-'}; string[] sp = Zxy.Split(cc); string[] sp1 = Zxy1.Split(cc); char DoubleFork = '0', DoubleFork1 = '0'; int z = int.Parse(sp[0]), x = int.Parse(sp[1]), y = int.Parse(sp[2]), z1 = int.Parse(sp1[0]), x1 = int.Parse(sp1[1]), y1 = int.Parse(sp1[2]); object ob,ob1; try { //考虑极限货位:如果其中一个是前极限货位,另外一个必须为非前极限货位; //如果其中一个是后极限货位,另外一个必须为非后极限货位 ob = dbo.GetSingle("SELECT FLaneWay FROM ST_CELL WHERE FCELLCODE = '"+Zxy+"'"); #region 考虑极限货位 ob1 = dbo.GetSingle("SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo where (F_LaneDeviceIndex =" + ob + ") and (F_ForwardLimitX=" + x + ") and (F_ForwardLimitX=" + x1 + ")"); if (ob1 != null) { return false; } ob1 = dbo.GetSingle("SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo where (F_LaneDeviceIndex =" + ob + ") and (F_BackLimitX=" + x + ") and (F_BackLimitX=" + x1 + ")"); if (ob1 != null) { return false; } #endregion DoubleFork =char.Parse( Model.CGeneralFunction.GetDoubleForkFromST_CELL(z,x,y,warehouse).ToString()); if ((z == 0) && (x == 0) && (y == 0)) { return false; } else { DoubleFork1 =char.Parse( Model.CGeneralFunction.GetDoubleForkFromST_CELL(z1, x1, y1, warehouse).ToString()); //0,1,- if (x>=x1) { if (DoubleFork == '1') { if (DoubleFork1 != '1') return true; else { return false; } } else if (DoubleFork=='0') { return false; } else //'-' { if (DoubleFork1 == '1') return false; else { return true; } } } else//x1>x { if (DoubleFork1 == '1') { if (DoubleFork != '1') return true; else { return false; } } else if (DoubleFork1 == '0') { return false; } else //'-' { if (DoubleFork == '1') return false; else { return true; } } } } } catch (Exception ex) { throw ex; } finally { ob = null; ob1 = null; cc=null; sp = null; sp1 = null; } } static bool InSameLaneWay(string Zxy, string Zxy1, string warehouse) { DataView dv = dbo.ExceSQL("SELECT FLaneWay FROM ST_CELL WHERE (FCELLCODE = '" + Zxy + "') and FWAREHOUSE='"+warehouse+"'").Tables[0].DefaultView; if (dv.Count > 0) { DataView dv1 = dbo.ExceSQL("SELECT FLaneWay FROM ST_CELL WHERE (FCELLCODE = '" + Zxy1 + "') and FWAREHOUSE='" + warehouse + "'").Tables[0].DefaultView; if (dv1.Count > 0) { if (dv[0]["FLaneWay"].ToString() == dv1[0]["FLaneWay"].ToString()) { return true; } else { return false; } } else { return false; } } else { return false; } } /// /// 出库任务数量控制 /// /// /// static int ManageCountControl(string enddevice) { int count = 0; int device = 0; if (!int.TryParse(enddevice, out device)) { count = 100; return count; } DataView dv= dbo.ExceSQL("select * from t_base_device_taskcontrol where device_id =" + Convert.ToInt64(enddevice)).Tables[0].DefaultView; if (dv.Count > 0) { count = Convert.ToInt32(dv[0]["manage_max"]); } else { count = 100; } return count; } } }