using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using CommLayerFactory;
using ICommLayer;
namespace ControlSystem
{
///
/// Creator:Richard.liu
/// 如果正在运行的设备有AheadTrigger信息,则在T_Base_Route_Detail表找到AheadTrigger
/// 的设备索引和命令字;根据调度任务类型和调度任务索引找到T_Monitor_Task表对应的
/// 设备指令索引是否存在,存在而且处于等待执行状态那就发送提前触发命令(发送前检查是否符合发送命令条件)。
///
public class CAheadTriggerMoveDevice
{
DBOperator dbo =CStaticClass.dbo;
string _CControlError = "";//监控调度类错误说明
public string CControlError
{
get { return _CControlError; }
set { _CControlError = value; }
}
///
/// 发送设备的提前触发移动设备和命令
///
/// 调度任务类型索引
/// 调度任务索引
/// 提前触发移动设备-命令
public CAheadTriggerMoveDevice()
{
int manKindIdx; int manIdx; int DetailIndex; string AheadTrigger;
int devIdx, devOrder;
char[] cc = new char[1] {'-' };
string[] spl;
DataView dvm,dv;
dv = dbo.ExceSQL("SELECT F_ManageTaskKindIndex,F_ManageTaskIndex,T_Base_Route_Detail.F_DetailIndex, T_Base_Route_Detail.F_AheadTrigger FROM T_Base_Route_Detail,T_Monitor_Task WHERE T_Base_Route_Detail.F_DetailIndex = T_Monitor_Task.F_DetailIndex AND (T_Base_Route_Detail.F_AheadTrigger IS NOT NULL) AND (T_Base_Route_Detail.F_AheadTrigger <> '') AND (T_Monitor_Task.F_Status = 1)").Tables[0].DefaultView;
if (dv.Count <= 0) return;
for(int i=0;i 0)
{
CControl cct = new CControl();
CCommonFunction ccf = new CCommonFunction();
bool sendok = false;
if (cct.GetFirstDeviceIFLocked(Convert.ToInt32(dvm[0]["F_MonitorIndex"]),true ) == false)
{
int[] gc = ccf.GetCoordinatesFromMonitorTask(Convert.ToInt32(dvm[0]["F_MonitorIndex"]));//获得坐标
if (gc != null)
{
//发送此设备命令
ISendDeviceOrder sdo;
//CStaticClass.MessageIndex++;
CStaticClass.MessageIndex = 1;
int msgIdx = (CStaticClass.MessageIndex);
sdo = CommModeCreate.CreateSendDeviceOrder(devIdx);
//1:堆垛机;4:RGV;6:AGV如果需要优化调度(设备表的F_NeedOptimize='1')
//直接写入表:T_Monitor_Task_Child,不发送命令
if (ccf.NeedOptimize(devIdx) == true)
{
ccf.InsertMonitorOptimizeChildTask(Convert.ToInt32(dvm[0]["F_MonitorIndex"]));
sendok = true;
}
else
{
sendok = sdo.SendDeviceOrder(msgIdx, Convert.ToInt32(dvm[0]["F_MonitorIndex"]), devOrder,
devIdx, gc[0], gc[1], gc[2], gc[3], gc[4], gc[5]);
}
if (sendok == false)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf(sdo.CommLayerError) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", sdo.CommLayerError, true);
}
}
else
{
ccf.SendOrderSuccess(manKindIdx, manIdx, Convert.ToInt32(dvm[0]["F_MonitorIndex"]), devIdx, DetailIndex);
}
}
else
{
this._CControlError += "发送命令时不能取得设备坐标!";
}
}
}
}
}
}
}