📄 bitfeaturedlg.cpp
字号:
//汇集结果
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 + -