AHTC/RGD/RGD.DataService/CGeneralFunction.cs
2025-05-19 09:22:33 +08:00

1333 lines
51 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using RGD.DBUtility;
using System;
using System.Data;
namespace RGD.DataService
{
public static class CGeneralFunction
{
private static Model.MDevice devinfo;
/// <summary>
/// 双叉关联任务是否能同步运行
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public static bool DoubleForkIfSync(int monitorIndex, int devIndex, int devKind)
{//查找关联的调度任务(主任务或者辅助任务);输送机与堆垛机区别对待
//如果只能找到关联任务未被拆分那么认为能同步运行20100323
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
int FID = GetManageTaskIndexfromMonitor(monitorIndex);
int devOrder = GetDeviceOrderFromMonitor(monitorIndex);
int dfx = GetDoubleForkX(mankind, FID, devIndex, devOrder);
int mx = GetXCoorFromMonitor(monitorIndex, devIndex, devOrder);
int dfy = GetDoubleForkY(mankind, FID, devIndex, devOrder);
int my = GetYCoorFromMonitor(monitorIndex, devIndex, devOrder);
int dfz = GetDoubleForkZ(mankind, FID, devIndex, devOrder);
int mz = GetZCoorFromMonitor(monitorIndex, devIndex, devOrder);
if (GetDoubleForkUnIntoStep(monitorIndex) == true) return true;
switch (devKind)
{
case 1:
//如果主任务和副任务的列数都是1列则是1121、1122顶升机构可以同步
if (1 == GetDoubleForkX(mankind, FID, devIndex, devOrder) && (GetXCoorFromMonitor(monitorIndex, devIndex, devOrder) == 1))
{
return true;
}
//堆垛机的同排同层临列可以同步并且ST_CELL的FDoubleFork值匹配
if ((Math.Abs(dfx - mx) == 1) && (dfy == my) && (mz == dfz))
{
if (EqualMonitorDoubleFork(mankind, FID, devIndex, devOrder) == true)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
case 2:
//输送机同步
return true;
case 6:
//AGV临列可以同步并且ST_CELL的F_UseAwayFork值匹配
if (Math.Abs(dfx - mx) == 1)
{
if (EqualAGVGateDoubleFork(mankind, FID, devIndex, devOrder) == true)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
default:
return false;
}
}
/// <summary>
/// 获得双叉控制的堆垛机的送货任务(已经分配远货叉或者近货叉的任务)的值
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public static string GetUseAwayFork(int monitorIndex)
{
DataView dv = DbHelperSQL.Query("SELECT F_UseAwayFork FROM T_Monitor_Task WHERE (F_MonitorIndex = " + monitorIndex + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
return dv[0][0].ToString();
}
else
{
return "-";
}
}
/// <summary>
/// 获取双叉控制的堆垛机的取货任务尚未指定应该使用哪个货叉是否使用远货叉主货叉0近货叉1远货叉
/// </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)
{
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; int UseAwayFork = 1;
try
{
dv = DbHelperSQL.Query("SELECT FDoubleFork FROM ST_CELL WHERE (FWAREHOUSE='" + FWAREHOUSE
+ "') and (F_Z = " + z + ") AND (F_X = " + x + ") AND (F_Y = " + y + ")").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 = null;
}
}
public static int GetDoubleForkFromST_CELL(int z, int x, int y, string FWAREHOUSE)
{
DataView dv; int UseAwayFork = 1;
try
{
dv = DbHelperSQL.Query("SELECT FDoubleFork FROM ST_CELL WHERE (FWAREHOUSE='" + FWAREHOUSE
+ "') and (F_Z = " + z + ") AND (F_X = " + x + ") AND (F_Y = " + y + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
UseAwayFork = Convert.ToInt32(dv[0][0]);
}
else
{
UseAwayFork = 0;
}
return UseAwayFork;
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
public static string GetWAREHOUSEFromSTCELL(int stackIndex)
{
DataView dv;
try
{
dv = DbHelperSQL.Query("SELECT FWAREHOUSE FROM ST_CELL WHERE (FStack = " + stackIndex + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
return dv[0][0].ToString();
}
else
{
return "";
}
}
catch (Exception ex)
{
throw ex;
}
finally { dv = null; }
}
/// <summary>
/// 查找双叉关联任务的列坐标
/// </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;
string xc = "F_NumParam2";
if (GetDeviceKindIdx(devIdx) == 1)
{
if (devOrder == 4)
{
xc = "F_NumParam2";
}
else if (devOrder == 5)
{
xc = "F_NumParam5";
}
}
try
{
//查找被关联辅助设备指令索引的列坐标
DataView dv0 = DbHelperSQL.Query("select F_RELATIVECONTORLID from T_Manage_Task where (FID = " +
fid + ") AND (F_ManageTaskKindIndex = " + mankind + ")").Tables[0].DefaultView;
if (dv0.Count == 0) return -1;
string sql = "SELECT " + xc + " FROM T_Monitor_Task Where ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind
+ ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ") AND (T_Monitor_Task.F_ManageTaskIndex=" + dv0[0]["F_RELATIVECONTORLID"] + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][xc]);
}
dv0 = DbHelperSQL.Query("select T_Manage_Task.FID from T_Manage_Task where (T_Manage_Task.F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ")").Tables[0].DefaultView;
if (dv0.Count == 0) return -1;
//查找关联自己的主设备指令索引的列坐标
sql = "SELECT " + xc + " FROM T_Monitor_Task Where ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder
+ ") and (T_Monitor_Task.F_ManageTaskIndex= " + dv0[0]["FID"] + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][xc]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <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;
string yc = "F_NumParam3";
if (GetDeviceKindIdx(devIdx) == 1)
{
if (devOrder == 4)
{
yc = "F_NumParam3";
}
else if (devOrder == 5)
{
yc = "F_NumParam6";
}
}
try
{
//string aa22 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
DataView dv0 = DbHelperSQL.Query("select F_RELATIVECONTORLID from T_Manage_Task where FID = " +
fid + " and F_ManageTaskKindIndex=" + mankind + "").Tables[0].DefaultView;
if (dv0.Count == 0) return -1;
//查找被关联辅助设备指令索引的层坐标
string sql = "SELECT " + yc + " FROM T_Monitor_Task Where (T_Monitor_Task.F_ManageTaskIndex=" + dv0[0]["F_RELATIVECONTORLID"] + " " +
" ) and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][yc]);
}
dv0 = DbHelperSQL.Query("select FID from T_Manage_Task where F_RELATIVECONTORLID = " +
fid + " and F_ManageTaskKindIndex=" + mankind + "").Tables[0].DefaultView;
if (dv0.Count == 0) return -1;
//string aa212 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
//查找关联自己的主设备指令索引的层坐标
sql = "SELECT " + yc + " FROM T_Monitor_Task Where (T_Monitor_Task.F_ManageTaskIndex=" + dv0[0]["FID"] + " " +
") and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
//string aa2qq2 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][yc]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <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;
string zc = "F_NumParam1";
if (GetDeviceKindIdx(devIdx) == 1)
{
if (devOrder == 4)
{
zc = "F_NumParam1";
}
else if (devOrder == 5)
{
zc = "F_NumParam4";
}
}
try
{
//查找被关联辅助设备指令索引的排坐标
string sql = "SELECT " + zc + " FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " +
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][zc]);
}
//查找关联自己的主设备指令索引的排坐标
sql = "SELECT " + zc + " 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_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][zc]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <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; 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;
//查找被关联辅助设备指令索引的列坐标
string sql = "SELECT " + zc + "," + xc + "," + yc + ",F_UseAwayFork FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " +
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).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 = "SELECT " + zc + "," + xc + "," + yc + ",F_UseAwayFork 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_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).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 = "SELECT " + zc + "," + xc + "," + yc + ",F_UseAwayFork FROM T_Monitor_Task Where ( F_ManageTASKKINDINDEX = " + mankind + ") AND (F_ManageTaskIndex = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).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 = null;
}
}
/// <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)
{
DataView dv;
string xc = "F_NumParam2";
if (GetDeviceKindIdx(devIdx) == 6)
{
if (devOrder == 1)
{
xc = "F_NumParam2";
}
else if (devOrder == 2)
{
xc = "F_NumParam5";
}
else if (devOrder == 4)
{
xc = "F_NumParam5";
}
}
try
{
int x = 0, x1 = 0;
int channelleft = 0, channelleft1 = 0, xd = 0, xd1 = 0;
//查找被关联辅助设备指令索引的列坐标
string sql = "SELECT " + xc + " FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " +
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
xd = Convert.ToInt32(dv[0][xc]);
dv = DbHelperSQL.Query("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;
}
}
else
{
//查找关联自己的主设备指令索引的列坐标
sql = "SELECT " + xc + " 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_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
xd = Convert.ToInt32(dv[0][xc]);
dv = DbHelperSQL.Query("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 = "SELECT " + xc + " FROM T_Monitor_Task Where ( F_ManageTASKKINDINDEX = " + mankind + ") AND (F_ManageTaskIndex = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
xd1 = Convert.ToInt32(dv[0][xc]);
dv = DbHelperSQL.Query("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 = DbHelperSQL.Query("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 = DbHelperSQL.Query("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 = null;
}
}
/// <summary>
/// 在设备指令队列表获取Z 排坐标
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public static int GetZCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
{
DataView dv;
string zc = "F_NumParam1";
if (GetDeviceKindIdx(devIdx) == 1)
{
if (devOrder == 2 || devOrder == 4)
{
zc = "F_NumParam1";
}
else if (devOrder == 3 || devOrder == 5)
{
zc = "F_NumParam4";
}
}
try
{
dv = DbHelperSQL.Query("SELECT " + zc + " FROM T_Monitor_Task WHERE (F_MonitorIndex = " + monitorIndex + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][0]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 在设备指令队列表获取X 列坐标
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public static int GetXCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
{
DataView dv;
string xc = "F_NumParam2";
if (GetDeviceKindIdx(devIdx) == 1)
{
if (devOrder == 4)
{
xc = "F_NumParam2";
}
else if (devOrder == 5)
{
xc = "F_NumParam5";
}
}
try
{
dv = DbHelperSQL.Query("SELECT " + xc + " FROM T_Monitor_Task WHERE (F_MonitorIndex = " + monitorIndex + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][0]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 在设备指令队列表获取Y 层坐标
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public static int GetYCoorFromMonitor(int monitorIndex, int devIdx, int devOrder)
{
DataView dv;
string yc = "F_NumParam3";
if (GetDeviceKindIdx(devIdx) == 1)
{
if (devOrder == 4)
{
yc = "F_NumParam3";
}
else if (devOrder == 5)
{
yc = "F_NumParam6";
}
}
try
{
dv = DbHelperSQL.Query("SELECT " + yc + " FROM T_Monitor_Task WHERE (F_MonitorIndex = " + monitorIndex + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0][0]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 返回双叉关联设备指令信息【0】设备指令索引【1】提前检测【2】设备索引【3】路径
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <param name="devIdx">设备索引</param>
/// <returns></returns>
public static string[] GetDoubleForkMonitorInfo(int monitorIndex, int devIdx)
{
DataView dv;
string[] rr = null;
try
{
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
int devOrder = GetDeviceOrderFromMonitor(monitorIndex);
//查找被关联辅助设备指令索引的列坐标
string sql = "SELECT F_MonitorIndex,F_AheadDetect,F_DeviceIndex,F_RouteID FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " +
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
rr = new string[4];
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();
}
else
{
//查找关联自己的主设备指令索引的列坐标
sql = "SELECT F_MonitorIndex,F_AheadDetect,F_DeviceIndex,F_RouteID 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_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and F_DeviceCommandIndex=" + devOrder + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
rr = new string[4];
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();
}
else
{
return null;
}
}
return rr;
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
rr = null;
}
}
/// <summary>
/// 是否有任务状态大于0的双叉关联任务的存在
/// </summary>
/// <param name="monitorIndex"></param>
/// <param name="devIdx"></param>
/// <returns></returns>
public static bool GetDoubleForkMonitorInfo(int monitorIndex, int devIdx, int status)
{
DataView dv;
try
{
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
//查找被关联辅助设备指令索引的列坐标
string sql = "SELECT F_MonitorIndex,F_AheadDetect,F_DeviceIndex,F_RouteID FROM T_Manage_Task,T_Monitor_Task Where (T_Manage_Task.F_RELATIVECONTORLID = T_Monitor_Task.F_ManageTaskIndex " +
" AND T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX) and ( T_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and f_status>" + status + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return true;
}
else
{
//查找关联自己的主设备指令索引的列坐标
sql = "SELECT F_MonitorIndex,F_AheadDetect,F_DeviceIndex,F_RouteID 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_Monitor_Task.F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ") and (F_DeviceIndex=" + devIdx + " and f_status>" + status + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 返回未拆分的双叉关联设备指令,true 代表有未拆分的双叉关联设备指令
/// </summary>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public static bool GetDoubleForkUnIntoStep(int monitorIndex)
{
DataView dv;
try
{
int mankind = GetManageTaskKindIndexFromMonitor(monitorIndex);
int fid = GetManageTaskIndexfromMonitor(monitorIndex);
//查找被关联辅助设备指令索引的列坐标
string sql = "SELECT F_RELATIVECONTORLID FROM T_Manage_Task Where (T_Manage_Task.F_RELATIVECONTORLID <>-1 ) and ( F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
fid + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
sql = "SELECT FID FROM T_Manage_Task Where ( F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
dv[0][0] + " and FIntoStepOK<>'1')";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return true;
}
}
else
{
//查找关联自己的主设备指令索引的列坐标
sql = "SELECT FID FROM T_Manage_Task Where ( F_ManageTaskKindIndex = " + mankind + ") AND (F_RELATIVECONTORLID = " +
fid + ")";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
sql = "SELECT FID FROM T_Manage_Task Where ( F_ManageTaskKindIndex = " + mankind + ") AND (FID = " +
dv[0][0] + " and FIntoStepOK<>'1')";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return true;
}
}
}
return false;
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
public static int GetManageTaskIndexfromMonitor(int monitorIdx)
{
//20100108
DataView dv;
try
{
//20100108
dv = DbHelperSQL.Query("SELECT F_ManageTaskIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = " + monitorIdx + ")").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 = null;
}
}
public static int GetManageTaskKindIndexFromMonitor(int monitorIdx)
{//20100108
DataView dv;
try
{
//20100108
dv = DbHelperSQL.Query("SELECT F_ManageTaskKindIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = " + monitorIdx + ")").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 = null;
}
}
/// <summary>
/// 在调度队列中找到设备命令
/// </summary>
/// <param name="MonitorIndex">调度所引</param>
/// <returns></returns>
public static int GetDeviceOrderFromMonitor(int MonitorIndex)
{
DataView dv;
try
{
string sql = "select F_DeviceCommandIndex from T_Monitor_Task where (F_DeviceCommandIndex IS NOT NULL) and F_MonitorIndex=" + MonitorIndex;
//20100108
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_DeviceCommandIndex"]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
public static int GetDeviceKindIdx(int devIdx)
{
try
{
devinfo = BaseDeviceService.GetDeviceInfo(devIdx);
return devinfo.DeviceKind;
}
catch (Exception ex)
{
throw ex;
}
}
public static int GetDeviceIndexFromMonitor(int MonitorIndex)
{
//20100108
DataView dv;
try
{
string sql = "select F_DeviceIndex from T_Monitor_Task where (F_DeviceIndex IS NOT NULL) and F_MonitorIndex=" + MonitorIndex;
//20100108
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_DeviceIndex"]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 获得表型层数
/// </summary>
/// <param name="MonitorIndex"></param>
/// <returns></returns>
public static int GetBoxQuantityFromMonitor(int MonitorIndex)
{
//20100108
DataView dv; //NUMParam5 表示表箱层数
try
{
string sql = "select F_NumParam5 from T_Monitor_Task where (F_NumParam5 IS NOT NULL) and F_MonitorIndex=" + MonitorIndex;
//20100108
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_NumParam5"]);
}
else
{
return 0;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 获得管理下任务12029输送机处的类型
/// </summary>
/// <param name="MonitorIndex"></param>
/// <returns></returns>
public static int GetTypeFromMonitor(int MonitorIndex)
{
//20120212
DataView dv;
try
{
string sql = "select * from T_Manage_Task,T_Monitor_Task where T_Manage_Task.fid= T_Monitor_Task.F_ManageTaskIndex and F_MonitorIndex=" + MonitorIndex;
//20100108
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["SENDOUT_TYPE"]);
}
else
{
return 0;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 双叉堆垛机在一个输送机取送盘时需要额外检测的探物开关(隔壁输送机是否有探物)
/// </summary>
/// <param name="devinx"></param>
/// <returns></returns>
public static int GetDoubleForkDetect(int devinx)
{
try
{
devinfo = BaseDeviceService.GetDeviceInfo(devinx);
return Convert.ToInt32(devinfo.DoubleForkDetect);
}
catch (Exception ex)
{
throw ex;
}
finally
{
devinfo = null;
}
}
#region
/// <summary>
/// 任务等待默认0
/// </summary>
public static readonly int TASKWAIT = IOControlService.GetIOControlStatus("TASKWAIT").StatusID;
/// <summary>
/// 任务开始运行默认10
/// </summary>
public static readonly int TASKRUN = IOControlService.GetIOControlStatus("TASKRUN").StatusID;
/// <summary>
/// 调度申请改道默认30
/// </summary>
public static readonly int TASKALTERROUTEAPPLY = IOControlService.GetIOControlStatus("TASKALTERROUTEAPPLY").StatusID;
/// <summary>
/// 管理答复改道申请默认40
/// </summary>
public static readonly int TASKALTERROUTEREPLY = IOControlService.GetIOControlStatus("TASKALTERROUTEREPLY").StatusID;
/// <summary>
/// 管理任务被调度删除默认900
/// </summary>
public static readonly int TASKDELETE = IOControlService.GetIOControlStatus("TASKDELETE").StatusID;
/// <summary>
/// 人工暂停出库默认940
/// </summary>
public static readonly int TASKSTOPOUTPUT = IOControlService.GetIOControlStatus("TASKSTOPOUTPUT").StatusID;
/// <summary>
/// 拆盘任务完成默认950
/// </summary>
public static readonly int TASKUNPACKFINISH = IOControlService.GetIOControlStatus("TASKUNPACKFINISH").StatusID;
/// <summary>
/// 任务类型错送到拆盘机的不是空托盘组默认955
/// </summary>
public static readonly int TASKTYPEERROR = IOControlService.GetIOControlStatus("TASKTYPEERROR").StatusID;
/// <summary>
/// 配送出库到叠盘输送机默认960
/// </summary>
public static readonly int TASKPACKFINISH = IOControlService.GetIOControlStatus("TASKPACKFINISH").StatusID;
/// <summary>
/// 任务被取消搬运到异常出库站台默认966
/// </summary>
public static readonly int TASKCANCEL = IOControlService.GetIOControlStatus("TASKCANCEL").StatusID;
/// <summary>
/// 堆垛机的送货重需要改路径处理默认970
/// </summary>
public static readonly int TASKREPEATINPUT = IOControlService.GetIOControlStatus("TASKREPEATINPUT").StatusID;
/// <summary>
/// 堆垛机的取空处理调度取消执行管理任务默认980
/// </summary>
public static readonly int TASKEMPTYOUTPUT = IOControlService.GetIOControlStatus("TASKEMPTYOUTPUT").StatusID;
/// <summary>
/// 任务异常完成默认990
/// </summary>
public static readonly int TASKABEND = IOControlService.GetIOControlStatus("TASKABEND").StatusID;
/// <summary>
/// 任务搬运完成默认999
/// </summary>
public static readonly int TASKFINISH = IOControlService.GetIOControlStatus("TASKFINISH").StatusID;
/// <summary>
/// 入库任务RFID比对错误默认值930
/// </summary>
public static readonly int TASKINPUTRFIDERROR = IOControlService.GetIOControlStatus("TASKINPUTRFIDERROR").StatusID;
/// <summary>
/// 20100617管理任务对出库托盘确认接收默认值50
/// </summary>
public static readonly int TASKOUTCONFIRM = IOControlService.GetIOControlStatus("TASKOUTCONFIRM").StatusID;
/// <summary>
/// 20101011双叉极限货位需要更换货叉默认值800
/// </summary>
public static readonly int TASKCHANGEFORK = IOControlService.GetIOControlStatus("TASKCHANGEFORK").StatusID;
/// <summary>
/// 20101011调度已经获取任务默认值7
/// </summary>
public static readonly int TASKCONTROLREADED = IOControlService.GetIOControlStatus("TASKCONTROLREADED").StatusID;
/// <summary>
/// 20101028堆垛机单叉入库任务立即执行默认值25
/// </summary>
public static readonly int TASKSINGLEFORKRUN = IOControlService.GetIOControlStatus("TASKSINGLEFORKRUN").StatusID;
#endregion
#region
/// <summary>
/// 堆垛机的送重故障码默认48双叉中的近叉
/// </summary>
public static readonly int STACKREPEATINPUT = IOControlService.GetIOControlStatus("STACKREPEATINPUT").StatusID;
/// <summary>
/// 堆垛机的取空故障码默认49双叉中的近叉
/// </summary>
public static readonly int STACKEMPTYOUTPUT = IOControlService.GetIOControlStatus("STACKEMPTYOUTPUT").StatusID;
/// <summary>
/// 堆垛机的送重故障码默认60双叉中的远叉
/// </summary>
public static readonly int STACKREPEATINPUTAWAY = IOControlService.GetIOControlStatus("STACKREPEATINPUTAWAY").StatusID;
/// <summary>
/// 堆垛机的取空故障码默认62双叉中的远叉
/// </summary>
public static readonly int STACKEMPTYOUTPUTAWAY = IOControlService.GetIOControlStatus("STACKEMPTYOUTPUTAWAY").StatusID;
/// <summary>
/// 堆垛机的送重故障码默认61双叉
/// </summary>
public static readonly int STACKREPEATINPUTDOUBLE = IOControlService.GetIOControlStatus("STACKREPEATINPUTDOUBLE").StatusID;
/// <summary>
/// 堆垛机的取空故障码默认63双叉
/// </summary>
public static readonly int STACKEMPTYOUTPUTDOUBLE = IOControlService.GetIOControlStatus("STACKEMPTYOUTPUTDOUBLE").StatusID;
#endregion
}
}