⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitfeaturedlg.cpp

📁 此为某测试平台的上位机软件部分
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			
			//汇集结果
			for (int v=0; v<8; v++)
				g_bBoardStatusNext |= pDevInfo->sLastDeviceObj[v].bBitPass;
			
			pDevInfo->bWholeResult = g_bBoardStatusNext;
			if (g_bBoardStatusNext == FALSE)
			{
					::AfxMessageBox("初始化PXI硬件时出现错误,无法进行后续操作。\n请联系硬件技术支持人员解决。");
					return  FALSE;
			}
			
			return  TRUE;
	}
};

/**************************串口自检功能************************/
class  CSerialPortCmd: public  CBitCmdImpl
{
public:
	CSerialPortCmd(){;}
	virtual ~CSerialPortCmd(){;}
	
protected:
	virtual  BOOL  ModularBoard(LPVOID pData)
	{
			if(g_bRS232StatusNext == FALSE)
			{
					::AfxMessageBox("由于初始化RS232串口时出现错误,无法使用自检适配箱进行子检测试。	\
						\n请联系开发人员解决RS232串口故障。");
					return FALSE;
			}

			SerialPrtResultMiscelInfo *pDevInfo = static_cast<SerialPrtResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;
			
			//调用驱动开始测试
			;

			return  TRUE;
	}
};

/**************************示波器卡自检功能*************************/
class  CScopeBoardCmd: public  CBitCmdImpl
{
public:
	CScopeBoardCmd(){;}
	virtual ~CScopeBoardCmd(){;}
	
protected:
	virtual  BOOL  ModularBoard(LPVOID pData)
	{
			if(g_bBoardStatusNext == FALSE)
			{
					::AfxMessageBox("由于初始化PXI硬件时出现错误,无法使用PXI5112进行信号测试。\n请联系硬件模块问题。");
					return FALSE;
			}
			
			PXIScopeDevResultMiscelInfo *pDevInfo = static_cast<PXIScopeDevResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;
#if  1			
			BOOL    bMeasChnl = (pDevInfo->nActualItemNum >0);
			if (bMeasChnl == FALSE)
			{
					::AfxMessageBox("没有可测量的示波器PXI5112自检通道!");
					return  FALSE;
			}

			//调用PXI驱动开始测试,把测试结果写入结构体中
			float   measValue = 0.0f;
			for (int nItem =0; nItem<pDevInfo->nActualItemNum; nItem++)
			{
					//1.切换继电器
				    NMRS232::_ResetPCBBoard();
					for(int k=0; k<pDevInfo->sItemObj[nItem].sRelayItem.nActualRelayNum; k++)
					{
							if (NMRS232::_SendRelayOp(pDevInfo->sItemObj[nItem].sRelayItem.nRelayNo[k], NMRS232::dcOpen) == TRUE)
							{
								TRACE1("继电器顺序 = %d.\n", k+1);
							}
							else
							{
								::AfxMessageBox("自检适配箱控制器通信故障!");
								return  FALSE;
							}
					}
					//2.根据测量类型开始测量
					::Sleep(100);
					measValue = NMDriver_Scope::_Scope_Fetch(nItem);
					pDevInfo->sItemObj[nItem].sHidItemInfo.MeasVal = measValue;
					//3.比较分析结果
					pDevInfo->sItemObj[nItem].bPass = (measValue < 5.0f);
					
					::AfxMessageBox("等待");
			}
			
			//测量结束
			if (NMRS232::_ResetPCBBoard() == TRUE)
				::AfxMessageBox("测量结束,已复位自检适配箱控制器!");
#endif		
			pDevInfo->bWholeResult = TRUE;

			return  TRUE;
	}
};


/**************************DMM自检功能*************************/
class  CDMMBoardCmd: public  CBitCmdImpl
{
public:
	CDMMBoardCmd(){;}
	virtual ~CDMMBoardCmd(){;}
	
protected:
	virtual  BOOL  ModularBoard(LPVOID pData)
	{
			if(g_bBoardStatusNext == FALSE)
			{
					::AfxMessageBox("由于初始化PXI硬件时出现错误,无法使用ARINC429进行信号测试。\n请联系硬件模块问题。");
					return FALSE;
			}

			PXIDMMDevResultMiscelInfo *pDevInfo = static_cast<PXIDMMDevResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;
#if 1
			BOOL    bMeasChnl = (pDevInfo->nActualItemNum >0);
			if (bMeasChnl == FALSE)
			{
					::AfxMessageBox("没有可测量的万用表PXI4071自检通道!");
					return  FALSE;
			}

			//打开继电器,调用PXI驱动开始测试,把测试结果写入结构体中
			float   measValue = 0.0f;
			for (int nItem =0; nItem<pDevInfo->nActualItemNum; nItem++)
			{
					//1.切换继电器
				    NMRS232::_ResetPCBBoard();
					for(int k=0; k<pDevInfo->sItemObj[nItem].sHidItemInfo.nActualRelayNum; k++)
					{
							if (NMRS232::_SendRelayOp(pDevInfo->sItemObj[nItem].sHidItemInfo.nRelayNo[k], NMRS232::dcOpen) == TRUE)
							{
								TRACE1("继电器顺序 = %d.\n", k+1);
							}
							else
							{
								::AfxMessageBox("自检适配箱控制器通信故障!");
								return  FALSE;
							}
					}
					
					//2.根据测量类型开始测量
					switch(pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType) 
					{
					case PXIDMMDevResultMiscelInfo::acVolType :
						NMDriver_DMM::_DMM_ACVoltMode();
						NMRS232::_Send1ChMultiPattSignal(NMRS232::ssSine);
						break;
					case PXIDMMDevResultMiscelInfo::dcVolType :
						NMDriver_DMM::_DMM_DCVoltMode();
						break;
					case PXIDMMDevResultMiscelInfo::dcCurrType :
						NMDriver_DMM::_DMM_DCCurrMode();
						break;
					case PXIDMMDevResultMiscelInfo::acCurrType :
						NMDriver_DMM::_DMM_ACCurrMode();
						NMRS232::_Send1ChMultiPattSignal(NMRS232::ssSine);
						break;
					case PXIDMMDevResultMiscelInfo::OmType :
						NMDriver_DMM::_DMM_ResiMode();
						break;
					default:
						break;
					}
					::Sleep(100);
					measValue = NMDriver_DMM::_DMM_Measure();
					pDevInfo->sItemObj[nItem].sHidItemInfo.MeasVal = measValue;

					//3.比较分析结果
					pDevInfo->sItemObj[nItem].bPass = (measValue < pDevInfo->sItemObj[nItem].StdVal);					
					::AfxMessageBox("等待");
			}
			
			//测量结束
			if (NMRS232::_ResetPCBBoard() == TRUE)
				::AfxMessageBox("测量结束,已复位自检适配箱控制器!");
#endif
			pDevInfo->bWholeResult = TRUE;

			return  TRUE;
	}
};

/**************************75SD模块驱动状态自检功能************************/
class  C75SDBoardCmd: public  CBitCmdImpl
{
public:
	C75SDBoardCmd(){;}
	virtual ~C75SDBoardCmd(){;}
	
protected:
	virtual  BOOL  ModularBoard(LPVOID pData)
	{
			if(g_bBoardStatusNext == FALSE)
			{
				::AfxMessageBox("由于初始化PXI硬件时出现错误,无法进行旋变信号测试。\n请联系硬件模块问题。");
				return FALSE;
			}

			_75SDResultMiscelInfo *pDevInfo = static_cast<_75SDResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;
#if   0			
			BOOL    bMeasChnl = (pDevInfo->nActualItemNum >0);
			if (bMeasChnl == FALSE)
			{
					::AfxMessageBox("没有可测量的75SD模块自检通道!");
					return  FALSE;
			}
			
			//打开继电器,调用PXI驱动开始测试,把测试结果写入结构体中
			float   measValue = 0.0f;
			for (int nItem =0; nItem<pDevInfo->nActualItemNum; nItem++)
			{
					//1.切换继电器
				    NMRS232::_ResetPCBBoard();
					for(int k=0; k<pDevInfo->sItemObj[nItem].sHidItemInfo.nActualRelayNum; k++)
					{
							if (NMRS232::_SendRelayOp(pDevInfo->sItemObj[nItem].sHidItemInfo.nRelayNo[k], NMRS232::dcOpen) == TRUE)
							{
								TRACE1("继电器顺序 = %d.\n", k+1);
							}
							else
							{
								::AfxMessageBox("自检适配箱控制器通信故障!");
								return  FALSE;
							}
					}					
					//2.根据测量类型开始测量
					
					
					//3.比较分析结果
					pDevInfo->sItemObj[nItem].bPass = (measValue < 10.0f);
					
					::AfxMessageBox("等待");
			}
			pDevInfo->bWholeResult = TRUE;
			
			//测量结束
			if (NMRS232::_ResetPCBBoard() == TRUE)
				::AfxMessageBox("测量结束,已复位自检适配箱控制器!");
#endif
			return  TRUE;
	}
};
}	//end of namespace

















/*************************************************************************************
 * 首先换脸, 执行测试后更新数据
 * 
 ************************************************************************************/
#include "niswitch.h"
#pragma   comment(lib, "niswitch.lib")
namespace   AirStutNSP
{
		//定义全局对象
		static   CBoardStatusCmd		g_sBoardStatusTryDev;
		static   CScopeBoardCmd			g_sScopeBoardTryDev;
		static   CDMMBoardCmd			g_sDMMBoardTryDev;
		static   CARINC429Cmd			g_sARINC429TryDev;
		static   C75SDBoardCmd			g_s75SDBoardTryDev;
		static   CRelay2575BoardCmd		g_sRelay2575BoardTryDev;
		static   CRelay2565BoardCmd     g_sRelay2565BoardTryDev;
		static   CRelay2527BoardCmd     g_sRelay2527BoardTryDev;
		static   CDIO6508BoardCmd       g_sRelay6508BoardTryDev;
		static   CSerialPortCmd			g_sSerialPortTryDev;
/*******************************************************************************************
* 被界面命令调用的函数
   0x01, "模块状态自检",
   0x02, "示波器模块", 
   0x03, "DMM模块", 
   0x04, "429模块",
   0x05, "75SD旋变模块",
   0x06, "PXI2575多路复用器",
   0x07, "PXI2565 SPST继电器",
   0x08, "PXI2527多路复用器",
   0x09, "串口功能自检"
*******************************************************************************************/
void   GoBitEntry(CTreeCtrl *pTreeCtrl, int nItemNo, CListCtrl *pListCtrl, int nOpMode)
{
		ASSERT(pTreeCtrl);
		ASSERT(pListCtrl);
		TRACE1("选择项=%d.\n", nItemNo);

		int   nImageIndex = 2;
		switch(nItemNo)
		{
		case 0x01:		//模块的状态自检
			{
					g_sBoardStatusTryDev.OwnerObject(pListCtrl, &g_sPXIDeviceMiscelInfo);
					
					if (omFace == nOpMode) g_sBoardStatusTryDev.SwitchFace(new CBoardStatusFace);	//切换界面
					else nImageIndex = g_sBoardStatusTryDev.TryHWTest();  //获得信息(写入数据结构)

					NMRefObject::g_pBaseCmd  = &g_sBoardStatusTryDev;
					NMRefObject::pGlobalData = &g_sPXIDeviceMiscelInfo;
			}
			break;
		case 0x02:		//串口自检
			{
					g_sSerialPortTryDev.OwnerObject(pListCtrl, &g_sSerialPortInfo);
					
					if (omFace == nOpMode) g_sSerialPortTryDev.SwitchFace(new CSerialPortFace);
					else nImageIndex = g_sSerialPortTryDev.TryHWTest();

					NMRefObject::g_pBaseCmd  = &g_sSerialPortTryDev;
					NMRefObject::pGlobalData = &g_sSerialPortInfo;
			}
			break;
		case 0x03:		//示波器模块自检
			{
					g_sScopeBoardTryDev.OwnerObject(pListCtrl, &g_sScopeDevInfo);
					
					if (omFace == nOpMode) g_sScopeBoardTryDev.SwitchFace(new CScopeBoardFace);	//切换界面
					else nImageIndex = g_sScopeBoardTryDev.TryHWTest();  //获得信息(写入数据结构)

					NMRefObject::g_pBaseCmd  = &g_sScopeBoardTryDev;
					NMRefObject::pGlobalData = &g_sScopeDevInfo;
			}				
			break;
		case 0x04:		//DMM模块自检
			{
					g_sDMMBoardTryDev.OwnerObject(pListCtrl, &g_sDMMDevInfo);
					
					if (omFace == nOpMode) g_sDMMBoardTryDev.SwitchFace(new CDMMBoardFace);		//切换界面
					else nImageIndex = g_sDMMBoardTryDev.TryHWTest(); //获得信息(写入数据结构)

					NMRefObject::g_pBaseCmd  = &g_sDMMBoardTryDev;
					NMRefObject::pGlobalData = &g_sDMMDevInfo;
			}				
			break;
		case 0x05:		//429模块自检
			{
					g_sARINC429TryDev.OwnerObject(pListCtrl, &g_sARINC429DevInfo);
					
					if (omFace == nOpMode) g_sARINC429TryDev.SwitchFace(new CARINC429BoardFace);		//切换界面
					else nImageIndex = g_sARINC429TryDev.TryHWTest();  //获得信息(写入数据结构)

					NMRefObject::g_pBaseCmd  = &g_sARINC429TryDev;
					NMRefObject::pGlobalData = &g_sARINC429DevInfo;
			}				

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -