using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Threading; using Microsoft.VisualBasic; using DBFactory; using ICommLayer; namespace AGVDataTable { /// /// 20200430中间表接口 /// 发送设备命令类 /// /// 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(); //} /// /// 发送AGV车命令 /// /// 消息编号 /// 任务编号 /// AGV命令字 ///1-取送货 ///2.3... 待扩展 /// 设备编号 /// AGV取货站台(或区域) /// 0 /// 0 /// AGV送货站台(或区域) /// /// 0 /// 发送命令是否成功 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; StringBuilder sql = new StringBuilder(); StringBuilder sss = new StringBuilder(); DataView dv = new DataView(); sql.Remove(0, sql.Length); sql.Append("SELECT * FROM T_Monitor_Task WHERE F_MonitorIndex = ").Append(TaskIndex).Append(" AND F_Status = 0"); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count == 0) { _commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:不存在"+ TaskIndex +" 对应的空闲指令!"; return false; } try { int fid = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(TaskIndex); sql.Remove(0, sql.Length); sql.Append("SELECT * FROM AGV_TASK WHERE FID = ").Append(fid).Append(" AND AGV_TASK_ID = ") .Append(TaskIndex); if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0) { _commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:中间表已存在该指令:"+ TaskIndex; return false; } StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); dtime.Remove(dtime.Length - 1, 1); int TaskLevel = Convert.ToInt32(dv[0]["F_MonitorTaskLevel"]); string PalletBarcode = dv[0]["F_TxtParam"].ToString(); sql.Clear(); sql.Append("select * from T_Manage_Task where FID = ").Append(fid); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count == 0) { _commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:找不到对应的管理任务!"; return false; } int TaskType = Convert.ToInt32(dv[0]["FCONTROLTASKTYPE"]); int COMPOSITE_TAG = 0; string START_DEVICE_CODE2 = ""; string END_DEVICE_CODE2 = ""; string command = string.Format( "INSERT INTO AGV_TASK(AGV_TASK_ID, AGV_TASK_TYPE, AGV_TASK_LEVEL, PALLET_BARCODE, START_DEVICE_CODE, FINISH_DEVICE_CODE, COMPOSITE_TAG, AGV_TASK_BEGINTIME,FID,START_DEVICE_CODE2,FINISH_DEVICE_CODE2)" + " VALUES({0}, {1}, {2}, '{3}', '{4}', '{5}', '{6}', '{7}',{8}, '{9}', '{10}')", TaskIndex, TaskType, TaskLevel, PalletBarcode, StartX, EndX, COMPOSITE_TAG, dtime.ToString(), fid, START_DEVICE_CODE2, END_DEVICE_CODE2); dbo.ExecuteSql(command); sss.Remove(0, sss.Length); sss.Append("条码:").Append(PalletBarcode).Append("**写标志1").Append("**任务号" + TaskIndex.ToString()) .Append("**起始站台" + StartX.ToString()).Append("**终止站台" + EndX.ToString()).Append("**托盘条码" + PalletBarcode); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送AGV命令","", sss.ToString()); return true; } catch (Exception ex) { _commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:" + ex.Message; return false; } } /// /// 发送堆垛机以外的其它设备命令 /// /// 消息编号 /// 任务编号 /// 命令字 /// 穿梭车命令字: ///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; } /// /// LHDF /// /// /// private void GetAGVGatePalletType(int deviceindex, out int type) { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(string.Format("SELECT F_TYPE FROM T_Base_AGV_Gate where F_AGVGateDeviceIndex={0}", deviceindex)); DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { type = Convert.ToInt32(dv[0][0].ToString()); } else { type = 0; } } int GetGoodsHigh(int taskindex) { DataView dv = dbo.ExceSQL(string.Format("SELECT CELL_MODEL FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = {0}) AND (FID = {1})", Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(taskindex), Model.CGeneralFunction.GetManageTaskIndexfromMonitor(taskindex))).Tables[0].DefaultView; if (dv.Count > 0) { #region //int gh = 1; ////P工装板,B标准,G高货位,D大货位 //switch (dv[0][0].ToString().ToUpper()) //{ // case "P": // gh = 3; // break; // case "B": // gh = 2; // break; // case "G": // gh = 1; // break; // //case "D": // // gh = 4; // // break; // default: // gh = 1; // break; //} #endregion int gh = 0; //1小2大 switch (dv[0][0].ToString().ToUpper()) { case "1": gh = 1; break; case "2": gh = 2; break; default: gh = 0; break; } return gh; } else { return 0; } } /// /// 根据设备命令,PALLET_SIZE,STACK_TYPE\STACK_QTY /// /// /// private int GetManageInfo(int TaskIndx, string Field) { DataView dv = new DataView(); try { StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(string.Format("select {0} from T_Manage_Task where FID in(select F_ManageTaskIndex from T_Monitor_Task where F_MonitorIndex = {1})", Field, TaskIndx)); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0 && dv[0][Field].ToString().Trim()!= "")//dv[0][Field]!= DBNull.Value,int.Parse(dv[0][Field].ToString().Trim())> 0 { return Convert.ToInt32(dv[0][Field]); } return -1; } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } } }