衢州华友成品库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1981 lines
112 KiB

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using System.Threading;
using Microsoft.VisualBasic;
using CommonLib;
using ICommLayer;
namespace WcfControlMonitorLib
{
/// <summary>
/// Creator:Richard.liu
/// 获取调度任务
/// </summary>
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 Model.MDevice devinfo;
static StringBuilder sbs = new StringBuilder();
static StringBuilder temp = new StringBuilder();
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;
static DBOperator dboM = CStaticClass.dboM;
/// <summary>
/// 获得调度任务
/// </summary>
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 dvmm = 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 ('0'");
#endregion
try
{
int RecCount = 0;
//先把每个巷道的最大最小货位获取到
//dvmm = dbo.ExceSQL(string.Format(" select F_LaneDeviceIndex, F_MaxCell, F_MinCell from T_Base_LaneInfo ")).Tables[0].DefaultView;
//Dictionary<string, string[]> maxmincells = new Dictionary<string, string[]>();
//for (int i = 0; i < dvmm.Count; i++)
//{
// string laneIndex = (dvmm[i]["F_LaneDeviceIndex"].ToString());
// string[] scell = new string[2];
// scell[1] = dvmm[i]["F_MaxCell"].ToString();
// scell[0] = dvmm[i]["F_MinCell"].ToString();
// maxmincells.Add(laneIndex, scell);
//}
// 大胆猜测:这部分是受流量限制的出库任务获取,优先级高一点(相对于入库、移库、倒库任务)
#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 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 到此终点的任务按照巷道等待执行和执行中任务数由小到大依次出叉数量的任务
// SQL 从 T_Base_Route 找到该终点的起点
// aaa 是每个起点在 T_Manage_Task + T_Monitor_Task(仅计算出库任务) 中的任务数量之和(等待执行和执行中),升序
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} order by aaa asc", Convert.ToInt32(dvc[i]["F_DeviceIndex"]))).Tables[0].DefaultView;
for (int xd = 0; xd < dvnew.Count; xd++)
{
if (xd == 11)
{ }
int forkcount = 1;
int freach = 1;
//obj = dbo.GetSingle(string.Format("SELECT F_ForkAmount from T_Base_StackInfo where F_LaneNo like '%{0}%'", dvnew[xd]["F_StartDevice"]));
dvmi = dbo.ExceSQL(string.Format("SELECT F_ForkAmount,F_Reach from T_Base_StackInfo where F_LaneNo like '%{0}%'", dvnew[xd]["F_StartDevice"])).Tables[0].DefaultView;
if (dvmi.Count > 0)
{
forkcount = Convert.ToInt32(dvmi[0]["F_ForkAmount"]);
freach = Convert.ToInt32(dvmi[0]["F_Reach"]);
}
#region SQL 从 IO_CONTROL 中找到此终点的等待任务,挑选货叉数量个任务
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,START_DEVICE_CODE,START_WAREHOUSE_CODE from IO_CONTROL where 1=1 ");
}
sbs.Append(" and CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKWAIT.ToString());
//sbs.Append(" and START_DEVICE_CODE>='").Append(startcell).Append("' ");//会影响4类型的任务,导致无法获取20181003
//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 ");
#endregion
dvIOC = dboM.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
for (int inew = 0; inew < dvIOC.Count; inew++)
{ ////
int controlid=Convert.ToInt32( dvIOC[inew]["CONTROL_ID"]);
string startdevicecell = Convert.ToString(dvIOC[inew]["START_DEVICE_CODE"]);
string startwarehouse = Convert.ToString(dvIOC[inew]["START_WAREHOUSE_CODE"]);
if (freach==2)
{
//controlid= //查找是否有如果是1,4排的任务,是否有2,3排的任务没被获取,优先获得2,3排
controlid = GetReachIfHaveMutexTaskFromIOControl(controlid, startdevicecell, startwarehouse);//20181028
}
ObtainDoubleForkTask(controlid, "0");
}
leftTask = leftTask - dvIOC.Count;
if (leftTask <= 0) break;
}
#endregion
}
}
notin.Append(")");
notin.Append(" or CONTROL_TASK_TYPE=4)");
#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
// 大胆猜测:这段SQL 是从 IO_CONTROL 中获取终点不是出库站台的任务(入库、移库、倒库),或站台间倒库任务
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_TASK_TYPE=4 and CONTROL_STATUS=").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(notin);//20151120
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++)
{
//任务暂停和恢复
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判断是否是嘉兴一楼三个条码一起配叉任务,三个任务都存在时一起获取
int[] relFID = null;
if (dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "1")
{
//GetRelativeBarcodes() 是找到 T_Base_PLC_Ask 中 F_FirstProject 中所有的条码,F_FirstProject 是机器人码垛条码合集
StringBuilder[] relBarcodes= GetRelativeBarCodes(dvIOC[i]["START_DEVICE_CODE"].ToString(), dvIOC[i]["STOCK_BARCODE"].ToString());
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
#region 20120906判断是否是嘉兴一楼三个条码一起配叉任务,三个任务都存在时一起获取
//int[] relFID = null;
//if (dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "1")
//{
// StringBuilder[] relBarcodes = GetRelativeBarCodes(dvIOC[i]["START_DEVICE_CODE"].ToString(), dvIOC[i]["STOCK_BARCODE"].ToString());
// 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
{
string startdevice = dvIOC[i]["START_DEVICE_CODE"].ToString();
if (startdevice.Length>5)
{
startdevice= dvIOC[i]["START_DEVICE_CODE"].ToString().Substring(0, 5);
}
if ("12055,12054,12053,12052".IndexOf(startdevice) >= 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 修改路径的答复
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;
}
}
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<int> 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<int> 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<int> 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<int> 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<int> priorrgv = CDisassembleTask.GetPriorDevice(routeID, consn);
int rgvdev = priorrgv[0];
int rgvsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, rgvdev);
List<int> 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
}
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();
dvmm.Dispose();
obj = null;
}
}
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)
{
if (dv[0]["START_DEVICE_CODE"].ToString().Trim().Length > 5)
{
return dv[0]["START_DEVICE_CODE"].ToString().Trim().Substring(5, 1);
}
else
{
return "0";
}
}
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());
}
}
/// <summary>
/// 20091005
/// 获取可用的目标位置:入库的巷道或者出库站台
/// </summary>
/// <param name="dr">T_Manage_Task表的行记录</param>
/// <returns></returns>
public static void GetUsableDestination(DataRowView dr)
{
//20100610查找一个路径可用,任务数最少的终点设备
Dictionary<int, int> advDev = new Dictionary<int, int>();
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
DataView dv = new DataView();
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' ");
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;
}finally
{
dv.Dispose();
}
}
/// <summary>
/// 20101028获取关联任务,同时返回主任务的应该分配的货叉:距离控制柜由近及远货叉序号依次1,2,3,4;'-'代表未分配货叉
/// </summary>
/// <param name="RelativeControlID">关联任务FID</param>
/// <param name="UseAwayFork">是否使用远货叉,默认值"-"</param>
/// <returns></returns>
static string ObtainDoubleForkTask(object RelativeControlID,string UseAwayFork)
{
int i = 0;
DataView dvl = new DataView(); ;
DataView dvIOC = new DataView();
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);
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);
//hwhx 改动
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 = 2) and (F_AGVGateDeviceIndex = ")
.Append(Convert.ToInt32(dvIOC[i]["END_DEVICE_CODE"])).Append(") ");//and F_EndTag = 70
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;//空托盘组出库的优先级应该最大
string level = Convert.ToString(dvIOC[i]["CONTROL_TASK_LEVEL"]);
if (level!="")
{
FTASKLEVEL = Convert.ToInt32(level);
}
#region HWHX 吨包入库站台,入库和回退时分别对AGV的处理
//if (FSTARTDEVICE != 0 )
//{
// sbs.Clear();
// sbs.Append("select F_StartTag, F_EndTag from T_Base_AGV_Gate where F_AGVGateDeviceIndex='");
// sbs.Append(FSTARTDEVICE).Append("'");
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count > 0)
// {
// if (Convert.ToInt32(dvl[0]["F_EndTag"]) > 0 && Convert.ToInt32(dvl[0]["F_EndTag"]) < 10 ) //吨包入库站台
// {
// sbs.Clear();
// sbs.Append("select F_StartTag, F_EndTag from T_Base_AGV_Gate where F_AGVGateDeviceIndex='");
// sbs.Append(FENDDEVICE).Append("'");
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count > 0) //终点为agv站台
// {//吨包入库回退,将此站台等待的AGV等待任务删除之前,添加AGV取货、送货任务,相同的fid
// sbs.Remove(0, sbs.Length);
// sbs.Append("select * from T_Monitor_Task ")
// .Append(" where F_NumParam2 = F_NumParam5 and F_NumParam2 <> 0" +
// " and F_ManageTaskKindIndex = 2 and F_DeviceCommandIndex = 8")
// .Append(" and F_NumParam2 =").Append(FSTARTDEVICE);
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count > 0)
// {
// int fid = Convert.ToInt32(dvl[0]["F_ManageTaskIndex"]);
// int mankind = Convert.ToInt32(dvl[0]["F_ManageTASKKINDINDEX"]);
// int tasklevel = Convert.ToInt32(dvl[0]["F_MonitorTaskLevel"]);
// int station = FSTARTDEVICE;
// int keydevice = 0;
// int enddevice = 0;
// int routeidsub = 0;
// int hismonitorindex = Convert.ToInt32(dvl[0]["F_MonitorIndex"]);
// int[] Coor = new int[6];
// Coor[0] = 0; Coor[1] = 0; Coor[2] = 0; Coor[3] = 0; Coor[4] = 0; Coor[5] = 0;
// sbs.Clear();
// sbs.Append("select * from T_Base_Stackinfo where F_LaneNo = (select F_ChannelsIndex from T_Base_AGV_Gate where F_AGVGateDeviceIndex = '").Append(station).Append("')");
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count > 0)
// {
// keydevice = Convert.ToInt32(dvl[0]["F_StackIndex"]);
// enddevice = Convert.ToInt32(dvl[0]["F_AbendOut"]);
// Coor[1] = station; Coor[4] = enddevice;
// }
// sbs.Clear();
// sbs.Append(" select distinct F_RouteIDSub from T_Base_Route_Device where F_RouteID = ( select F_RouteID from T_Base_Route where F_StartDevice = '").Append(station).Append("' and F_EndDevice = '").Append(enddevice).Append("')");
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count > 0)
// {
// routeidsub = Convert.ToInt32(dvl[0]["F_RouteIDSub"]);
// }
// sbs.Clear();
// sbs.Append("select F_EndTag from T_Base_AGV_Gate where F_EndTag > 0 and F_AGVGateDeviceIndex=");
// sbs.Append(station);
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count > 0)
// {
// #region AGV取货
// int agvorder = 2; //取货
// StringBuilder RunningLock = new StringBuilder();
// RunningLock.Remove(0, RunningLock.Length);
// StringBuilder AheadDetect = new StringBuilder();
// AheadDetect.Remove(0, AheadDetect.Length);
// AheadDetect.Append(";D-").Append(station).Append(".0");
// AheadDetect.Append(";I").Append(station);
// sbs.Clear();
// sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(fid).Append(")").Append(
// " AND (F_ManageTASKKINDINDEX = ").Append(mankind).Append(") AND (F_DeviceIndex = ").Append(station).Append(")").Append(
// " AND (F_DeviceCommandIndex = ").Append(agvorder).Append(")");
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count == 0)
// {
// int mindex = ccf.GetMonitorIndex();
// mindex = ccf.GetMonitorIndex();//20110104
// mindex = ccf.GetMonitorIndex();//20110104
// sbs.Remove(0, sbs.Length);
// sbs.Append("INSERT INTO T_Monitor_Task ").Append(
// "(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append(
// " F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam2,").Append(
// " F_NumParam3, F_NumParam4,F_NumParam5, F_NumParam6,F_AheadDetect,F_RunningLock,F_TxtParam,F_UseAwayFork)").Append(
// "VALUES (").Append(fid).Append(",").Append(mankind).Append(",").Append(mindex).Append(",").Append(tasklevel
// ).Append(",").Append(keydevice).Append(",").Append(agvorder).Append(",").Append(routeidsub).Append(",").Append(0).Append(",").Append(Coor[0]).Append(",").Append(Coor[1]
// ).Append(",").Append(Coor[2]).Append(",").Append(Coor[3]).Append(",").Append(Coor[4]).Append(",").Append(Coor[5]).Append(",'")
// .Append(AheadDetect.ToString()).Append("','").Append(RunningLock.ToString()).Append("','").Append("-").Append("','").Append(0).Append("')");
// dbo.ExceSQL(sbs.ToString());
// }
// #endregion
// #region 送货
// agvorder = 3; //送货
// RunningLock.Remove(0, RunningLock.Length);
// AheadDetect.Remove(0, AheadDetect.Length);
// sbs.Clear();
// sbs.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(fid).Append(")").Append(
// " AND (F_ManageTASKKINDINDEX = ").Append(mankind).Append(") AND (F_DeviceIndex = ").Append(station).Append(")").Append(
// " AND (F_DeviceCommandIndex = ").Append(agvorder).Append(")");
// dvl = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView;
// if (dvl.Count == 0)
// {
// int mindex = ccf.GetMonitorIndex();
// mindex = ccf.GetMonitorIndex();//20110104
// mindex = ccf.GetMonitorIndex();//20110104
// sbs.Remove(0, sbs.Length);
// sbs.Append("INSERT INTO T_Monitor_Task ").Append(
// "(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append(
// " F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam2,").Append(
// " F_NumParam3, F_NumParam4,F_NumParam5, F_NumParam6,F_AheadDetect,F_RunningLock,F_TxtParam,F_UseAwayFork)").Append(
// "VALUES (").Append(fid).Append(",").Append(mankind).Append(",").Append(mindex).Append(",").Append(tasklevel
// ).Append(",").Append(keydevice).Append(",").Append(agvorder).Append(",").Append(routeidsub).Append(",").Append(0).Append(",").Append(Coor[0]).Append(",").Append(Coor[1]
// ).Append(",").Append(Coor[2]).Append(",").Append(Coor[3]).Append(",").Append(Coor[4]).Append(",").Append(Coor[5]).Append(",'")
// .Append(AheadDetect.ToString()).Append("','").Append(RunningLock.ToString()).Append("','").Append("-").Append("','").Append(0).Append("')");
// dbo.ExceSQL(sbs.ToString());
// }
// #endregion
// #region 删除原地等待
// dbo.ExceSQL("delete from T_Monitor_Task where F_MonitorIndex = " + hismonitorindex );
// #endregion
// }
// }
// }
// else //终点不是agv站台,可能是南侧出库口,或者巷道
// {//吨包正常入库,将此站台等待的AGV等待任务的提前检测删除
// //考虑到不使用AGV时,人工用叉车将吨包放上,下面的sql也无影响
// sbs.Remove(0, sbs.Length);
// sbs.Append("update T_Monitor_Task set F_AheadDetect=''")
// .Append(" where F_NumParam2 = F_NumParam5 and F_NumParam2 <> 0" +
// " and F_ManageTaskKindIndex = 2 and F_DeviceCommandIndex = 8")
// .Append(" and F_NumParam2 =").Append(FSTARTDEVICE);
// dbo.ExecuteSql(sbs.ToString());
// }
// }
// }
//}
#endregion
//if (FSTARTDEVICE == 12002)//中间入库口的优先级最高20181030
//{
// FTASKLEVEL = 10;
//}
//if (dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "3")//
//{
// FTASKLEVEL = 2;
//}
//if (dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "2")//20170923 出库任务有相同的逻辑区域
//{
// FTASKLEVEL = 1;
//}
//if (FSTARTDEVICE ==12002|| (FSTARTDEVICE >= 15001 && FSTARTDEVICE <= 15009))//所有的变位机任务优先级最高
//{
// 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();
//if (dvIOC[i]["CONTROL_TASK_TYPE"].ToString() == "2")//20170923 出库任务有相同的逻辑区域
//{
// LOGIC_AREA = "12009";
//}
#endregion
string BarCode = dvIOC[i]["STOCK_BARCODE"].ToString().ToUpper();//大写
int PalletType = 0;//托盘类型
if(BarCode.IndexOf("3")==0)//1开始为miniload,3开始为 小托盘,5开始为大托盘
{
PalletType = 1;
}
if (BarCode.IndexOf("5") == 0)
{
PalletType = 2;
}
#region HWHX control_remark字段是货物类型,不能为空,为空就写4
string remark = "";
if (dvIOC[i]["CONTROL_REMARK"].ToString() == "")
{
//remark = dvIOC[i]["CONTROL_REMARK"].ToString().Replace("'","")
remark = "4";
}
else
{
remark = dvIOC[i]["CONTROL_REMARK"].ToString();
}
#endregion
//20111020
//P工装板,B标准,G高货位,D大货位
object[] ob = new object[32] { 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,remark,flaneway,stackno,UseAwayFork,"",
LOGIC_AREA,FStartCol,FStartLayer,FEndCol,FEndLayer,FSTARTUCODE,FENDUCODE,PalletType};//20171224 CELL_GROUP 1:需要校验RFID,0:不需要,默认1
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,GOODS_NUM)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},{31})", 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";
}
finally
{
dvl.Dispose();
dvIOC.Dispose();
cc = null;
}
}
// 大胆猜测:获取双伸货位的出库任务前,如果是里货位,判读是否有外货位的取货任务
private static int GetReachIfHaveMutexTaskFromIOControl(int Fid, string startdevicecell,string startwarehouse)
{
DataView dv = new DataView();
int neighfid = Fid;
try
{
string [] zxy = startdevicecell.Split('-');//获得任务坐标
if (zxy.Length>2)
{
int getZ =Convert.ToInt32( zxy[0]);//取货的排坐标
int newZ;
int tempZ = getZ;
if (tempZ > 4)
{
tempZ = getZ % 4;
}
if (tempZ == 1 || tempZ == 4)//里位取货时,要判读是否有外位的取货任务
{//获取外位坐标
if (tempZ == 1)
{
newZ = getZ + 1;
}
else
{
newZ = getZ - 1;
}
string neighborzxy = string.Format("{0:D2}-{1:D2}-{2:D2}", newZ, zxy[1], zxy[2]);//获得外位坐标
dv = dboM.ExceSQL(string.Format("SELECT CONTROL_ID FROM IO_CONTROL WHERE CONTROL_STATUS=0 and (START_DEVICE_CODE = '{0}') and START_WAREHOUSE_CODE = '{1}' ", neighborzxy, startwarehouse)).Tables[0].DefaultView;
if (dv.Count > 0)
{
neighfid = Convert.ToInt32(dv[0]["CONTROL_ID"]);
}
}
}
return neighfid;
}
catch (Exception ex)
{
CObtainTaskError = string.Format("获取任务时,GetReachIfHaveMutexTaskFromIOControl:{0}", ex.StackTrace + ex.Message);
return 0;
}
finally
{
dv.Dispose();
}
}
//查找IO_CONTROL中的条码
private static int GetIOControlFromBarcode(string 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();
}
}
//查找IO_CONTROL中的条码
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 =Convert.ToInt32( startdevice);
if (startdevice.Length > 5)
{
int.TryParse(startdevice.Substring(0,5).Substring(0,5), out binddev);
}
if (binddev == 0) return null;
StringBuilder[] RelativeBarCodes ;
DataView dv = new DataView();
try
{//F_FirstProject应该不为空
dv = dbo.ExceSQL(string.Format("SELECT F_FirstProject,F_BarcodeLength FROM T_Base_PLC_Ask WHERE F_BindingDevice ={1} and(F_FirstProject is not null) and (F_FirstProject LIKE '%{0}%')", BarCode, binddev)).Tables[0].DefaultView;
if (dv.Count > 0)
{
int bclength=Convert.ToInt32(dv[0]["F_BarcodeLength"]);
if (bclength > 0)//20170722要判断长度啊
{
int amount = Convert.ToInt32(dv[0]["F_FirstProject"].ToString().Length) / bclength;
if (amount <= 1) return null;
RelativeBarCodes = new StringBuilder[amount - 1];
for (int i = 0; i < (amount - 1); 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));
if (sb.ToString() != BarCode)
{
RelativeBarCodes[getAmount].Append(sb);
getAmount++;
}
}
return RelativeBarCodes;
}
else
{
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
CObtainTaskError = string.Format("获取任务时,GetRelativeBarCodes判断是否存在多叉入库关联任务的条码:{0}", ex.StackTrace+ex.Message );
return null;
}
finally
{
dv.Dispose();
//RelativeBarCodes = null;
}
}
private static string[] GetRelativeBarCodesHavingSplit(string startdevice, string BarCode)
{//20140218
int binddev = 0;
int.TryParse(startdevice.Substring(0, 5), out binddev);
if (binddev == 0) return null;
DataView dv = new DataView();
char[] splitflag = new char[1] { ';' };//分隔符
string recordbarcode = string.Empty;
string[] RelativeBarCodes;
try
{//F_FirstProject应该不为空
dv = dbo.ExceSQL(string.Format("SELECT F_BarCode,F_BarcodeLength FROM T_Base_PLC_Ask WHERE F_BindingDevice ={1} and(F_BarCode is not null) and (F_BarCode LIKE '%{0}%')", BarCode, binddev)).Tables[0].DefaultView;
if (dv.Count > 0)
{
recordbarcode = Convert.ToString(dv[0]["F_BarCode"]);
RelativeBarCodes = recordbarcode.Split(splitflag,StringSplitOptions.RemoveEmptyEntries);//去掉空字符
return RelativeBarCodes;
}
else
{
return null;
}
}
catch (Exception ex)
{
CObtainTaskError = string.Format("获取任务时,GetRelativeBarCodes判断是否存在多叉入库关联任务的条码:{0}", ex.StackTrace + ex.Message);
return null;
}
finally
{
dv.Dispose();
splitflag = null;
}
}
//Manage任务完成
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);
}
}
}
}
}
}