using System ;
using System.Collections.Generic ;
using System.Text ;
using System.Data ;
using DBFactory ;
using CommLayerFactory ;
using ICommLayer ;
using CommonLib ;
using System.Text.RegularExpressions ;
namespace WcfControlMonitorLib
{
/// <summary>
/// Creator:Richard.liu
/// 通用函数类库
/// </summary>
public class CCommonFunction
{
//object lockob = new object();
string _D isassembleTaskError ;
public string DisassembleTaskError
{
get { return _D isassembleTaskError ; }
set { _D isassembleTaskError = value ; }
}
DBOperator dboM = CStaticClass . dboM ;
DBOperator dbo = CStaticClass . dbo ;
static CGetState cgs = new CGetState ( ) ; //20161231
Model . MDevice devinfo ;
StringBuilder sql = new StringBuilder ( ) ;
public static event CDataSourceChangeEventHandler DataChange ;
public static void OnDataChange ( object sender , CDataChangeEventArgs e )
{
if ( DataChange ! = null )
{
DataChange ( sender , e ) ;
}
}
public static event RefreshMonitorEventHandler RefreshMonitor ;
public static void OnRefreshMonitor ( object sender , RefreshMonitorEventArgs e )
{
if ( RefreshMonitor ! = null )
{
RefreshMonitor ( e ) ;
}
}
public CCommonFunction ( )
{
}
#region 拆分设备指令
/// <summary>
/// 获得绑定在主设备的探物光电设备索引
/// </summary>
/// <param name="devinx">主设备索引</param>
/// <returns></returns>
public string GetBindingDeviceIndex ( int devinx )
{
//20101118
devinfo = Model . CGetInfo . GetDeviceInfo ( devinx ) ;
if ( devinfo . BindingDevice = = null ) return "" ;
return devinfo . BindingDevice ;
}
/// <summary>
/// 获得输送机设备的出库口探物光电的设备索引值
/// </summary>
/// <param name="devinx">设备索引</param>
/// <returns></returns>
public string GetBindingDeviceIndexOut ( int devinx )
{
//20101118
devinfo = Model . CGetInfo . GetDeviceInfo ( devinx ) ;
if ( devinfo . BindingDeviceOut = = null ) return "" ;
return devinfo . BindingDeviceOut ;
}
/// <summary>
/// 发送设备的送出指令时,需要检测的光电开关设备索引
/// </summary>
/// <param name="devinx">输送设备索引</param>
/// <returns></returns>
public string GetSendOutDetect ( int devinx )
{
//20101118
devinfo = Model . CGetInfo . GetDeviceInfo ( devinx ) ;
if ( devinfo . SendOutDetect = = null ) return "" ;
return devinfo . SendOutDetect ;
}
public string GetBeDetectedDevices ( int devinx )
{
devinfo = Model . CGetInfo . GetDeviceInfo ( devinx ) ;
return devinfo . BeDetected ;
//string sql = "SELECT F_BeDetected FROM T_Base_Device WHERE (F_DeviceIndex = " + devinx + ") and F_BeDetected is not null";
//DataView db = dbo.ExceSQL(sql).Tables[0].DefaultView;
//if (db.Count > 0)
//{
// return db[0]["F_BeDetected"].ToString();
//}
//else
// return "";
}
/// <summary>
/// //获得指定调度任务的设备指令索引
/// </summary>
/// <param name="managerTaskIndex"></param>
/// <param name="managerTaskKindIndex"></param>
/// <returns>设备指令索引值1--10000</returns>
public int GetMonitorIndex ( long managerTaskIndex , int managerTaskKindIndex )
{ //20110104
DataView dvMt = new DataView ( ) ;
try
{
int maxIdx = 0 ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Base_Monitor_Task_Index" ) ;
//20100108
dvMt = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvMt . Count > 0 & & dvMt [ 0 ] [ "F_MonitorIndex" ] ! = DBNull . Value )
{
maxIdx = ( Convert . ToInt32 ( dvMt [ 0 ] [ "F_MonitorIndex" ] ) + 1 ) ;
if ( maxIdx > = 2 9 9 9 9 ) //预留999个给接近上限的拆分任务(29000)//20120328
{
maxIdx = 1 ;
}
}
else //现在没有该管理的设备指令记录
{
maxIdx = 1 ;
}
//判断调度任务表是否有重复值
if ( IFExitMonitorIndex ( maxIdx ) = = true )
{
UpdateMonitorIndex ( maxIdx ) ;
maxIdx = GetMonitorIndex ( managerTaskIndex , managerTaskKindIndex ) ;
}
UpdateMonitorIndex ( maxIdx ) ;
return maxIdx ;
}
catch ( Exception ex )
{
_D isassembleTaskError = "获得指定调度任务的设备指令索引失败!" + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dvMt . Dispose ( ) ;
}
}
public void UpdateMonitorIndex ( int MonitorIndex )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Monitor_Task_Index set F_MonitorIndex=" ) . Append ( MonitorIndex ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
public string GetStackCoordinateFromLaneGate ( int Laneway , int device )
{
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_ZXY FROM T_Base_Lane_Gate WHERE (F_LaneGateDeviceIndex = " ) . Append ( device ) . Append ( ") AND (F_LaneIndex = " ) . Append ( Laneway ) . 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>
/// 20110510判断设备是否是路径起始设备
/// </summary>
/// <param name="deviceidx"></param>
/// <returns></returns>
public bool IfRouteStartDevice ( int deviceidx )
{
object ob = dbo . GetSingle ( string . Format ( "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = {0})" , deviceidx ) ) ;
if ( ob ! = null )
{
return true ;
}
else
{
return false ;
}
}
/// <summary>
/// 使用正则表达式验证字符串
/// </summary>
/// <param name="strCode">待验证字符串</param>
/// <returns>合法返回true,否则返回false</returns>
public bool GetCodeCheck ( string strCode )
{
Match mCode = Regex . Match ( strCode , CStaticClass . StockCodeCheck ) ;
if ( mCode . Success )
{
return true ;
}
else
{
return false ;
}
}
/// <summary>
/// 获得搬运路径类型
/// </summary>
/// <param name="FCONTROLTASKTYPE">调度任务下发的搬运任务类型</param>
/// <returns></returns>
public string GetIOType ( string FCONTROLTASKTYPE )
{
//20100108
DataSet ds = new DataSet ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FCODE, FINTERCODE FROM T_ITEMTASKTYPE where FCODE='" ) . Append ( FCONTROLTASKTYPE ) . Append ( "'" ) ;
ds = dbo . ExceSQL ( sql . ToString ( ) ) ;
if ( ds . Tables [ 0 ] . DefaultView . Count > 0 )
{
return ds . Tables [ 0 ] . DefaultView [ 0 ] [ "FINTERCODE" ] . ToString ( ) ;
}
else
return "" ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
ds . Dispose ( ) ;
}
}
/// <summary>
/// 查看用户指定的任务优先级原则:0,按照调度任务优先级;1,入库优先,携带符合执行条件的出库任务;
/// 2,出库优先,携带符合执行条件的入库任务;3,单纯入库优先,执行完所有入库任务后再执行出库任务;
/// 4,单纯出库优先,执行完所有出库任务后再执行入库任务。
/// </summary>
/// <returns>优先级索引值0--4</returns>
public int SelectTaskPriPrecept ( )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_PRINo , F_PRIName , F_IfChecked FROM T_Base_PRI WHERE (F_IfChecked = '1')" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_PRINo" ] ) ;
}
else
{
return 0 ; //默认值0:按照调度任务优先级
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public int GetLaneWayFromLaneInfo ( int stackIndex )
{
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
devinfo = Model . CGetInfo . GetDeviceInfo ( stackIndex ) ;
if ( devinfo . VirtualStack > 0 ) stackIndex = devinfo . VirtualStack ;
sql . Append ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo WHERE (F_StackIndex = " ) . Append ( stackIndex ) . 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>
/// 判断调度任务号在队列中是否存在,true已经存在;false不存在
/// </summary>
/// <param name="Monitorindex"></param>
/// <returns></returns>
public bool IFExitMonitorIndex ( int Monitorindex )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = " ) . Append ( Monitorindex ) . Append ( ")" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public bool IFExitTempManageIndex ( int fid )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT fid FROM T_Manage_Task WHERE (F_ManageTaskKindIndex=2 and fid = " ) . Append ( fid ) . Append ( ")" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
#endregion
#region 控制设备(发送命令)
/// <summary>
/// 根据前面得到的F_MonitorIndex值获得被锁定的设备索引
/// </summary>
/// <returns>以“;”隔开的设备索引组字符串</returns>
public string GetLockedDeviceIndex ( int MonitorIndex )
{
//20100108
DataSet ds = new DataSet ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_RunningLock from T_Monitor_Task where F_MonitorIndex=" ) . Append ( MonitorIndex ) ;
ds = dbo . ExceSQL ( sql . ToString ( ) ) ;
if ( ds . Tables [ 0 ] . DefaultView . Count > 0 )
{
return ds . Tables [ 0 ] . DefaultView [ 0 ] [ "F_RunningLock" ] . ToString ( ) ;
}
else
return "" ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{ //20100108
ds . Dispose ( ) ;
}
}
/// <summary>
/// 根据前面得到的MonitorIndex值取得"关联设备索引-命令"
/// </summary>
/// <returns>关联设备索引-命令,null表示没有</returns>
public string GetAssociateDevice ( int MonitorIndex )
{
//20100108
DataView dv = new DataView ( ) ;
DataView dvv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_Associate from T_Monitor_Task where (F_Associate IS NOT NULL) and F_MonitorIndex=" ) . Append ( MonitorIndex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_DeviceCommandIndex from T_Monitor_Task where F_MonitorIndex=" ) . Append ( dv [ 0 ] [ "F_Associate" ] ) ;
dvv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvv . Count > 0 )
{
return dvv [ 0 ] [ "F_DeviceIndex" ] . ToString ( ) + "-" + dvv [ 0 ] [ "F_DeviceCommandIndex" ] . ToString ( ) ;
}
else
{
return null ;
}
}
else
{
return null ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dvv . Dispose ( ) ;
}
}
/// <summary>
/// 根据前面得到的MonitorIndex值取得"关联调度任务"
/// </summary>
/// <returns>关联调度任务索引,0表示没有</returns>
public int GetAssociateMonitor ( int MonitorIndex )
{
//20100108
DataView dv = new DataView ( ) ;
DataView dvv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_Associate from T_Monitor_Task where (F_Associate IS NOT NULL) and F_MonitorIndex=" ) . Append ( MonitorIndex ) ;
//20100108
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" ) . Append ( dv [ 0 ] [ "F_Associate" ] ) ;
//20100108
dvv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvv . Count > 0 )
{
return Convert . ToInt32 ( dvv [ 0 ] [ "F_MonitorIndex" ] . ToString ( ) ) ;
}
else
{
return 0 ;
}
}
else
{
return 0 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
//20100108
dv . Dispose ( ) ;
dvv . Dispose ( ) ;
}
}
/// <summary>
/// 根据前面得到的关联调度任务值取得"调度任务索引"
/// </summary>
/// <returns>调度任务索引,0表示没有</returns>
public int GetMonitorFromAssociate ( int AssociateMonitor )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_MonitorIndex from T_Monitor_Task where F_Associate=" ) . Append ( AssociateMonitor ) ;
//20100108
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
}
else
{
return 0 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 在设备指令信息中获得堆垛机的
/// 取货点Z坐标(站在堆垛机上,面向操作面板:左侧-1,右侧-2)
/// 取货点X坐标(沿轨道方向)
/// 取货点Y坐标(沿高度方向)
/// 送货点Z坐标(站在堆垛机上,面向操作面板:左侧-1,右侧-2)
/// 送货点X坐标(沿轨道方向)
/// 送货点Y坐标(沿高度方向)
/// </summary>
/// <param name="TaskIdx">设备指令索引</param>
/// <returns>0--5六个数组分别依次代表6个坐标</returns>
public int [ ] GetCoordinatesFromMonitorTask ( int TaskIdx )
{
//20100108
DataView dv = new DataView ( ) ;
int [ ] gc ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 from T_Monitor_Task where F_MonitorIndex=" ) . Append ( TaskIdx ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
gc = new int [ 6 ] ;
//F_NumParam1--z,x--2,y--3;F_NumParam4--z,5--x,6--y
if ( dv . Count > 0 )
{
gc [ 0 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam1" ] ) ;
gc [ 1 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam2" ] ) ;
gc [ 2 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam3" ] ) ;
gc [ 3 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) ;
gc [ 4 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam5" ] ) ;
gc [ 5 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam6" ] ) ;
return gc ;
}
return null ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
gc = null ;
}
}
/// <summary>
/// 获得设备类型索引
/// </summary>
/// <param name="devIdx">设备索引</param>
/// <returns>设备类型索引</returns>
public int GetDeviceKindIdx ( int devIdx )
{
try
{
devinfo = Model . CGetInfo . GetDeviceInfo ( devIdx ) ;
if ( devinfo = = null ) return - 1 ;
return devinfo . DeviceKind ;
//string strSql = "SELECT F_DeviceIndex, F_DeviceKindIndex FROM T_Base_Device WHERE F_DeviceIndex=" + devIdx;
//DataSet ds = dbo.ExceSQL(strSql);
//DataView dv = ds.Tables[0].DefaultView;
//if (dv.Count > 0)
//{
// return Convert.ToInt32(dv[0]["F_DeviceKindIndex"]);
//}
//else
// return 0;
}
catch ( Exception ex )
{
throw ex ;
}
}
/// <summary>
/// 在调度队列中找到设备命令
/// </summary>
/// <param name="MonitorIndex">调度所引</param>
/// <returns></returns>
public int GetDeviceOrderFromMonitor ( int MonitorIndex )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
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 int GetRepeatDeviceindex ( int deviceindex , int taskid ) //for 大海 三个提升机同时报完成时过滤掉无用提升机 民航二所
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( string . Format ( "SELECT * FROM T_Monitor_Task WHERE (F_DeviceIndex = {0} and F_MonitorIndex={1} )" , deviceindex , taskid ) ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return 1 ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetF_NumParam1FromMonitor ( int MonitorIndex ) //晟碟
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_NumParam1 from T_Monitor_Task where F_MonitorIndex=" ) . Append ( MonitorIndex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam1" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetDeviceindexFromMonitor ( int MonitorIndex )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
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 ) ;
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 ( ) ;
}
}
public int GetDeviceArrowFromMonitor ( int MonitorIndex )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_NumParam4 from T_Monitor_Task where (F_NumParam4 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_NumParam4" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetDeviceStartFromMonitor ( int MonitorIndex )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_NumParam1 from T_Monitor_Task where (F_NumParam1 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_NumParam1" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 成功发送命令后的处理信息
/// </summary>
/// <param name="taskKindIndex">调度任务类型</param>
/// <param name="Managefid">调度任务索引</param>
/// <param name="MonirotIdx">设备指令索引</param>
/// <param name="deviceidx">设备索引</param>
/// <param name="detailidx">详细路径步骤索引</param>
public void SendOrderSuccess ( int taskKindIndex , long Managefid , int MonirotIdx , int deviceidx , int detailidx )
{
string AssociateDevice = "" ; //关联设备
string LockedDeviceIndex = "" ; //被锁定的设备索引组,以“;”分隔
char [ ] sep = new char [ 1 ] ;
string [ ] split ;
DataView dvs = new DataView ( ) ;
try
{
int devKind = GetDeviceKindIdx ( deviceidx ) ;
int order = GetDeviceOrderFromMonitor ( MonirotIdx ) ;
if ( order < = 0 ) return ;
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
//8:更改作业记录的状态F_Status为1,更改设备为占用状态(T_Base_device的F_LockedState=设备指令单)
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_ErrorCode='',F_StartTime='" ) . Append ( dtime ) . Append ( "',F_Status=1,F_SendCount=F_SendCount+1 where F_Status=0 and F_MonitorIndex=" ) . Append ( MonirotIdx ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
if ( taskKindIndex ! = 4 ) //20100610
{
//RGV、堆垛机需要锁定设备//20111226
if ( devKind = = 1 | | devKind = = 4 | | devKind = = 4 0 )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_device set F_LockedState=" ) . Append ( MonirotIdx ) . Append (
" where F_DeviceIndex=" ) . Append ( deviceidx ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
else
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_AgvNo FROM T_Monitor_Task WHERE (F_AgvNo IS NOT NULL) AND (F_MonitorIndex = " ) . Append ( MonirotIdx ) . Append ( ")" ) ;
dvs = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( ( dvs . Count > 0 ) & & ( devKind = = 6 ) )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_device set F_LockedState=" ) . Append ( MonirotIdx ) . Append (
" where F_DeviceIndex=" ) . Append ( dvs [ 0 ] [ 0 ] ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
}
if ( devKind = = 1 )
{
//修改T_Manage_Task的FLANEWAY,FSTACK
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_LaneDeviceIndex,F_StackIndex FROM T_Base_LaneInfo where F_StackIndex=" ) . Append ( deviceidx ) ;
dvs = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
int laneway = 0 ;
if ( dvs . Count > 0 )
{
laneway = Convert . ToInt32 ( dvs [ 0 ] [ "F_LaneDeviceIndex" ] ) ;
}
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FLANEWAY=" ) . Append ( laneway ) . Append ( ",FSTACK=" ) . Append ( deviceidx ) . Append ( " where F_ManageTaskKindIndex=" ) . Append ( taskKindIndex ) . Append ( " and FID=" ) . Append ( Managefid ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
if ( taskKindIndex ! = 4 )
{
//如果是RGV、堆垛机的将取(运行)命令需要增加调度任务预约锁F_ManTaskReserve && (order == 7)) && ((order == 2) || (order == 4))
if ( ( devKind = = 4 ) | | ( devKind = = 1 ) | | ( devKind = = 4 0 ) ) //20120110
{ ////RGV运到到输送机//堆垛机将取
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_Device SET F_ManTaskReserve = (" ) . Append ( taskKindIndex . ToString ( ) ) . Append ( Managefid . ToString ( ) ) . Append ( ") WHERE (F_DeviceIndex = " ) . Append ( deviceidx ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
SetStackSendConveyorManReserve ( MonirotIdx , deviceidx ) ;
}
}
//9:给调度任务表回写调度任务IO_Control的正在执行状态FSTATUS=1;T_Manage_Task的正在执行状态FSTATUS=1
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FSTATUS='1' where F_ManageTaskKindIndex=" ) . Append ( taskKindIndex ) . Append ( " and FID=" ) . Append ( Managefid ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//10:调度任务表里的F_RunningLock所有对应设备索引加锁,但是F_AssociateDeviceIndex关联设备不加锁
AssociateDevice = GetAssociateDevice ( MonirotIdx ) ;
if ( AssociateDevice = = "" ) AssociateDevice = null ;
if ( AssociateDevice ! = null )
{
sep [ 0 ] = '-' ;
split = AssociateDevice . Split ( sep ) ;
AssociateDevice = split [ 0 ] ;
}
sep [ 0 ] = ';' ;
LockedDeviceIndex = GetLockedDeviceIndex ( MonirotIdx ) ;
if ( LockedDeviceIndex ! = "" )
{
split = LockedDeviceIndex . Split ( sep ) ;
for ( int m = split . GetLowerBound ( 0 ) ; m < = split . GetUpperBound ( 0 ) ; m + + )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_device set F_LockedState=" ) . Append ( MonirotIdx ) . Append (
" where F_LockedState<>-1 and F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( split [ m ] ) ) . Append ( "and F_DeviceIndex<>" ) . Append ( Convert . ToInt32 ( AssociateDevice ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ; //20141201 增加条件F_LockedState<>-1 张磊发现接货输送机设备被停用时,可能会被堆垛机放货完成把F_LockedState改为0
}
}
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "CcommonFuntion.SendOrderSuccess" , cea ) ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs ( "tsStatus" , "CcommonFuntion.SendOrderSuccess是发生错误:" + ex . Message ) ;
OnRefreshMonitor ( "CcommonFuntion.SendOrderSuccess" , rme ) ;
}
finally
{
sep = null ;
split = null ;
dvs . Dispose ( ) ;
}
}
public long GetManageTaskIndexfromMonitor ( int monitorIdx )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20100108
//20101124
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 . ToInt64 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public int GetManageTaskStatus ( int fid , int kind )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
sql . Remove ( 0 , sql . Length ) ;
//sql.Append("SELECT FSTATUS FROM T_Manage_Task WHERE (FID = ").Append(fid).Append(")");
sql . Append ( "SELECT FSTATUS FROM T_Manage_Task WHERE (FID = " ) . Append ( fid ) . Append ( ") AND (F_ManageTaskKindIndex = " ) . Append ( kind ) . Append ( ")" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "FSTATUS" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public int GetManageTaskKindIndexFromMonitor ( int monitorIdx )
{ //20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
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 int GetManageIDFromManageTask ( int taskKindIndex , int Managefid )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FMANAGEID 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 ] [ "FMANAGEID" ] = = DBNull . Value ) return - 1 ;
return Convert . ToInt32 ( dv [ 0 ] [ "FMANAGEID" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public string GetControlBatchFromManageTask ( int taskKindIndex , long Managefid )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FCONTORL_BATCH 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 ] [ "FCONTORL_BATCH" ] = = DBNull . Value ) return "" ;
return dv [ 0 ] [ "FCONTORL_BATCH" ] . ToString ( ) ;
}
else
{
return "" ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public int GetRELATIVECONTORLIDFromManageTask ( int taskKindIndex , long Managefid )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_RELATIVECONTORLID 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 ] [ "F_RELATIVECONTORLID" ] = = DBNull . Value ) return - 1 ;
return Convert . ToInt32 ( dv [ 0 ] [ "F_RELATIVECONTORLID" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
/// <summary>
/// 是否需要优化调度
/// </summary>
/// <param name="DeviceIdx"></param>
/// <returns></returns>
public bool NeedOptimize ( int DeviceIdx )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_DeviceIndex, F_NeedOptimize FROM T_Base_Device where F_DeviceIndex=" ) . Append ( DeviceIdx ) . Append ( " and F_NeedOptimize='1'" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
return false ;
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
/// <summary>
/// 根据设备指令索引MonitorIndex检索出需要向T_Monitor_Task_Child插入的纪录,并且完成插入工作
/// </summary>
/// <param name="MonitorIndex"></param>
public void InsertMonitorOptimizeChildTask ( int MonitorIndex )
{
try
{ //20100108
//起始x坐标,列-沿轨道方向
// 起始y坐标,层-高度方向
// 起始z坐标,排-面向堆垛机操作面板,1-左侧,2-右侧
//F_NumParam1--z,x--2,y--3;F_NumParam4--z,5--x,6--y
int [ ] childInfo = GetMonitorChildIndex ( MonitorIndex ) ;
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO T_Monitor_Task_Child(F_Child_Index, F_TargetX, F_TargetY, F_TargetZ, F_OriginX, F_OriginY, F_OriginZ, F_Order,F_DeviceKindIndex,F_DummyDeviceIndex,F_MonitorIndex, F_Status)" ) ;
sql . Append ( "VALUES (" ) . Append ( childInfo [ 0 ] ) . Append ( "," ) . Append ( childInfo [ 2 ] ) . Append ( "," ) . Append ( childInfo [ 3 ] ) . Append ( "," ) . Append ( childInfo [ 1 ] ) . Append ( "," ) . Append ( childInfo [ 5 ] ) . Append ( "," ) . Append ( childInfo [ 6 ] ) . Append ( "," ) . Append ( childInfo [ 4 ] ) . Append ( "," ) . Append ( childInfo [ 7 ] ) . Append ( "," ) . Append ( childInfo [ 8 ] ) . Append ( "," ) . Append ( childInfo [ 9 ] ) . Append ( "," ) . Append ( MonitorIndex ) . Append ( ",0,)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
}
/// <summary>
/// //获得需要优化调度设备指令的子任务索引
///conInfo[9]=设备索引 ;
///conInfo[8]=设备种类索引 ;
///conInfo[7]=命令 ;
///conInfo[1] = ["F_NumParam1"];
///conInfo[2] = ["F_NumParam2"];
///conInfo[3] = ["F_NumParam3"];
///conInfo[4] = ["F_NumParam4"];
///conInfo[5] = ["F_NumParam5"];
///conInfo[6] = ["F_NumParam6"];
/// </summary>
/// <param name="monitorTaskIndex"></param>
/// <returns>子任务索引值1--65535</returns>
public int [ ] GetMonitorChildIndex ( int monitorTaskIndex )
{
//20100108
DataView dvMt = new DataView ( ) ;
int [ ] conInfo = new int [ 1 0 ] ;
DataView dv = new DataView ( ) ;
try
{
int devKindIndex ;
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT T_Base_Device.F_DeviceIndex,T_Base_Device.F_DeviceKindIndex,T_Monitor_Task.F_DeviceCommandIndex," ) . Append (
"F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task" ) . Append (
" WHERE (T_Monitor_Task.F_MonitorIndex = " ) . Append ( monitorTaskIndex ) . Append ( ") and " ) . Append (
" (T_Monitor_Task.F_DeviceIndex = T_Base_Device.F_DeviceIndex)" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
devKindIndex = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceKindIndex" ] ) ;
conInfo [ 9 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
conInfo [ 8 ] = devKindIndex ;
conInfo [ 7 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceCommandIndex" ] ) ;
conInfo [ 1 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam1" ] ) ;
conInfo [ 2 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam2" ] ) ;
conInfo [ 3 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam3" ] ) ;
conInfo [ 4 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) ;
conInfo [ 5 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam5" ] ) ;
conInfo [ 6 ] = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam6" ] ) ;
}
else
{
return null ;
}
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_Child_Index FROM T_Monitor_Task_Child_Index" ) ;
dvMt = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvMt . Count > 0 & & dvMt [ 0 ] [ "F_Child_Index" ] ! = DBNull . Value )
{
int maxIdx ;
maxIdx = ( Convert . ToInt32 ( dvMt [ 0 ] [ "F_Child_Index" ] ) + 1 ) ;
if ( maxIdx > = 6 4 0 0 0 )
{
UpdateMonitorChildIndex ( Convert . ToInt32 ( devKindIndex . ToString ( ) + "0" + "1" ) ) ;
conInfo [ 0 ] = Convert . ToInt32 ( devKindIndex . ToString ( ) + "0" + "1" ) ;
return conInfo ;
}
else
{
UpdateMonitorChildIndex ( maxIdx ) ;
conInfo [ 0 ] = maxIdx ;
return conInfo ;
}
}
else //现在没有该设备指令子任务记录
{
UpdateMonitorIndex ( Convert . ToInt32 ( devKindIndex . ToString ( ) + "0" + "1" ) ) ;
conInfo [ 0 ] = Convert . ToInt32 ( devKindIndex . ToString ( ) + "0" + "1" ) ;
return conInfo ;
}
}
catch ( Exception ex )
{
_D isassembleTaskError = "获得指定调度任务的设备指令索引失败!" + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dv . Dispose ( ) ;
dvMt . Dispose ( ) ;
conInfo = null ;
}
}
public void UpdateMonitorChildIndex ( int MonitorChildIndex )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task_Child_Index set F_Child_Index=" ) . Append ( MonitorChildIndex ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
/// <summary>
/// 增加对表T_Monitor_Task_Child的监控,产生不同设备优选算法,完成优化调度
/// 优化原则:调度路径和最小者(空闲设备的当前位置与起始位置的“路径模差”的绝对值
/// 加上 起始位置与终点位置的“路径模差”的绝对值
/// 路径模差:此路径上总共有n个站点,如果(n1-n2)的绝对值大于或等于(n/2),则
/// 路径模差=Math.Abs(n1-n2)-n;否则,路径模差=Math.Abs(n1-n2)
/// </summary>
public void OptimizeControlDevice ( )
{
}
/// <summary>
/// 获得设备指令任务的关联对等设备索引:堆垛机的取货指令任务的取货站台的双叉对等关联站台
/// 返回值“”表示无关联站台;“0”表示自关联站台;其它值表示关联站台设备索引
/// </summary>
/// <param name="MonitorTask">设备指令索引</param>
/// <param name="DeviceIndex">设备索引</param>
/// <returns></returns>
public string GetCorrel_DeviceIndex ( int MonitorTask )
{
DataView dv = new DataView ( ) ;
try
{
int [ ] zxy = GetCoordinatesFromMonitorTask ( MonitorTask ) ;
string zxystr = string . Empty ;
if ( zxy ! = null )
{
zxystr = ( zxy [ 0 ] . ToString ( ) . Length = = 1 ? "0" + zxy [ 0 ] . ToString ( ) : zxy [ 0 ] . ToString ( ) ) + "-" +
( ( zxy [ 1 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 1 ] . ToString ( ) ) : ( zxy [ 1 ] . ToString ( ) ) ) + "-" +
( ( zxy [ 2 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 2 ] . ToString ( ) ) : ( zxy [ 2 ] . ToString ( ) ) ) ;
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_LaneGateDeviceIndex,F_CorrelDeviceIndex FROM T_Base_Lane_Gate where (T_Base_Lane_Gate.F_ZXY = '" ) . Append ( zxystr ) . Append ( "')" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) = = dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) )
{
return "0" ;
}
else
{
return dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) ;
}
}
}
return "" ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 根据设备指令索引获得设备巷道出入口信息:【0】设备索引【1】顶升高位检测【2】顶升低位检测
/// 【3】有物检测【4】运行监测【5】近巷道有物检测【6】远巷道有物检测【7】是否使用远货叉【8】关联设备索引【9】货位编码
/// </summary>
/// <param name="MonitorTask"></param>
/// <returns></returns>
public string [ ] GetDeviceLaneGateInfoFromStackCoor ( int stackdeviceindex , int MonitorTask )
{
DataView dvl = new DataView ( ) ;
try
{
int laneway = 0 ;
dvl = dbo . ExceSQL ( string . Format ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo WHERE (F_StackIndex = {0})" , stackdeviceindex ) ) . Tables [ 0 ] . DefaultView ;
if ( dvl . Count > 0 )
{
laneway = Convert . ToInt32 ( dvl [ 0 ] [ 0 ] ) ;
}
else
{
return null ;
}
string [ ] rr = new string [ 1 0 ] ;
int [ ] zxy = GetCoordinatesFromMonitorTask ( MonitorTask ) ;
string zxystr = "" ;
if ( zxy ! = null )
{
zxystr = ( zxy [ 0 ] . ToString ( ) . Length = = 1 ? "0" + zxy [ 0 ] . ToString ( ) : zxy [ 0 ] . ToString ( ) ) + "-" +
( ( zxy [ 1 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 1 ] . ToString ( ) ) : ( zxy [ 1 ] . ToString ( ) ) ) + "-" +
( ( zxy [ 2 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 2 ] . ToString ( ) ) : ( zxy [ 2 ] . ToString ( ) ) ) ;
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Base_Lane_Gate where (F_LaneIndex=" ) . Append ( laneway ) . Append ( " and T_Base_Lane_Gate.F_ZXY = '" ) . Append ( zxystr ) . Append ( "')" ) ;
DataView dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
rr [ 0 ] = dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) ;
rr [ 1 ] = dv [ 0 ] [ "F_HighDetect" ] . ToString ( ) ;
rr [ 2 ] = dv [ 0 ] [ "F_LowDetect" ] . ToString ( ) ;
rr [ 3 ] = dv [ 0 ] [ "F_HavingDetect" ] . ToString ( ) ;
rr [ 4 ] = dv [ 0 ] [ "F_RunDetect" ] . ToString ( ) ;
rr [ 5 ] = dv [ 0 ] [ "F_NearDetect" ] . ToString ( ) ;
rr [ 6 ] = dv [ 0 ] [ "F_FarDetect" ] . ToString ( ) ;
rr [ 7 ] = dv [ 0 ] [ "F_UseAwayFork" ] . ToString ( ) ;
rr [ 8 ] = dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) ;
rr [ 9 ] = dv [ 0 ] [ "F_ZXY" ] . ToString ( ) ;
return rr ;
}
}
return null ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dvl . Dispose ( ) ;
}
}
/// <summary>
/// 根据堆垛机和设备索引获得设备巷道出入口信息:【0】设备索引【1】顶升高位检测【2】顶升低位检测
/// 【3】有物检测【4】运行监测【5】近巷道有物检测【6】远巷道有物检测【7】是否使用远货叉【8】关联设备索引【9】货位编码
/// </summary>
/// <param name="stack"></param>
/// <param name="device"></param>
/// <returns></returns>
public string [ ] GetLanewayDeviceInfoFromStackDev ( int stack , int device )
{
DataView dvl = new DataView ( ) ; DataView dv = new DataView ( ) ;
try
{
int laneway = 0 ;
dvl = dbo . ExceSQL ( string . Format ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo WHERE (F_StackIndex = {0})" , stack ) ) . Tables [ 0 ] . DefaultView ;
if ( dvl . Count > 0 )
{
laneway = Convert . ToInt32 ( dvl [ 0 ] [ 0 ] ) ;
}
else
{
return null ;
}
string [ ] rr = new string [ 1 0 ] ;
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Base_Lane_Gate where F_CorrelDeviceIndex<>'' and (F_LaneIndex=" ) . Append ( laneway ) . Append ( " and T_Base_Lane_Gate.F_LaneGateDeviceIndex = " ) . Append ( device ) . Append ( ")" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
rr [ 0 ] = dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) ;
rr [ 1 ] = dv [ 0 ] [ "F_HighDetect" ] . ToString ( ) ;
rr [ 2 ] = dv [ 0 ] [ "F_LowDetect" ] . ToString ( ) ;
rr [ 3 ] = dv [ 0 ] [ "F_HavingDetect" ] . ToString ( ) ;
rr [ 4 ] = dv [ 0 ] [ "F_RunDetect" ] . ToString ( ) ;
rr [ 5 ] = dv [ 0 ] [ "F_NearDetect" ] . ToString ( ) ;
rr [ 6 ] = dv [ 0 ] [ "F_FarDetect" ] . ToString ( ) ;
rr [ 7 ] = dv [ 0 ] [ "F_UseAwayFork" ] . ToString ( ) ;
rr [ 8 ] = dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) ;
rr [ 9 ] = dv [ 0 ] [ "F_zxy" ] . ToString ( ) ;
return rr ;
}
else
return null ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dvl . Dispose ( ) ;
}
}
/// <summary>
/// 获得设备索引的关联对等设备索引:堆垛机的取货指令任务的取货站台的双叉对等关联站台或者顶升
/// 返回值“”表示无关联站台;“0”表示自关联站台;其它值表示关联站台设备索引
/// </summary>
/// <param name="DeviceIndex"></param>
/// <returns></returns>
public string GetCorrel_DeviceIndex ( int DeviceIndex , bool ownCorrel )
{
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_LaneGateDeviceIndex,F_CorrelDeviceIndex FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex = " ) . Append ( DeviceIndex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) = = dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) )
{
return "0" ;
}
else
{
return dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) ;
}
}
return "" ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 根据设备索引获得关联设备信息集合《关联设备索引,信息数组》,信息数组:【0】设备索引【1】顶升高位检测【2】顶升低位检测
/// 【3】有物检测【4】运行监测【5】近巷道有物检测【6】远巷道有物检测【7】是否使用远货叉【8】关联设备索引
/// </summary>
/// <param name="DeviceIndex">设备索引</param>
/// <param name="ownCorrel">是否自关联</param>
/// <returns></returns>
public Dictionary < int , string [ ] > GetCorrel_DeviceInfo ( int DeviceIndex , bool ownCorrel )
{
Dictionary < int , string [ ] > Dicrr = new Dictionary < int , string [ ] > ( ) ;
string [ ] rr = new string [ 9 ] ;
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Base_Lane_Gate where F_CorrelDeviceIndex like '%" ) . Append ( DeviceIndex ) . Append ( "%'" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
rr [ 0 ] = dv [ i ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) ;
rr [ 1 ] = dv [ i ] [ "F_HighDetect" ] . ToString ( ) ;
rr [ 2 ] = dv [ i ] [ "F_LowDetect" ] . ToString ( ) ;
rr [ 3 ] = dv [ i ] [ "F_HavingDetect" ] . ToString ( ) ;
rr [ 4 ] = dv [ i ] [ "F_RunDetect" ] . ToString ( ) ;
rr [ 5 ] = dv [ i ] [ "F_NearDetect" ] . ToString ( ) ;
rr [ 6 ] = dv [ i ] [ "F_FarDetect" ] . ToString ( ) ;
rr [ 7 ] = dv [ i ] [ "F_UseAwayFork" ] . ToString ( ) ;
rr [ 8 ] = dv [ i ] [ "F_CorrelDeviceIndex" ] . ToString ( ) ;
if ( ownCorrel = = true )
{
if ( dv [ i ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) = = DeviceIndex . ToString ( ) )
{
Dicrr . Add ( Convert . ToInt32 ( dv [ i ] [ "F_LaneGateDeviceIndex" ] ) , rr ) ;
return Dicrr ;
}
else
{
return null ;
}
}
else
{
Dicrr . Add ( Convert . ToInt32 ( dv [ i ] [ "F_LaneGateDeviceIndex" ] ) , rr ) ;
}
}
return Dicrr ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 根据设备索引获得自关联设备信息:【0】设备索引【1】顶升高位检测【2】顶升低位检测
/// 【3】有物检测【4】运行监测【5】近巷道有物检测【6】远巷道有物检测【7】是否使用远货叉【8】关联设备索引
/// </summary>
/// <param name="DeviceIndex">设备索引</param>
/// <returns></returns>
public string [ ] GetOwnCorrel_DeviceInfo ( int DeviceIndex )
{
string [ ] rr = new string [ 9 ] ;
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex=" ) . Append ( DeviceIndex ) . Append ( " and F_CorrelDeviceIndex = '" ) . Append ( DeviceIndex ) . Append ( "'" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 ) {
rr [ 0 ] = dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) ;
rr [ 1 ] = dv [ 0 ] [ "F_HighDetect" ] . ToString ( ) ;
rr [ 2 ] = dv [ 0 ] [ "F_LowDetect" ] . ToString ( ) ;
rr [ 3 ] = dv [ 0 ] [ "F_HavingDetect" ] . ToString ( ) ;
rr [ 4 ] = dv [ 0 ] [ "F_RunDetect" ] . ToString ( ) ;
rr [ 5 ] = dv [ 0 ] [ "F_NearDetect" ] . ToString ( ) ;
rr [ 6 ] = dv [ 0 ] [ "F_FarDetect" ] . ToString ( ) ;
rr [ 7 ] = dv [ 0 ] [ "F_UseAwayFork" ] . ToString ( ) ;
rr [ 8 ] = dv [ 0 ] [ "F_CorrelDeviceIndex" ] . ToString ( ) ;
return rr ;
}
return null ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetOldDevcieFromStackCorr ( int mankind , int fid , int taskindex )
{
if ( CStaticClass . DBFactory = = "OracleDBFactory" )
{ //20151120调度系统oracle的特殊语句
sql = new StringBuilder ( string . Format ( "SELECT F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex,F_NumParam1,F_NumParam2,F_NumParam3 FROM T_Monitor_Task WHERE rownum=1 and F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex" , mankind , fid , taskindex ) ) ;
}
else
{
sql = new StringBuilder ( string . Format ( "SELECT TOP 1 F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex,F_NumParam1,F_NumParam2,F_NumParam3 FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex" , mankind , fid , taskindex ) ) ;
}
DataView dvr = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ; //20151120调度系统oracle的特殊语句
if ( dvr . Count > 0 )
{
int laneway = GetLaneWayNoFromStack ( Convert . ToInt32 ( dvr [ 0 ] [ "F_DeviceIndex" ] ) ) ;
int [ ] zxy = GetCoordinatesFromMonitorTask ( taskindex ) ;
StringBuilder zxystr = new StringBuilder ( ) ;
if ( zxy ! = null )
{
zxystr . Append ( ( zxy [ 0 ] . ToString ( ) . Length = = 1 ? "0" + zxy [ 0 ] . ToString ( ) : zxy [ 0 ] . ToString ( ) ) ) . Append ( "-" ) . Append (
( ( zxy [ 1 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 1 ] . ToString ( ) ) : ( zxy [ 1 ] . ToString ( ) ) ) ) . Append ( "-" ) . Append (
( ( zxy [ 2 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 2 ] . ToString ( ) ) : ( zxy [ 2 ] . ToString ( ) ) ) ) ;
}
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_LaneIndex = {0}) AND (F_ZXY = '{1}')" , laneway , zxystr . ToString ( ) ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_LaneGateDeviceIndex" ] ) ;
}
else
{
return - 1 ;
}
}
else
{
return - 1 ;
}
}
public int GetLaneWayNoFromStack ( int stackNo )
{
devinfo = Model . CGetInfo . GetDeviceInfo ( stackNo ) ;
if ( devinfo . VirtualStack > 0 )
{
stackNo = devinfo . VirtualStack ;
}
sql . Clear ( ) ;
sql . Append ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo where f_stackindex=" ) . Append ( stackNo ) ;
DataView dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_LaneDeviceIndex" ] ) ;
}
else
{
return - 1 ;
}
}
/// <summary>
/// 是否为多叉堆垛机的取货站台
/// </summary>
/// <param name="device"></param>
/// <returns></returns>
public bool IfMutiForkStackGetDevice ( int device )
{
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork > '0')" , device ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
/// <summary>
/// 根据设备指令索引反馈堆垛机的送货坐标是否为极限货位
/// </summary>
/// <param name="TaskIdx"></param>
/// <returns></returns>
public bool IfLimitCellCode ( int TaskIdx )
{
int [ ] zxy = GetCoordinatesFromMonitorTask ( TaskIdx ) ;
if ( zxy ! = null )
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo WHERE (F_ForwardLimitX = " ) . Append ( zxy [ 4 ] ) . Append ( ") OR (F_BackLimitX = " ) . Append ( zxy [ 4 ] ) . Append ( ")" ) ;
object ob = dbo . GetSingle ( sql . ToString ( ) ) ;
if ( ob ! = null )
{
return true ;
}
}
return false ;
}
#endregion
#region 读取设备状态
/// <summary>
/// 20110608获取超时运行的调度设备指令
/// </summary>
/// <param name="monitorIndex"></param>
/// <returns></returns>
public int GetMonitorTaskIndexFromRunTimeoutDevice ( int deviceindex )
{
try
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE DATEDIFF(minute,CONVERT(datetime,SUBSTRING(F_StartTime, 1, 19)),getdate())>" ) . Append ( int . Parse ( CStaticClass . TransportTimeout ) ) . Append ( " and F_StartTime<>'-' and F_Status>0 and F_DeviceIndex = " ) . Append ( deviceindex ) ;
object ob = dbo . GetSingle ( sql . ToString ( ) ) ;
if ( ob ! = null )
{
return int . Parse ( ob . ToString ( ) ) ;
}
else
{
return - 1 ;
}
}
catch
{
return - 1 ;
}
}
public int GetMonitorTaskIndexFromSendedDevice ( int deviceindex )
{
try
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE F_Status=1 and F_DeviceIndex = " ) . Append ( deviceindex ) ;
object ob = dbo . GetSingle ( sql . ToString ( ) ) ;
if ( ob ! = null )
{
return int . Parse ( ob . ToString ( ) ) ;
}
else
{
return - 1 ;
}
}
catch
{
return - 1 ;
}
}
/// <summary>
/// 20110309获得调度任务的条码
/// </summary>
/// <param name="taskindex">设备指令索引</param>
/// <returns></returns>
public string GetBarCodeFromMonitor ( int taskindex )
{
object ob = dbo . GetSingle ( string . Format ( "SELECT F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = {0})" , taskindex ) ) ;
if ( ob ! = null )
{
return ob . ToString ( ) ;
}
else
{
return "-" ;
}
}
public int GetExceptionNOFromManageTask ( long FID , int ManTaskKind )
{
//20100108
DataTable dt = new DataTable ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FID, F_ManageTaskKindIndex, FExceptionNO FROM T_Manage_Task WHERE (FID = " ) . Append ( FID ) . Append ( ") AND (F_ManageTaskKindIndex = " ) . Append ( ManTaskKind ) . Append ( ") " ) ;
//20100108
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 )
{
_D isassembleTaskError = "获得指定调度任务的异常代码:" + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dt . Dispose ( ) ;
}
}
public string GetBarCodeFromManageTask ( long FID , int ManTaskKind )
{
//20100108
DataTable dt = new DataTable ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FPALLETBARCODE FROM T_Manage_Task WHERE (FID = " ) . Append ( FID ) . Append ( ") AND (F_ManageTaskKindIndex = " ) . Append ( ManTaskKind ) . Append ( ") " ) ;
//20100108
dt = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] ;
if ( dt . Rows . Count > 0 )
{
if ( dt . Rows [ 0 ] [ "FPALLETBARCODE" ] = = DBNull . Value )
{
return "-" ;
}
else
{
return dt . Rows [ 0 ] [ "FPALLETBARCODE" ] . ToString ( ) ;
}
}
else
{
return "-" ;
}
}
catch ( Exception ex )
{
_D isassembleTaskError = "获得指定调度任务的条码:" + ex . Message ;
throw ex ;
}
finally
{ //20100108
dt . Dispose ( ) ;
}
}
#endregion
#region 获得调度任务
/// <summary>
/// 获取调度生成的调度任务的索引
/// </summary>
/// <returns></returns>
public int GetTempManageIdx ( )
{
//20100108
DataSet ds = new DataSet ( ) ;
try
{
int maxIdx = 1 0 0 0 1 ;
ds = dbo . ExceSQL ( "SELECT F_ManageTaskIndex FROM T_Base_Manage_Task_Index_Temp_Task" ) ;
if ( ds . Tables [ 0 ] . DefaultView . Count > 0 )
{
if ( ( Convert . ToInt32 ( ds . Tables [ 0 ] . DefaultView [ 0 ] [ "F_ManageTaskIndex" ] ) + 1 ) > = 1 9 9 9 8 )
{
maxIdx = 1 0 0 0 1 ;
}
else
{
maxIdx = ( Convert . ToInt32 ( ds . Tables [ 0 ] . DefaultView [ 0 ] [ "F_ManageTaskIndex" ] ) + 1 ) ;
}
}
else
{
maxIdx = 1 0 0 0 1 ;
}
//判断临时调度任务表是否有重复值
if ( IFExitTempManageIndex ( maxIdx ) = = true )
{
RecordMaxTempManageTaskFID ( maxIdx ) ;
maxIdx = GetTempManageIdx ( ) ;
return maxIdx ;
}
RecordMaxTempManageTaskFID ( maxIdx ) ;
return maxIdx ;
}
catch ( Exception ex )
{ //20100108
_D isassembleTaskError = "获得指定调度任务的临时任务索引失败," + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
ds . Dispose ( ) ;
}
}
/// <summary>
/// 获得库房索引
/// </summary>
/// <returns></returns>
public string GetWarehouseIndex ( )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20100108
dv = dbo . ExceSQL ( "select F_WarehouseIndex from T_Warehouse" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return dv [ 0 ] [ "F_WarehouseIndex" ] . ToString ( ) ;
}
else
{
return "1" ;
}
}
catch ( Exception ex )
{ //20100108
_D isassembleTaskError = "获得指定库房索引失败," + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
public string GetWarehouseIndex ( int laneway , string cellcode )
{
object ob = dbo . GetSingle ( string . Format ( "SELECT FWAREHOUSE FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLCODE = '{1}')" , laneway , cellcode ) ) ;
if ( ob ! = null )
{
return ob . ToString ( ) ;
}
else
{
return "-" ;
}
}
/// <summary>
/// 记录调度生成的调度任务的索引的最大值
/// </summary>
/// <param name="fid">调度生成的调度任务的索引</param>
public void RecordMaxTempManageTaskFID ( int fid )
{ //20100108
DataView dv = new DataView ( ) ;
try
{ //20100108
dv = dbo . ExceSQL ( "select F_ManageTaskIndex from T_Base_Manage_Task_Index_Temp_Task" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//if (fid == 19998)
//{
// dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex =10001");
// return;
//}
//if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"]))
//{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex =" ) . Append ( fid ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
return ;
//}
}
else
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO T_Base_Manage_Task_Index_Temp_Task (F_ManageTaskIndex)VALUES (" ) . Append ( fid ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
return ;
}
}
catch ( Exception ex )
{ //20100108
_D isassembleTaskError = "获得记录调度任务最大任务索引失败," + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
/// <summary>
/// 判断这个货位在ST_CELL是否存在
/// </summary>
/// <param name="FWAREHOUSE"></param>
/// <param name="FLaneWay"></param>
/// <param name="FCELLCODE"></param>
/// <returns></returns>
public bool QueryCellIfExit ( string FWAREHOUSE , int FLaneWay , string FCELLCODE )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] fcc = FCELLCODE . Split ( cc ) ;
if ( fcc . GetUpperBound ( 0 ) < 2 ) return false ;
int [ ] fcci = new int [ fcc . GetUpperBound ( 0 ) + 1 ] ;
//20100108
DataView dv = new DataView ( ) ;
try
{
for ( int i = fcc . GetLowerBound ( 0 ) ; i < = fcc . GetUpperBound ( 0 ) ; i + + )
{
fcci [ i ] = Convert . ToInt32 ( fcc [ i ] ) ;
}
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FWAREHOUSE, FCELLCODE, FCELLSTATUS " ) . Append (
" FROM ST_CELL Where FWAREHOUSE='" ) . Append ( FWAREHOUSE ) . Append ( "' and FLaneWay=" ) . Append ( FLaneWay ) . Append ( " and F_Z=" ) . Append (
fcci [ 0 ] ) . Append ( " and F_X=" ) . Append ( fcci [ 1 ] ) . Append ( " and F_Y=" ) . Append ( fcci [ 2 ] ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{ //20100108
_D isassembleTaskError = "查询货位是否存在失败," + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dv . Dispose ( ) ;
cc = null ;
fcc = null ;
fcci = null ;
}
}
/// <summary>
/// 查询货位状态是否满足入库或者出库条件
/// </summary>
/// <param name="FWAREHOUSE">库房编号</param>
/// <param name="FCELLCODE">货位编号</param>
/// <param name="IOType">"1":入库(放货);"2":出库(取货)</param>
/// <returns></returns>
public bool QueryCellStatusIfAccord ( string FWAREHOUSE , int FLaneWay , string FCELLCODE , string IOType )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] fcc = FCELLCODE . Split ( cc ) ;
if ( fcc . GetUpperBound ( 0 ) < 2 ) return false ;
int [ ] fcci = new int [ fcc . GetUpperBound ( 0 ) + 1 ] ;
//20100108
DataView dv = new DataView ( ) ;
try
{
for ( int i = fcc . GetLowerBound ( 0 ) ; i < = fcc . GetUpperBound ( 0 ) ; i + + )
{
fcci [ i ] = Convert . ToInt32 ( fcc [ i ] ) ;
}
if ( IOType = = "1" ) //入库(放货)
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FWAREHOUSE, FCELLCODE, FCELLSTATUS " +
" FROM ST_CELL Where FWAREHOUSE='" ) . Append ( FWAREHOUSE ) . Append ( "' and FLaneWay=" ) . Append ( FLaneWay ) . Append ( " and F_Z=" ) . Append (
fcci [ 0 ] ) . Append ( " and F_X=" ) . Append ( fcci [ 1 ] ) . Append ( " and F_Y=" ) . Append ( fcci [ 2 ] ) . Append ( " and FCELLSTATUS='0'" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
else //if (IOType == "2")//出库(取货)
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FWAREHOUSE, FCELLCODE, FCELLSTATUS " ) . Append (
" FROM ST_CELL Where FWAREHOUSE='" ) . Append ( FWAREHOUSE ) . Append ( "' and FLaneWay=" ) . Append ( FLaneWay ) . Append ( " and F_Z='" ) . Append (
fcci [ 0 ] ) . Append ( "' and F_X='" ) . Append ( fcci [ 1 ] ) . Append ( "' and F_Y='" ) . Append ( fcci [ 2 ] ) . Append ( "' and FCELLSTATUS='1'" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
}
catch ( Exception ex )
{ //20100108
_D isassembleTaskError = "查询货位状态失败," + ex . Message ;
throw ex ;
//return 0;
}
finally
{ //20100108
dv . Dispose ( ) ;
cc = null ;
fcc = null ;
fcci = null ;
}
}
/// <summary>
/// 设置货位状态
/// </summary>
/// <param name="FWAREHOUSE"></param>
/// <param name="FCELLCODE"></param>
/// <param name="FCELLSTATUS"></param>
public void SetCellStatus ( string FWAREHOUSE , int FLaneWay , string FCELLCODE , string FCELLSTATUS )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] fcc = FCELLCODE . Split ( cc ) ;
int [ ] fcci = new int [ fcc . GetUpperBound ( 0 ) + 1 ] ;
try
{ //20100108
for ( int i = fcc . GetLowerBound ( 0 ) ; i < = fcc . GetUpperBound ( 0 ) ; i + + )
{
fcci [ i ] = Convert . ToInt32 ( fcc [ i ] ) ;
}
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE ST_CELL SET FCELLSTATUS ='" ) . Append ( FCELLSTATUS ) . Append ( "' where FWAREHOUSE='" ) . Append ( FWAREHOUSE ) . Append ( "' and FLaneWay=" ) . Append ( FLaneWay ) . Append ( " and F_Z='" ) . Append (
fcci [ 0 ] ) . Append ( "' and F_X='" ) . Append ( fcci [ 1 ] ) . Append ( "' and F_Y='" ) . Append ( fcci [ 2 ] ) . Append ( "' " ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
cc = null ;
fcc = null ;
fcci = null ;
}
}
/// <summary>
/// 查询运行状态是否符合条件
/// </summary>
/// <param name="FWAREHOUSE"></param>
/// <param name="FCELLCODE"></param>
/// <returns></returns>
public bool QueryRunStatusIfAccord ( string FWAREHOUSE , int FLaneWay , string FCELLCODE )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] fcc = FCELLCODE . Split ( cc ) ;
int [ ] fcci = new int [ fcc . GetUpperBound ( 0 ) + 1 ] ;
DataView dv = new DataView ( ) ; ; //20100108
try
{ //20100108
for ( int i = fcc . GetLowerBound ( 0 ) ; i < = fcc . GetUpperBound ( 0 ) ; i + + )
{
fcci [ i ] = Convert . ToInt32 ( fcc [ i ] ) ;
}
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FWAREHOUSE, FCELLCODE, FCELLSTATUS " ) . Append (
" FROM ST_CELL Where FWAREHOUSE='" ) . Append ( FWAREHOUSE ) . Append ( "' and FLaneWay=" ) . Append ( FLaneWay ) . Append ( " and F_Z='" ) . Append (
fcci [ 0 ] ) . Append ( "' and F_X='" ) . Append ( fcci [ 1 ] ) . Append ( "' and F_Y='" ) . Append ( fcci [ 2 ] ) . Append ( "' and FRUNSTATUS='0'" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
cc = null ;
fcc = null ;
fcci = null ;
dv . Dispose ( ) ;
}
}
/// <summary>
/// 设置货位运行状态
/// </summary>
/// <param name="FWAREHOUSE"></param>
/// <param name="FCELLCODE"></param>
/// <param name="FRUNSTATUS"></param>
public void SetRunStatus ( string FWAREHOUSE , int FLaneWay , string FCELLCODE , string FRUNSTATUS )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] fcc = FCELLCODE . Split ( cc ) ;
int [ ] fcci = new int [ fcc . GetUpperBound ( 0 ) + 1 ] ;
try
{ //20100108
for ( int i = fcc . GetLowerBound ( 0 ) ; i < = fcc . GetUpperBound ( 0 ) ; i + + )
{
fcci [ i ] = Convert . ToInt32 ( fcc [ i ] ) ;
}
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE ST_CELL SET FRUNSTATUS ='" ) . Append ( FRUNSTATUS ) . Append ( "' where FWAREHOUSE='" ) . Append ( FWAREHOUSE ) . Append ( "' and FLaneWay=" ) . Append ( FLaneWay ) . Append ( " and F_Z='" ) . Append (
fcci [ 0 ] ) . Append ( "' and F_X='" ) . Append ( fcci [ 1 ] ) . Append ( "' and F_Y='" ) . Append ( fcci [ 2 ] ) . Append ( "'" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
cc = null ;
fcc = null ;
fcci = null ;
}
}
public int GetSerialNumberFromRouteDevice ( int RouteIDSub , int DeviceIndex )
{
DataView dv = new DataView ( ) ; //20100108
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_SerialNumber FROM T_Base_Route_Device WHERE (F_RouteIDSub = " ) . Append ( RouteIDSub ) . Append ( ") AND (F_DeviceIndex = " ) . Append ( DeviceIndex ) . Append ( ")" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return ( int ) dv [ 0 ] [ "F_SerialNumber" ] ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
#endregion
public int GetManTaskReserve ( int deviceIndex )
{ //20111020
object ob = dbo . GetSingle ( string . Format ( "SELECT F_ManTaskReserve FROM T_Base_Device WHERE (F_DeviceIndex = {0})" , deviceIndex ) ) ;
if ( ob ! = null )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return 0 ;
}
}
public int GetDeviceLockedState ( int deviceIndex )
{ //20111020
object ob = dbo . GetSingle ( string . Format ( "SELECT F_LockedState FROM T_Base_Device WHERE (F_DeviceIndex = {0})" , deviceIndex ) ) ;
if ( ob ! = null )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return 0 ;
}
}
public int GetStackMutexDevice ( int deviceIndex )
{ //20111020
object ob = dbo . GetSingle ( string . Format ( "SELECT F_Mutex FROM T_Base_StackInfo WHERE (F_StackIndex = {0})" , deviceIndex ) ) ;
if ( ob ! = null )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return - 1 ;
}
}
public int GetRouteIDsub ( int device )
{ //20111020
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( "SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex=" + device + "" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_RouteIDSub" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public void GetS7ConnectionRelativeAddressDataLenth ( int deviceIndex , out string s7conn , out int relAddr , out int datalength )
{
DataView dv = new DataView ( ) ;
try
{
//lock (lockob)
{
relAddr = 0 ; datalength = 0 ; s7conn = string . Empty ;
s7conn = dbo . GetSingle ( string . Format ( "select F_S7Connection FROM T_Base_Device WHERE F_DeviceIndex={0}" , deviceIndex ) ) . ToString ( ) ;
int db228 = Convert . ToInt32 ( dbo . GetSingle ( string . Format ( "SELECT DISTINCT F_DBW2Address FROM T_Base_Device WHERE (F_DeviceKindIndex = 28 AND F_S7Connection = '{0}')" , s7conn ) ) ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT (F_DBW2Address -{0}) AS relAddr, F_DBWGetLength FROM T_Base_Device WHERE F_DeviceIndex={1}" , db228 , deviceIndex ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
relAddr = Convert . ToInt32 ( dv [ 0 ] [ "relAddr" ] ) ;
datalength = Convert . ToInt32 ( dv [ 0 ] [ "F_DBWGetLength" ] ) ;
}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public void GetSplitByteRelativeAddress ( int deviceIndex , string s7conn , out int relAddr )
{
DataView dv = new DataView ( ) ;
try
{
//lock (lockob)
{
relAddr = - 1 ;
object ob = dbo . GetSingle ( string . Format ( "(SELECT DISTINCT F_DBW2Address FROM T_Base_Device WHERE (F_DeviceKindIndex = 28 AND F_S7Connection = '{0}'))" , s7conn ) ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT (F_SplitByte -{0}) AS relAddr FROM T_Base_Device WHERE F_SplitByte is not NULL and F_DeviceIndex={1}" , Convert . ToInt32 ( ob ) , deviceIndex ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
relAddr = Convert . ToInt32 ( dv [ 0 ] [ "relAddr" ] ) ;
}
else
{
relAddr = - 1 ;
}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 201112105判断是否可以获得可用的路径子路经,并且实现改道
/// </summary>
/// <param name="manageTaskIdx">调度任务索引</param>
/// <param name="manageKindIdx">任务类型索引</param>
/// <param name="curLocation">当前设备索引</param>
/// <returns></returns>
public bool GetUseableRouteIDSubAndModifyRoute ( long manageTaskIdx , int manageKindIdx , int curLocation )
{
DataView dvmi = new DataView ( ) ;
DataView DMAN = new DataView ( ) ;
DataView dvnew = new DataView ( ) ;
DataView dvc = new DataView ( ) ;
try
{
//20091005
#region 调度任务存在
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX =" ) . Append ( 1 ) . Append ( ") order by F_MonitorIndex asc" ) ;
dvmi = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvmi . Count > 0 )
{ //已经开始执行的需要更改调度任务
//判断申请修改路径的第一个调度任务:
int monitorIndex = ( int ) dvmi [ 0 ] [ "F_MonitorIndex" ] ;
int associateMonitor = - 1 ;
if ( dvmi [ 0 ] [ "F_Associate" ] ! = DBNull . Value )
{
associateMonitor = Convert . ToInt32 ( dvmi [ 0 ] [ "F_Associate" ] ) ;
}
int devindex = Convert . ToInt32 ( dvmi [ 0 ] [ "F_DeviceIndex" ] ) ;
int devKind = GetDeviceKindIdx ( Convert . ToInt32 ( dvmi [ 0 ] [ "F_DeviceIndex" ] ) ) ;
int devCommand = Convert . ToInt32 ( dvmi [ 0 ] [ "F_DeviceCommandIndex" ] ) ;
int routeID = Convert . ToInt32 ( dvmi [ 0 ] [ "F_RouteID" ] ) ;
int NumParam1 = Convert . ToInt32 ( dvmi [ 0 ] [ "F_NumParam1" ] ) ;
int NumParam4 = Convert . ToInt32 ( dvmi [ 0 ] [ "F_NumParam4" ] ) ;
string AheadDetect = dvmi [ 0 ] [ "F_AheadDetect" ] . ToString ( ) ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select * from T_Manage_Task WHERE (FID = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX =" ) . Append ( manageKindIdx ) . Append ( ")" ) ;
DMAN = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( DMAN . Count > 0 )
{
//20091005
int routeidNew = CDisassembleTask . MinRouteID ( Convert . ToInt32 ( DMAN [ 0 ] [ "FSTARTDEVICE" ] ) , Convert . ToInt32 ( DMAN [ 0 ] [ "FENDDEVICE" ] ) , curLocation ) ;
if ( routeidNew = = - 1 )
{
//20091005
return false ;
}
//20091005
//删除原来的申请修改路径任务,拆分新的任务并且只保留现有设备开始的任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX =" ) . Append ( manageKindIdx ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//20090910
if ( CDisassembleTask . CreateMonitor ( manageKindIdx , manageTaskIdx , routeidNew , DMAN [ 0 ] , 3 ) < = 0 )
{
//重新生成申请修改路径的申请任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO T_Monitor_Task " ) . Append (
"(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel," ) . Append (
" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4," ) . Append (
" F_AheadDetect,F_TxtParam)" ) . Append (
"VALUES (" ) . Append ( manageTaskIdx ) . Append ( "," ) . Append ( manageKindIdx ) . Append ( "," ) . Append ( monitorIndex ) . Append ( ",1," ) . Append ( devindex ) . Append ( "," ) . Append ( devCommand ) . Append ( "," ) . Append ( routeID ) . Append ( ",3," ) . Append ( NumParam1 ) . Append ( "," ) . Append ( NumParam4
) . Append ( ",'" ) . Append ( AheadDetect ) . Append ( "','" ) . Append ( DMAN [ 0 ] [ "FPALLETBARCODE" ] ) . Append ( "')" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
return false ;
}
if ( devKind = = 4 )
{
if ( devCommand = = 7 )
{
int RGVsn = GetSerialNumberFromRouteDevice ( routeID , devindex ) ;
int Consn = GetSerialNumberFromRouteDevice ( routeID , NumParam1 ) ;
#region RGV运动到接货点
if ( RGVsn > Consn )
{
//删除RGV运动到接货点之前的任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
devindex ) . Append ( ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
") AND (F_NumParam1 = " ) . Append ( NumParam1 ) . Append ( ")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) " ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) " ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
#region RGV运动到送货点
if ( RGVsn < Consn )
{
//删除RGV运动到送货点之前的任务
//DataView dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " +
// manageTaskIdx + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " +
// devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew +
// ") AND (F_Status = 3) AND (F_NumParam1 <> " + NumParam1 + ")").Tables[0].DefaultView;
int RGVsn1 = GetSerialNumberFromRouteDevice ( routeidNew , devindex ) ;
//找到接货输送机设备索引
List < int > nextcon = CDisassembleTask . GetNextDevice ( routeidNew , RGVsn1 ) ;
int condev = nextcon [ 0 ] ;
//删除RGV运动到送货点之前的任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
devindex ) . Append ( ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
") AND (F_NumParam1 = " ) . Append ( condev ) . Append ( ")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
}
#region RGV送货
if ( ( devCommand = = 3 ) | | ( devCommand = = 5 ) )
{
int RGVsn = GetSerialNumberFromRouteDevice ( routeidNew , devindex ) ;
//找到接货输送机设备索引
List < int > nextcon = CDisassembleTask . GetNextDevice ( routeidNew , RGVsn ) ;
int condev = nextcon [ 0 ] ;
//删除RGV运动到送货点之前的任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
devindex ) . Append ( ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
") AND (F_NumParam1 = " ) . Append ( condev ) . Append ( ")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) " ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
#region RGV接货
if ( ( devCommand = = 2 ) | | ( devCommand = = 4 ) )
{
int RGVsn = GetSerialNumberFromRouteDevice ( routeidNew , devindex ) ;
//找到送货输送机设备索引
List < int > priorcon = CDisassembleTask . GetPriorDevice ( routeidNew , RGVsn ) ;
int condev = priorcon [ 0 ] ;
//删除RGV运动到接货点之前的任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
devindex ) . Append ( ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
") AND (F_NumParam1 = " ) . Append ( condev ) . Append ( ")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
}
if ( devKind = = 2 )
{
#region 输送机送货
if ( devCommand = = 3 )
{
int consn = GetSerialNumberFromRouteDevice ( routeidNew , devindex ) ;
//找到接货RGV设备索引
List < int > nextrgv = CDisassembleTask . GetNextDevice ( routeidNew , consn ) ;
int rgvdev = nextrgv [ 0 ] ;
//删除RGV运动到接货点之前的任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
rgvdev ) . Append ( ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
") AND (F_NumParam1 = " ) . Append ( devindex ) . Append ( ")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
#region 输送机的接货
if ( devCommand = = 4 )
{
int consn = GetSerialNumberFromRouteDevice ( routeID , devindex ) ;
//找到送货RGV设备索引
List < int > priorrgv = CDisassembleTask . GetPriorDevice ( routeID , consn ) ;
int rgvdev = priorrgv [ 0 ] ;
int rgvsn = GetSerialNumberFromRouteDevice ( routeidNew , rgvdev ) ;
List < int > nextdev = CDisassembleTask . GetNextDevice ( routeidNew , rgvdev ) ;
int condev = nextdev [ 0 ] ;
//删除RGV运动到送货点之前的任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
rgvdev ) . Append ( ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
") AND (F_NumParam1 = " ) . Append ( condev ) . Append ( ")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
#region 输送机的送出
if ( devCommand = = 6 )
{
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
devindex ) . Append ( ") AND (F_DeviceCommandIndex = 6) AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) " ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
int CurrentLocation = 0 ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FCurrentLocation FROM T_Manage_Task where FID=" ) . Append ( manageTaskIdx ) . Append ( " and F_ManageTaskKindIndex=1" ) ;
dvc = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvc . Count > 0 )
{
CurrentLocation = Convert . ToInt32 ( dvc [ 0 ] [ "FCurrentLocation" ] ) ;
}
//20091128
if ( CurrentLocation = = 0 ) return false ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_DeviceIndex=" ) . Append ( CurrentLocation ) . Append ( " where F_MonitorIndex=" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//20090910已经搬运到CurrentLocation(F_NumParam4=CurrentLocation) 删除送出任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_DeviceIndex=" ) . Append ( CurrentLocation ) . Append ( " and F_NumParam4=" ) . Append ( CurrentLocation ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
}
#region 堆垛机的送货重
if ( devKind = = 1 )
{ //堆垛机的送货重,只保留堆垛机的送货任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " ) . Append (
devindex ) . Append ( ") AND (F_DeviceCommandIndex = " ) . Append ( devCommand ) . Append ( ") AND (F_RouteID = " ) . Append ( routeidNew ) . Append (
")" ) ;
dvnew = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvnew . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "delete from T_Monitor_Task where F_MonitorIndex<" ) . Append ( dvnew [ 0 ] [ "F_MonitorIndex" ] ) . Append ( " and (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" ) . Append ( devindex ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1) " ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
#endregion
#region 条码扫描改道
if ( devKind = = 7 )
{
//sql.Remove(0, sql.Length);
//sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(
// manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append(
// devindex).Append(") AND (F_DeviceCommandIndex = 1) AND (F_RouteID = ").Append(routeidNew).Append(
// ")");
//dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
//if (dvnew.Count > 0)
//{
// sql.Remove(0, sql.Length);
// sql.Append("delete from T_Monitor_Task where F_MonitorIndex<=").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append(
// manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) ");
// dbo.ExceSQL(sql.ToString());
// sql.Remove(0, sql.Length);
// sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append(
// manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)");
// dbo.ExceSQL(sql.ToString());
//}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
#region 高端
if ( devKind = = 1 3 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = " ) . Append (
manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX = 1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
#endregion
#endregion
} //20090910
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "CControl.GetUseableRouteIDSubAndModifyRoute" , cea ) ;
return true ;
} //20091005
#endregion
else
{ //调度任务不存在
return false ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dvc . Dispose ( ) ;
dvmi . Dispose ( ) ;
dvnew . Dispose ( ) ;
DMAN . Dispose ( ) ;
}
}
public int GetUCodeFromDeviceGD ( int GdDevice )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "select F_UCODE from T_Base_UArea where F_InputBarcodeConfirm={0}" , GdDevice ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ 0 ] ) ;
}
else
{
dv = dbo . ExceSQL ( string . Format ( "select F_UCODE from T_Base_UArea where F_OutputUDevice={0}" , GdDevice ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ 0 ] ) ;
}
else
{
return 0 ;
}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool IfHaveEarlyTask ( int taskindex , int device )
{
sql . Clear ( ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE F_DeviceIndex=" ) . Append ( device ) . Append ( " and (F_StartTime < (SELECT F_StartTime FROM T_Monitor_Task WHERE F_MonitorIndex = " ) . Append ( taskindex ) . Append ( "))" ) ;
if ( dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
void SetStackSendConveyorManReserve ( int taskindex , int StackIndex )
{ //20120110
DataView dvl = new DataView ( ) ; DataView dv = new DataView ( ) ;
try
{
//20120820
devinfo = Model . CGetInfo . GetDeviceInfo ( StackIndex ) ;
if ( devinfo . VirtualStack > 0 ) StackIndex = devinfo . VirtualStack ;
long fid = GetManageTaskIndexfromMonitor ( taskindex ) ;
int Mankind = GetManageTaskKindIndexFromMonitor ( taskindex ) ;
int [ ] zxy = GetCoordinatesFromMonitorTask ( taskindex ) ;
StringBuilder zxystr = new StringBuilder ( ) ;
if ( zxy ! = null )
{
zxystr . Append ( ( zxy [ 3 ] . ToString ( ) . Length = = 1 ? "0" + zxy [ 3 ] . ToString ( ) : zxy [ 3 ] . ToString ( ) ) ) . Append ( "-" ) . Append (
( ( zxy [ 4 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 4 ] . ToString ( ) ) : ( zxy [ 4 ] . ToString ( ) ) ) ) . Append ( "-" ) . Append (
( ( zxy [ 5 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 5 ] . ToString ( ) ) : ( zxy [ 5 ] . ToString ( ) ) ) ) ;
}
int laneway = 0 ;
dvl = dbo . ExceSQL ( string . Format ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo WHERE (F_StackIndex = {0})" , StackIndex ) ) . Tables [ 0 ] . DefaultView ;
if ( dvl . Count > 0 )
{
laneway = Convert . ToInt32 ( dvl [ 0 ] [ "F_LaneDeviceIndex" ] ) ;
}
else
return ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate,T_Base_Device WHERE (T_Base_Lane_Gate.F_LaneGateDeviceIndex = T_Base_Device.F_DeviceIndex) and (F_ZXY = '" ) . Append ( zxystr ) . Append ( "') and F_LaneIndex=" ) . Append ( laneway ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( ( dv . Count > 0 ) ) // && (StackIndex == devinfo.VirtualStack)
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_Device SET F_ManTaskReserve = (" ) . Append ( Mankind . ToString ( ) ) . Append ( fid . ToString ( ) ) . Append ( ") WHERE (F_DeviceIndex = " ) . Append ( dv [ 0 ] [ 0 ] . ToString ( ) ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dvl . Dispose ( ) ;
}
}
public int GetEndDeviceFromManage ( int mti , long 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 ( ) ;
}
}
public bool GetTaskCountsCanDisassembleToEndDevice ( int TaskIndex , int EndDevice )
{
//查找到该终点的任务,包括所有已经拆分的任务,已经拆分的任务数量+1后,要小于等于限定数量,这样才能进行任务关联
//注意 TaskIndex是马上要拆分的任务,应该考虑
DataView dv = new DataView ( ) ;
try
{
string sqlstr = string . Format ( "SELECT FID,F_ManageTaskKindIndex FROM T_Manage_Task WHERE (FIntoStepOK = '1') AND (FCONTROLTASKTYPE = 2)AND (FENDDEVICE ={0}) " , EndDevice ) ;
dv = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
int outcount = dv . Count ; //已经拆分的任务数量
sqlstr = string . Format ( "select F_DeviceIndex,F_MAXCOUNT,F_EXECOUNT from T_Base_TaskCount where F_DeviceIndex={0} and F_EXECOUNT>0" , EndDevice ) ; //查找执行数量大于0的终点设备,0表示不限制
dv = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
int MaxCount = 0 ;
if ( dv . Count > 0 ) //查找到
{
MaxCount = Convert . ToInt32 ( dv [ 0 ] [ "F_EXECOUNT" ] ) ;
if ( outcount + 1 > = MaxCount ) //此时不能进行出库双叉关联
{
return false ;
}
else
{
return true ;
}
}
else
{
return true ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetNextMonitorTaskIndex ( int taskindex )
{
DataView dv = new DataView ( ) ;
try
{
int mti = GetManageTaskKindIndexFromMonitor ( taskindex ) ;
long fid = GetManageTaskIndexfromMonitor ( taskindex ) ;
sql . Clear ( ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE F_ManageTaskIndex=" ) . Append ( fid ) . Append ( " and F_ManageTASKKINDINDEX=" ) . Append ( mti ) . Append ( " and F_MonitorIndex>" ) . Append ( taskindex ) . Append ( " order by F_MonitorIndex asc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
}
else
{
return 0 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetPriorMonitorTaskIndex ( int taskindex )
{
DataView dv = new DataView ( ) ;
try
{
int mti = GetManageTaskKindIndexFromMonitor ( taskindex ) ;
long fid = GetManageTaskIndexfromMonitor ( taskindex ) ;
sql . Clear ( ) ;
sql . Append ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE F_ManageTaskIndex=" ) . Append ( fid ) . Append ( " and F_ManageTASKKINDINDEX=" ) . Append ( mti ) . Append ( " and F_MonitorIndex<" ) . Append ( taskindex ) . Append ( " order by F_MonitorIndex asc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
}
else
{
return 0 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool IfChangeForkCell ( int stackno , string cell )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo where F_StackIndex={0} and F_ChangeForkCell='{1}'" , stackno , cell ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{
throw ex ;
}
}
/// <summary>
/// 返回需要倒库更换货叉的倒库货位,“-”代表不需要更换货叉,T_Base_Lane_Gate里的倒库货位的虚拟设备是为了置【逻辑有物】
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
public string IfLimitCellChangeFork ( int task , int stackindex )
{ //20110412
bool Ifchange = false ;
int [ ] zxy = GetCoordinatesFromMonitorTask ( task ) ;
int xCoor = zxy [ 4 ] ;
StringBuilder zxystr = new StringBuilder ( ) ;
DataView dv = new DataView ( ) ;
try
{
devinfo = Model . CGetInfo . GetDeviceInfo ( stackindex ) ;
int DeviceIndex = 0 ;
if ( devinfo . VirtualStack > 0 )
{
DeviceIndex = devinfo . VirtualStack ;
}
else
{
DeviceIndex = stackindex ;
}
zxystr . Append ( ( zxy [ 3 ] . ToString ( ) . Length = = 1 ? "0" + zxy [ 3 ] . ToString ( ) : zxy [ 3 ] . ToString ( ) ) ) . Append ( "-" ) . Append (
( ( zxy [ 4 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 4 ] . ToString ( ) ) : ( zxy [ 4 ] . ToString ( ) ) ) ) . Append ( "-" ) . Append (
( ( zxy [ 5 ] . ToString ( ) . Length = = 1 ) ? ( "0" + zxy [ 5 ] . ToString ( ) ) : ( zxy [ 5 ] . ToString ( ) ) ) ) ;
object ob = dbo . GetSingle ( string . Format ( "SELECT FLaneWay FROM ST_CELL WHERE fstack={1} and (FCELLCODE = '{0}')" , zxystr . ToString ( ) , stackindex ) ) ;
int laneway = - 1 ;
if ( ob ! = null )
{
laneway = Convert . ToInt32 ( ob ) ;
}
string TaskUseAwayFork = Model . CGeneralFunction . GetUseAwayFork ( task ) ; //1,2,3;0没分配货叉
int tempStartX = Model . CGeneralFunction . GetXCoorFromMonitor ( task , DeviceIndex , 4 ) ;
int tempEndX = Model . CGeneralFunction . GetXCoorFromMonitor ( task , DeviceIndex , 5 ) ;
int zeroXcoor = 0 , UseAwayFork = 0 ;
sql . Clear ( ) ;
sql . Append ( "SELECT F_ForwardLimitX,F_BackLimitX FROM T_Base_LaneInfo WHERE F_StackIndex = " ) . Append ( DeviceIndex ) . Append ( " and F_ForwardLimitX>0 and F_BackLimitX>0" ) ;
DataView dvl = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( ( devinfo . IfCorrelDoubleFork = = "1" ) & & ( dvl . Count > 0 ) )
{
//堆垛机的原点属性
char [ ] sp = new char [ 1 ] { ',' } ;
string [ ] yd = devinfo . StackZeroColLayer . Split ( sp ) ;
if ( yd . GetLength ( 0 ) > 0 )
{
zeroXcoor = Convert . ToInt32 ( yd [ 0 ] ) ;
}
else
{
_D isassembleTaskError = "IfLimitCellChangeFork发生错误:堆垛机的原点坐标没有填写!" ;
return "-" ;
}
if ( zeroXcoor < Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) )
{ //如果原点列坐标小于ForwardLimitX,检查ForwardLimitX至ForwardLimitX+(n-2);
if ( ( ( tempStartX - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) ) > = 0 ) & & ( ( ( tempStartX - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( tempStartX - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) + 1 ) ;
}
else if ( ( ( tempEndX - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) ) > = 0 ) & & ( ( ( tempEndX - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( tempEndX - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) + 1 ) ;
}
if ( ( Convert . ToInt32 ( TaskUseAwayFork ) > UseAwayFork ) & & ( UseAwayFork ! = 0 ) )
{
Ifchange = true ;
}
}
else if ( zeroXcoor > Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) )
{ //如果原点列坐标大于ForwardLimitX,检查ForwardLimitX至ForwardLimitX-(n-2).
if ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - tempStartX > = 0 ) & & ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - tempStartX < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - tempStartX + 1 ) ;
}
else if ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - tempEndX > = 0 ) & & ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - tempEndX < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - tempEndX + 1 ) ;
}
if ( ( Convert . ToInt32 ( TaskUseAwayFork ) < UseAwayFork ) & & ( UseAwayFork ! = 0 ) )
{
Ifchange = true ;
}
}
UseAwayFork = 0 ;
if ( zeroXcoor < Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) )
{ //如果原点列坐标小于F_BackLimitX,检查F_BackLimitX至F_BackLimitX-(n-2);
if ( ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - tempStartX ) > = 0 ) & & ( ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - tempStartX ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( devinfo . ForkAmount - ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - tempStartX ) ) ;
}
else if ( ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - tempEndX ) > = 0 ) & & ( ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - tempEndX ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( devinfo . ForkAmount - ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - tempEndX ) ) ;
}
if ( ( Convert . ToInt32 ( TaskUseAwayFork ) < UseAwayFork ) & & ( UseAwayFork ! = 0 ) )
{
Ifchange = true ;
}
}
else if ( zeroXcoor > Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) )
{ //如果原点列坐标大于F_BackLimitX,检查F_BackLimitX至F_BackLimitX+(n-2).
if ( ( ( tempStartX - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) > = 0 ) & & ( ( ( tempStartX - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( devinfo . ForkAmount - ( tempStartX - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) ) ;
}
else if ( ( ( tempEndX - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) > = 0 ) & & ( ( ( tempEndX - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( devinfo . ForkAmount - ( tempEndX - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) ) ;
}
if ( ( Convert . ToInt32 ( TaskUseAwayFork ) > UseAwayFork ) & & ( UseAwayFork ! = 0 ) )
{
Ifchange = true ;
}
}
}
if ( Ifchange = = true )
{
string changeforkcell = GetChangeForkCell ( laneway ) ;
if ( changeforkcell = = "" )
{
return "-" ;
}
else
{
return changeforkcell ;
}
}
else
{
return "-" ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 多叉堆垛机换叉货位组,找到空闲的货位
/// </summary>
/// <param name="laneway"></param>
/// <returns></returns>
public string GetChangeForkCell ( int laneway )
{
int fids = 0 ; string cell = "" ; int minfids = int . MaxValue ;
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_LaneDeviceIndex, F_ChangeForkCell FROM T_Base_LaneInfo where F_LaneDeviceIndex={0}" , laneway ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
char [ ] cc = new char [ 1 ] { ';' } ;
string [ ] sp = dv [ 0 ] [ "F_ChangeForkCell" ] . ToString ( ) . Split ( cc ) ;
string ChangeForkCell = string . Empty ;
int lanedev = 0 ;
for ( int i = 0 ; i < sp . GetLength ( 0 ) ; i + + )
{ //T_Monitor_Task表新增 F_ChangeStackCell (和F_ChangeForkCell公用一个字段) "18001,01-30-02"
int . TryParse ( sp [ i ] , out lanedev ) ;
if ( lanedev > 0 )
{ //T_Base_LaneInfo表的 F_ChangeStackCell 和F_ChangeForkCell字段可以填写倒叉货位对应虚拟站台的设备索引
sp [ i ] = GetChangeCellFromLaneGate ( laneway , lanedev ) ;
}
ChangeForkCell = dv [ 0 ] [ "F_LaneDeviceIndex" ] . ToString ( ) + "," + sp [ i ] ;
fids = Convert . ToInt32 ( dbo . GetSingle ( string . Format ( "SELECT count(distinct F_ManageTaskIndex) as fids FROM T_Monitor_Task where F_ChangeStackCell='{0}'" , ChangeForkCell ) ) ) ;
if ( fids < minfids )
{
minfids = fids ;
cell = sp [ i ] ;
}
}
}
return cell ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public string GetChangeCellFromLaneGate ( int laneway , int dev )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_ZXY FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex={0} and F_LaneIndex={1}" , dev , laneway ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return dv [ 0 ] [ "F_ZXY" ] . ToString ( ) ;
}
else
{
return "" ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
public int GetChangeCellStationFromLaneGate ( int laneway , string changecell )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate where F_ZXY='{0}' and F_LaneIndex={1}" , changecell , laneway ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_LaneGateDeviceIndex" ] ) ;
}
else
{
return - 1 ; //别返回-1,这个- liKe货位里面的-
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 以极限列为准分配货叉1,2,3.....
/// </summary>
/// <param name="limitx"></param>
/// <param name="laneway"></param>
/// <returns></returns>
public string GetLimitXForkNo ( int limitx , int laneway )
{
char [ ] cc = new char [ 1 ] ; string [ ] lc ;
string UseAwayFork = "0" ;
DataView dvl = new DataView ( ) ;
StringBuilder sbs = new StringBuilder ( ) ;
object obj = new object ( ) ;
try
{
#region 以极限列为准分配货叉
sbs . Clear ( ) ;
sbs . Append ( "SELECT F_StackIndex FROM T_Base_StackInfo WHERE (F_LaneNo LIKE '%" ) . Append ( laneway ) . Append ( "%')" ) ;
obj = dbo . GetSingle ( sbs . ToString ( ) ) ;
if ( obj ! = null )
{
devinfo = Model . CGetInfo . GetDeviceInfo ( Convert . ToInt32 ( obj ) ) ;
if ( devinfo ! = null )
{
sbs . Remove ( 0 , sbs . Length ) ;
sbs . Append ( "SELECT F_ForwardLimitX,F_BackLimitX FROM T_Base_LaneInfo WHERE F_LaneDeviceIndex = " ) . Append ( laneway ) . Append ( " and F_ForwardLimitX>0 and F_BackLimitX>0" ) ;
dvl = dbo . ExceSQL ( sbs . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( ( devinfo . IfCorrelDoubleFork = = "1" ) & & ( dvl . Count > 0 ) )
{
//堆垛机的原点属性
cc = new char [ 1 ] { ',' } ;
lc = devinfo . StackZeroColLayer . Split ( cc ) ;
if ( Convert . ToInt32 ( lc [ 0 ] ) < Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) )
{ //如果原点列坐标小于ForwardLimitX,检查ForwardLimitX至ForwardLimitX+(n-2);
if ( ( limitx - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) > = 0 ) & & ( ( limitx - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( limitx - Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) + 1 ) . ToString ( ) ;
}
}
else if ( Convert . ToInt32 ( lc [ 0 ] ) > Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) )
{ //如果原点列坐标大于ForwardLimitX,检查ForwardLimitX至ForwardLimitX-(n-2).
if ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - limitx > = 0 ) & & ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - limitx < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( Convert . ToInt32 ( dvl [ 0 ] [ "F_ForwardLimitX" ] ) - limitx + 1 ) . ToString ( ) ;
}
}
if ( Convert . ToInt32 ( lc [ 0 ] ) < Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) )
{ //如果原点列坐标小于F_BackLimitX,检查F_BackLimitX至F_BackLimitX-(n-2);
if ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - limitx > = 0 ) & & ( ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - limitx < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( devinfo . ForkAmount - ( Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) - limitx ) ) . ToString ( ) ;
}
}
else if ( Convert . ToInt32 ( lc [ 0 ] ) > Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) )
{ //如果原点列坐标大于F_BackLimitX,检查F_BackLimitX至F_BackLimitX+(n-2).
if ( ( limitx - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) > = 0 ) & & ( ( limitx - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) < = ( devinfo . ForkAmount - 2 ) ) ) )
{
UseAwayFork = ( devinfo . ForkAmount - ( limitx - Convert . ToInt32 ( dvl [ 0 ] [ "F_BackLimitX" ] ) ) ) . ToString ( ) ;
}
}
}
}
}
return UseAwayFork ;
#endregion
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
}
}
/// <summary>
/// 需要换叉的极限货位,把终点坐标改为倒库货位坐标,T_Base_Lane_Gate里的倒库货位的虚拟设备是为了置【逻辑有物】
/// </summary>
/// <param name="taskindex">设备任务索引</param>
/// <param name="ChangeForkCell">可更改货叉的倒库货位编码</param>
public void ChangeEndCellCode ( int taskindex , string ChangeForkCell , int StackIndex )
{ //20120110
int laneway = 0 ;
DataView dvl = new DataView ( ) ;
DataView dv = new DataView ( ) ;
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] endCell = ChangeForkCell . Split ( cc ) ;
long fid = GetManageTaskIndexfromMonitor ( taskindex ) ;
int Mankind = GetManageTaskKindIndexFromMonitor ( taskindex ) ;
//dbo.TransBegin();
try
{
dvl = dbo . ExceSQL ( string . Format ( "SELECT F_LaneDeviceIndex FROM T_Base_LaneInfo WHERE (F_StackIndex = {0})" , StackIndex ) ) . Tables [ 0 ] . DefaultView ;
if ( dvl . Count > 0 )
{
laneway = Convert . ToInt32 ( dvl [ 0 ] [ "F_LaneDeviceIndex" ] ) ;
}
else
{
return ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate,T_Base_Device WHERE (T_Base_Lane_Gate.F_LaneGateDeviceIndex = T_Base_Device.F_DeviceIndex) and (F_ZXY = '" ) . Append ( ChangeForkCell ) . Append ( "') and F_LaneIndex=" ) . Append ( laneway ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_AheadDetect=F_AheadDetect+'" ) . Append ( ";N" ) . Append ( dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) ) . Append ( ";R" ) . Append ( dv [ 0 ] [ "F_LaneGateDeviceIndex" ] . ToString ( ) )
. Append ( "', F_NumParam4=" ) . Append ( endCell [ 0 ] ) . Append ( ",F_NumParam5=" ) . Append ( endCell [ 1 ] ) . Append ( ",F_ChangeStackCell='" ) . Append ( laneway . ToString ( ) + "," + ChangeForkCell
) . Append ( "',F_NumParam6=" ) . Append ( endCell [ 2 ] ) . Append ( " where F_ManageTaskIndex=" ) . Append ( fid ) . Append ( " and F_ManageTASKKINDINDEX=" ) . Append ( Mankind ) . Append ( " and F_DeviceIndex=" ) . Append ( StackIndex ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FExceptionNO=" ) . Append ( Model . CGeneralFunction . TASKCHANGEFORK ) . Append ( " where FID=" ) . Append ( fid ) . Append ( " and F_ManageTaskKindIndex=" ) . Append ( Mankind ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
//该任务倒换货叉时,判读关联任务是否需要倒换货叉
Dictionary < int , string [ ] > corrinfo = Model . CGeneralFunction . GetDoubleForkMonitorInfo ( taskindex , StackIndex ) ;
bool changeflag = false ;
if ( corrinfo ! = null ) //存在关联任务
{
foreach ( int CorrTaskindex in corrinfo . Keys )
{
if ( CorrTaskindex ! = taskindex )
{
string ChangeForkCell1 = IfLimitCellChangeFork ( CorrTaskindex , StackIndex ) ;
if ( ChangeForkCell1 ! = "-" ) //关联任务需要倒换货叉
{
changeflag = true ;
}
}
}
//解除关联
//此处判读是否解除关联关系,如果双叉任务都需要倒换货叉时才解除关联,堆垛机一次取送一个托盘。如果只有单叉需要倒换货叉,不解除关联关系,一次取两个托盘。
if ( changeflag )
{
dbo . ExecuteSql ( string . Format ( "UPDATE T_Manage_Task SET F_RELATIVECONTORLID = - 1 WHERE (F_ManageTaskKindIndex = {0}) AND (FID = {1})" , Mankind , fid ) ) ;
}
}
}
//dbo.TransCommit();
}
catch ( Exception ex )
{
throw ex ;
//dbo.TransRollback();
}
finally
{
dv . Dispose ( ) ;
dvl . Dispose ( ) ;
}
}
public string GetManageTaskStackFork ( int manKind , int fid )
{
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT FUseAwayFork FROM T_Manage_Task WHERE (FID = {0}) AND (F_ManageTaskKindIndex = {1})" , fid , manKind ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return dv [ 0 ] [ "FUseAwayFork" ] . ToString ( ) ;
}
else
{
return "0" ;
}
}
public string GetAvailableCellCode ( int StartDeviceIndex , string laneway )
{
string strCellCode = string . Empty ;
DataView dvTask = new DataView ( ) ;
DataView dvCell = new DataView ( ) ;
string sqlstr = string . Empty ;
string sqlshort = "1=1" ;
int iShortOfEmptyCell = 0 ;
int iBusyLevel = 0 ;
//DataView dvRoute = dbo.ExceSQL("SELECT * FROM T_Base_Route WHERE (F_EndDevice in (" + laneway + ")) AND (F_Status = 1) AND (F_StartDevice = " + StartDeviceIndex + ")").Tables[0].DefaultView;
//不判断路径状态了
DataView dvRoute = dbo . ExceSQL ( "SELECT * FROM T_Base_Route WHERE (F_EndDevice in (" + laneway + ")) AND (F_StartDevice = " + StartDeviceIndex + ")" ) . Tables [ 0 ] . DefaultView ;
if ( ( dvRoute ! = null ) & & ( dvRoute . Count > 0 ) ) //可到达的路径
{
do
{
for ( int i = 0 ; i < dvRoute . Count ; i + + )
{
dvTask = dbo . ExceSQL ( "SELECT * FROM T_Manage_Task WHERE (FENDDEVICE = " + Convert . ToInt32 ( dvRoute [ i ] [ "F_EndDevice" ] ) . ToString ( ) + ")" ) . Tables [ 0 ] . DefaultView ;
if ( dvTask ! = null & & dvTask . Count > iBusyLevel ) //此路径已有任务
{
continue ;
}
else
{
if ( StartDeviceIndex = = 2 2 1 3 4 | | StartDeviceIndex = = 1 2 1 0 6 )
{
dvCell = dbo . ExceSQL ( "SELECT top 1 * FROM ST_CELL WHERE (FLaneWay = " + Convert . ToInt32 ( dvRoute [ i ] [ "F_EndDevice" ] ) . ToString ( ) + ") AND (FCELLSTATUS = 0) AND(FRunStatus = 0) AND(F_Z =4) AND(F_Y =1) And (F_X>=51)And (F_X<=100) ORDER BY F_Z,F_X,F_Y " ) . Tables [ 0 ] . DefaultView ;
}
else
if ( StartDeviceIndex = = 1 2 0 1 7 ) //一楼入库为空托盘,存放在一层
{
int enddevice = Convert . ToInt32 ( dvRoute [ i ] [ "F_EndDevice" ] ) ;
sqlstr = string . Format ( "SELECT top 1 * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) And (F_Y =1) And (F_X>3)And (F_X<=30) and {1} ORDER BY F_Z,F_X desc,F_Y asc" , enddevice , sqlshort ) ;
dvCell = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
}
else //托盘库
if ( StartDeviceIndex = = 2 2 0 1 2 ) //二楼入库为实托盘,存放在二层
{
int enddevice = Convert . ToInt32 ( dvRoute [ i ] [ "F_EndDevice" ] ) ;
sqlstr = string . Format ( "SELECT top 1 * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) And (F_Y =2) And (F_X>19)And (F_X<=30) and {1} ORDER BY F_Z,F_X desc,F_Y asc" , enddevice , sqlshort ) ;
dvCell = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
}
if ( dvCell ! = null & & dvCell . Count > 0 )
{
strCellCode = dvCell [ 0 ] [ "fcellcode" ] . ToString ( ) . Trim ( ) ;
//将货位置为选中状态
dbo . ExceSQL ( "update ST_CELL set FRunStatus = 1 where FLaneWay= " + Convert . ToInt32 ( dvRoute [ i ] [ "F_EndDevice" ] ) + " and fcellcode = '" + strCellCode + "'" ) ;
break ;
}
else
{
iShortOfEmptyCell + + ;
continue ;
}
}
}
if ( strCellCode = = string . Empty ) //有可用路径且没有分配到货位
{
if ( iShortOfEmptyCell = = dvRoute . Count ) //No empty Cell
{
//System.Windows.Forms.MessageBox.Show("No empty Cell!!!");
strCellCode = "-" ;
break ;
}
}
iBusyLevel + + ;
} while ( strCellCode = = string . Empty ) ;
}
return strCellCode ;
}
public string GetNextCell ( int StartDeviceIndex , int lane , int boxtype )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string sqlstr = string . Empty ;
string sqlshort = "1=1" ;
string sqlstr2 = string . Empty ;
string sqlshort2 = "1=1" ;
//string cell = WcfControlMonitorLib.CStaticClass.TestCell[lane];//上次存储的货位编码
string newcell = "-" ;
//string[] sp = cell.Split(cc);
//if (sp.Length > 2)
//{
//DataView dv = dbo.ExceSQL("SELECT * FROM ST_CELL WHERE (FLaneWay=" + lane + " and F_Z=" +
// sp[0] + " and F_X=" + sp[1] + " and F_Y=" + sp[2] + ")").Tables[0].DefaultView;
//if (dv.Count > 0)
//{
//LT1 管理发送的是列值的最小值
//第五、六排 3,4,5|6,7,8|...|78,79,80|81,82
//第七排2,3,4|5,6,7|...|77,78,79|80,81
//第八排 3,4,5,|11,12,13|...|23,24,25|31,32,33| //LT1只能存放在LT2货位列值大的一侧,LT2可以存放4个GB
//第八排 34,35,36|37,38,39|...|73,74,75|76,77
//LT2
//第八排 2,3,4,5|10,11,12,13|...|30,31,32,33|
//if (lane < 15801)//14801,14802
//{
// //只存储GB
// //不受限制的分配货位
//}
//else//15801,15802
//{
// if (lane == 15801)
// {
// //判断GB /LT1
// //GB
// if (boxtype == 1)
// {
// //不受限制
// }
// else
// if (boxtype == 2)//LT1
// {
// sqlshort = "( F_X>=3 And F_X<81 And F_X%3=0 ) ";
// }
// }
// else//15802
// {
// //判断GB,LT1,LT2
// if (boxtype == 1)
// {
// //不受限制
// }
// else//LT1
// if (boxtype == 2)
// {
// sqlshort = "((F_Z=7 And F_X>=2 And F_X<80 And F_X%3=2 )or (F_Z=8 And F_X>=3 And F_X<34 And F_X%8=3 ) or (F_Z=8 And F_X>=34 And F_X<76 And F_X%3=1 )) ";
// }
// else//LT2
// if (boxtype == 3)
// {
// sqlshort = "(F_Z=8 And F_X>=2 And F_X<34 And F_X%4=2 ) ";
// }
// }
//}
//FUCONVEYOR
if ( StartDeviceIndex > = 1 2 0 0 7 & & StartDeviceIndex < = 1 2 0 1 3 )
{
sqlstr = string . Format ( "SELECT * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) AND (FUCONVEYOR = 0) and ( F_X>2) and {1} ORDER BY F_Y asc,F_Z,F_X asc" , lane , sqlshort ) ;
}
else
if ( StartDeviceIndex = = 1 2 1 1 4 )
{
sqlstr = string . Format ( "SELECT * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) AND (FUCONVEYOR = 0) and ( F_X>4)and( F_X<61) and ( F_Y<=13) and {1} ORDER BY F_Y desc,F_Z,F_X desc" , lane , sqlshort ) ;
}
else
if ( StartDeviceIndex = = 1 2 1 0 6 | | StartDeviceIndex = = 2 2 1 3 4 )
{
sqlstr = string . Format ( "SELECT * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) AND (FUCONVEYOR = 0) and ( F_X>60)and( F_X<121) and ( F_Y<=13) {1} ORDER BY F_Y desc,F_Z,F_X" , lane , sqlshort ) ;
}
else
{
sqlstr = string . Format ( "SELECT * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) AND (FUCONVEYOR = 0) and ( F_X>2) and {1} ORDER BY F_Y asc,F_Z,F_X asc" , lane , sqlshort ) ;
}
//DataView dv0 = dbo.ExceSQL("SELECT * FROM ST_CELL WHERE (FCELLSTATUS = 0) and (FLaneWay=" + lane + ") and (FID>" + dv[0]["FID"] + ") order by fid asc").Tables[0].DefaultView;
DataView dv0 = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
if ( dv0 . Count > 0 )
{
//判断该货物的后面货位的状态
int Z , X , Y ;
for ( int i = 0 ; i < dv0 . Count ; i + + )
{
Z = Convert . ToInt32 ( dv0 [ i ] [ "F_Z" ] ) ;
X = Convert . ToInt32 ( dv0 [ i ] [ "F_X" ] ) ;
Y = Convert . ToInt32 ( dv0 [ i ] [ "F_Y" ] ) ;
if ( boxtype > 1 )
{
sqlshort2 = string . Format ( "(F_X={2} or F_X={3} ) " , Z , Y , X + 1 , X + 2 ) ; //LT1
if ( boxtype = = 3 ) //LT2
{
sqlshort2 = string . Format ( "(F_X={2} or F_X={3} or F_X={4} ) " , Z , Y , X + 1 , X + 2 , X + 3 ) ; //LT1
}
sqlstr2 = string . Format ( "SELECT * FROM ST_CELL WHERE (FLaneWay = {0}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) and (F_Z={1}) and (F_Y={2}) and {3} ORDER BY F_Y asc,F_Z,F_X asc" , lane , Z , Y , sqlshort2 ) ;
DataView dv00 = dbo . ExceSQL ( sqlstr2 ) . Tables [ 0 ] . DefaultView ;
if ( dv0 . Count > 0 )
{
newcell = Convert . ToString ( dv0 [ i ] [ "FCELLCODE" ] ) ;
break ;
}
else
{
continue ;
}
}
else //GB直接返回
{
newcell = Convert . ToString ( dv0 [ i ] [ "FCELLCODE" ] ) ;
break ;
}
}
//将货位置为选中状态
dbo . ExceSQL ( "update ST_CELL set FRunStatus = 1,FUCONVEYOR = 1 where FLaneWay= " + lane + " and fcellcode = '" + newcell + "'" ) ;
//if (newcell != "0")
//{
// WcfControlMonitorLib.CStaticClass.TestCell[lane] = newcell;
//}
return newcell ;
}
else
{
return "-" ;
}
//}
//else
//{
// return "0";
//}
}
public string GetNextCell ( string StartCell , int lane )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] sp = StartCell . Split ( cc ) ;
int oldx = Convert . ToInt32 ( sp [ 1 ] ) ; //原来的列值
string sqlstr = string . Empty ;
string sqlshort = "1=1" ;
string newcell = "-" ;
//FUCONVEYOR
sqlstr = string . Format ( "SELECT MAX(ABS(F_X - {0})) AS A, F_X,F_Y,F_Z, FCELLCODE FROM ST_CELL WHERE (FLaneWay = {1}) AND (FCELLSTATUS = 0) AND(FRunStatus = 0) AND (FUCONVEYOR = 0) and ( F_X>2)and ( F_X<40) GROUP BY F_X, FCELLCODE, F_Y, F_Z ORDER BY A desc, F_Y asc,F_Z,F_X asc" , oldx , lane ) ;
DataView dv0 = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
if ( dv0 . Count > 0 )
{
newcell = Convert . ToString ( dv0 [ 0 ] [ "FCELLCODE" ] ) ;
//将原来的货位置为选中状态
dbo . ExceSQL ( "update ST_CELL set FRunStatus = 1 where FLaneWay= " + lane +
" and fcellcode = '" + StartCell + "'" ) ;
//将选中的货位置为选中状态
dbo . ExceSQL ( "update ST_CELL set FRunStatus = 1,FUCONVEYOR = 1 where FLaneWay= " + lane +
" and fcellcode = '" + newcell + "'" ) ;
return newcell ;
}
else
{
return "-" ;
}
}
public string GetTestInLaneway ( )
{
string lanes = "" ;
//获取开启入库测试的巷道
foreach ( int laneindex in CStaticClass . StopTest . Keys )
{
if ( laneindex > 0 & & CStaticClass . StopTest [ laneindex ] = = false )
{
if ( CStaticClass . StopIn . ContainsKey ( laneindex ) = = true & & CStaticClass . StopIn [ laneindex ] = = false ) //没有停止入库测试
{
lanes = string . Format ( "{0},{1}" , lanes , laneindex ) ;
}
}
}
lanes = lanes . TrimStart ( ',' ) ;
return lanes ;
}
public int GetLanewayFromCellCode ( string strCellCode , int warehouse )
{
int iLaneway = - 1 ;
if ( strCellCode ! = string . Empty )
{
DataView dv = dbo . ExceSQL ( "SELECT FLaneWay FROM ST_CELL WHERE (FWAREHOUSE = " + warehouse + ") and (FCELLCODE = '" + strCellCode + "')" ) . Tables [ 0 ] . DefaultView ;
if ( dv ! = null & & dv . Count > 0 )
{
iLaneway = Convert . ToInt32 ( dv [ 0 ] [ "FLaneWay" ] . ToString ( ) ) ;
}
}
return iLaneway ;
}
//获得调度任务的逻辑区域
public int GetLogicAreaFromManageTask ( int taskKindIndex , int Managefid ) //20130107
{
//20100108
string sql ;
try
{
//20100108
sql = string . Format ( "SELECT FLOGIC_AREA FROM T_Manage_Task WHERE (FID = {0}) AND (F_ManageTaskKindIndex ={1})" , Managefid , taskKindIndex ) ;
object ob = dbo . GetSingle ( sql ) ;
if ( ob ! = null & & ob . ToString ( ) ! = "" )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
sql = null ;
}
}
public int GetLaneGate ( int enddevice , int laneindex )
{
string sql = string . Format ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_ParentDeviceIndex = {0}) And (F_LaneIndex = {1}) " , enddevice , laneindex ) ;
object ob = dbo . GetSingle ( sql ) ;
if ( ob ! = null )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return 0 ;
}
}
/// <summary>
/// 20161224 是否存终点是该设备的设备指令
/// </summary>
/// <param name="enddevice">目标设备索引</param>
/// <param name="Monitorindex">设备指令</param>
/// <returns></returns>
public int GetEndTransDeviceWithTaskIndex ( int enddevice , int Monitorindex )
{
string sql = string . Format ( "SELECT F_NumParam4 FROM T_Monitor_Task WHERE (F_MonitorIndex = {0}) And (F_NumParam4 = {1})" , Monitorindex , enddevice ) ;
//object ob = dbo.GetSingle("SELECT F_NumParam4 FROM T_Monitor_Task WHERE (F_MonitorIndex = " + Monitorindex + ") And (F_DeviceIndex = " + startdevice + ") And (F_NumParam4 = "+enddevice+")");
object ob = dbo . GetSingle ( sql ) ;
if ( ob ! = null )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return 0 ;
}
}
/// <summary>
/// 20161224 是否存在终点设备是该设备,且条码相同的设备指令
/// </summary>
/// <param name="enddevice">目标设备索引</param>
/// <param name="Monitorindex">设备指令</param>
/// <returns></returns>
public int GetEndTransDeviceWithBarCode ( int enddevice , string barcode )
{
string sql = string . Format ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_TxtParam like '%{0}%') And (F_NumParam4 = {1})" , barcode , enddevice ) ;
//object ob = dbo.GetSingle("SELECT F_NumParam4 FROM T_Monitor_Task WHERE (F_MonitorIndex = " + Monitorindex + ") And (F_DeviceIndex = " + startdevice + ") And (F_NumParam4 = "+enddevice+")");
object ob = dbo . GetSingle ( sql ) ;
if ( ob ! = null )
{
return Convert . ToInt32 ( ob ) ;
}
else
{
return 0 ;
}
}
public bool GetTransDeviceIfFull ( string Devices )
{
try
{
char [ ] cc = new char [ 1 ] { ';' } ;
string [ ] sp ;
sp = Devices . Split ( cc ) ;
int count = sp . Length ; //设备数量
int goodscount = 0 ; //货物数量
for ( int i = 0 ; i < count ; i + + )
{
int deviceindex = Convert . ToInt32 ( sp [ i ] ) ;
devinfo = Model . CGetInfo . GetDeviceInfo ( deviceindex ) ;
if ( devinfo ! = null )
{
goodscount + = devinfo . SplitByte_0 ;
goodscount + = devinfo . SplitByte_1 ;
}
}
if ( goodscount > = count )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{
return false ;
}
}
/// <summary>
/// add by lyj 20171116 送货是如果目标巷道有堆垛机则调离堆垛机
/// </summary>
/// <param name="Handtask"></param>
/// <param name="Errtext"></param>
/// <returns></returns>
public bool InsertHandTask ( Model . HandTask Handtask , out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
string Sql = string . Empty ;
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
string qcell = string . Empty , scell = string . Empty ;
int hidx = GetManageHandIdx ( ) ;
int hmindx = GetMonitorIndex ( hidx , 4 ) ;
int rehidx = 0 , rehmindx = 0 ;
int [ ] relfid = null ;
//20101028
int z = 0 , x = 0 , y = 0 , z1 = 0 , x1 = 0 , y1 = 0 , Inworkbench = 0 ; ;
int routeIDsub = GetRouteIDsubb ( Convert . ToInt32 ( Handtask . _d eviceIndex ) ) ;
if ( ( routeIDsub = = - 1 ) & & ( GetDeviceKindIdx ( Handtask . _d eviceIndex ) ! = 1 3 ) & & ( GetDeviceKindIdx ( Handtask . _d eviceIndex ) ! = 3 1 ) )
{
Errtext = "您选择的设备错误!" ;
return false ;
}
#region 堆垛机
if ( GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 )
{
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] sp = Handtask . _ cellcodeBegin . Split ( cc ) ;
if ( sp . Length > = 3 )
{
z = Convert . ToInt32 ( sp [ 0 ] ) ;
x = Convert . ToInt32 ( sp [ 1 ] ) ;
y = Convert . ToInt32 ( sp [ 2 ] ) ;
}
sp = Handtask . _ cellcodeEnd . Split ( cc ) ;
if ( sp . Length > = 3 )
{
z1 = Convert . ToInt32 ( sp [ 0 ] ) ;
x1 = Convert . ToInt32 ( sp [ 1 ] ) ;
y1 = Convert . ToInt32 ( sp [ 2 ] ) ;
}
}
#endregion
string useawayfork = "-" ; int [ ] xx ; int [ ] xx1 ;
string barcode = string . Empty ;
useawayfork = Handtask . _f orkNo . ToString ( ) ;
char [ ] cp = new char [ 1 ] { ',' } ;
if ( ( GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 3 ) | | ( GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 3 1 ) )
{
barcode = Handtask . _ cellcodeBegin ;
}
else
{
barcode = hmindx . ToString ( ) ;
}
int bcll = barcode . Length ;
for ( int j = 0 ; j < ( 6 - bcll ) ; j + + )
{
barcode + = j . ToString ( ) ;
}
Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam) " +
"values(" + routeIDsub + "," + hidx + ",4," + hmindx + "," + Handtask . _d eviceIndex
+ "," + Handtask . _d eviceOrder + "," + z + "," + x + "," + y + "," + z1 + "," + x1 + "," + y1 + ",'" + useawayfork + "','" + barcode + "')" ;
dbo . ExceSQL ( Sql ) ;
//Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('" +
// barcode + "'," + hidx + ",4,-1,1," + Handtask._deviceIndex + ",'" + Handtask._deviceOrder + "','" + z.ToString() + "-" + x.ToString() + "-" + y.ToString()
// + "'," + Handtask._arrowLocation + ",'" + z1.ToString() + "-" + x1.ToString() + "-" + y1.ToString() + "','" + dtime + "'," + Handtask._forkNo + ")";
Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('" +
barcode + "'," + hidx + ",4,-1,1," + Handtask . _d eviceIndex + ",'" + Handtask . _d eviceOrder + "','" + Handtask . _ cellcodeBegin . ToString ( )
+ "'," + Handtask . _ arrowLocation + ",'" + Handtask . _ cellcodeEnd . ToString ( ) + "','" + dtime + "'," + Handtask . _f orkNo + ")" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( hidx ) ;
if ( relfid ! = null )
{
dbo . ExecuteSql ( "update T_Manage_Task set F_RELATIVECONTORLID=" + hidx + " where F_ManageTaskKindIndex=4 and FID=" + hidx ) ;
for ( int i = 0 ; i < relfid . Length ; i + + )
{
dbo . ExecuteSql ( "update T_Manage_Task set F_RELATIVECONTORLID=" + hidx + " where F_ManageTaskKindIndex=4 and FID=" + relfid [ i ] ) ;
}
}
Errtext = string . Empty ;
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "BuildHandTask" , cea ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
}
}
int GetRouteIDsubb ( int device )
{
DataView dv = new DataView ( ) ;
Model . MDevice devinfokk ;
string temsql = string . Empty ;
try
{
//if (device == 11001 || device == 11002 || device == 11003)
//{
// device = 1100;
//}
//string stemkk = "SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex like '" + device + "%'";
devinfokk = Model . CGetInfo . GetDeviceInfo ( device ) ;
if ( devinfokk . IsVirtualDevice = = 1 )
{
temsql = "SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex like '" + 1 1 0 0 + "%'" ;
}
else
{
temsql = "SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex=" + device + "" ;
}
dv = dbo . ExceSQL ( temsql ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_RouteIDSub" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
devinfokk = null ;
}
}
int GetManageHandIdx ( )
{
DataSet ds = new DataSet ( ) ; DataSet dss = new DataSet ( ) ;
try
{
int hidx = 0 ;
ds = dbo . ExceSQL ( "SELECT F_ManageTaskKindIndex, max(FID) as mFID FROM T_Manage_Task Where F_ManageTaskKindIndex=4 group by F_ManageTaskKindIndex" ) ;
if ( ds . Tables [ 0 ] . DefaultView . Count > 0 )
{
hidx = Convert . ToInt32 ( ds . Tables [ 0 ] . DefaultView [ 0 ] [ "mFID" ] ) + 1 ;
}
else
{
dss = dbo . ExceSQL ( "SELECT F_ManageTaskIndex FROM T_Base_Manage_Task_Index_Hand_Task" ) ;
if ( dss . Tables [ 0 ] . DefaultView . Count > 0 )
{
if ( ( Convert . ToInt32 ( dss . Tables [ 0 ] . DefaultView [ 0 ] [ "F_ManageTaskIndex" ] ) + 1 ) > = 2 9 9 9 8 )
{
hidx = 2 0 0 0 1 ;
}
else
{
hidx = ( Convert . ToInt32 ( dss . Tables [ 0 ] . DefaultView [ 0 ] [ "F_ManageTaskIndex" ] ) + 1 ) ;
}
}
else
{
hidx = 2 0 0 0 1 ;
}
}
RecordMaxHandTaskFID ( hidx ) ;
return hidx ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
ds . Dispose ( ) ;
dss . Dispose ( ) ;
}
}
void RecordMaxHandTaskFID ( int fid )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( "select F_ManageTaskIndex from T_Base_Manage_Task_Index_Hand_Task" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( fid = = 2 9 9 9 8 )
{
dbo . ExceSQL ( "UPDATE T_Base_Manage_Task_Index_Hand_Task SET F_ManageTaskIndex =20001" ) ;
return ;
}
if ( fid > Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) )
{
dbo . ExceSQL ( "UPDATE T_Base_Manage_Task_Index_Hand_Task SET F_ManageTaskIndex =" + fid ) ;
return ;
}
}
else
{
dbo . ExceSQL ( "INSERT INTO T_Base_Manage_Task_Index_Hand_Task (F_ManageTaskIndex)VALUES (" + fid + ")" ) ;
return ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 查找关联任务ID
/// </summary>
/// <param name="taskindex">设备指令索引</param>
/// <returns></returns>
public int GetRelativeTaskIdIndex ( int taskindex )
{
DataView dv ;
try
{
string sql = "SELECT F_RELATIVECONTORLID 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 ( F_MonitorIndex = " + taskindex + ")" ;
dv = dbo . ExceSQL ( sql ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 & & dv [ 0 ] [ "F_RELATIVECONTORLID" ] ! = DBNull . Value )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_RELATIVECONTORLID" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv = null ;
}
}
/// <summary>
/// 通过管理ID查到任务类型
/// </summary>
/// <param name="taskKindIndex">任务种类</param>
/// <param name="Managefid">管理任务ID</param>
/// <returns></returns>
public int GetFCONTROLTASKTYPEFromManageTask ( int taskKindIndex , long Managefid )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FCONTROLTASKTYPE 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 ] [ "FCONTROLTASKTYPE" ] = = DBNull . Value ) return - 1 ;
return Convert . ToInt32 ( dv [ 0 ] [ "FCONTROLTASKTYPE" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
/// 通过管理ID查到终止层
/// </summary>
/// <param name="taskKindIndex">任务种类</param>
/// <param name="Managefid">管理任务ID</param>
/// <returns></returns>
public int GetFEndLayerFromManageTask ( int taskKindIndex , long Managefid )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FEndLayer 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 ] [ "FEndLayer" ] = = DBNull . Value ) return - 1 ;
return Convert . ToInt32 ( dv [ 0 ] [ "FEndLayer" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
/// <summary>
/// 通过调度任务号找到相应层的输送机 add by lyj20180502
/// </summary>
/// <param name="taskindex">调度任务索引</param>
/// <param name="Managefid">管理任务ID</param>
/// <returns></returns>
public int getLayerFromMonitorTask ( int taskindex )
{
//20100108
DataView dv = new DataView ( ) ;
try
{
//20101124
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_NumParam1 from T_Monitor_Task where F_MonitorIndex= " ) . Append ( taskindex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( dv [ 0 ] [ "F_NumParam1" ] = = DBNull . Value ) return - 1 ;
return Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam1" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
/// <summary>
/// add by lyj20180508 如果有关联任务的取货送货不发
/// </summary>
/// <param name="order">设备命令</param>
/// <param name="relaid">关联ID</param>
/// <returns></returns>
public bool getSentOrNoTask ( int order , int relaid )
{
//20100108
DataView dv = new DataView ( ) ;
bool flag = false ;
try
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select * from T_Manage_Task,T_Monitor_Task,T_Base_Device " ) .
Append ( "where dbo.T_Manage_Task.FID=dbo.T_Monitor_Task.F_ManageTaskIndex " ) .
Append ( "and dbo.T_Base_Device.F_DeviceIndex=dbo.T_Monitor_Task.F_DeviceIndex " ) .
Append ( "and F_DeviceKindIndex=40 and F_DeviceCommandIndex=4 and F_RELATIVECONTORLID=" ) . Append ( relaid ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
flag = true ;
}
return flag ;
}
catch ( Exception ex )
{ //20100108
throw ex ;
}
finally
{ //20100108
dv . Dispose ( ) ;
}
}
}
}