攀枝花当升项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
8.3 KiB

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Microsoft.VisualBasic;
using ICommLayer;
using DBFactory;
namespace AGVDataBaseCommunication
{
public class CSendDeviceOrder : ISendDeviceOrder
{
string _commLayerError;
public string CommLayerError
{
get { return _commLayerError; }
set { _commLayerError = value; }
}
DBOperator dbo = CommonClassLib.AppSettings.dbo;//20130510
public CSendDeviceOrder()
{
dbo.Open();
}
//~CSendDeviceOrder()
//{
// dbo.Close();
//}
/// <summary>
/// 发送堆垛机命令
/// </summary>
/// <param name="MessageIndex">消息编号</param>
/// <param name="TaskIndex">任务编号</param>
/// <param name="Order">堆垛机命令字</param>
///单叉单进伸:
///1-复位
///2-将取
///3-将送
///4-取货
///5-放货
///6-取放货
///双叉单进伸:
///1-复位
///2-将取
///3-将送
///4-左叉取货
///5-左叉放货
///6-左叉取放货
///14-右叉取货
///15-右叉放货
///16-右叉取放货
///24-双叉取货
///25-双叉放货
///26-双叉取放货
///单叉双进伸:
///1-复位
///2-将取
///3-将送
///4-近位取货
///5-近位放货
///6-近位取放货
///14-远位取货
///15-远位放货
///16-远位取放货
/// <param name="DeviceIndex">设备编号</param>
/// <param name="StartX">起始x坐标,排-沿轨道方向</param>
/// <param name="StartY">起始y坐标,层-高度方向</param>
/// <param name="StartZ">起始z坐标,列-面向堆垛机操作面板,1-左侧,2-右侧</param>
/// <param name="EndX">目标x坐标,排-沿轨道方向</param>
/// <param name="EndY">目标y坐标,层-高度方向</param>
/// <param name="EndZ">目标z坐标,列-面向堆垛机操作面板,1-左侧,2-右侧</param>
/// <returns>发送堆垛机命令是否成功</returns>
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ)
{
return true;
}
/// <summary>
/// 发送幻想穿梭车指令
/// </summary>
/// <param name="MessageIndex">消息编号</param>
/// <param name="TaskIndex">任务编号</param>
/// <param name="Order">命令字</param>
/// 穿梭车命令字:
///1-复位
///2-左接货
///3-左送货
///4-右接货
///5-右送货
///6-停止
///7-运动到1#位置
///8-运动到2#位置
/// …
///输送机、台车命令字:
///1-入库(朝向库)
/// 2-出库(背向库)
/// 3-送货
/// 4-停止
/// <param name="DeviceIndex">设备编号</param>
/// <returns>发送其它设备命令是否成功</returns>
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int ArrowDeviceIndex)
{
return true;
}
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ, string DoubleFork)
{
return true;
}
public bool SendDeviceOrder(int DeviceIndex, string TobaccoCode, bool HaveFirstProjectCode, bool IfSmallTobacco, int Count)
{
return true;
}
public bool WriteDBData(StringBuilder[] ItemNames, StringBuilder[] ItemValues)
{
return true;
}
public bool WriteDBData(StringBuilder[] ItemNames, StringBuilder[] ItemValues, string PLCconnectionID)
{
return true;
}
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int DeviceIndex, int StartDevice, int EndDevice,
int Order, int BoxQuality, int BoxCount, int PalletBufferNum)
{
return true;
}
/// <summary>
///
/// </summary>
/// <param name="TaskIndex">任务号即调度指令号</param>
/// <param name="TASK_LEVEL">优先级 1-8 越大优先级越高</param>
/// <param name="PALLET_BARCODE">托盘码</param>
/// <param name="START_DEVICE_CODE">取货地址</param>
/// <param name="FINISH_DEVICE_CODE">送货地址</param>
/// <param name="status">任务状态
/// 0. 新任务(WCS生成任务数据时给出)
/// 1. AGV接收任务
///2. AGV分配任务
///3. AGV取货完成
///4. AGV送货完成
///5. 整体任务完成
///6. 删除任务(AGV系统删除完的任务状态)
/// <param name="agvcode">指定车号,不指定为0</param>
/// <param name="time">任务开始时间</param>
/// <returns></returns>
public bool SendDeviceOrder(int TaskIndex, int TASK_LEVEL, string PALLET_BARCODE, string START_DEVICE_CODE, string FINISH_DEVICE_CODE, int status, int agvcode, DateTime time)
{
StringBuilder sql = new StringBuilder();
StringBuilder sss = new StringBuilder();
DataView dvmm = new DataView();
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_MonitorIndex = ").Append(TaskIndex).Append(" AND F_Status = 0");
dvmm = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvmm.Count == 0)
{
_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder发生错误:不存在对应的空闲指令!";
return false;
}
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_DeviceIndex = 50001 and (F_Status = 1 or F_Status = 2) ").Append("and F_NumParam2 = ").Append(START_DEVICE_CODE);//and F_MonitorIndex != .Append(TaskIndex)
dvmm = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvmm.Count > 0)
{
//StringBuilder AheadDetectUnallow = new StringBuilder();
//AheadDetectUnallow.Clear();
//AheadDetectUnallow.Append("等待发送:存在此起点已发送或以获取但未取完货的任务!");
//UpdateAheadDetectUnallow(AheadDetectUnallow, MonitorIndex);
//_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder等待发送:存在此起点已发送或以获取但未取完货的任务!";
return false;
}
try
{
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM AGV_TASK WHERE FID = ").Append(TaskIndex);
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
{
_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder发生错误:AGV已存在该指令";
return false;
}
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
dtime.Remove(dtime.Length - 1, 1);
dbo.ExecuteSql(string.Format(
"INSERT INTO AGV_TASK(FID, AGV_TASK_LEVEL, PALLET_BARCODE,START_DEVICE_CODE, FINISH_DEVICE_CODE, AGV_TASK_STATUS, AGV_CODE, AGV_TASK_BEGINTIME,AGV_TASK_ENDTIME, ERROR_TEXT,INSERT_TIME )VALUES ({0}, {1}, '{2}', '{3}', '{4}', {5}, {6}, '{7}', '{8}', '{9}','{10}')",
TaskIndex, TASK_LEVEL.ToString(), PALLET_BARCODE, START_DEVICE_CODE, FINISH_DEVICE_CODE, status.ToString(), agvcode.ToString(), 0, 0, 0, dtime.ToString()));
return true;
}
catch (Exception ex)
{
_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder发生错误:" + ex.Message;
return false;
}
}
}
}