16,471
社区成员
发帖
与我相关
我的任务
分享
void CMSCommDlg::OnButtonOpenport()
{
// TODO: Add your control notification handler code here
m_bOpenPort=!m_bOpenPort;
//设定使用的串口号,默认为com1
m_ComName=m_ctrlComName.GetCurSel()+1;
//设定波特率,默认115200bps
int index2,index3,index4,index5;
index2=m_ctrlBaud.GetCurSel();
m_ctrlBaud.GetLBText(index2,m_choose);//获得选中的字符串
m_BaudRate=atoi(m_choose);
//设定数据位数,默认8位
index3=m_ctrlDataBits.GetCurSel();
m_ctrlDataBits.GetLBText(index3,m_choose);
m_DataBits=atoi(m_choose);
//校验位,n表示无校验,o为奇校验,e偶校验
index4=m_ctrlParity.GetCurSel();
switch(index4)
{
case 0: m_Parity='n';
break;
case 1: m_Parity='o';
break;
case 2: m_Parity='e';
break;
default:
break;
}
//设定停止位
index5=m_ctrlStopBits.GetCurSel();
m_ctrlStopBits.GetLBText(index5,m_choose);
m_StopBits=atoi(m_choose);
m_strSettings.Format("%d,%c,%d,%d",m_BaudRate,m_Parity,m_DataBits,m_StopBits);//设置波特率,校验位,数据位,停止位
if(m_bOpenPort)//打开串口
{
m_Com.SetCommPort(m_ComName); //选择com口
m_Com.SetOutBufferCount(0); //清空发送缓冲区
m_Com.SetInBufferCount(0); //清空接收缓冲区
m_Com.SetInBufferSize(4096); //接收缓冲区
m_Com.SetOutBufferSize(1024); //发送缓冲区
m_Com.SetSettings(m_strSettings); //设置波特率,校验位,数据位,停止位
m_Com.SetInputMode(1); //1:以二进制方式检取数据
m_Com.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_Com.SetInputLen(0); //设置当前接收区数据长度为0,表示全部读取
m_Com.SetPortOpen(TRUE); //打开串口
m_Com.GetInput(); //先预读缓冲区以清除残留数据
m_ctrlOpenPort.SetWindowText("关闭串口");
}
else //关闭串口
{
m_ctrlOpenPort.SetWindowText("打开串口");
m_Com.SetPortOpen(FALSE);//关闭串口
}
}
void CMSCommDlg::OnCustomdrawSliderSpeed(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_CmdSpeed=m_ctrlSpeed.GetPos();
m_rps=m_CmdSpeed/500.0;
m_kmph=m_CmdSpeed*3.14*m_diameter*3.6/500.0;
m_rpm=m_rps*60;
UpdateData(FALSE);
*pResult = 0;
}
void CMSCommDlg::OnReleasedCaptureSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
// UpdateData(TRUE);
m_SendSpeed=m_CmdSpeed;
m_currentspeed=m_SendSpeed;
m_currentkph=m_currentspeed*3.14*m_diameter*3.6/500.0;
UpdateData(FALSE);
OnSend();
*pResult = 0;
}
void CMSCommDlg::OnButtonAcc1()
{
// TODO: Add your control notification handler code here
// UpdateData(TRUE);
if (flag_timer2==TRUE)
{
KillTimer(2);
flag_timer2=FALSE;
}
SetTimer(1,3000,NULL);
flag_timer1=TRUE;
}
void CMSCommDlg::OnButtonAcc2()
{
// TODO: Add your control notification handler code here
// UpdateData(TRUE);
if (flag_timer1==TRUE)
{
KillTimer(1);
flag_timer1=FALSE;
}
SetTimer(2,3000,NULL);
flag_timer2=TRUE;
}
void CMSCommDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
UpdateData(TRUE);
switch(nIDEvent)
{
case 1:
if (m_SendSpeed+m_ACCSPEED<20000)
{
m_SendSpeed+=m_ACCSPEED;
m_currentspeed=m_SendSpeed;
m_currentkph=m_currentspeed*3.14*m_diameter*3.6/500.0;
UpdateData(FALSE);
OnSend();
}
else
{
m_SendSpeed=20000;
m_currentspeed=m_SendSpeed;
m_currentkph=m_currentspeed*3.14*m_diameter*3.6/500.0;
UpdateData(FALSE);
OnSend();
}
break;
case 2:
if (m_SendSpeed-m_ACCSPEED>0)
{
m_SendSpeed-=m_ACCSPEED;
m_currentspeed=m_SendSpeed;
m_currentkph=m_currentspeed*3.14*m_diameter*3.6/500.0;
UpdateData(FALSE);
OnSend();
}
else
{
m_SendSpeed=0;
m_currentspeed=m_SendSpeed;
m_currentkph=m_currentspeed*3.14*m_diameter*3.6/500.0;
UpdateData(FALSE);
OnSend();
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
void CMSCommDlg::OnButtonAccstop()
{
// TODO: Add your control notification handler code here
if (flag_timer1==TRUE)
{
KillTimer(1);
flag_timer1=FALSE;
}
if (flag_timer2==TRUE)
{
KillTimer(2);
flag_timer2=FALSE;
}
}
没用的部分都没贴了。求解答啊。。