16,470
社区成员
发帖
与我相关
我的任务
分享
BOOL CSerialPort::ReadData(unsigned char* cDest,unsigned int iDataCount)
{
if(iDataCount>m_iRecCounter)
{
m_iRecCounter=0;
m_iReadPointer=0;
return FALSE;
}
unsigned int i,j;
j=0;
for(i=0;i<iDataCount;i++)
{
cDest[i]=m_szRecBuffer[m_iReadPointer++];
if(m_iReadPointer>=REC_BUFSIZE)
m_iReadPointer=0;
}
m_iRecCounter-=iDataCount;
return TRUE;
}
void CExMessage::Open()
{
// 串口初始化
m_SerialPort.InitPort(this,(UINT)5,38400,'N',8,1,EV_RXFLAG | EV_RXCHAR,512);
// 启动串口监视线程
m_SerialPort.StartMonitoring();
}
void CExMessage::Send()
{
char send[11] = {0x4D,0x45,0x41,0x53,0x3A,0x56,0x4F,0x4C,0x54,0x3F,0x0A};
// 发送数据
m_SerialPort.WriteToPort(send,11);
::SendMessage(this->m_hWnd, WM_COMM_CTS_DETECTED, 0, (LPARAM)OnComm());
}
LRESULT CExMessage::OnComm()
{
CString Receive = _T("");
unsigned char str[100];
memset(str,'\0',100);
//m_SerialPort.GetRec()获取接收缓冲区内的字节数
if(!m_SerialPort.ReadData(str,m_SerialPort.GetRec()))
{
// 复位串口
m_SerialPort.ResetComport();
AfxMessageBox(L"错误:实际读取字节个数大于缓冲区字节个数!");
return 0;
}
Receive =str ;
m_fVoltage = CStringToFloat(Receive);
return 0;
}
BEGIN_MESSAGE_MAP()
END_MESSAGE_MAP()
线程和缓冲区有时间,应该去好好看看。再次谢谢大家!