📄 angledialog.cpp
字号:
// AngleDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Angletest.h"
#include "AngleDialog.h"
#include "excel9.h"
#include "math.h"
#include <ole2.h>
#include <stdio.h>
#include ".\include\io_nt.h"
#include ".\include\AC6011.h"
#define FREQ 600
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma warning (disable:4146 4192 4786 4081)
#import "d:\Office\Office\MSO9.dll"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" no_namespace
#import "d:\Office\Office\excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")
/////////////////////////////////////////////////////////////////////////////
// CAngleDialog dialog
CAngleDialog::CAngleDialog(CWnd* pParent /*=NULL*/)
: CDialog(CAngleDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CAngleDialog)
m_ReachDu = 0; //到达角度
m_ScanDu = 0;
//}}AFX_DATA_INIT
unsigned long cardc;//卡数目
char *dll_name="acpci.dll";//动态连接库名
hDLL=LoadLibrary(dll_name); //调入DLL ,动态调用
if(hDLL!=NULL)
{
if((int)hDLL<31)
{
::AfxMessageBox("DLL文件未找到!", MB_OK|MB_ICONASTERISK);
}
else
{
// printf("%s已调入。", dll_name);
#include ".\include\io_nt_func.h"
#include ".\include\ac6011_func.h"
//-----------------------------------------------------------------
if(AC_OpenDriver==NULL)
{
MessageBox("AC_OpenDriver函数不存在!","函数不存在",MB_OK|MB_ICONASTERISK);
}
else
{
// printf("\nAC_OpenDriver函数存在。");
NTportio=AC_OpenDriver(); //获取IO驱动句柄
if(NTportio==NULL)
{
MessageBox("Drivers do not exist!!!","Don't exit",MB_OK|MB_ICONASTERISK);//未成功加载驱动
FreeLibrary(hDLL);//清DLL句柄
}
if(AC_Version==NULL)
{
MessageBox("AC_Version函数不存在!","函数不存在",MB_OK|MB_ICONASTERISK);
}
else
{
char Version[100];
AC_Version(NTportio, Version);//ok
}
if(AC_inpd==NULL || AC_inpds==NULL)
{
::AfxMessageBox("inpds null\n");
}
else
{
// printf("inpds is ok!\n");
//判断AC6011系列API是否正确加载
if(AC_6011_DI==NULL || AC_6011_DO==NULL ||
AC_6011_DA==NULL ||AC_6011_AD==NULL
//|| AC_6011_ADD==NULL
)
{
MessageBox("ac6011 函数不存在!","函数不存在",MB_OK|MB_ICONASTERISK);
}
else
{
//---------用户程序可以写在下面----------------
cardc=AC_6011_INIT(NTportio,id);
if(cardc==0)
{
MessageBox("There is no card(AC6011) in this machine!","No Card",MB_OK|MB_ICONASTERISK);
// exit(0);
}
}
}
}
}
}
}
CAngleDialog::~CAngleDialog()
{
if(AC_CloseDriver==NULL)
MessageBox("AC_CloseDriver函数不存在!","函数不存在",MB_OK|MB_ICONASTERISK);
else
AC_CloseDriver(NTportio);
FreeLibrary(hDLL);//清DLL
}
void CAngleDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAngleDialog)
DDX_Text(pDX, IDC_REACHDU, m_ReachDu);
DDV_MinMaxInt(pDX, m_ReachDu, 0, 360);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAngleDialog, CDialog)
//{{AFX_MSG_MAP(CAngleDialog)
ON_BN_CLICKED(IDC_GOTO, OnGoto)
ON_BN_CLICKED(IDC_OK, OnOk)
ON_BN_CLICKED(IDC_SCAN, OnScan)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAngleDialog message handlers
BOOL CAngleDialog::OnInitDialog()
{
CheckRadioButton(IDC_RADIO_CW,IDC_RADIO_CCW,IDC_RADIO_CW);
MessageBox("请在操作前将转台的角度调零","角度调零",MB_OK|MB_ICONASTERISK);
m_curangle=360;
m_AroundSteps=AROUNDSTEPS; //一圈步数
direction=1;
CDialog::OnInitDialog();
return TRUE;
}
void CAngleDialog::OnGoto()
{
UpdateData(TRUE);
GetDlgItem(IDC_SCAN)->EnableWindow(FALSE);
GetDlgItem(IDC_OK)->EnableWindow(FALSE);
unsigned long step=m_ReachDu*m_AroundSteps/360;
BeginWaitCursor();
MoveSteps(step,0);
EndWaitCursor();
GetDlgItem(IDC_SCAN)->EnableWindow(TRUE);
GetDlgItem(IDC_OK)->EnableWindow(TRUE);
UpdateData(FALSE);
}
void CAngleDialog::OnScan()
{
CFileDialog *dlg;
UpdateData(TRUE);
GetDlgItem(IDC_GOTO)->EnableWindow(FALSE);
GetDlgItem(IDC_OK)->EnableWindow(FALSE);
BeginWaitCursor();
MoveSteps(m_AroundSteps,1);
EndWaitCursor();
if(::MessageBox(NULL,"扫描完成,你想保存扫描数据吗(Y/N)?","询问信息...", MB_YESNO|MB_ICONQUESTION)==IDNO)
return;
dlg=new CFileDialog(FALSE,"*.xls","*.xls", OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT,
"office excel File(*.xls)|*.xls");
dlg->m_ofn.lpstrInitialDir=".\\";
if(dlg->DoModal()==IDOK)
{
save(dlg->GetPathName());
}
GetDlgItem(IDC_GOTO)->EnableWindow(TRUE);
GetDlgItem(IDC_OK)->EnableWindow(TRUE);
UpdateData(FALSE);
}
void CAngleDialog::OnOk()
{
CDialog::OnOK();
}
int CAngleDialog::MoveSteps(int steps,BOOL bscan)
{
unsigned long ctrl=0x44;
CString strText;
LARGE_INTEGER Freq;
LARGE_INTEGER Count1,Count2;
BOOL ret;
double dtime;
int wtime=(500000/FREQ);
int tem,dirflag;
ret=QueryPerformanceFrequency(&Freq);
dirflag=GetCheckedRadioButton(IDC_RADIO_CW,IDC_RADIO_CCW); //得到转动方向标志
if(dirflag==IDC_RADIO_CW) direction=0;
else if (dirflag==IDC_RADIO_CCW) direction=1;
for (int i=0; i<steps; i++)
{ ctrl=ctrl|direction;
ctrl=ctrl&0xfffB;
if(!direction)
{m_movangle=(i+2)*360/m_AroundSteps;
tem=m_movangle;
}
else
{m_movangle=-(i+2)*360/m_AroundSteps;
tem=m_movangle+360;
}
curangle[i]=(m_curangle+tem)%360;
strText.Format("%d",curangle[i]);
SetDlgItemText(IDC_CURRANGLE,strText);
if(bscan)
{power[i]=(float)(AC_6011_AD(NTportio, id[0],31,1))*5/4095.0;
strText.Format("%f",power[i]);
SetDlgItemText(IDC_POWER,strText);
}
ret=QueryPerformanceCounter(&Count1);
// CardControl->ADOutPut(ctrl);
AC_6011_DO(NTportio,id[0],ctrl);
while (1)
{
for (int j=0; j<10000; j++)
;
ret=QueryPerformanceCounter(&Count2);
dtime=(double)(Count2.QuadPart-Count1.QuadPart);
dtime=dtime/Freq.QuadPart*1000000;
if (dtime>=wtime)
break;
}
ctrl=(ctrl+4);
AC_6011_DO(NTportio,id[0],ctrl);
while (1)
{
for (int j=0; j<10000; j++)
;
ret=QueryPerformanceCounter(&Count2);
dtime=(double)(Count2.QuadPart-Count1.QuadPart);
dtime=dtime/Freq.QuadPart*1000000;
if (dtime>=wtime)
break;
}
}
m_curangle+=tem%360;
return(i);
}
// 将扫描结果保存到Excel文档中
void CAngleDialog::save(CString strXlsFile)
{
VARIANT varItem;
varItem.vt = VT_I4;
varItem.intVal = 1;
::CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(L"Excel.Application",&clsid);
Excel::_ApplicationPtr pApp;
pApp.CreateInstance(clsid,NULL);
//pApp->PutVisible(0,VARIANT_TRUE);
Excel::_WorkbookPtr pWorkbook = pApp->GetWorkbooks()->Add();
Excel::_WorksheetPtr pSheet = pWorkbook->GetWorksheets()->GetItem(varItem);
Excel::RangePtr pRange = pSheet->GetUsedRange(0);
Range rg;
rg.AttachDispatch(pRange);
pRange.Detach();
long iColCnt=2;
long iRowCnt=27200;
COleSafeArray saRet;
DWORD numElements[2];
numElements[0]= iColCnt; //Number of rows in the range.
numElements[1]= iRowCnt; //Number of columns in the range.
saRet.Create(VT_BSTR,2,numElements);
rg=rg.GetResize(COleVariant(iColCnt),COleVariant(iRowCnt));
rg.SetValue2(COleVariant(saRet));
rg.DetachDispatch();
saRet.Detach();
}
void CAngleDialog::Cal(double p[AROUNDSTEPS])
{
double Maxpower,Minpower,am;
Maxpower=0;
Minpower=1000;
for (int i=0; i<AROUNDSTEPS; i++)
{if(p[i]>Maxpower) Maxpower=p[i];
if(p[i]<Minpower) Minpower=p[i];
}
am=Maxpower-Minpower;
// for (int i=0; i<AROUNDSTEPS; i++)
// {if((p[i]-minpower)<0.001*am)
// p[i]
//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -