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

📄 angledialog.cpp

📁 自动转台控制器软件
💻 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 + -