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

📄 pmacctrldlg.cpp

📁 利用VC编写的PMAC控制芯片驱动程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// PmacCtrlDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PmacCtrl.h"
#include "PmacCtrlDlg.h"
#include <math.h>
#include "process.h"
#define BUFFER MAX_PATH

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

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

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

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPmacCtrlDlg dialog

CPmacCtrlDlg::CPmacCtrlDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPmacCtrlDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPmacCtrlDlg)
	m_TimeCheck = FALSE;
	m_Structure = -1;
	m_Info = _T("");
	m_SzEdit = 0.0;
	m_SyEdit = 0.0;
	m_SxEdit = 0.0;
	m_ExEdit = 0.0;
	m_EyEdit = 0.0;
	m_EzEdit = 0.0;
	m_EaEdit = 0.0;
	m_EbEdit = 0.0;
	m_SaEdit = 0.0;
	m_SbEdit = 0.0;
	m_EangEdit = 0.0;
	m_EcpxEdit = 0.0;
	m_EcpyEdit = 0.0;
	m_EcpzEdit = 0.0;
	m_ErEdit = 0.0;
	m_SangEdit = 0.0;
	m_ScpxEdit = 0.0;
	m_ScpyEdit = 0.0;
	m_ScpzEdit = 0.0;
	m_SrEdit = 0.0;
	m_PaEdit = 0.0;
	m_PbEdit = 0.0;
	m_PcEdit = 0.0;
	m_PxEdit = 0.0;
	m_PyEdit = 0.0;
	m_PzEdit = 0.0;
	m_Axis1Edit = 0.0;
	m_Axis2Edit = 0.0;
	m_Axis3Edit = 0.0;
	m_Axis4Edit = 0.0;
	m_Axis5Edit = 0.0;
	m_Axis6Edit = 0.0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPmacCtrlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPmacCtrlDlg)
	DDX_Control(pDX, IDC_TIME_EDIT, m_TimeEdit);
	DDX_Control(pDX, IDC_StructurePara_EDIT, m_StructureParaEdit);
	DDX_Control(pDX, IDC_COMBO_CHOICE, m_cb);
	DDX_Radio(pDX, IDC_Structure1_RADIO, m_Structure);
	DDX_Text(pDX, IDC_INFO, m_Info);
	DDX_Text(pDX, IDC_SZ_EDIT, m_SzEdit);
	DDX_Text(pDX, IDC_SY_EDIT, m_SyEdit);
	DDX_Text(pDX, IDC_SX_EDIT, m_SxEdit);
	DDX_Text(pDX, IDC_EX_EDIT, m_ExEdit);
	DDX_Text(pDX, IDC_EY_EDIT, m_EyEdit);
	DDX_Text(pDX, IDC_EZ_EDIT, m_EzEdit);
	DDX_Text(pDX, IDC_EA_EDIT, m_EaEdit);
	DDX_Text(pDX, IDC_EB_EDIT, m_EbEdit);
	DDX_Text(pDX, IDC_SA_EDIT, m_SaEdit);
	DDX_Text(pDX, IDC_SB_EDIT, m_SbEdit);
	DDX_Text(pDX, IDC_EANG_EDIT, m_EangEdit);
	DDX_Text(pDX, IDC_ECPX_EDIT, m_EcpxEdit);
	DDX_Text(pDX, IDC_ECPY_EDIT, m_EcpyEdit);
	DDX_Text(pDX, IDC_ECPZ_EDIT, m_EcpzEdit);
	DDX_Text(pDX, IDC_ER_EDIT, m_ErEdit);
	DDX_Text(pDX, IDC_SANG_EDIT, m_SangEdit);
	DDX_Text(pDX, IDC_SCPX_EDIT, m_ScpxEdit);
	DDX_Text(pDX, IDC_SCPY_EDIT, m_ScpyEdit);
	DDX_Text(pDX, IDC_SCPZ_EDIT, m_ScpzEdit);
	DDX_Text(pDX, IDC_SR_EDIT, m_SrEdit);
	DDX_Text(pDX, IDC_PA_EDIT, m_PaEdit);
	DDX_Text(pDX, IDC_PB_EDIT, m_PbEdit);
	DDX_Text(pDX, IDC_PC_EDIT, m_PcEdit);
	DDX_Text(pDX, IDC_PX_EDIT, m_PxEdit);
	DDX_Text(pDX, IDC_PY_EDIT, m_PyEdit);
	DDX_Text(pDX, IDC_PZ_EDIT, m_PzEdit);
	DDX_Text(pDX, IDC_AXIS1_EDIT, m_Axis1Edit);
	DDX_Text(pDX, IDC_AXIS2_EDIT, m_Axis2Edit);
	DDX_Text(pDX, IDC_AXIS3_EDIT, m_Axis3Edit);
	DDX_Text(pDX, IDC_AXIS4_EDIT, m_Axis4Edit);
	DDX_Text(pDX, IDC_AXIS5_EDIT, m_Axis5Edit);
	DDX_Text(pDX, IDC_AXIS6_EDIT, m_Axis6Edit);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPmacCtrlDlg, CDialog)
	//{{AFX_MSG_MAP(CPmacCtrlDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(ID_FILE_EXIT, OnFileExit)
	ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
	ON_COMMAND(ID_HELP_HELP, OnHelpHelp)
	ON_COMMAND(ID_CTRL_LOADFILE, OnCtrlLoadfile)
	ON_BN_CLICKED(IDC_LOADFILE, OnLoadfile)
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	ON_BN_CLICKED(IDC_Show_BUTTON, OnShowBUTTON)
	ON_BN_CLICKED(IDC_Structure1_RADIO, OnStructure1RADIO)
	ON_BN_CLICKED(IDC_Structure2_RADIO, OnStructure2RADIO)
	ON_BN_CLICKED(IDC_Structure3_RADIO, OnStructure3RADIO)
	ON_BN_CLICKED(IDC_Structure4_RADIO, OnStructure4RADIO)
	ON_BN_CLICKED(IDC_Structure5_RADIO, OnStructure5RADIO)
	ON_CBN_SELCHANGE(IDC_COMBO_CHOICE, OnSelchangeComboChoice)
	ON_BN_CLICKED(IDC_DEFAULT, OnDefault)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_CONFIRM, OnConfirm)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_STRUCTURE_FIVE, OnStructureFive)
	ON_COMMAND(ID_STRUCTURE_FOUR, OnStructureFour)
	ON_COMMAND(ID_STRUCTURE_ONE, OnStructureOne)
	ON_COMMAND(ID_STRUCTURE_THREE, OnStructureThree)
	ON_COMMAND(ID_STRUCTURE_TWO, OnStructureTwo)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_EN_CHANGE(IDC_SR_EDIT, OnChangeSrEdit)
	ON_EN_CHANGE(IDC_SCPX_EDIT, OnChangeScpxEdit)
	ON_EN_CHANGE(IDC_SCPY_EDIT, OnChangeScpyEdit)
	ON_EN_CHANGE(IDC_SCPZ_EDIT, OnChangeScpzEdit)
	ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveas)
	ON_COMMAND(ID_FILE_DEFAULT, OnFileDefault)
	ON_BN_CLICKED(IDC_OUTPUTPARA, OnOutputpara)
	ON_COMMAND(ID_CTRL_OUTPUTPARA, OnCtrlOutputpara)
	ON_COMMAND(ID_CTRL_ZERO, OnCtrlZero)
	ON_COMMAND(ID_CTRL_EXCURSION, OnCtrlExcursion)
	ON_COMMAND(ID_CTRL_EXECUTE, OnCtrlExecute)
	ON_BN_CLICKED(IDC_ZERO, OnZero)
	ON_BN_CLICKED(IDC_EXCURSION, OnExcursion)
	ON_BN_CLICKED(IDC_EXECUTE, OnExecute)
	ON_COMMAND(ID_CTRL_AUTOEXECUTE, OnCtrlAutoexecute)
	ON_COMMAND(ID_CTRL_LOADNC, OnCtrlLoadnc)
	ON_BN_CLICKED(IDC_LOADNC, OnLoadnc)
	ON_BN_CLICKED(IDC_AUTOEXECUTE, OnAutoexecute)
	ON_BN_CLICKED(IDC_VIEW_INTERPOLATION, OnViewInterpolation)
	ON_BN_CLICKED(IDC_VIEW_INVKINE, OnViewInvkine)
	ON_COMMAND(ID_CTRL_INITIAL, OnCtrlInitial)
	ON_BN_CLICKED(IDC_INITIAL, OnInitial)
	ON_COMMAND(ID_CTRL_INTERPOLATION, OnCtrlInterpolationL)
	ON_COMMAND(ID_CTRL_INVKINE, OnCtrlInvkineA)
	ON_COMMAND(ID_CTRL_PROCESS, OnCtrlProcess)
	ON_COMMAND(ID_CTRL_VIEW_INTERPOLATION, OnCtrlViewInterpolation)
	ON_COMMAND(ID_CTRL_VIEW_INVKINE, OnCtrlViewInvkine)
	ON_COMMAND(ID_CTRL_OUTPUTPHOTO, OnCtrlOutputphoto)
	ON_WM_TIMER()
	ON_WM_TIMER()
	ON_WM_KILLFOCUS()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPmacCtrlDlg message handlers

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

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	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);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

//	*********************************************************************************

	//			==========保存当前路径==========	
	// Save current dir
	DWORD cchCurDir;
	LPTSTR lpszCurDir;
	TCHAR tchBuffer[BUFFER];
	lpszCurDir = tchBuffer;
	GetCurrentDirectory(cchCurDir, lpszCurDir);
	BASEDIR = lpszCurDir;			

	// Create a new directory named Data. 
	CreateDirectory(BASEDIR + "\\Data", NULL);

	//			==========初始化对话框数据==========

	// Set timer for real-time time show
	SetTimer(1001,1000,NULL);

	// Initialize Information show
	m_Info = "欢迎使用基于Windows平台的PMAC控制程序!";

	// Initialize Structure Choice Radio Button
	m_Structure = 0;

	// Initialize Track Choice Combo Box
	m_cb.AddString("直线_LINE");
	m_cb.AddString("圆_CIRCLE");
	m_cb.AddString("螺旋线_HELIX");
	m_cb.SelectString(-1, "直线_LINE");
	UpdateData(FALSE);

	// Default: Line is chosen, enable line parameters inputs, disable other inputs
	GetDlgItem(IDC_SR_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_SANG_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_SCPX_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_SCPY_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_SCPZ_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_ER_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_EANG_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_ECPX_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_ECPY_EDIT)->EnableWindow(FALSE);
	GetDlgItem(IDC_ECPZ_EDIT)->EnableWindow(FALSE);

	// Initialize line parameter
	m_SxEdit = 90;		m_ExEdit = 0;
	m_SyEdit = 90;		m_EyEdit = 0;
	m_SzEdit = -800;	m_EzEdit = -800;
	m_SaEdit = 0;		m_EaEdit = 0;
	m_SbEdit = 0;		m_EbEdit = 0;
	UpdateData(FALSE);

	// Initialize Structure Parameter View Edit Box
	char	paraInitialEdit[10000];
	strcpy(paraInitialEdit, "您选择的是:");
	strcat(paraInitialEdit, "构型-1。\t\t\t");
	strcat(paraInitialEdit, "---------------------------------");
	strcat(paraInitialEdit, "静平台直径1485mm,距顶板底面84mm,6个铰链点的角度见图例;\t\t\t");
	strcat(paraInitialEdit, "                                 ");
	strcat(paraInitialEdit, "动平台直径340mm,距动平台顶面61.5mm,6个铰链点的角度见图例。\t\t");
	strcat(paraInitialEdit, "                                 ");
	strcat(paraInitialEdit, "各铰链点位置分布见图例。");

	m_StructureParaEdit.SetSel(0,-1);
	m_StructureParaEdit.ReplaceSel(paraInitialEdit);

	// Initialize progress view in the middle
	CProgressCtrl*	pProg = (CProgressCtrl*) GetDlgItem (IDC_PROGRESS);
	pProg->SetRange(0, 100);
	pProg->SetPos(50);

	//			==========LOAD DLL==========

	hlib = LoadLibrary ("PComm32.dll");

	// Test if PComm32.dll is loaded successfully
	if ( !(hlib = LoadLibrary("PComm32.dll")) )
		{
			AfxMessageBox("Fail to load dll!");
			return FALSE;
		}

	// Get function address
	OpenPmacDevice = (OPENPMACDEVICE)GetProcAddress(hlib,"OpenPmacDevice");
//	if (OpenPmacDevice == NULL) return;
	ClosePmacDevice = (CLOSEPMACDEVICE)GetProcAddress(hlib,"ClosePmacDevice");
//	if (ClosePmacDevice == NULL) return;
	PmacDownload = (PMACDOWNLOADA)GetProcAddress(hlib,"PmacDownloadA");
//	if (PmacDownload == NULL) return;
	PmacFlush = (PMACFLUSH)GetProcAddress(hlib,"PmacFlush");
//	if (PmacFlush == NULL) return;
	PmacGetResponse = (PMACGETRESPONSEA)GetProcAddress(hlib,"PmacGetResponseA");
//	if (PmacGetResponse == NULL) return;

//	*********************************************************************************

	return TRUE;  // return TRUE  unless you set the focus to a control
}

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

⌨️ 快捷键说明

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