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

📄 relaydecl.h

📁 此为某测试平台的上位机软件部分
💻 H
字号:
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "CmnDef.h"
#include "SrlModDecl.h"
#include "FuncDecl.h"


#include "./boarddrv\PxiHDDrv.h"
#pragma  comment(lib, "./debug/BoardDrv.lib")
namespace GeneralModular
{
#include "niswitch.h"
#pragma   comment(lib, "niswitch.lib")

/**********************************************************************************
* 使用继电器板PXI2527、PXI2565、PXI2575自检功能
* 与DMM配合使用,切换通道
**********************************************************************************/
//PXI2527、PXI2565、PXI2575继电器板
class  CRelay2527BoardCmd: public  CBitCmdImpl
{
public:
	CRelay2527BoardCmd(){;}
	virtual ~CRelay2527BoardCmd(){;}
	
protected:
	virtual  BOOL  ModularBoard(LPVOID pData)
	{
			if(g_bBoardStatusNext == FALSE)
			{
					::AfxMessageBox("由于初始化PXI硬件时出现错误,无法使用ARINC429进行信号测试。\n请联系硬件模块问题。");
					return FALSE;
			}			
			
			PXIRelayDevResultMiscelInfo *pDevInfo = static_cast<PXIRelayDevResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;
#if 1			
			BOOL    bMeasChnl = (pDevInfo->nActualItemNum >0);
			if (bMeasChnl == FALSE)
			{
					::AfxMessageBox("没有可测量的继电器板PXI2527自检通道!");
					return  FALSE;
			}

			//打开继电器,调用PXI驱动开始测试,把测试结果写入结构体中
			if (pDevInfo->hHandle <= 0)
				return  FALSE;
			
			//////////////////////////////////////////////////////////////////////////////////
			//
			float   measValue = 0.0;
			char    szFmt[32] = {'\0'};
			char    szErrMsg[256]= {'\0'};
			long    vStatus = 0;
			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;
							}
					}
					
					//DMM测量方式
					if (pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType == PXIRelayDevResultMiscelInfo::dcVolType)   //测电压
					{
							NMDriver_DMM::_DMM_DCVoltMode();							
					}
					else if (pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType == PXIRelayDevResultMiscelInfo::OmType) //测电阻
					{
							NMDriver_DMM::_DMM_ResiMode();
					}
					
					//////////////////////////////////////////////////
					//2.根据测量类型开始测量
					niSwitch_DisconnectAll(pDevInfo->hHandle);
					for(int m=0; m<pDevInfo->sItemObj[nItem].sHidItemInfo.nActualNum; m++)
					{	
							//1.接通开关矩阵
							long  bCanConn = 0;							
							int nChnl = pDevInfo->sItemObj[nItem].sHidItemInfo.nChnlNo[m];	//继电器板通道号
							::sprintf(szFmt, "ch%d", nChnl);
							vStatus = niSwitch_CanConnect(pDevInfo->hHandle, (LPCTSTR)szFmt, "COM0", &bCanConn);
							niSwitch_GetError(pDevInfo->hHandle, &vStatus, 256, szErrMsg);
							
							if (bCanConn == 1)
							{
									niSwitch_Connect(pDevInfo->hHandle, (LPCTSTR)szFmt, "COM0");
									niSwitch_WaitForDebounce(pDevInfo->hHandle, 2000);
							}
							
							//开始测量
							::Sleep(100);
							measValue = NMDriver_DMM::_DMM_Measure();
							pDevInfo->sItemObj[nItem].sHidItemInfo.MeasVal[m] = measValue;	//测量值
							
							//3.比较分析结果
							pDevInfo->sItemObj[nItem].sHidItemInfo.bChnlResult[MAXHIDCHNLNUM] = TRUE;	//板通道结论
					}
					
					pDevInfo->sItemObj[nItem].bPass = TRUE;
					::AfxMessageBox("等待");
			}
			
			///////////////////////////////////////////////////////////
			//测量结束
			if (NMRS232::_ResetPCBBoard() == TRUE)
				::AfxMessageBox("测量结束,已复位自检适配箱控制器!");
			niSwitch_DisconnectAll(pDevInfo->hHandle);
#endif
			pDevInfo->bWholeResult = TRUE;

			return  TRUE;
	}
};

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

			PXIRelayDevResultMiscelInfo *pDevInfo = static_cast<PXIRelayDevResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;

#if   1
			//////////////////////////////////////////////////////////////////////////////////
			//
			float   measValue = 0.0;
			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;
							}
					}
					
					//DMM测量方式
					if (pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType == PXIRelayDevResultMiscelInfo::dcVolType)   //测电压
					{
							NMDriver_DMM::_DMM_DCVoltMode();							
					}							
					else if (pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType == PXIRelayDevResultMiscelInfo::OmType) //测电阻
					{
							NMDriver_DMM::_DMM_ResiMode();
					}
					
					//////////////////////////////////////////////////
					//2.根据测量类型开始测量
					niSwitch_DisconnectAll(pDevInfo->hHandle);
					for(int m=0; m<pDevInfo->sItemObj[nItem].sHidItemInfo.nActualNum; m++)
					{	
							//1.接通开关矩阵
							long  bCanConn = 0;

							pDevInfo->sItemObj[nItem].sHidItemInfo.nChnlNo[MAXHIDCHNLNUM];	//继电器板通道号							
							//niSwitch_CanConnect(pDevInfo->hHandle, ViConstString channel1, ViConstString channel2, &bCanConn);
							if (bCanConn == 1)
							//niSwitch_Connect(pDevInfo->hHandle, ViConstString channel1, ViConstString channel2);
														
							//开始测量
							::Sleep(100);
							measValue = NMDriver_DMM::_DMM_Measure();
							pDevInfo->sItemObj[nItem].sHidItemInfo.MeasVal[m] = measValue;	//测量值

							//3.比较分析结果
							pDevInfo->sItemObj[nItem].sHidItemInfo.bChnlResult[MAXHIDCHNLNUM] = TRUE;	//板通道结论
					}

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

			return  TRUE;
	}
};


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

			PXIRelayDevResultMiscelInfo *pDevInfo = static_cast<PXIRelayDevResultMiscelInfo *>(pData);
			if (pDevInfo == NULL)
				return FALSE;
#if 1			
			BOOL    bMeasChnl = (pDevInfo->nActualItemNum >0);
			if (bMeasChnl == FALSE)
			{
					::AfxMessageBox("没有可测量的继电器板PXI2527自检通道!");
					return  FALSE;
			}

			//打开继电器,调用PXI驱动开始测试,把测试结果写入结构体中
			if (pDevInfo->hHandle <= 0)
				return  FALSE;
			
			//////////////////////////////////////////////////////////////////////////////////
			//
			float   measValue = 0.0;
			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;
							}
					}
					
					//DMM测量方式
					if (pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType == PXIRelayDevResultMiscelInfo::dcVolType)   //测电压
					{
							NMDriver_DMM::_DMM_DCVoltMode();							
					}							
					else if (pDevInfo->sItemObj[nItem].sHidItemInfo.nMeasType == PXIRelayDevResultMiscelInfo::OmType) //测电阻
					{
							NMDriver_DMM::_DMM_ResiMode();
					}
					
					//////////////////////////////////////////////////
					//2.根据测量类型开始测量
					niSwitch_DisconnectAll(pDevInfo->hHandle);
					for(int m=0; m<pDevInfo->sItemObj[nItem].sHidItemInfo.nActualNum; m++)
					{	
							//1.接通开关矩阵
							long  bCanConn = 0;

							pDevInfo->sItemObj[nItem].sHidItemInfo.nChnlNo[MAXHIDCHNLNUM];	//继电器板通道号							
							//niSwitch_CanConnect(pDevInfo->hHandle, ViConstString channel1, ViConstString channel2, &bCanConn);
							if (bCanConn == 1)
							//niSwitch_Connect(pDevInfo->hHandle, ViConstString channel1, ViConstString channel2);
														
							//开始测量
							::Sleep(100);
							measValue = NMDriver_DMM::_DMM_Measure();
							pDevInfo->sItemObj[nItem].sHidItemInfo.MeasVal[m] = measValue;	//测量值

							//3.比较分析结果
							pDevInfo->sItemObj[nItem].sHidItemInfo.bChnlResult[MAXHIDCHNLNUM] = TRUE;	//板通道结论
					}

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

			return  TRUE;
	}
};

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

			/////////////////////////////////////////////////////////////////////////////////////
			//开始检测
			int  iStatus = 0, nLine = 0;
			BOOL  bLastDev = TRUE;
			for (short nItem =0; nItem<pDevInfo->nActualItemNum; nItem++)
			{
					//1.端口和数据线
					for(short k=0; k<pDevInfo->sItemObj[nItem].nChnlNum; k++)
					{
							//::DIG_Out_Line(pDevInfo->nMaxDeviceNo, (short)nItem, (short)k, 1);
							//::DIG_In_Line(pDevInfo->nMaxDeviceNo, (short)nItem, (short)k, &nLine);
							iStatus = k<<nLine;
					}
					pDevInfo->sItemObj[nItem].bPass = (iStatus == 0xFF);

					//2.根据测量类型开始测量
					for(short kk=0; kk<pDevInfo->sItemObj[nItem].nChnlNum; kk++)
					{
							//::DIG_Out_Line(pDevInfo->nMaxDeviceNo, (short)nItem, (short)kk, 0);
							//::DIG_In_Line(pDevInfo->nMaxDeviceNo, (short)nItem, (short)kk, &nLine);
							iStatus = k<<nLine;
					}
					
					//3.比较分析结果
					pDevInfo->sItemObj[nItem].bPass |= (iStatus == 0);
					
					bLastDev |= pDevInfo->sItemObj[nItem].bPass;
			}
			pDevInfo->bWholeResult = bLastDev;
			
			//测量结束
			return  pDevInfo->bWholeResult;
	}
};
}

⌨️ 快捷键说明

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