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

📄 dlgpara.cpp

📁 动态图形显示程序源码
💻 CPP
字号:
// DlgPara.cpp : implementation file
//

#include "stdafx.h"
#include "DspCtl.h"
#include "DlgPara.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDlgPara dialog


CDlgPara::CDlgPara(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgPara::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgPara)
	m_bCurrentPID = FALSE;
	m_Kcor = 0.0;
	m_Kcorn = 0.0;
	m_Ki = 0.0;
	m_Kin = 0.0;
	m_Kpi = 0.0;
	m_Kpin = 0.0;
	m_n = 0;
	m_bSpeedGiven = FALSE;
	m_bSpeedPID = FALSE;
	//}}AFX_DATA_INIT
}


void CDlgPara::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgPara)
	DDX_Check(pDX, IDC_CURRENT_PID, m_bCurrentPID);
	DDX_Text(pDX, IDC_KCOR, m_Kcor);
	DDX_Text(pDX, IDC_KCORN, m_Kcorn);
	DDX_Text(pDX, IDC_KI, m_Ki);
	DDX_Text(pDX, IDC_KIN, m_Kin);
	DDX_Text(pDX, IDC_KPI, m_Kpi);
	DDX_Text(pDX, IDC_KPIN, m_Kpin);
	DDX_Text(pDX, IDC_SPEED, m_n);
	DDX_Check(pDX, IDC_SPEED_GIVEN, m_bSpeedGiven);
	DDX_Check(pDX, IDC_SPEED_PID, m_bSpeedPID);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgPara, CDialog)
	//{{AFX_MSG_MAP(CDlgPara)
	ON_BN_CLICKED(ID_SENT, OnSent)
	ON_BN_CLICKED(IDC_SENTCIRCLE, OnSentcircle)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgPara message handlers
BOOL CDlgPara::CreateModelessDlg()
{
	return CDialog::Create(IDD_PARA);
}


void CDlgPara::CreateComm2()
{
	DCB Dcb;
	COMMTIMEOUTS Timeouts;

	hCom=CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,
		0, NULL, OPEN_EXISTING, 0, NULL );
	if (hCom == INVALID_HANDLE_VALUE) 
	{
		char str1[]="错误";
		char str2[]="无法建立串行口2操作,测试中断!";
		//	MessageBoxA(str1,str2,MB_OK | MB_ICONSTOP);
        return;
	}
	GetCommState(hCom, &Dcb);
	Dcb.BaudRate =19200;
	Dcb.ByteSize = 8;
	Dcb.fParity =1;
	Dcb.Parity = ODDPARITY;
	Dcb.StopBits = ONESTOPBIT;
	SetCommState(hCom, &Dcb);
	GetCommTimeouts(hCom,&Timeouts);
	Timeouts.ReadIntervalTimeout=MAXDWORD;
	Timeouts.ReadTotalTimeoutMultiplier=0;
	Timeouts.ReadTotalTimeoutConstant=0;
	SetCommTimeouts(hCom,&Timeouts);
}

void CDlgPara::WriteData(unsigned char *BufferOut,int Count)
{
	DWORD num;
	WriteFile( hCom, BufferOut, Count, &num, NULL);
}
///////////////////////////////////////

void CDlgPara::WaitData(unsigned char *BufferIn,int Count,DWORD ms)//125,160
{
	DWORD num;
	int Cb=0;			//读入数据计数/
	for (int i=0;i<5;i++)
	{
		Sleep(ms);
		ReadFile( hCom, BufferIn+Cb, 1, &num, NULL);
		Cb++;
		if(Cb>=Count) 
			return;
	}
}

void CDlgPara::OnSent() 
{
	UpdateData(true);
	int temp1,temp2,temp3;

	if(m_bSpeedGiven)
	{
	x3[0]=0x1;
	temp1=m_n;
	x3[1]=temp1&255;
    x3[2]=(temp1&65280)/256;
	CreateComm2();
	WriteData(x3,3);
	CloseHandle(hCom);
	}

	if(m_bCurrentPID)
	{
	x1[0]=0x4;
	m_Kpi*=4096;
    m_Ki*=4096;
	m_Kcor*=4096;
	temp1=(int)m_Kpi;
	temp2=(int)m_Ki;
	temp3=(int)m_Kcor;
	

	x1[1]=temp1&255;
    x1[2]=(temp1&65280)/256;
	x1[3]=temp2&255;
    x1[4]=(temp2&65280)/256;
	x1[5]=temp3&255;
    x1[6]=(temp3&65280)/256;
	CreateComm2();
	WriteData(x1,7);
	CloseHandle(hCom);
	}

	if(m_bSpeedPID)
	{
	x2[0]=0x5;
	m_Kpin*=4096;
    m_Kin*=4096;
	m_Kcorn*=4096;
	temp1=(int)m_Kpin;
	temp2=(int)m_Kin;
	temp3=(int)m_Kcorn;
	

	x2[1]=temp1&255;
    x2[2]=(temp1&65280)/256;
	x2[3]=temp2&255;
    x2[4]=(temp2&65280)/256;
	x2[5]=temp3&255;
    x2[6]=(temp3&65280)/256;


	CreateComm2();
	WriteData(x2,7);
	CloseHandle(hCom);
	}

}

void CDlgPara::OnSentcircle() 
{
	SetTimer(1,1000,NULL);	
}

void CDlgPara::OnTimer(UINT nIDEvent) 
{
	CDlgPara::OnSent();	
	CDialog::OnTimer(nIDEvent);
}

BOOL CDlgPara::DestroyWindow() 
{
    KillTimer(1);	
	return CDialog::DestroyWindow();
}

BOOL CDlgPara::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	
	m_n=1500;
	m_Ki=0.0625;
	m_Kpi=1;
	m_Kcor=0.0625;
	m_Kpin=4.510498047;
	m_Kin=0.012939453;
	m_Kcorn=0.002685546;
	UpdateData(false);	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

⌨️ 快捷键说明

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