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

1160 lines
63 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

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

using RGD.Common;
using RGD.DataService;
using RGD.DBUtility;
using RGD.MdsAPI;
using RGD.MdsAPI.WMS;
using RGD.OPCClient;
using System;
using System.Data;
namespace RGD.WCS
{
/// <summary>
/// Creator:RGD
/// 获得设备状态类
/// 需要做的工作:
/// 1.下位机给上位机发送设备任务状态信息正在执行状态或者报警的设备所处调度路径的F_SerialNumber》=当前值)
/// 2.(单独处理)下位机给上位机发送条码信息(托盘条码,烟箱一号工程码)
/// 3.单独处理下位机给上位机发送现场控制触摸屏申请信号1-重发当前设备指令
/// 2-申请修改当前设备所执行任务的目标位置
/// 4.跟踪货物运行到的位置(多个调度任务在执行同一个调度任务,取有探物的为当前位置)
/// 并且判断是否存在提前触发任务
/// 5.获取调度任务的优先策略判断:最短路径优先,
/// 入库优先携带出库,出库优先携带入库等
/// 6.任务号传递到当前设备时,把本路径的前一设备的运行锁解除,
/// 同时把当前设备加运行锁
/// 7.(根据故障点单独处理)调度路径是否可用的分析以及给管理进行反馈
/// 8.(单独处理)创建自动调度任务
/// 9.动画显示设备状态
/// </summary>
public class CGetState
{
private Model.MError errs;
private Model.MDevice devinfo;
private ISendDeviceOrder sdo;
private CCommonFunction ccf = new CCommonFunction();
private CControl ccl = new CControl();
private string _CGetStateError = "";//监控调度类错误说明
public string CGetStateError
{
get { return _CGetStateError; }
set { _CGetStateError = value; }
}
public int[] _States;
private int _fid;
/// <summary>
/// ManageTypeIndex
/// </summary>
private int _mti;
private string _start_cell;
private string _fmanageid;
/// <summary>
/// 获得所有正在执行设备的状态
/// </summary>
public CGetState()
{
}
/// <summary>
/// 获得反馈信息
///电器反馈该设备的"完成"时 删除设备指令 , 解除设备表占用状态F_LockedState=0
///路径明细表F_LockedDeviceIndex里的所有对应设备索引解锁;
///
///判断是最后一个设备指令吗? 是,回写调度任务IO_Control的FSTATUS=2即"搬运完成";
/// T_Manage_Task的正在执行状态FSTATUS=2
/// </summary>
/// <returns></returns>
public void GetDeviceState()
{
try
{
DataView dv = new DataView();
DataView dvm = new DataView();
DataView dvmo = new DataView();
int devKind;
int DeviceIdx;
int MonitorIndex = 0;
string[] wv = new string[1] { "2" };
string[] witemnames = new string[1];
//分类查找的设备类型
DataView dd = DbHelperSQL.Query("SELECT F_DeviceIndex,F_DeviceKindIndex,F_MaxSendCount,F_SendInterval FROM T_Base_Device WHERE F_DeviceKindIndex in(1,2,5,32,33,34)").Tables[0].DefaultView;
for (int j = 0; j < dd.Count; j++)
{
DeviceIdx = Convert.ToInt32(dd[j]["F_DeviceIndex"]);
devKind = Convert.ToInt32(dd[j]["F_DeviceKindIndex"]);
if (devKind != 1)
{
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
//分类查找设备状态
GetKindDeviceState(MonitorIndex, DeviceIdx, 0);
}
else
{
continue;
}
}
dv = null; dvm = null; dvmo = null; dd = null;
#region STOPPING处理
DataView dv_task = DbHelperSQL.Query("select * from t_warehouse").Tables[0].DefaultView;
Object RFIDCount = DbHelperSQL.GetSingle("select count from T_InTask_QTY");
//任务停止状态 且 出库任务 且 有尾箱结束标志
if (dv_task[0]["F_TASK_STATUS"].ToString() == "STOPPING" || (dv_task[0]["F_LASTBOX_REACH_FLAG"] != DBNull.Value && ((bool)dv_task[0]["F_LASTBOX_REACH_FLAG"])) || dv_task[0]["F_TASK_TYPE"].Equals("Out") || RFIDCount.ToString() == "0")
{
DataView dv_manage = DbHelperSQL.Query("select * from t_manage_task where fmanageid='" + dv_task[0]["F_TASK_NO"] + "'").Tables[0].DefaultView;
//且无调度任务
if (dv_manage.Count == 0)
{
{
DataView dv_rfid = DbHelperSQL.Query("select SOURCE_CELL_CODE from IO_RFID where STATION_CODE in ('" + CConfig.Device_Rfid + "') and not SOURCE_CELL_CODE='' and SOURCE_CELL_CODE is not null").Tables[0].DefaultView;
//且射频无物
if (dv_rfid.Count == 0)
{
bool cleared = true;
DataSet ds_diepan = DbHelperSQL.Query("select * from t_base_plc_ask where f_askkind=2 and not f_barcode='' and f_barcode is not null and not f_barcode='-'");
if (ds_diepan.Tables[0].Rows.Count > 0)
{ //叠盘机有物时,入库命令下达
foreach (DataRow dr in ds_diepan.Tables[0].Rows)
{
//sdo = CommModeCreate.CreateSendDeviceOrder(14001);
//sdo.SendDeviceOrder(3, 0, 0, 14001, 0);
//sdo = CommModeCreate.CreateSendDeviceOrder(12003);
//sdo.SendDeviceOrder(3, 0, 0, 12003, 0);
sdo = CommModeCreate.CreateSendDeviceOrder(int.Parse(dr["f_bindingdevice"].ToString()));
sdo.SendDeviceOrder(3, 0, 0, int.Parse(dr["f_bindingdevice"].ToString()), 0);
LogUtil.WriteLog("", "任务STOPPING处理;叠盘放行指令下达:" + int.Parse(dr["f_bindingdevice"].ToString()));
}
cleared = false;
}
/*//判断当前任务状态是否为停止,且设备指令只存在送货任务,入库或回库时,设备指令只剩下堆垛机送货任务,查询非送货任务数量,若为0,则调用机器人离开接口
DataView monitortask = DbHelperSQL.Query("select * from t_monitor_task where F_DeviceCommandIndex !='5'").Tables[0].DefaultView;
if (dv_task[0]["F_TASK_STATUS"].ToString() == "STOPPING" && monitortask.Count == 0)
{
ApplyResult ar = SendDataToAgv.LetGo();
}*/
//叠盘机无物且任务状态停止
if (cleared && dv_task[0]["F_TASK_STATUS"].ToString() == "STOPPING")
{ //停止成功
DbHelperSQL.ExecuteSql("update t_warehouse set f_task_no='',f_task_type='',f_task_status='FREE',f_equip_type='',F_IO_WH_SORT_CODE='',F_LASTBOX_REACH_FLAG=0");
DataView dv_task_list = DbHelperSQL.Query("select top 1 * from t_task_list where task_status ='Waiting'").Tables[0].DefaultView;
if (dv_task_list.Count > 0)
{
string sResult = string.Empty;
//开启下一个等待中的任务
new RGD.MdsAPI.HouseBase().InvokeHouse(dv_task_list[0]["METHOD_NAME"].ToString(), dv_task_list[0]["XMLIN"].ToString(), out sResult);
}
}
}
}
}
}
#endregion STOPPING处理
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("获取设备状态时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "获取设备状态时:" + ex.Message, true);
}
}
}
/// <summary>
/// 分类查找设备状态
/// </summary>
/// <param name="TaskIdx">设备指令索引</param>
/// <param name="DeviceIdx">设备编号</param>
/// /// <param name="RouteIDSub">调度路径的子路径的编号</param>
public void GetKindDeviceState(int TaskIdx, int DeviceIdx, int RouteIDSub)
{
int[] States;
try
{
States = CStaticClass.GetDeviceState(DeviceIdx);//[0]读写标志;[1]状态;[2]任务号;[3]X坐标;[4]Y坐标;[5]设备索引
if (States == null || States.Length < 2)
{
return;
}
DbHelperSQL.ExecuteSql("update t_base_device set f_runstate='" + States[1] + "' where F_DeviceIndex='" + DeviceIdx + "'");
}
catch (Exception ex)
{
DbHelperSQL.ExecuteSql("update t_base_device set f_runstate='" + ex.Message + "' where F_DeviceIndex='" + DeviceIdx + "'");
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("获取状态时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "获取状态时:" + ex.Message, true);
}
return;
}
_States = States;
if (States == null)//没接收到任何返回值
{
return;
}
else
{
#region
TaskIdx = States[2];
int fid = ccf.GetManageTaskIndexfromMonitor(TaskIdx);//dzf根据指令号找到任务号 这里参数TaskIdx是从PLC上读上来的PLC中的TaskIdx是上位机send任务带的指令号
int mti = ccf.GetManageTaskKindIndexFromMonitor(TaskIdx);//dzf根据指令号找到任务类型1 调度 2自动 4手动等
if (States[1] >= 30)//故障
{
ActionError(DeviceIdx, TaskIdx, States[1]);//设备号 指令号 故障码
}
switch (BaseDeviceService.GetDeviceKindIdx(DeviceIdx))
{
//正在运行的设备如果有探物就是说托盘运行到此设备
//根据任务号判断是否为调度任务改写T_Manage_Task的当前位置
//根据任务号和当前位置判断是否有提前触发任务
//任务号传递到当前设备时,把本路径的前一设备的运行锁解除,
//同时把当前设备加运行锁
case 1:
#region :
//1-正在运行 2-完成;3-要求调度重发命令;
//4-通知调度取消当前任务;其它值表示错误
if ((States[1] == 1))
{
//开始运行设置T_Monitor_Task的F_Status=2// || (States[0] == 2)
//正在运行的设备如果有探物就是说托盘运行到此设备
ActionStartRun(DeviceIdx, TaskIdx);
if (mti == 1)
{
}
#region
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
if (devinfo.IfCorrelDoubleFork == "1")
{
if (CGeneralFunction.DoubleForkIfSync(TaskIdx, DeviceIdx, 1) == true)
{
string[] df = CGeneralFunction.GetDoubleForkMonitorInfo(TaskIdx, DeviceIdx);
if (df != null)
{
ActionStartRun(Convert.ToInt32(df[2]), Convert.ToInt32(df[0]));
if (mti == 1)
{//20100714
fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(df[0]));
}
}
}
}
#endregion
}
if (States[1] == 2)//报告完成,应该也有坐标
{
string[] df = CGeneralFunction.GetDoubleForkMonitorInfo(TaskIdx, DeviceIdx);
bool snyc = CGeneralFunction.DoubleForkIfSync(TaskIdx, DeviceIdx, 1);
ActionComplete(DeviceIdx, TaskIdx, 1);
//刷新监控中心显示
#region
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
if ((devinfo.IfCorrelDoubleFork == "1") && (df != null))
{
if (snyc == true)//双叉关联任务是否能同步运行
{
ActionComplete(DeviceIdx, Convert.ToInt32(df[0]), 1);
}
else
{
ccl.SendMonitorTask(Convert.ToInt32(df[0]));
}
}
#endregion
}
break;
#endregion :
case 2:
#region
if ((States[1] == 1))//开始运行设置T_Monitor_Task的F_Status=2// || (States[0] == 2)
{
//正在运行的设备如果有探物就是说托盘运行到此设备
ActionStartRun(DeviceIdx, TaskIdx);
#region
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
if (devinfo.IfCorrelDoubleFork == "1")
{
if (CGeneralFunction.DoubleForkIfSync(TaskIdx, DeviceIdx, 2) == true)
{
string[] df = CGeneralFunction.GetDoubleForkMonitorInfo(TaskIdx, DeviceIdx);
if (df != null)
{
ActionStartRun(Convert.ToInt32(df[2]), Convert.ToInt32(df[0]));
}
}
}
#endregion
//刷新监控中心显示
}
if (States[1] == 2)//报告完成
{
string[] df = CGeneralFunction.GetDoubleForkMonitorInfo(TaskIdx, DeviceIdx);
bool snyc = CGeneralFunction.DoubleForkIfSync(TaskIdx, DeviceIdx, 2);
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
if (devinfo.IfCorrelDoubleFork == "1")
{
int updowndevice = new CommonService().GetUpAndDownDevices(DeviceIdx, devinfo.Dbw1Address);
if (-1 != updowndevice)
{
GetKindDeviceState(0, updowndevice, 0);
}
}
ActionComplete(DeviceIdx, TaskIdx, 1);
//刷新监控中心显示
#region
if ((devinfo.IfCorrelDoubleFork == "1") && (df != null))
{
if (snyc == true)
{
ActionComplete(DeviceIdx, Convert.ToInt32(df[0]), 1);
}
else
{
ccl.SendMonitorTask(Convert.ToInt32(df[0]));
}
}
#endregion
}
break;
#endregion
case 4:
#region 穿
if ((States[1] == 1)) //开始运行设置T_Monitor_Task的F_Status=2// || (States[0] == 2)
{//正在运行的设备如果有探物就是说托盘运行到此设备
ActionStartRun(DeviceIdx, TaskIdx);
//刷新监控中心显示
}
if (States[1] == 2)//报告完成
{
ActionComplete(DeviceIdx, TaskIdx, 1);
}
break;
#endregion 穿
case 32:
#region
if ((States[1] == 1))//开始运行设置T_Monitor_Task的F_Status=2// || (States[0] == 2)
{//正在运行的设备如果有探物就是说托盘运行到此设备
ActionStartRun(DeviceIdx, TaskIdx);
}
if (States[1] == 2)//报告完成
{
ActionComplete(DeviceIdx, TaskIdx, 1);
}
break;
#endregion
case 33:
#region
if ((States[1] == 1))//开始运行设置T_Monitor_Task的F_Status=2// || (States[0] == 2)
{//正在运行的设备如果有探物就是说托盘运行到此设备
ActionStartRun(DeviceIdx, TaskIdx);
}
if (States[1] == 2)//报告完成
{
ActionComplete(DeviceIdx, TaskIdx, 1);
}
break;
#endregion
case 34:
#region AGV
if ((States[1] == 1))//开始运行设置T_Monitor_Task的F_Status=2// || (States[0] == 2)
{//正在运行的设备如果有探物就是说托盘运行到此设备
ActionStartRun(DeviceIdx, TaskIdx);
}
if (States[1] == 10)//将取报告完成
{
string sql = "select F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=" + TaskIdx;
DataView dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0 && dv[0]["F_DeviceIndex"].ToString() == DeviceIdx.ToString())
{
ActionComplete(DeviceIdx, TaskIdx, 1);
}
}
break;
#endregion AGV
}
#endregion
}
}
/// <summary>
/// 设备开始运行:
/// 1根据任务号和探物情况判断任务执行的位置回写本地管理表
/// 2回写调度任务表的开始执行状态
/// 3判断是否存在提前触发任务
/// </summary>
/// <param name="DeviceIdx">设备索引</param>
/// <param name="TaskIdx">调度任务号</param>
public void ActionStartRun(int DeviceIdx, int TaskIdx)
{
if (TaskIdx <= 0) return;
int mti = ccf.GetManageTaskIndexfromMonitor(TaskIdx);
int mtikind = ccf.GetManageTaskKindIndexFromMonitor(TaskIdx);
DataView dvlane;
DataView dv;
try
{
//修改调度任务状态
DbHelperSQL.ExecuteSql("update T_Monitor_Task set F_Status=2 where F_Status=1 and F_MonitorIndex=" + TaskIdx);
#region
DbHelperSQL.ExecuteSql("update T_Manage_Task set FCurrentLocation=" + DeviceIdx + " where F_ManageTaskKindIndex=" + mtikind + " and FID=" + mti + "");
//调度任务表也记录当前位置,主要是给输送机链用
DbHelperSQL.ExecuteSql("update T_Monitor_Task set F_CurrentLocation=" + DeviceIdx + " where F_MonitorIndex=" + TaskIdx);
//设备逻辑有物
//20090918给堆垛机送货的输送机逻辑有物解锁F_HaveGoods=0
dvlane = DbHelperSQL.Query("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex=" + DeviceIdx).Tables[0].DefaultView;
if (dvlane.Count > 0)
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_HaveGoods=0 where F_DeviceIndex=" + DeviceIdx);
}
else
{
//AGV暂无
dvlane = DbHelperSQL.Query("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate where F_AGVGateDeviceIndex=" + DeviceIdx).Tables[0].DefaultView;
if (dvlane.Count > 0)
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_HaveGoods=0 where F_DeviceIndex=" + DeviceIdx);
}
}
DbHelperSQL.ExecuteSql("update T_Base_Lane_Gate set F_LogicHave = 0 where F_LogicHave =" + TaskIdx);//清理堆垛机发送后给巷道出口设备置的指令号
#endregion
if (CStaticClass.MovedDeviceAheadTrigger == "1")
{
#region ()
//当设备运行时触发调度任务号运行F_AheadTrigger
dv = DbHelperSQL.Query("select F_AheadTrigger from T_Monitor_Task " + "where F_MonitorIndex=" + TaskIdx + " and F_AheadTrigger like '" + DeviceIdx.ToString() + "-" + "%'").Tables[0].DefaultView;
if (dv.Count > 0)
{
//发送提前触发的命令调度任务
char[] cc = new char[1] { '-' };
string[] sp = dv[0]["F_AheadTrigger"].ToString().Split(cc);
if (sp.GetLength(0) > 0)
{
int TriTask = Convert.ToInt32(sp[1]);
if (ccl.SendMonitorTask(TriTask) == true)
{
//清除触发命令
DbHelperSQL.ExecuteSql("update T_Monitor_Task set F_AheadTrigger ='' where F_MonitorIndex=" + TaskIdx);
}
}
}
#endregion ()
}
}
catch (Exception ex)
{
_CGetStateError = "ControlSystem.CGetState发生错误" + ex.Message;
}
finally
{
dvlane = null;
dv = null;
}
}
/// <summary>
/// 报告完成
///电器反馈该设备的"完成"时 删除设备指令 , 解除设备表占用状态F_LockedState=0
///路径明细表F_LockedDeviceIndex里的所有对应设备索引解锁
///
///判断是最后一个设备指令吗? 是,回写调度任务IO_Control的FSTATUS=2即"搬运完成";
/// T_Manage_Task的正在执行状态FSTATUS=2
/// </summary>
/// <param name="DeviceIdx">设备索引</param>
/// <param name="TaskIdx">设备指令索引</param>
///<param name="ClearZero">是否向设备发送清零命令:1清零900撤销整个调度任务999手工报告调度任务完成</param>
public void ActionComplete(int DeviceIdx, int TaskIdx, int ClearZero)
{
if (TaskIdx == 0)
{
return;
}
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
int devKind = BaseDeviceService.GetDeviceKindIdx(DeviceIdx);
int[] zxy = ccf.GetCoordinatesFromMonitorTask(TaskIdx);
string zxystr = "";
if (zxy != null)
{
//送货点坐标
zxystr = (zxy[3].ToString().Length == 1 ? "0" + zxy[3].ToString() : zxy[3].ToString()) + "-" + ((zxy[4].ToString().Length == 1) ? ("0" + zxy[4].ToString()) : (zxy[4].ToString())) + "-" + ((zxy[5].ToString().Length == 1) ? ("0" + zxy[5].ToString()) : (zxy[5].ToString()));
}
int order = ccf.GetDeviceOrderFromMonitor(TaskIdx);
if (order == -1)
{
_CGetStateError = "电器反馈的调度任务号没有记忆!";
return;
}
if (GetManage_Kind(TaskIdx) == false)
{
//没有调度任务 返回
return;
}
LogUtil.WriteLog("", "电气任务报完成;DeviceIdx:" + DeviceIdx + ";TaskIdx:" + TaskIdx);
int errrcode = new ManageTaskService().GetExceptionNOFromManageTask(_fid, _mti);
//任务类型
int ControlType = ccf.GetFCONTROLTASKTYPEFromManageTask(_mti, _fid);
//20100710
int AgvNextDeviceKind = 0;//设备类型
if ((devKind == 6) && (order == 2))
{
AgvNextDeviceKind = BaseDeviceService.GetDeviceKindIdx(zxy[4]);
}
int ErrorCount = 0;
DataView dvtemp = DbHelperSQL.Query("select F_ErrorCount from t_base_device where F_DeviceIndex=" + DeviceIdx).Tables[0].DefaultView;
if (dvtemp.Count > 0)
{
if (dvtemp[0][0] == DBNull.Value)
{
ErrorCount = 0;
}
else
{
ErrorCount = ((int)dvtemp[0][0]);
}
}
if (ErrorCount > 1)
{
//设备有异常将无法完成
return;
}
DataView dvman;
DataView dv;
DataView dvlane;
#region
if ((devKind == 1) && (ccf.GetFCONTROLTASKTYPEFromManageTask(_mti, _fid) == 2))//堆垛机出库优先并且携带入库任务
{
string mansql = "select * from T_Manage_Task where FTASKLEVEL=10 and FSTACK = " + DeviceIdx + " AND (FCONTROLTASKTYPE = 1) AND (FIntoStepOK = '1') ";
dvman = DbHelperSQL.Query(mansql).Tables[0].DefaultView;
if (dvman.Count <= 0)
{
mansql = "SELECT FID, F_ManageTaskKindIndex, FCONTROLTASKTYPE FROM T_Manage_Task WHERE (FSTACK = " + DeviceIdx + ") AND (FCONTROLTASKTYPE = 1) AND (FIntoStepOK = '1') order by FTASKLEVEL desc, F_ManageTaskKindIndex desc,FID asc";
dvman = DbHelperSQL.Query(mansql).Tables[0].DefaultView;
for (int ii = 0; ii < dvman.Count; ii++)
{
string sql = "select * from T_Monitor_Task where F_ManageTASKKINDINDEX=" + dvman[ii]["F_ManageTASKKINDINDEX"] + " and F_ManageTaskIndex=" + dvman[ii]["FID"] + " order by F_MonitorIndex asc";
dv = DbHelperSQL.Query(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
int stackkind = BaseDeviceService.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"]));
if (stackkind == 1)
{
DbHelperSQL.ExecuteSql("update T_Monitor_Task set F_MonitorTaskLevel=10 where F_ManageTASKKINDINDEX=" + dvman[ii]["F_ManageTASKKINDINDEX"] + " and F_ManageTaskIndex=" + dvman[ii]["FID"] + "");
DbHelperSQL.ExecuteSql("update T_Manage_Task set FTASKLEVEL=10 where F_ManageTASKKINDINDEX=" + dvman[ii]["F_ManageTASKKINDINDEX"] + " and FID=" + dvman[ii]["FID"] + "");
break;
}
}
}
}
}
#endregion
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
try
{
int fid = _fid;
int mti = _mti;
string BOX_LABLE = string.Empty;
bool TASK_TYPE = false;
#region []
if (devKind == 1)
{
object ob = DbHelperSQL.GetSingle("select count(F_MonitorIndex) as counts from T_Monitor_Task " +
" where F_ManageTaskIndex =" + fid + " and F_ManageTaskKindIndex= " + mti + " and F_DeviceIndex=" + DeviceIdx);
if (Convert.ToInt32(ob) == 1)//dzf同一任务的同一设备的最后一条指令
{
#region //20100710
ob = DbHelperSQL.GetSingle("SELECT T_Manage_Task.FID FROM T_Manage_Task ,T_Monitor_Task where T_Manage_Task.F_ManageTaskKindIndex = T_Monitor_Task.F_ManageTASKKINDINDEX AND T_Manage_Task.FID = T_Monitor_Task.F_ManageTaskIndex and (T_Manage_Task.F_RELATIVECONTORLID = " + fid + ") AND (T_Manage_Task.F_ManageTaskKindIndex = " + mti + ") and F_DeviceIndex=" + DeviceIdx + "");
if (ob != null)
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_ManTaskReserve=" + (mti.ToString() + ob.ToString()) + " where F_ManTaskReserve=" + (mti.ToString() + fid.ToString()) + " and F_DeviceIndex=" + DeviceIdx);
}
else
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_ManTaskReserve=0 where F_ManTaskReserve=" + (mti.ToString() + fid.ToString()) + " and F_DeviceIndex=" + DeviceIdx);
}
#endregion //20100710
}
}
#endregion []
//dv = DbHelperSQL.Query("select count(F_MonitorIndex) as counts from T_Monitor_Task ").Tables[0].DefaultView;
dv = DbHelperSQL.Query("select count(F_MonitorIndex) as counts from T_Monitor_Task " + " where F_ManageTaskIndex =" + fid + " and F_ManageTaskKindIndex= " + mti).Tables[0].DefaultView;
if (dv.Count > 0)
{
#region
if ((Convert.ToInt32(dv[0]["counts"]) == 1))
{
//回写管理表//20091128
if ((ClearZero != CGeneralFunction.TASKDELETE) && (ClearZero != CGeneralFunction.TASKSTOPOUTPUT))//调度撤销删除调度任务900人工暂停出库任务940
{
bool IS_PICKUP = true;
Object dt1 = DbHelperSQL.GetSingle("select F_DeviceCommandIndex from T_Monitor_Task");
if (dt1.ToString() == "9")
{
IS_PICKUP = false;
}
string Task_NO = "";
//固定路径模式
//调度任务的fid的最后一个监控分解任务完成
if (mti == 1)
{
//完成FSTATUS=999970堆垛机送货重故障异常完成980堆垛机取空故障异常完成990条码扫描异常完成
//调度撤销删除调度任务900;950送到拆盘机的不是空托盘组;940人工暂停出库任务
bool bResult = true;
string sResult = string.Empty;
DataView dvt = DbHelperSQL.Query("SELECT * FROM T_Manage_Task where F_ManageTaskKindIndex=" + mti + " and FID=" + fid + "").Tables[0].DefaultView;
DataView dv_task = DbHelperSQL.Query("select * from t_WareHouse").Tables[0].DefaultView;
//if (dv_task[0]["F_TASK_TYPE"].ToString() == "In" && dvt[0]["FENDDEVICE"].ToString()!="12001")
//{
// TASK_TYPE = true;
//}
BOX_LABLE = dvt[0]["BOX_LABLE"].ToString();
Task_NO = dvt[0]["fmanageid"].ToString();
//flaneway任务所在巷道的设备索引
if (dvt[0]["flaneway"].ToString() != "-1")
{
#region
string IO_FLAG, LOC_NO;
{
if (dvt[0]["FSTARTCELL"].ToString() == "-")
{
//入库
IO_FLAG = "02";
LOC_NO = dvt[0]["FENDCELL"].ToString();
}
else
{
IO_FLAG = "01";
LOC_NO = dvt[0]["FSTARTCELL"].ToString();
//出库时候由输送线上报完成 入库时候agv报完成
bResult = (new uploadStackIODet()).Notify(dvt[0]["fmanageid"].ToString(), IO_FLAG, LOC_NO, out sResult);
if (!bResult)
{
throw new Exception("接口调用失败。" + DateTime.Now.ToString() + "\r\n接口uploadStackIODet。任务编号" + TaskIdx + "\r\n错误信息" + sResult);
}
}
}
#endregion
}
//更新叠盘机箱标签
if (dvt[0]["FENDDEVICE"].ToString() == CConfig.Device_Stacker.ToString())
{
if (dvt[0]["BOX_LABLE"].ToString().Contains("IS_RESTACK"))
{
DbHelperSQL.ExecuteSql("update T_Base_PLC_Ask set F_BOX_LABLE='" + dvt[0]["BOX_LABLE"].ToString().Replace("IS_RESTACK|", "") + "' where (F_BindingDevice=" + DeviceIdx + ")");
}
else
{
DbHelperSQL.ExecuteSql("update T_Base_PLC_Ask set F_BOX_LABLE='" + dvt[0]["BOX_LABLE"].ToString() + "' where (F_BindingDevice=" + DeviceIdx + ")");
}
}
// 任务终点是射频门,软启动射频
if (zxy != null && (zxy[3] == CConfig.Device_Rfid))
{
DbHelperSQL.ExecuteSql("update IO_RFID set BEGIN_TIME='" + DateTime.Now.ToString() + "',SOURCE_CELL_CODE='" + dvt[0]["FSTARTCELL"] + "',box_barcode='" + dvt[0]["FPALLETBARCODE"] + "' where (STATION_CODE='" + zxy[3] + "')");
}
if (!bResult)
{
bResult = (new uploadWhExceptionInfo()).Notify(DeviceIdx.ToString(), devinfo.DeviceName, sResult, DateTime.Now.ToString(), out sResult);
if (!bResult)
{
throw new Exception("接口调用失败。" + DateTime.Now.ToString() + "\r\n接口uploadWhExceptionInfo。任务编号" + TaskIdx + "\r\n错误信息" + sResult);
}
ErrorCountAdd(DeviceIdx);
}
else
{//处理成功,清除设备故障计数
DbHelperSQL.ExecuteSql("update t_base_device set F_ErrorCount=0 where F_DeviceIndex=" + DeviceIdx);
}
}
ReturnManageInfo(fid, mti, true);
}
else
{
ReturnManageInfo(fid, mti, false);
}
}
#endregion
}
//被这个任务号锁定的设备全部解锁
DbHelperSQL.ExecuteSql("update T_Base_Device set F_LockedState=0 where F_LockedState=" + TaskIdx);
DbHelperSQL.ExecuteSql("update T_Base_Device set F_CreateLock='0' where F_DeviceIndex=" + DeviceIdx);
if (ClearZero != CGeneralFunction.TASKDELETE)//20100710删除调度任务不置逻辑有物
{
//堆垛机接货输送机完成时逻辑无货20100710
dvlane = DbHelperSQL.Query("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex=" + DeviceIdx).Tables[0].DefaultView;
if (dvlane.Count > 0)
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_HaveGoods=0 where F_DeviceIndex=" + DeviceIdx + " and F_HaveGoods=1");
}
else
{
//AGV接货输送机完成时逻辑无货20100710
dvlane = DbHelperSQL.Query("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate where F_AGVGateDeviceIndex=" + DeviceIdx).Tables[0].DefaultView;
if (dvlane.Count > 0)
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_HaveGoods=0 where F_DeviceIndex=" + DeviceIdx);
}
}
//根据出口巷道设备里面置的指令号来置逻辑无货
DataView dvj = DbHelperSQL.Query("select F_LaneGateDeviceIndex from T_Base_Lane_Gate where F_LogicHave =" + TaskIdx).Tables[0].DefaultView;
if (dvj.Count > 0)
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_HaveGoods=0 where F_DeviceIndex='" + dvj[0]["F_LaneGateDeviceIndex"] + "'");
DbHelperSQL.ExecuteSql("update T_Base_Lane_Gate set F_LogicHave = 0 where F_LogicHave =" + TaskIdx);// 清除出口巷道设备里面置的指令号
}
}
#region AGV逻辑有物的处理20101011
if (ClearZero != CGeneralFunction.TASKDELETE)//删除调度任务不置为逻辑有物
{
if ((devKind == 1) && ((order == 4) || (order == 5) || (order == 6)))//20101011 4取5送
{
bool sh = false;//20101011
if (order == 5) sh = true;//20101011
if (sh == true)//20101011
{
//20090918给堆垛机送货的输送机增加逻辑有物
////20100609改为使用巷道表关联
dvlane = DbHelperSQL.Query("SELECT T_Base_Lane_Gate.F_LaneGateDeviceIndex from T_Base_Lane_Gate,T_Base_LaneInfo " +
" where T_Base_Lane_Gate.F_LaneIndex = T_Base_LaneInfo.F_LaneDeviceIndex and T_Base_Lane_Gate.F_ZXY='" + zxystr + "' " +
" and T_Base_LaneInfo.F_StackIndex=" + DeviceIdx).Tables[0].DefaultView;
if (dvlane.Count > 0)
{
//dbo.ExceSQL("update T_Base_Device set F_HaveGoods=1 where F_DeviceIndex=" + dvlane[0]["F_LaneGateDeviceIndex"]);
DataView dvv = DbHelperSQL.Query("select F_MonitorIndex from T_Monitor_Task where F_ManageTaskIndex =" + fid + "and F_MonitorIndex>" + TaskIdx + "order by F_MonitorIndex asc").Tables[0].DefaultView;//增加 将出库堆垛机送出后的下一条指令号写在出口巷道设备里面
if (dvv.Count > 0)
{
DbHelperSQL.ExecuteSql("update T_Base_Lane_Gate set F_LogicHave = '" + dvv[0]["F_MonitorIndex"] + "' where F_LaneGateDeviceIndex =" + dvlane[0]["F_LaneGateDeviceIndex"]);
}
}
}
}
else if ((devKind == 6) && (order == 2) && (AgvNextDeviceKind == 2))//AGV向输送机放货20100710
{
DbHelperSQL.ExecuteSql("update T_Base_Device set F_HaveGoods=1 where F_DeviceIndex=" + zxy[4]);
}
}
#endregion
#region
if (ClearZero == 1)
{
sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx);
if ((devKind == 34) || (devKind == 2) || (devKind == 32) || (devKind == 33))
{
//输送机、RGV故障清零
if (zxy != null && (DeviceIdx == CConfig.Device_Stacker))
{
//叠盘机上箱标签
DataView dv_plc_ask = DbHelperSQL.Query("select * from t_base_plc_ask where f_bindingdevice=" + DeviceIdx).Tables[0].DefaultView;
//到此叠盘机的任务
DataView dv_manage_other = DbHelperSQL.Query("select * from t_manage_task where FENDDEVICE=" + DeviceIdx).Tables[0].DefaultView;
LogUtil.WriteLog("", "TaskIdx:" + TaskIdx + ";GetState_叠盘机缓存:" + dv_plc_ask[0]["F_BarCode"].ToString() + ";叠盘机尾箱标签:" + dv_plc_ask[0]["F_BOX_LABLE"].ToString());
//输送线有到叠盘的任务 且 叠盘机有缓存(实际完成当前箱并未修改) 且 剩余任务标签与叠盘机最后标签不一致 dv_plc_ask[0]["F_BarCode"].ToString() != ""
//只要出现IS_RESTACK 必定不与缓存一致
if (dv_manage_other.Count > 0 && (1 == 1 && dv_manage_other[0]["BOX_LABLE"].ToString() != dv_plc_ask[0]["F_BOX_LABLE"].ToString()))
{
//有执行中任务,且,第一条标签不同
//sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
//Thread.Sleep(100);
sdo.SendDeviceOrder(3, 0, 0, DeviceIdx, 0);
LogUtil.WriteLog("", "TaskIdx:" + TaskIdx + ";任务完成叠盘放行;箱号:" + new MonitorTaskService().GetBarCodeFromMonitor(TaskIdx) + ";当前任务标签: " + dv_manage_other[0]["BOX_LABLE"].ToString());
}
else
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
LogUtil.WriteLog("", "TaskIdx:" + TaskIdx + ";任务完成叠盘应答;箱号:" + new MonitorTaskService().GetBarCodeFromMonitor(TaskIdx));
//}
}
}
else
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
}
}
else if (devKind == 1) //堆垛机
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
}
#endregion
// 每次叠盘任务完成时更新叠盘机条码信息
if (zxy != null && zxy[3] == 12003)
{
DbHelperSQL.ExecuteSql("update T_Base_PLC_Ask set F_BarCode=F_BarCode +'" + ccf.GetBarCodeFromMonitor(TaskIdx) + "|' where (F_BindingDevice=" + DeviceIdx + ")");
}
DbHelperSQL.ExecuteSql("delete from T_Monitor_Task where F_MonitorIndex=" + TaskIdx);
}
catch (Exception ex)
{
//dbo.TransRollback();
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("报告完成时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "报告完成时:" + ex.Message, true);
}
ErrorCountAdd(DeviceIdx);
LogUtil.WriteLog("", "Error:" + ex.Message + "-" + ex.Source);
//throw ex;
}
finally
{
dvman = null;
dv = null;
dvlane = null;
}
}
private void ErrorCountAdd(int DeviceIndex)
{
int ErrorCount = 0;
DataView dv = DbHelperSQL.Query("select F_ErrorCount from t_base_device where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView;
if (dv.Count > 0)
{
if (dv[0][0] == DBNull.Value)
{
ErrorCount = 1;
}
else
{
ErrorCount = ((int)dv[0][0]) + 1;
}
}
DbHelperSQL.ExecuteSql("update t_base_device set F_ErrorCount=" + ErrorCount + " where F_DeviceIndex=" + DeviceIndex);
}
/// <summary>
/// 回写设备错误状态字IO_Control,T_Manage_Task,T_Monitor_task
/// </summary>
/// <param name="DeviceIdx">设备索引</param>
/// <param name="TaskIdx">设备指令索引</param>
/// <param name="ErrId">错误编号</param>
public void ActionError(int DeviceIdx, int TaskIdx, int ErrId)
{
DataView dvmon;
DataTable dt;
DataView dv0;
try
{
//090915
string monsql = "SELECT F_MonitorIndex FROM T_Monitor_Task where F_Status =1 and F_DeviceIndex =" + DeviceIdx;
//20100108
dvmon = DbHelperSQL.Query(monsql).Tables[0].DefaultView;
if ((dvmon.Count > 0) && (TaskIdx == 0))
{
TaskIdx = Convert.ToInt32(dvmon[0]["F_MonitorIndex"]);
}
//090915
//有过记录的故障设备的任务号,不再重复处理
string devstr = "SELECT F_DeviceIndex FROM T_Base_Device where F_DeviceIndex=" + DeviceIdx + " and F_ErrorTaskNo=" + TaskIdx + "";
//20100108
dt = DbHelperSQL.Query(devstr).Tables[0];
if (dt.Rows.Count >= 1)
{
DbHelperSQL.ExecuteSql("update T_Monitor_Task set F_Status= " + ErrId + " where (F_MonitorIndex= " + TaskIdx + ") and ((F_Status<> " + ErrId + ") and (F_Status<> 3))");
return;
}
devinfo = BaseDeviceService.GetDeviceInfo(DeviceIdx);
int devKind = BaseDeviceService.GetDeviceKindIdx(DeviceIdx);
if (GetManage_Kind(TaskIdx) == false) return;
int fid = _fid;
int mti = _mti;
//string fwarehouse = "";
//string fcode = "";
//int flane = 0;
errs = BaseDeviceService.GetErrorInfo(Convert.ToInt32(devKind.ToString() + ErrId.ToString()));
if (errs.ErrorIndex > 0)
{
FrmMain.FormInstance.notifyIcon1.BalloonTipText = "警告:" + devinfo.DeviceName + "," + DeviceIdx + "发生故障:" + errs.ErrorName;
FrmMain.FormInstance.notifyIcon1.ShowBalloonTip(10000, "警告", devinfo.DeviceName + "," + DeviceIdx + "发生故障:" + errs.ErrorName, System.Windows.Forms.ToolTipIcon.Warning);
if (mti == 1)
{
string sResult;
RGD.MdsAPI.WMS.uploadWhExceptionInfo ss = new RGD.MdsAPI.WMS.uploadWhExceptionInfo();
ss.Notify(DeviceIdx.ToString(), devinfo.DeviceName, errs.ErrorName, DateTime.Now.ToString(), out sResult);
}
//20100108
dv0 = DbHelperSQL.Query("SELECT F_DeviceIndex, F_ErrorIndex FROM T_Base_Device_Error_Log Where F_ManageTaskNo=" + fid + " and F_DeviceIndex=" + DeviceIdx + " and F_ErrorIndex=" + errs.ErrorIndex).Tables[0].DefaultView;
string dtime = DateTime.Now.ToString("u");//20110603
dtime = dtime.Substring(0, dtime.Length - 1);
if (dv0.Count > 0)
{//20091107
DbHelperSQL.ExecuteSql("UPDATE T_Base_Device_Error_Log SET F_DateTime ='" + dtime + "' Where F_DeviceIndex=" + DeviceIdx + " and F_ErrorIndex=" + errs.ErrorIndex + " and F_ManageTaskNo=" + fid);
}
else
{
DbHelperSQL.ExecuteSql("INSERT INTO T_Base_Device_Error_Log (F_ManageTaskNo,F_DeviceIndex, F_ErrorIndex, F_DateTime) VALUES (" + fid + "," + DeviceIdx + "," + errs.ErrorIndex + ",'" + dtime + "')");
}
}
//20090915
DbHelperSQL.ExecuteSql("update T_Monitor_Task set F_Status= " + ErrId + " where F_MonitorIndex= " + TaskIdx + " and (F_Status<> 3)");
//记录发生故障的设备正在执行的任务号
DbHelperSQL.ExecuteSql("update T_Base_Device set F_ErrorTaskNo= " + TaskIdx + " where F_DeviceIndex= " + DeviceIdx);
DbHelperSQL.ExecuteSql("update T_Manage_Task set FERRORCODE='" + devinfo.DeviceName + "," + DeviceIdx + errs.ErrorName + "' where F_ManageTaskKindIndex=" + mti + " and FID=" + fid);
if (devinfo.UseCommonDB == "1")
{
return;
}
}
catch (Exception ex)
{
//dbo.TransRollback();
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("向管理反馈设备错误时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "向管理反馈设备错误时:" + ex.Message, true);
}
}
finally
{//20100108
dvmon = null;
dt = null;
dv0 = null;
}
}
public bool GetManage_Kind(int taskidx)
{//20100108
DataSet ds;
try
{
//CCommonFunction ccf=new CCommonFunction();
ds = DbHelperSQL.Query("SELECT F_ManageTaskIndex, T_Monitor_Task.F_ManageTaskKindIndex, F_MonitorIndex,FSTARTCELL,FMANAGEID FROM T_Monitor_Task,T_Manage_Task Where F_ManageTaskIndex=FID and F_MonitorIndex=" + taskidx);
if (ds.Tables[0].DefaultView.Count > 0)
{
_fid = Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]);
_mti = Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskKindIndex"]);
_start_cell = ds.Tables[0].DefaultView[0]["FSTARTCELL"].ToString();
_fmanageid = ds.Tables[0].DefaultView[0]["FMANAGEID"].ToString();
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{//20100108
ds = null;
}
}
//刷新监控中心显示
public void RefreshControlMonitor(int devidx)
{//_States[5] == DeviceIdx
try
{
if (CStaticClass.RealRefresh == true)
{
//显示设备指令
DataSet ds = DbHelperSQL.Query("select * from V_Monitor_Task where " + CStaticClass.Monstatus);
FrmControlMonitor.FormInstance.MonitorRefresh(ds.Tables[0].DefaultView);
//显示调度任务
FrmControlMonitor.FormInstance.ManagerRefresh(
DbHelperSQL.Query("select * from V_Manage_Task where " + CStaticClass.Manstatus).Tables[0].DefaultView);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 增加货位记录
/// </summary>
/// <param name="fid"></param>
/// <param name="mti"></param>
/// <param name="IFOK"></param>
public void ReturnManageInfo(int fid, int mti, bool IFOK)
{
string dtime = DateTime.Now.ToString("u");//20101028
dtime = dtime.Substring(0, dtime.Length - 1);//20101028
char[] cc = new char[1] { '-' };
string[] fcc;
DataView dv;
try
{
//200906240111增加货位记录:入库1-结束位置有货出库2-起始位置无货倒库3-起始位置无货,结束位置有货
//20100108
dv = DbHelperSQL.Query("SELECT * FROM T_Manage_Task where F_ManageTaskKindIndex=" + mti + " and FID=" + fid + "").Tables[0].DefaultView;
if (dv.Count > 0)
{
if (IFOK == true)
{
switch (dv[0]["FCONTROLTASKTYPE"].ToString())
{
case "1":
if (dv[0]["FENDCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FENDCELL"].ToString().Split(cc);
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FRUNSTATUS=0,FCELLSTATUS = 1,FPALLETBARCODE='" + dv[0]["FPALLETBARCODE"] + "' WHERE (FLaneWay=" + dv[0]["FENDDEVICE"] + " and F_Z='" +
fcc[0] + "' and F_X='" + fcc[1] + "' and F_Y='" + fcc[2] + "')");
}
break;
case "2":
{
if (dv[0]["FSTARTCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FSTARTCELL"].ToString().Split(cc);
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FRUNSTATUS=0,FCELLSTATUS =0,FPALLETBARCODE='-' WHERE (FLaneWay=" + dv[0]["FSTARTDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
}
}
break;
case "3":
if (dv[0]["FENDCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FENDCELL"].ToString().Split(cc);//FRUNSTATUS=0,
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FCELLSTATUS = 1,FPALLETBARCODE='" + dv[0]["FPALLETBARCODE"] + "' WHERE (FLaneWay=" + dv[0]["FENDDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FBIAOZHI =1 WHERE (FLaneWay=" + dv[0]["FENDDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
}
if (dv[0]["FSTARTCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FSTARTCELL"].ToString().Split(cc);//FRUNSTATUS=0,
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FCELLSTATUS =0,FPALLETBARCODE='-' WHERE (FLaneWay=" + dv[0]["FSTARTDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
}
break;
default:
break;
}
//20101028
DbHelperSQL.ExecuteSql("update T_Manage_Task set FSTATUS=999,FENDTIME='" + dtime + "' where FID=" + fid + " and F_ManageTaskKindIndex= " + mti);
}
else
{
switch (dv[0]["FCONTROLTASKTYPE"].ToString())
{
case "1":
if (dv[0]["FENDCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FENDCELL"].ToString().Split(cc);
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FRUNSTATUS=0,FPALLETBARCODE='' WHERE (FLaneWay=" + dv[0]["FENDDEVICE"] + " and F_Z='" +
fcc[0] + "' and F_X='" + fcc[1] + "' and F_Y='" + fcc[2] + "')");
}
break;
case "2":
if (dv[0]["FSTARTCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FSTARTCELL"].ToString().Split(cc);
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FRUNSTATUS=0,FPALLETBARCODE='" + dv[0]["FPALLETBARCODE"] + "' WHERE (FLaneWay=" + dv[0]["FSTARTDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
}
break;
case "3":
if (dv[0]["FENDCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FENDCELL"].ToString().Split(cc);
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FRUNSTATUS=0,FPALLETBARCODE='' WHERE (FLaneWay=" + dv[0]["FENDDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
}
if (dv[0]["FSTARTCELL"].ToString().IndexOf("-") > 0)//20100905
{
fcc = dv[0]["FSTARTCELL"].ToString().Split(cc);
DbHelperSQL.ExecuteSql("UPDATE ST_CELL SET FRUNSTATUS=0,FPALLETBARCODE='" + dv[0]["FPALLETBARCODE"] + "' WHERE (FLaneWay=" + dv[0]["FSTARTDEVICE"] + " and F_Z=" +
fcc[0] + " and F_X=" + fcc[1] + " and F_Y=" + fcc[2] + ")");
}
break;
default:
break;
}
//20101028
DbHelperSQL.ExecuteSql("update T_Manage_Task set FSTATUS=900,FENDTIME='" + dtime + "' where FID=" + fid + " and F_ManageTaskKindIndex= " + mti);
}
}
DbHelperSQL.ExecuteSql("delete from T_Manage_Task where FID=" + fid + " and F_ManageTaskKindIndex= " + mti);
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv = null;
}
}
/// <summary>
/// 追加倒库货位至真实终点货位的取货和送货指令
/// </summary>
/// <param name="mti">任务类型</param>
/// <param name="fid">调度任务索引</param>
/// <param name="device">设备索引</param>
/// <param name="monitorindex">设备指令索引</param>
private void AppendMoveCellOperate(int mti, int fid, int device, int monitorindex)
{
//获取管理任务送货坐标,当前调度任务的路径,条码,优先级;远近货叉,提前检测
string manzxy = DbHelperSQL.GetSingle("SELECT FENDCELL FROM T_Manage_Task WHERE (FID = " + fid + ") AND (F_ManageTaskKindIndex = " + mti + ")").ToString();
char[] cc = new char[1] { '-' };
string[] spcell = manzxy.Split(cc);
string newuseawayfork;
DataView dv = DbHelperSQL.Query("select F_NumParam4, F_NumParam5,F_NumParam6, F_RouteID,F_MonitorTaskLevel, F_UseAwayFork, F_TxtParam from T_Monitor_Task where F_MonitorIndex=" + monitorindex).Tables[0].DefaultView;
if (dv[0]["F_UseAwayFork"].ToString() == "1")
{
newuseawayfork = "0";
}
else
{
newuseawayfork = "1";
}
DbHelperSQL.ExecuteSql("update T_Manage_Task set FExceptionNO=NULL,FUseAwayFork='" + newuseawayfork + "' where F_ManageTaskKindIndex=" + mti + " and FID=" + fid);
int lev = int.Parse(dv[0]["F_MonitorTaskLevel"].ToString());
int routeid = int.Parse(dv[0]["F_RouteID"].ToString());
int fnp1 = int.Parse(dv[0]["F_NumParam4"].ToString());
int fnp2 = int.Parse(dv[0]["F_NumParam5"].ToString());
int fnp3 = int.Parse(dv[0]["F_NumParam6"].ToString());
string pcode = dv[0]["F_TxtParam"].ToString();
//string aheaddetect=;
int mindex = ccf.GetMonitorIndex(fid, mti);
DbHelperSQL.ExecuteSql("INSERT INTO T_Monitor_Task (F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex, F_MonitorTaskLevel," +
" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4, F_NumParam5," +
" F_NumParam6, F_TxtParam, F_AheadDetect, F_UseAwayFork)VALUES " +
"(" + fid + "," + mti + "," + mindex + "," + lev + "," + device + ",4," + routeid + ",0," + fnp1 + "," + fnp2 + "," + fnp3 + "," +
spcell[0] + "," + spcell[1] + "," + spcell[2] + ",'" + pcode + "',NULL,'" + newuseawayfork + "')");
mindex = ccf.GetMonitorIndex(fid, mti);
DbHelperSQL.ExecuteSql("INSERT INTO T_Monitor_Task (F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex, F_MonitorTaskLevel," +
" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam2, F_NumParam3, F_NumParam4, F_NumParam5," +
" F_NumParam6, F_TxtParam, F_AheadDetect, F_UseAwayFork)VALUES " +
"(" + fid + "," + mti + "," + mindex + "," + lev + "," + device + ",5," + routeid + ",0," + fnp1 + "," + fnp2 + "," + fnp3 + "," +
spcell[0] + "," + spcell[1] + "," + spcell[2] + ",'" + pcode + "',NULL,'" + newuseawayfork + "')");
}
}
}