using System; using System.Collections.Generic; using System.Text; using System.Data; using DBFactory; using System.Threading; using Microsoft.VisualBasic; using CommonLib; using ICommLayer; using System.Linq; namespace WcfControlMonitorLib { /// /// Creator:Richard.liu /// 获取调度任务 /// public static class CObtainTask { 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); } } static ISendDeviceOrder sdo; static StringBuilder[] wv = { new StringBuilder("2") }; static StringBuilder[] witemnames = { new StringBuilder("") }; static CGetState cgs = new CGetState(); static CCommonFunction ccf = new CCommonFunction(); static Thread mythread; static bool exitThread = false;//20091107 static Model.MDevice devinfo; static StringBuilder sbs = new StringBuilder(); static StringBuilder temp = new StringBuilder(); private static void BeginListen() {//20091107 while (!exitThread) { GetManagerTask(); } } 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; RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", _CObtainTaskError); OnRefreshMonitor(rme); } } static DBOperator dbo = CStaticClass.dbo;//20130510 static DBOperator dboM = CStaticClass.dboM;//20130510 /// /// 获得调度任务 /// /// /// 获得调度任务 /// public static int GetManagerTask() { //是否考虑同时读取IO_CONTROLDETAIL表的数据到本地数据库 DataSet dsIOC = new DataSet(); DataView dvIOC = new DataView(); DataView dv = new DataView(); DataView dvnew = new DataView(); DataView dvmi = new DataView(); DataView DMAN = new DataView(); DataView dvc = new DataView(); object obj = null; #region //受流量限制的出库任务,变量初始化20151120 StringBuilder startcell = new StringBuilder(""); StringBuilder endcell = new StringBuilder(""); StringBuilder notin = new StringBuilder(" and END_DEVICE_CODE not in ("); #endregion try { int RecCount = 0; #region 受流量限制的出库任务,T_Base_TaskCount应该考虑对流量控制的区域增加优先级//20151120 //获取传输线出库任务数 dvc = dbo.ExceSQL("SELECT F_DeviceIndex,F_MAXCOUNT FROM T_Base_TaskCount where F_MAXCOUNT>0").Tables[0].DefaultView; for (int i = 0; i < dvc.Count; i++) { if (i == 0) { notin.Append("'").Append(dvc[i]["F_DeviceIndex"]).Append("'");//传输线编码 } else { notin.Append(",'").Append(dvc[i]["F_DeviceIndex"]).Append("'"); } int leftTask = 0; //主任务查询 条件出库任务 、任务巷道 dvnew = dbo.ExceSQL(string.Format("SELECT count(fid) as fids FROM T_Manage_Task where FCONTROLTASKTYPE=2 and FENDDEVICE='{0}'", dvc[i]["F_DeviceIndex"])).Tables[0].DefaultView;//出库 if (dvnew.Count > 0) { leftTask = Convert.ToInt32(dvc[i]["F_MAXCOUNT"]) - Convert.ToInt32(dvnew[0]["fids"]); } else { leftTask = Convert.ToInt32(dvc[i]["F_MAXCOUNT"]); } if (leftTask > 0) { #region 到此终点的任务按照巷道等待执行和执行中任务数由小到大依次出叉数量的任务 // dvnew = dbo.ExceSQL(string.Format("SELECT F_StartDevice,(SELECT COUNT(FID) FROM T_Manage_Task where FSTARTDEVICE=F_StartDevice)+(SELECT count(F_MonitorIndex) FROM T_Monitor_Task where F_DeviceIndex =convert(int,'11'+ substring(convert(varchar,F_StartDevice),3,3)) and F_DeviceCommandIndex=5) as aaa FROM T_Base_Route where F_EndDevice={0} and F_RouteKind=2 order by aaa asc", Convert.ToInt32(dvc[i]["F_DeviceIndex"]))).Tables[0].DefaultView;//晟碟光限制出库 for (int xd = 0; xd < dvnew.Count; xd++) { startcell.Clear(); if (CStaticClass.DBFactory == "OracleDBFactory") {//20151120调度系统oracle的特殊语句 obj = dbo.GetSingle(string.Format("SELECT FCELLCODE from ST_CELL where rownum=1 and FLaneWay={0} order by FCELLCODE asc", dvnew[xd]["F_StartDevice"])); } else { obj = dbo.GetSingle(string.Format("SELECT top 1 FCELLCODE from ST_CELL where FLaneWay={0} order by FCELLCODE asc", dvnew[xd]["F_StartDevice"])); } if (obj != null) { startcell.Append(obj.ToString()); } else { startcell.Append("-"); } endcell.Clear(); if (CStaticClass.DBFactory == "OracleDBFactory") {//20151120调度系统oracle的特殊语句 obj = dbo.GetSingle(string.Format("SELECT FCELLCODE from ST_CELL where rownum=1 and FLaneWay={0} order by FCELLCODE desc", dvnew[xd]["F_StartDevice"])); } else { obj = dbo.GetSingle(string.Format("SELECT top 1 FCELLCODE from ST_CELL where FLaneWay={0} order by FCELLCODE desc", dvnew[xd]["F_StartDevice"])); } if (obj != null) { endcell.Append(obj.ToString()); } else { endcell.Append("-"); } obj = dbo.GetSingle(string.Format("SELECT F_ForkAmount from T_Base_StackInfo where F_LaneNo like '%{0}%'", dvnew[xd]["F_StartDevice"])); int forkcount = 1; if (obj != null) { forkcount = Convert.ToInt32(obj); } sbs.Remove(0, sbs.Length); if (CStaticClass.ManDBFactory == "OracleDBFactory") {//20151120调度系统oracle的特殊语句 sbs.Append("select CONTROL_ID from IO_CONTROL where rownum<=").Append(forkcount); } else { sbs.Append("select top ").Append(forkcount).Append(" CONTROL_ID from IO_CONTROL where CONTROL_TASK_TYPE=2 AND 1=1 ");//晟碟 光限制出库 } sbs.Append(" and CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKWAIT.ToString());// sbs.Append(" and START_DEVICE_CODE>='").Append(startcell).Append("' "); sbs.Append(" and START_DEVICE_CODE<='").Append(endcell).Append("' "); sbs.Append(" and END_DEVICE_CODE='").Append(dvc[i]["F_DeviceIndex"]).Append("'"); sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_BEGIN_TIME asc,CONTROL_ID asc "); dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; for (int inew = 0; inew < dvIOC.Count; inew++) { ObtainDoubleForkTask(dvIOC[inew]["CONTROL_ID"], "0"); } leftTask = leftTask - dvIOC.Count; if (leftTask <= 0) break; } #endregion } } notin.Append(")"); #endregion #region 限制获取的排货位限制 temp.Remove(0, temp.Length);//20101208 if (CStaticClass.ManZWhere.ToString().Length > 0)//20101124 { temp.Append(CStaticClass.ManZWhere.ToString()); temp.Replace("or", "and (", 0, 4); temp.Append(")"); } else { temp.Append(" and 1=1"); } #endregion #region 20210324_上海晟碟,轮询判断拣选站台指示灯状态与管理表订单状态是否一致 //dvIOC = dbo.ExceSQL("SELECT * FROM IO_Station_Status").Tables[0].DefaultView; //if(dvIOC.Count > 0) //{ // int iDeviceIndex; // int iStatus; // Model.MDevice deviceInfo = new Model.MDevice(); // for (int i = 0; i < dvIOC.Count; i++) // { // iDeviceIndex = Convert.ToInt32(dvIOC[i]["F_StationID"]); // iStatus = Convert.ToInt32(dvIOC[i]["F_Status"]); // deviceInfo = Model.CGetInfo.GetDeviceInfo(iDeviceIndex * 10 + 1); // if(deviceInfo.ReturnMessage == null || deviceInfo.ReturnMessage[0] != iStatus) // { // witemnames[0].Clear(); // witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(deviceInfo.Dbw1Address + 0)).Append(",b"); // wv[0].Clear(); // wv[0].Append(iStatus.ToString()); // sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(deviceInfo.DeviceIndex); // sdo.WriteDBData(witemnames, wv, deviceInfo.S7Connection); // int[] lStatus = { iStatus }; // deviceInfo.ReturnMessage = lStatus; // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更改拣选站台塔灯颜色", deviceInfo.DeviceIndex.ToString(), "更改为:" + iStatus); // } // } //} #endregion sbs.Remove(0, sbs.Length);//20110602增加获取任务时的读取单叉执行的状态 sbs.Append("select * from IO_CONTROL where ((CONTROL_STATUS="); sbs.Append(Model.CGeneralFunction.TASKWAIT.ToString()); sbs.Append(") or (CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString()).Append(") or (CONTROL_STATUS="); sbs.Append(Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString()); sbs.Append(")) " + temp.ToString()).Append(" ").Append("and (CONTROL_TASK_TYPE<>2 or (CONTROL_TASK_TYPE=2 ").Append(notin).Append("))");//.Append(notin);//晟碟 sbs.Append(" order by CONTROL_TASK_LEVEL desc,CONTROL_ID asc");//20151120 dsIOC = dboM.ExceSQL(sbs.ToString()); 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 bool UseOldRoute = false; #region 新任务 if ((dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKWAIT.ToString()) || (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString())) { //20120906 #region 控制三四楼的出库任务,有其他批号没通过主道合流扫描器就不获取任务 ////42529;32710 //if (dvIOC[i]["END_DEVICE_CODE"].ToString().Length == 5) //{ // if (dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1) == "3") // { // if (IFExitSameLayerUnSameEndDevice(dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1), 32710, dvIOC[i]["END_DEVICE_CODE"].ToString()) == true) // { // continue; // } // } // else if (dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1) == "4") // { // if (IFExitSameLayerUnSameEndDevice(dvIOC[i]["END_DEVICE_CODE"].ToString().Substring(0, 1), 42529, dvIOC[i]["END_DEVICE_CODE"].ToString()) == true) // { // continue; // } // } //} #endregion #region 四楼检定回库一体化平台准备放行(不满16箱) //46006\46007\46008:站台到站台,直接转给电气 if (("46006,46007,46008".IndexOf(dvIOC[i]["START_DEVICE_CODE"].ToString()) >= 0) && ("46006,46007,46008".IndexOf(dvIOC[i]["END_DEVICE_CODE"].ToString()) >= 0) && (dvIOC[i]["START_DEVICE_CODE"].ToString() == dvIOC[i]["END_DEVICE_CODE"].ToString())) { IntegrativeNotifyDischarging(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"])); continue; } #endregion #region 四楼检定回库的三个道码垛控制46007,46008,46006---42639 //电气申请放行后,管理下达任务,第一个任务给电气写入放行信号,电气自己清除,放行后,记录批号,相同批号禁止重复写入放行信号 //正在放行的单元最后一箱通过42664后清除记录批号,获取其他单元任务;42664的F_BoxBarcode记录批号,F_TaskIndex记录放行单元号 if ("46007,46008,46006".IndexOf(dvIOC[i]["START_DEVICE_CODE"].ToString()) >= 0) { if (ManageSendDischargingTask(Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"]), dvIOC[i]["CONTORL_BATCH"].ToString(), 42664, Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])) == false) { continue; } } #endregion bool Ifobtain = true; #region 20120906判断是否是嘉兴一楼三个条码一起配叉任务,三个任务都存在时一起获取 StringBuilder[] relBarcodes = GetRelativeBarCodes(dvIOC[i]["START_DEVICE_CODE"].ToString(), dvIOC[i]["STOCK_BARCODE"].ToString()); int[] relFID = null; if (relBarcodes != null) { relFID = new int[relBarcodes.GetLength(0)]; int ri = 0; int tep = 0; for (int j = 0; j < relBarcodes.GetLength(0); j++) { tep = GetIOControlFromBarcode(relBarcodes[j]); if (tep <= 0) { Ifobtain = false; } else { relFID[ri] = tep; ri++; } } } #endregion if (Ifobtain == true) {//20120906全部获取后,一起关联多叉任务 if (relFID != null) { for (int j = 0; j < relFID.GetLength(0); j++) { ObtainDoubleForkTask(relFID[j], "0"); } } ObtainDoubleForkTask(dvIOC[i]["CONTROL_ID"], "0"); string FUseAwayFork = "0"; if (relFID != null) { for (int j = 0; j < relFID.GetLength(0); j++) {//20120906分配一楼关联任务货叉 FUseAwayFork = GetFUseForkFromManage(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); ; sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FUseAwayFork=").Append(FUseAwayFork).Append(",F_RELATIVECONTORLID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(" where F_ManageTaskKindIndex=1").Append(" and FID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); dbo.ExecuteSql(sbs.ToString()); FUseAwayFork = GetFUseForkFromManage(relFID[j]); sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FUseAwayFork=").Append(FUseAwayFork).Append(",F_RELATIVECONTORLID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(" where F_ManageTaskKindIndex=1").Append(" and FID=").Append(relFID[j]); dbo.ExecuteSql(sbs.ToString()); }// } else { if ("12055,12054,12053,12052".IndexOf(dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(0, 5)) >= 0) { FUseAwayFork = GetFUseForkFromManage(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); ; sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FUseAwayFork=").Append(FUseAwayFork).Append(" where F_ManageTaskKindIndex=1").Append(" and FID=").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])); dbo.ExecuteSql(sbs.ToString()); } } RecCount++; } } #endregion #region 修改路径的答复 #region //历史 else if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString() && false) { int a = 0; if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); obj = dbo.GetSingle(sbs.ToString()); //20101124 if (obj != null) { FENDDEVICE = Convert.ToInt32(obj); } else { CObtainTaskError = string.Format("获取任务的修改路径的答复:没找到调度任务索引:{0},修改后的终点位置!", 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; //} // yy -edit 2023-0205 int errManageTask = ccf.GetExceptionNOFromManageTask(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), 1); //if (errManageTask == Model.CGeneralFunction.TASKREPEATINPUT ) if (errManageTask == Model.CGeneralFunction.PICKUPWEIGHTLEFT || errManageTask == Model.CGeneralFunction.PICKUPWEIGHTRIGHT) { 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) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_TASKKIND, F_DESTINATION FROM T_Base_Destination WHERE (F_TASKKIND = ").Append(dvIOC[i]["CONTROL_TASK_TYPE"]).Append(") and (F_AbendStation=1) and (F_DESTINATION=").Append(FENDDEVICE).Append(")"); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dv.Count > 0)//是应急站台,把原来的终点改为起点改道至应急站台 { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FSTARTDEVICE=FENDDEVICE,FSTARTCELL=FENDCELL where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)"); dbo.ExceSQL(sbs.ToString()); } else { UseOldRoute = true; } } FENDCELL = "-"; #region 20101028转换AGV的坐标为通道 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_ChannelsIndex FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = ").Append(Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])).Append(") "); obj = dbo.GetSingle(sbs.ToString()); 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 } //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FENDDEVICE='").Append(FENDDEVICE).Append("',FENDCELL='").Append(FENDCELL).Append("' where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)"); dbo.ExceSQL(sbs.ToString()); //已经开始执行的需要更改调度任务) //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3) order by F_MonitorIndex asc"); dvmi = dbo.ExceSQL(sbs.ToString()).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(); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("select * from T_Manage_Task where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)"); DMAN = dbo.ExceSQL(sbs.ToString()).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 //删除原来的申请修改路径任务,拆分新的任务并且只保留现有设备开始的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3)"); dbo.ExceSQL(sbs.ToString()); //20090910 if (CDisassembleTask.CreateMonitor(1, Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), routeidNew, DMAN[0], 3) <= 0) { //重新生成申请修改路径的申请任务 sbs.Remove(0, sbs.Length); sbs.Append("INSERT INTO T_Monitor_Task "); sbs.Append("(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,"); sbs.Append(" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,"); sbs.Append(" F_AheadDetect,F_TxtParam)"); sbs.Append("VALUES (").Append(dvIOC[i]["CONTROL_ID"]).Append(",1,").Append(monitorIndex) .Append(",1,").Append(devindex).Append(",").Append(devCommand).Append(",").Append(routeID) .Append(",3,").Append(NumParam1).Append(",").Append(NumParam4).Append(",'").Append(AheadDetect) .Append("','").Append(dvIOC[i]["STOCK_BARCODE"]).Append("')"); dbo.ExceSQL(sbs.ToString()); 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运动到接货点之前的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew); sbs.Append(") AND (F_Status = 3) AND (F_NumParam1 = ").Append(NumParam1).Append(")"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #endregion #region RGV运动到送货点 if (RGVsn < Consn) { int RGVsn1 = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货输送机设备索引 List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn1); int condev = nextcon[0]; //删除RGV运动到送货点之前的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew); sbs.Append(") AND (F_Status = 3) AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]); sbs.Append(" and (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #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运动到送货点之前的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew); sbs.Append(") AND (F_Status = 3) AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #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运动到接货点之前的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew); sbs.Append(") AND (F_Status = 3) AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #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运动到接货点之前的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(rgvdev).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew); sbs.Append(") AND (F_Status = 3) AND (F_NumParam1 = ").Append(devindex).Append(")"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #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运动到送货点之前的任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(rgvdev).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew); sbs.Append(") AND (F_Status = 3) AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #endregion #region 输送机的送出 if (devCommand == 6) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = 6) AND (F_RouteID = ").Append(routeidNew).Append(") AND (F_Status = 3) "); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); int CurrentLocation = 0; //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FCurrentLocation FROM T_Manage_Task where FID=").Append(dvIOC[i]["CONTROL_ID"]).Append(" and F_ManageTaskKindIndex=1"); dvc = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvc.Count > 0) { CurrentLocation = Convert.ToInt32(dvc[0]["FCurrentLocation"]); } if (CurrentLocation == 0) continue; //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_DeviceIndex=").Append(CurrentLocation).Append(" where F_MonitorIndex=").Append(dvnew[0]["F_MonitorIndex"]); dbo.ExceSQL(sbs.ToString()); //20090910已经搬运到CurrentLocation(F_NumParam4=CurrentLocation) 删除送出任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_DeviceIndex=").Append(CurrentLocation).Append(" and F_NumParam4=").Append(CurrentLocation); dbo.ExceSQL(sbs.ToString()); //20091102 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Base_Device set F_LockedState=0 where F_LockedState=").Append(monitorIndex); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #endregion } #region 堆垛机的送货重和其它任务 if (devKind == 1) { //堆垛机的送货重,只保留堆垛机的送货任务 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = "); sbs.Append(devindex).Append(") AND (F_DeviceCommandIndex = ").Append(devCommand).Append(") AND (F_RouteID = ").Append(routeidNew).Append(") AND (F_Status = 3)"); dvnew = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(devindex); dbo.ExceSQL(sbs.ToString()); //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = "); sbs.Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); } } #endregion }//20090910 } else//未拆分的,修改目标位置和状态(FSTATUS='40'禁用拆分的FIntoStepOK='-'改为FIntoStepOK='0'; { //20091128必须使用FENDCELL //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FENDDEVICE='").Append(FENDDEVICE).Append("',FENDCELL='").Append(FENDCELL).Append("', FIntoStepOK=0 where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) and (FIntoStepOK='-')"); dbo.ExceSQL(sbs.ToString()); } //修改T_Manage_Task的FLANEWAY,FSTACK int flaneway = -1, stackno = -1; if (int.TryParse(dvIOC[i]["START_DEVICE_CODE"].ToString(), out a) == false) {//货位编码 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["START_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'"); obj = dbo.GetSingle(sbs.ToString()); if (obj != null) { flaneway = Convert.ToInt32(obj); } } else { if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); obj = dbo.GetSingle(sbs.ToString()); if (obj != null) { flaneway = Convert.ToInt32(obj); } } } //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_StackIndex, F_LaneNo FROM T_Base_StackInfo "); sbs.Append(" where (F_LaneNo='").Append(flaneway).Append("') OR (F_LaneNo like '%").Append(";").Append(flaneway).Append("') OR (F_LaneNo='").Append(flaneway).Append(";").Append("%') "); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { stackno = Convert.ToInt32(dv[0]["F_StackIndex"]); } //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update dbo.T_Manage_Task set FLANEWAY=").Append(flaneway).Append(",FSTACK=").Append(stackno).Append(" where F_ManageTaskKindIndex=1 and FID=").Append(dvIOC[i]["CONTROL_ID"]); dbo.ExceSQL(sbs.ToString()); //20091107 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("update IO_control set CONTROL_status=").Append(Model.CGeneralFunction.TASKRUN).Append(" where (CONTROL_ID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(")"); dboM.ExceSQL(sbs.ToString()); CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("获取任务,GetManagerTask", cea); } #endregion //李尔入库异常 else if (dvIOC[i]["CONTROL_STATUS"].ToString() == Model.CGeneralFunction.TASKALTERROUTEREPLY.ToString()) { int a = 0; if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); obj = dbo.GetSingle(sbs.ToString()); //20101124 if (obj != null) { FENDDEVICE = Convert.ToInt32(obj); } else { CObtainTaskError = string.Format("获取任务的修改路径的答复:没找到调度任务索引:{0},修改后的终点位置!", 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; //} // yy -edit 2023-0205 int errManageTask = ccf.GetExceptionNOFromManageTask(Convert.ToInt32(dvIOC[i]["CONTROL_ID"]), 1); if (errManageTask == Model.CGeneralFunction.PICKUPWEIGHTLEFT || errManageTask == Model.CGeneralFunction.PICKUPWEIGHTRIGHT) { UseOldRoute = true; } } sbs.Remove(0, sbs.Length); sbs.Append("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) AND (F_Status =3) order by F_MonitorIndex asc"); dvmi = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 //已经开始执行的需要更改调度任务) //20101124 if (dvmi.Count > 0) { sbs.Remove(0, sbs.Length); sbs.Append("update T_Manage_Task set FENDDEVICE='").Append(FENDDEVICE).Append("',FENDCELL='").Append(FENDCELL).Append("' where (FID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1)"); dbo.ExceSQL(sbs.ToString()); int StartZ = Convert.ToInt32(dvmi[0]["F_NumParam1"]); int EndZ = Convert.ToInt32(dvmi[0]["F_NumParam4"]); string[] cell = FENDCELL.Split('-'); #region 李尔货叉转换--废弃 //int fork = 0; //if (StartZ > 0) //{ // if (StartZ % 4 != 0) // { // StartZ = StartZ % 4; // } // else // { // StartZ = 4; // } //} //if (EndZ > 0) //{ // if (EndZ % 4 != 0) // { // EndZ = EndZ % 4; // } // else // { // EndZ = 4; // } //} //if (StartZ == 1) //{ // fork = 12; //} //else if (StartZ == 2) //{ // fork = EndZ < 3 ? 12 : 23; //} //else if (StartZ == 3) //{ // fork = EndZ < 3 ? 12 : 23; //} //else if (StartZ == 4) //{ // fork = 23; //} //else //{ // fork = 0; //} //int useAwayFork = fork == 12 ? 1 : 2; sbs.Remove(0, sbs.Length); sbs.Append($"update T_Monitor_Task set F_Status = 0 ,F_NumParam4 ={cell[0]},F_NumParam5 ={cell[1]},F_NumParam6={cell[2]} WHERE (F_ManageTaskIndex = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(") AND (F_ManageTASKKINDINDEX =1) AND (F_Status = 3)"); dbo.ExceSQL(sbs.ToString()); #endregion sbs.Remove(0, sbs.Length); sbs.Append("update IO_control set CONTROL_status=").Append(Model.CGeneralFunction.TASKRUN).Append(" where (CONTROL_ID = ").Append(Convert.ToInt32(dvIOC[i]["CONTROL_ID"])).Append(")"); dboM.ExceSQL(sbs.ToString()); //SControlMonitor smModel = new SControlMonitor(); //IControlMonitor icm; ModifyMonitorTask_LR(Convert.ToInt32(dvmi[0]["F_DeviceIndex"]), Convert.ToInt32(dvmi[0]["F_MonitorIndex"]), 920, "调度入库任务终点货位修改重发", out string Errtext); } } #endregion } if (RecCount > 0) { //显示调度任务 CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("获取到管理任务", cea); return RecCount; } else { //_CObtainTaskError = "没有获得任何调度任务!"; return 0; } } else { //_CObtainTaskError = "管理程序没有下达新的搬运任务!"; return 0; } //20091107 } catch (Exception ex) { CObtainTaskError = string.Format("获得调度任务失败,{0}!", ex.StackTrace + ex.Message); //throw ex; return 0; } finally { dsIOC.Dispose(); dvIOC.Dispose(); DMAN.Dispose(); dv.Dispose(); dvc.Dispose(); dvmi.Dispose(); dvnew.Dispose(); } } private static bool ManageSendDischargingTask(int startdev, string batch, int ScanDeviceIdx, int arrowDev) { //startdev46006/46007/46008管理通知PLC放行对应设备号:设备号+“3” //ScanDeviceIdx42664的F_BoxBarcode记录批号,F_TaskIndex记录放行单元号 //arrowDev是42639控制批号放行,其余不控制 DataView dv = new DataView(); try { if (arrowDev == 42639) { sbs.Clear(); sbs.Append(string.Format("SELECT F_TaskIndex,F_BoxBarcode FROM T_Base_PLC_Ask WHERE (F_TaskIndex>0 and F_DeviceIndex = {0})", ScanDeviceIdx)); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { if (dv[0]["F_TaskIndex"].ToString() == startdev.ToString() && dv[0]["F_BoxBarcode"].ToString() == batch) { return true; } else { return false; } } } devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(startdev.ToString() + "3")); witemnames[0].Clear(); witemnames[0].Append("DB1." + devinfo.Dbw1Address.ToString()).Append(",b"); wv[0].Clear(); wv[0].Append("2"); sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(devinfo.DeviceIndex); if (sdo.WriteDBData(witemnames, wv, devinfo.S7Connection) == true) { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "管理通知PLC放行", startdev.ToString(), "批号:" + batch); if (arrowDev == 42639) { dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_TaskIndex = {0}, F_BoxBarcode = '{1}' WHERE (F_DeviceIndex = {2})", startdev, batch, ScanDeviceIdx)); } } return true; } catch (Exception ex) { RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", string.Format("获取任务IntegrativeNotifyDischarging时:{0}", ex.StackTrace + ex.Message)); OnRefreshMonitor(rme); return false; } finally { dv.Dispose(); } } private static bool IFExitSameLayerUnSameEndDevice(string layer, int barcodeBindDevice, string endDevice) { DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex, T_Manage_Task.FENDDEVICE, T_Monitor_Task.F_NumParam4 FROM T_Manage_Task,T_Monitor_Task where T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex and T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX and (T_Manage_Task.FENDDEVICE LIKE '{0}%') AND (T_Manage_Task.FENDDEVICE <> '{1}') AND (T_Monitor_Task.F_NumParam4 = {2})", layer, endDevice, barcodeBindDevice)).Tables[0].DefaultView; if (dv.Count > 0) { return true; } else { return false; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,判断是否有同层不同检定单元任务未通过合流扫描器IFExitSameLayerUnSameEndDevice:{0}", ex.StackTrace + ex.Message); return false; } finally { dv.Dispose(); } } private static string GetFUseForkFromManage(int p) { DataView dv = new DataView(); try { dv = dboM.ExceSQL(string.Format("SELECT START_DEVICE_CODE FROM IO_CONTROL WHERE (CONTROL_ID ={0})", p)).Tables[0].DefaultView; if (dv.Count > 0) { return dv[0]["START_DEVICE_CODE"].ToString().Trim().Substring(5, 1); } else { return "0"; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,查找任务的货叉GetFUseForkFromManage:{0}", ex.StackTrace + ex.Message); return "0"; } finally { dv.Dispose(); } } static void RecordMaxManageTaskFID(int fid) { //20101124 StringBuilder sql = new StringBuilder(); 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"])) { //20101124 sql.Append("UPDATE T_Base_Manage_Task_Index_Auto_Task SET F_ManageTaskIndex =").Append(fid); dbo.ExceSQL(sql.ToString()); } } else { //20101124 sql.Append("INSERT INTO T_Base_Manage_Task_Index_Auto_Task (F_ManageTaskIndex)VALUES (").Append(fid).Append(")"); dbo.ExceSQL(sql.ToString()); } } /// /// 20091005 /// 获取可用的目标位置:入库的巷道或者出库站台 /// /// T_Manage_Task表的行记录 /// public static void GetUsableDestination(DataRowView dr) { //20100610查找一个路径可用,任务数最少的终点设备 Dictionary advDev = new Dictionary(); object ob; //只修申请改调度任务的路径,不修改调度自动任务路径 if (dr["F_ManageTaskKindIndex"].ToString() != "1") return; StringBuilder sql = new StringBuilder();//20101124 string adviceDev = ""; 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(")");//20101124 DataTable dtd = dbo.ExceSQL(sql.ToString()).Tables[0];//20101124 if (dtd.Rows.Count > 0)//原来终点是应急站台那么还分配这个站台,不需要改变 { adviceDev = dtd.Rows[0]["F_DESTINATION"].ToString(); //20091005 return; } else { //查找可用目标位置 //20101124 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)"); DataTable dt = dbo.ExceSQL(sql.ToString()).Tables[0]; //20101124 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统计到终点设备正在执行的任务数 //20101124 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 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 { //20101124 sql.Remove(0, sql.Length); sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(" where CONTROL_ID=").Append(dr["FID"]); dboM.ExceSQL(sql.ToString()); //向管理申请修改任务// //20101124 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, "); sql.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(); //20091102修改调度任务为不可拆分状态 //20101124 sql.Remove(0, sql.Length); sql.Append("update T_Manage_Task set FIntoStepOK='-' where (FID = ").Append(Convert.ToInt32(dr["FID"])).Append(") AND (F_ManageTASKKINDINDEX =1)"); dbo.ExceSQL(sql.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask.GetUsableDestination", "获取任务时,向管理申请改道", "管理任务:" + dr["FID"].ToString(), "条码:" + dr["FPALLETBARCODE"].ToString().ToUpper()); } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,向管理申请改道:{0}", ex.StackTrace + ex.Message); dboM.TransRollback(); } } public static bool IfDeleteOutTask(int fid, int deleteflag) { //20101124 try { if (1 != deleteflag) { return false; } StringBuilder strsql = new StringBuilder("select FIntoStepOK from T_Manage_Task where F_ManageTaskKindIndex=1 and FID= "); strsql.Append(fid).Append(" and FIntoStepOK <> '1' "); DataView dv = dbo.ExceSQL(strsql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { strsql.Remove(0, strsql.Length); strsql.Append("DELETE FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = 1) AND (FID = ").Append(fid).Append(")"); dbo.ExceSQL(strsql.ToString()); strsql.Remove(0, strsql.Length); strsql.Append("update IO_Control set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKCANCEL).Append(" where CONTROL_ID=").Append(fid); dboM.ExceSQL(strsql.ToString()); return true; } else { return false; } } catch (Exception ex) { throw ex; } } /// /// 20101028获取关联任务,同时返回主任务的应该分配的货叉:距离控制柜由近及远货叉序号依次1,2,3,4;'-'代表未分配货叉 /// /// 关联任务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; int FSTARTUCODE = 0; int FENDUCODE = 0; string LOGIC_AREA = string.Empty; string flaneway = "-1"; int stackno = -1; int FStartCol = 0, FStartLayer = 0, FEndCol = 0, FEndLayer = 0; try { //20101124 sbs.Remove(0, sbs.Length);//20101208 sbs.Append("select * from IO_CONTROL where CONTROL_ID=").Append(RelativeControlID); DataView dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvIOC.Count == 0) return "-"; sbs.Remove(0, sbs.Length); sbs.Append("SELECT T_Base_Manage_Task_Kind.F_TaskKindIndex, "); sbs.Append("T_Manage_Task.F_ManageTaskKindIndex, T_Manage_Task.FID "); sbs.Append("FROM T_Base_Manage_Task_Kind , T_Manage_Task where "); sbs.Append("T_Base_Manage_Task_Kind.F_TaskKindIndex = T_Manage_Task.F_ManageTaskKindIndex "); sbs.Append(" and T_Base_Manage_Task_Kind.F_TaskKindIndex=1 and T_Manage_Task.FID = "); sbs.Append(RelativeControlID); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dvl.Count > 0)// 插入调度任务新记录 { return "-"; } int a = 0; if (int.TryParse(dvIOC[i]["START_DEVICE_CODE"].ToString(), out a) == false) {//货位编码 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='"); sbs.Append(dvIOC[i]["START_DEVICE_CODE"]).Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 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 (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == false) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='"); sbs.Append(dvIOC[i]["END_DEVICE_CODE"]); sbs.Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 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 (int.TryParse(dvIOC[i]["START_DEVICE_CODE"].ToString(), out a) == true) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("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 = "); sbs.Append(Convert.ToInt32(dvIOC[i]["START_DEVICE_CODE"])).Append(") "); obj = dbo.GetSingle(sbs.ToString()); 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 {//货位编码 //20111020 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["START_DEVICE_CODE"]) .Append("' and FWAREHOUSE='").Append(dvIOC[i]["START_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvl.Count > 0) { FSTARTDEVICE = Convert.ToInt32(dvl[0]["FLaneWay"]); if (dvl[0]["FUCODE"].ToString() != "0") { FSTARTCELL = dvl[0]["FUCONVEYOR"].ToString(); FSTARTUCODE = Convert.ToInt32(dvl[0]["FUCODE"]); } else { FSTARTCELL = dvIOC[i]["START_DEVICE_CODE"].ToString(); } } else { CObtainTaskError = string.Format("获取任务时:没找到调度任务索引:{0},的起点位置!", dvIOC[i]["CONTROL_ID"].ToString()); return "-"; } //20111020 } if (int.TryParse(dvIOC[i]["END_DEVICE_CODE"].ToString(), out a) == true) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("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 = ") .Append(Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])).Append(") "); obj = dbo.GetSingle(sbs.ToString()); 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 {//货位编码 //20111020 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='").Append(dvIOC[i]["END_DEVICE_CODE"]) .Append("' and FWAREHOUSE='").Append(dvIOC[i]["END_WAREHOUSE_CODE"]).Append("'"); dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dvl.Count > 0) { FENDDEVICE = Convert.ToInt32(dvl[0]["FLaneWay"]); if (dvl[0]["FUCODE"].ToString() != "0") { FENDCELL = dvl[0]["FUCONVEYOR"].ToString(); FENDUCODE = Convert.ToInt32(dvl[0]["FUCODE"]); } else { FENDCELL = dvIOC[i]["END_DEVICE_CODE"].ToString(); } } else { CObtainTaskError = string.Format("获取任务时:没找到调度任务索引:{0},的终点位置!", dvIOC[i]["CONTROL_ID"].ToString()); return "-"; } //20111020 } int FTASKLEVEL = 0;//空托盘组出库的优先级应该最大 FTASKLEVEL = dvIOC[i]["CONTROL_TASK_LEVEL"] == DBNull.Value ? 0 : Convert.ToInt32(dvIOC[i]["CONTROL_TASK_LEVEL"]); if (FENDDEVICE == 22052 || FENDDEVICE == 22066)//到拆盘及的任务20170103 { FTASKLEVEL = 100; } if (UseAwayFork == "0") { string[] lc = new string[2] { "0", "0" }; devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE); if (devinfo != null) { if (int.TryParse(FSTARTCELL.ToString(), out a) == true) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=").Append(FSTARTDEVICE) .Append(") and ( F_AGVGateDeviceIndex= ").Append(FSTARTCELL).Append(")"); obj = dbo.GetSingle(sbs.ToString()).ToString(); //20101124 if (obj != null) {//AGV站台的双叉属性 UseAwayFork = obj.ToString(); } } else { if (devinfo.DeviceKind == 2) { UseAwayFork = devinfo.DoubleFork; } } if (FEndCol > 0) { UseAwayFork = ccf.GetLimitXForkNo(FEndCol, FENDDEVICE); } } if (UseAwayFork == "0") { devinfo = Model.CGetInfo.GetDeviceInfo(FENDDEVICE); if (devinfo != null) { if (int.TryParse(FENDCELL.ToString(), out a) == true) { ////20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex=").Append(FENDDEVICE) .Append(") and ( F_AGVGateDeviceIndex= ").Append(FENDCELL).Append(")"); obj = dbo.GetSingle(sbs.ToString()).ToString(); //20101124 if (obj != null) { UseAwayFork = obj.ToString(); } } else { if (devinfo.DeviceKind == 2) { UseAwayFork = devinfo.DoubleFork; } } if (FStartCol > 0) { UseAwayFork = ccf.GetLimitXForkNo(FStartCol, FSTARTDEVICE); } } } } int FSTATUS = 0; #region 初始化LOGIC_AREA LOGIC_AREA = FENDDEVICE.ToString(); #endregion //20111020 //P工装板,B标准,G高货位,D大货位 object[] ob = new object[31] { dvIOC[i]["CONTROL_ID"], 1, dvIOC[i]["MANAGE_ID"], dvIOC[i]["RELATIVE_CONTROL_ID"], dvIOC[i]["STOCK_BARCODE"].ToString(), 1, dvIOC[i]["CONTROL_TASK_TYPE"],FTASKLEVEL,0,dvIOC[i]["START_WAREHOUSE_CODE"],FSTARTCELL,FSTARTDEVICE, dvIOC[i]["END_WAREHOUSE_CODE"] ,FENDCELL,FENDDEVICE,FSTATUS,Convert.ToDateTime(dvIOC[i]["CONTROL_BEGIN_TIME"]).ToString("yyyy-MM-dd HH:mm:ss"), dvIOC[i]["CONTROL_END_TIME"].ToString(),0,dvIOC[i]["CONTROL_REMARK"].ToString().Replace("'",""),flaneway,stackno,UseAwayFork,"", LOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE}; sbs.Remove(0, sbs.Length); sbs.AppendFormat(string.Format("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,FCONTORL_BATCH,FLOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE)VALUES ({0},{1},{2},{3},'{4}'," + "'{5}',{6},{7},{8},'{9}','{10}',{11},'{12}','{13}',{14},{15},'{16}','{17}','{18}','{19}',{20},{21},'{22}','{23}','{24}',{25},{26},{27},{28},{29},{30})", ob)); int rc = dbo.ExecuteSql(sbs.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("CObtainTask", "获取任务:", ",条码[" + dvIOC[i]["STOCK_BARCODE"].ToString() + "]", ",CONTROL_ID:" + dvIOC[i]["CONTROL_ID"].ToString()); ob = null; //20111020 if (rc == 0) return "-"; else { if (dvIOC[i]["CONTROL_STATUS"].ToString() != Model.CGeneralFunction.TASKSINGLEFORKRUN.ToString()) { sbs.Remove(0, sbs.Length); sbs.Append("update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKCONTROLREADED) .Append(" where CONTROL_ID=").Append(dvIOC[i]["CONTROL_ID"]); dboM.ExecuteSql(sbs.ToString()); } return UseAwayFork; } } catch (Exception ex) { CObtainTaskError = "ObtainDoubleForkTask," + ex.StackTrace + ex.Message; return "0"; } } private static int GetIOControlFromBarcode(StringBuilder stringBuilder) { DataView dv = new DataView(); try { dv = dboM.ExceSQL(string.Format("SELECT CONTROL_ID FROM IO_CONTROL WHERE (STOCK_BARCODE = '{0}')", stringBuilder)).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["CONTROL_ID"]); } else { return 0; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,通过条码查找任务GetIOControlFromBarcode:{0}", ex.StackTrace + ex.Message); return 0; } finally { dv.Dispose(); } } private static StringBuilder[] GetRelativeBarCodes(string startdevice, string BarCode) {//20140218 int binddev = 0; int.TryParse(startdevice.Substring(0, 5), out binddev); if (binddev == 0) return null; StringBuilder[] RelativeBarCodes; DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT F_FirstProject,F_BarcodeLength FROM T_Base_PLC_Ask WHERE F_BindingDevice ={1} and (F_FirstProject LIKE '%{0}%')", BarCode, binddev)).Tables[0].DefaultView; if (dv.Count > 0) { int bclength = Convert.ToInt32(dv[0]["F_BarcodeLength"]); int amount = Convert.ToInt32(dv[0]["F_FirstProject"].ToString().Length) / bclength; if (amount <= 1) return null; //RelativeBarCodes = new StringBuilder[amount - 1]; RelativeBarCodes = new StringBuilder[amount]; //for (int i = 0; i < (amount - 1); i++) for (int i = 0; i < (amount); i++) { RelativeBarCodes[i] = new StringBuilder(""); } int getAmount = 0; StringBuilder sb = new StringBuilder(); for (int i = 0; i < amount; i++) { sb.Clear(); //sb.Append(dv[0]["F_FirstProject"].ToString().Substring(i * bclength + i, bclength)); sb.Append(dv[0]["F_FirstProject"].ToString().Substring(i * bclength, bclength)); //if (sb.ToString() != BarCode) if (i < BarCode.Length) { RelativeBarCodes[getAmount].Append(sb); getAmount++; } } return RelativeBarCodes; } else { return null; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,GetRelativeBarCodes判断是否存在多叉入库关联任务的条码:{0}", ex.StackTrace + ex.Message); return null; } finally { dv.Dispose(); } } /// /// 是否存在同一逻辑区域且不同批号的出库任务没过分道扫描器 /// /// 批号 /// 逻辑区域 /// static bool IfSameAreaExitElseBatch(string Batch, string Area) { try { object ob = null; sbs.Remove(0, sbs.Length); sbs.Append("SELECT FID FROM T_Manage_Task WHERE FCONTROLTASKTYPE=2 and F_ManageTaskKindIndex=1 and FLOGIC_AREA ='").Append(Area).Append("'");// 20110331AND FCONTORL_BATCH <> '").Append(Batch).Append("' DataView dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { for (int i = 0; i < dv.Count; i++) { sbs.Remove(0, sbs.Length); sbs.Append("SELECT F_NumParam4 FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX = 1 AND F_ManageTaskIndex = ").Append(Convert.ToInt32(dv[i]["FID"]));//20110331 ob = dbo.ExecuteSql(sbs.ToString()); if (ob != null) { if (ob.ToString() == "12030") { return true; } } else { return true; } } return false; } else { return false; } } catch (Exception ex) { CObtainTaskError = string.Format("获取任务时,判断是否存在同一逻辑区域且不同批号的出库任务:{0}", ex.StackTrace + ex.Message); return false; } } static void ManageTaskComplete(int fid, int mti) { DataView dv = dbo.ExceSQL("SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " + ",F_NumParam2,F_NumParam5,F_TxtParam FROM T_Monitor_Task Where F_ManageTaskIndex=" + fid + " and F_ManageTaskKindIndex= " + mti).Tables[0].DefaultView; if (dv.Count > 0) { for (int i = 0; i < dv.Count; i++) { if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) { cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), 1); } else { cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH); } } } } static void IntegrativeNotifyDischarging(int fid, int DeviceIdx) {//一体化平台通知准备放行对应设备:DeviceIdx+“1” DataView dv = new DataView(); try { devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(DeviceIdx.ToString() + "1")); witemnames[0].Clear(); witemnames[0].Append("DB1." + devinfo.Dbw1Address.ToString()).Append(",b"); wv[0].Clear(); wv[0].Append("2"); sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(devinfo.DeviceIndex); if (sdo.WriteDBData(witemnames, wv, devinfo.S7Connection) == true) { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "一体化平台通知准备放行", DeviceIdx.ToString(), "CONTROL_ID:" + fid.ToString()); sbs.Remove(0, sbs.Length); sbs.Append("update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKFINISH) .Append(" where CONTROL_ID=").Append(fid); dboM.ExecuteSql(sbs.ToString()); } } catch (Exception ex) { RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", string.Format("获取任务IntegrativeNotifyDischarging时:{0}", ex.StackTrace + ex.Message)); OnRefreshMonitor(rme); return; } finally { dv.Dispose(); } } /// /// 指令完成、删除、重发 /// /// /// /// >状态值:2 设备清零、4 故障复位、900 手动任务删除、920 任务重发、999 任务完成 /// /// /// public static bool ModifyMonitorTask_LR(int DeviceIndex, int MonitortaskID, int ActionID, string text, out string Errtext) { //TODO:指令完成、删除、重发 int resetOrder = 4;//故障复位 DataView dv = new DataView(); DataView dv1 = new DataView(); DataView dv2 = new DataView(); DataView dv3 = new DataView(); try { string userDescription = text; int mankind = ccf.GetManageTaskKindIndexFromMonitor(MonitortaskID); int fid = ccf.GetManageTaskIndexfromMonitor(MonitortaskID); dv = dbo.ExceSQL("SELECT * FROM T_Monitor_Task Where F_MonitorIndex=" + MonitortaskID).Tables[0].DefaultView; if (dv.Count > 0) { if (ActionID == Model.CGeneralFunction.TASKFINISH) { #region 指令完成 CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工报告完成", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + MonitortaskID.ToString() + "," + userDescription); cgs.ActionComplete(DeviceIndex, MonitortaskID, Convert.ToInt32(dv[0]["F_Status"]), ActionID); //20111226有RGV的关联任务是接货定堆垛机货叉,不允许报告关联任务完成 #endregion } else if (ActionID == Model.CGeneralFunction.TASKDELETE) { #region 指令删除 CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工删除设备指令", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + MonitortaskID.ToString() + "," + userDescription); cgs.ActionComplete(Convert.ToInt32(dv[0]["F_DeviceIndex"]), Convert.ToInt32(dv[0]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); #endregion } else if (ActionID == Model.CGeneralFunction.TASKRESTORE) { #region 指令重发 int mindex = MonitortaskID; int DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); int devKind = ccf.GetDeviceKindIdx(DeviceIdx); string sss = "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + dv[0]["F_MonitorIndex"].ToString() + "," + userDescription; //20100108操作黑匣子增加托盘条码 CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工复位", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), sss); //检查关联命令一起复位 //如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务; dv1 = dbo.ExceSQL("select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" + mindex).Tables[0].DefaultView; if (dv1.Count > 0) { dv2 = dbo.ExceSQL("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" + Convert.ToInt32(dv1[0]["F_Associate"])).Tables[0].DefaultView; if (dv2.Count > 0)//有关联命令,先复位关联命令 { DeviceIdx = Convert.ToInt32(dv2[0]["F_DeviceIndex"]); SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv2[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv2[0]["F_MonitorIndex"])); } //再复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv[0]["F_MonitorIndex"])); } else { //自己是否被关联,先复位自己,再复位主任务 dv3 = dbo.ExceSQL("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" + mindex + "'").Tables[0].DefaultView; if (dv3.Count > 0) { //先复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex); //再复位主任务 DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]); SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv3[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv3[0]["F_MonitorIndex"])); } else { //无关联任务,只复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex); } } //给管理FERRORCODE清空 if (mankind == 1) { DBFactory.DBOperator dboMan = CStaticClass.dboM;//20130510 dboMan.ExceSQL("UPDATE IO_CONTROL SET ERROR_TEXT ='' WHERE CONTROL_ID=" + fid + ""); } dbo.ExceSQL("UPDATE T_Manage_Task SET FERRORCODE ='' WHERE FID=" + fid + " and F_ManageTaskKindIndex=" + mankind + ""); CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("TASKRESTORE", cea); #endregion } } Errtext = string.Empty; return true; } catch (Exception ex) { Errtext = ex.StackTrace + ex.Message; return false; } finally { dv.Dispose(); dv1.Dispose(); dv2.Dispose(); dv3.Dispose(); } } /// /// 发送设备置位清零 /// /// /// /// public static bool SendDeviceReset(out string errtext, int deviceIndex, int ResetOrder) { errtext = string.Empty; try { sdo = CommLayerFactory.CommModeCreate.CreateSendDeviceOrder(deviceIndex); int deviceKind = ccf.GetDeviceKindIdx(deviceIndex); //GetDeviceKindIndex(out errtext, deviceIndex); if ((deviceKind == 1) || (deviceKind == 6)) { sdo.SendDeviceOrder(ResetOrder, 0, 0, deviceIndex, 0, 0, 0, 0, 0, 0); } else { sdo.SendDeviceOrder(ResetOrder, 0, 0, deviceIndex, 0); } //_device = Model.CGetInfo.GetDeviceInfo(deviceIndex); //_device.SendMessage = null; //Model.CGetInfo.SetDeviceInfo(_device); Thread.Sleep(500);//20131121richard return true; } catch (Exception ex) { errtext = ex.StackTrace + ex.Message; return false; } } } }