using System; using System.Collections.Generic; using System.Text; using System.Data; using ICommLayer; using CommLayerFactory; using DBFactory; using System.Threading; namespace ControlSystem { /// /// Creator:Richard.liu /// /// 命令开关等全局变量的定义 /// public static class CStaticClass { static StringBuilder sss = new StringBuilder(); static StringBuilder[] wv = {new StringBuilder("2") }; static StringBuilder[] witemnames ={ new StringBuilder("") }; static char[] dd = new char[1] { '.' };//20101124 static string[] sp;//20101124 static string _userID; /// /// 任务日志和设备故障记录的保存时间,默认为30天 /// public static string SaveDays = "30";//20110603 /// /// 用户编号 /// public static bool isDisassembleTask = false; public static string UserID { get { return CStaticClass._userID; } set { CStaticClass._userID = value; } } static int _MessageIndex; static bool _Order;// static bool _InvStatus;// static bool _ObtainManageTask;// static bool _autoOrder; static bool _handOrder; static bool _tempOrder; // 20120619 南昌添加暂停获取任务开关 static bool _tempStopObtainTask; static ISendDeviceOrder sdo; //20100108 static IGetDeviceState gds; //20091102 public static int gcCount = 0; //20091107 static string _movedDeviceAheadTrigger = "1"; /// /// 移动设备是否被提前触发将取 /// public static string MovedDeviceAheadTrigger { get { return CStaticClass._movedDeviceAheadTrigger; } set { if ((value == "0") || (value == "1")) { CStaticClass._movedDeviceAheadTrigger = value; } else { CStaticClass._movedDeviceAheadTrigger = "1"; } } } static string _outDetectArrowIdleGoods = "1"; /// /// 堆垛机出库是否检测目标输送机空闲和有物 /// public static string OutDetectArrowIdleGoods { get { return CStaticClass._outDetectArrowIdleGoods; } set { if ((value == "0") || (value == "1")) { CStaticClass._outDetectArrowIdleGoods = value; } else { CStaticClass._outDetectArrowIdleGoods = "1"; } } } static string _deviceErrorAutoModifyRoutePath = "0"; /// /// 设备发生故障自动变更路径 /// public static string DeviceErrorAutoModifyRoutePath { get { return CStaticClass._deviceErrorAutoModifyRoutePath; } set { if ((value == "0") || (value == "1")) { CStaticClass._deviceErrorAutoModifyRoutePath = value; } else { CStaticClass._deviceErrorAutoModifyRoutePath = "0"; } } } static string _doubleForkWaitTime = "120"; /// /// 双叉关联入库任务允许等待的时间单位(秒):默认120秒 /// public static string DoubleForkWaitTime { get { return CStaticClass._doubleForkWaitTime; } set { if (Microsoft.VisualBasic.Information.IsNumeric(_doubleForkWaitTime)==true ) { CStaticClass._doubleForkWaitTime = value; } else { CStaticClass._doubleForkWaitTime = "120"; } } } static string _transportTimeout = "5"; /// /// 输送超时最大允许时间单位(分):默认5分钟//20110608 /// public static string TransportTimeout { get { return CStaticClass._transportTimeout; } set { if (Microsoft.VisualBasic.Information.IsNumeric(_transportTimeout) == true) { CStaticClass._transportTimeout = value; } else { CStaticClass._transportTimeout = "5"; } } } static string _stackTimeout = "5"; /// /// 输送超时最大允许时间单位(分):默认5分钟//20110608 /// public static string StackTimeout { get { return CStaticClass._stackTimeout; } set { if (Microsoft.VisualBasic.Information.IsNumeric(_stackTimeout) == true) { CStaticClass._stackTimeout = value; } else { CStaticClass._stackTimeout = "5"; } } } static string _agvAllowSingleFork = "0"; /// /// AGV是否允许单叉动作,:默认双叉一起动作 0 /// public static string AGVAllowSingleFork { get { return CStaticClass._agvAllowSingleFork; } set { if ((value == "0") || (value == "1")) { CStaticClass._agvAllowSingleFork = value; } else { CStaticClass._agvAllowSingleFork = "0"; } } } //20100108 /// /// 摄像头服务器IP /// public static string CameraIP = "1"; /// /// 登陆摄像头服务器的用户标识 /// public static string CameraUsername = "1"; /// /// 登陆摄像头服务器的密码 /// public static string CameraPassword = "1"; public static bool IfRemind = false; public static DateTime routetime=DateTime.Now; public static DBOperator dbo =new DBOperator(); public static DBOperator dbo1 = new DBOperator(); public static DBOperator dboM = new DBOperator("ManConnString", "ManDBFactory"); public static System.Windows.Forms.Form FormMonitor = null; static bool _deviceInit; static string _routeSearchMode="0"; static bool _realRefresh=true; public static Model.MDevice devinfo28; //20100609 public static Dictionary serialports=new Dictionary(); static Model.MDevice devinfo; //20120519 nanchang 添加测试程序用的标志变量 public static bool StopTestLane = true; public static bool LIKUSTATUS = true; static int _stackSafeDistance = 12; // 可以修改 货位数 == 6个大货格 public static string BarcodeNull = "11111111111"; //表示未读到条码 /// /// 堆垛机安全距离 /// public static int StackSafeDistance { get { return CStaticClass._stackSafeDistance; } set { CStaticClass._stackSafeDistance = value; } } static StringBuilder manZWhere = new StringBuilder(); /// /// 获取的任务的排(Z)的between条件OR关系 /// public static StringBuilder ManZWhere { get { return CStaticClass.manZWhere; } set { CStaticClass.manZWhere = value; } } //20100607管理数据库类工厂初始化 static string _manDBFactory = dboM.GetValue("ManDBFactory"); /// /// 管理系统的数据库工厂:SQLServerDBFactory,OracleDBFactory,OleDBFactory /// public static string ManDBFactory { get { return CStaticClass._manDBFactory; } set { if ((value == "SQLServerDBFactory") || (value == "OracleDBFactory") || (value == "OleDBFactory")) { CStaticClass._manDBFactory = value; } else { CStaticClass._manDBFactory = "SQLServerDBFactory"; } } } static string _manstatus = " F_Status<>-1 ";//默认,显示调度任务全部队列 static string _monstatus = " F_Status<>-1 ";//默认,显示设备指令全部队列 /// /// 显示调度任务全部队列" F_Status<>-1 ";等待队列" F_Status=0 ";运行队列" F_Status=1 "; /// public static string Manstatus { get { return CStaticClass._manstatus; } set { CStaticClass._manstatus = value; } } /// /// 显示设备指令全部队列" F_Status<>-1 ";等待队列" F_Status=0 ";运行队列" F_Status=1 "; /// public static string Monstatus { get { return CStaticClass._monstatus; } set { CStaticClass._monstatus = value; } } /// /// 是否实时刷新监控和调度任务列表 /// public static bool RealRefresh { get { return CStaticClass._realRefresh; } set { CStaticClass._realRefresh = value; } } /// /// 路径搜索方式:0,按照最优路径选择固定路线;1,每个正在工作的节点作为起始点,向末端节点重新搜索下一个最优路径的节点 /// public static string RouteSearchMode { get { return CStaticClass._routeSearchMode; } set { if ((value == "0") || (value == "1")) { CStaticClass._routeSearchMode = value; } else { CStaticClass._routeSearchMode = "0"; } } } /// /// 执行自动命令开关 /// public static bool AutoOrder { get { return CStaticClass._autoOrder; } set { CStaticClass._autoOrder = value; } } /// /// 执行手工命令开关 /// public static bool HandOrder { get { return CStaticClass._handOrder; } set { CStaticClass._handOrder = value; } } /// /// 执行临时管理命令开关 /// public static bool TempOrder { get { return CStaticClass._tempOrder; } set { CStaticClass._tempOrder = value; } } /// /// 监控发送消息索引 /// public static int MessageIndex { get { return CStaticClass._MessageIndex; } set { if (value > 240) { value = 1; } CStaticClass._MessageIndex = value; } } /// /// 命令开关是否打开 /// public static bool Order { get { return CStaticClass._Order; } set { CStaticClass._Order = value; } } /// /// 盘库是否开始 /// public static bool InvStatus { get { return CStaticClass._InvStatus; } set { CStaticClass._InvStatus = value; } } /// /// 是否获取调度任务 /// public static bool ObtainManageTask { get { return _ObtainManageTask; } set { _ObtainManageTask = value; } } /// /// 20120619 是否暂停获取部分调度任务 /// public static bool TempStopObtainTask { get { return _tempStopObtainTask; } set { _tempStopObtainTask = value; } } /// /// 是否执行设备初始化命令 /// public static bool DeviceInit { get { return CStaticClass._deviceInit; } set { CStaticClass._deviceInit = value; } } public static void ReConnect() { //20100127 //SimensProdave6.CSimensProdave6_S7.InitCount = 0; SocketsTCPIP.CClientTCPIP.TcpIPInitCount = 0; OPCClient.CCommonOPCClient.ConnectCount = 0; // 20120427 南昌 添加每个S7连接的计数清理 OPCClient.CCommonOPCClient.ErrorCount = new int[11] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; } public static int LambDB2Add = 2016; static StringBuilder sql = new StringBuilder(); public static int[] AllReturns; static string GetDeviceS7Connection(int deviceindex) {//20110216 DataView dv = dbo.ExceSQL("SELECT F_S7Connection FROM T_Base_Device WHERE (F_DeviceIndex = " + deviceindex + ")").Tables[0].DefaultView; if (dv.Count > 0) { return dv[0]["F_S7Connection"].ToString(); } else { return null; } } /// /// 20110216支持多个S7Connnection组态OPC /// public static Dictionary MutiS7ConnReturns=new Dictionary(); /// /// 取得所有光电开关的信号 /// public static void GetAllReturns() {//20110216 try { // 20120420 调试时候,增加F_LockedState字段,没有上电的设备不读取。 DataView dv = dbo.ExceSQL("SELECT F_DeviceIndex,F_S7Connection, F_LockedState FROM T_Base_Device WHERE (F_DeviceKindIndex = 28)").Tables[0].DefaultView; if (dv.Count > 0) { for (int i = 0; i < dv.Count; i++) { // 20120425 nanchang 调试时候,把没有上电或调试好的S7链接设置成-1 if (Convert.ToInt32(dv[i]["F_LockedState"]) != -1) { gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"])); MutiS7ConnReturns[dv[i]["F_S7Connection"].ToString()] = gds.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]), 0); if (gds.CommLayerError != null) { //if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得所有光电开关的信号时:" + gds.CommLayerError) < 0) //{ // FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得所有光电开关的信号时:" + gds.CommLayerError, true); //} } } } } else { MutiS7ConnReturns = null; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得所有光电开关的信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得所有光电开关的信号时:" + ex.Message, true); } return; } } /// /// 取得指定光电开关(确认按钮)设备索引的信号(0,1) /// /// 设备索引 /// 0,1 public static int GetDevicePhotoelectric(int deviceIdx) { try { //20110216 if (CStaticClass.MutiS7ConnReturns.Count > 0) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; } if (deviceIdx == 22001) { deviceIdx = 22001; } if (AllReturns != null) { #region 获取开关量的值 //DataView dvle = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex,F_DBWGetLength," + // " F_DBW2Address FROM T_Base_Device WHERE ((F_DeviceKindIndex = 14)" + // " OR (F_DeviceKindIndex = 18)) and (F_DBW2Address is not NULL) and F_DeviceIndex=" + deviceIdx + "").Tables[0].DefaultView; devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); int glen = 0; int IfVis = 0; if ((devinfo.DeviceKind == 14) || (devinfo.DeviceKind == 18)) { //20110216 devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; if (Convert.ToInt32((devinfo.Dbw2Getlength * 8 - 1)) > 7) { glen = Convert.ToInt32((devinfo.Dbw2Getlength * 8 - 1)) - 8; temp = temp + 1; } else { glen = Convert.ToInt32((devinfo.Dbw2Getlength * 8 - 1)); } if (temp >= 0) { IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(AllReturns[temp], glen); //if (dvle[0]["F_DeviceKindIndex"].ToString() == "18") //{//配合孙宇光电开关0有探物,1无探物,在这里取反符合正常逻辑 // if (IfVis == 1) // { // IfVis = 0; // } // else // { // IfVis = 1; // } //} return IfVis; } else { return -1; } } else { return -1; } #endregion } else { return -1; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true); } return -1; } } /// /// 20101118根据设备号和bit位,取得F_SplitByte里的光电bit值:0,1 /// /// /// /// public static int GetDevicePhotoelectric(int deviceIdx,int abit) { try { //20110216 if (MutiS7ConnReturns.Count > 0) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; } if (AllReturns != null) { #region 获取开关量的值 //DataView dvle = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex,F_DBWGetLength," + // " F_DBW2Address FROM T_Base_Device WHERE ((F_DeviceKindIndex = 14)" + // " OR (F_DeviceKindIndex = 18)) and (F_DBW2Address is not NULL) and F_DeviceIndex=" + deviceIdx + "").Tables[0].DefaultView; devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); int glen = 0; int IfVis = 0; if (devinfo.SplitByte!=-1) { //20110216 devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.SplitByte - devinfo28.Dbw2Address; if (abit > 7) { glen = abit - 8; temp = temp + 1; } else { glen = abit; } if (temp >= 0) { IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(AllReturns[temp], glen); //if (dvle[0]["F_DeviceKindIndex"].ToString() == "18") //{//配合孙宇光电开关0有探物,1无探物,在这里取反符合正常逻辑 // if (IfVis == 1) // { // IfVis = 0; // } // else // { // IfVis = 1; // } //} return IfVis; } else { return -1; } } else { return -1; } #endregion } else { return -1; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true); } return -1; } } /// /// //20101124根据【设备号.bit位】的字符串,取得F_SplitByte里的光电bit值:0,1 /// /// /// /// public static int GetDevicePhotoelectric(string devicebit) { sp = devicebit.Split(dd);//20101124 if (sp.GetLength(0) <= 1) return -1; int deviceIdx,abit; int.TryParse(sp[0], out deviceIdx); int.TryParse(sp[1], out abit); try { //20110216 if (CStaticClass.MutiS7ConnReturns.Count > 0) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; } if (AllReturns != null) { #region 获取开关量的值 //DataView dvle = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex,F_DBWGetLength," + // " F_DBW2Address FROM T_Base_Device WHERE ((F_DeviceKindIndex = 14)" + // " OR (F_DeviceKindIndex = 18)) and (F_DBW2Address is not NULL) and F_DeviceIndex=" + deviceIdx + "").Tables[0].DefaultView; devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); int glen = 0; int IfVis = 0; if (devinfo.SplitByte != -1) { //20110216 devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.SplitByte - devinfo28.Dbw2Address; if (abit > 7) { glen = abit - 8; temp = temp + 1; } else { glen = abit; } if (temp >= 0) { IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(AllReturns[temp], glen); //if (dvle[0]["F_DeviceKindIndex"].ToString() == "18") //{//配合孙宇光电开关0有探物,1无探物,在这里取反符合正常逻辑 // if (IfVis == 1) // { // IfVis = 0; // } // else // { // IfVis = 1; // } //} return IfVis; } else { return -1; } } else { return -1; } #endregion } else { return -1; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true); } return -2; } } /// /// 取得指定设备索引的设备状态:[0]读写标志;[1]状态;[2]任务号;[3]X坐标;[4]Y坐标;[5]设备索引 /// /// 设备索引 /// public static int[] GetDeviceState(int deviceIdx) { //20100108 //DataView dv; //DataView dvM; Model.MDevice askdev; int[] states = new int[6]; //string headstr; DataView dvbc; try { //20110216 if (CStaticClass.MutiS7ConnReturns.Count > 0) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; } if (deviceIdx == 22001) { deviceIdx = 22001; } if (AllReturns != null) { #region 获取设备状态 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); if (devinfo.Dbw2Address != -1) { //20100108 //DataView dv; //DataView dvM; //Model.MDevice askdev; //20110216 devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; decimal glen = devinfo.Dbw2Getlength; //20100108 states = new int[6]; wv[0].Remove(0, wv[0].Length); wv[0].Append("2"); witemnames[0].Remove(0, witemnames[0].Length); witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(",byte").Append(Convert.ToString(devinfo.Dbw2Address + 0)); sdo = CommModeCreate.CreateSendDeviceOrder(deviceIdx); switch (devinfo.DeviceKind.ToString()) { #region 现场控制触摸屏申请信息(16个字节) case "22": if (AllReturns[temp] != 1) return null; states = new int[16]; states[0] = 0; states[1] = deviceIdx; states[2] = AllReturns[temp + 1];//命令字 states[3] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//设备索引 states[4] = (AllReturns[temp + 4] << 8) + AllReturns[temp + 5];//任务号 askdev = Model.CGetInfo.GetDeviceInfo(states[3]); //states[2];//命令字 //states[3];//设备索引(当前申请设备的索引) //states[4];//任务号(需要修改目标位置的任务号) //20091102 if (askdev == null) { wv[0].Remove(0, wv[0].Length); wv[0].Append("37"); sdo.WriteDBData(witemnames, wv, devinfo.DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "37申请的设备号不存在"); return null; } int bcz = 0; StringBuilder barcode = new StringBuilder(); for (int j = 6; j < 16; j++) { bcz = bcz + AllReturns[temp + j]; barcode.Append(Convert.ToChar(AllReturns[temp + j]).ToString().ToUpper()); states[j - 1] = AllReturns[temp + j]; } //20090902新增加arraylength if (IsEquals(devinfo.ReturnMessage, states, 5) == false) { devinfo.ReturnMessage = states; Model.CGetInfo.SetDeviceMessage(devinfo); sss.Remove(0, sss.Length); sss.Append("**触摸屏设备索引" + states[1]).Append("**命令字" + states[2]) .Append("**申请的设备索引" + states[3]).Append("**申请的任务号" + states[4]).Append("**申请的条码" + barcode); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到现场控制触摸屏申请信息", deviceIdx.ToString(), sss.ToString()); } #region 申请重发当前设备指令(1) if (states[2] == 1)//命令字 { if (states[4] == 0)//无任务号 { if (bcz == 0)//无条码号 { //32申请的任务号和条形码都不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("32"); sdo.WriteDBData(witemnames, wv, devinfo.DeviceIndex );//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "32申请的任务号和条形码都不存在"); return null; } else//有条码号 { #region 有条码号 //DataView dv = dbo.ExceSQL("SELECT F_BarCode, F_Askkind, F_DeviceIndex FROM T_Base_PLC_Ask where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView; //if (dv.Count > 0) //{ // if (barcode == dv[i]["F_BarCode"].ToString()) // { // return null; // } // else // { if (askdev.UseCommonDB == "1") { sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( barcode).Append("' order by F_MonitorIndex asc"); } else {//20090928 and F_DeviceIndex=" + states[3] + " sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( barcode).Append("' order by F_MonitorIndex asc"); } //20100108 dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvbc.Count > 0) { if (askdev.UseCommonDB == "1") { //20090915 sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=").Append(states[3]).Append(" where F_MonitorIndex=").Append(dvbc[0]["F_MonitorIndex"]).Append(""); dbo.ExceSQL(sql.ToString()); } //wv[0] = "4"; //sdo.WriteDBData(witemnames, wv); return states; } else { //35申请的设备号和条形码不匹配 wv[0].Remove(0, wv[0].Length); wv[0].Append("35"); sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex );//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "35申请的设备号和条形码不匹配"); return null; } // } //} #endregion } } else//有任务号 { #region 有任务号 //DataView dv = dbo.ExceSQL("SELECT F_TaskIndex, F_Askkind, F_DeviceIndex FROM T_Base_PLC_Ask where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView; //if (dv.Count > 0) //{ // if (states[4] == dv[i]["F_TaskIndex"].ToString()) // { // return null; // } // else // { if (askdev.UseCommonDB == "1") { sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( states[4]).Append("' order by F_MonitorIndex asc"); } else {//20090928 and F_DeviceIndex=" + states[3] + " sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( states[4]).Append("' order by F_MonitorIndex asc"); } //20101008 dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvbc.Count > 0) { if (askdev.UseCommonDB == "1") { //20090915 sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=").Append(states[3]).Append(" where F_MonitorIndex=").Append(dvbc[0]["F_MonitorIndex"]); dbo.ExceSQL(sql.ToString()); } //RestoreDevice(Convert.ToInt32(dvbc[0]["F_MonitorIndex"])); //wv[0] = "4"; //sdo.WriteDBData(witemnames, wv); ////记录任务号 //dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + states[4] // + "' where F_DeviceIndex=" + DeviceIndex); return states; } else { //36申请的设备号和任务号不匹配 wv[0].Remove(0, wv[0].Length); wv[0].Append("36"); sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "36申请的设备号和任务号不匹配"); return null; } // } //} #endregion } } #endregion #region 申请修改当前设备所执行任务目标位置(2) else if (states[2] == 2)//命令字 { //申请修改当前设备所执行任务目标位置的F_TaskIndex重复时不允许相应申请 return states; } #endregion #region 上报完成(3) else if (states[2] == 3)//命令字 { if (states[4] == 0)//无任务号 { if (bcz == 0)//无条码号 { //32申请的任务号和条形码都不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("32"); sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "32申请的任务号和条形码都不存在"); return null; } else//有条码号 { #region 有条码号 //20100108 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( barcode).Append("' order by F_MonitorIndex asc"); dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvbc.Count > 0) { return states; } else { //30申请的条码号不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("30"); sdo.WriteDBData(witemnames, wv,devinfo .DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "30申请的条码号不存在"); return null; } #endregion } } else { #region 有任务号 //DataView dv = dbo.ExceSQL("SELECT F_TaskIndex, F_Askkind, F_DeviceIndex FROM T_Base_PLC_Ask where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView; //if (dv.Count > 0) //{ // if (states[4] == dv[i]["F_TaskIndex"].ToString()) // { // return null; // } // else // { //and F_DeviceIndex=" + states[3] + " //20100108 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( states[4]).Append("' order by F_MonitorIndex asc"); dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvbc.Count > 0) { //wv[0] = "2"; //sdo.WriteDBData(witemnames, wv); ////记录任务号 //dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + states[4] // + "' where F_DeviceIndex=" + DeviceIndex); return states; } else { //31申请的任务号不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("31"); sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "31申请的任务号不存在"); return null; } // } //} #endregion } } #endregion #region 删除当前设备所执行的任务(4)(托盘拿走) else if (states[2] == 4)//命令字 { //20090915 if (states[4] == 0)//无任务号 { if (bcz == 0)//无条码号 { //32申请的任务号和条形码都不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("32"); sdo.WriteDBData(witemnames, wv,devinfo .DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "32申请的任务号和条形码都不存在"); return null; } else//有条码号 { #region 有条码号 //20100108 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( barcode).Append("' order by F_MonitorIndex asc"); dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvbc.Count > 0) { return states; } else { //30申请的条码号不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("30"); sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex);//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "30申请的条码号不存在"); return null; } #endregion } } else {//20090915 #region 有任务号 //20100108 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( states[4]).Append("' order by F_MonitorIndex asc"); dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvbc.Count > 0) { return states; } else { //31申请的任务号不存在 wv[0].Remove(0, wv[0].Length); wv[0].Append("31"); sdo.WriteDBData(witemnames, wv,devinfo .DeviceIndex );//20091013 CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "31申请的任务号不存在"); return null; } #endregion } } #endregion break; #endregion #region 机器人码垛信息 case "24": if (AllReturns[temp] != 1) return null; states[0] = 0; states[1] = deviceIdx; states[2] = AllReturns[temp + 1];//机器人动作:1-取货完成;2-放货完成;3-托盘码垛完成 states[3] = AllReturns[temp + 2];//托盘码垛数量 //sdo.WriteDBData(witemnames, wv); devinfo.ReturnMessage = states; Model.CGetInfo.SetDeviceMessage(devinfo); //string ssss = ""; //for (int j = 0; j <= 3; j++) //{ // ssss += "**" + states[j].ToString(); //} //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), ssss); break; #endregion #region 其他设备 case "1"://堆垛机 states[0] = AllReturns[temp];//读写标志 states[1] = AllReturns[temp + 1];//状态 states[2] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//任务号 states[3] = AllReturns[temp + 7] + (AllReturns[temp + 6] << 8) + (AllReturns[temp + 5] << 16) + (AllReturns[temp + 4] << 32);//X坐标 //states[4] = AllReturns[temp + 11] + (AllReturns[temp + 10] << 8) + (AllReturns[temp + 9] << 16) + (AllReturns[temp + 8] << 32);//Y坐标 states[4] = AllReturns[temp + 8] + AllReturns[temp + 9] + AllReturns[temp + 10] + AllReturns[temp + 11];//Y坐标 states[5] = deviceIdx;//设备号索引 if (IsEquals(devinfo.ReturnMessage, states, 3) == false) { devinfo.ReturnMessage = states; Model.CGetInfo.SetDeviceMessage(devinfo); sss.Remove(0, sss.Length); sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]) .Append("**列坐标" + states[3]).Append("**层坐标" + states[4]); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到堆垛机状态", deviceIdx.ToString(), sss.ToString()); } break; case "2"://输送机 states[0] = AllReturns[temp];//读写标志 states[1] = AllReturns[temp + 1];//状态 states[2] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//任务号 states[3] = AllReturns[temp + 4];//20120506 南昌 检尺状态; states[4] = AllReturns[temp + 5];//20120506 南昌 有货开关量检测; states[5] = deviceIdx;//设备号索引 if (IsEquals(devinfo.ReturnMessage, states, 3) == false) { devinfo.ReturnMessage = states; Model.CGetInfo.SetDeviceMessage(devinfo); //if (states[1] > 1) // 20120815 改成只记录完成和报警的黑匣子 //{ sss.Remove(0, sss.Length); sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]); if (deviceIdx == 14021 || deviceIdx == 14011) { int ssss = 0; } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到输送机状态", deviceIdx.ToString(), sss.ToString()); // } } break; case "4"://RGV states[0] = AllReturns[temp];//读写标志 states[1] = AllReturns[temp + 1];//状态 states[2] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//任务号 states[3] = AllReturns[temp + 7] + (AllReturns[temp + 6] << 8) + (AllReturns[temp + 5] << 16) + (AllReturns[temp + 4] << 32);//X坐标 states[4] = 0; states[5] = deviceIdx;//设备号索引 if (IsEquals(devinfo.ReturnMessage, states, 3) == false) { devinfo.ReturnMessage = states; Model.CGetInfo.SetDeviceMessage(devinfo); sss.Remove(0, sss.Length); sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]).Append("**X坐标" + states[3]); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), sss.ToString()); } break; case "8":// sanyi增加条码扫描仪的关联检尺判断-类型8。2010-4-2 states[0] = CStaticClass.AllReturns[temp];//读写标志, if (states[0] == 2 || states[0] == 0)// 电气初始化可能是0 { return null; } else// 当电气修改读写标志为:1才读取 { states[1] = CStaticClass.AllReturns[temp + 1];//状态,PLC 0:无货 1:低货 2:高货;50检尺错误 51:超重 states[2] = 0; states[3] = 0; states[4] = 0; states[5] = deviceIdx;//设备号索引 string sss = ""; for (int j = 0; j <= 5; j++) { sss += "***" + states[j].ToString(); } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), sss); // 清理检尺数据区,读写标志改成2 sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex); } break; #endregion } return states; } else { return null; } #endregion } else { return null; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("CStaticClass取得指定设备状态时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "CStaticClass取得指定设备状态时:" + ex.Message+deviceIdx.ToString (), true); } return null; } finally {//20100108 //dv=null; //dvM = null; askdev = null; states = null; dvbc = null; } } public static string GetStringData(int deviceIdx) { try { //20110216 if (CStaticClass.MutiS7ConnReturns.Count > 0) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; } if (AllReturns != null) { #region 获取设备状态 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); if (devinfo.Dbw2Address != -1) { int temp = devinfo.Dbw2Address + 4; //int temp = devinfo.Dbw2Address; decimal glen = devinfo.Dbw2Getlength; string headstr = AllReturns[devinfo.Dbw2Address].ToString(); string strdate = string.Empty; if (headstr != "2") return null; switch (devinfo.DeviceKind.ToString()) { #region 字符串信息 case "7"://条形码 sss.Remove(0, sss.Length); for (int i = 0; i < 6; i++) { sss.Append( Convert.ToChar(AllReturns[temp+i])); } strdate = sss.ToString().TrimEnd('/'); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", deviceIdx.ToString(), "读标志1**条码:" + strdate); break; case "21"://箱条码群读 sss.Remove(0, sss.Length); for (int i = 1; i <= 116; i++) { sss.Append(Convert.ToChar(AllReturns[temp + i])); } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC群读条码",deviceIdx.ToString(), "读标志1**条码:"+sss.ToString().ToUpper()); break; #endregion } return strdate; } else { return null; } #endregion #region 原获取设备状态 //devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); //if (devinfo.Dbw2Address != -1) //{ // //20110216 // devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); // int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; // decimal glen = devinfo.Dbw2Getlength; // string headstr = AllReturns[temp].ToString(); // string strdate = string.Empty; // if (headstr != "1") return null; // switch (devinfo.DeviceKind.ToString()) // { // #region 字符串信息 // case "7"://条形码 // sss.Remove(0, sss.Length); // temp = 253; // for (int i = 1; i <= 6; i++) // { // sss.Append(Convert.ToChar(AllReturns[temp + i])); // } // strdate = sss.ToString().TrimEnd('/'); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", deviceIdx.ToString(), "读标志1**条码:" + strdate); // break; // case "21"://箱条码群读 // sss.Remove(0, sss.Length); // for (int i = 1; i <= 116; i++) // { // sss.Append(Convert.ToChar(AllReturns[temp + i])); // } // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC群读条码", deviceIdx.ToString(), "读标志1**条码:" + sss.ToString().ToUpper()); // break; // #endregion // } // return strdate; //} //else //{ // return null; //} #endregion } else { return null; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("CStaticClass取得设备字符串信息时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "CStaticClass取得设备字符串信息时:" + ex.Message, true); } return null; } } /// /// 比较两个值型一维数组变量是否值相等 /// /// 值型一维数组1 /// 值型一维数组2 /// 比较结果,相等则true,否则false public static bool IsEquals(Array array1, Array array2,int arraylength) {//20090902新增加arraylength //比较类型是否一样 if ((array1 == null) || (array2 == null)) return false; if (!Object.ReferenceEquals(array1.GetType(), array2.GetType())) { return false; } //比较长度是否一样 if (array1.GetLength(0) != array2.GetLength(0)) { return false; } //比较成员是否对应相等 ValueType v1, v2; for (int i = 0; i < arraylength; i++) { v1 = (ValueType)array1.GetValue(i); v2 = (ValueType)array2.GetValue(i); if (!v1.Equals(v2)) { return false; } } return true; } private static void BeginListenAllReturns() { while (!exitThread) { try { GetAllReturns(); } catch (Exception ex) { // } Thread.Sleep(600); } } public static void StartListenReturn() { //exitThread = false; //mythread = new Thread(new ThreadStart(BeginListenAllReturns)); //mythread.IsBackground = true; //mythread.Start(); } public static void EndListenReturn() { //exitThread = true; //if (mythread != null) //{ // mythread.Abort(); // mythread = null; //} } private static Thread mythread; private static bool exitThread = false; public static int GetDeviceRunState(int deviceIdx) { int[] status = GetDeviceState(deviceIdx); if (status == null) { return -1; } else { return status[1]; } } /// /// /// /// 叠盘完成信号 /// 叠盘机记录的条码 /// public static int GetOverlapStatus(int deviceIdx) { try { if (devinfo28.DeviceKind == 28) { if (CStaticClass.MutiS7ConnReturns.Count > 0) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; } if (CStaticClass.AllReturns != null) { #region 叠盘完成信号 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; int flag = CStaticClass.AllReturns[temp];//叠盘完成标志 int boxnumber = CStaticClass.AllReturns[temp + 1];//叠盘数量 if (flag !=1) { return flag; } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读叠盘完成", deviceIdx.ToString(), "读标志1**叠盘数量:" + boxnumber); return flag; #endregion } else { return 0; } } else { return 0; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得叠盘完成信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得叠盘完成信号时:" + ex.Message, true); } return 0; } } /// /// 码垛完成信号 /// /// /// public static int GetRobotStatus(int deviceIdx ,out int boxsum) { boxsum = 0; try { if (devinfo28.DeviceKind == 28) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; if (CStaticClass.AllReturns != null) { #region 叠盘完成信号 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; int flag = CStaticClass.AllReturns[temp];//码垛完成 boxsum = CStaticClass.AllReturns[temp + 1];//数量 if (flag != 1) { return flag; } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码垛完成", deviceIdx.ToString(), "读标志1**箱数" + boxsum); return flag; #endregion } else { return 0; } } else { return 0; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得码垛完成信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得码垛完成信号时:" + ex.Message, true); } return 0; } } /// /// 码箱完成信号 /// /// public static int GetPackBoxBarcodes(int deviceIdx, out string packbarcodes) { packbarcodes = string.Empty; try { if (devinfo28.DeviceKind == 28) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; if (CStaticClass.AllReturns != null) { #region 码箱完成信号 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; int flag = CStaticClass.AllReturns[temp];//码箱完成信号 if (flag != 1) { return flag; } int sum = CStaticClass.AllReturns[temp + 1];//数量 int sumlenght =Convert .ToInt32( devinfo.Dbw2Getlength); int boxlenght = CStaticClass.AllReturns[temp + 2];//箱长度 if (sum == 1) { sumlenght = 25; } else if (sum == 2) { // sumlenght = 47; } sss.Remove(0, sss.ToString().Length); StringBuilder sb = new StringBuilder(); for (int i = 3; i < sumlenght; i++) { //if ((i > 16 && i < 25) || (i > 38 && i < 47)) //{ // sss.Append("0"); //} //else //{ sss.Append(Convert.ToChar(AllReturns[temp + i])); //} if (sss.Length == 22) { //if (sss.ToString().TrimEnd('0') != string.Empty) //{ sb.Append(sss.ToString()).Append("|"); //} sss.Remove(0, sss.Length); } } packbarcodes = sb.ToString().TrimEnd('|'); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码箱完成", deviceIdx.ToString(), "读标志1**箱数" + sum + "**条码长度" + boxlenght + "**条码值" + packbarcodes); return flag; #endregion } else { return 0; } } else { return 0; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得码箱完成信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得码箱完成信号时:" + ex.Message, true); } return 0; } } /// /// 拆跺完成 /// /// /// public static int GetRobotUnpack(int deviceIdx) { try { if (devinfo28.DeviceKind == 28) { AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)]; if (CStaticClass.AllReturns != null) { #region 拆跺完成信号 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; int flag = CStaticClass.AllReturns[temp];//拆垛完成 if (flag != 1) { return flag; } CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "拆垛完成", deviceIdx.ToString(), "读标志1"); return flag; #endregion } else { return 0; } } else { return 0; } } catch (Exception ex) { if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得码垛完成信号时:" + ex.Message) < 0) { FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得码垛完成信号时:" + ex.Message, true); } return 0; } } public static bool SetInLightOnOff() { DataView dv, dv1; string sql = string.Empty; int askkind = 44; int reader = 16004; char[] dd = new char[1] { ';' };//20101124 string[] DS;//20101124 try { sql = string.Format("select F_DeviceIndex from T_Base_PLC_Ask WHERE F_Askkind = {0} and F_DeviceIndex={1}", askkind, reader); dv = dbo.ExceSQL(sql).Tables[0].DefaultView; if (dv.Count > 0) { int devidx =12605;//灯设备 int taskend = 12604;//判读出库执行任务的终点,判读任何站台移库任务的终点 string checklight = "12605.2";//灯状态存放区 string checkdevice = "12604";//输送机状态 int curlightstatus = GetDevicePhotoelectric(checklight);//灯现在状态 int setlightstatus; int sendorder; sql = string.Format("select FID from T_Manage_Task where FENDDEVICE ={0} and FCONTROLTASKTYPE=2 and FSTATUS>0 ", taskend); dv1 = dbo.ExceSQL(sql).Tables[0].DefaultView; if (dv1.Count > 0) { //灯灭 setlightstatus = 0; sendorder = 8; } else { //灯亮 //只判断是否有出库任务,在亮绿灯的情况下,入库按钮才会生效 setlightstatus = 1; sendorder = 7; //DS = checkdevice.Trim().Split(dd); //string item; //int value = 0; //for (int k = 0; k < DS.Length; k++) //{ // item = DS[k]; // int deviceindex = Convert.ToInt32(item); // devinfo = Model.CGetInfo.GetDeviceInfo(deviceindex); // if (devinfo != null) // { // if (devinfo.SplitByte_0 == 1 || devinfo.SplitByte_1 == 1 || devinfo.RunState == 1) // { // value++; // } // } //} //if (value > 0) //{ // //灯灭 // setlightstatus = 0; // sendorder = 8; //} //else //{ // //灯亮 // setlightstatus = 1; // sendorder = 7; //} } if (curlightstatus!=-1 && setlightstatus != curlightstatus ) { sdo = CommModeCreate.CreateSendDeviceOrder(devidx); sdo.SendDeviceOrder(1, 30001, sendorder, devidx, 0); } } return true; } catch (Exception ex) { throw ex; } finally { //dv.Dispose(); } } } }