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