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(); //} /// /// 发送堆垛机命令 /// /// 消息编号 /// 任务编号 /// 堆垛机命令字 ///单叉单进伸: ///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-远位取放货 /// 设备编号 /// 起始x坐标,排-沿轨道方向 /// 起始y坐标,层-高度方向 /// 起始z坐标,列-面向堆垛机操作面板,1-左侧,2-右侧 /// 目标x坐标,排-沿轨道方向 /// 目标y坐标,层-高度方向 /// 目标z坐标,列-面向堆垛机操作面板,1-左侧,2-右侧 /// 发送堆垛机命令是否成功 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; } /// /// 发送幻想穿梭车指令 /// /// 消息编号 /// 任务编号 /// 命令字 /// 穿梭车命令字: ///1-复位 ///2-左接货 ///3-左送货 ///4-右接货 ///5-右送货 ///6-停止 ///7-运动到1#位置 ///8-运动到2#位置 /// … ///输送机、台车命令字: ///1-入库(朝向库) /// 2-出库(背向库) /// 3-送货 /// 4-停止 /// 设备编号 /// 发送其它设备命令是否成功 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; } /// /// /// /// 任务号即调度指令号 /// 优先级 1-8 越大优先级越高 /// 托盘码 /// 取货地址 /// 送货地址 /// 任务状态 /// 0. 新任务(WCS生成任务数据时给出) /// 1. AGV接收任务 ///2. AGV分配任务 ///3. AGV取货完成 ///4. AGV送货完成 ///5. 整体任务完成 ///6. 删除任务(AGV系统删除完的任务状态) /// 指定车号,不指定为0 /// 任务开始时间 /// 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; } } } }