using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Resources;
using DBFactory;
using ICommLayer;
using CommLayerFactory;
namespace CommonLibrary
{
///
/// 获得设备状态
///
public class CGetState
{
DBOperator dbo1 = new DBOperator();
DBOperator dbo = new DBOperator();
DBOperator dboM = new DBOperator("ManConnString", "ManDBFactory");
string _CGetStateError = "";//监控调度类错误说明
public string CGetStateError
{
get { return _CGetStateError; }
set { _CGetStateError = value; }
}
public int[] _States;
int _fid;
int _mti;
int _iotype=0;
int _endnode=0;
///
/// 获得所有正在执行设备的状态
///
public CGetState()
{
dbo.Open();
if (dboM.Open() == false)
{
//if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("连接管理数据库失败!!!") < 0)
//{
// FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "连接管理数据库失败!!!", true);
//}
}
}
///
/// 报告完成
///电器反馈该设备的"完成"时 删除监控任务 , 解除设备表占用状态F_LockedState=0;
///路径明细表F_LockedDeviceIndex里的所有对应设备索引解锁
///
///判断是最后一个监控任务吗? 是,回写管理任务IO_Control的FSTATUS=2即"搬运完成";
/// T_Base_Manage_Task的正在执行状态FSTATUS=2 ;
///
/// 设备索引
/// 监控任务索引
public void ActionComplete(int DeviceIdx,int TaskIdx)
{
int ccfreturn;
dbo.TransBegin();
try
{
string retu=GetDetailIndexFromMonitor(TaskIdx);
GetManage_Kind(TaskIdx);
int fid = _fid ;
int mti = _mti ;
string cap;
DataSet ds = dbo.ExceSQL("select count(F_MonitorIndex) as counts from T_Base_Monitor_Task "+
" where F_ManageTaskIndex =" + fid + " and F_ManageTaskKindIndex= "+mti);
if (ds.Tables[0].DefaultView.Count > 0)
{
if ((Convert.ToInt32(ds.Tables[0].DefaultView[0]["counts"]) == 1) && (CStaticClass.RouteSearchMode == "0"))
{
//管理任务的fid的最后一个监控分解任务完成
//回写管理任务IO_Control的FSTATUS=2即"搬运完成";T_Base_Manage_Task的正在执行状态FSTATUS=2 ;
if (mti == 1)
{
cap = "管理任务";
//判断是否为软确认任务,是就改为FSTATUS=4;
dboM.ExceSQL("update IO_Control set FSTATUS='4' where FID=" + fid);
}
else if (mti == 4)
{
cap = "手工任务";
}
else
{
cap = "临时任务";
}
//回写管理表
ReturnManageInfo(fid, mti,cap,true);
}
}
if ((CStaticClass.RouteSearchMode == "1"))
{
if (mti == 4)
{
//回写管理表
cap = "手工任务";
ReturnManageInfo(fid, mti,cap,true);
}
else
{
cap = "临时任务";
//根据路径索引,在详细路径中找到设备和命令,判断是否为该设备的最后一个命令
//判断命令是否包含“;”,没有此字符就是最后一个命令;如果有此字符就判断是否为最后一个
if (retu == "") return;
char[] cc = new char[1] { '-' };
string[] split=retu.Split(cc);
if (IFDeviceLastOrder(Convert.ToInt32(split[0]),DeviceIdx,Convert.ToInt32(split[1]) ) == true)
{
ccfreturn = ccf.StepsRouteSearch(false, fid, mti, _iotype, DeviceIdx, _endnode);
if (ccfreturn == 9999)
{
if (mti == 1)
{
//判断是否为软确认任务,是就改为FSTATUS=4;
dboM.ExceSQL("update IO_Control set FSTATUS='4' where FID=" + fid);
}
//回写管理表
ReturnManageInfo(fid, mti,cap,true);
}
}
}
}
//判断此设备是否为码盘机器人码盘完成后的任务,在表T_BASE_STACK_ROBOT查找DeviceIdx
dbo.ExceSQL("UPDATE T_BASE_STACK_ROBOT SET F_ManageID = NULL WHERE F_StackPositionDeviceIndex = " + DeviceIdx);
//解除设备表占用状态F_LockedState=0;路径明细表F_LockedDeviceIndex里的所有对应设备索引解锁 ,删除监控任务
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + DeviceIdx);
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_LockedState=" + TaskIdx);
dbo.ExceSQL("delete from T_Base_Monitor_Task where F_MonitorIndex=" + TaskIdx);
dbo.TransCommit();
//刷新监控中心显示
//显示监控任务
RefreshControlMonitor(DeviceIdx);
}
catch (Exception ex)
{
dbo.TransRollback();
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("报告完成时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "报告完成时:" + ex.Message, true);
}
//throw ex;
}
}
///
/// 回写设备错误状态字(IO_Control,T_Base_Manage_task,T_Monitor_task)
///
/// 设备索引
/// 监控任务索引
/// 错误编号
public void ActionError(int DeviceIdx, int TaskIdx,int ErrId)
{
dbo.TransBegin();
try
{
GetManage_Kind(TaskIdx);
int fid = _fid;
int mti = _mti;
DataSet ds = dbo.ExceSQL("SELECT F_ErrorIndex,F_ErrorName,T_Base_Device_State.F_DeviceKindIndex," +
" F_DeviceErrorIndex,F_ManageStatus,F_DeviceIndex,F_DeviceName FROM T_Base_Device_State,T_Base_Device Where " +
" T_Base_Device_State.F_DeviceKindIndex = T_Base_Device.F_DeviceKindIndex and F_DeviceIndex="
+ DeviceIdx + " and F_DeviceErrorIndex= " + ErrId);
DataView dv = ds.Tables[0].DefaultView;
if (dv.Count > 0)
{
FrmMain.FormInstance.notifyIcon1.ShowBalloonTip(10000, "警告", dv[0]["F_DeviceName"].ToString()+"发生故障:" + dv[0]["F_ErrorName"].ToString(), System.Windows.Forms.ToolTipIcon.Warning);
if (mti == 1)
{
if (dv[0]["F_ManageStatus"] == DBNull.Value)
{
dboM.ExceSQL("update IO_Control set FSTATUS=" + ErrId + " where FID=" + fid);
}
else
{
dboM.ExceSQL("update IO_Control set FSTATUS=" + Convert.ToInt32(dv[0]["F_ManageStatus"]) + " where FID=" + fid);
}
}
ds = dbo.ExceSQL("SELECT F_DeviceIndex, F_ErrorIndex FROM T_Base_Device_Error_Log Where F_DeviceIndex=" + DeviceIdx + " and F_ErrorIndex=" + Convert.ToInt32(dv[0]["F_ErrorIndex"]));
if (ds.Tables[0].DefaultView.Count > 0)
{
dbo.ExceSQL("UPDATE T_Base_Device_Error_Log SET F_DateTime ='" + DateTime.Now.ToString("u") + "' Where F_DeviceIndex=" + DeviceIdx + " and F_ErrorIndex=" + Convert.ToInt32(dv[0]["F_ErrorIndex"]));
}
else
{
dbo.ExceSQL("INSERT INTO T_Base_Device_Error_Log (F_DeviceIndex, F_ErrorIndex, F_DateTime) VALUES ("+ DeviceIdx +","+ Convert.ToInt32( dv[0]["F_ErrorIndex"])+",'"+DateTime.Now.ToString("u") +"')");
}
}
dbo.ExceSQL("update T_Base_Monitor_Task set F_Status= " + ErrId + " where F_MonitorIndex= " + TaskIdx);
dbo.ExceSQL("update T_Base_Manage_task set FSTATUS='" + ErrId.ToString() + "' where FID=" + fid + " and F_ManageTaskKindIndex= " + mti);
dbo.TransCommit();
//根据设备类型判断错误编号
ISendDeviceOrder sdo;
CCommonFunction ccf = new CCommonFunction();
if (ccf.GetDeviceKindIdx(DeviceIdx) == 2)
{//输送机故障清零
sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx);
sdo.SendDeviceOrder(0, 0, 0, DeviceIdx);
}
if (ccf.GetDeviceKindIdx(DeviceIdx) == 1) //堆垛机
{
sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx);
sdo.SendDeviceOrder(0, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
//刷新监控中心显示
RefreshControlMonitor(DeviceIdx);
}
catch (Exception ex)
{
dbo.TransRollback();
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("向管理反馈设备错误时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "向管理反馈设备错误时:" + ex.Message, true);
}
//throw ex;
}
}
///
/// 删除监控任务。如果是最后一个监控任务,回写管理任务IO_Control的FSTATUS=-1。
///
/// 设备索引
/// 监控任务索引
public void ActionDelete(int DeviceIdx, int TaskIdx)
{
CCommonFunction ccf = new CCommonFunction();
DataView dvstate = dbo.ExceSQL("SELECT F_MonitorIndex, F_Status FROM " +
"T_Base_Monitor_Task where F_MonitorIndex=" + TaskIdx + " and F_Status>=1").Tables[0].DefaultView;
if (dvstate.Count > 0) //正在运行
{
ISendDeviceOrder sdo;
sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx);
sdo.SendDeviceOrder(0, 0, 0, DeviceIdx);
}
dbo.TransBegin();
try
{
string retu = GetDetailIndexFromMonitor(TaskIdx);
GetManage_Kind(TaskIdx);
int fid = _fid;
int mti = _mti;
string cap;
DataSet ds = dbo.ExceSQL("select count(F_MonitorIndex) as counts from T_Base_Monitor_Task " +
" where F_ManageTaskIndex =" + fid + " and F_ManageTaskKindIndex= " + mti);
if (ds.Tables[0].DefaultView.Count > 0)
{
if ((Convert.ToInt32(ds.Tables[0].DefaultView[0]["counts"]) == 1) && (CStaticClass.RouteSearchMode == "0"))
{
//管理任务的fid的最后一个监控分解任务完成
//回写管理任务IO_Control的FSTATUS=-1
if (mti == 1)
{
cap = "管理任务";
dboM.ExceSQL("update IO_Control set FSTATUS='-1' where FID=" + fid);
}
else if (mti == 4)
{
cap = "手工任务";
}
else
{
cap = "临时任务";
}
//回写管理表
ReturnManageInfo(fid, mti, cap, false);
}
}
if ((CStaticClass.RouteSearchMode == "1"))
{
if (mti == 4)
{
//回写管理表
cap = "手工任务";
ReturnManageInfo(fid, mti, cap, false);
}
else
{
cap = "临时任务";
//根据路径索引,在详细路径中找到设备和命令,判断是否为该设备的最后一个命令
//判断命令是否包含“;”,没有此字符就是最后一个命令;如果有此字符就判断是否为最后一个
if (retu == "") return;
char[] cc = new char[1] { '-' };
string[] split = retu.Split(cc);
if (IFDeviceLastOrder(Convert.ToInt32(split[0]), DeviceIdx, Convert.ToInt32(split[1])) == true)
{
//ccfreturn = ccf.StepsRouteSearch(false, fid, mti, _iotype, DeviceIdx, _endnode);
//if (ccfreturn == 9999)
//{
if (mti == 1)
{
dboM.ExceSQL("update IO_Control set FSTATUS='-1' where FID=" + fid);
}
//回写管理表
ReturnManageInfo(fid, mti, cap, false);
//}
}
}
}
//20080728
//修改货位表的货架执行状态和货架是否有盘状态;
//判断此设备是否为码盘机器人码盘完成后的任务,在表T_BASE_STACK_ROBOT查找DeviceIdx
dbo.ExceSQL("UPDATE T_BASE_STACK_ROBOT SET F_ManageID = NULL WHERE F_StackPositionDeviceIndex = " + DeviceIdx);
//解除设备表占用状态F_LockedState=0;路径明细表F_LockedDeviceIndex里的所有对应设备索引解锁 ,删除监控任务
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + DeviceIdx);
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_LockedState=" + TaskIdx);
dbo.ExceSQL("delete from T_Base_Monitor_Task where F_MonitorIndex=" + TaskIdx);
dbo.TransCommit();
//刷新监控中心显示
//显示监控任务
RefreshControlMonitor(DeviceIdx);
}
catch (Exception ex)
{
dbo.TransRollback();
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("报告完成时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "报告完成时:" + ex.Message, true);
}
//throw ex;
}
}
}
}