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