using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Runtime.Serialization ;
using System.ServiceModel ;
using System.Text ;
using CommonLib ;
using System.Data ;
using ICommLayer ;
using CommLayerFactory ;
using System.IO ;
using System.Threading ;
using CommonUtils ;
using System.Runtime.InteropServices.ComTypes ;
namespace WcfControlMonitorLib
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
/// <summary>
/// 调度wcf的实现
/// </summary>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class SControlMonitor : IControlMonitor , IDisposable , IBasicControlMonitor
{
#region 变量定义
//ManageService.S_ManageService g_manageService = new ManageService.S_ManageService();
Model . MDevice _d evice = null ;
public static System . Collections . Hashtable ClientCallbackLists = new System . Collections . Hashtable ( ) ;
public static System . Collections . Hashtable ClientShowLists = new System . Collections . Hashtable ( ) ;
/// <summary>
/// 数据变化事件
/// </summary>
public static event CDataSourceChangeEventHandler DataChange ;
/// <summary>
/// 通道打开事件
/// </summary>
public static event ClientLogEventHandler ChannelOpen ;
/// <summary>
/// 客户端断开服务
/// </summary>
public static event ClientLogEventHandler ClientLogout ;
public static event CUpdateDBEventHandler AGVUpdateDB ;
public static event CUpdateDBEventHandler PLCCommonUpdateDB ;
public static event CDeviceStateChangeEventHandler CDeviceState ;
public static event CStringInfoEventHandler SendBarcode ;
public static event CWriteDarkCasketEventHandler WriteDarkCasket ; //20121108
public static event CSendDeviceOrderEventHandler SendDeviceOrder ; //20121108
static DBFactory . DBOperator dbo = new DBFactory . DBOperator ( ) ; //20130926
static DBFactory . DBOperator dboMan = CStaticClass . dboM ; //20130510
static DBFactory . DBOperator dbo1 ;
CCommonFunction ccf = new CCommonFunction ( ) ;
CGetState cgs = new CGetState ( ) ;
static CControl cctrl = new CControl ( ) ;
ISendDeviceOrder sdo ;
Model . MDevice devinfo ;
Model . MDevice modifypathdevinfo ;
Model . MDevice askDevinfo ;
Model . MDevice ClientUsedDevinfo ; //20161229
StringBuilder [ ] wv = { new StringBuilder ( "2" ) } ;
StringBuilder [ ] witemnames = { new StringBuilder ( "" ) } ;
private Object thisLock = new Object ( ) ;
DataView dvclient = new DataView ( ) ; //20161229
string sqlstr = string . Empty ;
#endregion
/// <summary>
/// 构造函数
/// </summary>
public SControlMonitor ( )
{
try
{
//g_manageService.ManageInStorageCheckoutCompleted += new ManageService.ManageInStorageCheckoutCompletedEventHandler(g_manageService_ManageInStorageCheckoutCompleted);
//初始化管理和调度交互状态
Model . CGetInfo . AddIOControlStatus ( ) ;
Model . CGetInfo . AddDeviceKindInfo ( ) ;
Model . CGetInfo . AddDeviceInfo ( ) ;
Model . CGetInfo . AddModifyPathDeviceInfo ( ) ;
Model . CGetInfo . AddDeviceErrors ( ) ;
#region 调度优化设置
CStaticClass . MovedDeviceAheadTrigger = CommonClassLib . AppSettings . GetValue ( "MovedDeviceAheadTrigger" ) ;
CStaticClass . OutDetectArrowIdleGoods = CommonClassLib . AppSettings . GetValue ( "OutDetectArrowIdleGoods" ) ;
CStaticClass . DeviceErrorAutoModifyRoutePath = CommonClassLib . AppSettings . GetValue ( "DeviceErrorAutoModifyRoutePath" ) ;
CStaticClass . DoubleForkWaitTime = CommonClassLib . AppSettings . GetValue ( "DoubleForkWaitTime" ) ;
CStaticClass . StockCodeCheck = CommonClassLib . AppSettings . GetValue ( "StockCodeCheck" ) ;
CStaticClass . TransportTimeout = CommonClassLib . AppSettings . GetValue ( "TransportTimeout" ) ;
//20121203
CStaticClass . HCA12068 = CommonClassLib . AppSettings . GetValue ( "HCA12068" ) ;
CStaticClass . HCB12019 = CommonClassLib . AppSettings . GetValue ( "HCB12019" ) ;
CStaticClass . HCB12034 = CommonClassLib . AppSettings . GetValue ( "HCB12034" ) ;
CStaticClass . HCBLanewayOutDB = CommonClassLib . AppSettings . GetValue ( "HCBLanewayOutDB" ) ;
CStaticClass . SaveDays = CommonClassLib . AppSettings . GetValue ( "SaveDays" ) ; //保存任务历史记录的时间
CStaticClass . OutTaskCounts = CommonClassLib . AppSettings . GetValue ( "OutTaskCounts" ) ; //终点相同的出库任务执行的最大数量
CStaticClass . OutTaskCounts1 = CommonClassLib . AppSettings . GetValue ( "OutTaskCounts1" ) ; //终点相同的出库任务执行的最大数量
CStaticClass . OutTaskCounts2 = CommonClassLib . AppSettings . GetValue ( "OutTaskCounts2" ) ;
CStaticClass . OutTaskCounts3 = CommonClassLib . AppSettings . GetValue ( "OutTaskCounts3" ) ;
CStaticClass . ManageServiceAddress = CommonClassLib . AppSettings . GetValue ( "ManageServiceAddress" ) ; //民航二所
CStaticClass . ManageServiceAddressTwo = CommonClassLib . AppSettings . GetValue ( "ManageServiceAddressTwo" ) ;
CStaticClass . ManageServiceAddressThree = CommonClassLib . AppSettings . GetValue ( "ManageServiceAddressThree" ) ;
#endregion
}
catch ( Exception ex )
{
throw ex ;
}
}
void CSendBarcode ( int deviceindex , string barcode , bool confirm )
{ //一楼条码扫描16001入库分道管理异步回调
object sender = deviceindex . ToString ( ) ; DataView dv = new DataView ( ) ; int newdev = 1 6 0 0 1 1 ;
int _ confirm = 0 ; //1为剔除 2为直行
try
{
if ( confirm = = true )
{
_ confirm = 2 ;
}
else
{
_ confirm = 1 ;
}
#region 挑选写区(160011,160012,160013)
//依次循环分区写入
dv = dbo . ExceSQL ( string . Format ( "SELECT F_TaskIndex FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = {0})" , deviceindex ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
switch ( Convert . ToInt32 ( dv [ 0 ] [ 0 ] ) )
{
case 1 6 0 0 1 1 :
newdev = 1 6 0 0 1 2 ;
break ;
case 1 6 0 0 1 2 :
newdev = 1 6 0 0 1 3 ;
break ;
case 1 6 0 0 1 3 :
newdev = 1 6 0 0 1 1 ;
break ;
default :
newdev = 1 6 0 0 1 1 ;
break ;
}
}
#endregion
CStringInfoEventArgs e = new CStringInfoEventArgs ( newdev , barcode , _ confirm ) ;
SendBarcode ( sender , e ) ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
void CCommon_UpdateDB ( object sender , CUpdateDBChangeEventArgs e )
{
if ( PLCCommonUpdateDB ! = null )
{ //20150103
PLCCommonUpdateDB ( sender , e ) ;
}
}
void CListenAGVState_UpdateDB ( object sender , CUpdateDBChangeEventArgs e )
{
AGVUpdateDB ( sender , e ) ;
}
void CClientTCPIP_SendDeviceOrder ( object sender , CSendDeviceOrderEventArgs e )
{
SendDeviceOrder ( sender , e ) ;
}
void CClientTCPIP_WriteDarkCasket ( object sender , CWriteDarkCasketEventArgs e )
{
WriteDarkCasket ( sender , e ) ;
}
void MonitorRefreshMonitor ( RefreshMonitorEventArgs e )
{
OnRefreshMonitor ( e ) ;
}
void MonitorDataChange ( object sender , CDataChangeEventArgs e )
{
OnDataChange ( sender , e ) ;
}
#region 事件响应
public static void OnDataChange ( object sender , CDataChangeEventArgs e )
{
if ( DataChange ! = null )
{
DataChange ( sender , e ) ;
}
}
public static event RefreshMonitorEventHandler RefreshMonitor ;
public static void OnRefreshMonitor ( RefreshMonitorEventArgs e )
{
if ( RefreshMonitor ! = null )
{
RefreshMonitor ( e ) ;
}
}
public static void OnDeviceState ( object sender , CDeviceStateChangeEventArgs e )
{
if ( CDeviceState ! = null ) CDeviceState ( sender , e ) ;
}
public void OnChannelOpen ( ClientLogEventArgs e )
{
if ( ChannelOpen ! = null )
{
ChannelOpen ( e ) ;
}
}
public void OnClientLogout ( ClientLogEventArgs e )
{
if ( ClientLogout ! = null )
{
ClientLogout ( e ) ;
}
}
void Channel_Closing ( object sender , EventArgs e )
{
lock ( ClientCallbackLists )
{
var client = ( IClient ) sender ;
if ( ClientCallbackLists . ContainsValue ( client ) = = true )
{
ClientCallbackLists . Remove ( client ) ;
}
}
lock ( ClientShowLists )
{
var client = ( IClient ) sender ;
if ( ClientShowLists . ContainsValue ( client ) = = true )
{
ClientShowLists . Remove ( client ) ;
}
}
}
#endregion
#region 自定义方法
/// <summary>
/// 比较两个值型一维数组变量是否值相等
/// </summary>
/// <param name="array1">值型一维数组1</param>
/// <param name="array2">值型一维数组2</param>
/// <returns>比较结果,相等则true,否则false</returns>
public bool IsEquals ( Array array1 , Array array2 , int arraylength )
{ //20090902新增加arraylength
//比较类型是否一样
if ( ( array1 = = null ) | | ( array2 = = null ) ) return false ;
if ( ! Object . ReferenceEquals ( array1 . GetType ( ) , array2 . GetType ( ) ) )
{
return false ;
}
//比较长度是否一样
if ( array1 . GetLength ( 0 ) ! = array2 . GetLength ( 0 ) )
{
return false ;
}
//比较成员是否对应相等
ValueType v1 , v2 ;
for ( int i = 0 ; i < arraylength ; i + + )
{
v1 = ( ValueType ) array1 . GetValue ( i ) ;
v2 = ( ValueType ) array2 . GetValue ( i ) ;
if ( ! v1 . Equals ( v2 ) )
{
return false ;
}
}
return true ;
}
string GetBarcodeFromMonitorIndex ( int taskindex )
{
DataView dvb = new DataView ( ) ; StringBuilder sss = new StringBuilder ( "" ) ;
try
{
sss . Append ( "SELECT F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = " ) . Append ( taskindex ) . Append ( ")" ) ;
dvb = dbo . ExceSQL ( sss . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvb . Count > 0 )
{
return dvb [ 0 ] [ "F_TxtParam" ] . ToString ( ) ;
}
else
{
return "-" ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dvb . Dispose ( ) ;
}
}
void AssociateComplete ( int deviceIdx , int mindex , int status )
{
DataView dv = new DataView ( ) ; DataView dv1 = new DataView ( ) ; DataView dv2 = new DataView ( ) ; DataView dv3 = new DataView ( ) ;
try
{
int ClearZero = 0 ;
if ( status > = 1 )
{
ClearZero = 1 ;
}
else
{
ClearZero = Model . CGeneralFunction . TASKFINISH ;
}
int DeviceIdx = deviceIdx ;
int devKind ;
//20091107
dv = dbo . ExceSQL ( "select F_MonitorIndex,F_Status,F_DeviceIndex,F_DeviceCommandIndex,F_NumParam4 from T_Monitor_Task where F_MonitorIndex=" + mindex ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//检查关联命令一起报告完成
//如果mindex是主动任务(f_associatemonitor有数据),先报告完成被动的任务;如果mindex是被动任务,先报告完成自己,再报告完成主动任务;
dv1 = dbo . ExceSQL ( "select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" + mindex ) . Tables [ 0 ] . DefaultView ;
if ( dv1 . Count > 0 )
{
dv2 = dbo . ExceSQL ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" + Convert . ToInt32 ( dv1 [ 0 ] [ "F_Associate" ] ) ) . Tables [ 0 ] . DefaultView ;
if ( dv2 . Count > 0 ) //有关联命令,先报告完成关联命令
{
DeviceIdx = Convert . ToInt32 ( dv2 [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , Convert . ToInt32 ( dv2 [ 0 ] [ "F_MonitorIndex" ] ) , ClearZero ) ;
}
//再报告完成自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , mindex , ClearZero ) ;
}
else
{
//自己是否被关联,先报告完成自己,再报告完成主任务
dv3 = dbo . ExceSQL ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" + mindex + "'" ) . Tables [ 0 ] . DefaultView ;
if ( dv3 . Count > 0 )
{ //先报告完成自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , mindex , ClearZero ) ;
//再报告完成主任务
DeviceIdx = Convert . ToInt32 ( dv3 [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , Convert . ToInt32 ( dv3 [ 0 ] [ "F_MonitorIndex" ] ) , ClearZero ) ;
}
else
{
//无关联任务,只报告完成自己
DeviceIdx = deviceIdx ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
//20101219运行状态的长输送机链需要给最后一个报告完成的清零
if ( ( devKind = = 2 ) & & ( Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) > 0 ) & & ( dv [ 0 ] [ "F_DeviceCommandIndex" ] . ToString ( ) = = "6" ) & & ( Convert . ToInt32 ( dv [ 0 ] [ "F_Status" ] ) > 0 ) )
{
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) ;
}
cgs . ActionComplete ( DeviceIdx , mindex , ClearZero ) ;
}
}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dv1 . Dispose ( ) ;
dv2 . Dispose ( ) ;
dv3 . Dispose ( ) ;
}
}
int GetRouteIDsub ( 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 GetRouteIDsubHand ( int device )
{
DataView dv = new DataView ( ) ;
try
{
#region 注释 by lyj 20171120
//DataView dv = dbo.ExceSQL("SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex="+device+"").Tables[0].DefaultView;
#endregion
if ( device = = 1 1 0 0 1 | | device = = 1 1 0 0 2 | | device = = 1 1 0 0 3 )
{
device = 1 1 0 0 ;
}
string stemkk = "SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex like '" + device + "%'" ;
dv = dbo . ExceSQL ( stemkk ) . 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 ( ) ;
}
}
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 ( ) ;
}
}
void ResetSendorder ( int askdev , int taskindex , int routeid , int arrowdev )
{
StringBuilder sql = new StringBuilder ( ) ;
int fid = ccf . GetManageTaskIndexfromMonitor ( taskindex ) ;
int mankind = ccf . GetManageTaskKindIndexFromMonitor ( taskindex ) ;
if ( DeviceInRouteSub ( askdev , routeid ) = = true )
{
if ( arrowdev = = askdev )
{
AssociateComplete ( askdev , taskindex ) ;
}
else
{
RestoreDevice ( taskindex ) ;
}
}
else
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Manage_Task SET FCurrentLocation=" ) . Append ( askdev ) . Append ( " where FID=" ) . Append ( fid ) . Append ( " and F_ManageTaskKindIndex=" ) . Append ( mankind ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//判断是否需要向管理申请改道:如果本主路径的所有子路经都不可用就需要向管理申请改道,否则:调度选择一个可用的子路经,自行改道
//20091005
if ( GetUseableRouteIDSub ( fid , mankind , askdev ) = = false )
{
if ( CStaticClass . DeviceErrorAutoModifyRoutePath = = "1" )
{ //20091107
GetUsableDestination ( fid , mankind ) ;
}
}
}
}
void BarCode ( int deviceindex , byte [ ] barbyte )
{
StringBuilder [ ] wv = { new StringBuilder ( "2" ) } ;
StringBuilder [ ] witemnames = { new StringBuilder ( "" ) } ;
StringBuilder sql = new StringBuilder ( ) ;
DataView dv = new DataView ( ) ; DataView dvbc = new DataView ( ) ;
char [ ] dd = new char [ 1 ] { '.' } ; //20101124
string [ ] DS ; //20101124
string _l istenPLCAskError = "" ;
int i = 0 ;
try
{
sql . Append ( "SELECT T_Base_PLC_Ask.F_DeviceIndex,T_Base_PLC_Ask.F_BindingDevice, F_Askkind,F_TaskIndex,F_BarCode,F_Remark" ) . Append (
" FROM T_Base_PLC_Ask" ) . Append ( " where T_Base_PLC_Ask.F_DeviceIndex =" ) . Append ( deviceindex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count < = 0 ) return ;
devinfo = Model . CGetInfo . GetDeviceInfo ( deviceindex ) ;
witemnames [ 0 ] . Remove ( 0 , witemnames [ 0 ] . Length ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "0" ) ;
#region 判断读条码的条件是否成立
int [ ] state ;
state = CStaticClass . GetDeviceState ( Convert . ToInt32 ( dv [ i ] [ "F_BindingDevice" ] ) ) ;
if ( state = = null )
{
return ;
}
if ( ( state [ 1 ] > = 3 0 ) | | ( state [ 1 ] = = 1 ) )
{
//20091128
state = null ;
return ;
}
//20101118
DS = ccf . GetBindingDeviceIndexOut ( Convert . ToInt32 ( dv [ i ] [ "F_BindingDevice" ] ) ) . Split ( dd ) ;
int devicebyte = 0 ; int devbit = 0 ;
if ( DS . GetLength ( 0 ) > 1 )
{
int . TryParse ( DS [ 0 ] , out devicebyte ) ;
int . TryParse ( DS [ 1 ] , out devbit ) ;
if ( CStaticClass . GetDevicePhotoelectric ( devicebyte , devbit ) ! = 1 )
{
//20091128
state = null ;
return ;
}
}
else
{ //20110510
_l istenPLCAskError = "条码扫描器申请入库任务:" + dv [ i ] [ "F_BindingDevice" ] . ToString ( ) + ",出口开关没填写记录!" ;
return ;
}
#endregion
//扫到的条码(全部非零)与记录的条形码不相等就认为是新条码
StringBuilder barcodesb = new StringBuilder ( ) ;
for ( int ik = 1 ; ik < barbyte . GetLength ( 0 ) ; ik + + )
{
barcodesb . Append ( Convert . ToChar ( barbyte [ ik ] ) ) ;
}
string barcode = barcodesb . ToString ( ) ;
int dcode = Convert . ToInt32 ( dv [ i ] [ "F_BindingDevice" ] ) ;
if ( barcode = = null )
{
return ;
}
if ( ( barcode = = "\0\0\0\0\0\0\0\0\0\0" ) | | ( barcode = = "?/////////" ) | | ( barcode = = "111111" ) )
{
#region 没扫到码送出到指定位置//20101208
StringBuilder aheadDetect = new StringBuilder ( ) ;
_l istenPLCAskError = dcode . ToString ( ) + ",没扫到条码!" + "时间," + DateTime . Now . ToLongTimeString ( ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "notifyIcon1" , "警告:" + _l istenPLCAskError ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码申请任务" , dcode . ToString ( ) , "没扫到条码!" ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
return ;
#endregion
}
//20101124一楼16001扫描器的处理:扫码时,把条码记录字段F_BarCode;
//如果有本地管理任务,起点位置是此条码绑定设备,置本地管理任务【FSTATUS=0】;否则就是比对。
//如果没有本地管理任务,就是申请任务。
//获取任务时,如果入库任务的起点位置是条码绑定设备:如果起点位置,字段F_BarCode记录的条码与任务匹配,置本地管理任务【FSTATUS=0】,否则置【FSTATUS=-1】;
//如果入库任务的起点位置不是条码绑定设备,置本地管理任务【FSTATUS=0】。
//20110331
if ( dbo . GetSingle ( string . Format ( "SELECT F_DeviceIndex FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) AND (F_BarCode = '{1}')" , deviceindex , barcode ) ) ! = null ) //20101124
{
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
return ;
}
#region 条码有对应调度任务存在,重新入库扫描或者条码比对
if ( dbo . GetSingle ( string . Format ( "select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'" , barcode ) ) ! = null )
{ //条码有对应调度任务存在,重新入库扫描或者条码比对
int uc = dbo . ExecuteSql ( string . Format ( "update T_Manage_Task set FSTATUS=0 where FCONTROLTASKTYPE=1 and FSTARTDEVICE={0} and FPALLETBARCODE like '%{1}%'" , dcode , barcode ) ) ;
if ( uc > 0 )
{ //20101208上次没扫到码的重新执行入库扫描
dbo . ExecuteSql ( string . Format ( "update T_Monitor_Task set F_Status=0 where F_DeviceIndex={0} and F_TxtParam like '%{1}%'" , dcode , barcode ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码申请任务" , dcode . ToString ( ) , barcode + ":上次PLC搬运错误,重新执行入库条码扫描!" ) ;
return ;
}
else
{ //条码比对
object ob = dbo . GetSingle ( string . Format ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_Status = 1) AND (F_TxtParam = '{1}')" , deviceindex , barcode ) ) ;
if ( ob ! = null )
{ //比对正确
cgs . ActionComplete ( deviceindex , Convert . ToInt32 ( ob ) , 0 ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
return ;
}
else
{ //条码被错误的报告了数据区
}
}
}
#endregion
#region 条码没有对应的调度任务,申请任务或者比对错误
else
{ //条码没有对应的调度任务,申请任务或者比对错误
#region 条码比对错误
object ob = dbo . GetSingle ( string . Format ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_Status = 1) AND (F_TxtParam = '{1}')" , deviceindex , barcode ) ) ;
if ( ob = = null )
{ //比对错误需要改道处理,以后路径里不应该存在其它条码比对了
//生成当前条码绑定设备barBindDevice到异常人工处理站台AbendDevice的调度任务,保留原来的调度任务的主键
dv = dbo . ExceSQL ( string . Format ( "SELECT F_MonitorIndex, F_ManageTASKKINDINDEX, F_ManageTaskIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_Status = 1) )" , deviceindex ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//1删除现有设备指令索引和调度任务
dbo . ExecuteSql ( string . Format ( "delete from T_Monitor_Task where F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1}" , Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTASKKINDINDEX" ] ) , Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) ) ) ;
dbo . ExecuteSql ( string . Format ( "delete from T_Manage_Task where F_ManageTaskKindIndex={0} and FID={1}" , Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTASKKINDINDEX" ] ) , Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) ) ) ;
//2使用调度任务的主键生成新任务、重新拆分
Model . AutoTask at = new Model . AutoTask ( 3 , barcode , dcode . ToString ( ) , "-" , dv [ i ] [ "F_Remark" ] . ToString ( ) , "-" , false , false , 0 ) ;
BuildAutoTask ( at , out _l istenPLCAskError ) ;
return ;
}
else
{ //逻辑混乱了
}
}
#endregion
#region 扫码申请任务
#region 向管理申请入库任务
dvbc = dboMan . ExceSQL ( string . Format ( "SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS=0 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')" , dcode , barcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{ //20091128
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
_l istenPLCAskError = "输送机:" + dcode . ToString ( ) + "的扫描器向管理申请入库任务时:调度任务有相同的托盘号:" + barcode + "尚未处理!" ;
return ;
}
//向管理申请入库任务
//20101124
StringBuilder dtime = new StringBuilder ( DateTime . Now . ToString ( "u" ) ) ;
dtime . Remove ( dtime . Length - 1 , 1 ) ;
int apptype = 1 ;
ob = new object [ 7 ] { apptype , dcode , barcode , 0 , dtime , "" , ccf . GetWarehouseIndex ( ) } ;
try
{
// dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}')", ob));
}
//20101124
catch ( Exception ex )
{
_l istenPLCAskError = "向管理申请入库任务:" + ex . Message ;
}
#endregion
//20110331
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码申请任务" , dcode . ToString ( ) , barcode ) ;
#endregion
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_PLC_Ask SET F_BarCode = '{0}' WHERE (F_DeviceIndex = {1})" , barcode , deviceindex ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
#endregion
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dvbc . Dispose ( ) ;
}
}
int GetMonitorRunTaskIndexFromBarCode ( StringBuilder BarCode )
{ //20110216
DataView dv = new DataView ( ) ;
try
{
string bc = BarCode . ToString ( ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc" , bc ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
int GetMonitorAskTaskIndexFromBarCode ( StringBuilder BarCode )
{ //20110216
DataView dv = new DataView ( ) ;
try
{
string bc = BarCode . ToString ( ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and ((F_Status>0) or (F_SendFlag=2 and F_Status=0)) and F_DeviceCommandIndex=6 order by F_MonitorIndex asc" , bc ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
}
else
{
return - 1 ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
int GetMonitorTaskIndexFromBarCode ( StringBuilder BarCode , Model . MDevice devinf )
{ //20110216
DataView dv = new DataView ( ) ;
try
{
string bc = BarCode . ToString ( ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and (F_NumParam4 = {1} or F_NumParam4 = {2}) and F_Status>0 order by F_MonitorIndex asc" , bc , devinf . DeviceIndex , devinf . DeviceVisual ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
}
else
{
//dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView;
//if (dv.Count > 0)
//{
// return Convert.ToInt32(dv[0]["F_MonitorIndex"]);
//}
//else
//{
return - 1 ;
//}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
string GetMonitorTaskStartTime ( int taskindex , out int order )
{ //20110216
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_StartTime,F_DeviceCommandIndex FROM T_Monitor_Task WHERE F_MonitorIndex={0}" , taskindex ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
order = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceCommandIndex" ] ) ;
return dv [ 0 ] [ "F_StartTime" ] . ToString ( ) ;
}
else
{
order = - 1 ;
return "-" ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
void RestoreDevice ( int mindex )
{
StringBuilder sql = new StringBuilder ( ) ;
DataView dv = new DataView ( ) ; DataView dv1 = new DataView ( ) ; DataView dv2 = new DataView ( ) ; DataView dv3 = new DataView ( ) ;
try
{
int DeviceIdx , devKind ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=" ) . Append ( mindex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//检查关联命令一起复位
//如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" ) . Append ( mindex ) ;
dv1 = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv1 . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" ) . Append ( Convert . ToInt32 ( dv1 [ 0 ] [ "F_Associate" ] ) ) ;
dv2 = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv2 . Count > 0 ) //有关联命令,先复位关联命令
{
DeviceIdx = Convert . ToInt32 ( dv2 [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
if ( ( devKind = = 2 ) | | ( devKind = = 4 ) )
{ //输送机清零
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 ) ;
}
if ( ( devKind = = 1 ) ) //堆垛机、RGV
{
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 , 0 , 0 , 0 , 0 , 0 ) ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( dv2 [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" ) . Append ( Convert . ToInt32 ( dv2 [ 0 ] [ "F_MonitorIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
//20091128
//再复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
if ( ( devKind = = 2 ) | | ( devKind = = 4 ) )
{ //输送机、RGV清零
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 ) ;
}
if ( ( devKind = = 1 ) ) //堆垛机
{
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 , 0 , 0 , 0 , 0 , 0 ) ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" ) . Append ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
else
{
//自己是否被关联,先复位自己,再复位主任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" ) . Append ( mindex ) . Append ( "'" ) ;
dv3 = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv3 . Count > 0 )
{ //先复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
if ( ( devKind = = 2 ) | | ( devKind = = 4 ) )
{ //输送机、RGV清零
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 ) ;
}
if ( ( devKind = = 1 ) ) //堆垛机
{
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 , 0 , 0 , 0 , 0 , 0 ) ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" ) . Append ( mindex ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//再复位主任务
DeviceIdx = Convert . ToInt32 ( dv3 [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
if ( ( devKind = = 2 ) | | ( devKind = = 4 ) )
{ //输送机、RGV清零
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 ) ;
}
if ( ( devKind = = 1 ) ) //堆垛机
{
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 , 0 , 0 , 0 , 0 , 0 ) ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( dv3 [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" ) . Append ( Convert . ToInt32 ( dv3 [ 0 ] [ "F_MonitorIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
else
{
//无关联任务,只复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
if ( ( devKind = = 2 ) | | ( devKind = = 4 ) )
{ //输送机、RGV清零
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 ) ;
}
if ( ( devKind = = 1 ) ) //堆垛机
{
sdo = CommModeCreate . CreateSendDeviceOrder ( DeviceIdx ) ;
sdo . SendDeviceOrder ( 2 , 0 , 0 , DeviceIdx , 0 , 0 , 0 , 0 , 0 , 0 ) ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" ) . Append ( mindex ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
}
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "SControlMonitor" , cea ) ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dv1 . Dispose ( ) ;
dv2 . Dispose ( ) ;
dv3 . Dispose ( ) ;
}
}
void AssociateComplete ( int deviceIdx , int mindex )
{
DataView dv = new DataView ( ) ; DataView dv1 = new DataView ( ) ; DataView dv2 = new DataView ( ) ; DataView dv3 = new DataView ( ) ;
int DeviceIdx = deviceIdx ;
StringBuilder sql = new StringBuilder ( ) ;
int devKind ;
try
{
AA :
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=" ) . Append ( mindex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
Model . MDevice devm = Model . CGetInfo . GetDeviceInfo ( deviceIdx ) ;
int [ ] dblmonitor = null ;
if ( devm . IfCorrelDoubleFork = = "1" )
{
dblmonitor = Model . CGeneralFunction . MutiForkIfSync ( mindex , deviceIdx , devm . DeviceKind ) ;
}
//检查关联命令一起复位
//如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" ) . Append ( mindex ) ;
dv1 = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv1 . Count > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" ) . Append ( Convert . ToInt32 ( dv1 [ 0 ] [ "F_Associate" ] ) ) ;
dv2 = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv2 . Count > 0 ) //有关联命令,先复位关联命令
{
DeviceIdx = Convert . ToInt32 ( dv2 [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , Convert . ToInt32 ( dv2 [ 0 ] [ "F_MonitorIndex" ] ) , 1 ) ;
}
//再复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , mindex , 1 ) ;
}
else
{
//自己是否被关联,先复位自己,再复位主任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" ) . Append ( mindex ) . Append ( "'" ) ;
dv3 = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv3 . Count > 0 )
{ //先复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , mindex , 1 ) ;
//再复位主任务
DeviceIdx = Convert . ToInt32 ( dv3 [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , Convert . ToInt32 ( dv3 [ 0 ] [ "F_MonitorIndex" ] ) , 1 ) ;
}
else
{
//无关联任务,只复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
cgs . ActionComplete ( DeviceIdx , mindex , 1 ) ;
}
}
if ( devm ! = null )
{
if ( devm . IfCorrelDoubleFork = = "1" )
{
if ( dblmonitor ! = null )
{
foreach ( int dm in dblmonitor )
{
mindex = Convert . ToInt32 ( dblmonitor [ dm ] ) ;
goto AA ;
}
}
}
}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
dv1 . Dispose ( ) ;
dv2 . Dispose ( ) ;
dv3 . Dispose ( ) ;
}
}
/// <summary>
/// 获取可用的目标位置:入库的巷道或者出库站台
/// </summary>
/// <param name="manageTaskIdx">调度任务索引</param>
/// <param name="manageKindIdx">调度任务类别</param>
/// <returns></returns>
bool GetUsableDestination ( int manageTaskIdx , int manageKindIdx )
{
//20091128
//DataView DV;
DataView dv = new DataView ( ) ;
DataRowView dr = null ;
string adviceDev = "" ;
char [ ] cc = new char [ 1 ] { ';' } ;
string [ ] sp ;
DataView dvIO = new DataView ( ) ; DataView dvu = new DataView ( ) ;
StringBuilder sql = new StringBuilder ( ) ;
try
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Manage_Task WHERE (FID = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTaskKindIndex = " ) . Append ( manageKindIdx ) . Append ( ")" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count < = 0 )
{
return false ;
}
dr = dv [ 0 ] ;
//只修申请改调度任务的路径,不修改调度自动任务路径
if ( dr [ "F_ManageTaskKindIndex" ] . ToString ( ) ! = "1" ) return false ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select CONTROL_ID, CONTROL_STATUS from IO_Control where (CONTROL_ID = " ) . Append ( Convert . ToInt32 ( dr [ "FID" ] ) ) . Append ( ") AND ((CONTROL_STATUS=" ) . Append ( Model . CGeneralFunction . TASKALTERROUTEAPPLY ) . Append ( ") or (CONTROL_STATUS=" ) . Append ( Model . CGeneralFunction . TASKCANCEL ) . Append ( ") or(CONTROL_STATUS=" ) . Append ( Model . CGeneralFunction . TASKALTERROUTEREPLY ) . Append ( "))" ) ;
dvIO = dboMan . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvIO . Count < = 0 )
{
#region 根据T_Base_Device表的F_UsableEndDevice查找可用终点设备
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_UsableEndDevice from T_Base_Device where F_UsableEndDevice is not null and F_DeviceIndex=" ) . Append ( dr [ "FCurrentLocation" ] ) ;
dvu = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvu . Count > 0 )
{
sp = dvu [ 0 ] [ "F_UsableEndDevice" ] . ToString ( ) . Split ( cc ) ;
for ( int i = sp . GetLowerBound ( 0 ) ; i < = sp . GetUpperBound ( 0 ) ; i + + )
{
if ( CDisassembleTask . MinRouteID ( Convert . ToInt32 ( dr [ "FSTARTDEVICE" ] ) , Convert . ToInt32 ( sp [ i ] ) , dr [ "FUseAwayFork" ] ) ! = - 1 )
{
adviceDev = sp [ i ] ;
break ;
}
}
}
//20091128
//dvu = null;
if ( adviceDev = = "" )
{
return false ;
}
#endregion
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
dboMan . TransBegin ( ) ;
try
{
#region 入库任务运到出库站台需要上报IO_CONTROL表FSTATUS=960
//3241;3249;3256;3257;3258
string [ ] outstation = new string [ 5 ] { "3241" , "3249" , "3256" , "3257" , "3258" } ;
if ( ccf . GetFCONTROLTASKTYPEFromManageTask ( manageKindIdx , manageTaskIdx ) = = 1 ) //入库任务
{
if ( Array . IndexOf ( outstation , dr [ "FCurrentLocation" ] . ToString ( ) ) > = 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update IO_Control set CONTROL_STATUS=" ) . Append ( Model . CGeneralFunction . TASKCANCEL ) . Append ( ",ERROR_TEXT='入库任务被误搬运到出库站台!' where CONTROL_ID=" ) . Append ( manageTaskIdx ) ;
dboMan . ExceSQL ( sql . ToString ( ) ) ;
}
}
//20091128
outstation = null ;
#endregion
//20090918
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( " update IO_CONTROL set CONTROL_STATUS=" ) . Append ( Model . CGeneralFunction . TASKALTERROUTEAPPLY ) . Append ( " where CONTROL_ID=" ) . Append ( dr [ "FID" ] ) . Append ( " and CONTROL_STATUS<>" ) . Append ( Model . CGeneralFunction . TASKCANCEL ) ;
dboMan . ExceSQL ( sql . ToString ( ) ) ;
//向管理申请修改任务//20101108
int appid = dboMan . GetManageTableIndex ( "IO_CONTROL_APPLY" , true ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO IO_CONTROL_APPLY ( CONTROL_APPLY_ID,CONTROL_ID, WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)" ) . Append (
"VALUES (" ) . Append ( appid ) . Append ( "," ) . Append ( dr [ "FID" ] ) . Append ( ",'" ) . Append ( dr [ "FENDWAREHOUSE" ] ) . Append ( "','" ) . Append ( dr [ "FPALLETBARCODE" ] ) . Append ( "','" ) . Append ( adviceDev ) . Append ( "',0,'" ) . Append ( dtime ) . Append ( "',null)" ) ;
dboMan . ExceSQL ( sql . ToString ( ) ) ;
dboMan . TransCommit ( ) ;
//把ManageTaskIdx,ManageKindIdx 的调度任务全部申请改道
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Monitor_Task SET F_Status = 3 WHERE (F_ManageTaskIndex = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX =" ) . Append ( manageKindIdx ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//20090910
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "SControlMonitor" , cea ) ;
return true ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs ( "tsStatus" , string . Format ( "{0},GetUsableDesination向管理申请改道时错误:{1}" , this . ToString ( ) , ex . StackTrace + ex . Message ) ) ;
OnRefreshMonitor ( rme ) ;
dboMan . TransRollback ( ) ;
return false ;
}
}
else
{
return false ;
}
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs ( "tsStatus" , string . Format ( "{0},GetUsableDesination获取可用的目标位置时错误:{1}" , this . ToString ( ) , ex . StackTrace + ex . Message ) ) ;
OnRefreshMonitor ( rme ) ;
return false ;
}
finally
{
dvu . Dispose ( ) ;
dv . Dispose ( ) ;
dr = null ;
cc = null ;
sp = null ;
dvIO . Dispose ( ) ;
}
}
/// <summary>
/// 20091005判断是否可以获得可用的路径子路经
/// </summary>
/// <param name="manageTaskIdx">调度任务索引</param>
/// <param name="manageKindIdx">任务类型索引</param>
/// <param name="curLocation">当前设备索引</param>
/// <returns></returns>
bool GetUseableRouteIDSub ( int manageTaskIdx , int manageKindIdx , int curLocation )
{
DataView dvmi = new DataView ( ) ;
DataView DMAN = new DataView ( ) ;
DataView dvnew = new DataView ( ) ;
DataView dvc = new DataView ( ) ;
StringBuilder sql = new StringBuilder ( ) ;
try
{
#region 调度任务存在
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX =1) 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 = ccf . GetDeviceKindIdx ( Convert . ToInt32 ( dvmi [ 0 ] [ "F_DeviceIndex" ] ) ) ;
int devCommand = Convert . ToInt32 ( dvmi [ 0 ] [ "F_DeviceCommandIndex" ] ) ;
int routeID = Convert . ToInt32 ( dvmi [ 0 ] [ "F_RouteID" ] ) ;
int NumParam1 = Convert . ToInt32 ( dvmi [ 0 ] [ "F_NumParam1" ] ) ;
int NumParam4 = Convert . ToInt32 ( dvmi [ 0 ] [ "F_NumParam4" ] ) ;
string AheadDetect = dvmi [ 0 ] [ "F_AheadDetect" ] . ToString ( ) ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select * from T_Manage_Task WHERE (FID = " ) . Append ( manageTaskIdx ) . Append ( ") AND (F_ManageTASKKINDINDEX =1)" ) ;
DMAN = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( DMAN . Count > 0 )
{
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 =1)" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//20090910
if ( CDisassembleTask . CreateMonitor ( 1 , 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 ( ",1," ) . Append ( monitorIndex ) . Append ( ",1," ) . Append ( devindex ) . Append ( "," ) . Append ( devCommand ) . Append ( "," ) . Append ( routeID ) . Append ( ",3," ) . Append ( NumParam1 ) . Append ( "," ) . Append ( NumParam4
) . Append ( ",'" ) . Append ( AheadDetect ) . Append ( "','" ) . Append ( DMAN [ 0 ] [ "FPALLETBARCODE" ] ) . Append ( "')" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
return false ;
}
if ( devKind = = 4 )
{
if ( devCommand = = 7 )
{
int RGVsn = ccf . GetSerialNumberFromRouteDevice ( routeID , devindex ) ;
int Consn = ccf . 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 = ccf . 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 = ccf . 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 = ccf . 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 = ccf . 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 = ccf . GetSerialNumberFromRouteDevice ( routeID , devindex ) ;
//找到送货RGV设备索引
List < int > priorrgv = CDisassembleTask . GetPriorDevice ( routeID , consn ) ;
int rgvdev = priorrgv [ 0 ] ;
int rgvsn = ccf . GetSerialNumberFromRouteDevice ( routeidNew , rgvdev ) ;
List < int > nextdev = CDisassembleTask . GetNextDevice ( routeidNew , rgvdev ) ;
int condev = nextdev [ 0 ] ;
//删除RGV运动到送货点之前的任务
//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" ] ) ;
}
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 = 5) 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
} //20090910
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "SControlMonitor" , cea ) ;
return true ;
} //20091005
#endregion
else
{ //调度任务不存在
return false ;
}
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs ( "tsStatus" , this . ToString ( ) + "GetUseableRouteIDSub时错误:" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rme ) ;
return false ;
}
finally
{
dvmi . Dispose ( ) ;
dvnew . Dispose ( ) ;
DMAN . Dispose ( ) ;
dvc . Dispose ( ) ;
}
}
/// <summary>
/// 判断设备是否被包含在子路径中
/// </summary>
/// <param name="deviceIdx">设备索引</param>
/// <param name="routeSub">子路经</param>
/// <returns></returns>
bool DeviceInRouteSub ( int deviceIdx , int routeSub )
{
DataView dv = new DataView ( ) ;
try
{
StringBuilder sql = new StringBuilder ( ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_RouteIDSub, F_DeviceIndex FROM T_Base_Route_Device Where F_RouteIDSub=" ) . Append ( routeSub ) . Append ( " and F_DeviceIndex=" ) . Append ( deviceIdx ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
{
return false ;
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
void DeleteDeviceTask ( int taskindex )
{
DataView dvm = new DataView ( ) ;
StringBuilder sql = new StringBuilder ( ) ;
try
{
int fid = ccf . GetManageTaskIndexfromMonitor ( taskindex ) ;
int mti = ccf . GetManageTaskKindIndexFromMonitor ( taskindex ) ;
if ( ccf . GetFCONTROLTASKTYPEFromManageTask ( mti , fid ) = = 2 ) return ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FExceptionNO=" ) . Append ( Model . CGeneralFunction . TASKDELETE ) . Append ( " where (F_ManageTaskKindIndex = " ) . Append ( mti ) . Append ( ") AND (FID = " ) . Append ( fid ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_STATUS=-1 where F_ManageTaskKindIndex=" ) . Append ( mti ) . Append ( " and F_ManageTaskIndex=" ) . Append ( fid ) . Append ( " and F_STATUS=0" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
//通知管理程序删除整个调度任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status " ) . Append (
" FROM T_Monitor_Task Where F_ManageTaskIndex=" ) . Append ( fid ) . Append ( " and F_ManageTaskKindIndex= " ) . Append (
mti ) ;
dvm = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvm . Count > 0 )
{
for ( int ii = 0 ; ii < dvm . Count ; ii + + )
{
if ( Convert . ToInt32 ( dvm [ ii ] [ "F_Status" ] ) > = 1 )
{
cgs . ActionComplete ( Convert . ToInt32 ( dvm [ ii ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dvm [ ii ] [ "F_MonitorIndex" ] ) , 1 ) ;
}
else
{
cgs . ActionComplete ( Convert . ToInt32 ( dvm [ ii ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dvm [ ii ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKDELETE ) ;
}
}
}
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dvm . Dispose ( ) ;
}
}
#endregion
#region 契约实现
/// <summary>
/// 根据安装条码扫描器的输送机设备索引查询【在PLC读到的条码】和【已经给管理上报的条码】20140218
/// </summary>
/// <param name="bindDeviceOfBarcode">安装条码扫描器的输送机</param>
/// <param name="readedBarcode">在PLC读到的条码</param>
/// <param name="reportedBarcode">已经给管理上报的条码</param>
/// <returns></returns>
public bool GetReadedAndReportedBarcode ( int bindDeviceOfBarcode , out string readedBarcode , out string reportedBarcode , out string errorText )
{
DataView dv = new DataView ( ) ;
errorText = "" ;
readedBarcode = "" ;
reportedBarcode = "" ;
StringBuilder rb = new StringBuilder ( "" ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_DeviceIndex,F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarCode,F_BarcodeLength,F_Askkind,F_BarcodeReservedLength,F_BarcodeForkAmount FROM T_Base_PLC_Ask WHERE (F_Askkind = 4 OR F_Askkind = 14 OR F_Askkind = 17) AND (F_BindingDevice = {0})" , bindDeviceOfBarcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
_d evice = Model . CGetInfo . GetDeviceInfo ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
if ( _d evice . ReturnMessage ! = null )
{
int barcodeLenth = 0 ;
int beginchar = 1 ;
int goodsbarcodeLenth = 0 ;
int BoxQuality = 0 ;
if ( dv [ 0 ] [ "F_Askkind" ] . ToString ( ) = = "17" ) //叠盘机
{ //PLC打包上报箱垛条码组,F_BarCode只记录记录最上面一箱条码
barcodeLenth = Convert . ToInt32 ( dv [ 0 ] [ "F_PalletBarcodeLength" ] ) ;
//beginchar = 2;
beginchar = 1 ; //无法上报托盘条码,采集托盘数量信息
rb . Append ( _d evice . ReturnMessage [ 1 ] . ToString ( ) ) ;
}
else if ( dv [ 0 ] [ "F_Askkind" ] . ToString ( ) = = "15" )
{ //多叉堆垛机在顶升机,条码组申请入库F_BarCode记录所堆垛机最大叉的箱条码
barcodeLenth = Convert . ToInt32 ( dv [ 0 ] [ "F_BarcodeLength" ] ) ;
beginchar = 2 + Convert . ToInt32 ( dv [ 0 ] [ "F_BarcodeReservedLength" ] ) * ( Convert . ToInt32 ( dv [ 0 ] [ "F_BarcodeForkAmount" ] ) - 1 ) ;
}
else if ( dv [ 0 ] [ "F_Askkind" ] . ToString ( ) = = "4" )
//F_Askkind = 4
{ //扫单箱或者码垛入库的托盘条码
barcodeLenth = Convert . ToInt32 ( dv [ 0 ] [ "F_PalletBarcodeLength" ] ) ;
goodsbarcodeLenth = Convert . ToInt32 ( dv [ 0 ] [ "F_BarcodeLength" ] ) ;
beginchar = 2 ;
}
else // F_Askkind = 14
{ //码垛机器人上报托盘条码,物料数量,物料条码
barcodeLenth = Convert . ToInt32 ( dv [ 0 ] [ "F_PalletBarcodeReservedLength" ] ) ;
beginchar = 3 ;
BoxQuality = _d evice . ReturnMessage [ 2 ] ;
}
for ( int j = beginchar ; j < barcodeLenth - 1 ; j + + ) //0字节是【头】,1字节是【数量】2字节开始是条码
{
rb . Append ( Convert . ToChar ( _d evice . ReturnMessage [ j ] ) . ToString ( ) . ToUpper ( ) ) ;
}
StringBuilder parameter = new StringBuilder ( ) ;
for ( int i = 0 ; i < BoxQuality ; i + + )
{
if ( i = = 0 )
{
parameter . Append ( '|' ) ; //分割托盘条码和物料条码
}
for ( int ii = 0 ; ii < goodsbarcodeLenth ; ii + + )
{ //周转箱叠箱时PalletBarcodeLength=0和PalletBarcodeReservedLength=0
// 标志位,类型,数量,托盘条码,内筒/箱体条码
parameter . Append ( Convert . ToChar ( _d evice . ReturnMessage [ barcodeLenth + beginchar + i * goodsbarcodeLenth + ii ] ) . ToString ( ) . ToUpper ( ) . TrimEnd ( ';' ) ) ; //20131106richard
}
if ( i < BoxQuality - 1 )
{
parameter . Append ( ';' ) ;
}
}
readedBarcode = rb . Append ( parameter ) . ToString ( ) ;
if ( readedBarcode ! = dv [ 0 ] [ "F_BarCode" ] . ToString ( ) )
{
reportedBarcode = "" ;
}
else
{
reportedBarcode = dv [ 0 ] [ "F_BarCode" ] . ToString ( ) ;
}
}
else
{
readedBarcode = "" ;
reportedBarcode = dv [ 0 ] [ "F_BarCode" ] . ToString ( ) ;
}
}
else
{
return false ;
}
return true ;
}
catch ( Exception ex )
{
errorText = ex . Message + ex . StackTrace ;
return false ;
}
}
/// <summary>
/// 卸载
/// </summary>
public void Dispose ( )
{
EndListen ( ) ;
ClientCallbackLists . Clear ( ) ;
ClientShowLists . Clear ( ) ;
OPCClient . CCommonOPCClient . DisConnectOPCServer ( ) ;
}
public Model . MError GetDeviceAllErrors ( int deviceKindIndex , out string errorText )
{
errorText = string . Empty ;
return Model . CGetInfo . DeviceErrors [ deviceKindIndex ] ;
}
public List < Model . MRoute > GetAllRouteinfo ( out string errorText )
{
List < Model . MRoute > lmr = new List < Model . MRoute > ( ) ;
DataView dv = new DataView ( ) ;
errorText = string . Empty ;
StringBuilder sql = new StringBuilder ( ) ;
try
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_RouteID,F_RouteName,F_StartDevice,F_EndDevice,F_RouteKind,F_Status from T_Base_Route " ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
Model . MRoute mr = new Model . MRoute ( ) ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
mr . RouteID = Convert . ToInt32 ( dv [ 0 ] [ "F_RouteID" ] ) ;
mr . RouteName = dv [ 0 ] [ "F_RouteName" ] . ToString ( ) ;
mr . StartDevice = Convert . ToInt32 ( dv [ 0 ] [ "F_StartDevice" ] ) ;
mr . EndDevice = Convert . ToInt32 ( dv [ 0 ] [ "F_EndDevice" ] ) ;
mr . RouteKind = Convert . ToInt32 ( dv [ 0 ] [ "F_RouteKind" ] ) ;
mr . Status = Convert . ToInt32 ( dv [ 0 ] [ "F_Status" ] ) ;
lmr . Add ( mr ) ;
}
return lmr ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public List < Model . MRoute > GetDeviceJoinRouteinfo ( int deviceIndex , out string errorText )
{
List < Model . MRoute > lmr = new List < Model . MRoute > ( ) ;
DataView dv = new DataView ( ) ;
errorText = string . Empty ;
StringBuilder sql = new StringBuilder ( ) ;
try
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT distinct T_Base_Route.F_RouteID, T_Base_Route.F_RouteName, T_Base_Route.F_StartDevice, T_Base_Route.F_EndDevice, T_Base_Route.F_RouteKind, T_Base_Route.F_Status FROM T_Base_Route,T_Base_Route_Device where T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and F_DeviceIndex=" ) . Append ( deviceIndex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
Model . MRoute mr = new Model . MRoute ( ) ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
mr . RouteID = Convert . ToInt32 ( dv [ i ] [ "F_RouteID" ] ) ;
mr . RouteName = dv [ i ] [ "F_RouteName" ] . ToString ( ) ;
mr . StartDevice = Convert . ToInt32 ( dv [ i ] [ "F_StartDevice" ] ) ;
mr . EndDevice = Convert . ToInt32 ( dv [ i ] [ "F_EndDevice" ] ) ;
mr . RouteKind = Convert . ToInt32 ( dv [ i ] [ "F_RouteKind" ] ) ;
mr . Status = Convert . ToInt32 ( dv [ i ] [ "F_Status" ] ) ;
lmr . Add ( mr ) ;
}
return lmr ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public DeviceStateType GetDeviceStateInfo ( int deviceIndex , out string errorText )
{
errorText = string . Empty ;
try
{
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT F_DeviceIndex,F_DeviceName, F_DeviceKindIndex, F_LockedState ,F_errorcode, F_ManTaskReserve FROM T_Base_Device where F_DeviceIndex={0}" , deviceIndex ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
int a = 0 ; int a1 = 0 ; int a2 = 0 ; int a3 = 0 ;
int . TryParse ( dv [ 0 ] [ "F_DeviceKindIndex" ] . ToString ( ) , out a ) ;
int . TryParse ( dv [ 0 ] [ "F_LockedState" ] . ToString ( ) , out a1 ) ;
int . TryParse ( dv [ 0 ] [ "F_errorcode" ] . ToString ( ) , out a2 ) ;
int . TryParse ( dv [ 0 ] [ "F_ManTaskReserve" ] . ToString ( ) , out a3 ) ;
DeviceStateType ds = new DeviceStateType ( ) ;
ds . DeviceIndex = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ; //(int) .ToString()
ds . DeviceKind = a ;
ds . DeviceName = dv [ 0 ] [ "F_DeviceName" ] . ToString ( ) ;
ds . ErrorCode = a2 ;
ds . LockedState = a1 ;
ds . ManTaskReserve = a3 ;
return ds ;
}
else
{
return null ;
}
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
}
public ManageTask [ ] GetManageTasks ( string FieldName , string content , out string errorText )
{
errorText = string . Empty ;
try
{
ManageTask [ ] mt ;
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT * FROM T_Manage_Task where {0} like '%{1}%'" , FieldName , content ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
mt = new ManageTask [ dv . Count ] ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
mt [ i ] = new ManageTask ( ) ;
mt [ i ] . ManageTaskKindIndex = Convert . ToInt32 ( dv [ i ] [ "F_ManageTaskKindIndex" ] ) ;
mt [ i ] . FID = Convert . ToInt32 ( dv [ i ] [ "FID" ] ) ;
mt [ i ] . ControlTaskType = Convert . ToInt32 ( dv [ i ] [ "FControlTaskType" ] ) ;
mt [ i ] . PalletBarcode = dv [ i ] [ "FPalletBarcode" ] . ToString ( ) ;
mt [ i ] . StartDevice = dv [ i ] [ "FStartDevice" ] . ToString ( ) ;
mt [ i ] . StartCell = dv [ i ] [ "FStartCell" ] . ToString ( ) ;
mt [ i ] . EndDevice = dv [ i ] [ "FEndDevice" ] . ToString ( ) ;
mt [ i ] . EndCell = dv [ i ] [ "FEndCell" ] . ToString ( ) ;
mt [ i ] . Begtime = dv [ i ] [ "FBegtime" ] . ToString ( ) ;
mt [ i ] . Status = Convert . ToInt32 ( dv [ i ] [ "FStatus" ] ) ;
}
return mt ;
}
else
{
return null ;
}
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
}
public MonitorTask [ ] GetMonitorTasks ( string FieldName , string content , out string errorText )
{
errorText = string . Empty ;
try
{
MonitorTask [ ] mt ;
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT F_TxtParam,F_ManageTaskIndex,F_MonitorIndex,T_Monitor_Task.F_DeviceIndex,F_DeviceName,T_Monitor_Task.F_DeviceCommandIndex,F_DeviceCommandName,T_Monitor_Task.F_ErrorCode,F_ErrorName,F_Status,F_UseAwayFork,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task, T_Base_Device,T_Base_Device_Command,T_Base_Device_State where T_Monitor_Task.F_Status = T_Base_Device_State.F_DeviceErrorIndex and T_Base_Device_State.F_DeviceKindIndex = T_Base_Device.F_DeviceKindIndex and T_Monitor_Task.F_DeviceIndex = T_Base_Device.F_DeviceIndex and T_Monitor_Task.F_DeviceCommandIndex = T_Base_Device_Command.F_DeviceCommandIndex and T_Base_Device_Command.F_DeviceKindIndex = T_Base_Device.F_DeviceKindIndex and {0} like '%{1}%'" , FieldName , content ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
mt = new MonitorTask [ dv . Count ] ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
mt [ i ] = new MonitorTask ( ) ;
mt [ i ] . BarCode = dv [ i ] [ "F_TxtParam" ] . ToString ( ) ;
mt [ i ] . ManageTaskIndex = Convert . ToInt32 ( dv [ i ] [ "F_ManageTaskIndex" ] ) ;
mt [ i ] . MonitorIndex = Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) ;
mt [ i ] . DeviceIndex = Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) ;
mt [ i ] . DeviceName = dv [ i ] [ "F_DeviceName" ] . ToString ( ) ;
mt [ i ] . DeviceCommandIndex = Convert . ToInt32 ( dv [ i ] [ "F_DeviceCommandIndex" ] ) ;
mt [ i ] . DeviceCommandName = dv [ i ] [ "F_DeviceCommandName" ] . ToString ( ) ;
mt [ i ] . ErrorCode = Convert . ToInt32 ( dv [ i ] [ "F_ErrorCode" ] ) ;
mt [ i ] . ErrorName = dv [ i ] [ "F_ErrorName" ] . ToString ( ) ;
mt [ i ] . Status = Convert . ToInt32 ( dv [ i ] [ "F_Status" ] ) ;
mt [ i ] . ForkNo = Convert . ToInt32 ( dv [ i ] [ "F_UseAwayFork" ] ) ;
mt [ i ] . NumParam1Z = Convert . ToInt32 ( dv [ i ] [ "F_NumParam1" ] ) ;
mt [ i ] . NumParam2X = Convert . ToInt32 ( dv [ i ] [ "F_NumParam2" ] ) ;
mt [ i ] . NumParam3Y = Convert . ToInt32 ( dv [ i ] [ "F_NumParam3" ] ) ;
mt [ i ] . NumParam4Z = Convert . ToInt32 ( dv [ i ] [ "F_NumParam4" ] ) ;
mt [ i ] . NumParam5X = Convert . ToInt32 ( dv [ i ] [ "F_NumParam5" ] ) ;
mt [ i ] . NumParam6Y = Convert . ToInt32 ( dv [ i ] [ "F_NumParam6" ] ) ;
}
return mt ;
}
else
{
return null ;
}
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
}
public ST_Cell [ ] GetAllCellInfos ( out string errorText )
{
errorText = string . Empty ;
ST_Cell [ ] sc ; DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( "SELECT FID, FWAREHOUSE, FLaneWay, FCELLCODE, FCELLNAME, FCELLSTATUS,FRUNSTATUS, F_Z, F_X, F_Y, FPALLETBARCODE, FStack FROM ST_CELL" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
sc = new ST_Cell [ dv . Count ] ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
sc [ i ] = new ST_Cell ( ) ;
sc [ i ] . FID = Convert . ToInt32 ( dv [ i ] [ "FID" ] ) ;
sc [ i ] . WAREHOUSE = dv [ i ] [ "FWAREHOUSE" ] . ToString ( ) ;
sc [ i ] . LaneWay = Convert . ToInt32 ( dv [ i ] [ "FLaneWay" ] ) ;
sc [ i ] . CELLCODE = dv [ i ] [ "FCELLCODE" ] . ToString ( ) ;
sc [ i ] . CELLNAME = dv [ i ] [ "FCELLNAME" ] . ToString ( ) ;
sc [ i ] . CELLSTATUS = dv [ i ] [ "FCELLSTATUS" ] . ToString ( ) ;
sc [ i ] . RUNSTATUS = dv [ i ] [ "FRUNSTATUS" ] . ToString ( ) ;
sc [ i ] . RUNSTATUS = dv [ i ] [ "FRUNSTATUS" ] . ToString ( ) ;
sc [ i ] . Z = Convert . ToInt32 ( dv [ i ] [ "F_Z" ] ) ;
sc [ i ] . X = Convert . ToInt32 ( dv [ i ] [ "F_X" ] ) ;
sc [ i ] . Y = Convert . ToInt32 ( dv [ i ] [ "F_Y" ] ) ;
sc [ i ] . Stack = Convert . ToInt32 ( dv [ i ] [ "FStack" ] ) ;
sc [ i ] . PALLETBARCODE = dv [ i ] [ "FPALLETBARCODE" ] . ToString ( ) ;
}
return sc ;
}
else
{
return null ;
}
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool SetDeviceStateInfo ( DeviceStateType devstate , out string errorText )
{
errorText = string . Empty ;
try
{
object [ ] ob = new object [ 4 ] { devstate . LockedState , devstate . ErrorCode , devstate . ManTaskReserve , devstate . DeviceIndex } ;
int acount = dbo . ExecuteSql ( string . Format ( "update T_Base_Device set F_LockedState={0},F_errorcode={1},F_ManTaskReserve={2} where F_DeviceIndex={3}" , ob ) ) ;
return true ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return false ;
}
}
public bool SetRouteStateInfo ( int routeID , bool isEnabled , out string errorText )
{
int fstatus = 0 ;
errorText = string . Empty ;
try
{
if ( isEnabled = = true )
{
fstatus = 1 ;
}
else
{
fstatus = 0 ;
}
Model . MRoute mr = new Model . MRoute ( ) ;
mr . RouteID = routeID ;
mr . Status = fstatus ;
return SetRouteState ( mr , out errorText ) ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return false ;
}
}
public bool SetDeviceJoinRouteStateInfo ( int deviceIndex , bool isEnabled , out string errorText )
{
DataView dv = new DataView ( ) ;
int fstatus = 0 ;
errorText = string . Empty ;
StringBuilder sql = new StringBuilder ( ) ;
try
{
if ( isEnabled = = true )
{
fstatus = 1 ;
}
else
{
fstatus = 0 ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select distinct F_RouteID from T_Base_Route_Device where F_DeviceOrder>0 and F_DeviceIndex=" ) . Append ( deviceIndex ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
Model . MRoute mr = new Model . MRoute ( ) ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
mr . RouteID = ( int ) dv [ 0 ] [ "F_RouteID" ] ;
mr . Status = fstatus ;
SetRouteState ( mr , out errorText ) ;
}
return true ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
}
}
public LanguageContent [ ] GetLanguageContent ( string language , out string errorText )
{
errorText = string . Empty ;
try
{
LanguageContent [ ] lan ;
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT Name, {0} FROM T_Base_MultiLanguage" , language ) ) . Tables [ 0 ] . DefaultView ;
lan = new LanguageContent [ dv . Count ] ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
LanguageContent ml = new LanguageContent ( ) ;
ml . key = dv [ i ] [ 0 ] . ToString ( ) ;
ml . value = dv [ i ] [ 1 ] . ToString ( ) ;
lan [ i ] = ml ;
}
return lan ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
}
public string [ ] GetLanguageFields ( out string errorText )
{
errorText = string . Empty ;
string [ ] lf ;
try
{
DataView dv = dbo . ExceSQL ( "SELECT name FROM syscolumns WHERE (id = OBJECT_ID('T_Base_MultiLanguage')) and name<>'Name'" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
lf = new string [ dv . Count ] ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
lf [ i ] = dv [ i ] [ 0 ] . ToString ( ) ;
}
return lf ;
}
else
{
return null ;
}
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
}
public DevicesDic GetDevicesDic ( out string errorText )
{
errorText = string . Empty ;
try
{
DevicesDic dd = new DevicesDic ( ) ;
dd . MDevices = Model . CGetInfo . DeviceInfo ;
return dd ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
}
/// <summary>
/// Http客户端调用
/// </summary>
/// <param name="errorText"></param>
/// <returns></returns>
public byte [ ] GetAllDevicesString ( out string errorText )
{
errorText = string . Empty ;
try
{
//CommonClassLib.CCarryConvert.WriteDarkCasket("Unity 3D", "客户端调用", "", "");
return CompressedSerializer . Compress < string > ( Model . CGetInfo . GetDeviceInfobyStringALL ( ) ) ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
//byte[] b = null;
return null ;
}
}
/// <summary>
/// Http客户端调用
/// </summary>
/// <param name="errorText"></param>
/// <returns></returns>
public byte [ ] GetAllCellString ( out string errorText )
{
errorText = string . Empty ;
StringBuilder _ tempSB = new StringBuilder ( ) ;
try
{
dvclient = dbo . ExceSQL ( "SELECT FCELLCODE,FCELLSTATUS,FRUNSTATUS FROM ST_CELL WHERE FCELLSTATUS=1 " ) . Tables [ 0 ] . DefaultView ;
if ( dvclient . Count > 0 )
{
for ( int i = 0 ; i < dvclient . Count ; i + + )
{
_ tempSB . Append ( dvclient [ i ] [ "FCELLCODE" ] . ToString ( ) ) ; //货位编码
if ( i ! = dvclient . Count - 1 )
{
_ tempSB . Append ( "," ) ;
}
}
return CompressedSerializer . Compress < string > ( _ tempSB . ToString ( ) ) ;
}
else
{
return null ;
}
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
finally
{
dvclient . Dispose ( ) ;
}
}
/// <summary>
/// Http客户端调用
/// </summary>
/// <param name="DeviceIdx">设备编号</param>
/// <param name="CellCode">货位编码</param>
/// <param name="errorText">返回的错误信息</param>
/// <returns></returns>
public byte [ ] GetOneDeviceOrCellString ( int DeviceIdx , int ForkIdx , string CellCode , out string errorText )
{ //
errorText = string . Empty ;
char [ ] cc = new char [ 1 ] { '-' } ;
string [ ] cell ;
StringBuilder _ tempSB = new StringBuilder ( ) ;
string sqlstr = string . Empty ;
int TaskNo = 0 ; //任务号
string ArrowLocation = string . Empty ; //目标位置
string PalletBarCode = string . Empty ; //托盘条码
string GoodsType = string . Empty ;
string GoodsBarCode = string . Empty ; //物料条码
int TaskKind = 2 ;
int FID = 0 ;
string TaskFork = "0" ;
try
{
#region 获得设备信息
if ( DeviceIdx > 0 )
{
ClientUsedDevinfo = Model . CGetInfo . GetDeviceInfo ( DeviceIdx ) ;
if ( ClientUsedDevinfo = = null ) //不存在的设备
{
return null ;
}
TaskNo = ClientUsedDevinfo . TaskNo ; //任务号
dvclient = dbo . ExceSQL ( string . Format ( "SELECT F_ManageTaskIndex,F_UseAwayFork, F_ManageTASKKINDINDEX,F_DeviceCommandIndex,F_TxtParam, F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4,F_NumParam5, F_NumParam6 FROM T_Monitor_Task WHERE (F_MonitorIndex = {0})" , TaskNo ) ) . Tables [ 0 ] . DefaultView ;
if ( dvclient . Count > 0 )
{
FID = Convert . ToInt32 ( dvclient [ 0 ] [ "F_ManageTaskIndex" ] ) ; //调度任务号
TaskKind = Convert . ToInt32 ( dvclient [ 0 ] [ "F_ManageTASKKINDINDEX" ] ) ; //任务类型
TaskFork = dvclient [ 0 ] [ "F_UseAwayFork" ] . ToString ( ) ; //货叉号
PalletBarCode = dvclient [ 0 ] [ "F_TxtParam" ] . ToString ( ) ; //托盘条码
int Z = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam1" ] ) ;
int X = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam2" ] ) ;
int Y = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam3" ] ) ;
int Z1 = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam4" ] ) ;
int X1 = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam5" ] ) ;
int Y1 = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam6" ] ) ;
int order = Convert . ToInt32 ( dvclient [ 0 ] [ "F_DeviceCommandIndex" ] ) ; //获得设备命令
#region 查找关联任务
int temptask ;
if ( TaskFork ! = ForkIdx . ToString ( ) ) //不相等则查找关联任务
{
Dictionary < int , string [ ] > df = Model . CGeneralFunction . GetDoubleForkMonitorInfo ( TaskNo , DeviceIdx ) ;
if ( df ! = null )
{
foreach ( int cortask in df . Keys )
{
if ( cortask ! = TaskNo )
{
TaskNo = cortask ; //新的任务号
dvclient = dbo . ExceSQL ( string . Format ( "SELECT F_UseAwayFork, F_ManageTASKKINDINDEX,F_DeviceCommandIndex,F_TxtParam, F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4,F_NumParam5, F_NumParam6 FROM T_Monitor_Task WHERE (F_MonitorIndex = {0})" , TaskNo ) ) . Tables [ 0 ] . DefaultView ;
if ( dvclient . Count > 0 )
{
PalletBarCode = df [ cortask ] [ 4 ] ; //新的托盘条码
Z = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam1" ] ) ;
X = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam2" ] ) ;
Y = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam3" ] ) ;
Z1 = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam4" ] ) ;
X1 = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam5" ] ) ;
Y1 = Convert . ToInt32 ( dvclient [ 0 ] [ "F_NumParam6" ] ) ;
}
break ;
}
}
}
}
#endregion
#region 获得目标位置
#region 堆垛机
if ( ClientUsedDevinfo . DeviceKind = = 1 )
{
switch ( order )
{
case 1 : //回原点
ArrowLocation = string . Format ( "回原点:01列01层" ) ;
break ;
case 2 : //将取
ArrowLocation = string . Format ( "将取:{0:D2}排-{1:D2}列-{2:D2}层" , Z , X , Y ) ;
break ;
case 3 : //将送
ArrowLocation = string . Format ( "将送:{0:D2}排-{1:D2}列-{2:D2}层" , Z1 , X1 , Y1 ) ;
break ;
case 4 : //取
ArrowLocation = string . Format ( "取货:{0:D2}排-{1:D2}列-{2:D2}层" , Z , X , Y ) ;
break ;
case 5 : //送
ArrowLocation = string . Format ( "送货:{0:D2}排-{1:D2}列-{2:D2}层" , Z1 , X1 , Y1 ) ;
break ;
case 6 :
ArrowLocation = string . Format ( "取送货:{0:D2}排-{1:D2}列-{2:D2}层 到 {3:D2}排-{4:D2}列-{5:D2}层" , Z , X , Y , Z1 , X1 , Y1 ) ;
break ;
}
}
#endregion
#region 输送机
if ( ClientUsedDevinfo . DeviceKind = = 2 )
{
switch ( order )
{
case 1 : //正转
ArrowLocation = string . Format ( "正转" ) ;
break ;
case 2 : //反转
ArrowLocation = string . Format ( "反转" ) ;
break ;
case 6 : //送出
ArrowLocation = string . Format ( "{0}送出到{1}" , Z , Z1 ) ;
break ;
case 8 : //上升
ArrowLocation = string . Format ( "上升" ) ;
break ;
case 9 : //下降
ArrowLocation = string . Format ( "下降" ) ;
break ;
}
}
#endregion
#endregion
}
else //任务已经完成
{
if ( ClientUsedDevinfo . DeviceKind = = 2 )
{
object bcode = dbo . GetSingle ( string . Format ( "SELECT F_PALLETBARCODE FROM T_Base_Device WHERE (F_DeviceIndex = {0})" , DeviceIdx ) ) ;
if ( bcode ! = null )
{
PalletBarCode = bcode . ToString ( ) ;
}
}
}
#region 获得物料条码信息
if ( TaskKind = = 1 & & PalletBarCode ! = "" ) //只有管理系统下达的任务才需要查询物料信息
{
//根据托盘条码查询物料信息
sqlstr = string . Format ( "SELECT GOODS_PROPERTY1,GOODS_PROPERTY2,GOODS_PROPERTY3,GOODS_PROPERTY4,GOODS_CLASS_NAME From V_STORAGE_LIST where STOCK_BARCODE = '{0}'" , PalletBarCode ) ;
dvclient = dboMan . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
if ( dvclient . Count > 0 ) //出库任务可以在管理系统查询到
{
GoodsType = dvclient [ 0 ] [ "GOODS_CLASS_NAME" ] . ToString ( ) ;
GoodsBarCode = string . Format ( "{0}|{1}|{2}|{3}" ,
dvclient [ 0 ] [ "GOODS_PROPERTY1" ] . ToString ( ) . Trim ( ) ,
dvclient [ 0 ] [ "GOODS_PROPERTY2" ] . ToString ( ) . Trim ( ) ,
dvclient [ 0 ] [ "GOODS_PROPERTY3" ] . ToString ( ) . Trim ( ) ,
dvclient [ 0 ] [ "GOODS_PROPERTY4" ] . ToString ( ) . Trim ( ) ) ;
}
else //入库任务管理系统查询不到
{
sqlstr = string . Format ( "SELECT GOODS_BARCODE FROM T_Manage_Task WHERE (FID = {0}) AND (F_ManageTaskKindIndex ={1})" , FID , TaskKind ) ;
dvclient = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
if ( dvclient . Count > 0 ) //
{
GoodsType = "" ;
GoodsBarCode = dvclient [ 0 ] [ "GOODS_PROPERTY1" ] . ToString ( ) . Replace ( ";" , "|" ) ;
}
}
}
#endregion
_ tempSB
. Append ( DeviceIdx ) . Append ( "," ) //设备编号
. Append ( TaskNo ) . Append ( "," ) //任务号
. Append ( ArrowLocation . Trim ( ) ) . Append ( "," ) //目标位置
. Append ( PalletBarCode . Trim ( ) ) . Append ( "," ) //托盘条码
. Append ( GoodsType . Trim ( ) ) . Append ( "," ) //物料类型
. Append ( GoodsBarCode . Trim ( ) ) ; //物料条码
//.Append(";");
}
#endregion
#region 获得货位信息
else
if ( CellCode ! = "" )
{
cell = CellCode . Split ( cc ) ;
if ( cell . Length = = 3 )
{
#region 获得物料条码信息,连接管理系统数据库
//根据托盘条码查询物料信息
sqlstr = string . Format ( "SELECT STOCK_BARCODE,GOODS_PROPERTY1,GOODS_PROPERTY2,GOODS_PROPERTY3,GOODS_PROPERTY4,GOODS_CLASS_NAME From V_STORAGE_LIST where CELL_CODE = '{0:D2}-{1:D2}-{2:D2}'" , cell [ 0 ] , cell [ 1 ] , cell [ 2 ] ) ;
dvclient = dboMan . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
if ( dvclient . Count > 0 )
{
PalletBarCode = dvclient [ 0 ] [ "STOCK_BARCODE" ] . ToString ( ) ; //托盘条码
GoodsType = dvclient [ 0 ] [ "GOODS_CLASS_NAME" ] . ToString ( ) ; //物料类型
GoodsBarCode = string . Format ( "{0}|{1}|{2}|{3}" ,
dvclient [ 0 ] [ "GOODS_PROPERTY1" ] . ToString ( ) . Trim ( ) ,
dvclient [ 0 ] [ "GOODS_PROPERTY2" ] . ToString ( ) . Trim ( ) ,
dvclient [ 0 ] [ "GOODS_PROPERTY3" ] . ToString ( ) . Trim ( ) ,
dvclient [ 0 ] [ "GOODS_PROPERTY4" ] . ToString ( ) . Trim ( ) ) ;
}
#endregion
}
_ tempSB
. Append ( CellCode . Trim ( ) ) . Append ( "," ) //货位
. Append ( PalletBarCode . Trim ( ) ) . Append ( "," ) //托盘条码
. Append ( GoodsType . Trim ( ) ) . Append ( "," ) //物料类型
. Append ( GoodsBarCode . Trim ( ) ) ; //物料条码
//.Append(";");
}
#endregion
return CompressedSerializer . Compress < string > ( _ tempSB . ToString ( ) ) ;
}
catch ( Exception ex )
{
errorText = ex . Message ;
return null ;
}
finally
{
dvclient . Dispose ( ) ;
}
}
/// <summary>
/// 通过设置订阅的监控模式,刷新订阅
/// </summary>
/// <returns></returns>
public bool RefreshMonitoringMode ( )
{ //20150103增加断网恢复
OPCClient . CCommonOPCClient . RefreshMonitoringMode ( ) ;
return true ;
}
/// <summary>
/// 注册客户端
/// </summary>
/// <param name="userID">客户端标识</param>
/// <param name="errText"></param>
/// <returns></returns>
public bool RegisterClient ( string userID , string userDescription , out string errText )
{
try
{
#region 检测用户是否存在
if ( ClientShowLists . ContainsValue ( userID ) = = true )
{
errText = "用户:" + userDescription + "已经登录了!请更换其它用户名称重新登录!" ;
return false ;
}
#endregion
var client = OperationContext . Current . GetCallbackChannel < IClient > ( ) ;
var id = OperationContext . Current . SessionId ;
OperationContext . Current . Channel . Closing + = new EventHandler ( Channel_Closing ) ;
ClientCallbackLists . Add ( client , userDescription ) ;
ClientShowLists . Add ( client , userID ) ;
ClientLogEventArgs coea = new ClientLogEventArgs ( userDescription + ":连接服务!" ) ;
OnChannelOpen ( coea ) ;
errText = string . Empty ;
return true ;
}
catch ( Exception ex )
{
errText = ex . StackTrace + ex . Message ;
return false ;
}
}
public Model . MDevice SendAllDeviceStates ( int device )
{
return Model . CGetInfo . GetDeviceInfo ( device ) ;
}
/// <summary>
/// 注销客户端
/// </summary>
/// <param name="userID">用户标识</param>
/// <param name="ErrText"></param>
/// <returns></returns>
public bool LogoutClient ( string userID , out string ErrText )
{
try
{
var client = OperationContext . Current . GetCallbackChannel < IClient > ( ) ;
ClientCallbackLists . Remove ( client ) ;
ClientShowLists . Remove ( client ) ;
ClientLogEventArgs coea = new ClientLogEventArgs ( userID + ":断开服务!" ) ;
OnClientLogout ( coea ) ;
ErrText = string . Empty ;
return true ;
}
catch ( Exception ex )
{
ErrText = ex . StackTrace + ex . Message ;
return false ;
}
}
/// <summary>
/// 获取任务
/// </summary>
/// <param name="laneway">巷道限制</param>
/// <param name="Order">更新"UPDATE",追加"APPEND",替换"REPLACE"</param>
/// <returns></returns>
public bool ObtainTask ( string laneway , string Order )
{
try
{
if ( Order = = "UPDATE" )
{
CStaticClass . ManZWhere = new StringBuilder ( laneway ) ;
}
else if ( Order = = "APPEND" )
{
if ( CStaticClass . ManZWhere . ToString ( ) . IndexOf ( laneway . ToString ( ) ) < 0 )
{
CStaticClass . ManZWhere . Append ( laneway ) ;
}
}
else if ( Order = = "REPLACE" )
{
CStaticClass . ManZWhere . Replace ( laneway , "" ) ;
}
CStaticClass . ObtainManageTask = true ;
CCallService . StartListen ( ) ; //民航二所 打开开关后启用线程调用管理系统的webapi接口
return true ;
}
catch
{
return false ;
}
}
public bool StopObtainTask ( )
{
try
{
CStaticClass . ManZWhere . Remove ( 0 , CStaticClass . ManZWhere . Length ) ;
CStaticClass . ObtainManageTask = false ;
CCallService . EndListen ( ) ; //民航二所 关闭开关后启用线程调用管理系统的webapi接口
return true ;
}
catch
{
return false ;
}
}
public bool OrderTurnOn ( )
{
if ( CStaticClass . Order = = true ) return true ; //20121203
DataView dvx = new DataView ( ) ; DataView dv = new DataView ( ) ;
try
{
CStaticClass . RefreshMonitor + = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CGetState . RefreshMonitor + = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CControl . RefreshMonitor + = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CDisassembleTask . RefreshMonitor + = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CObtainTask . RefreshMonitor + = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CParsePLCData . RefreshMonitor + = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
OPCClient . CCommonOPCClient . UpdateDB + = new CUpdateDBEventHandler ( CCommon_UpdateDB ) ;
SocketsTCPIP . CClientTCPIP . UpdateDB + = new CUpdateDBEventHandler ( CListenAGVState_UpdateDB ) ;
SocketsTCPIP . CClientTCPIP . SendDeviceOrder + = new CSendDeviceOrderEventHandler ( CClientTCPIP_SendDeviceOrder ) ;
SocketsTCPIP . CClientTCPIP . WriteDarkCasket + = new CWriteDarkCasketEventHandler ( CClientTCPIP_WriteDarkCasket ) ;
dv = dbo . ExceSQL ( "SELECT F_ReadSubscription, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_S7Connection, F_SplitByte FROM T_Base_Device WHERE (F_ReadSubscription IS NOT NULL) AND (F_ReadSubscription =F_DeviceIndex) ORDER BY F_ReadSubscription" ) . Tables [ 0 ] . DefaultView ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
dvx = dbo . ExceSQL ( string . Format ( "SELECT (MAX(F_DBW2Address) + F_DBWGetLength) AS maxdbw2 FROM T_Base_Device WHERE (F_ReadSubscription = '{0}') AND (F_DeviceKindIndex <> 33) GROUP BY F_DBWGetLength ORDER BY maxdbw2 DESC" , dv [ i ] [ "F_ReadSubscription" ] ) ) . Tables [ 0 ] . DefaultView ;
if ( dvx . Count > 0 )
{
if ( CStaticClass . MutiReadSubscriptionDeviceStateReturns . ContainsKey ( dv [ i ] [ "F_ReadSubscription" ] . ToString ( ) ) = = false )
{
CStaticClass . MutiReadSubscriptionDeviceStateReturns . Add ( dv [ i ] [ "F_ReadSubscription" ] . ToString ( ) , new int [ Convert . ToInt32 ( dvx [ 0 ] [ "maxdbw2" ] ) - Convert . ToInt32 ( dv [ i ] [ "F_DBW2Address" ] ) ] ) ;
}
}
}
dv = dbo . ExceSQL ( "SELECT F_ReadSubscription, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_S7Connection, F_SplitByte FROM T_Base_Device WHERE (F_ReadSubscription IS NOT NULL) AND (F_DeviceKindIndex=33) ORDER BY F_ReadSubscription" ) . Tables [ 0 ] . DefaultView ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
if ( CStaticClass . MutiReadSubscriptionDeviceSplitReturns . ContainsKey ( dv [ i ] [ "F_ReadSubscription" ] . ToString ( ) ) = = false )
{
CStaticClass . MutiReadSubscriptionDeviceSplitReturns . Add ( dv [ i ] [ "F_ReadSubscription" ] . ToString ( ) , new int [ Convert . ToInt32 ( dv [ i ] [ "F_DBWGetLength" ] ) ] ) ;
}
}
CStaticClass . Order = true ;
CStaticClass . ReConnect ( ) ;
SocketsTCPIP . CClientTCPIP . InitAllClientTCPIP ( ) ;
CParsePLCData . StartListen ( ) ;
CCallService . StartListenPLC ( ) ; //山东时代
CUpdateIoControl . StartListen ( ) ; // NewWrieDarkCasket 位置1
OPCClient . CCommonOPCClient . CreateSubscriptionGroup ( ) ;
return true ;
}
catch
{
return false ;
}
finally
{
dv . Dispose ( ) ;
dvx . Dispose ( ) ;
}
}
public bool OrderTurnOff ( )
{
try
{
CStaticClass . Order = false ;
CStaticClass . RefreshMonitor - = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CGetState . RefreshMonitor - = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CControl . RefreshMonitor - = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CDisassembleTask . RefreshMonitor - = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CObtainTask . RefreshMonitor - = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
CParsePLCData . RefreshMonitor - = new RefreshMonitorEventHandler ( MonitorRefreshMonitor ) ;
OPCClient . CCommonOPCClient . UpdateDB - = new CUpdateDBEventHandler ( CCommon_UpdateDB ) ;
OPCClient . CCommonOPCClient . DisConnectOPCServer ( ) ; //20141201张磊发现错误,应该注销订阅和事件
CDisassembleTask . EndListen ( ) ;
//20160420 注释4行
//SocketsTCPIP.CClientTCPIP.UpdateDB -= new CUpdateDBEventHandler(CListenAGVState_UpdateDB);
//SocketsTCPIP.CClientTCPIP.WriteDarkCasket -= new CWriteDarkCasketEventHandler(CClientTCPIP_WriteDarkCasket);
//SocketsTCPIP.CClientTCPIP.SendDeviceOrder -= new CSendDeviceOrderEventHandler(CClientTCPIP_SendDeviceOrder);
//SocketsTCPIP.CClientTCPIP.EndConnect();
CParsePLCData . EndListen ( ) ;
CUpdateIoControl . EndListen ( ) ; // NewWrieDarkCasket 位置2'
CCallService . EndListenPLC ( ) ; //山东时代
return true ;
}
catch
{
return false ;
}
}
public bool DeviceCommunicationInit ( string CommunicationType , out string ErrText )
{
try
{
if ( CommunicationType . IndexOf ( "OPCClient" ) > = 0 )
{
OPCClient . CCommonOPCClient . ConnectCount = new Dictionary < string , int > ( ) ;
}
else if ( CommunicationType . IndexOf ( "SocketsTCPIP" ) > = 0 )
{ //CommunicationType="SocketsTCPIP:191.168.1.3,3000"
char [ ] cc = new char [ 1 ] { ':' } ;
string [ ] sp = CommunicationType . Split ( cc ) ;
string remoteip = string . Empty ;
int port = 0 ;
if ( sp . Length > 1 )
{
cc = new char [ 1 ] { ',' } ;
string [ ] sp1 = sp [ 1 ] . Split ( cc ) ;
remoteip = sp1 [ 0 ] ;
port = Convert . ToInt32 ( sp1 [ 1 ] ) ;
SocketsTCPIP . CClientTCPIP . TcpIPInitCount [ remoteip ] = 0 ;
SocketsTCPIP . CClientTCPIP . InitClientTCPIP ( remoteip , port ) ;
}
}
ErrText = string . Empty ;
return true ;
}
catch ( Exception ex )
{
ErrText = ex . StackTrace + ex . Message ;
return false ;
}
}
public DataTable GetUsers ( out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT f_userid, f_username, f_purview, f_password FROM T_Base_Users" ) ) . Tables [ 0 ] . DefaultView ;
Errtext = string . Empty ;
if ( dv . Count < = 0 )
{
return null ;
}
else
return dv . Table ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool BuildHandTask ( Model . HandTask Handtask , out string Errtext )
{ //20141201张磊发现没验证货位和巷道
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 = ccf . 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 = GetRouteIDsubHand ( Convert . ToInt32 ( Handtask . _d eviceIndex ) ) ;
if ( ( routeIDsub = = - 1 ) & & ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) ! = 1 3 ) & & ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) ! = 3 1 ) )
{
Errtext = "您选择的设备错误!" ;
return false ;
}
#region add by lyj 20180222 如果目标巷道有堆垛机则返回错误信息
string [ ] startcells ;
string [ ] endcells ;
int zlane = 0 ;
int goalLaneno = 0 ;
int myLaneno = 0 ;
StringBuilder mysql = new StringBuilder ( ) ;
DataView dvlane ;
if ( ! Handtask . _ cellcodeBegin . Equals ( "" ) )
{
startcells = Handtask . _ cellcodeBegin . Split ( '-' ) ;
if ( startcells . Length ! = 0 )
{
zlane = Convert . ToInt32 ( startcells [ 0 ] . ToString ( ) ) ;
}
}
else if ( ! Handtask . _ cellcodeEnd . Equals ( "" ) )
{
endcells = Handtask . _ cellcodeEnd . Split ( '-' ) ;
if ( endcells . Length ! = 0 )
{
zlane = Convert . ToInt32 ( endcells [ 0 ] . ToString ( ) ) ;
}
}
if ( zlane > 0 )
{
if ( zlane > 0 )
{
mysql . Append ( "select top 1 * from ST_CELL where F_Z=" ) . Append ( zlane ) ;
dvlane = dbo . ExceSQL ( mysql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvlane . Count > 0 )
{
goalLaneno = Convert . ToInt32 ( dvlane [ 0 ] [ "FLaneWay" ] ) ;
}
mysql . Remove ( 0 , mysql . Length ) ;
mysql . Append ( "select * from T_Base_Device where F_StackNum<>0 and F_DeviceIndex=" ) . Append ( goalLaneno ) ;
dvlane = dbo . ExceSQL ( mysql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvlane . Count > 0 )
{
mysql . Remove ( 0 , mysql . Length ) ;
mysql . Append ( "select * from T_Base_StackLaneAndLayuerInfo where F_DeviceIndex=" ) . Append ( Handtask . _d eviceIndex ) ;
dvlane = dbo . ExceSQL ( mysql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
myLaneno = Convert . ToInt32 ( dvlane [ 0 ] [ "F_LaneNumAll" ] ) ;
if ( goalLaneno ! = myLaneno )
{
Errtext = "目标巷道有堆垛机,请将堆垛机移除后方可下达!" ;
return false ;
}
}
}
}
#endregion
#region 堆垛机
if ( ccf . 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
#region 物流输送机
if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 2 )
{
z = Handtask . _d eviceIndex ;
z1 = Convert . ToInt32 ( Handtask . _ arrowLocation ) ;
}
#endregion
if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 4 )
{ //RGV
z = Convert . ToInt32 ( Handtask . _ arrowLocation ) ;
z1 = 0 ;
if ( Handtask . _d eviceIndex = = 1 9 0 0 5 ) //上海晟碟
{
if ( Convert . ToInt32 ( Handtask . _ arrowLocation ) = = 1 9 0 0 2 )
{
z = 1 ;
}
else if ( Convert . ToInt32 ( Handtask . _ arrowLocation ) = = 2 9 0 0 2 )
{
z = 2 ;
}
else if ( Convert . ToInt32 ( Handtask . _ arrowLocation ) = = 3 9 0 0 2 )
{
z = 3 ;
}
else if ( Convert . ToInt32 ( Handtask . _ arrowLocation ) = = 4 9 0 0 2 )
{
z = 4 ;
}
else if ( Convert . ToInt32 ( Handtask . _ arrowLocation ) = = 5 9 0 0 2 )
{
z = 5 ;
}
}
}
#region 高端输送机
if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 3 )
{
z = Handtask . _ begindeviceIndex ;
z1 = Convert . ToInt32 ( Handtask . _ arrowLocation ) ;
Inworkbench = Handtask . _f orkNo ;
}
#endregion
string useawayfork = "-" ; int [ ] xx ; int [ ] xx1 ;
string barcode = string . Empty ;
useawayfork = Handtask . _f orkNo . ToString ( ) ;
char [ ] cp = new char [ 1 ] { ',' } ;
if ( Handtask . _ correlTaskForks . Length > 0 )
{
string [ ] cforks = Handtask . _ correlTaskForks . Split ( cp ) ;
xx = new int [ cforks . Length ] ;
xx1 = new int [ cforks . Length ] ;
relfid = new int [ cforks . Length ] ;
for ( int i = 0 ; i < cforks . Length ; i + + )
{
if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 )
{
string useawayfork1 = cforks [ i ] ;
xx [ i ] = x + ( Convert . ToInt32 ( useawayfork1 ) - Handtask . _f orkNo ) ;
xx1 [ i ] = x1 + ( Convert . ToInt32 ( useawayfork1 ) - Handtask . _f orkNo ) ;
#region 堆垛机
if ( ( Handtask . _d eviceOrder = = 4 ) | | ( Handtask . _d eviceOrder = = 5 ) )
{
object [ ] ob ; //20141201
rehidx = hidx + 1 + i ;
rehmindx = ccf . GetMonitorIndex ( rehidx , 4 ) ;
string bc = rehmindx . ToString ( ) ;
int bcl = bc . Length ;
for ( int j = 0 ; j < ( 6 - bcl ) ; j + + )
{
bc + = j . ToString ( ) ;
}
if ( Handtask . _d eviceOrder = = 4 ) //取货
{ //z-x-y
if ( x = = 1 )
{
//xx[i] = 1;
}
else
{
ob = new object [ 4 ] { z , xx [ i ] , y , ccf . GetLaneWayNoFromStack ( Handtask . _d eviceIndex ) } ; //20141201
dv = dbo . ExceSQL ( string . Format ( "SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2}) and FLaneWay={3}" , ob ) ) . Tables [ 0 ] . DefaultView ; //20141201
if ( dv . Count = = 0 )
{
Errtext = "堆垛机取货坐标在数据库不存在!" ;
return false ;
}
}
qcell = z . ToString ( ) + "-" + xx [ i ] . ToString ( ) + "-" + y . ToString ( ) ; //20101028
dbo . ExceSQL ( "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 + "," + rehidx + ",4," + rehmindx + "," + Handtask . _d eviceIndex
+ "," + Handtask . _d eviceOrder + "," + z + "," + xx [ i ] + "," + y + ",0,0,0,'" + useawayfork1 + "','" + bc + "')" ) ;
}
else if ( Handtask . _d eviceOrder = = 5 ) //送货
{ //z1-x1-y1
if ( x1 = = 1 )
{
//20130710xx1[i] = 1;
}
else
{
ob = new object [ 4 ] { z1 , xx1 [ i ] , y1 , ccf . GetLaneWayNoFromStack ( Handtask . _d eviceIndex ) } ; //20141201
dv = dbo . ExceSQL ( string . Format ( "SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2}) and FLaneWay={3}" , ob ) ) . Tables [ 0 ] . DefaultView ; //20141201
if ( dv . Count = = 0 )
{
Errtext = "堆垛机送货坐标在数据库不存在!" ;
return false ;
}
}
scell = z1 . ToString ( ) + "-" + xx1 [ i ] . ToString ( ) + "-" + y1 . ToString ( ) ; //20101028
dbo . ExceSQL ( "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 + "," + rehidx + ",4," + rehmindx + "," + Handtask . _d eviceIndex
+ "," + Handtask . _d eviceOrder + ",0,0,0," + z1 + "," + xx1 [ i ] + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')" ) ;
}
dbo . ExceSQL ( "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME) values('" +
bc + "'," + rehidx + ",4,-1,1," + Handtask . _d eviceIndex + ",'" + Handtask . _d eviceOrder + "','" + qcell + "'," + Handtask . _d eviceIndex + ",'" + scell + "','" + dtime + "')" ) ;
RecordMaxHandTaskFID ( rehidx ) ;
relfid [ i ] = rehidx ;
}
#endregion
}
else if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 2 )
{
rehidx = hidx + 1 + i ;
rehmindx = ccf . GetMonitorIndex ( rehidx , 4 ) ;
string bc = rehmindx . ToString ( ) ;
int bcl = bc . Length ;
for ( int j = 0 ; j < ( 6 - bcl ) ; j + + )
{
bc + = j . ToString ( ) ;
}
string useawayfork1 = ( Handtask . _f orkNo + 1 + i ) . ToString ( ) ;
//
int length = Handtask . _d eviceIndex . ToString ( ) . Length ;
int newindex = Handtask . _d eviceIndex ;
if ( length = = 6 )
{
string row = Handtask . _d eviceIndex . ToString ( ) . Substring ( length - 1 , 1 ) ;
string newrow ;
if ( row = = "1" )
{
newrow = "2" ;
}
else
{
newrow = "1" ;
}
newindex = Convert . ToInt32 ( string . Format ( "{0}{1}" , Handtask . _d eviceIndex . ToString ( ) . Substring ( 0 , length - 1 ) , newrow ) ) ;
//Handtask._deviceIndex = newindex;
}
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 + "," + rehidx + ",4," + rehmindx + "," + newindex
+ "," + Handtask . _d eviceOrder + "," + z + "," + x + "," + y + "," + z1 + "," + x1 + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')" ;
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('" +
bc + "'," + rehidx + ",4,-1,1," + newindex + ",'" + Handtask . _d eviceOrder + "','" + z . ToString ( ) + "-" + x . ToString ( ) + "-" + y . ToString ( )
+ "'," + Handtask . _ arrowLocation + ",'" + z1 . ToString ( ) + "-" + x1 . ToString ( ) + "-" + y1 . ToString ( ) + "','" + dtime + "'," + Handtask . _f orkNo + ")" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( rehidx ) ;
relfid [ i ] = rehidx ;
}
}
}
if ( ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 3 ) | | ( ccf . 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 . _d eviceIndex + ",'" + Handtask . _d eviceOrder + "','" + z . ToString ( ) + "-" + x . ToString ( ) + "-" + y . ToString ( )
+ "'," + Handtask . _ arrowLocation + ",'" + z1 . ToString ( ) + "-" + x1 . ToString ( ) + "-" + y1 . 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 ( ) ;
}
}
public bool BuildHandAssociateTask ( int ConveyorIndex , int ConveyorOrder , int RgvIndex , int RgvOrder , string RgvOrderName , out string Errtext )
{
try
{
int routeRGVIDsub = GetRouteIDsub ( RgvIndex ) ;
int routeIDsub = GetRouteIDsub ( ConveyorIndex ) ;
int hidx = GetManageHandIdx ( ) ;
int hmindx = ccf . GetMonitorIndex ( hidx , 4 ) ;
int hmindx1 = ccf . GetMonitorIndex ( hidx , 4 ) ;
string Sql = string . Empty ;
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
if ( RgvOrderName . Contains ( "接" ) = = true )
{ //输送机送货是主任务
Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_Associate) " +
"values(" + routeIDsub + "," + hidx + ",4," + hmindx + "," + ConveyorIndex
+ "," + ConveyorOrder + "," + ConveyorIndex + "," + hmindx1 + ")" ;
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('-'," +
hidx + ",4,-1,1," + ConveyorIndex + ",'" + ConveyorOrder + "','-',0,'-','" + dtime + "',2)" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( hidx ) ;
Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1) " +
"values(" + routeRGVIDsub + "," + ( hidx + 1 ) + ",4," + hmindx1 + "," + RgvIndex
+ "," + RgvOrder + "," + ConveyorIndex + ")" ;
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('-'," +
( hidx + 1 ) + ",4,-1,1," + RgvIndex + ",'" + RgvOrder + "','-',0,'-','" + dtime + "',2)" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( ( hidx + 1 ) ) ;
}
else
{ //RGV送货 主任务
Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_Associate) " +
"values(" + routeRGVIDsub + "," + hidx + ",4," + hmindx + "," + RgvIndex
+ "," + RgvOrder + "," + ConveyorIndex + "," + hmindx1 + ")" ;
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('-'," +
( hidx ) + ",4,-1,1," + RgvIndex + ",'" + RgvOrder + "','-',0,'-','" + dtime + "',2)" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( ( hidx ) ) ;
Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1) " +
"values(" + routeIDsub + "," + ( hidx + 1 ) + ",4," + hmindx1 + "," + ConveyorIndex
+ "," + ConveyorOrder + "," + ConveyorIndex + ")" ;
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('-'," +
( hidx + 1 ) + ",4,-1,1," + ConveyorIndex + ",'" + ConveyorOrder + "','-',0,'-','" + dtime + "',2)" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( ( hidx + 1 ) ) ;
}
Errtext = string . Empty ;
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "BuildHandTask" , cea ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool BuildAutoTask ( Model . AutoTask Autotask , out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
string Sql , _ tasktype ;
if ( ( Autotask . _ enableStartCell = = true ) & & ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( Autotask . _ startDevice ) ) = = 1 0 ) )
{
if ( dbo . Exists ( "SELECT FID FROM ST_CELL where FLaneWay=" + Autotask . _ startDevice + " and FCELLCODE='" + Autotask . _ startCell + "'" ) = = false )
{
Errtext = "起始位置和起始货位编码在数据库中没有记录!" ;
return false ;
}
}
if ( ( Autotask . _ enableEndCell = = true ) & & ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( Autotask . _ endDevice ) ) = = 1 0 ) )
{
if ( dbo . Exists ( "SELECT FID FROM ST_CELL where FLaneWay=" + Autotask . _ endDevice + " and FCELLCODE='" + Autotask . _ endCell + "'" ) = = false )
{
Errtext = "终点位置和终点货位编码在数据库中没有记录!" ;
return false ;
}
}
#region AGV通道
if ( ( Autotask . _ enableStartCell = = true ) & & ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( Autotask . _ startDevice ) ) = = 1 1 ) )
{
if ( dbo . Exists ( "SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex = " + Autotask . _ startDevice + ") AND (F_AGVGateDeviceIndex = " + Autotask . _ startCell + ")" ) = = false )
{
Errtext = "AGV站点设备在数据库中没有记录!" ;
return false ;
}
}
if ( ( Autotask . _ enableEndCell = = true ) & & ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( Autotask . _ endDevice ) ) = = 1 1 ) )
{
if ( dbo . Exists ( "SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex = " + Autotask . _ endDevice + ") AND (F_AGVGateDeviceIndex = " + Autotask . _ endCell + ")" ) = = false )
{
Errtext = "AGV站点设备在数据库中没有记录!" ;
return false ;
}
}
#endregion
Sql = "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = " + Autotask . _ startDevice + ") AND (F_EndDevice = " + Autotask . _ endDevice + ")" ;
dv = dbo . ExceSQL ( Sql ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count < = 0 )
{
Errtext = "起始位置和结束位置不在有效路径的范围内!" ;
return false ;
}
_ tasktype = Autotask . _ controlType . ToString ( ) ;
string FSTARTCELL = Autotask . _ startCell , FENDCELL = Autotask . _ endCell , UseAwayFork = "-" ;
int FSTARTDEVICE = Convert . ToInt32 ( Autotask . _ startDevice ) ; int FENDDEVICE = Convert . ToInt32 ( Autotask . _ endDevice ) ;
Model . MDevice devinfo = Model . CGetInfo . GetDeviceInfo ( FSTARTDEVICE ) ;
int flaneway = 0 ;
int stackno = 0 ;
//dbo.TransBegin();
try
{
if ( devinfo ! = null )
{
int uc = 0 ;
if ( int . TryParse ( FSTARTCELL , out uc ) = = true )
{
UseAwayFork = dbo . GetSingle ( "SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE ( F_AGVGateDeviceIndex= " + uc + ")" ) . ToString ( ) ;
}
if ( ( UseAwayFork = = "-" ) | | ( UseAwayFork = = null ) )
{
UseAwayFork = devinfo . DoubleFork ;
}
}
if ( ( UseAwayFork = = "-" ) | | ( UseAwayFork = = null ) )
{ //20110412
devinfo = Model . CGetInfo . GetDeviceInfo ( FENDDEVICE ) ;
if ( devinfo ! = null )
{
int uc = 0 ;
if ( int . TryParse ( FENDCELL , out uc ) = = true )
{
UseAwayFork = dbo . GetSingle ( "SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE ( F_AGVGateDeviceIndex= " + uc + ")" ) . ToString ( ) ;
}
if ( ( UseAwayFork = = "-" ) | | ( UseAwayFork = = null ) )
{
UseAwayFork = devinfo . DoubleFork ;
}
}
}
StringBuilder sbs = new StringBuilder ( ) ; int FSTARTUCODE = 0 ; int FENDUCODE = 0 ;
sbs . Clear ( ) ;
sbs . Append ( "SELECT FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='" ) . Append ( FSTARTCELL )
. Append ( "' and FLaneWay=" ) . Append ( FSTARTDEVICE ) . Append ( " and FUCODE>0" ) ;
dv = dbo . ExceSQL ( sbs . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
FSTARTUCODE = Convert . ToInt32 ( dv [ 0 ] [ 0 ] ) ;
FSTARTCELL = dv [ 0 ] [ 1 ] . ToString ( ) ;
}
sbs . Clear ( ) ;
sbs . Append ( "SELECT FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='" ) . Append ( FENDCELL )
. Append ( "' and FLaneWay=" ) . Append ( FENDDEVICE ) . Append ( " and FUCODE>0" ) ;
dv = dbo . ExceSQL ( sbs . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
FENDUCODE = Convert . ToInt32 ( dv [ 0 ] [ 0 ] ) ;
FENDCELL = dv [ 0 ] [ 1 ] . ToString ( ) ;
}
int a = 0 ;
bool usestartcell = false ;
bool useendcell = false ;
if ( int . TryParse ( FSTARTCELL , out a ) = = false )
{ //货位编码
//20101124
sbs . Remove ( 0 , sbs . Length ) ;
sbs . Append ( "SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" ) ;
sbs . Append ( FSTARTCELL ) . Append ( "'" ) ;
dv = dbo . ExceSQL ( sbs . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
//20101124
if ( dv . Count > 0 )
{
flaneway = Convert . ToInt32 ( dv [ 0 ] [ "FLaneWay" ] ) ;
stackno = Convert . ToInt32 ( dv [ 0 ] [ "FStack" ] ) ; //20101028
usestartcell = true ;
}
}
int iStartLayer = 0 ;
int iEndLayer = 0 ;
if ( int . TryParse ( FENDCELL , out a ) = = false )
{
//20101124
sbs . Remove ( 0 , sbs . Length ) ;
sbs . Append ( "SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='" ) ;
sbs . Append ( FENDCELL ) . Append ( "'" ) ;
dv = dbo . ExceSQL ( sbs . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
//20101124
if ( dv . Count > 0 )
{
flaneway = Convert . ToInt32 ( dv [ 0 ] [ "FLaneWay" ] ) ;
stackno = Convert . ToInt32 ( dv [ 0 ] [ "FStack" ] ) ; //20101028
useendcell = true ;
}
if ( _ tasktype = = "5" )
{
iStartLayer = Convert . ToInt16 ( FSTARTCELL . Split ( '-' ) [ 2 ] ) ;
iEndLayer = Convert . ToInt16 ( FENDCELL . Split ( '-' ) [ 2 ] ) ;
stackno = FSTARTDEVICE ;
}
}
string FLOGIC_AREA = string . Empty ; //逻辑区域
if ( _ tasktype = = "2" ) //出库任务
{
FLOGIC_AREA = FENDDEVICE . ToString ( ) ;
iStartLayer = Convert . ToInt16 ( FSTARTCELL . Split ( '-' ) [ 2 ] ) ;
}
if ( _ tasktype = = "3" ) //移库任务
{
FLOGIC_AREA = FENDDEVICE . ToString ( ) ;
iStartLayer = Convert . ToInt16 ( FSTARTCELL . Split ( '-' ) [ 2 ] ) ;
iEndLayer = Convert . ToInt16 ( FENDCELL . Split ( '-' ) [ 2 ] ) ;
}
if ( _ tasktype = = "6" ) //充电任务 dzf
{
stackno = FSTARTDEVICE ;
iEndLayer = Convert . ToInt16 ( FENDCELL . Split ( '-' ) [ 2 ] ) ;
iStartLayer = iEndLayer ;
}
if ( _ tasktype = = "1" ) //入库任务
{
iEndLayer = Convert . ToInt16 ( FENDCELL . Split ( '-' ) [ 2 ] ) ;
}
string dtime = DateTime . Now . ToString ( "u" ) ; //20101028
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ; //20101028
int AutoManageIdx = ccf . GetTempManageIdx ( ) ;
//插入临时调度任务T_Manage_Task(监控下的调度任务):
Sql =
"insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FSTARTUCODE,FENDUCODE,WORK_MODE,FLOGIC_AREA,FStartLayer,FEndLayer) " +
"values(" + AutoManageIdx + ",'" + Autotask . _ palletBarcode + "','" + _ tasktype + "',2,'" +
ccf . GetWarehouseIndex ( FSTARTDEVICE , FSTARTCELL ) + "','" + FSTARTDEVICE + "','" + FSTARTCELL +
"','" + ccf . GetWarehouseIndex ( FENDDEVICE , FENDCELL ) + "','"
+ FENDDEVICE + "','" + FENDCELL + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" +
dtime + "'," + FSTARTUCODE + "," + FENDUCODE + "," + Autotask . _ inWorkbench + ",'" +
FLOGIC_AREA + "'," + iStartLayer + "," + iEndLayer + ")" ; //20101028
dbo . ExecuteSql ( Sql ) ;
//通知客户端更新界面
if ( usestartcell )
{
Sql = string . Format ( "update ST_CELL set FRunStatus = 1 where FLaneWay= {0} and fcellcode = '{1}'" , flaneway , FSTARTCELL ) ;
dbo . ExceSQL ( Sql ) ;
}
if ( useendcell )
{
Sql = string . Format ( "update ST_CELL set FRunStatus = 1 where FLaneWay= {0} and fcellcode = '{1}'" , flaneway , FENDCELL ) ;
dbo . ExceSQL ( Sql ) ;
}
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "BuildAutoTask" , cea ) ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
Errtext = string . Empty ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool ModifyManageTask ( int Mankind , int ManagetaskID , int ActionID , out string Errtext )
{
string barcode = ccf . GetBarCodeFromManageTask ( ManagetaskID , Mankind ) ;
int mti = Mankind ;
int fid = ManagetaskID ;
int ControlType = ccf . GetFCONTROLTASKTYPEFromManageTask ( mti , fid ) ; //民航二所
StringBuilder sql = new StringBuilder ( ) ; //民航二所
string cap = string . Empty ;
switch ( mti )
{
case 1 :
cap = "调度任务" ;
break ;
case 2 :
cap = "自动任务" ;
break ;
case 3 :
cap = "临时任务" ;
break ;
case 4 :
cap = "手工任务" ;
break ;
}
DataView dv = new DataView ( ) ; DataView dvaa = new DataView ( ) ;
DataTable tableAGVGate = new DataTable ( ) ;
//dbo.TransBegin();
try
{
var client = ( IClient ) OperationContext . Current . Channel ;
string userDescription = ClientCallbackLists [ client ] . ToString ( ) ;
//string userID = ClientShowLists[client].ToString();
#region 报告完成
if ( ActionID = = Model . CGeneralFunction . TASKFINISH )
{
dbo . ExceSQL ( string . Format ( "update T_Monitor_Task set F_STATUS=-1 where F_ManageTaskKindIndex={0} and F_ManageTaskIndex={1} and F_STATUS=0" , mti , fid ) ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " +
",F_NumParam2,F_NumParam5,F_TxtParam FROM T_Monitor_Task Where F_ManageTaskIndex={0} and F_ManageTaskKindIndex={1} " , fid , mti ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{ //有调度任务
//20100108
CommonClassLib . CCarryConvert . WriteDarkCasket ( "调度任务管理" , "调度任务手工报告完成" , "托盘条码:" + barcode , "调度任务索引:" + fid . ToString ( ) + "," + userDescription ) ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
if ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) ) = = 6 )
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKFINISH ) ;
//1 辅料出库;2 空托盘回收;3残托盘回收
if ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceCommandIndex" ] ) = = 1 )
{
tableAGVGate = dbo . ExceSQL ( "SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert . ToInt32 ( dv [ i ] [ "F_NumParam5" ] ) + "" ) . Tables [ 0 ] ;
if ( tableAGVGate . Rows . Count > 0 )
{
dbo . ExecuteSql ( "UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='" + dv [ i ] [ "F_TxtParam" ] + "',F_HAVEGOODS = 1 WHERE F_DEVICEINDEX = " + Convert . ToInt32 ( tableAGVGate . Rows [ 0 ] [ "F_AGVGateDeviceIndex" ] ) + "" ) ;
}
}
if ( ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceCommandIndex" ] ) = = 2 ) | | ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceCommandIndex" ] ) = = 3 ) )
{
tableAGVGate = dbo . ExceSQL ( "SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert . ToInt32 ( dv [ i ] [ "F_NumParam2" ] ) + "" ) . Tables [ 0 ] ;
if ( tableAGVGate . Rows . Count > 0 )
{
//if (mti == 1)
//{
// //20090817给管理置无托盘信息
// dboM.ExecuteSql("UPDATE T_ITEMDEVICE SET devicestatus ='0' WHERE devicecode = '" + tableAGVGate.Rows[0]["F_AGVGateDeviceIndex"] + "'");
//}
dbo . ExecuteSql ( "UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='-',F_HAVEGOODS = 0 WHERE F_DEVICEINDEX = " + Convert . ToInt32 ( tableAGVGate . Rows [ 0 ] [ "F_AGVGateDeviceIndex" ] ) + "" ) ;
}
}
}
else
{
if ( Convert . ToInt32 ( dv [ i ] [ "F_Status" ] ) > = 1 )
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , 1 ) ;
}
else
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKFINISH ) ;
}
}
}
}
else
{
//回写管理表
cgs . ReturnManageInfo ( fid , mti , cap , true ) ;
if ( mti = = 1 )
{
dboMan . ExceSQL ( "update IO_Control set Control_STATUS=" + Model . CGeneralFunction . TASKFINISH + " where Control_ID=" + fid ) ;
//#region 民航二所 调用wms接口 上报状态——任务完成/删除(共3处)(如果存在该任务其他状态,则删掉)
//if (ControlType != 5 && ControlType != 6)
//{
// int status = 0;
// status = 999;
// string dTime1 = DateTime.Now.ToString("u");
// dTime1 = dTime1.Substring(0, dTime1.Length - 1);
// object[] ob = new object[8] { fid, status, 0, barcode, status, dTime1, "", 1.ToString() };
// try
// {
// sql.Clear();
// sql.Append("select * from io_control_apply where CONTROL_ID = ").Append(fid);
// if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
// {
// sql.Clear();
// sql.Append(" delete from io_control_apply where CONTROL_ID = ").Append(fid);
// dbo.ExceSQL(sql.ToString());
// }
// dbo.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}')", ob));
// CommonClassLib.CCarryConvert.WriteDarkCasket("ModifyManageTask", "向管理上报任务状态:", fid.ToString(), ",状态:" + status.ToString() + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + status.ToString());
// }
// catch (Exception ex)
// {
// RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理上报任务状态:" + ex.StackTrace + ex.Message);
// OnRefreshMonitor(rmea);
// CommonClassLib.CCarryConvert.WriteDarkCasket("ModifyManageTask", "向管理上报任务状态:出错", fid.ToString(), ",状态:" + status.ToString() + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + status.ToString());
// }
//}
//#endregion
}
}
}
#endregion
#region 报告删除
else if ( ActionID = = Model . CGeneralFunction . TASKDELETE )
{
dv = dbo . ExceSQL ( "SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " +
",F_NumParam2,F_NumParam5,F_TxtParam FROM T_Monitor_Task Where F_ManageTaskIndex=" + fid + " and F_ManageTaskKindIndex= " +
mti ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) = = 6 ) & & ( Convert . ToInt32 ( dv [ 0 ] [ "F_Status" ] ) > 0 ) )
{ //20110110
//StringBuilder sql = new StringBuilder();
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_DeviceIndex,F_DeviceKindIndex, F_LocalIP, F_LocalPort, F_RemoteIP, F_RemotePort FROM T_Base_Device where F_DeviceIndex=" ) . Append ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dvaa = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvaa . Count > 0 )
{
byte [ ] _ Sdata = new byte [ 1 6 ] ;
_ Sdata [ 0 ] = Convert . ToByte ( 6 0 0 0 6 & 2 5 5 ) ;
_ Sdata [ 1 ] = Convert . ToByte ( ( 6 0 0 0 6 > > 8 ) & 2 5 5 ) ;
_ Sdata [ 2 ] = Convert . ToByte ( ( 6 0 0 0 6 > > 1 6 ) & 2 5 5 ) ;
_ Sdata [ 3 ] = Convert . ToByte ( ( 6 0 0 0 6 > > 2 4 ) & 2 5 5 ) ;
_ Sdata [ 4 ] = Convert . ToByte ( Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) & 2 5 5 ) ;
_ Sdata [ 5 ] = Convert . ToByte ( ( Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) > > 8 ) & 2 5 5 ) ;
_ Sdata [ 6 ] = Convert . ToByte ( ( Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) > > 1 6 ) & 2 5 5 ) ;
_ Sdata [ 7 ] = Convert . ToByte ( ( Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) > > 2 4 ) & 2 5 5 ) ;
_ Sdata [ 8 ] = Convert . ToByte ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) & 2 5 5 ) ;
_ Sdata [ 9 ] = Convert . ToByte ( ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) > > 8 ) & 2 5 5 ) ;
_ Sdata [ 1 0 ] = Convert . ToByte ( ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) > > 1 6 ) & 2 5 5 ) ;
_ Sdata [ 1 1 ] = Convert . ToByte ( ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) > > 2 4 ) & 2 5 5 ) ;
int ck = 6 0 0 0 6 + Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) + Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
_ Sdata [ 1 2 ] = Convert . ToByte ( ck & 2 5 5 ) ;
_ Sdata [ 1 3 ] = Convert . ToByte ( ( ck > > 8 ) & 2 5 5 ) ;
_ Sdata [ 1 4 ] = Convert . ToByte ( ( ck > > 1 6 ) & 2 5 5 ) ;
_ Sdata [ 1 5 ] = Convert . ToByte ( ( ck > > 2 4 ) & 2 5 5 ) ;
SocketsTCPIP . CClientTCPIP . Send ( dvaa [ 0 ] [ "F_RemoteIP" ] . ToString ( ) , Convert . ToInt32 ( dvaa [ 0 ] [ "F_RemotePort" ] ) , _ Sdata ) ;
}
Errtext = string . Empty ;
return true ; ;
}
}
//20110222CGetState cgs = new CGetState();
//20090902
dbo . ExceSQL ( "update T_Manage_Task set FExceptionNO=" + Model . CGeneralFunction . TASKDELETE + " where (F_ManageTaskKindIndex = " + mti + ") AND (FID = " + fid + ")" ) ;
dbo . ExceSQL ( "update T_Monitor_Task set F_STATUS=-1 where F_ManageTaskKindIndex=" + mti + " and F_ManageTaskIndex=" + fid + " and F_STATUS=0" ) ;
//20110110
dv = dbo . ExceSQL ( "SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " +
",F_NumParam2,F_NumParam5,F_TxtParam FROM T_Monitor_Task Where F_ManageTaskIndex=" + fid + " and F_ManageTaskKindIndex= " +
mti ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
//20100108
CommonClassLib . CCarryConvert . WriteDarkCasket ( "调度任务管理" , "调度任务被手工删除!" , "托盘条码:" + barcode , "调度任务索引:" + fid . ToString ( ) + "," + userDescription ) ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
if ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) ) = = 6 )
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKDELETE ) ;
//1 辅料出库;2 空托盘回收;3残托盘回收
if ( ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceCommandIndex" ] ) = = 2 ) | | ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceCommandIndex" ] ) = = 3 ) )
{
tableAGVGate = dbo . ExceSQL ( "SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert . ToInt32 ( dv [ i ] [ "F_NumParam2" ] ) + "" ) . Tables [ 0 ] ;
if ( tableAGVGate . Rows . Count > 0 )
{
dbo . ExecuteSql ( "UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='" + dv [ i ] [ "F_TxtParam" ] + "',F_HAVEGOODS = 1 WHERE F_DEVICEINDEX = " + Convert . ToInt32 ( tableAGVGate . Rows [ 0 ] [ "F_AGVGateDeviceIndex" ] ) + "" ) ;
}
}
}
else
{
if ( Convert . ToInt32 ( dv [ i ] [ "F_Status" ] ) > = 1 )
{
int fstatus = 1 ;
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , fstatus ) ;
}
else
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKDELETE ) ;
}
}
}
}
else
{ //20110412
CommonClassLib . CCarryConvert . WriteDarkCasket ( "调度任务管理" , "调度任务被手工删除!" , "托盘条码:" + barcode , "调度任务索引:" + fid . ToString ( ) + "," + userDescription ) ;
//回写管理表
cgs . ReturnManageInfo ( fid , mti , cap , false ) ;
if ( mti = = 1 )
{
dboMan . ExceSQL ( "update IO_Control set Control_STATUS=" + Model . CGeneralFunction . TASKDELETE + " where Control_ID=" + fid ) ;
//#region 民航二所 调用wms接口 上报状态——任务完成/删除(共3处)(如果存在该任务其他状态,则删掉)
//if (ControlType != 5 && ControlType != 6)
//{
// int status = 0;
// status = 900;
// string dTime1 = DateTime.Now.ToString("u");
// dTime1 = dTime1.Substring(0, dTime1.Length - 1);
// object[] ob = new object[8] { fid, status, 0, barcode, status, dTime1, "", 1.ToString() };
// try
// {
// sql.Clear();
// sql.Append("select * from io_control_apply where CONTROL_ID = ").Append(fid);
// if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
// {
// sql.Clear();
// sql.Append(" delete from io_control_apply where CONTROL_ID = ").Append(fid);
// dbo.ExceSQL(sql.ToString());
// }
// dbo.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}')", ob));
// CommonClassLib.CCarryConvert.WriteDarkCasket("ModifyManageTask", "向管理上报任务状态:", fid.ToString(), ",状态:" + status.ToString() + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + status.ToString());
// }
// catch (Exception ex)
// {
// RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理上报任务状态:" + ex.StackTrace + ex.Message);
// OnRefreshMonitor(rmea);
// CommonClassLib.CCarryConvert.WriteDarkCasket("ModifyManageTask", "向管理上报任务状态:出错", fid.ToString(), ",状态:" + status.ToString() + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + status.ToString());
// }
//}
//#endregion
}
}
}
#endregion
//dbo.TransCommit();
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "SControlMonitor" , cea ) ;
Errtext = string . Empty ;
return true ;
}
catch ( Exception ex )
{
//dbo.TransRollback();
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
dvaa . Dispose ( ) ;
tableAGVGate . Dispose ( ) ;
}
}
public bool ModifyMonitorTask ( int DeviceIndex , int MonitortaskID , int ActionID , out string Errtext )
{
int resetOrder = 4 ; //故障复位
DataView dv = new DataView ( ) ; DataView dv1 = new DataView ( ) ; DataView dv2 = new DataView ( ) ; DataView dv3 = new DataView ( ) ;
try
{
var client = ( IClient ) OperationContext . Current . Channel ;
string userDescription = ClientCallbackLists [ client ] . ToString ( ) ;
//string userID = ClientShowLists[client].ToString();
int mankind = ccf . GetManageTaskKindIndexFromMonitor ( MonitortaskID ) ;
int fid = ccf . GetManageTaskIndexfromMonitor ( MonitortaskID ) ;
dv = dbo . ExceSQL ( "SELECT * FROM T_Monitor_Task Where F_MonitorIndex=" +
MonitortaskID ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( ActionID = = Model . CGeneralFunction . TASKFINISH )
{
#region 指令完成
CommonClassLib . CCarryConvert . WriteDarkCasket ( "设备指令管理" , "手工报告完成" , "托盘条码:" + dv [ 0 ] [ "F_TxtParam" ] . ToString ( ) , "设备索引:" + dv [ 0 ] [ "F_DeviceIndex" ] . ToString ( ) + ";设备指令索引:" + MonitortaskID . ToString ( ) + "," + userDescription ) ;
cgs . ActionComplete ( DeviceIndex , MonitortaskID , Convert . ToInt32 ( dv [ 0 ] [ "F_Status" ] ) ) ;
//20111226有RGV的关联任务是接货定堆垛机货叉,不允许报告关联任务完成
#endregion
}
else if ( ActionID = = Model . CGeneralFunction . TASKDELETE )
{
#region 指令删除
CommonClassLib . CCarryConvert . WriteDarkCasket ( "设备指令管理" , "手工删除设备指令" , "托盘条码:" + dv [ 0 ] [ "F_TxtParam" ] . ToString ( ) , "设备索引:" + dv [ 0 ] [ "F_DeviceIndex" ] . ToString ( ) + ";设备指令索引:" + MonitortaskID . ToString ( ) + "," + userDescription ) ;
cgs . ActionComplete ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKDELETE ) ;
#endregion
}
else if ( ActionID = = Model . CGeneralFunction . TASKRESTORE )
{
#region 指令重发
int mindex = MonitortaskID ;
int DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
int devKind = ccf . GetDeviceKindIdx ( DeviceIdx ) ;
string sss = "设备索引:" + dv [ 0 ] [ "F_DeviceIndex" ] . ToString ( ) + ";设备指令索引:" + dv [ 0 ] [ "F_MonitorIndex" ] . ToString ( ) + "," + userDescription ;
//20100108操作黑匣子增加托盘条码
CommonClassLib . CCarryConvert . WriteDarkCasket ( "设备指令管理" , "手工复位" , "托盘条码:" + dv [ 0 ] [ "F_TxtParam" ] . ToString ( ) , sss ) ;
//检查关联命令一起复位
//如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务;
dv1 = dbo . ExceSQL ( "select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" + mindex ) . Tables [ 0 ] . DefaultView ;
if ( dv1 . Count > 0 )
{
dv2 = dbo . ExceSQL ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" + Convert . ToInt32 ( dv1 [ 0 ] [ "F_Associate" ] ) ) . Tables [ 0 ] . DefaultView ;
if ( dv2 . Count > 0 ) //有关联命令,先复位关联命令
{
DeviceIdx = Convert . ToInt32 ( dv2 [ 0 ] [ "F_DeviceIndex" ] ) ;
SendDeviceReset ( out Errtext , DeviceIdx , resetOrder ) ;
SendDeviceReset ( out Errtext , DeviceIdx , 2 ) ;
dbo . ExceSQL ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert . ToInt32 ( dv2 [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( "update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert . ToInt32 ( dv2 [ 0 ] [ "F_MonitorIndex" ] ) ) ;
}
//再复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
SendDeviceReset ( out Errtext , DeviceIdx , resetOrder ) ;
SendDeviceReset ( out Errtext , DeviceIdx , 2 ) ;
dbo . ExceSQL ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( "update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ;
}
else
{
//自己是否被关联,先复位自己,再复位主任务
dv3 = dbo . ExceSQL ( "select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" + mindex + "'" ) . Tables [ 0 ] . DefaultView ;
if ( dv3 . Count > 0 )
{ //先复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
SendDeviceReset ( out Errtext , DeviceIdx , resetOrder ) ;
SendDeviceReset ( out Errtext , DeviceIdx , 2 ) ;
dbo . ExceSQL ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( "update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex ) ;
//再复位主任务
DeviceIdx = Convert . ToInt32 ( dv3 [ 0 ] [ "F_DeviceIndex" ] ) ;
SendDeviceReset ( out Errtext , DeviceIdx , resetOrder ) ;
SendDeviceReset ( out Errtext , DeviceIdx , 2 ) ;
dbo . ExceSQL ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert . ToInt32 ( dv3 [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( "update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert . ToInt32 ( dv3 [ 0 ] [ "F_MonitorIndex" ] ) ) ;
}
else
{
//无关联任务,只复位自己
DeviceIdx = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
SendDeviceReset ( out Errtext , DeviceIdx , resetOrder ) ;
SendDeviceReset ( out Errtext , DeviceIdx , 2 ) ;
dbo . ExceSQL ( "update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) ;
dbo . ExceSQL ( "update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex ) ;
}
}
//给管理FERRORCODE清空
if ( mankind = = 1 )
{
dboMan . ExceSQL ( "UPDATE IO_CONTROL SET ERROR_TEXT ='' WHERE CONTROL_ID=" + fid + "" ) ;
}
dbo . ExceSQL ( "UPDATE T_Manage_Task SET FERRORCODE ='' WHERE FID=" + fid + " and F_ManageTaskKindIndex=" + mankind + "" ) ;
CDataChangeEventArgs cea = new CDataChangeEventArgs ( null , null ) ;
OnDataChange ( "TASKRESTORE" , cea ) ;
#endregion
}
}
Errtext = string . Empty ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
dv1 . Dispose ( ) ;
dv2 . Dispose ( ) ;
dv3 . Dispose ( ) ;
}
}
public bool ModifyManageTaskFork ( int Flag , int FarForkTaskID , int NearForkTaskID , out string Errtext )
{
DataView dv = new DataView ( ) ;
string managesql , monitorsql ;
int relID = NearForkTaskID ; //双叉、近叉任务时的关联任务
//入库任务需要更改堆垛机的取货坐标,提前检测信息
//出库任务还需要更改堆垛机的送货坐标,提前检测信息,送出指令的设备编号和坐标
if ( Flag = = 2 ) //远叉任务的关联任务
{
relID = FarForkTaskID ;
}
try
{
var client = ( IClient ) OperationContext . Current . Channel ;
string userDescription = ClientCallbackLists [ client ] . ToString ( ) ;
if ( FarForkTaskID ! = 0 ) //设置远叉
{
managesql = string . Format ( "update T_Manage_Task set FUseAwayFork=2,F_RELATIVECONTORLID={0} where FID ={1}" , relID , FarForkTaskID ) ;
monitorsql = string . Format ( "update T_Monitor_Task set F_UseAwayFork= 2 where F_ManageTaskIndex= {0}" , FarForkTaskID ) ;
dbo . ExecuteSql ( managesql ) ;
dbo . ExecuteSql ( monitorsql ) ;
}
if ( NearForkTaskID ! = 0 ) //设置近叉
{
managesql = string . Format ( "update T_Manage_Task set FUseAwayFork=1,F_RELATIVECONTORLID={0} where FID ={1}" , relID , NearForkTaskID ) ;
monitorsql = string . Format ( "update T_Monitor_Task set F_UseAwayFork= 1 where F_ManageTaskIndex= {0}" , NearForkTaskID ) ;
dbo . ExecuteSql ( managesql ) ;
dbo . ExecuteSql ( monitorsql ) ;
}
CommonClassLib . CCarryConvert . WriteDarkCasket ( "货叉管理" , "手工双叉任务关联" , "1叉任务索引:" + NearForkTaskID . ToString ( ) , "2叉任务索引:" + FarForkTaskID . ToString ( ) + "," + userDescription ) ;
Errtext = string . Empty ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool SetDeviceState ( Model . MDevice Devinfo , out string Errtext )
{
try
{
int lockstate = 0 ;
int manTaskReserve = Devinfo . ManTaskReserve ;
int chargeLock = Devinfo . Switch_Lock ;
int errcode = 0 ;
if ( Devinfo . RunState = = 4 )
{
lockstate = - 1 ;
errcode = 9 9 8 ;
}
else
{
errcode = Devinfo . ErrorCode ;
lockstate = Devinfo . RunState ;
}
object [ ] ob = new object [ 5 ] { lockstate , errcode , manTaskReserve , chargeLock , Devinfo . DeviceIndex } ;
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_Device SET F_LockedState ={0},f_errorcode={1},F_ManTaskReserve ={2},F_SwitchLock = {3} where F_DeviceIndex= {4}" , ob ) ) ;
Model . CGetInfo . SetDeviceInfo ( Devinfo ) ;
Model . CGetInfo . SetModifyPathDeviceInfo ( Devinfo ) ; //晟碟
CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs ( Devinfo ) ;
OnDeviceState ( "SControlMonitor.SetDeviceState" , csce ) ;
Errtext = string . Empty ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public Model . MDevice GetDeviceInfo ( int Deviceindex , out string Errtext )
{
try
{
Errtext = string . Empty ;
return Model . CGetInfo . GetDeviceInfo ( Deviceindex ) ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return null ;
}
}
public DataTable GetDeviceInfos ( string errorcode , out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT T_Base_Device.F_DeviceIndex,F_DeviceName,T_Base_Device.F_DeviceKindIndex,F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods FROM T_Base_Device,T_Base_Device_Kind Where T_Base_Device.F_DeviceKindIndex = T_Base_Device_Kind.F_DeviceKindIndex and '{0}'" , errorcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
Errtext = string . Empty ;
return dv . Table ;
}
else
{
Errtext = "没有符合条件“" + errorcode + "”的设备信息!" ;
return null ;
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool SetRouteState ( Model . MRoute Routeinfo , out string Errtext )
{
try
{
dbo . ExecuteSql ( string . Format ( "update T_Base_Route set f_status={0} where F_RouteID={1}" , Routeinfo . Status , Routeinfo . RouteID ) ) ;
dboMan . ExecuteSql ( string . Format ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS={0} where CONTROL_ROUTE_ID={1}" , Routeinfo . Status , Routeinfo . RouteID ) ) ;
Errtext = string . Empty ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public Model . MRoute GetRouteInfo ( decimal RouteID , out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
Errtext = string . Empty ;
Model . MRoute mr = new Model . MRoute ( ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT F_RouteID, F_RouteName, F_StartDevice, F_EndDevice, F_RouteKind, F_OutsideAltDevice, F_InsideAltDevice, F_Status, F_AutoUpdate FROM T_Base_Route where F_RouteID={0}" , RouteID ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
mr . RouteID = RouteID ;
mr . RouteName = dv [ 0 ] [ "F_RouteName" ] . ToString ( ) ;
mr . StartDevice = Convert . ToDecimal ( dv [ 0 ] [ "F_StartDevice" ] ) ;
mr . EndDevice = Convert . ToDecimal ( dv [ 0 ] [ "F_EndDevice" ] ) ;
mr . RouteKind = Convert . ToInt32 ( dv [ 0 ] [ "F_RouteKind" ] ) ;
mr . OutsideAltDevice = Convert . ToInt32 ( dv [ 0 ] [ "F_OutsideAltDevice" ] ) ;
mr . InsideAltDevice = Convert . ToInt32 ( dv [ 0 ] [ "F_InsideAltDevice" ] ) ;
mr . Status = Convert . ToInt32 ( dv [ 0 ] [ "F_Status" ] ) ;
mr . AutoUpdate = Convert . ToChar ( dv [ 0 ] [ "F_AutoUpdate" ] ) ;
return mr ;
}
else
{
Errtext = "路径编号在数据库不存在!" ;
return null ;
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public Model . MRoute [ ] GetRouteInfos ( int RouteState , out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
Model . MRoute [ ] mrs ;
Model . MRoute mr = new Model . MRoute ( ) ;
Errtext = string . Empty ;
dv = dbo . ExceSQL ( string . Format ( "SELECT F_RouteID, F_RouteName, F_StartDevice, F_EndDevice, F_RouteKind, F_OutsideAltDevice, F_InsideAltDevice, F_Status, F_AutoUpdate FROM T_Base_Route where F_Status={0}" , RouteState ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
mrs = new Model . MRoute [ dv . Count ] ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
mr . RouteID = Convert . ToDecimal ( dv [ i ] [ "F_RouteID" ] ) ; ;
mr . RouteName = dv [ i ] [ "F_RouteName" ] . ToString ( ) ;
mr . StartDevice = Convert . ToDecimal ( dv [ i ] [ "F_StartDevice" ] ) ;
mr . EndDevice = Convert . ToDecimal ( dv [ i ] [ "F_EndDevice" ] ) ;
mr . RouteKind = Convert . ToInt32 ( dv [ i ] [ "F_RouteKind" ] ) ;
mr . OutsideAltDevice = Convert . ToInt32 ( dv [ i ] [ "F_OutsideAltDevice" ] ) ;
mr . InsideAltDevice = Convert . ToInt32 ( dv [ i ] [ "F_InsideAltDevice" ] ) ;
mr . Status = Convert . ToInt32 ( dv [ i ] [ "F_Status" ] ) ;
mr . AutoUpdate = Convert . ToChar ( dv [ i ] [ "F_AutoUpdate" ] ) ;
mrs [ i ] = mr ;
}
return mrs ;
}
else
{
Errtext = "路径状态在数据库不存在!" ;
return null ;
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return null ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool SetForkCombinWaitTime ( int WaitTime , out string Errtext )
{
try
{
Errtext = string . Empty ;
CommonClassLib . AppSettings . SetValue ( "DoubleForkWaitTime" , WaitTime . ToString ( ) ) ;
CStaticClass . DoubleForkWaitTime = WaitTime . ToString ( ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public int GetForkCombinWaitTime ( out string Errtext )
{
try
{
int a = - 1 ; Errtext = string . Empty ;
int . TryParse ( CommonClassLib . AppSettings . GetValue ( "DoubleForkWaitTime" ) , out a ) ;
return a ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
public bool SetConveyorTimeOutTime ( int Timeout , out string Errtext )
{
try
{
Errtext = string . Empty ;
CommonClassLib . AppSettings . SetValue ( "TransportTimeout" , Timeout . ToString ( ) ) ;
CStaticClass . TransportTimeout = Timeout . ToString ( ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public int GetConveyorTimeOutTime ( out string Errtext )
{
try
{
int a = - 1 ; Errtext = string . Empty ;
int . TryParse ( CommonClassLib . AppSettings . GetValue ( "TransportTimeout" ) , out a ) ;
return a ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
public bool SetDBConnection ( string MonitorOrManageDB , string ServerHostName , string DBServiceName , string Username , string Password , out string Errtext )
{
try
{
string dbf = dbo . GetValue ( "DBFactory" ) ;
string [ ] temp , connstr ;
string server = "" , dbService = "" , uid = "" , pwd = "" ;
char [ ] dh = new char [ 1 ] { '=' } ;
char [ ] fh = new char [ 1 ] { ';' } ;
Errtext = string . Empty ;
if ( MonitorOrManageDB = = "Manage" )
{
dbf = dbo . GetValue ( "ManDBFactory" ) ;
connstr = dbo . GetValue ( "ManConnString" ) . Split ( fh ) ;
}
else //if (MonitorOrManageDB == "Monitor")
{
dbf = dbo . GetValue ( "DBFactory" ) ;
connstr = dbo . GetValue ( "ConnString" ) . Split ( fh ) ;
}
for ( int i = connstr . GetLowerBound ( 0 ) ; i < = connstr . GetUpperBound ( 0 ) ; i + + )
{
temp = connstr [ i ] . Split ( dh ) ;
switch ( dbf )
{
case "SQLServerDBFactory" :
//"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Server" :
server = temp [ 1 ] . Trim ( ) ;
break ;
case "database" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "uid" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "pwd" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
}
break ;
case "OracleDBFactory" :
//"Data Source=Richard-liu;User ID=pdadmin;Password=pdadmin ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Data Source" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "User ID" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "Password" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
default :
server = "127.0.0.1" ;
break ;
}
break ;
case "OleDBFactory" :
//"Provider=OraOLEDB.Oracle.1;Data Source=Richard-liu;User ID=sa;Password= ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Data Source" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "User ID" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "Password" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
case "Provider" :
server = temp [ 1 ] . Trim ( ) ;
break ;
}
break ;
default :
//"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Server" :
server = temp [ 1 ] . Trim ( ) ;
break ;
case "database" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "uid" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "pwd" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
default :
server = "(local)" ;
uid = "SA" ;
dbService = "SSWCMS" ;
break ;
}
break ;
}
}
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool GetDBConnection ( string MonitorOrManageDB , out string ServerHostName , out string DBServiceName , out string Username , out string Password , out string Errtext )
{
try
{
Errtext = string . Empty ;
string dbf = dbo . GetValue ( "DBFactory" ) ;
string [ ] temp , connstr ;
string server = "" , dbService = "" , uid = "" , pwd = "" ;
char [ ] dh = new char [ 1 ] { '=' } ;
char [ ] fh = new char [ 1 ] { ';' } ;
if ( MonitorOrManageDB = = "Manage" )
{
dbf = dbo . GetValue ( "ManDBFactory" ) ;
connstr = dbo . GetValue ( "ManConnString" ) . Split ( fh ) ;
}
else //if (MonitorOrManageDB == "Monitor")
{
dbf = dbo . GetValue ( "DBFactory" ) ;
connstr = dbo . GetValue ( "ConnString" ) . Split ( fh ) ;
}
for ( int i = connstr . GetLowerBound ( 0 ) ; i < = connstr . GetUpperBound ( 0 ) ; i + + )
{
temp = connstr [ i ] . Split ( dh ) ;
switch ( dbf )
{
case "SQLServerDBFactory" :
//"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Server" :
server = temp [ 1 ] . Trim ( ) ;
break ;
case "database" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "uid" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "pwd" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
}
break ;
case "OracleDBFactory" :
//"Data Source=Richard-liu;User ID=pdadmin;Password=pdadmin ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Data Source" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "User ID" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "Password" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
default :
server = "127.0.0.1" ;
break ;
}
break ;
case "OleDBFactory" :
//"Provider=OraOLEDB.Oracle.1;Data Source=Richard-liu;User ID=sa;Password= ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Data Source" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "User ID" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "Password" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
case "Provider" :
server = temp [ 1 ] . Trim ( ) ;
break ;
}
break ;
default :
//"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 "
switch ( temp [ 0 ] . Trim ( ) )
{
case "Server" :
server = temp [ 1 ] . Trim ( ) ;
break ;
case "database" :
dbService = temp [ 1 ] . Trim ( ) ;
break ;
case "uid" :
uid = temp [ 1 ] . Trim ( ) ;
break ;
case "pwd" :
pwd = temp [ 1 ] . Trim ( ) ;
break ;
default :
server = "(local)" ;
uid = "SA" ;
dbService = "SSWCMS" ;
break ;
}
break ;
}
}
ServerHostName = server ;
DBServiceName = dbService ;
Username = uid ;
Password = pwd ;
return true ;
}
catch ( Exception ex )
{
ServerHostName = "" ;
DBServiceName = "" ;
Username = "" ;
Password = "" ;
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool SetIOStationProperty ( int deviceIndex , int IOStationProperty , out string Errtext )
{
DataView dvf = new DataView ( ) ; DataView dv = new DataView ( ) ;
try
{
Errtext = string . Empty ;
string iotype = " (T_Base_Route.F_RouteKind <> 0) " ;
if ( IOStationProperty = = 1 ) //入库站台
{
iotype = " (T_Base_Route.F_RouteKind = 1) " ;
dbo . ExecuteSql ( "update t_base_route set F_Status=1,F_AutoUpdate=1 where F_StartDevice=" + deviceIndex ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where START_DEVICE=" + deviceIndex ) ;
dbo . ExecuteSql ( "update t_base_route set F_Status=0,F_AutoUpdate=0 where F_EndDevice=" + deviceIndex ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where END_DEVICE=" + deviceIndex ) ;
}
else if ( IOStationProperty = = 2 ) //出库站台
{
iotype = " (T_Base_Route.F_RouteKind = 2) " ;
dbo . ExecuteSql ( "update t_base_route set F_Status=1,F_AutoUpdate=1 where F_EndDevice=" + deviceIndex ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where END_DEVICE=" + deviceIndex ) ;
dbo . ExecuteSql ( "update t_base_route set F_Status=0,F_AutoUpdate=0 where F_StartDevice=" + deviceIndex ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where START_DEVICE=" + deviceIndex ) ;
}
else //0拣选站台
{
iotype = " (T_Base_Route.F_RouteKind <> 0) " ;
dbo . ExecuteSql ( "update t_base_route set F_Status=1,F_AutoUpdate=1 where ((F_EndDevice=" + deviceIndex + ") or (F_StartDevice=" + deviceIndex + "))" ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where ((End_Device=" + deviceIndex + ") or (Start_Device=" + deviceIndex + "))" ) ;
}
dv = dbo . ExceSQL ( "SELECT DISTINCT T_Base_Route.F_RouteID, T_Base_Route.F_RouteKind, " +
"T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route,T_Base_Route_Device where " +
"T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and " + iotype +
" AND (T_Base_Route_Device.F_DeviceIndex = " + deviceIndex + ")" ) . Tables [ 0 ] . DefaultView ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
dbo . ExecuteSql ( "update t_base_route set F_Status=1,F_AutoUpdate=1 where f_routeid=" + dv [ i ] [ "F_RouteID" ] ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where CONTROL_ROUTE_ID='" + dv [ i ] [ "F_RouteID" ] + "' and CONTROL_ROUTE_STATUS=0" ) ;
if ( dv [ i ] [ "F_RouteKind" ] . ToString ( ) = = "1" )
{
dvf = dbo . ExceSQL ( "SELECT DISTINCT T_Base_Route.F_RouteID, T_Base_Route.F_RouteKind, " +
"T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route,T_Base_Route_Device where " +
"T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and T_Base_Route.F_RouteKind = 2 " +
" AND (T_Base_Route_Device.F_DeviceIndex = " + deviceIndex + ")" ) . Tables [ 0 ] . DefaultView ;
for ( int f = 0 ; f < dvf . Count ; f + + )
{
dbo . ExecuteSql ( "update t_base_route set F_Status=0,F_AutoUpdate=0 where f_routeid=" + dvf [ f ] [ "F_RouteID" ] ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where CONTROL_ROUTE_ID='" + dvf [ f ] [ "F_RouteID" ] + "' and CONTROL_ROUTE_STATUS=1" ) ;
}
}
else if ( dv [ i ] [ "F_RouteKind" ] . ToString ( ) = = "2" )
{
dvf = dbo . ExceSQL ( "SELECT DISTINCT T_Base_Route.F_RouteID, T_Base_Route.F_RouteKind, " +
"T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route,T_Base_Route_Device where " +
"T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and T_Base_Route.F_RouteKind = 1 " +
" AND (T_Base_Route_Device.F_DeviceIndex = " + deviceIndex + ")" ) . Tables [ 0 ] . DefaultView ;
for ( int f = 0 ; f < dvf . Count ; f + + )
{
dbo . ExecuteSql ( "update t_base_route set F_Status=0,F_AutoUpdate=0 where f_routeid=" + dvf [ f ] [ "F_RouteID" ] ) ;
dboMan . ExceSQL ( "update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where CONTROL_ROUTE_ID='" + dvf [ f ] [ "F_RouteID" ] + "' and CONTROL_ROUTE_STATUS=1" ) ;
}
}
}
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dvf . Dispose ( ) ;
dv . Dispose ( ) ;
}
}
//public DataView GetIOStationProperty(int deviceIndex, out string Errtext)
//{
//}
public bool SetBlackBoxParameter ( int FileCount , int FileSize , out string Errtext )
{
Errtext = string . Empty ;
try
{
double ssize = 1 0 4 8 5 7 6 * Convert . ToDouble ( FileSize ) ;
CommonClassLib . AppSettings . SetValue ( "DarkCasketSize" , ssize . ToString ( ) ) ;
CommonClassLib . AppSettings . SetValue ( "DarkCasketSum" , FileCount . ToString ( ) ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public string GetBlackBoxInfo ( string deviceIndex , DateTime BeginTime , DateTime EndTime , out string Errtext )
{
try
{
Errtext = string . Empty ;
string filePath = System . IO . Path . GetFullPath ( System . Reflection . Assembly . GetExecutingAssembly ( ) . GetName ( ) . ToString ( ) ) ;
filePath = System . IO . Path . GetDirectoryName ( filePath ) ;
filePath = System . IO . Path . Combine ( filePath , "DarkCasket" ) ;
// 没找到目录返回
if ( Directory . Exists ( filePath ) = = false )
{
return "" ;
}
string [ ] files = Directory . GetFiles ( filePath ) ;
Array . Sort ( files ) ;
// 目录为空时候返回
if ( files . Length < 1 )
{
Errtext = "目录为空!" ;
return "" ;
}
string opf = files [ files . Length - 1 ] ;
string [ ] cc = new string [ 1 ] { "**" } ;
string [ ] sp = null ;
string rtext = string . Empty ;
char [ ] st = new char [ 1 ] { ':' } ;
string [ ] sf ;
DateTime dt ;
using ( StreamReader sr = new StreamReader ( opf ) )
{
sr . ReadLine ( ) ;
while ( ! sr . EndOfStream )
{
sp = sr . ReadLine ( ) . Split ( cc , StringSplitOptions . RemoveEmptyEntries ) ;
if ( sp [ 3 ] . IndexOf ( deviceIndex . ToString ( ) ) < 0 )
{
continue ;
}
sf = sp [ 0 ] . Split ( st ) ;
dt = Convert . ToDateTime ( sf [ 0 ] + ":" + sf [ 1 ] + ":" + sf [ 2 ] ) ;
if ( ( dt . Hour < BeginTime . Hour ) | | ( ( dt . Hour > EndTime . Hour ) ) )
{
continue ;
}
if ( sp . GetLength ( 0 ) > 0 )
{
rtext + = sp [ 0 ] ;
for ( int i = 1 ; i < sp . GetLength ( 0 ) ; i + + )
{
rtext + = sp [ i ] ;
}
rtext + = "\r\n" ;
}
}
}
return rtext ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return "" ;
}
}
public DataTable GetAutoTaskHistory ( DateTime BeginTime , DateTime EndTime , out string Errtext )
{
Errtext = string . Empty ;
try
{
DataView dv = dbo . ExceSQL ( string . Format ( "SELECT * FROM T_Manage_Task_BAK WHERE (FBEGTIME >= '{0}') AND (FBEGTIME <= '{1}')" , BeginTime , EndTime ) ) . Tables [ 0 ] . DefaultView ;
return dv . Table ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return null ;
}
}
public bool DeleteAutoTaskHistory ( DateTime BeginTime , DateTime EndTime , out string Errtext )
{
Errtext = string . Empty ;
try
{
dbo . ExecuteSql ( string . Format ( "DELETE FROM T_Manage_Task_BAK WHERE (FBEGTIME >= '{0}') AND (FBEGTIME <= '{1}')" , BeginTime , EndTime ) ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool SetUserAndPurview ( string UserID , string UserName , string Password , string Purview , out string Errtext )
{
DataView dc = new DataView ( ) ;
Errtext = string . Empty ;
try
{
dc = dbo . ExceSQL ( string . Format ( "select f_userid from t_base_users where f_userid= '{0}'" , UserID ) ) . Tables [ 0 ] . DefaultView ;
if ( dc . Count > 0 )
{
object [ ] ob = new object [ 4 ] { UserName , Purview , Password , UserID } ;
int a = dbo . ExecuteSql ( string . Format ( "UPDATE t_base_users SET f_username = '{0}',f_purview='{1}',f_password='{2}' where f_userid= '{3}'" , ob ) ) ;
if ( a > 0 )
{
return true ;
}
else
{
Errtext = "修改用户信息失败!" ;
return false ;
}
}
else
{
object [ ] ob = new object [ 4 ] { UserID , UserName , Purview , Password } ;
int a = dbo . ExecuteSql ( string . Format ( "insert into t_base_users(f_userid,f_username,f_purview,f_password) values('{0}','{1}','{2}','{3}')" , ob ) ) ;
if ( a > 0 )
{
return true ;
}
else
{
Errtext = "增加用户信息失败!" ;
return false ;
}
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dc . Dispose ( ) ;
}
}
public bool GetUserAndPurview ( string UserID , out string UserName , out string Password , out string Purview , out string Errtext )
{
DataView dv = new DataView ( ) ;
UserName = "" ; Password = "" ; Purview = "" ;
Errtext = string . Empty ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT f_userid, f_username, f_purview, f_password FROM T_Base_Users where f_userid={0}" , UserID ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
UserName = dv [ 0 ] [ "f_username" ] . ToString ( ) ;
Password = dv [ 0 ] [ "f_password" ] . ToString ( ) ;
Purview = dv [ 0 ] [ "f_purview" ] . ToString ( ) ;
return true ;
}
else
{
Errtext = "用户不存在!" ;
return false ;
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool SetUserPassword ( string UserID , string Password , out string Errtext )
{
Errtext = string . Empty ;
try
{
int a = dbo . ExecuteSql ( string . Format ( "UPDATE t_base_users SET f_password='{0}' where f_userid= '{1}'" , Password , UserID ) ) ;
if ( a > 0 )
{
return true ;
}
else
{
Errtext = "修改用户密码失败!" ;
return false ;
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public string GetUserPassword ( string UserID , out string Errtext )
{
DataView dv = new DataView ( ) ;
Errtext = string . Empty ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT f_password FROM T_Base_Users where f_userid={0}" , UserID ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return dv [ 0 ] [ "f_password" ] . ToString ( ) ;
}
else
{
Errtext = "用户不存在!" ;
return "" ;
}
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return "" ;
}
finally
{
dv . Dispose ( ) ;
}
}
public bool ShutDownControlSystem ( out string ErrText )
{
ErrText = string . Empty ;
try
{
SocketsTCPIP . CClientTCPIP . EndConnect ( ) ;
CDisassembleTask . EndListen ( ) ;
CObtainTask . EndListen ( ) ;
CParsePLCData . EndListen ( ) ;
CUpdateIoControl . EndListen ( ) ; //民航二所
CCallService . EndListen ( ) ; //民航二所 结束调用管理系统接口
CCallService . EndListenPLC ( ) ; //山东时代
//Application.Exit();
return true ;
}
catch ( Exception ex )
{
ErrText = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool StartGetALLDeviceState ( out string Errtext )
{
cgs . GetDeviceState ( ) ;
Errtext = cgs . CGetStateError ;
return true ;
}
public bool StartSendDeviceOrder ( out string Errtext )
{
if ( CStaticClass . Order = = true )
{ //20130510
lock ( thisLock )
{
cctrl . StartOrder ( ) ;
}
}
Errtext = cctrl . CControlError ;
return true ;
}
//public bool ListenPLCAsk(out string Errtext)
//{
// //clpa.DealwithPLCAsk();
// //Errtext = clpa.ListenPLCAskError;
// return true;
//}
public bool DataClear ( out string Errtext )
{
DataView dv = new DataView ( ) ;
try
{
Errtext = string . Empty ;
dbo . ExecuteSql ( "delete from T_Manage_Task" ) ;
dv = dbo . ExceSQL ( "select * from T_Monitor_Task" ) . Tables [ 0 ] . DefaultView ; //20100610
for ( int i = 0 ; i < dv . Count ; i + + )
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ i ] [ "F_DeviceIndex" ] ) , Convert . ToInt32 ( dv [ i ] [ "F_MonitorIndex" ] ) , Model . CGeneralFunction . TASKDELETE ) ;
}
CommonClassLib . CCarryConvert . WriteDarkCasket ( "Login" , "UserID:" + CStaticClass . UserID + "的操作日志" , "进行数据清理操作" , "" , "" ) ;
return true ;
}
catch ( Exception ex )
{
Errtext = ex . StackTrace + ex . Message ;
return false ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 获得管理任务种类
/// </summary>
/// <param name="errtext"></param>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public int GetManageTaskKindFromMonitor ( out string errtext , int monitorIndex )
{
try
{
errtext = string . Empty ;
return ccf . GetManageTaskKindIndexFromMonitor ( monitorIndex ) ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
/// <summary>
/// 获得管理任务索引
/// </summary>
/// <param name="errtext"></param>
/// <param name="monitorIndex">设备指令索引</param>
/// <returns></returns>
public int GetManageTaskIndexFromMonitor ( out string errtext , int monitorIndex )
{
try
{
errtext = string . Empty ;
return ccf . GetManageTaskIndexfromMonitor ( monitorIndex ) ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
/// <summary>
/// 获得设备种类索引
/// </summary>
/// <param name="errtext"></param>
/// <param name="deviceIndex">设备索引</param>
/// <returns></returns>
public int GetDeviceKindIndex ( out string errtext , int deviceIndex )
{
try
{
errtext = string . Empty ;
return ccf . GetDeviceKindIdx ( deviceIndex ) ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
/// <summary>
/// 发送设备置位清零
/// </summary>
/// <param name="errtext"></param>
/// <param name="deviceIndex"></param>
/// <returns></returns>
public bool SendDeviceReset ( out string errtext , int deviceIndex , int ResetOrder )
{
errtext = string . Empty ;
try
{
sdo = CommModeCreate . CreateSendDeviceOrder ( deviceIndex ) ;
int deviceKind = GetDeviceKindIndex ( out errtext , deviceIndex ) ;
if ( ( deviceKind = = 1 ) | | ( deviceKind = = 6 ) )
{
sdo . SendDeviceOrder ( ResetOrder , 0 , 0 , deviceIndex , 0 , 0 , 0 , 0 , 0 , 0 ) ;
}
else
{
sdo . SendDeviceOrder ( ResetOrder , 0 , 0 , deviceIndex , 0 ) ;
}
_d evice = Model . CGetInfo . GetDeviceInfo ( deviceIndex ) ;
_d evice . SendMessage = null ;
Model . CGetInfo . SetDeviceInfo ( _d evice ) ;
Thread . Sleep ( 5 0 0 ) ; //20131121richard
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
/// <summary>
/// 心跳诊断
/// </summary>
/// <returns></returns>
public bool Heartbeat ( out Model . MonitorInfo monitorinfo )
{ //20130817richard
Model . MonitorInfo _ monitorinfo = new Model . MonitorInfo ( CStaticClass . ObtainManageTask , CStaticClass . Order , OPCClient . CCommonOPCClient . ConnectCount , null ) ;
monitorinfo = _ monitorinfo ;
return true ;
}
/// <summary>
/// 获得指定SQL语句返回的DataView
/// </summary>
/// <param name="errtext"></param>
/// <param name="SQL"></param>
/// <returns></returns>
public DataTable GetDataView ( out string errtext , string SQL )
{
try
{
errtext = string . Empty ;
DataView dv = dbo . ExceSQL ( SQL ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return dv . Table ;
}
else
{
errtext = "没查到数据!" ;
return null ;
}
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return null ;
}
}
/// <summary>
/// 只执行SQL,不反悔数据集的,例如insert,update,delete等
/// </summary>
/// <param name="errtext"></param>
/// <param name="SQL"></param>
/// <returns></returns>
public int ExeSQLNoneQuery ( out string errtext , string SQL )
{
try
{
errtext = string . Empty ;
int a = dbo . ExecuteSql ( SQL ) ;
return a ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
/// <summary>
/// 获得指定SQL语句返回的DataView
/// </summary>
/// <param name="errtext"></param>
/// <param name="SQL"></param>
/// <returns></returns>
public DataTable GetManDataView ( out string errtext , string SQL )
{
DataView dv = new DataView ( ) ;
try
{
errtext = string . Empty ;
dv = dboMan . ExceSQL ( SQL ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return dv . Table ;
}
else
{
errtext = "没查到数据!" ;
return null ;
}
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return null ;
}
}
/// <summary>
/// 只执行SQL,不反悔数据集的,例如insert,update,delete等
/// </summary>
/// <param name="errtext"></param>
/// <param name="SQL"></param>
/// <returns></returns>
public int ExeManSQLNoneQuery ( out string errtext , string SQL )
{
try
{
errtext = string . Empty ;
int a = dboMan . ExecuteSql ( SQL ) ;
return a ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return - 1 ;
}
}
public StaticProperty GetTurnOrder ( StaticProperty sp )
{
if ( sp ! = null )
{
return sp ;
}
else
{
throw new ArgumentNullException ( "StaticProperty" ) ;
}
}
public bool GetAllManageTask ( out string errtext )
{
try
{
errtext = string . Empty ;
if ( CStaticClass . ObtainManageTask = = true )
{
if ( CObtainTask . GetManagerTask ( ) = = 0 )
{
errtext = CObtainTask . CObtainTaskError ;
}
}
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool DisassembleTask ( out string errtext )
{
try
{
errtext = string . Empty ;
if ( CStaticClass . Order = = true )
{
CDisassembleTask . MyTaskIntoSteps ( ) ;
}
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool SetLogicHaveGoods ( out string errtext , bool ifHaveGoods , int deviceindex )
{
errtext = string . Empty ;
try
{
if ( ifHaveGoods = = true )
{
dbo . ExceSQL ( string . Format ( "UPDATE T_Base_Device SET F_HaveGoods = 1 where F_DeviceIndex ={0}" , deviceindex ) ) ;
}
else
{
dbo . ExceSQL ( string . Format ( "UPDATE T_Base_Device SET F_HaveGoods = 0 where F_DeviceIndex ={0}" , deviceindex ) ) ;
}
Model . MDevice dev = Model . CGetInfo . GetDeviceInfo ( deviceindex ) ;
dev . LogicHaveGoods = ifHaveGoods ;
Model . CGetInfo . SetDeviceInfo ( dev ) ;
CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs ( dev ) ;
OnDeviceState ( "SControlMonitor.SetLogicHaveGoods" , csce ) ;
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
public bool DealWithDeviceState ( out string errtext , int deviceindex , byte [ ] splitbyteValue , byte [ ] devicestates )
{ //deviceindex设备组代表的订阅,首先把设备组按照F_DBW2Address由小到大排序,拆分到具体每个设备
lock ( thisLock )
{
if ( ( splitbyteValue = = null ) & & ( devicestates = = null ) )
{ //20120420
errtext = OPCClient . CCommonOPCClient . OpcError ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , string . Format ( "SControlMonitor.DealWithDeviceState时,订阅组:{0}发生异常,{1}!" , deviceindex , errtext ) ) ;
OnRefreshMonitor ( rmea ) ;
return false ;
}
errtext = string . Empty ; DataView dv = new DataView ( ) ; DataView dvsp = new DataView ( ) ; DataView dvbc = new DataView ( ) ; DataView dvyanshi = new DataView ( ) ;
int devicebegin = 0 ; int DBW2Addressbegin = 0 ; int SplitBytebegin = 0 ; string S7Connection = string . Empty ;
int SplitByteLength = 0 ;
StringBuilder mysql = new StringBuilder ( ) ; //add by lyj 20171116
int lanenumber = 0 ;
try
{
StringBuilder sql = new StringBuilder ( string . Format ( "SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE f_controldevice='1' and (F_DeviceKindIndex <>33) AND (F_ReadSubscription = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address" , deviceindex ) ) ; //20151120,增加字段是否需要服务端处理设备的订阅
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
devicebegin = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
DBW2Addressbegin = Convert . ToInt32 ( dv [ 0 ] [ "F_DBW2Address" ] ) ;
SplitBytebegin = Convert . ToInt32 ( dv [ 0 ] [ "F_SplitByte" ] ) ;
S7Connection = dv [ 0 ] [ "F_S7Connection" ] . ToString ( ) ;
sql . Clear ( ) ;
sql . Append ( string . Format ( "SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex =33) AND (F_ReadSubscription = '{0}') ORDER BY F_DBW2Address" , deviceindex ) ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
SplitByteLength = Convert . ToInt32 ( dvsp [ 0 ] [ "F_DBWGetLength" ] ) ;
}
}
else
{
sql = new StringBuilder ( string . Format ( "SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceIndex = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address" , deviceindex ) ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
devicebegin = Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ;
DBW2Addressbegin = Convert . ToInt32 ( dv [ 0 ] [ "F_DBW2Address" ] ) ;
SplitBytebegin = Convert . ToInt32 ( dv [ 0 ] [ "F_SplitByte" ] ) ;
S7Connection = dv [ 0 ] [ "F_S7Connection" ] . ToString ( ) ;
sql = new StringBuilder ( string . Format ( "SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex =33) AND (F_ReadSubscription = '{0}') ORDER BY F_DBW2Address" , deviceindex ) ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
SplitByteLength = Convert . ToInt32 ( dvsp [ 0 ] [ "F_DBWGetLength" ] ) ;
}
}
else
{ //20120420
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , string . Format ( "SControlMonitor.DealWithDeviceState时,订阅组:{0}对应的设备索引不存在!" , deviceindex ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext = string . Format ( "SControlMonitor.DealWithDeviceState时,订阅组:{0}对应的设备索引不存在!" , deviceindex ) ;
return false ;
}
}
#region I/O点字节集合采集分解 lzm 20250313 添加字段 F_IsAGViostation
if ( splitbyteValue ! = null )
{
Array . Copy ( splitbyteValue , CStaticClass . MutiReadSubscriptionDeviceSplitReturns [ deviceindex . ToString ( ) ] , splitbyteValue . Length ) ;
dvsp = dbo . ExceSQL ( string . Format ( "SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_IsAGVIOStation FROM T_Base_Device WHERE f_controldevice='1' and (F_DeviceKindIndex <>31) AND(F_DeviceKindIndex <>33) AND (F_S7Connection = '{0}') AND (F_DBW2Address IS NOT NULL and F_SplitByte IS NOT NULL and F_SplitByte >={1} and F_SplitByte <{1}+{2}) ORDER BY F_DBW2Address" , S7Connection , SplitBytebegin , SplitByteLength ) ) . Tables [ 0 ] . DefaultView ; //20151120,增加字段是否需要服务端处理设备的订阅
for ( int i = 0 ; i < dvsp . Count ; i + + )
{
devinfo = Model . CGetInfo . GetDeviceInfo ( Convert . ToInt32 ( dvsp [ i ] [ "F_DeviceIndex" ] ) ) ;
int delta = Convert . ToInt32 ( dvsp [ i ] [ "F_SplitByte" ] ) - SplitBytebegin ;
if ( delta < 0 ) continue ;
devinfo . SplitByte_0 = ( splitbyteValue [ delta ] & 1 ) = = 1 ? 1 : 0 ;
devinfo . SplitByte_1 = ( splitbyteValue [ delta ] & 2 ) = = 2 ? 1 : 0 ;
devinfo . SplitByte_2 = ( splitbyteValue [ delta ] & 4 ) = = 4 ? 1 : 0 ;
devinfo . SplitByte_3 = ( splitbyteValue [ delta ] & 8 ) = = 8 ? 1 : 0 ;
devinfo . SplitByte_4 = ( splitbyteValue [ delta ] & 1 6 ) = = 1 6 ? 1 : 0 ;
devinfo . SplitByte_5 = ( splitbyteValue [ delta ] & 3 2 ) = = 3 2 ? 1 : 0 ;
devinfo . SplitByte_6 = ( splitbyteValue [ delta ] & 6 4 ) = = 6 4 ? 1 : 0 ;
devinfo . SplitByte_7 = ( splitbyteValue [ delta ] & 1 2 8 ) = = 1 2 8 ? 1 : 0 ;
devinfo . F_IsAGVIOStation = Convert . ToInt32 ( dvsp [ i ] [ "F_IsAGVIOStation" ] ) ;
Model . CGetInfo . SetDeviceInfo ( devinfo ) ;
CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs ( devinfo ) ;
OnDeviceState ( "SControlMonitor.DealWithDeviceState" , csce ) ;
}
}
#endregion
#region 设备状态采集分解
int tempdb2addr = 0 ; StringBuilder sss = new StringBuilder ( ) ; StringBuilder barcode = new StringBuilder ( ) ;
if ( devicestates ! = null )
{
Array . Copy ( devicestates , CStaticClass . MutiReadSubscriptionDeviceStateReturns [ deviceindex . ToString ( ) ] , devicestates . Length ) ;
for ( int di = 0 ; di < dv . Count ; di + + )
{
int devidx = Convert . ToInt32 ( dv [ di ] [ "F_DeviceIndex" ] ) ;
devinfo = Model . CGetInfo . GetDeviceInfo ( devidx ) ;
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20141201张磊发现误写为Dbw1Address
sdo = CommModeCreate . CreateSendDeviceOrder ( devidx ) ;
int taskindex = 0 ; int state = 0 ;
int taskindex2 = 0 , taskindex3 = 0 ;
//以下代码重新开发CStaticClass.MutiS7ConnReturns改为按照F_ReadSubscription
tempdb2addr = Convert . ToInt32 ( dv [ di ] [ "F_DBW2Address" ] ) - DBW2Addressbegin ;
if ( devinfo . DeviceKind = = 1 )
{
taskindex = ( devicestates [ tempdb2addr + 2 ] < < 8 ) + devicestates [ tempdb2addr + 3 ] ;
}
else if ( 3 < devinfo . Dbw2Getlength )
{
taskindex = ( devicestates [ tempdb2addr + 2 ] < < 8 ) + devicestates [ tempdb2addr + 3 ] ;
}
if ( devinfo . DeviceKind = = 1 )
{
state = ( devicestates [ tempdb2addr + 4 ] < < 8 ) + devicestates [ tempdb2addr + 5 ] ;
}
else if ( 1 < devinfo . Dbw2Getlength )
{
state = devicestates [ tempdb2addr + 1 ] ;
}
int xc = 0 ; int yc = 0 ;
int devkind = ccf . GetDeviceKindIdx ( devidx ) ;
if ( devkind = = 3 1 )
{ //解析南京14所得高端自动化的是否有物信号,高位低位信号(I/O信号字节填写在状态字节的后面)
#region 解析高端设备状态及探物
devinfo = Model . CGetInfo . GetDeviceInfo ( devidx ) ;
devinfo . SplitByte_0 = ( devicestates [ tempdb2addr + 8 ] & 1 ) = = 1 ? 1 : 0 ;
devinfo . SplitByte_1 = ( devicestates [ tempdb2addr + 8 ] & 2 ) = = 2 ? 1 : 0 ;
devinfo . SplitByte_2 = ( devicestates [ tempdb2addr + 8 ] & 4 ) = = 4 ? 1 : 0 ;
devinfo . SplitByte_3 = ( devicestates [ tempdb2addr + 8 ] & 8 ) = = 8 ? 1 : 0 ;
devinfo . SplitByte_4 = ( devicestates [ tempdb2addr + 8 ] & 1 6 ) = = 1 6 ? 1 : 0 ;
devinfo . SplitByte_5 = ( devicestates [ tempdb2addr + 8 ] & 3 2 ) = = 3 2 ? 1 : 0 ;
devinfo . SplitByte_6 = ( devicestates [ tempdb2addr + 8 ] & 6 4 ) = = 6 4 ? 1 : 0 ;
devinfo . SplitByte_7 = ( devicestates [ tempdb2addr + 8 ] & 1 2 8 ) = = 1 2 8 ? 1 : 0 ;
if ( devinfo . RunState ! = 4 ) //20121203
{
if ( state > = 3 0 )
{
devinfo . ErrorCode = state ;
devinfo . RunState = 2 ;
}
else
{ //0,1,2
if ( state = = 2 )
{
devinfo . RunState = 5 ;
}
else
{
devinfo . RunState = state ;
}
devinfo . ErrorCode = state ;
}
}
#region 注释 by lyj
//barcode.Remove(0, barcode.Length);
//for (int i = 2; i <= 7; i++)
//{
// barcode.Append(Convert.ToChar(devicestates[tempdb2addr + i]));
//}
//devinfo.Barcode = barcode.ToString();
//if (state == 2)
//{//20111231
// #region 判断是否满足条码的正则表达式
// if (ccf.GetCodeCheck(barcode.ToString()) == false) continue;
// #endregion
// devinfo.TaskNo = GetMonitorTaskIndexFromBarCode(barcode, devinfo);
//}
#endregion
#region 设备被停用时,不显示真实状态20120820
//if (ccf.GetDeviceLockedState(devidx) == -1) devinfo.RunState = 4;//20121203
#endregion
Model . CGetInfo . SetDeviceInfo ( devinfo ) ;
//CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs(devinfo);
//OnDeviceState("SControlMonitor.DealWithDeviceState", csce);
#endregion
}
else
{
#region 通用物流设备状态
devinfo = Model . CGetInfo . GetDeviceInfo ( devidx ) ;
if ( devinfo . RunState ! = 4 ) //20121203
{
if ( state > = 3 0 )
{
devinfo . ErrorCode = state ;
devinfo . RunState = 2 ;
if ( devinfo . DeviceKind = = 1 )
{
//sdo = CommModeCreate.CreateSendDeviceOrder(devinfo.DeviceIndex);
//sdo.SendDeviceOrder(0, 0, 0, devinfo.DeviceIndex, 0, 0, 0, 0, 0, 0);
}
}
else
{ //0,1,2
if ( state = = 2 )
{
devinfo . RunState = 5 ;
}
else
{
devinfo . RunState = state ;
}
devinfo . ErrorCode = state ;
}
}
devinfo . TaskNo = taskindex ;
if ( devinfo . DeviceKind = = 1 )
{
devinfo . XCoor = devicestates [ tempdb2addr + 7 ] + ( devicestates [ tempdb2addr + 6 ] < < 8 ) ; //X坐标
if ( devinfo . DeviceKind = = 1 )
{
devinfo . YCoor = devicestates [ tempdb2addr + 9 ] + ( devicestates [ tempdb2addr + 8 ] < < 8 ) ; //Y坐标
}
//byte[] mile = new byte[4] { devicestates[tempdb2addr + 24], devicestates[tempdb2addr + 25], devicestates[tempdb2addr + 26], devicestates[tempdb2addr + 27] };
//devinfo.Mile = CommonClassLib.CCarryConvert.bytetofloat(mile);
//byte[] time = new byte[4] { devicestates[tempdb2addr + 36], devicestates[tempdb2addr + 37], devicestates[tempdb2addr + 38], devicestates[tempdb2addr + 39] };
//devinfo.Time = CommonClassLib.CCarryConvert.bytetofloat(time);
devinfo . Mile = devicestates [ tempdb2addr + 2 7 ] + ( devicestates [ tempdb2addr + 2 6 ] < < 8 ) + ( devicestates [ tempdb2addr + 2 5 ] < < 1 6 ) + ( devicestates [ tempdb2addr + 2 4 ] < < 3 2 ) ; //民航二所
devinfo . Time = devicestates [ tempdb2addr + 3 9 ] + ( devicestates [ tempdb2addr + 3 8 ] < < 8 ) + ( devicestates [ tempdb2addr + 3 7 ] < < 1 6 ) + ( devicestates [ tempdb2addr + 3 6 ] < < 3 2 ) ;
}
#region 设备被停用时,不显示真实状态20120820
if ( ccf . GetDeviceLockedState ( devidx ) = = - 1 ) devinfo . RunState = 4 ; //20121203
#endregion
Model . CGetInfo . SetDeviceInfo ( devinfo ) ;
modifypathdevinfo = Model . CGetInfo . GetModifyPathDeviceInfo ( devidx ) ;
if ( modifypathdevinfo ! = null )
{
modifypathdevinfo . RunState = devinfo . RunState ;
modifypathdevinfo . ErrorCode = devinfo . ErrorCode ;
modifypathdevinfo . TaskNo = devinfo . TaskNo ;
Model . CGetInfo . SetModifyPathDeviceInfo ( modifypathdevinfo ) ;
}
#endregion
}
#region 处理设备完成、报警、运行状态;条码信息
int bcz = 0 ;
int askOrder = 0 ;
int askDevice = 0 ;
string bc = string . Empty ;
int [ ] states = new int [ ( int ) devinfo . Dbw2Getlength ] ;
int xcrelative = 0 , ycrelative = 0 ;
Array . Copy ( devicestates , tempdb2addr , states , 0 , ( int ) devinfo . Dbw2Getlength ) ;
switch ( devkind )
{
#region 堆垛机
case 1 :
devinfo . SplitByte_0 = ( devicestates [ tempdb2addr + 1 3 ] & 1 ) = = 1 ? 1 : 0 ;
devinfo . SplitByte_1 = ( devicestates [ tempdb2addr + 1 3 ] & 2 ) = = 2 ? 1 : 0 ;
devinfo . SplitByte_6 = ( devicestates [ tempdb2addr + 1 3 ] & 6 4 ) = = 6 4 ? 1 : 0 ;
if ( IsEquals ( devinfo . ReturnMessage , states , 1 2 ) = = false )
{
bc = GetBarcodeFromMonitorIndex ( taskindex ) ;
xc = devicestates [ tempdb2addr + 7 ] + ( devicestates [ tempdb2addr + 6 ] < < 8 ) ; //X坐标
yc = devicestates [ tempdb2addr + 9 ] + ( devicestates [ tempdb2addr + 8 ] < < 8 ) ; //Y坐标
//xc = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标
//yc = devicestates[tempdb2addr + 11] + (devicestates[tempdb2addr + 10] << 8) + (devicestates[tempdb2addr + 9] << 16) + (devicestates[tempdb2addr + 8] << 32);//Y坐标
//xcrelative = devicestates[tempdb2addr + 12];
//ycrelative = devicestates[tempdb2addr + 13];
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
devinfo . YCoor = xc ;
devinfo . YCoor = yc ;
if ( devinfo . YCoor = = 0 & & devinfo . XCoor = = 0 & & devinfo . RunState ! = 4 ) //上海晟碟
{
devinfo . RunState = 3 ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE SHUTTLE_POSITION SET F_RunStatus = " )
. Append ( devinfo . RunState ) . Append ( " WHERE F_DeviceIndex = " )
. Append ( devinfo . DeviceIndex ) . Append ( "and F_RunStatus<>" ) . Append ( devinfo . RunState ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
#region 上海晟碟,获取电池电量信息
devinfo . Battery_Status =
devicestates [ tempdb2addr + 1 1 ] + ( devicestates [ tempdb2addr + 1 0 ] < < 8 ) ;
//devinfo.Battery_Status = devicestates[tempdb2addr + 13];
sql . Remove ( 0 , sql . Length ) ;
//sql.Append("UPDATE SHUTTLE_POSITION SET F_BatteryStatus = ")
// .Append(devinfo.Battery_Status).Append(", F_Postion = ").Append(yc).Append(" WHERE F_DeviceIndex = ")
// .Append(devinfo.DeviceIndex);
sql . Append ( "UPDATE SHUTTLE_POSITION SET F_BatteryStatus = " )
. Append ( devinfo . Battery_Status ) . Append ( " WHERE F_DeviceIndex = " )
. Append ( devinfo . DeviceIndex ) . Append ( "and F_BatteryStatus<>" ) . Append ( devinfo . Battery_Status ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
if ( yc ! = 0 ) //上海晟碟, 层信息为0不更新表
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE SHUTTLE_POSITION SET F_Postion = " )
. Append ( yc ) . Append ( " WHERE F_DeviceIndex = " )
. Append ( devinfo . DeviceIndex ) . Append ( "and F_Postion<>" ) . Append ( yc ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
#region 20210329_上海晟碟,如果电池电量低于40,生成充电的手工任务 民航二所
if ( ( devinfo . XCoor ! = 0 ) & & ( devinfo . YCoor ! = 0 ) ) //dzf
{
if ( devinfo . RunState = = 0 ) //空闲模式才能下达任务
{
if ( devinfo . Battery_Status < 4 0 )
{
//判断是否有该车的充电任务,是否正在充电,满足条件再生成充电任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"SELECT * FROM T_Manage_Task WHERE FCONTROLTASKTYPE = 6 AND FSTARTDEVICE = '" )
. Append ( devinfo . DeviceIndex . ToString ( ) ) . Append ( "'" ) ;
if ( dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView . Count > 0 )
{
}
else
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT * FROM T_Manage_Task WHERE 1<>1 and FSTACK = " )
. Append ( devinfo . DeviceIndex . ToString ( ) ) ;
if ( dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView . Count > 0 )
{
}
//生成充电任务
else //强制生成充电任务
{
//没有调度预约锁时候生成充电任务
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"SELECT F_ManTaskReserve FROM T_Base_Device WHERE F_DeviceIndex = " )
. Append ( devinfo . DeviceIndex . ToString ( ) ) ;
int FManTaskReserve = Convert . ToInt32 (
dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView [ 0 ]
["F_ManTaskReserve"] ) ;
if ( FManTaskReserve = = 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"SELECT F_SwitchLock FROM T_Base_Device WHERE F_DeviceIndex = " )
. Append ( devinfo . DeviceIndex . ToString ( ) ) ;
int iSwitchLock = Convert . ToInt32 (
dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView [ 0 ]
["F_SwitchLock"] ) ;
if ( iSwitchLock = = 0 )
{
string strCell = string . Format ( "{0:D2}-{1:D2}-{2:D2}" , 2 , 2 , yc ) ;
int hidx1 = ccf . GetTempManageIdx ( ) ;
string dTime1 = DateTime . Now . ToString ( "u" ) ;
dTime1 = dTime1 . Substring ( 0 , dTime1 . Length - 1 ) ;
string strBarcode = DateTime . Now . ToString ( "yyyyMMddhhmmss" ) ;
mysql . Remove ( 0 , mysql . Length ) ;
mysql . Append ( "INSERT INTO T_Manage_Task" )
. Append (
"(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FCONTROLTASKTYPE,FIntoStepOK,FSTARTDEVICE,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE,FUseAwayFork,FSTACK,FStartLayer,FEndLayer) values('" )
. Append ( "Charge" ) . Append ( devinfo . DeviceIndex )
. Append ( "'," )
. Append ( hidx1 )
. Append ( ",1,-1,6,0," ) . Append ( devinfo . DeviceIndex ) . Append ( ",'" ) . Append ( strCell )
. Append ( "','" )
. Append ( 1 8 0 0 1 ) . Append ( "','" ) . Append ( strCell )
. Append ( "','" ) . Append ( dTime1 )
. Append ( "',0,0,11000, " ) . Append ( yc ) . Append ( "," ) . Append ( yc ) . Append ( ")" ) ;
dbo . ExecuteSql ( mysql . ToString ( ) ) ;
}
}
}
}
}
}
}
if ( devinfo . Battery_Status > 8 0 )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"UPDATE T_Base_Device SET F_SwitchLock = 0 WHERE F_SwitchLock <> 0 and F_DeviceIndex = " )
. Append ( devinfo . DeviceIndex . ToString ( ) ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
}
#endregion
#endregion
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**条码:" ) . Append ( bc ) . Append ( "**读标志" + devicestates [ tempdb2addr + 0 ] ) . Append ( "**状态" + state ) . Append ( "**任务号" + taskindex )
. Append ( "**列坐标" + xc ) . Append ( "**层坐标" + yc ) . Append ( "**电池电量" + devinfo . Battery_Status ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到穿梭板状态" , devidx . ToString ( ) , sss . ToString ( ) ) ;
#region 20201019_C2厂房,上报穿梭板所在位置及是否可用
//sql.Remove(0, sql.Length);
//sql.Append("SELECT DEVICE_LAYER, DEVICE_STAUTS FROM DEVICE_STAUTS WHERE DEVICE_CODE = '").Append(devinfo.DeviceIndex).Append("'");
//dvbc = dboMan.ExceSQL(sql.ToString()).Tables[0].DefaultView;
//if(dvbc.Count > 0)
//{
// int iLayer = Convert.ToInt32(dvbc[0]["DEVICE_LAYER"]);
// int iStatus = Convert.ToInt32(dvbc[0]["DEVICE_STAUTS"]);
// int iCurrnetStatus = state >= 30 ? 0 : 1;
// StringBuilder update = new StringBuilder();
// if(iLayer != devinfo.YCoor)
// {
// update.Append("DEVICE_LAYER = ").Append(devinfo.YCoor);
// if(iStatus != iCurrnetStatus)
// {
// update.Append(", DEVICE_STAUTS = ").Append(iCurrnetStatus);
// }
// }
// else
// {
// if (iStatus != iCurrnetStatus)
// {
// update.Append("DEVICE_STAUTS = ").Append(iCurrnetStatus);
// }
// }
// if(iLayer != devinfo.YCoor || iStatus != iCurrnetStatus)
// {
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE DEVICE_STAUTS SET ").Append(update.ToString()).Append(" WHERE DEVICE_CODE = ").Append(devinfo.DeviceIndex);
// dboMan.ExecuteSql(sql.ToString());
// }
//}
#endregion
}
#region 注释 by lyj 20171025
//devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 2] & 1) == 1 ? 1 : 0;
//devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 2] & 2) == 2 ? 1 : 0;
//devinfo.SplitByte_6 = devicestates[tempdb2addr + 14];
//devinfo.SplitByte_7 = devicestates[tempdb2addr + 15];
//if (devicestates[tempdb2addr + 0] != 1) continue;
#endregion
if ( ( state < = 0 ) | | ( taskindex < = 0 ) )
{
continue ;
}
cgs . GetKindDeviceState ( taskindex , devidx , state ) ;
break ;
#endregion
#region 类输送机
case 2 :
devinfo . SplitByte_0 = ( devicestates [ tempdb2addr + 4 ] & 1 ) = = 1 ? 1 : 0 ;
devinfo . SplitByte_1 = ( devicestates [ tempdb2addr + 4 ] & 2 ) = = 2 ? 1 : 0 ;
devinfo . SplitByte_2 = ( devicestates [ tempdb2addr + 4 ] & 4 ) = = 4 ? 1 : 0 ;
devinfo . SplitByte_3 = ( devicestates [ tempdb2addr + 4 ] & 8 ) = = 8 ? 1 : 0 ;
devinfo . SplitByte_5 = ( devicestates [ tempdb2addr + 4 ] & 3 2 ) = = 3 2 ? 1 : 0 ;
devinfo . SplitByte_6 = ( devicestates [ tempdb2addr + 4 ] & 6 4 ) = = 6 4 ? 1 : 0 ;
if ( IsEquals ( devinfo . ReturnMessage , states , 4 ) = = false )
{
bc = GetBarcodeFromMonitorIndex ( taskindex ) ;
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
StringBuilder task23 = new StringBuilder ( ) ;
task23 . Append ( ",1叉条码:" ) . Append ( bc ) ;
if ( taskindex2 > 0 )
{
task23 . Append ( ",2叉任务号:" ) . Append ( taskindex2 ) . Append ( ",2叉条码:" ) . Append ( GetBarcodeFromMonitorIndex ( taskindex2 ) ) ;
}
if ( taskindex3 > 0 )
{
task23 . Append ( ",3叉任务号:" ) . Append ( taskindex3 ) . Append ( ",3叉条码:" ) . Append ( GetBarcodeFromMonitorIndex ( taskindex3 ) ) ;
}
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**条码:" ) . Append ( bc ) . Append ( "**读标志" + devicestates [ tempdb2addr + 0 ] ) . Append ( "**状态" + state ) . Append ( "**任务号:" + taskindex ) . Append ( task23 ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到输送机机状态" , devidx . ToString ( ) , sss . ToString ( ) ) ;
}
//20170212
if ( state < = 0 ) //20140305|| taskindex <= 0
{
continue ;
}
#region AGV取放货的输送线状态实时跟新 PLC断开连接后,改值不会变更,可能存在BUG,需要加以限制
if ( devinfo . F_IsAGVIOStation = = 1 ) {
var signal = devinfo . SplitByte_0 = = 1 ? true : false ; //1有货,0无光电感应
var runstate = devinfo . RunState = = 0 ? true : false ;
if ( ! signal & & runstate )
{ //空闲,无货
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_AGVIOStation set F_AGVIOStatus=1 where F_DeviceIndex=" ) . Append ( devinfo . DeviceIndex ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
}
else {
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_AGVIOStation set F_AGVIOStatus=0 where F_DeviceIndex=" ) . Append ( devinfo . DeviceIndex ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
}
}
#endregion
if ( ( taskindex2 > 0 | | taskindex3 > 0 ) & & ( state = = 2 ) & & devinfo . IfCorrelDoubleFork = = "1" )
{
#region 根据电气报告三叉关联,配三叉
string aa ;
int mankind = 0 , fid1 = 0 , fid2 = 0 , fid3 = 0 , relFID = 0 , tindex = 0 ;
if ( taskindex3 > 0 )
{
mankind = GetManageTaskKindFromMonitor ( out aa , taskindex3 ) ;
relFID = GetManageTaskIndexFromMonitor ( out aa , taskindex3 ) ;
tindex = taskindex3 ;
}
if ( taskindex2 > 0 )
{
mankind = GetManageTaskKindFromMonitor ( out aa , taskindex2 ) ;
relFID = GetManageTaskIndexFromMonitor ( out aa , taskindex2 ) ;
tindex = taskindex2 ;
}
if ( taskindex > 0 )
{
mankind = GetManageTaskKindFromMonitor ( out aa , taskindex ) ;
relFID = GetManageTaskIndexFromMonitor ( out aa , taskindex ) ;
tindex = taskindex ;
}
fid1 = GetManageTaskIndexFromMonitor ( out aa , taskindex ) ;
fid2 = GetManageTaskIndexFromMonitor ( out aa , taskindex2 ) ;
fid3 = GetManageTaskIndexFromMonitor ( out aa , taskindex3 ) ;
//关联分配三叉
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FUseAwayFork=1,F_RELATIVECONTORLID=" ) . Append ( relFID ) . Append ( " where F_ManageTaskKindIndex=" ) . Append ( mankind ) . Append ( " and FID=" ) . Append ( fid1 ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FUseAwayFork=2,F_RELATIVECONTORLID=" ) . Append ( relFID ) . Append ( " where F_ManageTaskKindIndex=" ) . Append ( mankind ) . Append ( " and FID=" ) . Append ( fid2 ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FUseAwayFork=3,F_RELATIVECONTORLID=" ) . Append ( relFID ) . Append ( " where F_ManageTaskKindIndex=" ) . Append ( mankind ) . Append ( " and FID=" ) . Append ( fid3 ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
int dev2 = devinfo . DeviceIndex , dev1 = devinfo . DeviceIndex ;
//堆垛机设备指令配叉F_UseAwayFork、提前检测F_AheadDetect、取货坐标F_NumParam2
sql . Clear ( ) ; //20151120
if ( CStaticClass . DBFactory = = "OracleDBFactory" )
{ //20151120调度系统oracle的特殊语句
sql . Append ( string . Format ( "SELECT F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE rownum=1 and F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex" , mankind , relFID , tindex ) ) ;
}
else
{ //20151120调度系统SQLServer的特殊语句
sql . Append ( string . Format ( "SELECT TOP 1 F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex" , mankind , relFID , tindex ) ) ;
}
DataView dvr = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ; //20151120调度系统oracle的特殊语句
if ( dvr . Count > 0 )
{
int stackno = Convert . ToInt32 ( dvr [ 0 ] [ "F_DeviceIndex" ] ) ;
//stackno = 15001;//测试
object [ ] ob = new object [ 4 ] { stackno , fid1 , mankind , Model . CGeneralFunction . GetXcorrFromForkNoAndDevice ( devinfo . DeviceIndex , 1 ) } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_NumParam2={3},F_UseAwayFork = 1 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})" , ob ) ) ;
ob = new object [ 4 ] { stackno , fid2 , mankind , Model . CGeneralFunction . GetXcorrFromForkNoAndDevice ( devinfo . DeviceIndex , 2 ) } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_NumParam2={3},F_UseAwayFork = 2 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})" , ob ) ) ;
ob = new object [ 4 ] { stackno , fid3 , mankind , Model . CGeneralFunction . GetXcorrFromForkNoAndDevice ( devinfo . DeviceIndex , 3 ) } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_NumParam2={3},F_UseAwayFork = 3 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})" , ob ) ) ;
dvr = dbo . ExceSQL ( string . Format ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork = '1')" , devidx ) ) . Tables [ 0 ] . DefaultView ;
if ( ( dvr . Count > 0 ) & & ( fid1 > 0 ) )
{ //2叉设备替换为1叉的
int ndevidx = devidx * 1 0 + 2 ;
dev1 = Convert . ToInt32 ( dvr [ 0 ] [ "F_LaneGateDeviceIndex" ] ) ;
ob = new object [ 5 ] { ndevidx , dev1 , stackno , fid1 , mankind } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}', '{1}') WHERE F_DeviceIndex={2} and (F_ManageTaskIndex ={3}) AND (F_ManageTASKKINDINDEX ={4})" , ob ) ) ;
ob = new object [ 4 ] { dev1 . ToString ( ) . Substring ( 0 , 5 ) , stackno , fid1 , mankind } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}.1', '{0}.0') WHERE F_DeviceIndex={1} and (F_ManageTaskIndex ={2}) AND (F_ManageTASKKINDINDEX ={3})" , ob ) ) ;
}
dvr = dbo . ExceSQL ( string . Format ( "SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork = '2')" , devidx ) ) . Tables [ 0 ] . DefaultView ;
if ( ( dvr . Count > 0 ) & & ( fid2 > 0 ) )
{ //1叉设备替换为2叉的
int ndevidx = devidx * 1 0 + 1 ;
dev2 = Convert . ToInt32 ( dvr [ 0 ] [ "F_LaneGateDeviceIndex" ] ) ;
ob = new object [ 5 ] { ndevidx , dev2 , stackno , fid2 , mankind } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}', '{1}') WHERE F_DeviceIndex={2} and (F_ManageTaskIndex ={3}) AND (F_ManageTASKKINDINDEX ={4})" , ob ) ) ;
ob = new object [ 4 ] { dev2 . ToString ( ) . Substring ( 0 , 5 ) , stackno , fid2 , mankind } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}.0', '{0}.1') WHERE F_DeviceIndex={1} and (F_ManageTaskIndex ={2}) AND (F_ManageTASKKINDINDEX ={3})" , ob ) ) ;
}
}
//dev1 = 12041;//模拟测试
//dev2 = 12041;//模拟测试
cgs . ActionComplete ( dev1 , taskindex , 1 ) ;
cgs . ActionComplete ( dev2 , taskindex2 , 1 ) ;
//cgs.ActionComplete(dev3, taskindex3, 1);
#endregion
}
else
{
cgs . GetKindDeviceState ( taskindex , devidx , state ) ;
}
break ;
#endregion
#region 穿梭车RGV
case 4 :
devinfo . SplitByte_0 = ( devicestates [ tempdb2addr + 8 ] & 1 ) = = 1 ? 1 : 0 ;
devinfo . SplitByte_1 = ( devicestates [ tempdb2addr + 8 ] & 2 ) = = 2 ? 1 : 0 ;
devinfo . SplitByte_2 = ( devicestates [ tempdb2addr + 8 ] & 4 ) = = 4 ? 1 : 0 ;
devinfo . SplitByte_6 = ( devicestates [ tempdb2addr + 8 ] & 6 4 ) = = 6 4 ? 1 : 0 ;
if ( IsEquals ( devinfo . ReturnMessage , states , 4 ) = = false )
{
bc = GetBarcodeFromMonitorIndex ( taskindex ) ;
//xc = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标
xc = 1 ;
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**条码:" ) . Append ( bc ) . Append ( "**读标志" + devicestates [ tempdb2addr + 0 ] ) . Append ( "**状态" + state ) . Append ( "**任务号" + taskindex )
. Append ( "**列坐标" + xc ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到RGV状态" , devidx . ToString ( ) , sss . ToString ( ) ) ;
}
//devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 2] & 1) == 1 ? 1 : 0;
if ( devicestates [ tempdb2addr + 0 ] ! = 1 ) continue ;
if ( ( state < = 0 ) | | ( taskindex < = 0 ) )
{
continue ;
}
cgs . GetKindDeviceState ( taskindex , devidx , state ) ;
break ;
#endregion
#region 条形码字符串信息
case 7 :
if ( devicestates [ tempdb2addr + 0 ] ! = 1 ) continue ;
//20140109申请任务(任务不存在)或者条码比对(任务已经存在)
dvsp = dbo . ExceSQL ( string . Format ( "select F_BarCode,F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark,F_TaskIndex from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) " , devidx ) ) . Tables [ 0 ] . DefaultView ; //20130510F_ManageAskkind
if ( dvsp . Count > 0 )
{
StringBuilder warehouse = new StringBuilder ( dvsp [ 0 ] [ "F_WareHouse" ] . ToString ( ) ) ;
int dcode = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BindingDevice" ] ) ;
int apptype = Convert . ToInt32 ( dvsp [ 0 ] [ "F_ManageAskkind" ] ) ; //20130510
int BarcodeForkAmount = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BarcodeForkAmount" ] ) ; //多叉堆垛机的货叉数量
int BoxQuality = 0 ; // devicestates[tempdb2addr + 1]; //数量,只要是上报条码必须预留数量字节
int BarcodeLength = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BarcodeLength" ] ) ; //多叉堆垛机取货站台上报条码、周转箱叠箱、托盘码垛
int BarcodeReservedLength = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BarcodeReservedLength" ] ) ; //多叉堆垛机取货站台上报条码、周转箱叠箱、托盘码垛
if ( BarcodeReservedLength < BarcodeLength )
{
BarcodeReservedLength = BarcodeLength ;
}
int BarcodeTotalLength = BarcodeReservedLength * BoxQuality ;
int PalletBarcodeLength = Convert . ToInt32 ( dvsp [ 0 ] [ "F_PalletBarcodeLength" ] ) ; //电力纸箱码垛机器人专用\普通条码申请
int PalletBarcodeReservedLength = Convert . ToInt32 ( dvsp [ 0 ] [ "F_PalletBarcodeReservedLength" ] ) ; //电力纸箱码垛机器人专用\普通条码申请
if ( PalletBarcodeReservedLength < PalletBarcodeLength )
{
PalletBarcodeReservedLength = PalletBarcodeLength ;
}
StringBuilder incompleteBarcode = new StringBuilder ( ) ; // 1111111111111111.......
StringBuilder noneBarcode = new StringBuilder ( ) ; // \0\0\0\0..........
StringBuilder appbarcode = new StringBuilder ( ) ;
StringBuilder [ ] appbarArray = new StringBuilder [ BarcodeForkAmount ] ;
StringBuilder parameter = new StringBuilder ( ) ; //存放给管理上报的纸箱条码组
StringBuilder noreadbarcode = new StringBuilder ( "11111" ) ; //只判断前5位即可
int emptypallet = 0 ;
int enddeviceindex = Convert . ToInt32 ( dvsp [ 0 ] [ "F_TaskIndex" ] ) ; //存放码垛完成后的目标设备编号
#region 初始化接收条码
for ( int j = 1 ; j < = BarcodeLength ; j + + )
{
incompleteBarcode . Append ( "1" ) ; //PLC扫到残码,但是有货物,转换为字符'1'
noneBarcode . Append ( "0" ) ; //PLC没扫描,没货物,保留的空值0,转换为字符'\0'
}
for ( int j = 0 ; j < BarcodeForkAmount ; j + + )
{ //多叉堆垛机,在取货前上报条码格式:头+数量+条码//20140218
appbarArray [ j ] = new StringBuilder ( ASCIIEncoding . ASCII . GetString ( devicestates , tempdb2addr + 2 + j * BarcodeReservedLength , BarcodeReservedLength ) . Substring ( 0 , BarcodeLength ) ) ;
}
barcode . Clear ( ) ;
if ( PalletBarcodeLength > 0 ) //托盘条码
{
incompleteBarcode . Clear ( ) ; //20150103
noneBarcode . Clear ( ) ; //20150103
for ( int j = 2 ; j < = PalletBarcodeLength + 2 ; j + + )
{ //20150103
incompleteBarcode . Append ( "1" ) ; //PLC扫到残码,但是有货物,转换为字符'1'
noneBarcode . Append ( "0" ) ; //PLC没扫描,没货物,保留的空值0,转换为字符'\0'
}
//获得托盘条码值
//emptypallet=devicestates[tempdb2addr + 1];//托盘高度检测标志,0表示空托盘,1表示实托盘
for ( int j = 2 ; j < PalletBarcodeLength + 2 ; j + + ) //标志位+空、实托盘+条码值
{
if ( devicestates [ tempdb2addr + j ] = = 1 )
{
barcode . Append ( "1" ) ;
}
else if ( devicestates [ tempdb2addr + j ] = = 0 )
{
barcode . Append ( "0" ) ;
}
else
{
barcode . Append ( Convert . ToChar ( devicestates [ tempdb2addr + j ] ) . ToString ( ) . ToUpper ( ) ) ;
}
}
}
#region add by lyj 20171027
int heihgt = devicestates [ tempdb2addr + 7 ] ;
#endregion
if ( IsEquals ( devinfo . ReturnMessage , states , states . Length ) = = false )
{
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "读PLC条码" , devidx . ToString ( ) , "读标志1**条码:" + barcode . ToString ( ) . ToUpper ( ) ) ;
}
#endregion
//20130831richard
DateTime appdt = new DateTime ( ) ;
if ( dvsp [ 0 ] [ "F_Time" ] = = DBNull . Value )
{
appdt = DateTime . Now . AddSeconds ( - 1 0 ) ;
}
else
{
DateTime . TryParse ( dvsp [ 0 ] [ "F_Time" ] . ToString ( ) , out appdt ) ;
}
if ( dvsp [ 0 ] [ "F_BarCode" ] ! = DBNull . Value )
{
if ( ( appdt . AddSeconds ( 5 ) > DateTime . Now ) & & ( dvsp [ 0 ] [ "F_BarCode" ] . ToString ( ) = = barcode . ToString ( ) ) )
{
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_PLC_Ask SET F_BarCode = '{1}',F_Time='{2}' WHERE (F_DeviceIndex = {0}) " , devidx , barcode . ToString ( ) , DateTime . Now ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "PLC重复上报条码:" , devidx . ToString ( ) , ",站台:" + dcode + ",条码:" + barcode . ToString ( ) . ToUpper ( ) ) ;
break ;
}
} //20130831richard
switch ( dvsp [ 0 ] [ "F_Askkind" ] . ToString ( ) )
{
case "4" :
//普通条码申请任务
#region 普通条码申请任务
#region 扫到残码
//if (barcode.ToString() == incompleteBarcode.ToString())
//{//扫到残码
// RefreshMonitorEventArgs rmea;
// //if (dcode == 32634 || dcode == 42634)
// //{
// // //自动生成条码“9+dvsp[0]["F_BindingDevice"]+顺序号”
// // barcode.Clear();
// // barcode.Append(GetErrorBarcode(dcode, devidx, BarcodeLength));
// //}
// //else
// //{
// // int abst;
// // if (int.TryParse(dvsp[0]["F_Remark"].ToString(), out abst) == true)
// // {
// // if (IfExitDeviceBarcodeTask(dcode, barcode.ToString()) == false)
// // {
// // object[] ob = new object[17] { ccf.GetTempManageIdx(), 2, barcode.ToString(), 1, 2, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", dcode, dvsp[0]["F_Remark"].ToString(), "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND };
// // dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})", ob));
// // }
// // }
// // else
// // {
// // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper());
// // rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:向管理条码申请任务时,站台:" + dcode + ",扫到残缺条码!时间:" + DateTime.Now.ToString("u"));
// // OnRefreshMonitor(rmea);
// // }
// // wv[0].Clear();
// // wv[0].Append("2");
// // sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
// // sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
// // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode<>'{1}'", devidx, barcode.ToString(), DateTime.Now));
// // continue;//20160120
// //}
//}
#endregion
if ( ( barcode . ToString ( ) = = noneBarcode . ToString ( ) ) | | ( barcode . ToString ( ) = = incompleteBarcode . ToString ( ) ) | | ( string . IsNullOrEmpty ( barcode . ToString ( ) . Replace ( "\0" , "" ) ) ) )
{
barcode . Clear ( ) ;
//barcode.Append(GetErrorBarcode(F_NearApplyStation, devidx, NearBarcodeLength));
barcode . Append ( incompleteBarcode . ToString ( ) ) ;
}
#region 向管理申请任务
dvbc = dboMan . ExceSQL ( string . Format ( "SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')" , dcode , barcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count < = 0 )
{
//dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%'", barcode)).Tables[0].DefaultView;
//if (dvbc.Count <= 0)
//{
//dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'", barcode)).Tables[0].DefaultView;
//if (dvbc.Count <= 0)
//{
StringBuilder dtime = new StringBuilder ( DateTime . Now . ToString ( "u" ) ) ;
dtime . Remove ( dtime . Length - 1 , 1 ) ;
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
//object[] ob = new object[9] { apptype, dcode, barcode, 0, dtime, "", warehouse.ToString(), appid, BoxQuality };
object [ ] ob = new object [ 7 ] { apptype , dcode , barcode , 0 , dtime , "" , warehouse . ToString ( ) } ;
try
{
//dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID, CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE,BOX_QUANTITY)VALUES ({7},{0},'{1}','{2}',{3},'{4}','{5}','{6}',{8})", ob));
dboMan . ExecuteSql ( string . Format ( "INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}')" , ob ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "向管理条码申请任务:" , devidx . ToString ( ) , ",站台:" + dcode + ",条码:" + barcode . ToString ( ) . ToUpper ( ) + ",申请类型:" + apptype . ToString ( ) ) ; //20140218
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "向管理申请入库任务时发生错误:" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
continue ; //20140218
}
//}
//}
}
#endregion
#endregion
break ;
case "7" :
//叠盘机前条码扫描器申请入库任务
break ;
case "13" :
//条码报告完成,考虑第一个扫描器没扫到,但是第二个扫描器却扫到
//没扫到或者有码无对应任务的改道异常口
#region 条码报告完成
//if (barcode.ToString() == incompleteBarcode.ToString())
//{//扫到残码
// #region 是否具备申请任务扫码条件
// int[] statess;
// statess = CStaticClass.GetDeviceState(Convert.ToInt32(dvsp[0]["F_BindingDevice"]));
// if (statess != null)
// {
// if (statess[1] != 0)
// {
// break;
// }
// }
// else
// {
// break;
// }
// RefreshMonitorEventArgs rmea;
// char[] dd = new char[1] { '.' };
// string[] DS = ccf.GetBindingDeviceIndexOut(Convert.ToInt32(dvsp[0]["F_BindingDevice"])).Split(dd);
// int devicebyte = 0; int devbit = 0;
// if (DS.GetLength(0) > 1)
// {
// int.TryParse(DS[0], out devicebyte);
// int.TryParse(DS[1], out devbit);
// if (CStaticClass.GetDevicePhotoelectric(devicebyte, devbit) != 1)
// {
// statess = null;
// break;
// }
// }
// else
// {
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时:", devidx.ToString(), ",站台:" + dvsp[0]["F_BindingDevice"].ToString() + ",出口开关没填写记录!");
// rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:条码扫描器申请入库任务:" + dvsp[0]["F_BindingDevice"].ToString() + ",出口开关没填写记录!");
// OnRefreshMonitor(rmea);
// break;
// }
// #endregion
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper());
// rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:向管理条码申请任务时,站台:" + dcode + ",扫到残缺条码!时间:" + DateTime.Now.ToString("u"));
// OnRefreshMonitor(rmea);
// int abst;
// if (int.TryParse(dvsp[0]["F_Remark"].ToString(), out abst) == true)
// {
// if (IfExitDeviceBarcodeTask(dcode, barcode.ToString()) == false)
// {
// object[] ob = new object[17] { ccf.GetTempManageIdx(), 2, barcode.ToString(), 1, 2, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", dcode, dvsp[0]["F_Remark"].ToString(), "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND };
// dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})", ob));
// }
// }
//}
//else
//{
BarcodeComplete ( devidx , dcode , barcode . ToString ( ) , dvsp [ 0 ] [ "F_Remark" ] . ToString ( ) ) ;
//}
#endregion
break ;
case "14" :
//PLC控制机器人码垛,成功后上报数量、托盘条码和所有表“设备”条码
#region PLC控制机器人码垛,成功后上报数量、托盘条码和所有表“设备”条码,申请码垛任务
//if (barcode.ToString().Length > 0)
{
//
#region 测试时生成到22012的搬运任务
string lanes = ccf . GetTestInLaneway ( ) ;
if ( lanes ! = "" )
{
// continue;//没有开启入库测试的巷道
string dtimes = DateTime . Now . ToString ( "u" ) ; //20101028
dtimes = dtimes . Substring ( 0 , dtimes . Length - 1 ) ; //20101028
int AutoManageIdx = ccf . GetTempManageIdx ( ) ; //调度任务索引
string stack = "0" ; //堆垛机FSTACK
string barcodes = barcode . ToString ( ) ; //托盘条码
int controltype = 4 ; //移库
string sqlstr = string . Format ( "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer) values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15})" , AutoManageIdx , barcodes , controltype , 2 , 1 , dcode , "" , 1 , enddeviceindex , "" , "0" , stack , "-" , dtimes , 0 , 0 ) ;
dbo . ExceSQL ( sqlstr ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "码垛完成生成移库任务" , dcode . ToString ( ) , AutoManageIdx . ToString ( ) ) ;
//continue;
}
#endregion
#region 向管理申请码盘后入库任务
if ( apptype < 1 0 )
{
//模拟上报管理系统数量
if ( BoxQuality = = 0 )
{
BoxQuality = 4 ;
}
//parameter.Remove(0,parameter.Length);
//for (int i=1;i<=BoxQuality;i++)
//{
// parameter.Append(i);
// if (i < BoxQuality)
// {
// parameter.Append(";");
// }
//}
#region 判断是否有已经存在的任务
/ *
//此处交给管理系统判断,否则码垛不好处理
if ( barcode . ToString ( ) . IndexOf ( noreadbarcode . ToString ( ) ) < 0 ) //在读取到条码的情况下才判断,11111不判断
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"SELECT FPALLETBARCODE,FSTARTDEVICE FROM T_Manage_Task where FSTARTDEVICE=" )
. Append ( dcode )
. Append ( " AND FPALLETBARCODE='" )
. Append ( barcode )
. Append ( "'" ) ;
//20091128
dvbc = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" ,
dcode . ToString ( ) + "码盘位,托盘条码:" + barcode +
",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.DealWithDeviceState时" +
dcode . ToString ( ) + "码盘位,托盘条码:" + barcode +
",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ;
continue ;
}
//20090922
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"SELECT STOCK_BARCODE,START_DEVICE_CODE FROM IO_CONTROL where START_DEVICE_CODE=" )
. Append ( dcode )
. Append ( " AND STOCK_BARCODE='" )
. Append ( barcode )
. Append ( "'" ) ;
dvbc = dboMan . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" ,
dcode . ToString ( ) + "码盘位,托盘条码:" + barcode +
",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.DealWithDeviceState时" +
dcode . ToString ( ) + "码盘位,托盘条码:" + barcode +
",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ;
continue ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS=0 and DEVICE_CODE='" )
. Append ( dcode )
. Append ( "' and (STOCK_BARCODE = '" )
. Append ( barcode )
. Append ( "')" ) ;
dvbc = dboMan . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" ,
string . Format (
"SControlMonitor.DealWithDeviceState时向管理申请码垛入库任务时,申请的任务条码:{0}已经存在!" ,
barcode . ToString ( ) ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext =
string . Format (
"SControlMonitor.DealWithDeviceState时向管理申请码垛入库任务时,申请的任务条码:{0}已经存在!" ,
barcode . ToString ( ) ) ;
continue ;
}
}
* /
#endregion
//向管理申请入库任务
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);
//CONTROL_APPLY_ID
object [ ] ob = new object [ 8 ]
{
apptype , warehouse . ToString ( ) , dcode , barcode , 0 , dtime , BoxQuality , parameter . ToString ( )
} ;
sql . Remove ( 0 , sql . Length ) ;
//string s4s = string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARAMETER)VALUES ({0},'{1}','{2}','{3}',{4},'{5}',{6},'{7}')", ob);
// apptype, "warehouse.ToString()", "dcode", "barcode",0, "dtime", BoxQuality," parameter.ToString()"
sql . Append ( string . Format ( "INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARAMETER)VALUES ({0},'{1}','{2}','{3}',{4},'{5}',{6},'{7}')" , ob ) ) ;
//sql.Append(
// "INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARAMETER)VALUES ")
// .Append(
// "(")
// .Append(apptype)
// .Append(",'")
// .Append(warehouse.ToString())
// .Append("','")
// .Append(dcode)
// .Append("','")
// .Append(barcode)
// .Append("',0,'")
// .Append(dtime)
// .Append("',")
// .Append(BoxQuality)
// .Append(",'")
// .Append(parameter.ToString())
// .Append("')"); //20130510
try
{
dboMan . ExceSQL ( sql . ToString ( ) ) ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_FirstProject = '" )
. Append ( parameter . ToString ( ) )
. Append (
"',F_Remark='' WHERE (F_Askkind = 14) AND (F_BindingDevice = " )
. Append ( dvsp [ 0 ] [ "F_BindingDevice" ] )
. Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" ,
"向管理申请码垛入库任务:" , devidx . ToString ( ) ,
",站台:" + dcode + ",数量:" + BoxQuality . ToString ( ) + ",托盘条码:" + barcode . ToString ( ) . ToUpper ( ) +
",垛条码:" + parameter . ToString ( ) ) ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" ,
"向管理申请码垛入库任务:" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "向管理申请码垛入库任务:" + ex . StackTrace ;
continue ; //20140218
}
}
#endregion
}
#endregion
break ;
case "15" :
//多叉顶升机条码组申请入库//20140218
//#region 多叉向管理申请任务
//StringBuilder devbind = new StringBuilder();
//StringBuilder devbinds = new StringBuilder();
//parameter.Clear();
//for (int i = 0; i < BarcodeForkAmount; i++)
//{
// bool ifexit = false;
// if (appbarArray[i].ToString() != noneBarcode.ToString())
// {
// devbind.Clear();
// devbind.Append(dcode.ToString() + ((i + 1).ToString()));
// devbinds.Append("|").Append(devbind);
// if (appbarArray[i].ToString() == incompleteBarcode.ToString())//扫到残码,但是有货物
// {//自动生成条码“9+dvsp[0]["F_BindingDevice"]+顺序号”
// parameter.Append("|").Append(GetErrorBarcode(dcode, devidx, BarcodeLength));
// }
// else
// {
// parameter.Append("|").Append(appbarArray[i].ToString());
// }
// dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')", devbind, appbarArray[i].ToString())).Tables[0].DefaultView;
// if (dvbc.Count > 0)
// {
// ifexit = true;
// }
// dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%'", appbarArray[i].ToString())).Tables[0].DefaultView;
// if (dvbc.Count > 0)
// {
// ifexit = true;
// }
// dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'", appbarArray[i].ToString())).Tables[0].DefaultView;
// if (dvbc.Count > 0)
// {
// ifexit = true;
// }
// }
// if (ifexit == true)
// {
// RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:条码" + appbarArray[i].ToString() + "对应的管理任务已经存在!");
// OnRefreshMonitor(rmea);
// }
//}
//if (devbinds.ToString().Length > 1)
//{
// devbinds = new StringBuilder(devbinds.ToString().Substring(1));
// parameter = new StringBuilder(parameter.ToString().Substring(1));
// barcode.Clear();//记录堆垛机最大叉的箱条码
// barcode.Append(appbarArray[BarcodeForkAmount - 1].ToString());
// string dtime = DateTime.Now.ToString("u");
// dtime = dtime.Substring(0, dtime.Length - 1);
// int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
// object[] ob = new object[8] { apptype, devbinds.ToString(), parameter.ToString(), 0, dtime, "", warehouse.ToString(), appid };
// try
// {
// dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({7},{0},'{1}','{2}',{3},'{4}','{5}','{6}')", ob));
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + parameter.ToString().ToUpper());//20140218
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE T_Base_PLC_Ask SET F_FirstProject = '").Append(parameter.ToString()).Append(" WHERE F_DeviceIndex = ").Append(devidx);
// dbo.ExecuteSql(sql.ToString());
// }
// catch (Exception ex)
// {
// RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message);
// OnRefreshMonitor(rmea);
// continue;//20140218
// }
//}
//#endregion
break ;
case "16" :
#region 16,PLC入库扫码申请分道
//异步调用管理系统的服务,true:可以入库;false剔出
//object asyncState = new object();
//AsyncCallback cb = new AsyncCallback(FactorizeCallback);
// IAsyncResult ar = g_manageService.BeginManageInStorageCheckout(barcode.ToString(), dcode.ToString(), cb, asyncState);
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "调用管理分道时:" , dcode . ToString ( ) , ",条码:" + barcode ) ;
//g_manageService.ManageInStorageCheckoutAsync(barcode.ToString(), dcode.ToString());
#endregion
break ;
case "17" :
#region 叠箱机上报个数和箱条码
//if (parameter.ToString().Length > 0)
{
#region 测试时生成到22012的搬运任务
string lanes = ccf . GetTestInLaneway ( ) ;
//if (lanes != "")
{
barcode . Append ( BoxQuality . ToString ( ) ) ; //将空托盘的数量付给条码
string dtimes = DateTime . Now . ToString ( "u" ) ; //20101028
dtimes = dtimes . Substring ( 0 , dtimes . Length - 1 ) ; //20101028
int AutoManageIdx = ccf . GetTempManageIdx ( ) ; //调度任务索引
string stack = "0" ; //堆垛机FSTACK
string barcodes = string . Format ( "{0}EmptyPallet" , BoxQuality ) ; //托盘条码
int controltype = 4 ; //移库
string sqlstr = string . Format ( "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer) values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15})" , AutoManageIdx , barcodes , controltype , 2 , 1 , dcode , "" , 1 , enddeviceindex , "" , "0" , stack , "-" , dtimes , 0 , 0 ) ;
dbo . ExceSQL ( sqlstr ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "叠盘完成生成站台间移库任务" , dcode . ToString ( ) , AutoManageIdx . ToString ( ) ) ;
}
#endregion
#region 向管理申请叠箱后入库任务
/ *
//向管理申请入库任务
int count = devicestates [ tempdb2addr + 1 ] ; //叠盘机上的数量
string dtimes2 = DateTime . Now . ToString ( "u" ) ;
dtimes2 = dtimes2 . Substring ( 0 , dtimes2 . Length - 1 ) ;
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,BOX_QUANTITY,CONTROL_APPLY_PARAMETER)VALUES " ) . Append (
"(" ) . Append ( apptype ) . Append ( ",'" ) . Append ( warehouse . ToString ( ) ) . Append ( "','" ) . Append ( dcode ) . Append ( "','" ) . Append ( barcode ) . Append ( "',0,'" ) . Append ( dtimes2 ) . Append ( "'," ) . Append ( BoxQuality ) . Append ( ",'" ) . Append ( parameter . ToString ( ) ) . Append ( "')" ) ; //20130510
try
{
dboMan . ExceSQL ( sql . ToString ( ) ) ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_FirstProject = '" ) . Append ( count ) . Append ( "',F_Remark='' WHERE (F_Askkind = 17) AND (F_BindingDevice = " ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "向管理申请叠箱入库任务" , devidx . ToString ( ) , dcode + "条码" + barcode . ToString ( ) . ToUpper ( ) + "垛条码:" + parameter . ToString ( ) ) ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "向管理申请叠箱入库任务:" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "向管理申请叠箱入库任务:" + ex . StackTrace ;
continue ; //20140218
}
* /
#endregion
}
#endregion
break ;
default :
//无类型,条码比对或者记录条码
break ;
}
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( devidx ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写条码应答" , devidx . ToString ( ) , "写标志2**源条码:" + barcode . ToString ( ) . ToUpper ( ) ) ;
//dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode<>'{1}'", devidx, barcode.ToString(), DateTime.Now));
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}',F_TempFirstProject='{3}' WHERE (F_DeviceIndex = {0}) " , devidx , barcode . ToString ( ) , DateTime . Now , emptypallet ) ) ;
}
break ;
#endregion
#region 现场触摸屏
case 2 2 :
#region 立库触摸屏
if ( devicestates [ tempdb2addr + 0 ] ! = 1 ) continue ;
//申请任务变更
bcz = 0 ;
askOrder = devicestates [ tempdb2addr + 1 ] ; //命令字
askDevice = ( devicestates [ tempdb2addr + 2 ] < < 8 ) + devicestates [ tempdb2addr + 3 ] ; //设备索引
taskindex = ( devicestates [ tempdb2addr + 4 ] < < 8 ) + devicestates [ tempdb2addr + 5 ] ; //任务号
askDevinfo = Model . CGetInfo . GetDeviceInfo ( askDevice ) ;
if ( askDevinfo = = null )
{
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "37" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "37申请的设备号不存在" ) ;
break ;
}
barcode . Clear ( ) ;
for ( int j = 6 ; j < 1 3 ; j + + )
{
bcz = bcz + devicestates [ tempdb2addr + j ] ;
barcode . Append ( Convert . ToChar ( devicestates [ tempdb2addr + j ] ) . ToString ( ) . ToUpper ( ) ) ;
}
states = new int [ 1 3 ] ;
Array . Copy ( devicestates , tempdb2addr , states , 0 , 1 3 ) ;
if ( IsEquals ( devinfo . ReturnMessage , states , 1 3 ) = = false )
{
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**触摸屏设备索引" + devidx ) . Append ( "**命令字" + askOrder )
. Append ( "**申请的设备索引" + askDevice ) . Append ( "**申请的任务号" + taskindex ) . Append ( "**申请的条码" + barcode ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到现场控制触摸屏申请信息" , devidx . ToString ( ) , sss . ToString ( ) ) ;
}
#region 申请重发当前设备指令(1)
if ( askOrder = = 1 ) //命令字
{
if ( taskindex = = 0 ) //无任务号
{
if ( bcz = = 0 ) //无条码号
{
//32申请的任务号和条形码都不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "32" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "32申请的任务号和条形码都不存在" ) ;
break ;
}
else //有条码号
{
#region 有条码号
if ( askDevinfo . UseCommonDB = = "1" )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '" ) . Append (
barcode ) . Append ( "' order by F_MonitorIndex asc" ) ;
}
else
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '" ) . Append (
barcode ) . Append ( "' order by F_MonitorIndex asc" ) ;
}
//20100108
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( askDevinfo . UseCommonDB = = "1" )
{
//20090915
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=" ) . Append ( askDevice ) . Append ( " where F_MonitorIndex=" ) . Append ( dv [ 0 ] [ "F_MonitorIndex" ] ) . Append ( "" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
ResetSendorder ( askDevice , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) , GetRouteIDsub ( askDevice ) , Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "4" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//35申请的设备号和条形码不匹配
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "35" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "35申请的设备号和条形码不匹配" ) ;
break ;
}
#endregion
}
}
else //有任务号
{
#region 有任务号
if ( askDevinfo . UseCommonDB = = "1" )
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" ) . Append (
taskindex ) . Append ( "' order by F_MonitorIndex asc" ) ;
}
else
{
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" ) . Append (
taskindex ) . Append ( "' order by F_MonitorIndex asc" ) ;
}
//20101008
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( askDevinfo . UseCommonDB = = "1" )
{
//20090915
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=" ) . Append ( askDevice ) . Append ( " where F_MonitorIndex=" ) . Append ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
ResetSendorder ( askDevice , taskindex , GetRouteIDsub ( askDevice ) , Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "4" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//36申请的设备号和任务号不匹配
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "36" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "36申请的设备号和任务号不匹配" ) ;
break ;
}
#endregion
}
}
#endregion
#region 申请修改当前设备所执行任务目标位置(2)
else if ( askOrder = = 2 ) //命令字
{
break ;
}
#endregion
#region 上报完成(3)
else if ( askOrder = = 3 ) //命令字
{
if ( taskindex = = 0 ) //无任务号
{
if ( bcz = = 0 ) //无条码号
{
//32申请的任务号和条形码都不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "32" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "32申请的任务号和条形码都不存在" ) ;
break ;
}
else //有条码号
{
#region 有条码号
//20100108
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '" ) . Append (
barcode ) . Append ( "' order by F_MonitorIndex asc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
AssociateComplete ( askDevice , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//30申请的条码号不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "30" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "30申请的条码号不存在" ) ;
break ;
}
#endregion
}
}
else
{
#region 有任务号
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" ) . Append (
taskindex ) . Append ( "' order by F_MonitorIndex asc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
AssociateComplete ( askDevice , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//31申请的任务号不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "31" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "31申请的任务号不存在" ) ;
break ;
}
#endregion
}
}
#endregion
#region 删除当前设备所执行的任务(4)(托盘拿走)
else if ( askOrder = = 4 ) //命令字
{
if ( taskindex = = 0 ) //无任务号
{
if ( bcz = = 0 ) //无条码号
{
//32申请的任务号和条形码都不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "32" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "32申请的任务号和条形码都不存在" ) ;
break ;
}
else //有条码号
{
#region 有条码号
//20100108
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '" ) . Append (
barcode ) . Append ( "' order by F_MonitorIndex asc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
DeleteDeviceTask ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "3" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//30申请的条码号不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "30" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "30申请的条码号不存在" ) ;
break ;
}
#endregion
}
}
else
{ //20090915
#region 有任务号
//20100108
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ) . Append (
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" ) . Append (
taskindex ) . Append ( "' order by F_MonitorIndex asc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
DeleteDeviceTask ( Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "3" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//31申请的任务号不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "31" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "31申请的任务号不存在" ) ;
break ;
}
#endregion
}
}
#endregion
break ;
#endregion
case 3 2 :
#region 高端触摸屏
if ( devicestates [ tempdb2addr + 0 ] ! = 1 ) continue ;
//20120207申请任务变更
bcz = 0 ;
askOrder = devicestates [ tempdb2addr + 1 ] ; //命令字
askDevice = ( devicestates [ tempdb2addr + 2 ] < < 3 2 ) + ( devicestates [ tempdb2addr + 3 ] < < 1 6 ) + ( devicestates [ tempdb2addr + 4 ] < < 8 ) + devicestates [ tempdb2addr + 5 ] ; //设备索引
askDevinfo = Model . CGetInfo . GetDeviceInfo ( askDevice ) ;
if ( askDevinfo = = null )
{
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "34" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "34申请的设备号不存在" ) ;
break ;
}
barcode . Clear ( ) ;
for ( int j = 8 ; j < = 1 3 ; j + + )
{
bcz = bcz + devicestates [ tempdb2addr + j ] ;
barcode . Append ( Convert . ToChar ( devicestates [ tempdb2addr + j ] ) . ToString ( ) . ToUpper ( ) ) ;
}
states = new int [ 1 4 ] ;
Array . Copy ( devicestates , tempdb2addr , states , 0 , 1 2 ) ;
if ( IsEquals ( devinfo . ReturnMessage , states , 1 4 ) = = false )
{
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**触摸屏设备:" + devinfo . DeviceName ) . Append ( "**命令字" + askOrder )
. Append ( "**申请的设备索引" + askDevice ) . Append ( "**申请的条码" + barcode ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到现场控制触摸屏申请信息" , devidx . ToString ( ) , sss . ToString ( ) ) ;
}
#region 申请重发当前设备指令(1)
if ( askOrder = = 1 ) //命令字
{
if ( bcz = = 0 ) //无条码号
{
//30申请条形码不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "30" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "30申请的条形码不存在" ) ;
break ;
}
else //有条码号
{
#region 有条码号
int asktaskindex = GetMonitorAskTaskIndexFromBarCode ( barcode ) ;
if ( asktaskindex > 0 )
{
sql . Remove ( 0 , sql . Length ) ;
//20120220F_NumParam1改为askDevice,F_NumParam2改为触摸屏设备的DB1,F_SendFlag=2
sql . Append ( "update T_Monitor_Task set F_SendFlag=2,F_Status=0,F_AheadDetect='',F_NumParam1=" ) . Append ( askDevice ) . Append ( ",F_NumParam2=" ) . Append ( devinfo . Dbw1Address ) . Append ( " where F_MonitorIndex=" ) . Append ( asktaskindex ) . Append ( "" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "4" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "4申请重发应答" ) ;
}
else
{
//33申请的设备号和条形码不匹配
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "33" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "33申请的设备号和条形码不匹配" ) ;
break ;
}
#endregion
}
}
#endregion
#region 上报完成(3)
else if ( askOrder = = 3 ) //命令字
{
if ( bcz = = 0 ) //无条码号
{
//30申请的条形码不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "30" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "30申请的条形码不存在" ) ;
break ;
}
else //有条码号
{
#region 有条码号
int asktaskindex = GetMonitorAskTaskIndexFromBarCode ( barcode ) ;
if ( asktaskindex > 0 )
{
AssociateComplete ( askDevice , asktaskindex ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
else
{
//33申请的条码号不存在
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "33" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "发送现场控制触摸屏申请的反馈信息" , devidx . ToString ( ) , "33申请的设备号和条码号不匹配" ) ;
break ;
}
#endregion
}
}
#endregion
break ;
#endregion
#endregion
#region 高端设备
case 3 1 : //工位输送机
barcode . Remove ( 0 , barcode . Length ) ;
for ( int i = 2 ; i < = 7 ; i + + )
{
barcode . Append ( Convert . ToChar ( devicestates [ tempdb2addr + i ] ) ) ;
}
#region 判断是否满足条码的正则表达式
if ( ccf . GetCodeCheck ( barcode . ToString ( ) ) = = false ) continue ;
#endregion
taskindex = GetMonitorRunTaskIndexFromBarCode ( barcode ) ;
states = new int [ 8 ] ;
Array . Copy ( devicestates , tempdb2addr , states , 0 , 8 ) ;
if ( IsEquals ( devinfo . ReturnMessage , states , 8 ) = = false )
{
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**条码:" ) . Append ( barcode ) . Append ( "**读标志" + devicestates [ tempdb2addr + 0 ] ) . Append ( "**状态" + state ) . Append ( "**任务号" + taskindex ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到输送机机状态" , devidx . ToString ( ) , sss . ToString ( ) ) ;
}
//if (devicestates[tempdb2addr + 0] != 1) continue;
if ( ( state < = 1 ) | | ( taskindex < = 0 ) )
{
continue ;
}
//int order = 0;
//string datetime = GetMonitorTaskStartTime(taskindex,out order );
//if ((datetime != "-") && (order==6))
//{
// if (Convert.ToDateTime(datetime.Substring(0, 19)).AddSeconds(8) > DateTime.Now)
// {//20120328
// break;
// }
//}
if ( state = = 2 )
{ //20120405complete
cgs . GetKindDeviceState ( GetMonitorTaskIndexFromBarCode ( barcode , devinfo ) , devidx , state ) ;
}
else
{ //20120405error
cgs . GetKindDeviceState ( taskindex , devidx , state ) ;
}
break ;
#endregion
#region 到抓取位的两组一号工程码信息
case 2 1 :
#region 获取一号工程码信息F_Askkind=8
//F_BindingDevice 绑定设备号+“7”代表存放机器人抓取位的两箱一号工程码的“设备”
//F_BindingDevice 绑定设备号+“8”代表存放码垛位码垛信息的“设备”
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_DeviceIndex, F_FirstProject,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice,F_DoubleFirstProject FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_BindingDevice = " ) . Append ( devidx . ToString ( ) . Substring ( 0 , devidx . ToString ( ) . Length - 1 ) ) . Append ( ")" ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
barcode . Clear ( ) ;
for ( int j = 0 ; j < = 3 2 ; j + + )
{
barcode . Append ( devicestates [ tempdb2addr + j ] . ToString ( ) . ToUpper ( ) ) ;
}
string bcp = barcode . ToString ( ) . Substring ( 1 ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "到抓取位的两组一号工程码:" , devidx . ToString ( ) , bcp ) ;
string bar1 = "" , bar2 = "" ;
string ExceptionCode = "0" ;
bar1 = bcp . Substring ( 0 , 1 6 ) ;
bar2 = bcp . Substring ( 1 6 , 1 6 ) ;
if ( ( bar1 = = "0000000000000000" ) | | ( bar1 = = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" ) )
{
if ( dvsp [ 0 ] [ "F_HaveFirstProject" ] . ToString ( ) = = "1" )
{
ExceptionCode = "800" ;
}
else
{
ExceptionCode = "0" ;
}
bcp = "" ;
}
else
{
if ( dvsp [ 0 ] [ "F_HaveFirstProject" ] . ToString ( ) = = "1" )
{
ExceptionCode = "0" ;
}
else
{
ExceptionCode = "800" ;
}
bcp = bar1 ;
}
if ( ( bar2 ! = "0000000000000000" ) & & ( bar2 ! = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" ) )
{
if ( dvsp [ 0 ] [ "F_HaveFirstProject" ] . ToString ( ) ! = "1" )
{
ExceptionCode = "800" ;
}
else
{
ExceptionCode = "0" ;
}
bcp = bcp + ";" + bar2 ;
}
if ( bcp . Length > = 1 )
{
if ( bcp . Substring ( 0 , 1 ) = = ";" )
{
if ( bcp . Length > 1 )
{
bcp = bcp . Substring ( 1 ) ;
}
else
{
bcp = "" ;
}
}
}
if ( ExceptionCode = = "800" )
{
//判断是否为无码烟,是无码烟不报告异常码,否则报告异常码
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_Remark='" ) . Append ( ExceptionCode ) . Append ( "' WHERE (F_Askkind = 8) AND (F_BindingDevice = " ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
//两箱到机器人抓取位,未报告抓取完成的两组一号工程码临时保存区
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_DoubleFirstProject = '" ) . Append ( bcp ) . Append ( "' WHERE (F_Askkind = 8) AND (F_BindingDevice = " ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
}
#endregion
break ;
#endregion
#region 烟厂成品机器人码垛信息(抓取完成、放完成、码垛完成)
case 2 4 :
#region 成品码垛结束,向管理申请入库任务
//把码盘位输送机,托盘条码,一号工程码信息,码垛数量整合生成向管理申请入库任务
//清空托盘条码、一号工程码信息、异常码信息F_Remark
//设备号:绑定设备号+“6”代表存放码垛位托盘条码的“设备”;绑定设备号+“7”代表存放机器人抓取位的两箱一号工程码的“设备”
//绑定设备号+“8”代表存放码垛位码垛信息的“设备”
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_BarCode, F_DeviceIndex, F_FirstProject,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice,F_DoubleFirstProject FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_DeviceIndex = " ) . Append ( devidx ) . Append ( ")" ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
//[1]机器人动作:1-取货完成;2-放货完成;3-托盘码垛完成
//[2]托盘码垛数量
if ( states [ 1 ] = = 1 ) //取货完成
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "机器人码垛信息" , devidx . ToString ( ) , devidx . ToString ( ) + "取货完成" ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_TempFirstProject = F_DoubleFirstProject WHERE (F_Askkind = 8) AND (F_DeviceIndex = " ) . Append ( devidx ) . Append ( ") and (F_DoubleFirstProject<>'')" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
else if ( states [ 1 ] = = 2 ) //放货完成
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "机器人码垛信息" , devidx . ToString ( ) , devidx . ToString ( ) + "放货完成" ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_FirstProject =F_FirstProject).Append(';').Append( F_TempFirstProject WHERE (F_Askkind = 8) AND (F_DeviceIndex = " ) . Append ( devidx ) . Append ( ") and (F_TempFirstProject<>'')" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_TempFirstProject='' WHERE (F_Askkind = 8) AND (F_DeviceIndex = " ) . Append ( devidx ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
else if ( states [ 1 ] = = 3 ) //码盘结束
{
#region 码盘结束
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "机器人码垛信息" , devidx . ToString ( ) , devidx . ToString ( ) + "码盘结束" ) ;
//读取托盘条码;
barcode . Clear ( ) ;
barcode . Append ( dvsp [ 0 ] [ "F_BarCode" ] . ToString ( ) ) ;
if ( ( barcode = = null ) | | ( barcode . ToString ( ) = = "\0\0\0\0\0\0\0\0\0\0" ) )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.DealWithDeviceState时只读到码盘结束,但没读到对应的托盘条码信息!发生时间:" + DateTime . Now . ToString ( "u" ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.DealWithDeviceState时只读到码盘结束,但没读到对应的托盘条码信息!发生时间:" + DateTime . Now . ToString ( "u" ) ;
continue ;
}
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT FPALLETBARCODE,FSTARTDEVICE FROM T_Manage_Task where FSTARTDEVICE=" ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( " AND FPALLETBARCODE='" ) . Append ( barcode ) . Append ( "'" ) ;
//20091128
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , dvsp [ 0 ] [ "F_BindingDevice" ] . ToString ( ) + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.DealWithDeviceState时" + dvsp [ 0 ] [ "F_BindingDevice" ] . ToString ( ) + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ;
continue ;
}
//20090922
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT STOCK_BARCODE,START_DEVICE_CODE FROM IO_CONTROL where START_DEVICE_CODE=" ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( " AND STOCK_BARCODE='" ) . Append ( barcode ) . Append ( "'" ) ;
dvsp = dboMan . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , dvsp [ 0 ] [ "F_BindingDevice" ] . ToString ( ) + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.DealWithDeviceState时" + dvsp [ 0 ] [ "F_BindingDevice" ] . ToString ( ) + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime . Now . ToString ( "u" ) ;
continue ;
}
//一号工程码信息
string FirstProject = "" ; string ExceptionCode = "0" ; string BoxBarcode = "" ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_DeviceIndex, F_FirstProject,F_Remark,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_BindingDevice = " ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( ")" ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
BoxBarcode = dvsp [ 0 ] [ "F_BoxBarcode" ] . ToString ( ) ;
FirstProject = dvsp [ 0 ] [ "F_FirstProject" ] . ToString ( ) ;
if ( FirstProject . Length > 0 )
{
if ( FirstProject . Substring ( 0 , 1 ) = = ";" )
{
if ( FirstProject . Length > 1 )
{
FirstProject = FirstProject . Substring ( 1 ) ;
}
}
}
ExceptionCode = dvsp [ 0 ] [ "F_Remark" ] . ToString ( ) ;
}
int dcode = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BindingDevice" ] ) ;
#region 向管理申请码盘后入库任务
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS=0 and DEVICE_CODE='" ) . Append ( dcode ) . Append ( "' and (STOCK_BARCODE = '" ) . Append ( barcode ) . Append ( "')" ) ;
dvbc = dboMan . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.DealWithDeviceState时向管理申请入库任务时,申请的任务条码已经存在!" ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.DealWithDeviceState时向管理申请入库任务时,申请的任务条码已经存在!" ;
continue ;
}
//向管理申请入库任务
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
//20101108CONTROL_APPLY_ID," + fid + ",
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES " ) . Append (
"(1,'" ) . Append ( dcode ) . Append ( "','" ) . Append ( barcode ) . Append ( "',0,'" ) . Append ( dtime ) . Append ( "','" ) . Append ( BoxBarcode ) . Append ( ";" ) . Append ( FirstProject ) . Append ( ";" ) . Append ( states [ 2 ] . ToString ( ) ) . Append ( ";" ) . Append ( ExceptionCode ) . Append ( ";1" ) . Append ( "')" ) ; //;
try
{
dboMan . ExceSQL ( sql . ToString ( ) ) ;
//20091128
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_FirstProject = '',F_Remark='' WHERE (F_Askkind = 8) AND (F_BindingDevice = " ) . Append ( dvsp [ 0 ] [ "F_BindingDevice" ] ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "向管理申请入库任务:" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "向管理申请入库任务:" + ex . Message ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
continue ;
}
#endregion
#region 设置码垛通道
DataView md = dboMan . ExceSQL ( "select * from v_fr_routwaysetting" ) . Tables [ 0 ] . DefaultView ;
for ( int a = 0 ; a < md . Count ; a + + )
{
string boxcode = "" ;
if ( md [ a ] [ "fgoodscode" ] = = DBNull . Value )
{
boxcode = "0000000000000" ;
}
else
{
boxcode = md [ a ] [ "fgoodscode" ] . ToString ( ) ;
}
int devbind = Convert . ToInt32 ( md [ a ] [ "froutwayid" ] ) ;
string HaveFirstProject = md [ a ] [ "fbarcodeflag" ] . ToString ( ) ;
bool IfHaveFirstProject = false ;
if ( HaveFirstProject = = "1" )
{
IfHaveFirstProject = true ;
}
else
{
IfHaveFirstProject = false ;
}
for ( int j = 0 ; j < = 1 2 ; j + + )
{
if ( boxcode . Length < 1 3 )
{
boxcode + = "0" ;
}
}
int devcount = 2 8 ;
if ( md [ a ] [ "v_fullpalletqty" ] ! = DBNull . Value )
{
devcount = Convert . ToInt32 ( md [ a ] [ "v_fullpalletqty" ] ) ;
}
int dev = Convert . ToInt32 ( md [ a ] [ "froutwayid" ] . ToString ( ) + "11" ) ;
//设置PLC码垛通道(froutwayid:输送机设备索引 fgoodscode:烟箱码 fbarcodeflag :有无一号工程码标识);5244人工码垛位通道
sdo = CommModeCreate . CreateSendDeviceOrder ( dev ) ;
sdo . SendDeviceOrder ( dev , boxcode , IfHaveFirstProject , false , devcount ) ;
//改写T_Base_PLC_Ask表(F_BindingDevice:输送机设备索引 F_BoxBarcode:烟箱码 F_HaveFirstProject :有无一号工程码标识)
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "UPDATE T_Base_PLC_Ask SET F_HaveFirstProject ='" ) . Append ( HaveFirstProject ) . Append ( "', F_BoxBarcode ='" ) . Append ( boxcode ) . Append ( "' WHERE (F_BindingDevice =" ) . Append ( devbind ) . Append ( ")" ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
//20091128
md = null ;
#endregion
#endregion
}
}
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
#endregion
break ;
#endregion
#region 申请托盘出库(电气申请)//20130510
case 3 5 :
//没有到出库口任务就向管理申请
if ( devicestates [ tempdb2addr + 0 ] = = 1 )
{
//电气系统在箱体拆盘机缺盘时,每隔一段时间就会申请一次,有拆垛任务时,忽略申请
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_WareHouse,F_ManageAskkind,F_DeviceIndex, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = " ) . Append ( devidx ) . Append ( ")" ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
StringBuilder warehouse =
new StringBuilder ( dvsp [ 0 ] [ "F_WareHouse" ] . ToString ( ) ) ;
int apptype = Convert . ToInt32 ( dvsp [ 0 ] [ "F_ManageAskkind" ] ) ; //20130510
int dcode = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BindingDevice" ] ) ;
bool IfExit = false ;
string msg = string . Empty ;
#region 测试生成出空托盘任务
string lanes = ccf . GetTestInLaneway ( ) ;
if ( lanes ! = "" )
{
#region MyRegion
//20170119
string str = string . Format ( "({0})" , dcode ) ;
if ( dcode = = 2 2 0 5 2 )
{
str = string . Format ( "({0},{1})" , dcode , 2 2 0 3 8 ) ;
}
dvbc =
dbo . ExceSQL (
string . Format (
"select fid from T_Manage_Task where FENDDEVICE in {0} " , str ) )
. Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
IfExit = true ;
msg = string . Format ( "申请空托盘出库时,{0}申请的任务在调度系统的任务表里面已经存在,或存在拆垛任务!" , dcode , barcode ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" , msg ) ;
OnRefreshMonitor ( rmea ) ;
errtext = msg ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拒绝申请" , devidx . ToString ( ) , msg ) ;
}
#endregion
//生成空托盘组出库任务
if ( IfExit = = false )
{
string CellCode = CStaticClass . SelectEmptyPalletCell ( lanes , dcode ) ;
int Laneindex = ccf . GetLanewayFromCellCode ( CellCode , 1 ) ;
if ( Laneindex ! = - 1 )
{
string dtime = DateTime . Now . ToString ( "u" ) ; //20101028
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ; //20101028
string stack =
CStaticClass . GetStackIndexFromLaneInfo ( Laneindex ) . ToString ( ) ;
int AutoManageIdx = ccf . GetTempManageIdx ( ) ; //调度任务索引
int startdevice = Laneindex ;
int enddevice = dcode ;
string barcodes = AutoManageIdx . ToString ( ) ; //托盘条码
int controltype = 2 ; //入库
string sqlstr =
string . Format (
"insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer,FLOGIC_AREA) values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15},'{16}')" ,
AutoManageIdx , barcodes , controltype , 2 , 1 , startdevice ,
CellCode , 1 , dcode , "-" , Laneindex , stack , "0" , dtime , 0 , 0 ,
enddevice ) ;
dbo . ExceSQL ( sqlstr ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" ,
"自动生成出库任务:" + AutoManageIdx . ToString ( ) ,
startdevice . ToString ( ) + ":" + CellCode , enddevice . ToString ( ) ) ;
}
}
//continue;
}
#endregion
if ( apptype < 1 0 )
{
// continue;
//}
dvbc =
dboMan . ExceSQL (
string . Format (
"SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<1 and DEVICE_CODE='{0}' " ,
dcode . ToString ( ) ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
IfExit = true ;
msg = string . Format ( "申请空托盘出库时,{0}的申请在管理系统的申请表里面已经存在!" , dcode , barcode ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" , msg ) ;
OnRefreshMonitor ( rmea ) ;
errtext = msg ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拒绝申请" , devidx . ToString ( ) , msg ) ;
}
//dvbc =
// dboMan.ExceSQL(
// string.Format(
// "select CONTROL_ID from IO_CONTROL where END_DEVICE_CODE = '{0}'",
// dcode)).Tables[0].DefaultView;
//if (dvbc.Count > 0)
//{
// IfExit = true;
// msg = string.Format("申请空托盘出库时,{0}申请的任务在管理系统的任务表里面已经存在!", dcode, barcode);
// RefreshMonitorEventArgs rmea =
// new RefreshMonitorEventArgs("tsStatus", msg);
// OnRefreshMonitor(rmea);
// errtext = msg;
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "拒绝申请", devidx.ToString(), msg);
//}
//20170119
//判断是否有拆垛任务
#region 判断是否有拆垛任务
int deviceend = 0 ;
if ( dcode = = 2 2 0 5 2 )
{
deviceend = 2 1 0 0 2 ;
}
else
if ( dcode = = 2 2 0 6 6 )
{
deviceend = 2 1 0 0 1 ;
}
dvbc =
dbo . ExceSQL (
string . Format (
"select fid from T_Manage_Task where FENDDEVICE ={0} " , deviceend ) )
. Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
IfExit = true ;
msg = string . Format ( "{0}申请空托盘出库时,存在拆垛任务!" , dcode ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" , msg ) ;
OnRefreshMonitor ( rmea ) ;
errtext = msg ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拒绝申请" , devidx . ToString ( ) , msg ) ;
}
#endregion
#region 计算出库申请的空托盘数量
int applycount = 1 ;
sqlstr = string . Format ( "select * from T_Base_TaskCount where F_DeviceIndex={0}" , dcode ) ; //查找终点设备对应的出库任务获取数量和执行数量
dvbc = dbo . ExceSQL ( sqlstr ) . Tables [ 0 ] . DefaultView ;
int exemaxcount = 1 ;
string checkgoogs = string . Empty ;
if ( dvbc . Count > 0 )
{
exemaxcount = Convert . ToInt32 ( dvbc [ 0 ] [ "F_EXECOUNT" ] ) ;
checkgoogs = Convert . ToString ( dvbc [ 0 ] [ "F_CHECKGOODS" ] ) ;
}
dvbc =
dbo . ExceSQL (
string . Format (
"select fid from T_Manage_Task where FENDDEVICE = {0} " , dcode ) )
. Tables [ 0 ] . DefaultView ;
int execount = dvbc . Count ; //已经存在的任务数量
if ( execount > = exemaxcount )
{
IfExit = true ;
msg = string . Format ( "{0}申请空托盘出库时,允许最大任务数量:{1},当前任务数量:{2}" , dcode , exemaxcount , execount ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" , msg ) ;
OnRefreshMonitor ( rmea ) ;
errtext = msg ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拒绝申请" , devidx . ToString ( ) , msg ) ;
}
//判断一层内筒数量,决定申请出空托盘数量
#region 判断一层内筒数量,决定申请出空托盘数量
if ( exemaxcount > = 2 & & checkgoogs ! = "" & & execount < exemaxcount )
{
//只有在一楼拥堵的时候才出两个以上
//调用函数
bool iffull = ccf . GetTransDeviceIfFull ( checkgoogs ) ;
if ( ! iffull )
{
int oldexecount = execount ;
execount + = 1 ; //一楼输送线不满载时,少出一个托盘
if ( execount > = exemaxcount )
{
IfExit = true ;
msg = string . Format ( "{0}申请空托盘出库时,允许最大任务数量:{1},当前任务数量:{2},但一楼输送线不满载" , dcode , exemaxcount , oldexecount ) ;
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" , msg ) ;
OnRefreshMonitor ( rmea ) ;
errtext = msg ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拒绝申请" , devidx . ToString ( ) , msg ) ;
}
}
}
#endregion
#endregion
applycount = exemaxcount - execount ;
if ( IfExit = = false )
{
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append (
"INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARA01,CONTROL_APPLY_REMARK)VALUES " )
. Append (
"(" )
. Append ( apptype )
. Append ( ",'" )
. Append ( warehouse . ToString ( ) )
. Append ( "','" )
. Append ( dcode )
. Append ( "','',0,'" )
. Append ( dtime )
. Append ( "','" )
. Append ( applycount )
. Append ( "','')" ) ;
try
{
dboMan . ExceSQL ( sql . ToString ( ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "向管理系统申请托盘出库" ,
devidx . ToString ( ) , dcode . ToString ( ) . ToUpper ( ) + ",数量:" + applycount . ToString ( ) ) ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea =
new RefreshMonitorEventArgs ( "tsStatus" ,
"SControlMonitor.申请托盘出库时" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.申请托盘出库时" + ex . StackTrace ;
wv [ 0 ] . Remove ( 0 , wv [ 0 ] . Length ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
continue ;
}
}
}
//wv[0].Remove(0, wv[0].Length);
//wv[0].Append("2");
//sdo.WriteDBData(witemnames, wv);
}
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( devidx ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写申请空托盘应答" , devidx . ToString ( ) , "写标志2**" ) ;
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_PLC_Ask SET F_Time='{0}' WHERE (F_DeviceIndex = {1}) " , DateTime . Now , devidx ) ) ;
}
break ;
#endregion
#region 嘉兴电力四楼三个单元检定回库电气申请放行
case 3 6 :
if ( states [ 0 ] = = 1 )
{ //46006-116;46007-118 46008-120
//设备号:绑定设备+“2”
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "SELECT F_DeviceIndex, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = " ) . Append ( devidx ) . Append ( ")" ) ;
dvsp = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dvsp . Count > 0 )
{
int dcode = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BindingDevice" ] ) ; //检定单元入口条码扫描
bool IfExit = false ;
dvbc = dboMan . ExceSQL ( string . Format ( "SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' " , dcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
IfExit = true ;
}
dvbc = dboMan . ExceSQL ( string . Format ( "select CONTROL_ID from IO_CONTROL where START_DEVICE_CODE = '{0}'" , dcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
IfExit = true ;
}
dvbc = dbo . ExceSQL ( string . Format ( "select fid from T_Manage_Task where FSTARTDEVICE = '{0}'" , dcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dvbc . Count > 0 )
{
IfExit = true ;
}
if ( IfExit = = false )
{
int appid = dboMan . GetManageTableIndex ( "IO_CONTROL_APPLY" , true ) ; //CONTROL_APPLY_ID
string dtime = DateTime . Now . ToString ( "u" ) ;
dtime = dtime . Substring ( 0 , dtime . Length - 1 ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES " ) . Append (
"(" ) . Append ( appid ) . Append ( ",4,1,'" ) . Append ( dcode ) . Append ( "',null,0,'" ) . Append ( dtime ) . Append ( "','')" ) ;
try
{
dboMan . ExceSQL ( sql . ToString ( ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "检定回库电气申请放行" , devidx . ToString ( ) , dcode . ToString ( ) . ToUpper ( ) ) ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.检定回库电气申请放行," + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
errtext = "SControlMonitor.检定回库电气申请放行," + ex . StackTrace ;
//wv[0].Remove(0, wv[0].Length);
//wv[0].Append("2");
//sdo.WriteDBData(witemnames, wv);
continue ;
}
}
//wv[0].Remove(0, wv[0].Length);
//wv[0].Append("2");
//sdo.WriteDBData(witemnames, wv);
}
}
break ;
#endregion
#region 接收称重信息//20130510
case 8 :
if ( devicestates [ tempdb2addr + 0 ] ! = 1 ) continue ;
//F_BoxBarcode
StringBuilder weight = new StringBuilder ( "" ) ;
weight . Append ( Convert . ToChar ( devicestates [ tempdb2addr + 4 ] ) ) ;
weight . Append ( Convert . ToChar ( devicestates [ tempdb2addr + 3 ] ) ) ;
weight . Append ( Convert . ToChar ( devicestates [ tempdb2addr + 2 ] ) ) ;
weight . Append ( Convert . ToChar ( devicestates [ tempdb2addr + 1 ] ) ) ;
weight . Append ( "." ) ;
weight . Append ( Convert . ToChar ( devicestates [ tempdb2addr + 5 ] ) ) ; //小数部分
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "接收称重信息" , devidx . ToString ( ) , "重量:" + weight . ToString ( ) ) ;
//向管理写入重量
int mpindex = ccf . GetMonitorTaskIndexFromSendedDevice ( devidx ) ;
int manfid = ccf . GetManageTaskIndexfromMonitor ( mpindex ) ;
int manKind = ccf . GetManageTaskKindIndexFromMonitor ( mpindex ) ;
if ( manKind = = 1 )
{
dboMan . ExecuteSql ( string . Format ( "UPDATE IO_CONTROL SET CONTROL_REMARK ={0} WHERE CONTROL_ID={1}" , weight . ToString ( ) , manfid ) ) ;
}
if ( weight . ToString ( ) ! = "0000.0" )
{
cgs . ActionComplete ( devidx , mpindex , 0 ) ;
//dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BoxBarcode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BoxBarcode<>'{1}'", devidx, weight.ToString()));
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( devidx ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写称重应答" , devidx . ToString ( ) , "写标志2**称重信息:" + weight . ToString ( ) . ToUpper ( ) ) ;
}
break ;
#endregion
#region 检尺
case 3 7 :
//if (devicestates[tempdb2addr + 0] != 1) continue;
//dvsp = dbo.ExceSQL(string.Format("select F_BarCode,F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark,F_TaskIndex from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind
//if (dvsp.Count > 0)
//{
// StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
// int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
// int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);
// int sb = Convert.ToInt32(dvsp[0]["F_remark"]);
// int BoxQuality = devicestates[tempdb2addr + 1];
// DateTime appdt = new DateTime();
// if (dvsp[0]["F_Time"] == DBNull.Value)
// {
// appdt = DateTime.Now.AddSeconds(-10);
// }
// else
// {
// DateTime.TryParse(dvsp[0]["F_Time"].ToString(), out appdt);
// }
// if (dvsp[0]["F_TaskIndex"] != DBNull.Value)
// {
// if ((appdt.AddSeconds(5) > DateTime.Now) && (dvsp[0]["F_TaskIndex"].ToString() == BoxQuality.ToString()))
// {
// dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_TaskIndex = '{1}',F_Time='{2}' WHERE (F_DeviceIndex = {0}) ", devidx, BoxQuality, DateTime.Now));
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC重复上报检尺:", devidx.ToString(), ",检尺:" + devidx + ",高度:" + BoxQuality.ToString().ToUpper());
// break;
// }
// }
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "检尺上报", devidx.ToString(), "读标志1**:" + BoxQuality.ToString());
// StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
// dtime.Remove(dtime.Length - 1, 1);
// barcode.Clear();
// dvsp = dbo.ExceSQL(string.Format("select F_BarCode,F_BindingDevice from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", dcode)).Tables[0].DefaultView; //20130510F_ManageAskkind
// if (dvsp.Count > 0)
// {
// barcode.Append(dvsp[0]["F_BarCode"]);
// }
// string jic = string.Empty;
// switch (BoxQuality)
// {
// case 1:
// jic = "Low";
// break;
// case 2:
// jic = "Height%";
// break;
// case 3:
// jic = "Height";
// break;
// default:
// jic = BoxQuality.ToString();
// break;
// }
// //int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
// object[] ob = new object[8] { apptype, sb, barcode, 0, dtime, "", warehouse.ToString(), jic };
// if (CStaticClass.StopTestLane == true)
// {
// if ((!WcfControlMonitorLib.CStaticClass.StopTest.ContainsKey(18001)) || ((WcfControlMonitorLib.CStaticClass.StopTest.ContainsKey(18001)) && WcfControlMonitorLib.CStaticClass.StopTest[18001] == true))
// {
// try
// {
// dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE,CONTROL_APPLY_PARAMETER)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}','{7}')", ob));
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper());//20140218
// }
// catch (Exception ex)
// {
// RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message);
// OnRefreshMonitor(rmea);
// continue;//20140218
// }
// }
// }
// else
// {
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "调度系统测试:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper());//20140218
// }
// witemnames[0].Clear();
// witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510
// wv[0].Clear();
// wv[0].Append("2");
// sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
// sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写检尺应答", devidx.ToString(), "写标志2**检尺:" + BoxQuality.ToString());
// ob = new object[4] { devidx, BoxQuality.ToString(), DateTime.Now, barcode };
// dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode='{3}',F_Time='{2}', F_TaskIndex ={1} WHERE (F_DeviceIndex = {0}) ", ob));
//}
//break;
#endregion
#region 每楼层报警点
case 3 8 :
//if (devicestates[tempdb2addr + 0] != 1) continue;
devinfo . SplitByte_0 = ( devicestates [ tempdb2addr + 1 ] & 1 ) = = 1 ? 1 : 0 ;
break ;
#endregion
#region 机器人拆垛完成
case 3 9 :
if ( devicestates [ tempdb2addr + 0 ] ! = 1 ) continue ;
dvsp = dbo . ExceSQL ( string . Format ( "select F_BarCode,F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark,F_TaskIndex from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) " , devidx ) ) . Tables [ 0 ] . DefaultView ; //20130510F_ManageAskkind
if ( dvsp . Count > 0 )
{
int dcode = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BindingDevice" ] ) ;
int taskno = ( devicestates [ tempdb2addr + 1 ] < < 8 ) + devicestates [ tempdb2addr + 2 ] ; //任务号
//if (taskno > 0)
//{
cgs . ActionComplete ( dcode , taskno , 0 ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拆垛完成" , dcode . ToString ( ) , taskno . ToString ( ) ) ;
//}
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( devidx ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写拆垛应答" , devidx . ToString ( ) , "写标志2**" ) ;
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_PLC_Ask SET F_Time='{0}' WHERE (F_DeviceIndex = {1}) " , DateTime . Now , devidx ) ) ;
}
break ;
#endregion
#region 确认按钮生成入库任务
case 3 4 :
if ( devicestates [ tempdb2addr + 0 ] ! = 5 ) continue ; //.0和.1同时又信号
dvsp = dbo . ExceSQL ( string . Format ( "select F_BarCode,F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark,F_TaskIndex from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) " , devidx ) ) . Tables [ 0 ] . DefaultView ; //20130510F_ManageAskkind
if ( dvsp . Count > 0 )
{
int dcode = Convert . ToInt32 ( dvsp [ 0 ] [ "F_BindingDevice" ] ) ;
int taskno = ( devicestates [ tempdb2addr + 1 ] < < 8 ) + devicestates [ tempdb2addr + 2 ] ; //任务号
//if (taskno > 0)
//{
cgs . ActionComplete ( dcode , taskno , 0 ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "拆垛完成" , dcode . ToString ( ) , taskno . ToString ( ) ) ;
//}
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBGet ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw2Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( "2" ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( devidx ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写拆垛应答" , devidx . ToString ( ) , "写标志2**" ) ;
dbo . ExecuteSql ( string . Format ( "UPDATE T_Base_PLC_Ask SET F_Time='{0}' WHERE (F_DeviceIndex = {1}) " , DateTime . Now , devidx ) ) ;
}
break ;
#endregion
#region add by lyj20180427 穿梭板双叉提升机
case 4 0 :
if ( IsEquals ( devinfo . ReturnMessage , states , 4 ) = = false )
{
//taskindex = 26982;//模拟测试
int order = ccf . GetDeviceOrderFromMonitor ( taskindex ) ;
int relaid = ccf . GetRelativeTaskIdIndex ( taskindex ) ;
devinfo . ReturnMessage = states ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
sss . Remove ( 0 , sss . Length ) ;
sss . Append ( "**条码:" ) . Append ( bc ) . Append ( "**读标志" + devicestates [ tempdb2addr + 0 ] ) . Append ( "**状态" + state ) . Append ( "**任务号:" + taskindex ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "收到输送机机状态" , devidx . ToString ( ) , sss . ToString ( ) ) ;
if ( taskindex > 0 & & state = = 2 )
{
//devidx = 15002;////模拟测试
int fidd1 = 0 , fidd2 = 0 , mankindd = 0 , relFIDD = 0 ;
string aainfo = string . Empty ;
int mankind = GetManageTaskKindFromMonitor ( out aainfo , taskindex ) ;
int mantaskindex = GetManageTaskIndexFromMonitor ( out aainfo , taskindex ) ;
int tasktypee = ccf . GetFCONTROLTASKTYPEFromManageTask ( mankind , mantaskindex ) ;
int layer = 0 ;
layer = ccf . getLayerFromMonitorTask ( taskindex ) ;
if ( relaid > 0 )
{
int [ ] corrtasks = Model . CGeneralFunction . MutiForkIfSync ( taskindex , devidx , 4 0 ) ;
int boxnum = Model . CGeneralFunction . getDoubleForkMonitorCount ( taskindex , tasktypee , order ) ;
cgs . ActionComplete ( devidx , taskindex , 1 ) ;
if ( corrtasks [ 0 ] ! = 0 )
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "多工位提升机状态:" , devidx . ToString ( ) , "报完成时:查找关联任务:" + corrtasks [ 0 ] + "当前任务:" + taskindex . ToString ( ) + "箱数:" + boxnum ) ;
}
else
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "多工位提升机状态:" , devidx . ToString ( ) , "无关联任务,corrtasks为NULL" + "当前任务:" + taskindex . ToString ( ) + "箱数:" + boxnum ) ;
}
if ( boxnum = = 2 )
{
cgs . ActionComplete ( devidx , corrtasks [ 0 ] , 1 ) ;
}
#region 20180427 add by lyj提升机送货完成解除关联
string sqlrela = string . Empty ;
if ( order = = 5 & & devinfo . SplitByte_0 = = 0 & & devinfo . SplitByte_1 = = 0 & & tasktypee = = 1 )
{
sqlrela = "update T_Manage_Task set F_RELATIVECONTORLID=-" + relaid . ToString ( ) + " where F_RELATIVECONTORLID=" + relaid . ToString ( ) ;
dbo . ExceSQL ( sqlrela ) ;
}
}
else
{
cgs . ActionComplete ( devidx , taskindex , 1 ) ;
}
#endregion
#region add by lyj20180507出库不同层配关联
if ( tasktypee = = 2 & & order = = 4 & & relaid < = 0 )
{
int relamonitorindex = 0 ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "select F_MonitorIndex from T_Monitor_Task,T_Base_Device,T_Manage_Task " ) .
Append ( "where dbo.T_Base_Device.F_DeviceIndex=dbo.T_Monitor_Task.F_DeviceIndex and dbo.T_Monitor_Task.F_ManageTaskIndex=dbo.T_Manage_Task.FID" ) .
Append ( " and F_DeviceCommandIndex=4 and F_DeviceKindIndex=40 and FCONTROLTASKTYPE=2 " ) .
Append ( "and F_MonitorIndex in(select MIN(F_MonitorIndex) from T_Monitor_Task group by F_ManageTaskIndex) and F_NumParam1<" ) .
Append ( layer ) . Append ( " order by F_NumParam1 desc" ) ;
dv = dbo . ExceSQL ( sql . ToString ( ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
if ( dv [ 0 ] [ "F_MonitorIndex" ] = = DBNull . Value ) relamonitorindex = 0 ;
relamonitorindex = Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ;
if ( relamonitorindex > 0 )
{
mankindd = mankind ;
relFIDD = mantaskindex ;
fidd1 = mantaskindex ;
fidd2 = GetManageTaskIndexFromMonitor ( out aainfo , relamonitorindex ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FUseAwayFork=1,F_RELATIVECONTORLID=" ) . Append ( relFIDD ) . Append ( " where F_ManageTaskKindIndex=" ) . Append ( mankindd ) . Append ( " and FID=" ) . Append ( fidd1 ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Manage_Task set FUseAwayFork=2,F_RELATIVECONTORLID=" ) . Append ( relFIDD ) . Append ( " where F_ManageTaskKindIndex=" ) . Append ( mankindd ) . Append ( " and FID=" ) . Append ( fidd2 ) ;
dbo . ExecuteSql ( sql . ToString ( ) ) ;
//int stackno = Convert.ToInt32(dvr[0]["F_DeviceIndex"]);
//stackno = 15001;//测试
object [ ] ob = new object [ 3 ] { devidx , fidd1 , mankindd } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_UseAwayFork = 1 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})" , ob ) ) ;
ob = new object [ 3 ] { devidx , fidd2 , mankindd } ;
dbo . ExceSQL ( string . Format ( "UPDATE T_Monitor_Task SET F_UseAwayFork = 2 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})" , ob ) ) ;
sql . Remove ( 0 , sql . Length ) ;
sql . Append ( "update T_Base_Device set F_ManTaskReserve=" ) . Append ( ( mankindd . ToString ( ) + relFIDD . ToString ( ) ) ) . Append ( " where F_DeviceIndex=" + devidx ) ;
dbo . ExceSQL ( sql . ToString ( ) ) ;
}
}
}
#endregion
}
else
{
cgs . GetKindDeviceState ( taskindex , devidx , state ) ;
}
}
break ;
case 5 0 :
devinfo . SplitByte_0 = ( devicestates [ tempdb2addr + 0 ] & 1 ) = = 1 ? 1 : 0 ;
Model . CGetInfo . SetDeviceMessage ( devinfo ) ;
break ;
#endregion
#region 20210324_上海晟碟,拣选塔灯清零确认
case 4 1 :
if ( states [ 0 ] = = 1 )
{
//int iStation = deviceindex / 10;
//sql.Remove(0, sql.Length);
//sql.Append("SELECT * FROM IO_Station_Status WHERE F_StationID = ").Append(iStation.ToString());
//dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
//if(dvbc.Count > 0)
//{
// sql.Remove(0, sql.Length);
// sql.Append("UPDATE IO_Station_Status SET F_Status = 0 WHERE F_StationID = ").Append(iStation.ToString());
// dbo.ExecuteSql(sql.ToString());
// witemnames[0].Clear();
// witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510
// wv[0].Clear();
// wv[0].Append("0");
// sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
// sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写信号灯应答", devidx.ToString(), "写标志0**");
//}
}
break ;
#endregion
}
#endregion
}
}
#endregion
return true ;
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.DealWithDeviceState时" + ex . Message + ex . StackTrace ) ;
OnRefreshMonitor ( rmea ) ;
errtext = ex . Message + ex . StackTrace ;
return false ;
}
finally
{
dv . Dispose ( ) ;
dvbc . Dispose ( ) ;
dvsp . Dispose ( ) ;
}
}
}
void g_manageService_ManageInStorageCheckoutCompleted ( object sender , ManageService . ManageInStorageCheckoutCompletedEventArgs e )
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "管理分道回调返回值:" , e . ManageInStorageCheckoutResult . ToString ( ) , ",条码:" + e . sResultBoxBarCode + ",sResult:" + e . sResult ) ;
CSendBarcode ( 1 6 0 0 1 , e . sResultBoxBarCode , e . ManageInStorageCheckoutResult ) ;
}
public void FactorizeCallback ( IAsyncResult ar )
{
try
{
string sResult = string . Empty ;
string sBoxBarCode = string . Empty ;
// bool bResult = g_manageService.EndManageInStorageCheckout(out sResult, out sBoxBarCode, ar);
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "管理分道回调时:", "16001", ",条码:" + sBoxBarCode + ";" + bResult.ToString());
//CSendBarcode(16001, sBoxBarCode, bResult);
}
catch ( Exception ex )
{
throw ex ;
}
}
/// <summary>
/// 直接向DB区写数据 lzm 20250317
/// </summary>
/// <param name="deviceIndex"></param>
/// <param name="DBBlock">DB1,DB2</param>
/// <param name="Wdata">要写入的数据内容</param>
/// <returns></returns>
public bool WriteDBData ( int deviceIndex , string DBBlock , string Wdata , out string errtext )
{
errtext = string . Empty ;
try
{
Model . MDevice md = Model . CGetInfo . GetDeviceInfo ( deviceIndex ) ;
if ( DBBlock = = "DB1" )
{
StringBuilder [ ] wv = { new StringBuilder ( "" ) } ;
StringBuilder [ ] wn = { new StringBuilder ( "" ) } ;
wn [ 0 ] . Clear ( ) ;
wn [ 0 ] . Append ( DBBlock ) . Append ( "." ) . Append ( Convert . ToString ( md . Dbw1Address + 1 8 ) ) . Append ( ",i" ) ; //第18个字节写1 山东时代
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( Wdata ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( deviceIndex ) ;
sdo . WriteDBData ( wn , wv , md . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写堆垛机急停按钮信号:" , deviceIndex . ToString ( ) , md . S7Connection + ";" + DBBlock + ";" + ( md . Dbw1Address + 2 2 ) . ToString ( ) + ";" + Wdata ) ;
}
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
/// <summary>
/// 直接向DB区写数据 输送线 lzm
/// </summary>
/// <param name="deviceIndex"></param>
/// <param name="DBBlock">DB1,DB2</param>
/// <param name="Wdata">要写入的数据内容</param>
/// <returns></returns>
public bool WriteDBDataConveyor ( int deviceIndex , string DBBlock , string Wdata , out string errtext )
{
errtext = string . Empty ;
try
{
Model . MDevice md = Model . CGetInfo . GetDeviceInfo ( deviceIndex ) ;
if ( DBBlock = = "DB1" )
{
StringBuilder [ ] wv = { new StringBuilder ( "" ) } ;
StringBuilder [ ] wn = { new StringBuilder ( "" ) } ;
wn [ 0 ] . Clear ( ) ;
wn [ 0 ] . Append ( DBBlock ) . Append ( "." ) . Append ( Convert . ToString ( md . Dbw1Address + 1 ) ) . Append ( ",i" ) ; //
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( Wdata ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( deviceIndex ) ;
sdo . WriteDBData ( wn , wv , md . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写入PLC的站台出入库状态:" , deviceIndex . ToString ( ) , md . S7Connection + ";" + DBBlock + ";" + ( md . Dbw1Address + 2 2 ) . ToString ( ) + ";" + Wdata ) ;
}
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
/// <summary>
///
/// </summary>
/// <param name="deviceIndex"></param>
/// <param name="DBBlock"></param>
/// <param name="Wdata"></param>
/// <param name="byteindex">索引</param>
/// <param name="errtext"></param>
/// <returns></returns>
public bool WriteDBData2 ( int deviceIndex , string DBBlock , string Wdata , string byteindex , out string errtext )
{
errtext = string . Empty ;
try
{
Model . MDevice md = Model . CGetInfo . GetDeviceInfo ( deviceIndex ) ;
if ( DBBlock = = "DB1" )
{
StringBuilder [ ] wv = { new StringBuilder ( "" ) } ;
StringBuilder [ ] wn = { new StringBuilder ( "" ) } ;
wn [ 0 ] . Clear ( ) ;
wn [ 0 ] . Append ( DBBlock ) . Append ( "." ) . Append ( Convert . ToString ( md . Dbw1Address + byteindex ) ) . Append ( ",i" ) ; //第22个字节写1 民航二所
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( Wdata ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( deviceIndex ) ;
sdo . WriteDBData ( wn , wv , md . S7Connection ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "写堆垛机急停按钮信号:" , deviceIndex . ToString ( ) , md . S7Connection + ";" + DBBlock + ";" + ( md . Dbw1Address + 2 2 ) . ToString ( ) + ";" + Wdata ) ;
}
return true ;
}
catch ( Exception ex )
{
errtext = ex . StackTrace + ex . Message ;
return false ;
}
}
/// <summary>
/// 20120616相应CListenAGV线程的数据库更新事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void DealWithListenAGVState_UpdateDB ( object sender , CUpdateDBChangeEventArgs e )
{
lock ( thisLock )
{
try
{
if ( e . Taskindex > 0 )
{
cgs . ActionComplete ( e . Deviceindex , e . Taskindex , e . Taskstate ) ;
}
else
{
dbo1 = e . Dbo ;
dbo1 . ExecuteSql ( e . ExeSQL . ToString ( ) ) ;
}
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.CListenAGVState_UpdateDB时" + ex . Message + ex . StackTrace ) ;
OnRefreshMonitor ( rmea ) ;
return ;
}
}
}
public void DealWithWriteDarkCasket ( object sender , CWriteDarkCasketEventArgs e )
{ //20121108
lock ( thisLock )
{
StringBuilder sb = new StringBuilder ( ) ;
for ( int i = 0 ; i < e . Wrinfo . GetLength ( 0 ) ; i + + )
{
sb . Append ( "-" ) . Append ( e . Wrinfo [ i ] . ToString ( ) ) ;
}
CommonClassLib . CCarryConvert . WriteDarkCasket ( e . Wrnamespace + "." + e . Wrmethod , e . WrkeyRemark , e . Wrdevice , sb . ToString ( ) ) ;
}
}
public void DealWithSendDeviceOrder ( object sender , CSendDeviceOrderEventArgs e )
{ //20121108
lock ( thisLock )
{
if ( ccf . GetDeviceKindIdx ( e . Deviceindex ) = = 6 )
{
sdo = CommModeCreate . CreateSendDeviceOrder ( e . Deviceindex ) ;
SocketsTCPIP . CClientTCPIP . Send ( e . RemoteIP , e . RemotePort , e . Sendrinfo ) ;
}
}
}
public bool ReConnectOPCServer ( )
{ //20130817richard
try
{
OPCClient . CCommonOPCClient . DisConnectOPCServer ( ) ;
OPCClient . CCommonOPCClient . CreateSubscriptionGroup ( ) ;
return true ;
}
catch ( Exception ex )
{
throw ex ;
}
}
public void ActionError ( int DeviceIdx , int TaskIdx , int ErrId )
{ //20131120
cgs . ActionError ( DeviceIdx , TaskIdx , ErrId ) ;
}
#endregion
public string GetErrorBarcode ( int devBind , int devBarcode , int barcodeLength )
{
int bcsn = 1 ;
StringBuilder bc = new StringBuilder ( ) ;
StringBuilder sb = new StringBuilder ( ) ;
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT F_ErrorBarcodeSN FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = {0})" , devBarcode ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
bcsn = Convert . ToInt32 ( dv [ 0 ] [ "F_ErrorBarcodeSN" ] ) + 1 ;
bc . Append ( "9" ) . Append ( devBind . ToString ( ) ) ;
for ( int i = 0 ; i < ( barcodeLength - bc . Length ) ; i + + )
{
sb . Append ( "0" ) . Append ( bcsn . ToString ( ) ) ;
}
return bc . Append ( sb ) . ToString ( ) ;
}
else
{
return "-" ;
}
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.GetErrorBarcode时" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
return "-" ;
}
finally
{
dv . Dispose ( ) ;
}
}
/// <summary>
/// 根据条码,报告输送机的送出任务完成
/// </summary>
/// <param name="Bardevice">条码设备</param>
/// <param name="BindDevice">条码设备的绑定输送机</param>
/// <param name="barcode">条码</param>
/// <param name="AbendDevice">异常处理口设备</param>
void BarcodeComplete ( int Bardevice , int BindDevice , string barcode , string AbendDevice )
{
DataView dv = new DataView ( ) ;
try
{
if ( barcode . Contains ( "11111" ) ) return ; //对于未扫描到条码的情况不进行判断20170309
if ( CStaticClass . DBFactory = = "OracleDBFactory" )
{ //20151120调度系统oracle的特殊语句
dv = dbo . ExceSQL ( string . Format ( "SELECT F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex,F_ManageTaskIndex, F_ManageTASKKINDINDEX,F_NumParam4 FROM T_Monitor_Task WHERE rownum=1 and (F_TxtParam like '%{0}%')" , barcode ) ) . Tables [ 0 ] . DefaultView ;
}
else
{
dv = dbo . ExceSQL ( string . Format ( "SELECT TOP 1 F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex,F_ManageTaskIndex, F_ManageTASKKINDINDEX,F_NumParam4 FROM T_Monitor_Task WHERE (F_TxtParam like '%{0}%')" , barcode ) ) . Tables [ 0 ] . DefaultView ;
}
if ( dv . Count > 0 )
{
int mankind = Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTASKKINDINDEX" ] ) ;
int FID = Convert . ToInt32 ( dv [ 0 ] [ "F_ManageTaskIndex" ] ) ;
if ( ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) = = 2 ) & & ( ( dv [ 0 ] [ "F_DeviceCommandIndex" ] . ToString ( ) = = "6" ) | | ( dv [ 0 ] [ "F_DeviceCommandIndex" ] . ToString ( ) = = "11" ) ) | | ( ccf . GetDeviceKindIdx ( Convert . ToInt32 ( dv [ 0 ] [ "F_DeviceIndex" ] ) ) = = 7 ) )
{
int ctype = ccf . GetFCONTROLTASKTYPEFromManageTask ( mankind , FID ) ;
if ( ( dv [ 0 ] [ "F_NumParam4" ] . ToString ( ) = = BindDevice . ToString ( ) ) )
{ //正确
cgs . ActionComplete ( BindDevice , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) , 0 ) ;
}
else
{ //可能经过上一个扫描器没扫到,下一条任务是否为此扫描任务,是:两个任务都报完成
dv = dbo . ExceSQL ( string . Format ( "SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) AND (F_NumParam4 = {2})" , mankind , FID , BindDevice ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码报完成" , Bardevice . ToString ( ) , "上一个扫描器没扫到码,条码:" + barcode . ToString ( ) . ToUpper ( ) ) ;
dv = dbo . ExceSQL ( string . Format ( "SELECT F_MonitorIndex,F_DeviceIndex,F_NumParam4 FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) AND (F_MonitorIndex <= {2})" , mankind , FID , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) ) ) . Tables [ 0 ] . DefaultView ;
for ( int i = 0 ; i < dv . Count ; i + + )
{
cgs . ActionComplete ( Convert . ToInt32 ( dv [ 0 ] [ "F_NumParam4" ] ) , Convert . ToInt32 ( dv [ 0 ] [ "F_MonitorIndex" ] ) , 1 ) ;
}
}
else
{
int abst = 0 ;
if ( int . TryParse ( AbendDevice . ToString ( ) , out abst ) = = true )
{
object [ ] ob = new object [ 1 7 ] { ccf . GetTempManageIdx ( ) , 2 , barcode , 1 , 2 , 1 , 1 , ccf . GetWarehouseIndex ( ) , ccf . GetWarehouseIndex ( ) , "-" , BindDevice , AbendDevice , "-" , 0 , DateTime . Now . ToString ( "u" ) , 0 , Model . CGeneralFunction . TASKABEND } ;
dbo . ExceSQL ( string . Format ( "INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})" , ob ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码报完成" , Bardevice . ToString ( ) , "条码和任务匹配,但扫描器不在此任务设备指令队列里,条码:" + barcode . ToString ( ) . ToUpper ( ) ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , Bardevice . ToString ( ) + "条码和任务匹配,但扫描器不在此任务设备指令队列里,条码:" + barcode . ToString ( ) ) ;
OnRefreshMonitor ( rmea ) ;
}
}
}
}
else
{
int abst = 0 ;
if ( int . TryParse ( AbendDevice . ToString ( ) , out abst ) = = true )
{
object [ ] ob = new object [ 1 7 ] { ccf . GetTempManageIdx ( ) , 2 , barcode , 1 , 2 , 1 , 1 , ccf . GetWarehouseIndex ( ) , ccf . GetWarehouseIndex ( ) , "-" , BindDevice , AbendDevice , "-" , 0 , DateTime . Now . ToString ( "u" ) , 0 , Model . CGeneralFunction . TASKABEND } ;
dbo . ExceSQL ( string . Format ( "INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})" , ob ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码报完成" , Bardevice . ToString ( ) , "扫描器找不到可以报完成的设备指令,条码:" + barcode . ToString ( ) . ToUpper ( ) ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , Bardevice . ToString ( ) + "扫描器找不到可以报完成的设备指令,条码:" + barcode . ToString ( ) ) ;
OnRefreshMonitor ( rmea ) ;
}
}
}
else
{ //扫到码,但是没有匹配任务,改道异常口
object [ ] ob ;
//if ((BindDevice == 32606 || BindDevice == 42664))
//{//向管理申请补充任务
// #region 向管理申请任务
// DataView dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')", BindDevice, barcode)).Tables[0].DefaultView;
// if (dvbc.Count <= 0)
// {
// dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%'", barcode)).Tables[0].DefaultView;
// if (dvbc.Count <= 0)
// {
// dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'", barcode)).Tables[0].DefaultView;
// if (dvbc.Count <= 0)
// {
// StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
// dtime.Remove(dtime.Length - 1, 1);
// int apptype = 1;
// StringBuilder wh = new StringBuilder("1");
// int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
// ob = new object[8] { apptype, BindDevice, barcode, 0, dtime, "", wh.ToString(), appid };
// try
// {
// dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID, CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({7},{0},'{1}','{2}',{3},'{4}','{5}','{6}')", ob));
// }
// catch (Exception ex)
// {
// RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace+ex.Message );
// OnRefreshMonitor(rmea);
// }
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", Bardevice.ToString(), ",站台:" + BindDevice + ",条码:" + barcode.ToString().ToUpper());
// }
// }
// }
// #endregion
// return;
//}
int abst = 0 ;
if ( int . TryParse ( AbendDevice . ToString ( ) , out abst ) = = true )
{
ob = new object [ 1 7 ] { ccf . GetTempManageIdx ( ) , 2 , barcode , 1 , 2 , 1 , 1 , ccf . GetWarehouseIndex ( ) , ccf . GetWarehouseIndex ( ) , "-" , BindDevice , AbendDevice , "-" , 0 , DateTime . Now . ToString ( "u" ) , 0 , Model . CGeneralFunction . TASKABEND } ;
dbo . ExceSQL ( string . Format ( "INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})" , ob ) ) ;
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码报完成" , BindDevice . ToString ( ) , "扫到条码但没有匹配任务,调度自动改道至异常处理口!" ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , BindDevice . ToString ( ) + "扫到条码但没有匹配任务,调度自动改道至异常处理口!" ) ;
OnRefreshMonitor ( rmea ) ;
}
else
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "OPCClient" , "条码报完成" , BindDevice . ToString ( ) , "扫到条码但没有匹配任务!" ) ;
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.BarcodeComplete时," + BindDevice . ToString ( ) + ",扫到条码但没有匹配任务" ) ;
OnRefreshMonitor ( rmea ) ;
}
}
}
catch ( Exception ex )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "SControlMonitor.BarcodeComplete时" + ex . StackTrace + ex . Message ) ;
OnRefreshMonitor ( rmea ) ;
return ;
}
finally
{
}
}
bool IfExitDeviceBarcodeTask ( int device , string barcode )
{
DataView dv = new DataView ( ) ;
try
{
dv = dbo . ExceSQL ( string . Format ( "SELECT FSTARTDEVICE FROM T_Manage_Task where FPALLETBARCODE='{0}' and FSTARTDEVICE={1}" , barcode , device ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
return true ;
}
else
return false ;
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
dv . Dispose ( ) ;
}
}
#region 线程
static Thread mythread ;
static bool exitThread = false ;
private void BeginListen ( )
{ //20091107
while ( ! exitThread )
{
try
{
if ( CStaticClass . ObtainManageTask = = true )
{
CObtainTask . GetManagerTask ( ) ;
}
if ( CStaticClass . Order = = true )
{
CDisassembleTask . MyTaskIntoSteps ( ) ;
cctrl . StartOrder ( ) ;
//clpa.DealwithPLCAsk();
cgs . GetDeviceState ( ) ;
}
}
catch ( Exception ex )
{
throw ex ;
}
Thread . Sleep ( 2 0 0 ) ;
}
}
public void EndListen ( )
{ //20091107
exitThread = true ;
if ( mythread ! = null )
{
mythread . Abort ( ) ;
mythread = null ;
}
}
public void StartListen ( )
{
exitThread = false ;
mythread = new Thread ( new ThreadStart ( BeginListen ) ) ;
mythread . IsBackground = true ;
mythread . Start ( ) ;
}
#endregion
/// <summary>
/// 给灯写标志 add by lyj 20171106
/// </summary>
/// <param name="device"></param>
public static void lightFlag ( int device , string writevalue )
{
ISendDeviceOrder sdo ;
StringBuilder [ ] wv = { new StringBuilder ( "2" ) } ;
StringBuilder [ ] witemnames = { new StringBuilder ( "" ) } ;
Model . MDevice devinfo ;
try
{
devinfo = Model . CGetInfo . GetDeviceInfo ( device ) ;
witemnames [ 0 ] . Clear ( ) ;
witemnames [ 0 ] . Append ( Model . CGeneralFunction . DBSend ) . Append ( "." ) . Append ( Convert . ToString ( devinfo . Dbw1Address + 0 ) ) . Append ( ",b" ) ; //20130510
wv [ 0 ] . Clear ( ) ;
wv [ 0 ] . Append ( writevalue ) ;
sdo = CommModeCreate . CreateSendDeviceOrder ( device ) ;
sdo . WriteDBData ( witemnames , wv , devinfo . S7Connection ) ;
//CommonClassLib.CCarryConvert.WriteDarkCasket("opcclient", "设备编号:" + device.ToString(), "写入的值:" + writevalue, "PLC标识:" + devinfo.S7Connection.ToString());
}
catch ( Exception eda )
{
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs ( "tsStatus" , "向电气写入灯标志时:" + eda . StackTrace + eda . Message ) ;
OnRefreshMonitor ( rmea ) ;
}
finally
{
sdo = null ;
devinfo = null ;
}
}
/// <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 = ccf . 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 = GetRouteIDsub ( Convert . ToInt32 ( Handtask . _d eviceIndex ) ) ;
if ( ( routeIDsub = = - 1 ) & & ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) ! = 1 3 ) & & ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) ! = 3 1 ) )
{
Errtext = "您选择的设备错误!" ;
return false ;
}
#region 堆垛机
if ( ccf . 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 ( Handtask . _ correlTaskForks . Length > 0 )
{
string [ ] cforks = Handtask . _ correlTaskForks . Split ( cp ) ;
xx = new int [ cforks . Length ] ;
xx1 = new int [ cforks . Length ] ;
relfid = new int [ cforks . Length ] ;
for ( int i = 0 ; i < cforks . Length ; i + + )
{
if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 )
{
string useawayfork1 = cforks [ i ] ;
xx [ i ] = x + ( Convert . ToInt32 ( useawayfork1 ) - Handtask . _f orkNo ) ;
xx1 [ i ] = x1 + ( Convert . ToInt32 ( useawayfork1 ) - Handtask . _f orkNo ) ;
#region 堆垛机
if ( ( Handtask . _d eviceOrder = = 4 ) | | ( Handtask . _d eviceOrder = = 5 ) )
{
rehidx = hidx + 1 + i ;
rehmindx = ccf . GetMonitorIndex ( rehidx , 4 ) ;
string bc = rehmindx . ToString ( ) ;
int bcl = bc . Length ;
for ( int j = 0 ; j < ( 6 - bcl ) ; j + + )
{
bc + = j . ToString ( ) ;
}
if ( Handtask . _d eviceOrder = = 4 ) //取货
{ //z-x-y
if ( x = = 1 )
{
//xx[i] = 1;
}
else
{
dv = dbo . ExceSQL ( string . Format ( "SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2})" , z , xx [ i ] , y ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count = = 0 )
{
Errtext = "堆垛机取货坐标在数据库不存在!" ;
return false ;
}
}
qcell = z . ToString ( ) + "-" + xx [ i ] . ToString ( ) + "-" + y . ToString ( ) ; //20101028
dbo . ExceSQL ( "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 + "," + rehidx + ",4," + rehmindx + "," + Handtask . _d eviceIndex
+ "," + Handtask . _d eviceOrder + "," + z + "," + xx [ i ] + "," + y + ",0,0,0,'" + useawayfork1 + "','" + bc + "')" ) ;
}
else if ( Handtask . _d eviceOrder = = 5 ) //送货
{ //z1-x1-y1
if ( x1 = = 1 )
{
//20130710xx1[i] = 1;
}
else
{
dv = dbo . ExceSQL ( "SELECT FID FROM ST_CELL WHERE (F_Z = " + z1 + ") AND (F_X = " + xx1 [ i ] + ") AND (F_Y = " + y1 + ")" ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count = = 0 )
{
Errtext = "堆垛机送货坐标在数据库不存在!" ;
return false ;
}
}
scell = z1 . ToString ( ) + "-" + xx1 [ i ] . ToString ( ) + "-" + y1 . ToString ( ) ; //20101028
dbo . ExceSQL ( "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 + "," + rehidx + ",4," + rehmindx + "," + Handtask . _d eviceIndex
+ "," + Handtask . _d eviceOrder + ",0,0,0," + z1 + "," + xx1 [ i ] + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')" ) ;
}
dbo . ExceSQL ( "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME) values('" +
bc + "'," + rehidx + ",4,-1,1," + Handtask . _d eviceIndex + ",'" + Handtask . _d eviceOrder + "','" + qcell + "'," + Handtask . _d eviceIndex + ",'" + scell + "','" + dtime + "')" ) ;
RecordMaxHandTaskFID ( rehidx ) ;
relfid [ i ] = rehidx ;
}
#endregion
}
else if ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 2 )
{
rehidx = hidx + 1 + i ;
rehmindx = ccf . GetMonitorIndex ( rehidx , 4 ) ;
string bc = rehmindx . ToString ( ) ;
int bcl = bc . Length ;
for ( int j = 0 ; j < ( 6 - bcl ) ; j + + )
{
bc + = j . ToString ( ) ;
}
string useawayfork1 = ( Handtask . _f orkNo + 1 + i ) . 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 + "," + rehidx + ",4," + rehmindx + "," + Handtask . _d eviceIndex
+ "," + Handtask . _d eviceOrder + "," + z + "," + x + "," + y + "," + z1 + "," + x1 + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')" ;
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('" +
bc + "'," + rehidx + ",4,-1,1," + Handtask . _d eviceIndex + ",'" + Handtask . _d eviceOrder + "','" + z . ToString ( ) + "-" + x . ToString ( ) + "-" + y . ToString ( )
+ "'," + Handtask . _ arrowLocation + ",'" + z1 . ToString ( ) + "-" + x1 . ToString ( ) + "-" + y1 . ToString ( ) + "','" + dtime + "'," + Handtask . _f orkNo + ")" ;
dbo . ExceSQL ( Sql ) ;
RecordMaxHandTaskFID ( rehidx ) ;
relfid [ i ] = rehidx ;
}
}
}
if ( ( ccf . GetDeviceKindIdx ( Handtask . _d eviceIndex ) = = 1 3 ) | | ( ccf . 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 ( ) ;
}
}
/// <summary>
/// 出入库模式修改
/// </summary>
/// <returns></returns>
public bool SendInOutMessageToPlc ( )
{
DataView dv = new DataView ( ) ;
try
{
dv = dboMan . ExceSQL ( string . Format ( "select * from T_InOutModel" ) ) . Tables [ 0 ] . DefaultView ;
if ( dv . Count > 0 )
{
for ( int i = 0 ; i < dv . Count ; i + + )
{
Model . MDevice md = Model . CGetInfo . GetDeviceInfo ( Convert . ToInt32 ( dv [ i ] [ "Device_Index" ] ) ) ;
if ( md . RunState . ToString ( ) ! = dv [ i ] [ "INOut_Value" ] . ToString ( ) )
{
WriteDBDataConveyor ( Convert . ToInt32 ( dv [ i ] [ "Device_Index" ] ) , "DB1" , dv [ i ] [ "INOut_Value" ] . ToString ( ) , out string errtext ) ;
if ( errtext ! = null )
{
CommonClassLib . CCarryConvert . WriteDarkCasket ( "opcclient" , "设备编号:" + Convert . ToInt32 ( dv [ i ] [ "Device_Index" ] ) . ToString ( ) ,
"写入的值:" + dv [ i ] [ "INOut_Value" ] . ToString ( ) + "异常信息:" + errtext . ToString ( ) , "PLC标识:" + devinfo . S7Connection . ToString ( ) ) ;
}
}
}
}
}
catch ( Exception ex )
{
}
return true ;
}
}
}