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.
2650 lines
106 KiB
2650 lines
106 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Data;
|
|
using DBFactory;
|
|
namespace Model
|
|
{
|
|
public static class CGeneralFunction
|
|
{
|
|
static StringBuilder sql = new StringBuilder();
|
|
static DBOperator dbo = CGetInfo.dbo;
|
|
static DBOperator dboM = CGetInfo.dboM;
|
|
//add for CATL YB5
|
|
static DBOperator dboM1 = CGetInfo.dboM1;
|
|
static Model.MDevice devinfo;
|
|
/// <summary>
|
|
/// 20120616多叉关联任务是否能和monitorIndex同步运行;返回多叉关联任务的设备指令索引数组(多个任务号,包括自己),如果只返回自己(数组只有自己一个任务号)代表关联任务还没有拆分完毕,等待
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns>多叉关联任务的设备指令索引数组,如果返回自己代表关联任务还没有拆分完毕,等待</returns>
|
|
/// qdsr GGGGGGGGGGGGGGGGGGGGGGGGG
|
|
public static int[] MutiForkIfSync(int monitorIndex, int devIndex, int devKind)
|
|
{//查找关联的调度任务(主任务或者辅助任务);输送机与堆垛机区别对待
|
|
//如果只能找到关联任务未被拆分,那么认为能同步运行20100323
|
|
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
int FID = GetManageTaskIndexfromMonitor(monitorIndex);
|
|
int devOrder = GetDeviceOrderFromMonitor(monitorIndex);
|
|
Dictionary<int, int[]> mutiTaskZxyForkNo = GetMutiForkTaskZxyForkNo(mankind, FID, devIndex, devOrder);
|
|
if (mutiTaskZxyForkNo == null) return null;
|
|
int[] monitortask;
|
|
List<int> mt = new List<int>();
|
|
if (GetMutiForkUnIntoStep(monitorIndex) == true)
|
|
{//此项只在提前检测时使用
|
|
monitortask = new int[1] { monitorIndex };
|
|
return monitortask;
|
|
}
|
|
int[] zxy, zxy1;
|
|
switch (devKind)
|
|
{
|
|
case 1:
|
|
//堆垛机的同排,同层,临列可以同步并且ST_CELL的FDoubleFork值匹配
|
|
|
|
zxy = mutiTaskZxyForkNo[monitorIndex];
|
|
foreach (int mtask1 in mutiTaskZxyForkNo.Keys)
|
|
{
|
|
zxy1 = mutiTaskZxyForkNo[mtask1];
|
|
if (monitorIndex != mtask1)
|
|
{
|
|
if ((zxy[0] == zxy1[0]) && (zxy[2] == zxy1[2]) && ((zxy[1] - zxy1[1]) == (zxy[3] - zxy1[3])))
|
|
{//同排、层,货叉序号差值==列差值,同步出叉
|
|
if (mt.Contains(monitorIndex) == false)
|
|
{
|
|
mt.Add(monitorIndex);
|
|
}
|
|
if (mt.Contains(mtask1) == false)
|
|
{
|
|
mt.Add(mtask1);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
//TJBS按垛机处理的双叉穿梭车无同步执行
|
|
//if (mt.Count > 0)
|
|
//{
|
|
// monitortask = mt.ToArray();
|
|
// return monitortask;
|
|
//}
|
|
//else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
case 2:
|
|
//输送机同步
|
|
foreach (int mtask in mutiTaskZxyForkNo.Keys)
|
|
{
|
|
if (mt.Contains(mtask) == false)
|
|
{
|
|
mt.Add(mtask);
|
|
}
|
|
}
|
|
if (mt.Count >= 1)
|
|
{
|
|
monitortask = mt.ToArray();
|
|
return monitortask;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
case 6:
|
|
if (EqualAGVGateDoubleFork(mankind, FID, devIndex, devOrder) == true)
|
|
{
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
return null;
|
|
}
|
|
|
|
}
|
|
// add for CATL YB2 获取关联任务的关联任务号的下小任务号 未写完 考虑单叉情况
|
|
public static int[] DoubleMinMonitorIndex(int relaviveControlId)
|
|
{
|
|
DataView dv = new DataView();
|
|
int[] dt = new int[4];
|
|
List<int> mt = new List<int>();
|
|
try
|
|
{
|
|
// 任务号为1叉的分给数组 0 下标 ,2叉的分给数组1下标
|
|
// List<int> dt = new List<int>();
|
|
|
|
// 查出关联任务号是不是两个 未使用排序语句 减少磁盘排序 快速释放表 除了select 其他的语句都锁表,但是select占用迭代内存 会让插入和更新
|
|
// 语句锁表释放时间加长
|
|
dv = dbo.ExceSQL(string.Format("SELECT FID,FUSEAWAYFORK FROM T_Manage_Task where F_RELATIVECONTORLID='{0}' and F_RELATIVECONTORLID <> -1 ", relaviveControlId)).Tables[0].DefaultView;
|
|
if (dv.Count > 0 )
|
|
{
|
|
// 任务号 货叉号 任务号 货叉号
|
|
//int reltask = 0;
|
|
if (dv.Count == 2)
|
|
{
|
|
dt[0] = Convert.ToInt32(dv[0]["FID"]);
|
|
dt[1] = Convert.ToInt32(dv[0]["FUSEAWAYFORK"]);
|
|
dt[2] = Convert.ToInt32(dv[1]["FID"]);
|
|
dt[3] = Convert.ToInt32(dv[1]["FUSEAWAYFORK"]);
|
|
}
|
|
else
|
|
{
|
|
dt[0] = Convert.ToInt32(dv[0]["FID"]);
|
|
dt[1] = Convert.ToInt32(dv[0]["FUSEAWAYFORK"]);
|
|
dt[2] = 0;
|
|
dt[3] = 0;
|
|
}
|
|
return dt;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
throw ex;
|
|
}finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
//没用
|
|
public static string GetArrowDeviceIndexFromLaneGate(string cell, out int LaneGateDeviceIndex)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
LaneGateDeviceIndex = 0;
|
|
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_LaneGateDeviceIndex,F_ArrowDevice FROM T_Base_Lane_Gate where F_ZXY='{0}' ", cell)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
LaneGateDeviceIndex = Convert.ToInt32(dv[0]["F_LaneGateDeviceIndex"]);
|
|
return Convert.ToString(dv[0]["F_ArrowDevice"]);
|
|
|
|
}
|
|
else
|
|
{
|
|
LaneGateDeviceIndex = 0;
|
|
return "";//别返回-1,这个- liKe货位里面的-
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
public static bool GetIfFirstMonitorTask(int taskindex,int fid,int taskkind)//20190424
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
string sqlin =string.Format( "SELECT F_MonitorIndex FROM T_Monitor_Task where F_ManageTaskIndex ={0} and F_ManageTASKKINDINDEX={1} and F_MonitorIndex <{2} ",fid,taskkind,taskindex);
|
|
|
|
|
|
|
|
dv = dbo.ExceSQL(sqlin).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
|
|
return false ;//不是第一指令
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
return true;//
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
// add for CATL YB2 获取送货终点
|
|
public static string GetArrowDeviceIndexFromT_Monitor_Task(int FID , int mankind,int DeviceIndex ,int order)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
|
|
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_NumParam4 FROM T_Monitor_Task where F_ManageTaskIndex={0} and F_ManageTASKKINDINDEX={1} and F_DeviceIndex={2} and F_DeviceCommandIndex={3} ", FID, mankind, DeviceIndex, order)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToString(dv[0]["F_NumParam4"]);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
return "";//
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 获得双叉控制的堆垛机的送货任务(已经分配远货叉或者近货叉的任务)的值
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
public static string GetUseAwayFork(int monitorIndex)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_UseAwayFork FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(monitorIndex ).Append(")");
|
|
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return dv[0][0].ToString();
|
|
}
|
|
else
|
|
{
|
|
return "-";
|
|
}
|
|
}
|
|
// add for CATL YB2 从manage表获取货叉
|
|
public static int GetUseAwayForkFromManagetask(int fid)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FUSEAWAYFORK FROM T_MANAGE_TASK WHERE (FID = ").Append(fid).Append(")");
|
|
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取双叉控制的堆垛机的取货任务(尚未指定应该使用哪个货叉)是否使用远货叉(主货叉):0,近货叉;1远货叉
|
|
/// 分配货叉kkkkkkkkkkkkkkkkk qdsr 青岛思锐
|
|
/// </summary>
|
|
/// <param name="z">排</param>
|
|
/// <param name="x">列</param>
|
|
/// <param name="y">层</param>
|
|
/// <param name="FWAREHOUSE">库房索引</param>
|
|
/// <param name="Mankind">任务类型</param>
|
|
/// <param name="ManFID">调度任务索引</param>
|
|
/// <param name="devIndex">设备索引</param>
|
|
/// <param name="devOrder">指令</param>
|
|
/// <returns></returns>
|
|
public static int GetUseAwayFork(int monitorIndex,int devIndex, int devOrder)
|
|
{
|
|
#region 注释 qdsr
|
|
//int z = GetZCoorFromMonitor(monitorIndex, devIndex, devOrder);
|
|
//int x = GetXCoorFromMonitor(monitorIndex, devIndex, devOrder);
|
|
//int y = GetYCoorFromMonitor(monitorIndex, devIndex, devOrder);
|
|
|
|
//string FWAREHOUSE=GetWAREHOUSEFromSTCELL(devIndex);
|
|
//int Mankind=GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
//int ManFID=GetManageTaskIndexfromMonitor(monitorIndex);
|
|
//int fid1 = 0; int fid2 = 0;
|
|
//DataView dv = new DataView(); DataView sr = new DataView();
|
|
//int UseAwayFork = 1;
|
|
//try
|
|
//{
|
|
// sql.Remove(0, sql.Length);
|
|
// //查询子自己的关联任务ID 和 自己的控制任务类型 判断是不是出库任务 出库任务按任务号小的分配2叉 任务号大的分配1叉
|
|
// sql.Append("SELECT F_RELATIVECONTORLID,FCONTROLTASKTYPE FROM T_Manage_Task WHERE ( FCONTROLTASKTYPE = 2 or FCONTROLTASKTYPE = 3 ) and F_ManageTaskKindIndex = 1 and FID = ").Append( ManFID );
|
|
// dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
// //判断当前任务是不是出库任务
|
|
// if (dv.Count > 0)
|
|
// {
|
|
// #region 青岛思锐根据任务号大小分配货叉
|
|
// //关联任务ID相等的 FID 升序排列 关联任务ID查出来的两个FID 这个关联ID是F_relativeControlID
|
|
// sql.Remove(0,sql.Length);
|
|
// sql.Append("SELECT FID FROM T_Manage_Task WHERE F_RELATIVECONTORLID = ").Append(Convert.ToInt32(dv[0][0])).Append("order by FID asc");
|
|
// sr = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
// //F_GOODMatchID 获取表中的两个值
|
|
// fid1 = Convert.ToInt32(sr[0]["FID"]);
|
|
// fid2 = Convert.ToInt32(sr[1]["FID"]);
|
|
// if (fid1 < fid2)
|
|
// {
|
|
// if (fid1 == ManFID)
|
|
// {
|
|
// UseAwayFork = 2;
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 1;
|
|
// }
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// if (fid2 == ManFID)
|
|
// {
|
|
// UseAwayFork = 2;
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 1;
|
|
// }
|
|
// }
|
|
// switch (UseAwayFork)
|
|
// {
|
|
// case 1://近叉
|
|
// UseAwayFork = 1;
|
|
// break;
|
|
// case 2://远叉
|
|
// UseAwayFork = 2;
|
|
// break;
|
|
// }
|
|
// return UseAwayFork;
|
|
// #endregion
|
|
// }
|
|
// else
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("SELECT FDoubleFork FROM ST_CELL WHERE (FWAREHOUSE='" ).Append( FWAREHOUSE
|
|
// ).Append( "') and (F_Z = " ).Append( z ).Append( ") AND (F_X = " ).Append( x ).Append( ") AND (F_Y = " ).Append( y ).Append( ")");
|
|
// dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
// if (dv.Count > 0)
|
|
// {
|
|
// UseAwayFork = Convert.ToInt32(dv[0][0]);
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 0;
|
|
// }
|
|
// #region 根据货位分配货叉
|
|
// switch (UseAwayFork)
|
|
// {
|
|
// case 0://可用任何一个货叉:
|
|
// int xcoor = GetDoubleForkX(Mankind, ManFID, devIndex, devOrder);
|
|
// if (xcoor != -1)
|
|
// {
|
|
// //根据关联任务的货位判断使用近货叉(列坐标小)或者远货叉(列坐标大)
|
|
// if (xcoor != x)
|
|
// {
|
|
// if (xcoor < x)
|
|
// {
|
|
// UseAwayFork = 1;
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 0;
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// //列坐标相同的,判断层坐标,近货叉(层坐标小)或者远货叉(层坐标大)
|
|
// int ycoor = GetDoubleForkY(Mankind, ManFID, devIndex, devOrder);
|
|
// if (ycoor != -1)
|
|
// {
|
|
// if (ycoor != y)
|
|
// {
|
|
// if (ycoor < y)
|
|
// {
|
|
// UseAwayFork = 1;
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 0;
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// //列和层都相同的,判断排坐标,近货叉(排坐标小)或者远货叉(排坐标大)
|
|
// int zcoor = GetDoubleForkZ(Mankind, ManFID, devIndex, devOrder);
|
|
// if (zcoor != -1)
|
|
// {
|
|
// if (zcoor != z)
|
|
// {
|
|
// if (zcoor < z)
|
|
// {
|
|
// UseAwayFork = 1;
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 0;
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// UseAwayFork = 1;
|
|
// }
|
|
// break;
|
|
// case 1://只能用近叉
|
|
// UseAwayFork = 1;
|
|
// break;
|
|
// case 2://只能用远叉
|
|
// UseAwayFork = 2;
|
|
// break;
|
|
// }
|
|
// #endregion
|
|
// return UseAwayFork;
|
|
// }
|
|
//}
|
|
//catch (Exception ex)
|
|
//{
|
|
// throw ex;
|
|
//}
|
|
//finally
|
|
//{
|
|
// dv.Dispose(); ;
|
|
//}
|
|
#endregion
|
|
int z = GetZCoorFromMonitor(monitorIndex, devIndex, devOrder);
|
|
int x = GetXCoorFromMonitor(monitorIndex, devIndex, devOrder);
|
|
int y = GetYCoorFromMonitor(monitorIndex, devIndex, devOrder);
|
|
|
|
string FWAREHOUSE = GetWAREHOUSEFromSTCELL(devIndex);
|
|
int Mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
int ManFID = GetManageTaskIndexfromMonitor(monitorIndex);
|
|
|
|
DataView dv = new DataView(); ; int UseAwayFork = 1;
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FDoubleFork FROM ST_CELL WHERE (FWAREHOUSE='").Append(FWAREHOUSE
|
|
).Append("') and (F_Z = ").Append(z).Append(") AND (F_X = ").Append(x).Append(") AND (F_Y = ").Append(y).Append(")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
UseAwayFork = Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 0;
|
|
}
|
|
switch (UseAwayFork)
|
|
{
|
|
case 0://可用任何一个货叉:
|
|
int xcoor = GetDoubleForkX(Mankind, ManFID, devIndex, devOrder);
|
|
if (xcoor != -1)
|
|
{
|
|
//根据关联任务的货位判断使用近货叉(列坐标小)或者远货叉(列坐标大)
|
|
if (xcoor != x)
|
|
{
|
|
if (xcoor < x)
|
|
{
|
|
UseAwayFork = 1;
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//列坐标相同的,判断层坐标,近货叉(层坐标小)或者远货叉(层坐标大)
|
|
int ycoor = GetDoubleForkY(Mankind, ManFID, devIndex, devOrder);
|
|
if (ycoor != -1)
|
|
{
|
|
if (ycoor != y)
|
|
{
|
|
if (ycoor < y)
|
|
{
|
|
UseAwayFork = 1;
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//列和层都相同的,判断排坐标,近货叉(排坐标小)或者远货叉(排坐标大)
|
|
int zcoor = GetDoubleForkZ(Mankind, ManFID, devIndex, devOrder);
|
|
if (zcoor != -1)
|
|
{
|
|
if (zcoor != z)
|
|
{
|
|
if (zcoor < z)
|
|
{
|
|
UseAwayFork = 1;
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 0;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 1;
|
|
}
|
|
break;
|
|
case 1://只能用近叉
|
|
UseAwayFork = 0;
|
|
break;
|
|
case 2://只能用远叉
|
|
UseAwayFork = 1;
|
|
break;
|
|
}
|
|
return UseAwayFork;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose(); ;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 返回距离原点位置的斜边平方
|
|
/// </summary>
|
|
/// <param name="monitorIndex"></param>
|
|
/// <param name="devinfo"></param>
|
|
/// <param name="devOrder"></param>
|
|
/// <returns></returns>
|
|
public static double GetMinZeroDistance(int monitorIndex,Model.MDevice devinfo, int devOrder)
|
|
{
|
|
int x = GetXCoorFromMonitor(monitorIndex, devinfo.DeviceIndex, devOrder);
|
|
int y = GetYCoorFromMonitor(monitorIndex, devinfo.DeviceIndex, devOrder);
|
|
int xzero=0,yzero=0;
|
|
if (devinfo.StackZeroColLayer != "")
|
|
{
|
|
char[] cc = new char[1] { ',' };
|
|
string[] xy = devinfo.StackZeroColLayer.Split(cc);
|
|
if (xy.GetLength(0) <= 1) return -1;
|
|
xzero = Convert.ToInt32(xy[0]);
|
|
yzero = Convert.ToInt32(xy[1]);
|
|
return Math.Pow(Convert.ToDouble( x - xzero), 2) + Math.Pow(Convert.ToDouble(y - yzero), 2);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
//add for CATL YB2 计算当前列值离原点距离最近的给键值对数组的的 第0个下标
|
|
public static void GetMinZeroDistanceTask(int[] mtasks , Model.MDevice devinfo, int devOrder,out int mintask ,out double minDist)
|
|
{
|
|
// add CATL YB2 行走速度为:40 加速度:0.4 行走速度为: 160 加速度:0.8
|
|
minDist = 0; mintask = 0;
|
|
double temp = 0; minDist = 0;
|
|
foreach (int monitorIndex in mtasks)
|
|
{
|
|
|
|
int x = GetXCoorFromMonitor(monitorIndex, devinfo.DeviceIndex, devOrder);
|
|
int y = GetYCoorFromMonitor(monitorIndex, devinfo.DeviceIndex, devOrder);
|
|
int xzero = 0, yzero = 0;
|
|
if (devinfo.StackZeroColLayer != "")
|
|
{
|
|
char[] cc = new char[1] { ',' };
|
|
string[] xy = devinfo.StackZeroColLayer.Split(cc);
|
|
xzero = Convert.ToInt32(xy[0]);
|
|
yzero = Convert.ToInt32(xy[1]);
|
|
temp = Math.Pow(Convert.ToDouble(x - xzero), 2);// 20130704 +Math.Pow(Convert.ToDouble(y - yzero), 2)
|
|
}
|
|
if (temp <= minDist)
|
|
{
|
|
minDist = temp;
|
|
mintask = monitorIndex;
|
|
}
|
|
else
|
|
{
|
|
if (minDist == 0)
|
|
{
|
|
minDist = temp;
|
|
mintask = monitorIndex;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
public static int GetDoubleForkFromST_CELL(int z, int x, int y, string FWAREHOUSE)
|
|
{
|
|
DataView dv = new DataView();; int UseAwayFork = 1;
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FDoubleFork FROM ST_CELL WHERE (FWAREHOUSE='" ).Append( FWAREHOUSE
|
|
).Append( "') and (F_Z = " ).Append( z ).Append( ") AND (F_X = " ).Append( x ).Append( ") AND (F_Y = " ).Append( y ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
UseAwayFork = Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
string cell = string.Format("{0:D2}-{1:D2}-{2:D2}", z, x, y);
|
|
|
|
sql.Append("SELECT F_UseAwayFork FROM T_Base_Lane_Gate WHERE F_UseAwayFork is not null and F_ZXY='").Append(cell).Append("'");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)//找到
|
|
{ int a ;
|
|
if (int.TryParse(dv[0][0].ToString(), out a))
|
|
{
|
|
UseAwayFork = Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 0;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
UseAwayFork = 0;
|
|
}
|
|
}
|
|
|
|
return UseAwayFork;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 根据管理任务号,得到托盘类型 字段 Work_Mode : 1小,2大
|
|
/// </summary>
|
|
/// <param name="taskKindIndex"></param>
|
|
/// <param name="Managefid"></param>
|
|
/// <returns></returns>
|
|
public static int GetForkTypeFromManageTask(int taskKindIndex, int Managefid)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//20101124
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT Work_Mode FROM T_Manage_Task WHERE (FID = ").Append(Managefid).Append(") AND (F_ManageTaskKindIndex = ").Append(taskKindIndex).Append(")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
if ((dv[0]["Work_Mode"].ToString().Trim() == "1") || (dv[0]["Work_Mode"].ToString().Trim() == "2") || (dv[0]["Work_Mode"].ToString().Trim() == "3") || (dv[0]["Work_Mode"].ToString().Trim() == "4") || (dv[0]["Work_Mode"].ToString().Trim() == "5"))
|
|
{
|
|
return Convert.ToInt32(dv[0]["Work_Mode"].ToString().Trim());
|
|
}
|
|
else if ((dv[0]["Work_Mode"].ToString().Trim() == "6") || (dv[0]["Work_Mode"].ToString().Trim() == "7"))//6和7 给电气转为5
|
|
{
|
|
return 5;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
|
|
}
|
|
}
|
|
public static string GetWAREHOUSEFromSTCELL(int stackIndex)
|
|
{
|
|
DataView dv=new DataView();
|
|
try
|
|
{
|
|
devinfo = Model.CGetInfo.GetDeviceInfo(stackIndex);
|
|
if (devinfo != null)
|
|
{
|
|
|
|
if (devinfo.VirtualStack > 0)
|
|
{
|
|
stackIndex = devinfo.VirtualStack;
|
|
}
|
|
}
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FWAREHOUSE FROM ST_CELL WHERE (FStack = " ).Append( stackIndex ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return dv[0][0].ToString();
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally { dv.Dispose(); }
|
|
}
|
|
/// <summary>
|
|
/// 查找多叉关联任务的列坐标 kkkkk kkkkkkkkkkkkkkkkkk 青岛思锐
|
|
/// </summary>
|
|
/// <param name="mankind">任务类型</param>
|
|
/// <param name="fid">调度任务索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <param name="devOrder">设备指令</param>
|
|
/// <returns></returns>
|
|
public static int GetDoubleForkX(int mankind, int fid, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView(); ;
|
|
string xc = "F_NumParam2";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4)
|
|
{
|
|
xc = "F_NumParam2";
|
|
}
|
|
else if (devOrder == 5)
|
|
{
|
|
xc = "F_NumParam5";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
//查找被关联辅助设备指令索引的列坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select F_RELATIVECONTORLID from T_Manage_Task where (FID = " ).Append(
|
|
fid ).Append( ") AND (F_ManageTaskKindIndex = " ).Append( mankind ).Append( ")");
|
|
DataView dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv0.Count == 0) return -1;
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT " ).Append( xc ).Append( " FROM T_Monitor_Task Where ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind
|
|
).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ") AND (T_Monitor_Task.F_ManageTaskIndex=" ).Append( dv0[0]["F_RELATIVECONTORLID"] ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][xc]);
|
|
}
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select T_Manage_Task.FID from T_Manage_Task where (T_Manage_Task.F_ManageTaskKindIndex = ").Append(mankind).Append(") AND (F_RELATIVECONTORLID = " ).Append(
|
|
fid ).Append( ")");
|
|
dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv0.Count == 0) return -1;
|
|
//查找关联自己的主设备指令索引的列坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append(xc).Append(" FROM T_Monitor_Task Where ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder
|
|
).Append( ") and (T_Monitor_Task.F_ManageTaskIndex= " ).Append( dv0[0]["FID"] ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][xc]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 查找多叉关联任务的层坐标
|
|
/// </summary>
|
|
/// <param name="mankind">任务类型</param>
|
|
/// <param name="fid">调度任务索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <param name="devOrder">设备指令</param>
|
|
/// <returns></returns>
|
|
public static int GetDoubleForkY(int mankind, int fid, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView();
|
|
string yc = "F_NumParam3";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4)
|
|
{
|
|
yc = "F_NumParam3";
|
|
}
|
|
else if (devOrder == 5)
|
|
{
|
|
yc = "F_NumParam6";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select F_RELATIVECONTORLID from T_Manage_Task where FID = " ).Append(
|
|
fid ).Append( " and F_ManageTaskKindIndex=").Append(mankind );
|
|
DataView dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv0.Count == 0) return -1;
|
|
//查找被关联辅助设备指令索引的层坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT " ).Append( yc ).Append( " FROM T_Monitor_Task Where (T_Monitor_Task.F_ManageTaskIndex=" ).Append( dv0[0]["F_RELATIVECONTORLID"] ).Append( " " ).Append(
|
|
" ) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][yc]);
|
|
}
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select FID from T_Manage_Task where F_RELATIVECONTORLID = " ).Append(
|
|
fid ).Append( " and F_ManageTaskKindIndex=" ).Append( mankind );
|
|
dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv0.Count == 0) return -1;
|
|
|
|
//查找关联自己的主设备指令索引的层坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT " ).Append( yc ).Append( " FROM T_Monitor_Task Where (T_Monitor_Task.F_ManageTaskIndex=" ).Append( dv0[0]["FID"] ).Append( " " ).Append(
|
|
") and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][yc]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 查找多叉关联任务的排坐标
|
|
/// </summary>
|
|
/// <param name="mankind">任务类型</param>
|
|
/// <param name="fid">调度任务索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <param name="devOrder">设备指令</param>
|
|
/// <returns></returns>
|
|
public static int GetDoubleForkZ(int mankind, int fid, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView();
|
|
string zc = "F_NumParam1";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4)
|
|
{
|
|
zc = "F_NumParam1";
|
|
}
|
|
else if (devOrder == 5)
|
|
{
|
|
zc = "F_NumParam4";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
//查找被关联辅助设备指令索引的排坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append(zc).Append(" FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " ).Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") AND (FID = " ).Append(
|
|
fid ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][zc]);
|
|
}
|
|
|
|
//查找关联自己的主设备指令索引的排坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append(zc).Append(" FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex " ).Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") AND (F_RELATIVECONTORLID = " ).Append(
|
|
fid ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][zc]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
|
|
public static Dictionary<int, int[]> GetMutiForkTaskZxyForkNo(int mankind, int fid, int devIdx, int devOrder)
|
|
{//20120616
|
|
Dictionary<int, int[]> rettask = new Dictionary<int, int[]>();
|
|
DataView dv = new DataView(); DataView dv1 = new DataView();
|
|
int RELATIVECONTORLID=-1;
|
|
string zc = "F_NumParam1"; string xc = "F_NumParam2"; string yc = "F_NumParam3";
|
|
StringBuilder devstr= new StringBuilder(" and F_DeviceIndex=").Append(devIdx);
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4)
|
|
{
|
|
zc = "F_NumParam1";
|
|
xc = "F_NumParam2";
|
|
yc = "F_NumParam3";
|
|
}
|
|
else if (devOrder == 5)
|
|
{
|
|
zc = "F_NumParam4";
|
|
xc = "F_NumParam5";
|
|
yc = "F_NumParam6";
|
|
}
|
|
}
|
|
else if (GetDeviceKindIdx(devIdx) == 6)
|
|
{//1运行,2取货,3送货,4取送货,5允许AGV移载
|
|
if (devOrder == 2)
|
|
{
|
|
zc = "F_NumParam1";
|
|
xc = "F_NumParam2";
|
|
yc = "F_NumParam3";
|
|
}
|
|
else if (devOrder == 3)
|
|
{
|
|
zc = "F_NumParam4";
|
|
xc = "F_NumParam5";
|
|
yc = "F_NumParam6";
|
|
}
|
|
else
|
|
{
|
|
zc = "F_NumParam1";
|
|
xc = "F_NumParam2";
|
|
yc = "F_NumParam3";
|
|
}
|
|
}
|
|
else if (GetDeviceKindIdx(devIdx) == 2)
|
|
{
|
|
int length=devIdx.ToString().Length;
|
|
string devicetemp = devIdx.ToString();
|
|
if (length>5)
|
|
{
|
|
devicetemp = devIdx.ToString().Substring(0, 5);
|
|
}
|
|
devstr = new StringBuilder(" and F_DeviceIndex like '%").Append(devicetemp).Append("%'");
|
|
}
|
|
try
|
|
{
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select F_RELATIVECONTORLID from T_Manage_Task where (FID = ").Append(
|
|
fid).Append(") AND (F_ManageTaskKindIndex = ").Append(mankind).Append(") and F_RELATIVECONTORLID>0");
|
|
DataView dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv0.Count == 0) return null ;
|
|
RELATIVECONTORLID = Convert.ToInt32(dv0[0]["F_RELATIVECONTORLID"]);
|
|
// CATL YB2 查询出关联任务的对应的任务号
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_MonitorIndex,").Append(zc).Append(",").Append(xc).Append(",").Append(yc)
|
|
.Append(",F_UseAwayFork,T_Manage_Task.F_ManageTaskKindIndex,fid FROM T_Monitor_Task,T_Manage_Task Where ( T_Monitor_Task.F_ManageTaskKindIndex = ").Append(mankind
|
|
).Append(")").Append(devstr.ToString()).Append(" and F_DeviceCommandIndex=")
|
|
.Append(devOrder).Append(" AND (F_RELATIVECONTORLID=").Append(RELATIVECONTORLID).Append(")")
|
|
.Append(" and T_Monitor_Task.F_ManageTaskIndex=FID");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
|
|
for (int i = 0; i < dv.Count; i++)
|
|
{
|
|
//int rmankind = Convert.ToInt32(dv[i]["F_ManageTaskKindIndex"]);
|
|
//int rman = Convert.ToInt32(dv[i]["fid"]);
|
|
//sql.Remove(0, sql.Length);
|
|
//sql.Append("SELECT MIN(F_MonitorIndex) AS mmi FROM dbo.T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(rman).Append(") AND (F_ManageTASKKINDINDEX = ").Append(rmankind).Append(")");
|
|
//dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
//if (dv1.Count > 0)
|
|
//{
|
|
// if ((dv1[0]["mmi"] != DBNull.Value) && (dv1[0]["mmi"].ToString() != dv[i]["F_MonitorIndex"].ToString()))
|
|
// {
|
|
// continue;
|
|
// }
|
|
//}
|
|
int[] zxy = new int[4];
|
|
zxy[0] = Convert.ToInt32(dv[i][zc]);
|
|
zxy[1] = Convert.ToInt32(dv[i][xc]);
|
|
zxy[2] = Convert.ToInt32(dv[i][yc]);
|
|
zxy[3] = Convert.ToInt32(dv[i]["F_UseAwayFork"]);
|
|
rettask.Add(Convert.ToInt32(dv[i]["F_MonitorIndex"]), zxy);
|
|
}
|
|
return rettask;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查找多叉关联任务的ST_CELL表的使用哪个货叉属性是否相同
|
|
/// </summary>
|
|
/// <param name="mankind">任务类型</param>
|
|
/// <param name="fid">调度任务索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <param name="devOrder">设备指令</param>
|
|
/// <returns></returns>
|
|
public static bool EqualMonitorDoubleFork(int mankind, int fid, int devIdx, int devOrder)
|
|
{
|
|
DataView dv= new DataView(); char DoubleFork = '0', DoubleFork1 = '0';
|
|
string xc = "F_NumParam2";string yc = "F_NumParam3";string zc = "F_NumParam1";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if ((devOrder == 4)||(devOrder == 2))
|
|
{
|
|
xc = "F_NumParam2";
|
|
yc = "F_NumParam3";
|
|
zc = "F_NumParam1";
|
|
}
|
|
else if ((devOrder == 5)||(devOrder == 3))
|
|
{
|
|
xc = "F_NumParam5";
|
|
yc = "F_NumParam6";
|
|
zc = "F_NumParam4";
|
|
}
|
|
}
|
|
|
|
|
|
try
|
|
{
|
|
|
|
int z = 0, x = 0, y = 0, z1 = 0, x1 = 0, y1 = 0;
|
|
//查找被关联辅助设备指令索引的列坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT " ).Append( zc ).Append( "," ).Append( xc ).Append( "," ).Append( yc ).Append( ",F_UseAwayFork FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " ).Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") AND (FID = " ).Append(
|
|
fid ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
;
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
z = Convert.ToInt32(dv[0][zc]);
|
|
x = Convert.ToInt32(dv[0][xc]);
|
|
y = Convert.ToInt32(dv[0][yc]);
|
|
DoubleFork = Convert.ToChar(dv[0]["F_UseAwayFork"]);
|
|
}
|
|
else
|
|
{
|
|
//查找关联自己的主设备指令索引的列坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT " ).Append( zc ).Append( "," ).Append( xc ).Append( "," ).Append( yc ).Append( ",F_UseAwayFork FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex " ).Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") AND (F_RELATIVECONTORLID = " ).Append(
|
|
fid ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
z = Convert.ToInt32(dv[0][zc]);
|
|
x = Convert.ToInt32(dv[0][xc]);
|
|
y = Convert.ToInt32(dv[0][yc]);
|
|
DoubleFork = Convert.ToChar(dv[0]["F_UseAwayFork"]);
|
|
}
|
|
|
|
}
|
|
if ((z == 0) && (x == 0) && (y == 0))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT " ).Append( zc ).Append( "," ).Append( xc ).Append( "," ).Append( yc ).Append( ",F_UseAwayFork FROM T_Monitor_Task Where ( F_ManageTASKKINDINDEX = " ).Append( mankind ).Append( ") AND (F_ManageTaskIndex = " ).Append(
|
|
fid ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
z1 = Convert.ToInt32(dv[0][zc]);
|
|
x1 = Convert.ToInt32(dv[0][xc]);
|
|
y1 = Convert.ToInt32(dv[0][yc]);
|
|
DoubleFork1 = Convert.ToChar(dv[0]["F_UseAwayFork"]);
|
|
if (((x1 > x) && (DoubleFork1 > DoubleFork)) || ((x > x1) && (DoubleFork > DoubleFork1)))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查找多叉关联任务的T_Base_AGV_Gate表的货叉属性是否匹配
|
|
/// </summary>
|
|
/// <param name="mankind">任务类型</param>
|
|
/// <param name="fid">调度任务索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <param name="devOrder">设备指令</param>
|
|
/// <returns></returns>
|
|
public static bool EqualAGVGateDoubleFork(int mankind, int fid, int devIdx, int devOrder)
|
|
{//20110110 1运行,2取货,3送货,4取送货,5允许AGV移载
|
|
DataView dv = new DataView();
|
|
string xc = "F_NumParam2";
|
|
if (GetDeviceKindIdx(devIdx) == 6)
|
|
{
|
|
if (devOrder == 1)
|
|
{
|
|
xc = "F_NumParam5";
|
|
}
|
|
else if ((devOrder == 2) || (devOrder == 5))
|
|
{
|
|
xc = "F_NumParam2";
|
|
}
|
|
else if (devOrder == 3)
|
|
{
|
|
xc = "F_NumParam5";
|
|
}
|
|
else
|
|
{
|
|
xc = "F_NumParam2";
|
|
}
|
|
}
|
|
|
|
try
|
|
{
|
|
|
|
int x = 0, x1 = 0;
|
|
int channelleft = 0, channelleft1 = 0, xd = 0, xd1 = 0;
|
|
StringBuilder sql = new StringBuilder();
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select F_RELATIVECONTORLID from T_Manage_Task where (FID = ").Append(
|
|
fid).Append(") AND (F_ManageTaskKindIndex = ").Append(mankind).Append(") and F_RELATIVECONTORLID>0");
|
|
DataView dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv0.Count == 0) return false;
|
|
int RELATIVECONTORLID = Convert.ToInt32(dv0[0]["F_RELATIVECONTORLID"]);
|
|
//查找被关联辅助设备指令索引的列坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append( xc ).Append(" FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex ").Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") AND (FID = " ).Append(
|
|
fid).Append(") and (F_DeviceIndex=").Append(devIdx).Append(" and F_DeviceCommandIndex=").Append(devOrder).Append(") and F_RELATIVECONTORLID=").Append(RELATIVECONTORLID);
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
|
|
xd = Convert.ToInt32(dv[0][xc]);
|
|
dv = dbo.ExceSQL("SELECT F_Sequence FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = " + xd + ")").Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
x = Convert.ToInt32(dv[0]["F_Sequence"]);
|
|
}
|
|
else
|
|
{
|
|
x = 0;
|
|
}
|
|
}
|
|
if (x == 0)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
sql.Append("SELECT ").Append( xc ).Append( " FROM T_Monitor_Task Where ( F_ManageTASKKINDINDEX = " ).Append( mankind ).Append( ") AND (F_ManageTaskIndex = ").Append(
|
|
fid ).Append( ") and (F_DeviceIndex=" ).Append( devIdx ).Append( " and F_DeviceCommandIndex=" ).Append( devOrder ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
xd1 = Convert.ToInt32(dv[0][xc]);
|
|
dv = dbo.ExceSQL("SELECT F_Sequence FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = " + xd1 + ")").Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
x1 = Convert.ToInt32(dv[0]["F_Sequence"]);
|
|
}
|
|
else
|
|
{
|
|
x1 = 0;
|
|
}
|
|
int DoubleFork = 0, DoubleFork1 = 0;
|
|
dv = dbo.ExceSQL("SELECT F_UseAwayFork,F_IfChannelLeft FROM T_Base_AGV_Gate WHERE F_AGVGateDeviceIndex =" + xd).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
DoubleFork = Convert.ToInt32(dv[0]["F_UseAwayFork"]);
|
|
channelleft = Convert.ToInt32(dv[0]["F_IfChannelLeft"]);
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
dv = dbo.ExceSQL("SELECT F_UseAwayFork,F_IfChannelLeft FROM T_Base_AGV_Gate WHERE F_AGVGateDeviceIndex =" + xd1).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
DoubleFork1 = Convert.ToInt32(dv[0]["F_UseAwayFork"]);
|
|
channelleft1 = Convert.ToInt32(dv[0]["F_IfChannelLeft"]);
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
if ((((x1 > x) && (DoubleFork1 > DoubleFork)) || ((x > x1) && (DoubleFork > DoubleFork1))) && (channelleft == channelleft1))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在设备指令队列表获取Z 排坐标
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
public static int GetZCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView();
|
|
string zc = "F_NumParam1";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4 || devOrder == 2)
|
|
{
|
|
zc = "F_NumParam1";
|
|
}
|
|
else if (devOrder == 5 || devOrder == 3)
|
|
{
|
|
zc = "F_NumParam4";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append(zc).Append(" FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( monitorIndex ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在设备指令队列表获取X 列坐标
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
public static int GetXCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView();
|
|
string xc = "F_NumParam2";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4 || devOrder == 2)
|
|
{
|
|
xc = "F_NumParam2";
|
|
}
|
|
else if (devOrder == 5 || devOrder == 3)
|
|
{
|
|
xc = "F_NumParam5";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append(xc).Append(" FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( monitorIndex ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 在设备指令队列表获取全局X 列坐标
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
public static int GetGlobalXCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView();
|
|
int globalx = 0;
|
|
string sql = string.Empty;
|
|
string cellcode = string.Empty;
|
|
|
|
try
|
|
{
|
|
sql = string.Format("SELECT F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex ={0}",monitorIndex);
|
|
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
int z = Convert.ToInt32(dv[0]["F_NumParam1"]);
|
|
int x = Convert.ToInt32(dv[0]["F_NumParam2"]);
|
|
int y = Convert.ToInt32(dv[0]["F_NumParam3"]);
|
|
int z1 = Convert.ToInt32(dv[0]["F_NumParam4"]);
|
|
int x1 = Convert.ToInt32(dv[0]["F_NumParam5"]);
|
|
int y1 = Convert.ToInt32(dv[0]["F_NumParam6"]);
|
|
globalx = x;//默认值,适用于RGV
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4)
|
|
{
|
|
cellcode = string.Format("{0:D2}-{1:D2}-{2:D2}", z, x, y);
|
|
globalx = x;
|
|
}
|
|
else if (devOrder == 5)
|
|
{
|
|
cellcode = string.Format("{0:D2}-{1:D2}-{2:D2}", z1, x1, y1);
|
|
globalx = x1;
|
|
}
|
|
|
|
|
|
sql = string.Format("SELECT F_X_Global FROM ST_CELL where FCELLCODE='{0}'", cellcode);
|
|
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
globalx = Convert.ToInt32(dv[0]["F_X_Global"]);
|
|
}
|
|
else
|
|
{
|
|
sql = string.Format("SELECT F_Global_X FROM T_Base_Lane_Gate where F_ZXY='{0}'", cellcode);
|
|
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
globalx = Convert.ToInt32(dv[0]["F_Global_X"]);
|
|
}
|
|
}
|
|
}
|
|
return globalx;
|
|
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
///根据设备指令获得取送货坐标 coor[0] = z;coor[1] = x;coor[2] = y;coor[3] = z1;coor[4] = x1;coor[5] = y1
|
|
/// </summary>
|
|
/// <param name="monitorIndex"></param>
|
|
/// <param name="devIdx"></param>
|
|
/// <param name="devOrder"></param>
|
|
/// <param name="workstack"></param>
|
|
/// <returns></returns>
|
|
public static int[] GetCoorFromMonitor(int monitorIndex)
|
|
{
|
|
DataView dv = new DataView();
|
|
string sql = string.Empty;
|
|
//string cellcode = string.Empty;
|
|
int [] coor = new int[6];
|
|
try
|
|
{
|
|
sql = string.Format("SELECT F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex ={0}",monitorIndex);
|
|
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
int z = Convert.ToInt32(dv[0]["F_NumParam1"]);
|
|
int x = Convert.ToInt32(dv[0]["F_NumParam2"]);
|
|
int y = Convert.ToInt32(dv[0]["F_NumParam3"]);
|
|
int z1 = Convert.ToInt32(dv[0]["F_NumParam4"]);
|
|
int x1 = Convert.ToInt32(dv[0]["F_NumParam5"]);
|
|
int y1 = Convert.ToInt32(dv[0]["F_NumParam6"]);
|
|
coor[0] = z;
|
|
coor[1] = x;
|
|
coor[2] = y;
|
|
coor[3] = z1;
|
|
coor[4] = x1;
|
|
coor[5] = y1;
|
|
return coor;
|
|
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 在设备指令队列表获取Y 层坐标
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
public static int GetYCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
|
|
{
|
|
DataView dv = new DataView();
|
|
string yc = "F_NumParam3";
|
|
if (GetDeviceKindIdx(devIdx) == 1)
|
|
{
|
|
if (devOrder == 4)
|
|
{
|
|
yc = "F_NumParam3";
|
|
}
|
|
else if (devOrder == 5)
|
|
{
|
|
yc = "F_NumParam6";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT ").Append(yc).Append(" FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( monitorIndex ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 返回双顶升机设备指令信息(返回NULL表示没有;否则返回包含自己的所有货叉的设备指令信息):【0】任务号【1】条码
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <returns></returns>
|
|
public static int GetDoubleLiftInfo(int monitorIndex, int devIdx)
|
|
{
|
|
DataView dv = new DataView();
|
|
|
|
try
|
|
{
|
|
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
|
|
int devOrder = GetDeviceOrderFromMonitor(monitorIndex);
|
|
int relFID = GetRelativeControlID(mankind, fid);
|
|
if (relFID == -1) return 0;
|
|
|
|
//--------获取设备货叉,与参数的货叉取反
|
|
string str_device = "";
|
|
int i_fork = 0;
|
|
switch (devIdx.ToString().Substring(4, 1))
|
|
{
|
|
case "1":
|
|
i_fork = 2;
|
|
str_device = devIdx.ToString().Substring(0, 5) + i_fork.ToString();
|
|
break;
|
|
case "2":
|
|
i_fork = 1;
|
|
str_device = devIdx.ToString().Substring(0, 5) + i_fork.ToString();
|
|
break;
|
|
}
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_MonitorIndex,F_TxtParam,F_DeviceIndex FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex ").Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = ").Append(mankind)
|
|
.Append(") and (F_DeviceIndex=").Append(str_device).Append(" and F_DeviceCommandIndex=").Append(devOrder).Append(") and F_RELATIVECONTORLID=").Append(relFID).Append(" and F_MonitorIndex<>").Append(monitorIndex);
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return (int) dv[0]["F_MonitorIndex"];
|
|
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 返回多叉关联设备指令信息(返回NULL表示没有;否则返回包含自己的所有货叉的设备指令信息):【0】设备指令索引【1】提前检测【2】设备索引【3】路径
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <param name="devIdx">设备索引</param>
|
|
/// <returns></returns>
|
|
public static Dictionary<int, string[]> GetDoubleForkMonitorInfo(int monitorIndex, int devIdx)
|
|
{
|
|
DataView dv = new DataView();
|
|
|
|
Dictionary<int, string[]> rtd = new Dictionary<int, string[]>();;
|
|
string[] rr = null;
|
|
try
|
|
{
|
|
int length=devIdx.ToString().Length;
|
|
if(length>5)
|
|
{
|
|
devIdx = Convert.ToInt32(devIdx.ToString().Substring(0, 5));//20160419出库升降站台的处理
|
|
}
|
|
|
|
|
|
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
|
|
int devOrder = GetDeviceOrderFromMonitor(monitorIndex);
|
|
//获取关联任务ID
|
|
int relFID = GetRelativeControlID(mankind, fid);
|
|
if (relFID == -1) return null;
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_MonitorIndex,F_AheadDetect,F_DeviceIndex,F_RouteID,F_TxtParam FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex ").Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " ).Append( mankind )
|
|
.Append( ") and (F_DeviceIndex like '").Append(devIdx).Append("%' and F_DeviceCommandIndex=").Append(devOrder).Append(") and F_RELATIVECONTORLID=").Append(relFID ).Append(" and F_MonitorIndex<>").Append(monitorIndex);
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
|
|
if (dv.Count == 0) return null;
|
|
for(int i=0;i<dv.Count;i++)
|
|
{//20141201张磊发现没使用dv[i],错误使用dv[0]和引用类型rr的使用
|
|
rr = new string[4];
|
|
rr[0] = dv[i]["F_MonitorIndex"].ToString();
|
|
rr[1] = dv[i]["F_AheadDetect"].ToString();
|
|
rr[2] = dv[i]["F_DeviceIndex"].ToString();
|
|
rr[3] = dv[i]["F_RouteID"].ToString();
|
|
rtd.Add(Convert.ToInt32(dv[i]["F_MonitorIndex"]), rr);
|
|
}
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_MonitorIndex,F_AheadDetect,F_DeviceIndex,F_RouteID,F_TxtParam FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex ").Append(
|
|
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = ").Append(mankind)
|
|
.Append(") and (F_DeviceIndex like '").Append(devIdx).Append("%' and F_DeviceCommandIndex=").Append(devOrder).Append(") and F_MonitorIndex=").Append(monitorIndex);
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
rr = new string[4];//20141201张磊发现错误使用dv[0]和引用类型rr的使用
|
|
rr[0] = dv[0]["F_MonitorIndex"].ToString();
|
|
rr[1] = dv[0]["F_AheadDetect"].ToString();
|
|
rr[2] = dv[0]["F_DeviceIndex"].ToString();
|
|
rr[3] = dv[0]["F_RouteID"].ToString();
|
|
rtd.Add(Convert.ToInt32(dv[0]["F_MonitorIndex"]), rr);
|
|
}
|
|
return rtd;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
rr = null;
|
|
rtd = null;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 是否存在关联任务
|
|
/// </summary>
|
|
/// <param name="monitorIndex"></param>
|
|
/// <param name="devIdx"></param>
|
|
/// <returns></returns>
|
|
public static bool GetIfDoubleForkTask(int monitorIndex, int devIdx)
|
|
{
|
|
DataView dv = new DataView();
|
|
|
|
|
|
string sqlstr = string.Empty;
|
|
try
|
|
{//
|
|
int length=devIdx.ToString().Length;
|
|
if (length > 5)
|
|
{
|
|
devIdx = Convert.ToInt32(devIdx.ToString().Substring(0, 5));//20160419出库升降站台的处理
|
|
}
|
|
|
|
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
|
|
|
|
int relFID = GetRelativeControlID(mankind, fid);
|
|
if (relFID == -1) return false ;
|
|
|
|
|
|
sqlstr=string.Format("SELECT FID,F_RELATIVECONTORLID FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = {0}) AND (F_RELATIVECONTORLID = {1}) and (FID!={2})", mankind, relFID, fid);
|
|
|
|
dv = dbo.ExceSQL(sqlstr).Tables[0].DefaultView;
|
|
|
|
if (dv.Count > 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
|
|
}
|
|
}
|
|
public static int GetUseAwayForkFromLaneGate(int lanegate)
|
|
{//20120820
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_UseAwayFork FROM T_Base_Lane_Gate WHERE (F_LaneGateDeviceIndex = {0}) ", lanegate)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
int a = 0;
|
|
if (int.TryParse(dv[0]["F_UseAwayFork"].ToString(), out a) == false)
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return Convert.ToInt32( dv[0]["F_UseAwayFork"]);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
public static int GetEndDeviceFromManage(int mti, int fid)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
dv = dbo.ExceSQL(string.Format("SELECT FENDDEVICE FROM T_Manage_Task where FID={0} and F_ManageTaskKindIndex={1}", fid, mti)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0][0]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 返回未拆分的多叉关联设备指令,true 代表有未拆分的多叉关联设备指令
|
|
/// </summary>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
public static bool GetMutiForkUnIntoStep(int monitorIndex)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
|
|
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
|
|
//查找被关联辅助设备指令索引的列坐标
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_RELATIVECONTORLID FROM T_Manage_Task Where (T_Manage_Task.F_RELATIVECONTORLID <>-1 ) and ( F_ManageTaskKindIndex = " ).Append( mankind ).Append( ") AND (FID = " ).Append(
|
|
fid ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FID FROM T_Manage_Task Where ( F_ManageTaskKindIndex = ").Append(mankind).Append(") AND (F_RELATIVECONTORLID = ").Append(
|
|
dv[0][0] ).Append( " and FIntoStepOK<>'1')");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
public static int GetManageTaskIndexfromMonitor(int monitorIdx)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//20100108
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_ManageTaskIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( monitorIdx ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["F_ManageTaskIndex"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 返回关联任务ID F_GOODMatchID
|
|
/// </summary>
|
|
/// <param name="monitorIdx"></param> 是当前的管理任务号
|
|
/// <returns></returns>
|
|
///
|
|
public static int GetGoodMatchID(int monitorIdx)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_GOODMatchID FROM T_Manage_Task WHERE (FID = ").Append(monitorIdx).Append(")").Append(" and F_GOODMatchID is not ").Append("NULL").Append(" and F_GOODMatchID <> ").Append( -1 );
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["F_GOODMatchID"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 返回关联任务号对应的关联任务ID F_GOODMatchID
|
|
/// </summary>
|
|
/// <param name="monitorIdx"></param> 是当前的管理任务号
|
|
/// <returns></returns>
|
|
///
|
|
public static int GetGoodMatchIDFid(int monitorIdx, int matchID)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
if (matchID != -1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FID FROM T_Manage_Task WHERE (F_GOODMatchID = ").Append(matchID).Append(" and FID <>").Append(monitorIdx).Append(")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["FID"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
|
|
public static int GetManageTaskKindIndexFromMonitor(int monitorIdx)
|
|
{//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//20100108
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_ManageTaskKindIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( monitorIdx ).Append( ")");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["F_ManageTaskKindIndex"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
|
|
}
|
|
|
|
|
|
}
|
|
public static int GetRelativeControlID(int mankind, int fid)
|
|
{
|
|
object ob = dbo.GetSingle(string.Format("SELECT F_RELATIVECONTORLID FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = {0}) AND (FID = {1})", mankind, fid));
|
|
if (ob != null)
|
|
{
|
|
return Convert.ToInt32(ob);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
// 订阅里的 24 qdsr kkkkkk
|
|
public static string GetXcorrFromForkNoAndDevice(int device, int forkno)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//int a = 0;
|
|
//if ((device == 12024 || device == 12028) && forkno ==2)
|
|
//{
|
|
// a = device - 1;
|
|
//}
|
|
|
|
//dv = dbo.ExceSQL(string.Format("SELECT F_ZXY FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex like '{0}%' and F_UseAwayFork='{1}'", device, forkno)).Tables[0].DefaultView;
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_ZXY FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex like '{0}%' ", device)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
char[] cc = new char[1] { '-' };
|
|
string[] zxy=dv[0][0].ToString().Split(cc);
|
|
if (zxy.GetLength(0) >= 2)
|
|
{
|
|
return zxy[1];
|
|
}
|
|
else
|
|
{
|
|
return "0";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return "0";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 在调度队列中找到设备命令
|
|
/// </summary>
|
|
/// <param name="MonitorIndex">调度所引</param>
|
|
/// <returns></returns>
|
|
public static int GetDeviceOrderFromMonitor(int MonitorIndex)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select F_DeviceCommandIndex from T_Monitor_Task where (F_DeviceCommandIndex IS NOT NULL) and F_MonitorIndex=" ).Append( MonitorIndex);
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["F_DeviceCommandIndex"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
public static int GetDeviceKindIdx(int devIdx)
|
|
{
|
|
try
|
|
{
|
|
devinfo = Model.CGetInfo.GetDeviceInfo(devIdx);
|
|
return devinfo.DeviceKind;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
}
|
|
//20170301
|
|
/// <summary>
|
|
/// 在发送机器人拆垛指令之前,判断管理系统是否要求回流
|
|
/// CONTROL_BACK_FLAG为空时,表示正常拆垛,为1时表示回流
|
|
/// </summary>
|
|
/// <param name="ManageTaskIndex"></param>
|
|
/// <returns></returns>
|
|
public static int GetBackFlagFromIOControl(int ManageTaskIndex)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select CONTROL_ID,CONTROL_BACK_FLAG from IO_CONTROL where (CONTROL_BACK_FLAG IS NOT NULL) and CONTROL_ID=").Append(ManageTaskIndex);
|
|
//20100108
|
|
|
|
dv = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["CONTROL_BACK_FLAG"]);//为1时表示回流,等待管理系统下达任务
|
|
}
|
|
else
|
|
{
|
|
return 0;//正常拆垛
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return 0;//正常拆垛
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
public static int GetDeviceIndexFromMonitor(int MonitorIndex)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select F_DeviceIndex from T_Monitor_Task where (F_DeviceIndex IS NOT NULL) and F_MonitorIndex=" ).Append( MonitorIndex);
|
|
//20100108
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dv[0]["F_DeviceIndex"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 20110608获取调度设备指令开始时间
|
|
/// </summary>
|
|
/// <param name="monitorIndex"></param>
|
|
/// <returns></returns>
|
|
public static string GetMonitorTaskBeginTime(int monitorIndex)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_StartTime FROM T_Monitor_Task WHERE F_MonitorIndex = ").Append(monitorIndex);
|
|
object ob=dbo.GetSingle(sql.ToString());
|
|
if (ob != null)
|
|
{
|
|
return ob.ToString();
|
|
}
|
|
else
|
|
{
|
|
return "-";
|
|
}
|
|
}
|
|
|
|
public static void ActionComplete(int DeviceIdx, int TaskIdx, int ClearZero)
|
|
{
|
|
int devKind = GetDeviceKindIdx(DeviceIdx);
|
|
int order = GetDeviceOrderFromMonitor(TaskIdx);
|
|
int fid = GetManageTaskIndexfromMonitor(TaskIdx);
|
|
int mti = GetManageTaskKindIndexFromMonitor(TaskIdx);
|
|
string cap;
|
|
int errrcode = GetExceptionNOFromManageTask(fid, mti);
|
|
DataView dv = new DataView();
|
|
//dbo.TransBegin();
|
|
try
|
|
{
|
|
//20100127
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("select count(F_MonitorIndex) as counts from T_Monitor_Task " ).Append(
|
|
" where F_ManageTaskIndex =" ).Append( fid ).Append( " and F_ManageTaskKindIndex= " ).Append( mti);
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
if ((Convert.ToInt32(dv[0]["counts"]) == 1) )
|
|
{
|
|
//固定路径模式
|
|
//调度任务的fid的最后一个监控分解任务完成
|
|
|
|
if (mti == 1)
|
|
{
|
|
cap = "调度任务";
|
|
//完成FSTATUS=999;970堆垛机送货重故障异常完成;980堆垛机取空故障异常完成;990条码扫描异常完成;调度撤销删除调度任务900
|
|
if (errrcode > 900)//异常完成
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update IO_Control set Control_STATUS=" ).Append( errrcode ).Append( " where Control_ID=" ).Append( fid);
|
|
dboM.ExceSQL(sql.ToString());
|
|
}
|
|
else
|
|
{
|
|
if (ClearZero == Model.CGeneralFunction.TASKDELETE)//调度撤销删除调度任务900
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update IO_Control set Control_STATUS=" ).Append( Model.CGeneralFunction.TASKDELETE ).Append( " where Control_ID=" ).Append( fid);
|
|
dboM.ExceSQL(sql.ToString());
|
|
}
|
|
else//完成FSTATUS=999
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update IO_Control set Control_STATUS=" ).Append( Model.CGeneralFunction.TASKFINISH ).Append( " where Control_ID=" ).Append( fid);
|
|
dboM.ExceSQL(sql.ToString());
|
|
}
|
|
}
|
|
}
|
|
else if (mti == 4)
|
|
{
|
|
cap = "手工任务";
|
|
}
|
|
else
|
|
{
|
|
cap = "临时任务";
|
|
}
|
|
//回写管理表
|
|
if (ClearZero == Model.CGeneralFunction.TASKDELETE)//调度撤销删除调度任务900
|
|
{
|
|
ReturnManageInfo(fid, mti, cap, false);
|
|
}
|
|
else
|
|
{
|
|
ReturnManageInfo(fid, mti, cap, true);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//被这个任务号锁定的设备全部解锁
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update T_Base_Device set F_LockedState=0 where F_LockedState=" ).Append( TaskIdx);
|
|
dbo.ExceSQL(sql.ToString());
|
|
|
|
|
|
if (ClearZero == 1)
|
|
{
|
|
|
|
if (mti == 1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE IO_CONTROL SET ERROR_TEXT ='' WHERE Control_ID=" ).Append( fid ).Append( " and Control_STATUS<900");
|
|
dboM.ExceSQL(sql.ToString());
|
|
}
|
|
}
|
|
sql.Remove(0, sql.Length);
|
|
//
|
|
sql.Append("delete from T_Monitor_Task where F_MonitorIndex=" ).Append( TaskIdx);
|
|
dbo.ExceSQL(sql.ToString());
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100127
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
public static int GetExceptionNOFromManageTask(int FID, int ManTaskKind)
|
|
{
|
|
//20100127
|
|
DataTable dt = new DataTable();
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FID, F_ManageTaskKindIndex, FExceptionNO FROM T_Manage_Task WHERE (FID = " + FID + ") AND (F_ManageTaskKindIndex = " + ManTaskKind + ") ");
|
|
//20100127
|
|
dt = dbo.ExceSQL(sql.ToString()).Tables[0];
|
|
if (dt.Rows.Count > 0)
|
|
{
|
|
if (dt.Rows[0]["FExceptionNO"] == DBNull.Value)
|
|
{
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
|
|
return Convert.ToInt32(dt.Rows[0]["FExceptionNO"]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100127
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100127
|
|
dt.Dispose();
|
|
}
|
|
|
|
}
|
|
|
|
static void ReturnManageInfo(int fid, int mti, string cap, bool IFOK)
|
|
{
|
|
//20100127
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//200906240111增加货位记录:入库1-结束位置有货;出库2-起始位置无货;倒库3-起始位置无货,结束位置有货
|
|
//20100127
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT FID, F_ManageTaskKindIndex,FCONTROLTASKTYPE, FSTARTDEVICE,FSTARTCELL, FENDDEVICE,FENDCELL FROM T_Manage_Task where F_ManageTaskKindIndex=" ).Append( mti ).Append( " and FID=" ).Append( fid );
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
switch (dv[0]["FCONTROLTASKTYPE"].ToString())
|
|
{
|
|
case "1":
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE ST_CELL SET FCELLSTATUS = 1 WHERE (FLaneWay=" ).Append( dv[0]["FENDDEVICE"] ).Append( " and FCELLCODE = '" ).Append( dv[0]["FENDCELL"] ).Append( "')");
|
|
dbo.ExceSQL(sql.ToString());
|
|
break;
|
|
case "2":
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE ST_CELL SET FCELLSTATUS =0 WHERE (FLaneWay=" ).Append( dv[0]["FSTARTDEVICE"] ).Append( " and FCELLCODE = '" ).Append( dv[0]["FSTARTCELL"] ).Append( "')");
|
|
dbo.ExceSQL(sql.ToString());
|
|
break;
|
|
case "3":
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE ST_CELL SET FCELLSTATUS = 1 WHERE (FLaneWay=" ).Append( dv[0]["FENDDEVICE"] ).Append( " and FCELLCODE = '" ).Append( dv[0]["FENDCELL"] ).Append( "')");
|
|
dbo.ExceSQL(sql.ToString());
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE ST_CELL SET FCELLSTATUS =0 WHERE (FLaneWay=" ).Append( dv[0]["FSTARTDEVICE"] ).Append( " and FCELLCODE = '" ).Append( dv[0]["FSTARTCELL"] ).Append( "')");
|
|
dbo.ExceSQL(sql.ToString());
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
////////////////////
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("delete from T_Manage_Task where FID=" ).Append( fid ).Append( " and F_ManageTaskKindIndex= " ).Append( mti);
|
|
dbo.ExceSQL(sql.ToString());
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{//20100127
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100127
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
//仿真测试 修改了DB2
|
|
public const string DBSend = "DB1";
|
|
//DB2
|
|
public const string DBGet = "DB2";
|
|
|
|
/// <summary>
|
|
/// 20110216根据ReadSubscription标识找到此订阅的开始设备
|
|
/// </summary>
|
|
/// <param name="sb">ReadSubscription标识</param>
|
|
/// <returns></returns>
|
|
public static Model.MDevice GetDeviceReadSubscriptionDB2Data(StringBuilder sb)
|
|
{
|
|
DataView dv = dbo.ExceSQL("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_DeviceIndex=" + sb.ToString() + ")").Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dv[0]["F_DeviceIndex"]));
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#region 与管理任务交互的调度任务状态
|
|
|
|
/// <summary>
|
|
/// 任务等待,默认0
|
|
/// </summary>
|
|
public static readonly int TASKWAIT = CGetInfo.GetIOControlStatus("TASKWAIT").StatusID;
|
|
/// <summary>
|
|
/// 任务开始运行,默认10
|
|
/// </summary>
|
|
public static readonly int TASKRUN = CGetInfo.GetIOControlStatus("TASKRUN").StatusID;
|
|
/// <summary>
|
|
/// 调度申请改道,默认30
|
|
/// </summary>
|
|
public static readonly int TASKALTERROUTEAPPLY = CGetInfo.GetIOControlStatus("TASKALTERROUTEAPPLY").StatusID;
|
|
/// <summary>
|
|
/// 管理答复改道申请,默认40
|
|
/// </summary>
|
|
public static readonly int TASKALTERROUTEREPLY = CGetInfo.GetIOControlStatus("TASKALTERROUTEREPLY").StatusID;
|
|
/// <summary>
|
|
/// 管理任务被调度删除,默认900
|
|
/// </summary>
|
|
public static readonly int TASKDELETE = CGetInfo.GetIOControlStatus("TASKDELETE").StatusID;
|
|
/// <summary>
|
|
/// 指令重发,默认920
|
|
/// </summary>
|
|
public static readonly int TASKRESTORE = CGetInfo.GetIOControlStatus("TASKRESTORE").StatusID;
|
|
/// <summary>
|
|
/// 人工暂停出库,默认940
|
|
/// </summary>
|
|
public static readonly int TASKSTOPOUTPUT = CGetInfo.GetIOControlStatus("TASKSTOPOUTPUT").StatusID;
|
|
|
|
/// <summary>
|
|
/// 任务类型错,送到拆盘机的不是空托盘组,默认950
|
|
/// </summary>
|
|
public static readonly int TASKTYPEERROR = CGetInfo.GetIOControlStatus("TASKTYPEERROR").StatusID;
|
|
/// <summary>
|
|
/// 任务被取消,搬运到异常出库站台,默认960
|
|
/// </summary>
|
|
public static readonly int TASKCANCEL = CGetInfo.GetIOControlStatus("TASKCANCEL").StatusID;
|
|
/// <summary>
|
|
/// 堆垛机的送货重需要改路径处理,默认970
|
|
/// </summary>
|
|
public static readonly int TASKREPEATINPUT = CGetInfo.GetIOControlStatus("TASKREPEATINPUT").StatusID;
|
|
/// <summary>
|
|
/// 堆垛机的取空处理,调度取消执行管理任务,默认980
|
|
/// </summary>
|
|
public static readonly int TASKEMPTYOUTPUT = CGetInfo.GetIOControlStatus("TASKEMPTYOUTPUT").StatusID;
|
|
/// <summary>
|
|
/// 任务异常完成,默认990
|
|
/// </summary>
|
|
public static readonly int TASKABEND = CGetInfo.GetIOControlStatus("TASKABEND").StatusID;
|
|
/// <summary>
|
|
/// 任务搬运完成,默认999
|
|
/// </summary>
|
|
public static readonly int TASKFINISH = CGetInfo.GetIOControlStatus("TASKFINISH").StatusID;
|
|
/// <summary>
|
|
/// 入库任务RFID比对错误,默认值930
|
|
/// </summary>
|
|
public static readonly int TASKINPUTRFIDERROR = CGetInfo.GetIOControlStatus("TASKINPUTRFIDERROR").StatusID;
|
|
/// <summary>
|
|
/// 20100617管理任务对出库托盘确认接收,默认值50
|
|
/// </summary>
|
|
public static readonly int TASKOUTCONFIRM = CGetInfo.GetIOControlStatus("TASKOUTCONFIRM").StatusID;
|
|
/// <summary>
|
|
/// 20101011双叉极限货位需要更换货叉,默认值800
|
|
/// </summary>
|
|
public static readonly int TASKCHANGEFORK = CGetInfo.GetIOControlStatus("TASKCHANGEFORK").StatusID;
|
|
/// <summary>
|
|
/// 20120820双堆垛机同轨,极限位置需要两个堆垛机组合作业,默认值810
|
|
/// </summary>
|
|
public static readonly int TASKCHANGESTACK = CGetInfo.GetIOControlStatus("TASKCHANGESTACK").StatusID;
|
|
|
|
|
|
/// 20120820双堆垛机同轨,需要缓存的双叉堆垛机,默认值811
|
|
/// </summary>
|
|
public static readonly int TASKEXCHANGE = CGetInfo.GetIOControlStatus("TASKEXCHANGE").StatusID;
|
|
|
|
/// <summary>
|
|
/// 20101011调度已经获取任务,默认值7
|
|
/// </summary>
|
|
public static readonly int TASKCONTROLREADED = CGetInfo.GetIOControlStatus("TASKCONTROLREADED").StatusID;
|
|
/// <summary>
|
|
/// 20101028堆垛机单叉入库任务立即执行:默认值,25
|
|
/// </summary>
|
|
public static readonly int TASKSINGLEFORKRUN = CGetInfo.GetIOControlStatus("TASKSINGLEFORKRUN").StatusID;
|
|
#region 扫码异常处理20110210
|
|
/// <summary>
|
|
/// 20110210组箱区入库、出库扫码异常:默认值,70
|
|
/// </summary>
|
|
public static readonly int TASKINPUTSCANERROR = CGetInfo.GetIOControlStatus("TASKINPUTSCANERROR").StatusID;
|
|
/// <summary>
|
|
/// 20110210组箱区二楼出库扫码异常:默认值,60
|
|
/// </summary>
|
|
public static readonly int TASKOUTPUTSCANERROR = CGetInfo.GetIOControlStatus("TASKOUTPUTSCANERROR").StatusID;
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region 堆垛机取空和送重的故障码
|
|
///// <summary>
|
|
///// 堆垛机的送重故障码,默认48(双叉中的近叉)
|
|
///// </summary>
|
|
//public static readonly int STACKREPEATINPUT =CGetInfo.GetIOControlStatus("STACKREPEATINPUT").StatusID;
|
|
///// <summary>
|
|
///// 堆垛机的取空故障码,默认49(双叉中的近叉)
|
|
///// </summary>
|
|
//public static readonly int STACKEMPTYOUTPUT =CGetInfo.GetIOControlStatus("STACKEMPTYOUTPUT").StatusID;
|
|
///// <summary>
|
|
///// 堆垛机的送重故障码,默认60(双叉中的远叉)
|
|
///// </summary>
|
|
//public static readonly int STACKREPEATINPUTAWAY = CGetInfo.GetIOControlStatus("STACKREPEATINPUTAWAY").StatusID;
|
|
///// <summary>
|
|
///// 堆垛机的取空故障码,默认62(双叉中的远叉)
|
|
///// </summary>
|
|
//public static readonly int STACKEMPTYOUTPUTAWAY = CGetInfo.GetIOControlStatus("STACKEMPTYOUTPUTAWAY").StatusID;
|
|
///// <summary>
|
|
///// 堆垛机的送重故障码,默认61(双叉)
|
|
///// </summary>
|
|
//public static readonly int STACKREPEATINPUTDOUBLE = CGetInfo.GetIOControlStatus("STACKREPEATINPUTDOUBLE").StatusID;
|
|
///// <summary>
|
|
///// 堆垛机的取空故障码,默认63(双叉)
|
|
///// </summary>
|
|
//public static readonly int STACKEMPTYOUTPUTDOUBLE = CGetInfo.GetIOControlStatus("STACKEMPTYOUTPUTDOUBLE").StatusID;
|
|
|
|
#endregion
|
|
|
|
#region 设备类型
|
|
/// <summary>
|
|
/// 20110803堆垛机的设备类型,默认值1
|
|
/// </summary>
|
|
public static readonly int StackKind = CGetInfo.GetDeviceKind("StackKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803输送机的设备类型,默认值2
|
|
/// </summary>
|
|
public static readonly int ConveyorKind = CGetInfo.GetDeviceKind("ConveyorKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803升降机的设备类型,默认值3
|
|
/// </summary>
|
|
public static readonly int LifterKind = CGetInfo.GetDeviceKind("LifterKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803RGV穿梭车的设备类型,默认值4
|
|
/// </summary>
|
|
public static readonly int RGVKind = CGetInfo.GetDeviceKind("RGVKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803叠盘机的设备类型,默认值5
|
|
/// </summary>
|
|
public static readonly int PileKind = CGetInfo.GetDeviceKind("PileKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803AGV车的设备类型,默认值6
|
|
/// </summary>
|
|
public static readonly int AGVKind = CGetInfo.GetDeviceKind("AGVKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803托盘条码扫描仪的设备类型,默认值7
|
|
/// </summary>
|
|
public static readonly int BarcodeScanKind = CGetInfo.GetDeviceKind("BarcodeScanKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803称重设备的设备类型,默认值8
|
|
/// </summary>
|
|
public static readonly int WeighKind = CGetInfo.GetDeviceKind("WeighKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803站台的设备类型,默认值9
|
|
/// </summary>
|
|
public static readonly int PlatFormKind = CGetInfo.GetDeviceKind("PlatFormKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803巷道的设备类型,默认值10
|
|
/// </summary>
|
|
public static readonly int LanewayKind = CGetInfo.GetDeviceKind("LanewayKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803AGV通道的设备类型,默认值11
|
|
/// </summary>
|
|
public static readonly int AGVLane = CGetInfo.GetDeviceKind("AGVLane").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803虚拟关键设备的设备类型,默认值12
|
|
/// </summary>
|
|
public static readonly int DummyKind = CGetInfo.GetDeviceKind("DummyKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803空设备的设备类型,默认值13
|
|
/// </summary>
|
|
public static readonly int BlankKind = CGetInfo.GetDeviceKind("BlankKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803确认按钮的设备类型,默认值14
|
|
/// </summary>
|
|
public static readonly int ConfirmButtonKind = CGetInfo.GetDeviceKind("ConfirmButtonKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803确认按钮的设备类型,默认值15
|
|
/// </summary>
|
|
public static readonly int TimerKind = CGetInfo.GetDeviceKind("TimerKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803指示灯的设备类型,默认值16
|
|
/// </summary>
|
|
public static readonly int LightKind = CGetInfo.GetDeviceKind("LightKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803码垛机的设备类型,默认值17
|
|
/// </summary>
|
|
public static readonly int RobotKind = CGetInfo.GetDeviceKind("RobotKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803检测开关的设备类型,默认值18
|
|
/// </summary>
|
|
public static readonly int DetectSwitchKind = CGetInfo.GetDeviceKind("DetectSwitchKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803气动推杆设备类型,默认值19
|
|
/// </summary>
|
|
public static readonly int HandspikeKind = CGetInfo.GetDeviceKind("HandspikeKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803气动阻挡设备类型,默认值20
|
|
/// </summary>
|
|
public static readonly int BlockKind = CGetInfo.GetDeviceKind("BlockKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803一号工程码扫描器设备类型,默认值21
|
|
/// </summary>
|
|
public static readonly int FirstProjectCodeScanKind = CGetInfo.GetDeviceKind("FirstProjectCodeScanKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803现场控制触摸屏申请信息设备类型,默认值22
|
|
/// </summary>
|
|
public static readonly int HMIKind = CGetInfo.GetDeviceKind("HMIKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803一号工程码计数器设备类型,默认值23
|
|
/// </summary>
|
|
public static readonly int FirstProjectCodeCounterKind = CGetInfo.GetDeviceKind("FirstProjectCodeCounterKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803机器人码垛信息设备类型,默认值24
|
|
/// </summary>
|
|
public static readonly int RobotPileInfoKind = CGetInfo.GetDeviceKind("RobotPileInfoKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803机器人码垛通道设备类型,默认值25
|
|
/// </summary>
|
|
public static readonly int RobotPileLaneKind = CGetInfo.GetDeviceKind("RobotPileLaneKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803班次产量计数器设备类型,默认值26
|
|
/// </summary>
|
|
public static readonly int ClassOutputCounter = CGetInfo.GetDeviceKind("ClassOutputCounter").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803烟箱品牌设备类型,默认值27
|
|
/// </summary>
|
|
public static readonly int TobaccoBoxBreed = CGetInfo.GetDeviceKind("TobaccoBoxBreed").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803光电检测开始点设备类型,默认值28
|
|
/// </summary>
|
|
public static readonly int DetectSwitchStartKind = CGetInfo.GetDeviceKind("DetectSwitchStartKind").DeviceKindIndex;
|
|
|
|
/// <summary>
|
|
/// 20110803摄像头设备类型,默认值29
|
|
/// </summary>
|
|
public static readonly int CameraKind = CGetInfo.GetDeviceKind("CameraKind").DeviceKindIndex;
|
|
/// <summary>
|
|
/// 20110803和管理交互的虚拟设备类型,默认值30
|
|
/// </summary>
|
|
public static readonly int IOControlDummyKind = CGetInfo.GetDeviceKind("IOControlDummyKind").DeviceKindIndex;
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
}
|