📄 relaydecl.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 + -