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
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|