using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Threading; using Microsoft.VisualBasic; using DBFactory; using ICommLayer; namespace MidDataTable { /// /// 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(); //} /// /// 发送环形穿梭车命令 /// /// 消息编号 /// 任务编号 /// 环穿命令字 ///1-取送货 ///2.3... 待扩展 /// 设备编号 /// 0 /// 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 RGV_TASK WHERE FID = ").Append(fid).Append(" AND RGV_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 LaneWay = TaskType == 2 ? Convert.ToInt32(dv[0]["FSTARTDEVICE"]) : Convert.ToInt32(dv[0]["FENDDEVICE"]); string command = string.Format( "INSERT INTO RGV_TASK(RGV_TASK_ID, RGV_TASK_TYPE, RGV_TASK_LEVEL, PALLET_BARCODE, START_DEVICE_CODE, END_AREA_CODE, LANE_CODE, RGV_TASK_BEGINTIME,FID)"+ " VALUES({0}, {1}, {2}, '{3}', '{4}', '{5}', '{6}', '{7}',{8})", TaskIndex, TaskType, TaskLevel, PalletBarcode, StartZ, EndZ, LaneWay, dtime.ToString(), fid); dbo.ExecuteSql(command); sss.Remove(0, sss.Length); sss.Append("条码:").Append(PalletBarcode).Append("**写标志1").Append("**任务号" + TaskIndex.ToString()) .Append("**起始站台" + StartZ.ToString()).Append("**终止站台" + EndZ.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送环形穿梭车命令","", 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; } } }