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

📄 tttdlg.cpp

📁 一个测试激光控制卡扫描的测试程序
💻 CPP
字号:
#include "stdafx.h"
#include "ttt.h"
#include "tttDlg.h"
#include "sicl.h"		// Standard Instrument Control Library routines
#include <math.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define ROUND(X) int(X + 0.5)
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();
	enum { IDD = IDD_ABOUTBOX };
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

CTttDlg::CTttDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTttDlg::IDD, pParent)
{
	m_CurPositionX = 0;
	m_CurPositionY = 0;
	m_AjuStepSize = 100;
	m_P1X = 0;
	m_P1Y = 0;
	m_P2X = 0;
	m_P2Y = 0;
	m_P3X = 0;
	m_P3Y = 0;
	m_TZ1 = 1;
	m_TZ2 = 2;
	m_DQZ = 0.0;
	m_JD1 = 0.85;
	m_JD2 = 0.97;
	m_MBZ = 0;
	m_ScanStepDelay = 200;
	m_ScanStepSize = 5;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTttDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_CurPositionX, m_CurPositionX);
	DDV_MinMaxInt(pDX, m_CurPositionX, -30000, 30000);
	DDX_Text(pDX, IDC_CurPositionY, m_CurPositionY);
	DDV_MinMaxInt(pDX, m_CurPositionY, -30000, 30000);
	DDX_Text(pDX, IDC_AjuStepSize, m_AjuStepSize);
	DDV_MinMaxInt(pDX, m_AjuStepSize, 1, 1000);
	DDX_Text(pDX, IDC_P1X, m_P1X);
	DDV_MinMaxInt(pDX, m_P1X, -32000, 32000);
	DDX_Text(pDX, IDC_P1Y, m_P1Y);
	DDV_MinMaxInt(pDX, m_P1Y, -32000, 32000);
	DDX_Text(pDX, IDC_P2X, m_P2X);
	DDV_MinMaxInt(pDX, m_P2X, -32000, 32000);
	DDX_Text(pDX, IDC_P2Y, m_P2Y);
	DDV_MinMaxInt(pDX, m_P2Y, -32000, 32000);
	DDX_Text(pDX, IDC_P3X, m_P3X);
	DDV_MinMaxInt(pDX, m_P3X, -32000, 32000);
	DDX_Text(pDX, IDC_P3Y, m_P3Y);
	DDV_MinMaxInt(pDX, m_P3Y, -32000, 32000);
	DDX_Text(pDX, IDC_TZ1, m_TZ1);
	DDV_MinMaxUInt(pDX, m_TZ1, 1, 48);
	DDX_Text(pDX, IDC_TZ2, m_TZ2);
	DDV_MinMaxUInt(pDX, m_TZ2, 1, 48);
	DDX_Text(pDX, IDC_DQZ, m_DQZ);
	DDX_Text(pDX, IDC_JD1, m_JD1);
	DDX_Text(pDX, IDC_JD2, m_JD2);
	DDX_Text(pDX, IDC_MBZ, m_MBZ);
	DDX_Text(pDX, IDC_ScanStepDelay, m_ScanStepDelay);
	DDV_MinMaxUInt(pDX, m_ScanStepDelay, 100, 30000);
	DDX_Text(pDX, IDC_ScanStepSize, m_ScanStepSize);
	DDV_MinMaxUInt(pDX, m_ScanStepSize, 1, 500);
}

BEGIN_MESSAGE_MAP(CTttDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_RUN, OnRun)
ON_BN_CLICKED(IDC_LoadPar, OnLoadPar)
ON_BN_CLICKED(IDC_SavePar, OnSavePar)
ON_BN_CLICKED(IDC_AddRecord, OnAddRecord)
ON_BN_CLICKED(IDC_DeleteRecord, OnDeleteRecord)
ON_BN_CLICKED(IDC_BUTTON3, OnScannerCenter)
ON_BN_CLICKED(IDC_BUTTON4, OnScannerXInc)
ON_BN_CLICKED(IDC_BUTTON5, OnScannerXDec)
ON_BN_CLICKED(IDC_BUTTON6, OnScannerYInc)
ON_BN_CLICKED(IDC_BUTTON7, OnScannerYDec)
ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1)
END_MESSAGE_MAP()


BOOL CTttDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
	
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	HINSTANCE hDll=LoadLibrary("KPCI800.DLL");
	OpenDevice=(OPENDEVICE)GetProcAddress(hDll,"OpenDevice");
	CloseDevice=(CLOSEDEVICE)GetProcAddress(hDll,"CloseDevice");
	WriteByte=(WRITEBYTE)GetProcAddress(hDll,"WriteByte");
	ReadByte=(READBYTE)GetProcAddress(hDll,"ReadByte");
	
	hDll=LoadLibrary("PCI_6401.DLL");
	Regist_Pci6401=(TRegist_Pci6401)GetProcAddress(hDll,"Regist_Pci6401");
	Close_Pci6401=(TClose_Pci6401)GetProcAddress(hDll,"Close_Pci6401");
    AO_OutputChannel=(TAO_OutputChannel)GetProcAddress(hDll,"AO_OutputChannel");
	DO_Output=(TDO_Output)GetProcAddress(hDll,"DO_Output");
	DI_Input=(TDI_Input)GetProcAddress(hDll,"DI_Input");
	PWM_Output=(TPWM_Output)GetProcAddress(hDll,"PWM_Output");
	
    mindex=0;
	OpenDevice(mindex);  // open  k846
	dout[0]=0xff;
	dout[1]=0xff;
	dout[2]=0xff;
	dout[3]=0xff;
	dout[4]=0xff;
	dout[5]=0xff;
	dout[6]=0xff;
	dout[7]=0xff;

	Regist_Pci6401();
	
	LaserOff();
	LaserMoveTo(m_CurPositionX, m_CurPositionY, 1000);
	

	id=0;
	id=iopen("gpib0,22");  // open 301A
	itimeout(id, 100000);  
    iprintf(id, "*RST\n");
	iprintf(id, "*CLS\n");
	iprintf(id,"CONF:RES 100000,0.1\n");
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTttDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

void CTttDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting
		
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR CTttDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}



void CTttDlg::ConnectRelay(UINT td1,UINT td2)
{
	UINT doutport,tdnum;
	unsigned char dout_data;
	
	dout[0]=0xff;
	dout[1]=0xff;
	dout[2]=0xff;
	dout[3]=0xff;
	dout[4]=0xff;
	dout[5]=0xff;
	dout[6]=0xff;
	dout[7]=0xff;
	
	doutport=(UINT)((td1-1)/8);
	tdnum=td1-1-8*doutport;
	
	if (tdnum==0) dout_data=0xfe;
	if (tdnum==1) dout_data=0xfd;
	if (tdnum==2) dout_data=0xfb;
	if (tdnum==3) dout_data=0xf7;
	if (tdnum==4) dout_data=0xef;
	if (tdnum==5) dout_data=0xdf;
	if (tdnum==6) dout_data=0xbf;
	if (tdnum==7) dout_data=0x7f;
	
	dout[doutport]=dout[doutport]&dout_data;
	
	doutport=(UINT)((td2-1)/8);
	tdnum=td2-1-8*doutport;
	if (tdnum==0) dout_data=0xfe;
	if (tdnum==1) dout_data=0xfd;
	if (tdnum==2) dout_data=0xfb;
	if (tdnum==3) dout_data=0xf7;
	if (tdnum==4) dout_data=0xef;
	if (tdnum==5) dout_data=0xdf;
	if (tdnum==6) dout_data=0xbf;
	if (tdnum==7) dout_data=0x7f;
	
	
	dout[doutport]=dout[doutport]&dout_data;
	
	WriteByte(mindex,0,dout[0]);
	WriteByte(mindex,1,dout[1]);
    WriteByte(mindex,2,dout[2]);
	WriteByte(mindex,3,dout[3]);
	WriteByte(mindex,4,dout[4]);
	WriteByte(mindex,5,dout[5]);
    WriteByte(mindex,6,dout[6]);
	WriteByte(mindex,7,dout[7]);
	
	
}

void CTttDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	ConnectRelay(m_TZ1,m_TZ2);
	ADelay(1000);
	iprintf(id,"READ?\n");
	iscanf (id,"%lf",&res);
	m_DQZ=res;
	UpdateData(false);
}

void CTttDlg::LaserOn() 
{
	DO_Output(1);
	
}

void CTttDlg::LaserOff() 
{
	DO_Output(0);
	
}

void CTttDlg::ADelay(UINT ADel)
{
	for(int i=0;i<ADel;i++)
	{
		__asm wait;
		__asm wait;
		__asm wait;
		__asm wait;
		__asm wait;
		__asm wait;
		__asm wait;  
	}

}

void CTttDlg::LaserMoveTo(int AX,int AY,UINT ADel) 
{
	UINT nVal;
	
	AO_OutputChannel(2, AX + 0x8000);
	AO_OutputChannel(0, AY + 0x8000);
	ADelay(ADel);
}

void CTttDlg::LaserLine(int AX1,int AY1,int AX2,int AY2,UINT ScanStepSize,UINT ADel,BOOL laserstate) 
{
	double ScanStepSizeX, ScanStepSizeY, nL;
	UINT nC, i=0;
	
	
	nL=sqrt((AX2-AX1)*(AX2-AX1)+(AY2-AY1)*(AY2-AY1));
	
	nC=(UINT)(nL/ScanStepSize);
	ScanStepSizeX=(AX2-AX1)/nC;
	ScanStepSizeY=(AY2-AY1)/nC;
	
	if (laserstate)    LaserOn();
	
	while(i<nC)
	{
		m_CurPositionX=ROUND(AX1+i*ScanStepSizeX);     
		m_CurPositionY=ROUND(AY1+i*ScanStepSizeY);
		LaserMoveTo(m_CurPositionX, m_CurPositionY, ADel);
		i++;
	}
	if (laserstate)    LaserOff();
	
}

void CTttDlg::LaserTrim(int AX1,int AY1,int AX2,int AY2,UINT ScanStepSize,UINT ADel,double MBZ) 
{
	// TODO: Add your control notification handler code here
	double ScanStepSizeX, ScanStepSizeY, nL;
	UINT nC, i=0;
	
	
	nL=sqrt((AX2-AX1)*(AX2-AX1)+(AY2-AY1)*(AY2-AY1));
	nC=(UINT)(nL/ScanStepSize);
	ScanStepSizeX=(AX2-AX1)/nC;
	ScanStepSizeY=(AY2-AY1)/nC;
	//ConnectRelay(2,7);

	m_CurPositionX=AX1;     
	m_CurPositionY=AY1;
	LaserMoveTo(m_CurPositionX, m_CurPositionY, 1000);
	LaserOn();
	while(i<nC)
	{
		m_CurPositionX=ROUND(AX1+i*ScanStepSizeX);     
		m_CurPositionY=ROUND(AY1+i*ScanStepSizeY);
		LaserMoveTo(m_CurPositionX, m_CurPositionY, ADel);
		i++;
		iprintf(id,"READ?\n");
		iscanf (id,"%lf",&res);
		if(res>MBZ) break;
		
	}
	LaserOff();

}

void CTttDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	CloseDevice(0);
	iclose(id);
	CDialog::OnCancel();
}

void CTttDlg::OnRun() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	ConnectRelay(m_TZ1,m_TZ2);
	ADelay(1000);
	LaserTrim(m_P1X,m_P1Y,m_P2X,m_P2Y,m_ScanStepSize,m_ScanStepDelay,m_MBZ*m_JD1);
	LaserTrim(m_CurPositionX, m_CurPositionY,m_P2X,m_P2Y,m_ScanStepSize,m_ScanStepDelay,
		m_MBZ*m_JD2);
}

void CTttDlg::OnLoadPar() 
{
}

void CTttDlg::OnSavePar() 
{	
}

void CTttDlg::OnAddRecord() 
{
	CDwPoint *ppp = new CDwPoint();
	pst.AddTail(ppp);
	
	CListBox * pLctrl = (CListBox *)GetDlgItem(IDC_LIST1);
	CString pStr;
	pStr.Format(
		"%6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d",
		ppp->XData[0],
		ppp->YData[0],
		ppp->XData[1],
		ppp->YData[1],
		ppp->XData[2],
		ppp->YData[2],
		ppp->XData[3],
		ppp->YData[3],
		ppp->XData[4],
		ppp->YData[4],
		ppp->XData[5],
		ppp->YData[5],
		ppp->XData[6],
		ppp->YData[6]
		);
	pLctrl->AddString(pStr);
}

void CTttDlg::OnDeleteRecord() 
{	
	//DeleteString(1);
	CListBox * pLctrl = (CListBox *)GetDlgItem(IDC_LIST1);
	//CString pStr;
	pLctrl->DeleteString(1);
}

void CTttDlg::OnScannerCenter() 
{
	m_CurPositionX=0;
	m_CurPositionY=0;
	UpdateData(false);
	LaserMoveTo(m_CurPositionX,m_CurPositionY,1000);
}

void CTttDlg::OnScannerXInc() 
{
	UpdateData(true);
	m_CurPositionX+=m_AjuStepSize;
	UpdateData(false);
	LaserMoveTo(m_CurPositionX,m_CurPositionY,1000);
}

void CTttDlg::OnScannerXDec() 
{
	UpdateData(true);
	m_CurPositionX-=m_AjuStepSize;
	UpdateData(false);
	LaserMoveTo(m_CurPositionX,m_CurPositionY,1000);
}

void CTttDlg::OnScannerYInc() 
{
	UpdateData(true);
	m_CurPositionY+=m_AjuStepSize;
	UpdateData(false);
	LaserMoveTo(m_CurPositionX,m_CurPositionY,1000);
}

void CTttDlg::OnScannerYDec() 
{
	UpdateData(true);
	m_CurPositionY-=m_AjuStepSize;
	UpdateData(false);
	LaserMoveTo(m_CurPositionX,m_CurPositionY,1000);
}

BOOL CTttDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	return CDialog::Create(IDD, pParentWnd);
}

BOOL CTttDlg::PreCreateWindow(CREATESTRUCT& cs) 
{
	return CDialog::PreCreateWindow(cs);
}

void CTttDlg::OnDblclkList1() 
{
}

⌨️ 快捷键说明

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