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

2262 lines
130 KiB

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using ICommLayer;
using CommLayerFactory;
using CommonLib;
namespace WcfControlMonitorLib
{
/// <summary>
/// Creator:Richard.liu
///
/// 一、下位机给上位机发送现场控制触摸屏申请信号:
/// 1-重发当前设备指令
/// 2-申请修改当前设备所执行任务的目标位置
/// 3-报告当前设备所执行的任务完成
/// 4-删除当前设备所执行的任务(托盘拿走)
/// 二、检测PLC创建自动调度任务请求
/// </summary>
public class CListenPLCAsk
{
char[] dd = new char[1] { '.' };//20101124
string[] DS;//20101124
string _listenPLCAskError="";
StringBuilder sql = new StringBuilder();
public string ListenPLCAskError
{
get { return _listenPLCAskError; }
set { _listenPLCAskError = value; }
}
DBOperator dboM =CStaticClass.dboM;
DBOperator dbo = CStaticClass.dbo;
CCommonFunction ccf = new CCommonFunction();
CGetState cgs = new CGetState();
ISendDeviceOrder sdo;
Model.MDevice devinfo;
public static event CDataSourceChangeEventHandler DataChange;
public static void OnDataChange(CDataChangeEventArgs e)
{
if (DataChange != null)
{
DataChange(null, e);
}
}
public static event RefreshMonitorEventHandler RefreshMonitor;
public static void OnRefreshMonitor(RefreshMonitorEventArgs e)
{
if (RefreshMonitor != null)
{
RefreshMonitor(e);
}
}
//20110331
//public ManageService.S_ManageService client = new ManageService.S_ManageService();
//public ManageService.S_ManageService clientOne = new ManageService.S_ManageService();
//public ManageService.S_ManageService clientApp = new ManageService.S_ManageService();
//20110331
public CListenPLCAsk()
{
//client.ManageStockCreateCompleteCompleted += new WcfControlMonitorLib.ManageService.ManageStockCreateCompleteCompletedEventHandler(client_ManageStockCreateCompleteCompleted);
//clientOne.ManageStockCreateCompleteCompleted += new WcfControlMonitorLib.ManageService.ManageStockCreateCompleteCompletedEventHandler(client_ManageStockCreateCompleteCompleted);
////client.ManageStockCreateApplyCompleted += new ControlSystem.ManageService.ManageStockCreateApplyCompletedEventHandler(client_ManageStockCreateApplyCompleted);
////clientApp.ManageStockCreateCompleteCompleted += new ControlSystem.ManageService.ManageStockCreateCompleteCompletedEventHandler(clientApp_ManageStockCreateCompleteCompleted);
//clientApp.ManageStockCreateApplyCompleted += new WcfControlMonitorLib.ManageService.ManageStockCreateApplyCompletedEventHandler(clientApp_ManageStockCreateApplyCompleted);
}
// public void client_ManageStockCreateCompleteCompleted(object sender, WcfControlMonitorLib.ManageService.ManageStockCreateCompleteCompletedEventArgs e)
// {
// //20110331
// if (e.Error != null)
// {
// _listenPLCAskError = DateTime.Now.ToString("u")+",CListenPLCAsk组垛完成异步回调,连接管理程序服务时发生错误:" + e.Error.Message;
// return;
// }
// //20110505一楼12035上的14001组跺完成后,需要下达12035--12036的送出命令
// }
//public void clientApp_ManageStockCreateApplyCompleted(object sender, WcfControlMonitorLib.ManageService.ManageStockCreateApplyCompletedEventArgs e)
//{
// //20110331
// if (e.Error != null)
// {
// _listenPLCAskError = DateTime.Now.ToString("u") + ",CListenPLCAsk条码申请任务异步回调,连接管理程序服务时发生错误:" + e.Error.Message;
// return;
// }
// sql.Remove(0, sql.Length);
// sql.Append("SELECT F_DBW2Address, T_Base_PLC_Ask.F_DeviceIndex,T_Base_PLC_Ask.F_BindingDevice, F_Askkind,F_TaskIndex,F_BarCode,F_Remark").Append(
// ",F_FirstProject,F_BoxBarcode,F_TempFirstProject FROM T_Base_Device,T_Base_PLC_Ask").Append(
// " where T_Base_Device.F_DeviceIndex=T_Base_PLC_Ask.F_DeviceIndex and T_Base_Device.F_DeviceIndex=").Append(Convert.ToInt32(e.sDeviceCode)).Append(
// " order by T_Base_Device.F_DeviceIndex desc");
// DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
// if (dv.Count == 0) return;
// int i = 0;
// int dcode = Convert.ToInt32(dv[i]["F_BindingDevice"]);
// string barcode = dv[i]["F_BarCode"].ToString();
// StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
// dtime.Remove(dtime.Length - 1, 1);
// switch (e.ManageStockCreateApplyResult)
// { //F_BoxBarcode叠盘机输送机22016;F_TempFirstProject不叠盘目标输送机22018;F_Remark叠盘机
// case 1://当前箱叠盘22015-22016
// //插入临时调度任务T_Manage_Task(监控下的调度任务):
// sql.Remove(0, sql.Length);
// sql.Append("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,").
// Append("FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) ").
// Append("values(").Append(ccf.GetTempManageIdx()).Append(",'").Append(barcode).Append("',1,2,'").Append(ccf.GetWarehouseIndex()).Append("','").Append(dcode).Append("','-','").Append(ccf.GetWarehouseIndex()).Append("','"
// ).Append(dv[i]["F_BoxBarcode"]).Append("','-',0,0,'-','").Append(dtime).Append("')");//20101028
// dbo.ExecuteSql(sql.ToString());
// break;
// case 2://当前箱不叠盘,单箱走22015-22018
// sql.Remove(0, sql.Length);
// sql.Append("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,").
// Append("FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) ").
// Append("values(").Append(ccf.GetTempManageIdx()).Append(",'").Append(barcode).Append("',1,2,'").Append(ccf.GetWarehouseIndex()).Append("','").Append(dcode).Append("','-','").Append(ccf.GetWarehouseIndex()).Append("','"
// ).Append(dv[i]["F_TempFirstProject"]).Append("','-',0,0,'-','").Append(dtime).Append("')");//20101028
// dbo.ExecuteSql(sql.ToString());
// break;
// case 3://叠盘机内箱跺强制完成22016-22018,当前箱叠盘22015-22016
// ////////////////叠盘机内箱跺强制完成
// object ob = dbo.GetSingle("SELECT F_BarCode FROM T_Base_PLC_Ask WHERE (F_BarCode <> '-') and (F_DeviceIndex=" + dv[i]["F_Remark"] + ")");
// if (ob != null)
// {
// //20110505一楼强制叠盘完成下达在叠盘机14001
// int dpjcode = 0;
// if (dv[i]["F_Remark"].ToString() == "14001")
// {
// dpjcode = 14001;
// }
// else
// {
// dpjcode = Convert.ToInt32(dv[i]["F_BoxBarcode"]);
// }
// int hidx = ccf.GetTempManageIdx();
// int hmindx = ccf.GetMonitorIndex(hidx, 2);
// string ah = string.Format("D-{0}.0;D{1}.0;I{0};I{1}", dv[i]["F_Remark"].ToString(), dv[i]["F_BoxBarcode"].ToString());
// sql.Remove(0, sql.Length);
// sql.Append("insert into T_Monitor_Task(F_MonitorTaskLevel,F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex,").
// Append("F_DeviceIndex,F_DeviceCommandIndex,F_UseAwayFork,F_AheadDetect,F_RunningLock,F_TxtParam) ").
// Append("values(2,").Append(GetRouteIDsub(Convert.ToInt32(dv[i]["F_BoxBarcode"]))).Append(",").Append(hidx).Append(",2,").Append(hmindx).Append(",").Append(dpjcode).
// Append(",8,'-','").Append(ah).Append("','").Append(dcode.ToString()).Append("','").Append(ob.ToString()).Append("')");
// dbo.ExecuteSql(sql.ToString());
// sql.Remove(0, sql.Length);
// sql.Append("update T_Base_device set F_LockedState=").Append(hmindx).Append(
// " where F_DeviceIndex=").Append(dcode);
// dbo.ExecuteSql(sql.ToString());
// sql.Remove(0, sql.Length);
// sql.Append("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,").
// Append("FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FIntoStepOK) ").
// Append("values(").Append(hidx).Append(",'").Append(ob.ToString()).Append("',1,2,'").Append(ccf.GetWarehouseIndex()).Append("','").Append(Convert.ToInt32(dv[i]["F_BoxBarcode"])).Append("','-','").Append(ccf.GetWarehouseIndex()).Append("','"
// ).Append(dv[i]["F_TempFirstProject"]).Append("','-',0,0,'-','").Append(dtime).Append("','1')");
// dbo.ExecuteSql(sql.ToString());
// }
// ////////////////当前箱叠盘
// sql.Remove(0, sql.Length);
// sql.Append("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,").
// Append("FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) ").
// Append("values(").Append(ccf.GetTempManageIdx()).Append(",'").Append(barcode).Append("',1,2,'").Append(ccf.GetWarehouseIndex()).Append("','").Append(dcode).Append("','-','").Append(ccf.GetWarehouseIndex()).Append("','"
// ).Append(dv[i]["F_BoxBarcode"]).Append("','-',0,0,'-','").Append(dtime).Append("')");
// dbo.ExecuteSql(sql.ToString());
// break;
// default:
// _listenPLCAskError = "叠盘机前的输送机:" + dcode.ToString() + "的扫描器向管理申请入库任务时:管理程序服务反馈的处理结果不正确!";
// return;
// }
//}
//20110331
/// <summary>
/// 检测PLC创建自动调度任务请求:1:下位机给上位机发送现场控制触摸屏申请信号;2:叠盘机上报叠盘完成;
/// 3:PLC码盘完成;4:条码扫描器申请入库任务;5:拆盘机申请空托盘组出库
/// </summary>
public void DealwithPLCAsk()
{
//20091128
int[] bc;
StringBuilder[] wv = {new StringBuilder("2") };
StringBuilder[] witemnames ={ new StringBuilder("") };
DataView dv; DataView dvbc; DataView dvm;
DataView dplc; DataView dvma;
DataView dvp; DataView dvs;
try
{
sql.Remove(0, sql.Length);
sql.Append("SELECT T_Base_PLC_Ask.F_DeviceIndex,T_Base_PLC_Ask.F_BindingDevice, F_Askkind,F_TaskIndex,F_BarCode,F_Remark" ).Append(
",F_FirstProject,F_BoxBarcode,F_TempFirstProject FROM T_Base_Device,T_Base_PLC_Ask").Append(
" where T_Base_Device.F_DeviceIndex=T_Base_PLC_Ask.F_DeviceIndex " ).Append(
" order by T_Base_Device.F_DeviceIndex desc");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
int deviceindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]);
devinfo = Model.CGetInfo.GetDeviceInfo(deviceindex);
witemnames[0].Remove(0, witemnames[0].Length);
witemnames[0] .Append(Model.CGeneralFunction.DBGet).Append(",byte").Append(Convert.ToString(devinfo.Dbw2Address + 0));
sdo = CommModeCreate.CreateSendDeviceOrder(deviceindex);
#region 下位机给上位机发送现场控制触摸屏申请信号
if (dv[i]["F_Askkind"].ToString() == "1")//下位机给上位机发送现场控制触摸屏申请信号
{
//gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
//bc = gds.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]), 64777);
bc = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
if (bc == null) continue;
//bc[3];//设备索引(当前申请设备的索引)
//bc[4];//任务号(需要修改目标位置的任务号)
int bcz = 0;
string barcode = string.Empty;
for (int j = 5; j < 15; j++)
{
bcz = bcz + bc[j];
barcode += Convert.ToChar(bc[j]);
}
#region 申请重发当前设备指令
if (bc[2] == 1)//命令字
{
//20090925
int fid = 0;
int mankind = 0;
if (bc[4] > 0)
{
//20091128
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,F_RouteID FROM T_Monitor_Task WHERE F_MonitorIndex = '" ).Append(
bc[4] ).Append( "' order by F_MonitorIndex asc");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{//20090925
fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
mankind = ccf.GetManageTaskKindIndexFromMonitor(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
if (DeviceInRouteSub(bc[3], Convert.ToInt32(dvbc[0]["F_RouteID"])) == true)
{
RestoreDevice(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
//记录任务号
sql.Remove(0, sql.Length);
sql.Append("update T_Base_PLC_Ask set F_TaskIndex='" ).Append( bc[4]
).Append( "' where F_DeviceIndex=" ).Append( Convert.ToInt32(dv[i]["F_DeviceIndex"]));
dbo.ExceSQL(sql.ToString());
}
else
{
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation=" ).Append( bc[3] ).Append( " where FID=" ).Append( fid ).Append( " and F_ManageTaskKindIndex=" ).Append( mankind);
dbo.ExceSQL( sql.ToString());
//判断是否需要向管理申请改道:如果本主路径的所有子路经都不可用就需要向管理申请改道,否则:调度选择一个可用的子路经,自行改道
//20091005
if (GetUseableRouteIDSub(fid, mankind, bc[3]) == false)
{
if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1")
{//20091107
GetUsableDestination(fid, mankind);
}
}
}
}
}
else if (bcz > 0)
{// 20090928 and F_DeviceIndex=" + bc[3] + "
//使用条码查询调度任务号,向发送bc[3]设备索引(当前申请设备的索引)重发命令
//20091128
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,F_RouteID FROM T_Monitor_Task WHERE F_TxtParam = '" ).Append(
barcode ).Append( "' order by F_MonitorIndex asc");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{//20090925
fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
mankind = ccf.GetManageTaskKindIndexFromMonitor(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
if (DeviceInRouteSub(bc[3], Convert.ToInt32(dvbc[0]["F_RouteID"])) == true)
{
if (dvbc[0]["F_NumParam4"].ToString() == bc[3].ToString())
{
AssociateComplete(Convert.ToInt32(dvbc[0]["F_DeviceIndex"]), Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
}
else
{
RestoreDevice(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
//记录新条码
sql.Remove(0, sql.Length);
sql.Append("update T_Base_PLC_Ask set F_BarCode='" ).Append( barcode
).Append( "' where F_DeviceIndex=" ).Append( Convert.ToInt32(dv[i]["F_DeviceIndex"]));
dbo.ExceSQL(sql.ToString());
}
}
else
{
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation=" ).Append( bc[3] ).Append( " where FID=" ).Append( fid ).Append( " and F_ManageTaskKindIndex=" ).Append( mankind);
dbo.ExceSQL( sql.ToString());
//判断是否需要向管理申请改道:如果本主路径的所有子路经都不可用就需要向管理申请改道,否则:调度选择一个可用的子路经,自行改道
//20091005
if (GetUseableRouteIDSub(fid, mankind, bc[3]) == false)
{
if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1")
{//20091107
GetUsableDestination(fid, mankind);
}
}
}
}
}
wv[0].Remove(0, wv[0].Length);
wv[0] .Append( "4");
sdo.WriteDBData(witemnames, wv);
}
#endregion
#region 申请修改当前设备所执行任务目标位置
else if (bc[2] == 2)//命令字
{
//20090925
int fid = 0;
int mankind = 0;
if (bc[4] > 0)
{ //20091128
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(
bc[4] ).Append( "' order by F_MonitorIndex asc");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{
fid = ccf.GetManageTaskIndexfromMonitor(bc[4]);
mankind = ccf.GetManageTaskKindIndexFromMonitor(bc[4]);
}
}
else if (bcz > 0)
{
//使用条码查询调度任务号,向发送bc[3]设备索引(当前申请设备的索引)重发命令
//20091128
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");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{
fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
mankind = ccf.GetManageTaskKindIndexFromMonitor(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
}
}
else
{
continue;
}
////申请修改当前设备所执行任务目标位置的F_TaskIndex重复时不允许相应申请
//if (bc[4] == Convert.ToInt32(dv[i]["F_TaskIndex"]))
//{
// continue;
//}
//记录申请的设备索引bc[3]到调度任务的FCurrentLocation;//设备索引(当前申请设备的索引)
//20090925
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation=" ).Append( bc[3] ).Append( " where FID=" ).Append( fid ).Append( " and F_ManageTaskKindIndex=" ).Append( mankind);
dbo.ExceSQL( sql.ToString());
//判断是否需要向管理申请改道:如果本主路径的所有子路经都不可用就需要向管理申请改道,否则:调度选择一个可用的子路经,自行改道
//20091005
if (GetUseableRouteIDSub(fid, mankind, bc[3]) == false)
{
if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1")
{//20091107
GetUsableDestination(fid, mankind);
}
}
wv[0].Remove(0, wv[0].Length);
wv[0].Append("5");
sdo.WriteDBData(witemnames, wv);
}
#endregion
#region PLC上报完成
else if (bc[2] == 3)
{
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
//20090915
if (bc[4] > 0)
{
//20090915 and F_DeviceIndex=" + bc[3] + "
//20091128
sql.Remove(0, sql.Length);
sql.Append("SELECT F_MonitorIndex,F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," ).Append(
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" ).Append(
bc[4] ).Append( "' order by F_MonitorIndex asc");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{
AssociateComplete(Convert.ToInt32(dvbc[0]["F_DeviceIndex"]), bc[4]);
}
}
else if (bcz > 0)
{
//使用条码查询调度任务号
//20091128
sql.Remove(0, sql.Length);
sql.Append("SELECT F_MonitorIndex,F_DeviceIndex,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");
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{
if (dvbc[0]["F_NumParam4"].ToString() == bc[3].ToString())
{
AssociateComplete(Convert.ToInt32(dvbc[0]["F_DeviceIndex"]), Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
}
else
{
wv[0].Remove(0, wv[0].Length);
wv[0].Append("37");
}
}
}
//20090915
sdo.WriteDBData(witemnames, wv);
}
#endregion
#region 删除当前设备所执行的任务(4)(托盘拿走)
else if (bc[2] == 4)//命令字
{
//20090915
if (bc[4] > 0)
{
int fid = ccf.GetManageTaskIndexfromMonitor(bc[4]);
int mti = ccf.GetManageTaskKindIndexFromMonitor(bc[4]);
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 " ).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(dv[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);
}
}
}
}
else if (bcz > 0)
{
//通知管理程序删除整个调度任务
//20091128
sql.Remove(0, sql.Length);
sql.Append("SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex " ).Append(
" FROM T_Monitor_Task Where F_TxtParam ='" ).Append( barcode ).Append( "'");
dvm = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvm.Count > 0)
{
int fid = Convert.ToInt32(dvm[0]["F_ManageTaskIndex"]);
int mti = Convert.ToInt32(dvm[0]["F_ManageTaskKindIndex"]);
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());
for (int ii = 0; ii < dvm.Count; ii++)
{
if (Convert.ToInt32(dv[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);
}
}
}
}
wv[0].Remove(0, wv[0].Length);
wv[0].Append("3");
sdo.WriteDBData(witemnames, wv);
}
#endregion
}
#endregion
if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1")
{//20091107
#region 上位机监测到下位机故障堵塞交通,自动变更路径:用于一个起点多个终点的复杂输送机构
//F_Askkind=9
//监听某一个调度任务在十字路口处停留超过30秒,首先检测自身没故障,然后检测进入巷道的输送机构与堆垛机是否故障,
//如果任意一个设备有故障,申请改道。
//F_FirstProject巷道输送机组;F_Remark堆垛机;F_BoxBarcode巷道;F_BindingDevice次数
if (dv[i]["F_Askkind"].ToString() == "9")
{
int[] state = CStaticClass.GetDeviceState(deviceindex);
int errCount = 0;
string[] sp; char[] cc = new char[1] { ';' };
if (state[1] >= 30)
{
//20091128
sp = null;
cc = null;
state = null;
continue;
}
if (state[2].ToString() == dv[i]["F_TaskIndex"].ToString())
{
sql.Remove(0, sql.Length);
sql.Append("update T_Base_PLC_Ask set F_BindingDevice=F_BindingDevice+1 where F_DeviceIndex=" ).Append( deviceindex);
dbo.ExceSQL(sql.ToString());
}
else
{
sql.Remove(0, sql.Length);
sql.Append("update T_Base_PLC_Ask set F_BindingDevice=0,F_TaskIndex=" ).Append( state[2] ).Append( " where F_DeviceIndex=" ).Append( deviceindex);
dbo.ExceSQL(sql.ToString());
}
//20091128
sql.Remove(0, sql.Length);
sql.Append("select F_BindingDevice from T_Base_PLC_Ask where F_DeviceIndex=" ).Append( deviceindex ).Append( " and F_BindingDevice>=100");
dplc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dplc.Count > 0)
{
//20091128
sql.Remove(0, sql.Length);
sql.Append("select FID, F_ManageTaskKindIndex,FENDDEVICE fromT_Manage_Task where F_ManageTaskKindIndex=" ).Append(
ccf.GetManageTaskKindIndexFromMonitor(state[2]) ).Append( " and fid=" ).Append( ccf.GetManageTaskIndexfromMonitor(state[2])
).Append( " and FENDDEVICE=" ).Append( dv[i]["F_BoxBarcode"] );
dvma = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvma.Count > 0)
{
int[] state1 = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_Remark"]));
if (state1[1] >= 30)
{
errCount = 1;
}
sp = dv[i]["F_FirstProject"].ToString().Split(cc);
for (int jj = sp.GetLowerBound(0); jj <= sp.GetUpperBound(0); jj++)
{
state1 = CStaticClass.GetDeviceState(Convert.ToInt32(sp[jj]));
if (state1[1] >= 30)
{
errCount = 1;
break;
}
}
if (errCount > 0)
{
//bool havegoods = true;
//for (int jj = sp.GetLowerBound(0); jj <= sp.GetUpperBound(0); jj++)
//{
// devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(sp[jj]));
// havegoods = (havegoods && devinfo.HaveGoods);
//}
//if (havegoods == true)
//{
//申请改道
GetUsableDestination(ccf.GetManageTaskIndexfromMonitor(state[2]), ccf.GetManageTaskKindIndexFromMonitor(state[2]));
//}
}
//20091128
state1 = null;
}
}
//20091128
sp = null;
cc = null;
state = null;
}
#endregion
}
#region 获取一号工程码信息F_Askkind=8
if (dv[i]["F_Askkind"].ToString() == "8")
{
//20091128
sql.Remove(0, sql.Length);
sql.Append("SELECT F_DeviceIndex, F_FirstProject,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_BindingDevice = " ).Append( dv[i]["F_BindingDevice"] ).Append( ")");
dvp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvp.Count > 0)
{
//gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dvp[0]["F_DeviceIndex"]));
//string bcp = gds.GetStringData(Convert.ToInt32(dvp[0]["F_DeviceIndex"]), 64775);
string bcp = CStaticClass.GetStringData(Convert.ToInt32(dvp[0]["F_DeviceIndex"]));
if (bcp == null)
{
continue;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceindex.ToString(), bcp);
string bar1 = "", bar2 = "";
string ExceptionCode = "0";
bar1 = bcp.Substring(0, 16);
bar2 = bcp.Substring(16, 16);
if ((bar1 == "0000000000000000") || (bar1 == "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"))
{
if (dvp[0]["F_HaveFirstProject"].ToString() == "1")
{
ExceptionCode = "800";
}
else
{
ExceptionCode = "0";
}
bcp = "";
}
else
{
if (dvp[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 (dvp[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( dvp[0]["F_BindingDevice"] ).Append( ")");
dbo.ExceSQL(sql.ToString());
}
//把一号工程码暂存在临时字段
sql.Remove(0, sql.Length);
sql.Append("UPDATE T_Base_PLC_Ask SET F_TempFirstProject = '" ).Append( bcp ).Append( "' WHERE (F_Askkind = 8) AND (F_BindingDevice = " ).Append( dvp[0]["F_BindingDevice"] ).Append( ")");
dbo.ExceSQL(sql.ToString());
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
}
}
#endregion
#region 成品码垛结束,向管理申请入库任务
//把码盘位输送机,托盘条码,一号工程码信息,码垛数量整合生成向管理申请入库任务
//清空托盘条码、一号工程码信息、异常码信息F_Remark
if (dv[i]["F_Askkind"].ToString() == "3")//成品码垛结束,向管理申请入库任务
{
int[] state = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_BindingDevice"]));
if (state == null)
{
//20091128
state = null;
continue;
}
if (state[1] == 1)
{
//20091128
state = null;
continue;
}
if (CStaticClass.GetDevicePhotoelectric(ccf.GetBindingDeviceIndexOut(Convert.ToInt32(dv[i]["F_BindingDevice"]))) != 1)
{
//20091128
state = null;
continue;
}
//gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
//bc = gds.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]), 64774);
bc = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
if (bc == null)
{
//20091128
state = null;
continue;
}
//bc[2]机器人动作:1-取货完成;2-放货完成;3-托盘码垛完成
//bc[3]托盘码垛数量
if (bc[2] == 1)//取货完成
{
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceindex.ToString(), dv[i]["F_BindingDevice"].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_BindingDevice = " ).Append( dv[i]["F_BindingDevice"] ).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_BindingDevice = " ).Append( dv[i]["F_BindingDevice"] ).Append( ")");
dbo.ExceSQL(sql.ToString());
}
if (bc[2] == 3)//码盘结束
{
//20090915
if (state[1] >= 30)
{
//20091128
state = null;
continue;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceindex.ToString(), dv[i]["F_BindingDevice"].ToString() + "码盘结束");
//读取托盘条码;
//gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dv[i]["F_BindingDevice"].ToString()+"6"));
//string barcode = gds.GetStringData(Convert.ToInt32(dv[i]["F_BindingDevice"].ToString() + "6"), 64773);
string barcode = CStaticClass.GetStringData(Convert.ToInt32(dv[i]["F_BindingDevice"].ToString() + "6"));
//20090915
if ((barcode == null) || (barcode == "\0\0\0\0\0\0\0\0\0\0"))
{
//20091128
state = null;
_listenPLCAskError = dv[i]["F_BindingDevice"].ToString() + ":只读到码盘结束,但没读到对应的托盘条码信息!发生时间:" + DateTime.Now.ToString("u");
continue;
}
sql.Remove(0, sql.Length);
sql.Append( "SELECT FPALLETBARCODE,FSTARTDEVICE FROM T_Manage_Task where FSTARTDEVICE=" ).Append( dv[i]["F_BindingDevice"] ).Append( " AND FPALLETBARCODE='" ).Append( barcode ).Append( "'");
//20091128
dvs = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvs.Count > 0)
{
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
_listenPLCAskError = dv[i]["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( dv[i]["F_BindingDevice"] ).Append( " AND STOCK_BARCODE='" ).Append( barcode ).Append( "'");
dvs = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvs.Count > 0)
{
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
_listenPLCAskError = dv[i]["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( dv[i]["F_BindingDevice"] ).Append( ")");
dvp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvp.Count > 0)
{
BoxBarcode = dvp[0]["F_BoxBarcode"].ToString();
FirstProject = dvp[0]["F_FirstProject"].ToString();
if (FirstProject.Length > 0)
{
if (FirstProject.Substring(0, 1) == ";")
{
if (FirstProject.Length > 1)
{
FirstProject = FirstProject.Substring(1);
}
}
}
ExceptionCode = dvp[0]["F_Remark"].ToString();
}
int dcode = Convert.ToInt32(dv[i]["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 = dboM.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvbc.Count > 0)
{
_listenPLCAskError = "向管理申请入库任务时,申请的任务已经存在!";
continue;
}
//向管理申请入库任务
//20091128
//20101108int fid = dboM.GetManageTableIndex("IO_CONTROL_APPLY");
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( bc[3].ToString() ).Append( ";" ).Append( ExceptionCode).Append(";1" ).Append( "')");//;
try
{
dboM.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( dv[i]["F_BindingDevice"] ).Append( ")");
dbo.ExceSQL(sql.ToString());
}
catch (Exception ex)
{
_listenPLCAskError = "向管理申请入库任务:" + ex.Message;
continue;//20091218
}
#endregion
#region 设置码垛通道
DataView md = dboM.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 <= 12; j++)
{
if (boxcode.Length < 13)
{
boxcode += "0";
}
}
int devcount = 28;
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
}
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
}
#endregion
//20091128
#region 甲乙丙班产量统计
if (dv[i]["F_Askkind"].ToString() == "10")
{
CStaticClass.GetDeviceState(deviceindex);
}
#endregion
//20100118
#region 成品出库通道数量统计
if (dv[i]["F_Askkind"].ToString() == "11")
{
CStaticClass.GetDeviceState(deviceindex);
}
#endregion
#region 条码扫描器申请入库任务
if (dv[i]["F_Askkind"].ToString() == "4")//条码扫描器申请入库任务
{
int[] state;
state = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_BindingDevice"]));
if (state == null)
{
continue;
}
if ((state[1] >= 30) || (state[1] == 1))
{
//20091128
state = null;
continue;
}
//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;
continue;
}
}
else
{//20110510
_listenPLCAskError = "条码扫描器申请入库任务:" + dv[i]["F_BindingDevice"].ToString() + ",出口开关没填写记录!";
continue;
}
//扫到的条码(全部非零)与记录的条形码不相等就认为是新条码
//gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
//string barcode = gds.GetStringData(Convert.ToInt32(dv[i]["F_DeviceIndex"]), 64777);
string barcode = CStaticClass.GetStringData(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
int dcode = Convert.ToInt32(dv[i]["F_BindingDevice"]);
if (barcode == null)
{
continue;
}
if ((barcode == "\0\0\0\0\0\0\0\0\0\0") || (barcode == "?/////////") || (barcode == "1111111111"))
{
#region 没扫到码送出到指定位置//20101208
StringBuilder aheadDetect = new StringBuilder();
_listenPLCAskError = dcode.ToString() + ",没扫到条码!" + "时间," + DateTime.Now.ToLongTimeString();
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:" + _listenPLCAskError);
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), "没扫到条码!");
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
continue;
//20110510
//}
//else if (dcode == 22003)//20110331
//{
// aheadDetect.Append("D-22003.0;I22003");
//}
//else//22016
//{
// aheadDetect.Append("D-22016.0;I22016");
//}
//sql.Remove(0, sql.Length);
//sql.Append("insert into T_Base_NoneBarcodeDealwith(F_FirstByte,F_MonitorIndex,F_OrderIndex,F_DeviceIndex,F_ArrowDevice,F_AheadDetect)values(")
// .Append("1,").Append(ccf.GetMonitorIndex(0, 0)).Append(",6,").Append(dcode).Append(",").Append(dv[i]["F_Remark"].ToString()).Append(",'").Append(aheadDetect.ToString()).Append("')");
//dbo.ExecuteSql(sql.ToString());
////sdo = CommModeCreate.CreateSendDeviceOrder(dcode);
////sdo.SendDeviceOrder(2, 0, 0, dcode, 0);
////sdo.SendDeviceOrder(1, ccf.GetMonitorIndex(0,0), 6, dcode, Convert.ToInt32(dv[i]["F_Remark"].ToString()));
//_listenPLCAskError = DateTime.Now.ToLongTimeString() +","+dcode.ToString()+ ",没扫到条码,生成自动送出到异常口任务!";
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), "没扫到条码,生成自动送出到异常口任务!");
//wv[0].Remove(0, wv[0].Length);
//wv[0].Append("2");
//sdo.WriteDBData(witemnames, wv);
//continue;
#endregion
}
//20091128
int bcz = 0;
for (int j = 0; j < 10; j++)
{
if (barcode.Substring(j, 1) != "0")
{
bcz = 1;
break;
}
}
if (bcz == 0)
{//20091128
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
continue;
}
//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);
continue;
}
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);
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), barcode + ":上次PLC搬运错误,重新执行入库条码扫描!");
continue;
}
else
{//条码比对和报告完成
BarcodeConfirm(deviceindex, dcode, barcode, dv[i]["F_Remark"].ToString());
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
continue;
}
}
else
{
#region 特定设备条码报告完成的,扫到码,但没任务,需要报警
//_listenPLCAskError = dcode.ToString() + ",时间"+ DateTime.Now.ToLongTimeString() + ",扫到码,但没任务,请人工检查!";
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:" + _listenPLCAskError);
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), "扫到码,但没任务,请人工检查!");
//wv[0].Remove(0, wv[0].Length);
//wv[0].Append("2");
//sdo.WriteDBData(witemnames, wv);
//continue;
#endregion
#region 扫码申请任务
#endregion
}
//20101124
#region 向管理申请入库任务
dvbc = dboM.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);
_listenPLCAskError = "输送机:" + dcode.ToString() + "的扫描器向管理申请入库任务时:调度任务有相同的托盘号:" + barcode + "尚未处理!";
continue;
}
//向管理申请入库任务
//20100905 CONTROL_APPLY_TYPE=1
//20101108int fid = dboM.GetManageTableIndex("IO_CONTROL_APPLY");
//20101124
StringBuilder dtime =new StringBuilder( DateTime.Now.ToString("u"));
dtime.Remove(dtime.Length - 1,1);
//20110510
int apptype = 1;
if (deviceindex == 16004)
{
apptype = 2;
}
object[] ob = new object[7] {apptype,dcode,barcode,0, dtime,"",ccf.GetWarehouseIndex()};
try
{
dboM.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));
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);
}
//20101124
catch (Exception ex)
{
_listenPLCAskError = "向管理申请入库任务:" + ex.Message;
}
#endregion
//20110331
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), barcode);
}
#endregion
#region 叠盘组垛完成
if (dv[i]["F_Askkind"].ToString() == "2")
{
//20110331叠盘完成 叠盘机下输送机空闲时,读叠盘机状态
int[] sst = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_BindingDevice"]));
if (sst == null)
{
continue;
}
else
{
if (sst[1] != 0)
{
continue;
}
}
sst = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
if (sst != null)
{
//20110331叠盘完成
if (sst[1] == 2)
{//上报F_BarCode叠在一起的N个条码给管理;叠盘机记录的条码信息清空
#region 向管理申请入库任务
witemnames[0].Remove(0, witemnames[0].Length);
witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(",byte").Append(Convert.ToString(devinfo.Dbw2Address + 1));
wv[0].Remove(0, wv[0].Length);
wv[0].Append("0");
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
dtime.Remove(dtime.Length - 1, 1);
try
{
//20110331
if (dv[i]["F_BarCode"].ToString() != "-")
{
//if (Convert.ToInt32(dv[i]["F_DeviceIndex"]) == 24002)
//{
// client.ManageStockCreateCompleteAsync(dv[i]["F_BindingDevice"].ToString(), dv[i]["F_BarCode"].ToString());
//}
//else
//{//14001
// clientOne.ManageStockCreateCompleteAsync(dv[i]["F_BindingDevice"].ToString(), dv[i]["F_BarCode"].ToString());
//}
}
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '-' WHERE (F_DeviceIndex = {0})", Convert.ToInt32(dv[i]["F_DeviceIndex"])));
sdo.WriteDBData(witemnames, wv);
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘完成", deviceindex.ToString(), dv[i]["F_BarCode"].ToString());
//20110331
}
catch (Exception ex)
{//20110602
_listenPLCAskError = DateTime.Now.ToString("u")+dv[i]["F_BindingDevice"].ToString()+"|"+dv[i]["F_BarCode"].ToString()+"叠盘完成,调用ManageStockCreateCompleteAsync时:" + ex.Message;
}
#endregion
}
}
}
#endregion
#region 叠盘机前的条码扫描器申请入库任务
if (dv[i]["F_Askkind"].ToString() == "7")//叠盘机前的条码扫描器申请入库任务
{
int[] state;
state = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_BindingDevice"]));
if (state == null)
{
continue;
}
if ((state[1] >= 30) || (state[1] == 1))
{
//20091128
state = null;
continue;
}
//20101118
DS = ccf.GetBindingDeviceIndexOut(Convert.ToInt32(dv[i]["F_BindingDevice"])).Split(dd);
if (DS.GetLength(0) > 1)
{
int devicebyte = 0; int devbit = 0;
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
if (CStaticClass.GetDevicePhotoelectric(devicebyte, devbit) != 1)
{
//20091128
state = null;
}
}
else
{//20110510
_listenPLCAskError = "叠盘机前的条码扫描器申请入库任务:" + dv[i]["F_BindingDevice"].ToString() + ",出口开关没填写记录!";
continue;
}
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
//扫到的条码(全部非零)与记录的条形码不相等就认为是新条码
string barcode = CStaticClass.GetStringData(Convert.ToInt32(dv[i]["F_DeviceIndex"]));
int dcode = Convert.ToInt32(dv[i]["F_BindingDevice"]);
if (barcode == null)
{
continue;
}
if ((barcode == "\0\0\0\0\0\0\0\0\0\0") || (barcode == "?/////////") || (barcode == "1111111111"))
{
//20110510
_listenPLCAskError = dcode.ToString() + ",没扫到条码!" + "时间" + DateTime.Now.ToLongTimeString();
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:" + _listenPLCAskError);
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘前条码申请任务", dcode.ToString(), "没扫到条码!");
sdo.WriteDBData(witemnames, wv);
continue;
}
//20110331有叠盘任务没有完成,等待。 F_BoxBarcode叠盘机输送机22016;F_TempFirstProject不叠盘目标输送机22018;F_Remark叠盘机
if (dbo.GetSingle(string.Format("SELECT FID FROM T_Manage_Task WHERE (FSTARTDEVICE = '{0}')", dcode.ToString())) != null)
{
continue;
}
//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
{
sdo.WriteDBData(witemnames, wv);
continue;
}
int bcz = 0;
for (int j = 0; j < 10; j++)
{
if (barcode.Substring(j, 1) != "0")
{
bcz = 1;
break;
}
}
if (bcz == 0)
{
sdo.WriteDBData(witemnames, wv);
continue;
}
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
{
sdo.WriteDBData(witemnames, wv);
continue;
}
#region 向管理申请入库任务
#region 获取叠盘机探盘光电开关值
//1、PLC认为有,上位机认为没有,报警,人工清零;2、PLC认为没有,上位机认为有,直接把记录的清掉
//F_Remark记录叠盘机设备索引,叠盘机的F_BarCode里记录以经叠好的条码组"|"分割
//20110331
int tw = CStaticClass.GetDevicePhotoelectric(Convert.ToInt32(dv[i]["F_Remark"]), 0);//叠盘机是否有盘
object ob = dbo.GetSingle("SELECT F_BarCode FROM T_Base_PLC_Ask WHERE (F_BarCode <> '-') and (F_DeviceIndex=" + dv[i]["F_Remark"] + ")");
if (ob != null && tw == 0)//PLC认为没有,上位机认为有
{
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask set F_BarCode = '-' WHERE (F_DeviceIndex={0})", Convert.ToInt32(dv[i]["F_Remark"])));
ob = null;//20110331
}
//20110331
else if (ob == null && tw == 1)//PLC认为有,上位机认为没有,报警,人工把叠盘机清零
{
wv[0].Remove(0, wv[0].Length);
wv[0].Append("2");
sdo.WriteDBData(witemnames, wv);
_listenPLCAskError = "输送机:" + dcode.ToString() + "的扫描器向管理申请入库任务时:叠盘机认为有托盘,但数据库内没有托盘条码的记忆,请人工核对叠盘机计数器!";
continue;
}
#endregion
//20110602增加叠盘机满盘(青海超过条码长度10的就是两个盘了)不向管理申请
if (ob != null)
{
if (ob.ToString().Length > 10)
{
continue;
}
}
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
dtime.Remove(dtime.Length - 1, 1);
string barcodeAll = string.Empty;
if (ob != null)//上位机认为有
{
barcodeAll = ob.ToString() + "|" + barcode;
}
else
{
barcodeAll = barcode;
}
//ob = new object[7] { 2, dcode, barcode, 0, dtime, tw.ToString(), ccf.GetWarehouseIndex() };
try
{
//F_BoxBarcode叠盘机输送机22016;F_TempFirstProject不叠盘目标输送机22018;F_Remark叠盘机
//20110331
//clientApp.ManageStockCreateApplyAsync(barcodeAll, deviceindex.ToString());
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '{0}' WHERE (F_DeviceIndex = {1})", barcode, deviceindex));
sdo.WriteDBData(witemnames, wv);
}
//20110602
catch (Exception ex)
{
_listenPLCAskError = DateTime.Now.ToString("u")+","+barcodeAll+"叠盘机前的条码申请任务,调用ManageStockCreateApplyAsync时:" + ex.Message;
}
#endregion
//20110331
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘机前的条码申请任务", dcode.ToString(), barcodeAll);
}
#endregion
}
}
catch (Exception ex)
{
_listenPLCAskError = "监听PLC请求时:" + ex.Message;
}
finally
{
bc=null;
wv = null;
witemnames = null;
dv=null;
dvbc=null;
dvm=null;
dplc=null;dvma=null;
dvp=null; dvs=null;
}
}
void RestoreDevice(int mindex)
{
int DeviceIdx, devKind;
sql.Remove(0, sql.Length);
sql.Append("select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=" ).Append( mindex);
DataView 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);
DataView 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"]));
DataView 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
dv2 = null;
//再复位自己
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( "'");
DataView 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());
}
//20091128
dv3 = null;
}
//20091128
dv1 = null;
}
//20091128
dv = null;
CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null);
OnDataChange(cea);
}
void AssociateComplete(int deviceIdx, int mindex)
{
int DeviceIdx = deviceIdx;
int devKind;
sql.Remove(0, sql.Length);
sql.Append("select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=" ).Append( mindex);
DataView 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);
DataView 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"]));
DataView 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);
}
//20091128
dv2 = null;
//再复位自己
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( "'");
DataView 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);
}
//20091128
dv3 = null;
}
//20091128
dv1 = null;
}
//20091128
dv = null;
}
/// <summary>
/// 获取可用的目标位置:入库的巷道或者出库站台
/// </summary>
/// <param name="manageTaskIdx">调度任务索引</param>
/// <param name="manageKindIdx">调度任务类别</param>
/// <returns></returns>
bool GetUsableDestination(int manageTaskIdx, int manageKindIdx)
{
//20091128
//DataView DV;
DataView dv;
DataRowView dr;
string adviceDev = "";
char[] cc = new char[1] { ';' };
string[] sp;
DataView dvIO;
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 = dboM.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"]);
DataView 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])) != -1)
{
adviceDev = sp[i];
break;
}
}
}
//20091128
dvu = null;
if (adviceDev == "")
{
return false;
}
#endregion
//DV = dboM.ExceSQL("select IO_CONTROL_APPLY_SEQ.NEXTVAL FROM DUAL").Tables[0].DefaultView;
//20101108int fid = dboM.GetManageTableIndex("IO_CONTROL_APPLY");
string dtime = DateTime.Now.ToString("u");
dtime = dtime.Substring(0,dtime.Length-1);
dboM.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);
dboM.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 );
dboM.ExceSQL(sql.ToString());
//向管理申请修改任务//20101108CONTROL_APPLY_ID," + fid + ",
sql.Remove(0, sql.Length);
sql .Append( "INSERT INTO IO_CONTROL_APPLY ( CONTROL_ID, WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)" ).Append(
"VALUES (" ).Append( dr["FID"] ).Append( ",'" ).Append( dr["FENDWAREHOUSE"] ).Append( "','" ).Append( dr["FPALLETBARCODE"] ).Append( "','" ).Append( adviceDev ).Append( "',0,'" ).Append( dtime ).Append( "',null)");
dboM.ExceSQL(sql.ToString());
dboM.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(cea);
return true;
}
catch (Exception ex)
{
dboM.TransRollback();
_listenPLCAskError = "监听PLC请求改道时:" + ex.Message;
return false;
}
}
else
{
return false;
}
}
catch (Exception ex)
{
_listenPLCAskError = "监听PLC请求改道时:" + ex.Message;
return false;
}
finally
{
//DV=null;
dv=null;
dr=null;
cc =null;
sp=null;
dvIO=null;
}
}
/// <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;
DataView DMAN;
DataView dvnew;
try
{
//20091005
#region 调度任务存在
//20091128
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ).Append( manageTaskIdx ).Append( ") AND (F_ManageTASKKINDINDEX =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)
{
//20091005
int routeidNew = CDisassembleTask.MinRouteID(Convert.ToInt32(DMAN[0]["FSTARTDEVICE"]), Convert.ToInt32(DMAN[0]["FENDDEVICE"]),curLocation);
if (routeidNew == -1)
{
//20091005
return false;
}
//20091005
//删除原来的申请修改路径任务,拆分新的任务并且只保留现有设备开始的任务
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " ).Append( manageTaskIdx ).Append( ") AND (F_ManageTASKKINDINDEX =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");
DataView dvc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvc.Count > 0)
{
CurrentLocation = Convert.ToInt32(dvc[0]["FCurrentLocation"]);
}
//20091128
dvc = null;
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(cea);
return true;
}//20091005
#endregion
else
{//调度任务不存在
return false;
}
}
catch (Exception ex)
{
_listenPLCAskError = "CListenPLCAsk.GetUseableRouteIDSub:" + ex.Message;
return false;
}
}
/// <summary>
/// 判断设备是否被包含在子路径中
/// </summary>
/// <param name="deviceIdx">设备索引</param>
/// <param name="routeSub">子路经</param>
/// <returns></returns>
bool DeviceInRouteSub(int deviceIdx,int routeSub)
{
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 );
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
return true;
}
else
{
return false;
}
}
int GetRouteIDsub(int device)
{
DataView dv = dbo.ExceSQL("SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex=" + device + "").Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_RouteIDSub"]);
}
else
{
return -1;
}
}
/// <summary>
/// 依靠条码任务比对,报告输送机的送出任务完成
/// </summary>
/// <param name="Bardevice">条码设备</param>
/// <param name="BindDevice">条码设备的绑定输送机</param>
/// <param name="barcode">条码</param>
/// <param name="AbendDevice">异常处理口设备</param>
void BarcodeConfirm(int Bardevice,int BindDevice,string barcode,string AbendDevice)
{
#region 条码任务比对,报告输送任务完成20110412
DataView 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"))
{
int ctype = ccf.GetFCONTROLTASKTYPEFromManageTask(mankind,FID);
if ((ctype != 1)&&(dv[0]["F_NumParam4"].ToString()==BindDevice.ToString()))
{//正确
if (BindDevice == 22003)
{//任务终点是28001,前叉(后叉)任务撵走前叉(后叉)等待任务,CONTROL_STATUS=Model.CGeneralFunction.TASKSINGLEFORKRUN
DriveOutSameFork(barcode);
}
cgs.ActionComplete(Convert.ToInt32(dv[0]["F_DeviceIndex"]), Convert.ToInt32(dv[0]["F_MonitorIndex"]), 0);
}
else
{//异常:入库任务被带到出库口或者终点报告990
if ((ctype != 1) && (dv[0]["F_NumParam4"].ToString() != BindDevice.ToString()))
{
_listenPLCAskError = DateTime.Now.ToLongTimeString() + ",条码:" + barcode + ":扫描已经结束,不要重复扫描!";
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", BindDevice.ToString(), barcode + ":扫描已经结束,不要重复扫描!");
}
else
{
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = ").Append(mankind).Append(") AND (FID = ").Append(FID).Append(")");
dbo.ExceSQL(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(FID).Append(") AND (F_ManageTASKKINDINDEX = ").Append(mankind).Append(")");
dbo.ExceSQL(sql.ToString());
object[] ob = new object[17] { FID, mankind, 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));
if ((ctype == 1) && (dv[0]["F_NumParam4"].ToString() != BindDevice.ToString()))
{//20110602
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", BindDevice.ToString(), barcode + ":已经在其它扫描器生成任务,而且没有执行完成,再次被扫描,调度自动改道至异常处理口,报告异常完成!");
}
else
{//20110602
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", BindDevice.ToString(), barcode + ":入库任务被带到出库口,调度自动改道至异常处理口,报告异常完成!");
}
}
}
}
}
else
{//条码不存在错误
StringBuilder aheadDetect = new StringBuilder();
_listenPLCAskError =DateTime.Now.ToLongTimeString()+",条码:"+ barcode + "在任务队列中不存在,需要人工干预!";
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", BindDevice.ToString(), barcode + ":条码在任务队列中不存在,需要人工干预!");
}
#endregion
CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null);
OnDataChange(cea);
}
void DriveOutSameFork(string barcode)
{
DataView dv;
DataView dv0;
sql.Remove(0, sql.Length);
sql.Append("SELECT FUseAwayFork FROM T_Manage_Task WHERE FENDDEVICE = '28001' AND FPALLETBARCODE like '%").Append(barcode).Append("%'");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
sql.Remove(0, sql.Length);
sql.Append("SELECT F_ManageTaskKindIndex,FID FROM T_Manage_Task WHERE FENDDEVICE = '28001' AND FUseAwayFork = '").Append(dv[0]["FUseAwayFork"].ToString()).Append("' and FSTATUS>0");
dv0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv0.Count > 0)
{
for (int i = 0; i < dv0.Count; i++)
{
sql.Remove(0, sql.Length);
sql.Append("SELECT TOP 1 F_DeviceIndex, F_DeviceCommandIndex FROM T_Monitor_Task where F_ManageTASKKINDINDEX=").Append(dv0[i]["F_ManageTaskKindIndex"].ToString()).Append(" and F_ManageTaskIndex=").Append(dv0[i]["FID"].ToString()).Append(" ORDER BY F_MonitorIndex ASC");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
if ((((dv[0]["F_DeviceIndex"].ToString() == "1001") && (dv[0]["F_DeviceCommandIndex"].ToString() == "2")) || ((dv[0]["F_DeviceIndex"].ToString() == "22003") && (dv[0]["F_DeviceCommandIndex"].ToString() == "6"))) && (dv0[i]["F_ManageTaskKindIndex"].ToString() == "1"))//20110412
{
sql.Remove(0, sql.Length);
sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKSINGLEFORKRUN).Append(" WHERE (CONTROL_ID = ").Append(dv0[i]["FID"].ToString()).Append(")");
dboM.ExecuteSql(sql.ToString());
return;
}
}
}
}
}
}
}
}