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 += "发送命令时不能取得设备坐标!"; } } } } } } }