我写了一个上位机程序,要求一点按钮程序就自动读取函数值,然后发给串口。循环很多次,但是数据不能完全接收。
请教高手解决。
void CExp2Dlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
if(!m_bSerialPortOpened) return; //检查串口是否打开
char sDATA[9];
double VEL_CYCLE1;
double VEL_CYCLE2;
double VEL_CYCLE3;
double VEL_Z;
for(int i=1;i<=628;i++)
{
VEL_Z=(i-314.5)/181.43;
VEL_CYCLE1 = -0.49134*pow(VEL_Z,7)+0.75943*pow(VEL_Z,6)+3.3301*pow(VEL_Z,5)-9.0222*pow(VEL_Z,4)-6.7262*pow(VEL_Z,3)+34.208*pow(VEL_Z,2)+3.3873*VEL_Z-20.8091;
VEL_CYCLE2 = 0.41765*pow(VEL_Z,7)-1.0116*pow(VEL_Z,6)-4.5032*pow(VEL_Z,5)-7.8415*pow(VEL_Z,4)+21.277*pow(VEL_Z,3)-21.456*pow(VEL_Z,2)-34.514*VEL_Z+11.24;
VEL_CYCLE3 = 0.074171*pow(VEL_Z,7)+0.29885*pow(VEL_Z,6)+1.1712*pow(VEL_Z,5)+1.0221*pow(VEL_Z,4)-14.548*pow(VEL_Z,3)-12.637*pow(VEL_Z,2)+31.126*VEL_Z+9.642;
sDATA[0]=16*1+2;
sDATA[1]=int(VEL_CYCLE1);
sDATA[2]=1;
sDATA[3]=16*2+2;
sDATA[4]=int(VEL_CYCLE2);
sDATA[5]=1;
sDATA[6]=16*3+2;
sDATA[7]=int(VEL_CYCLE3);
sDATA[8]=1;
m_SerialPort.WriteToPort((LPCTSTR) sDATA);
Sleep(50);
}
::MessageBox(NULL,"Send complete!","反馈信息",MB_OK);
}
------解决方案--------------------------------------------------------
是不是由于窗体假死造成的?你点击按钮后整个程序应该会假死30多秒吧?
用多线程或者timer试试。
------解决方案--------------------------------------------------------
你搜索的话不可能搜不到的。有点耐心。http://hi.baidu.com/nbw609/blog/item/06295867939ce321aa184c01