SCLS/SSWCS_JXDL(2019)/ControlSystem/CAheadTriggerMoveDevice.cs
2025-05-19 09:45:29 +08:00

110 lines
5.4 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 System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using CommLayerFactory;
using ICommLayer;
namespace ControlSystem
{
/// <summary>
/// Creator:Richard.liu
/// 如果正在运行的设备有AheadTrigger信息则在T_Base_Route_Detail表找到AheadTrigger
/// 的设备索引和命令字根据调度任务类型和调度任务索引找到T_Monitor_Task表对应的
/// 设备指令索引是否存在,存在而且处于等待执行状态那就发送提前触发命令(发送前检查是否符合发送命令条件)。
/// </summary>
public class CAheadTriggerMoveDevice
{
DBOperator dbo =CStaticClass.dbo;
string _CControlError = "";//监控调度类错误说明
public string CControlError
{
get { return _CControlError; }
set { _CControlError = value; }
}
/// <summary>
/// 发送设备的提前触发移动设备和命令
/// </summary>
/// <param name="manKindIdx">调度任务类型索引</param>
/// <param name="manIdx">调度任务索引</param>
/// <param name="AheadTrigger">提前触发移动设备-命令</param>
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<dv.Count ;i++)
{
manKindIdx = Convert.ToInt32(dv[i]["F_ManageTaskKindIndex"]);
manIdx = Convert.ToInt32(dv[i]["F_ManageTaskIndex"]);
DetailIndex = Convert.ToInt32(dv[i]["F_DetailIndex"]);
AheadTrigger = dv[i]["F_AheadTrigger"].ToString();
spl = AheadTrigger.Split(cc);
devIdx = Convert.ToInt32(spl[0]);
devOrder = Convert.ToInt32(spl[1]);
dvm = dbo.ExceSQL("SELECT F_ManageTaskIndex, F_ManageTaskKindIndex,F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex," +
" F_Status FROM T_Monitor_Task WHERE F_ManageTaskKindIndex=" +
manKindIdx + " AND F_ManageTaskIndex=" + manIdx + " AND F_DeviceIndex=" + devIdx +
" AND F_DeviceCommandIndex=" + devOrder + " AND F_Status=0").Tables[0].DefaultView;
if (dvm.Count > 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堆垛机4RGV6AGV如果需要优化调度设备表的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 += "发送命令时不能取得设备坐标!";
}
}
}
}
}
}
}