我用MSCOMM实现电脑和设备串口通信,我在串口打开使设置定时器为1秒向设备发送一次命令,设备接收到命令返回毫伏值,我设置接收门限为将数据全部接收后出发ONCOMM,在ONCOMM中我调用getlocaltime获得时间,并向对话框发送消息,对话框显示曲线的横轴为时间轴纵轴为MV,下面部分代码和截图:
//开始串口通信方法
void CDataDisplayView::OnOpencom() 
{
CByteArray Array1;
Array1.RemoveAll();
Array1.SetSize(8);
    Array1.SetAt(0,0x7e);
Array1.SetAt(1,0x01);
Array1.SetAt(2,0x01);
Array1.SetAt(3,0x01);
Array1.SetAt(4,0x01);
Array1.SetAt(5,0x01);
Array1.SetAt(6,0x01);
Array1.SetAt(7,0x7F);
myComm.SetOutput(COleVariant(Array1));
m_bStopCommunication = false;
SetTimer(1,1000,NULL);
}
/////////////////////////////////
响应定时器函数
void CDataDisplayView::OnTimer(UINT nIDEvent) 
{
    CByteArray Array1;
Array1.RemoveAll();
Array1.SetSize(8);
    Array1.SetAt(0,0x7e);
Array1.SetAt(1,0x01);
Array1.SetAt(2,0x01);
Array1.SetAt(3,0x01);
Array1.SetAt(4,0x01);
Array1.SetAt(5,0x01);
Array1.SetAt(6,0x01);
Array1.SetAt(7,0x7F);
myComm.SetOutput(COleVariant(Array1));
CView::OnTimer(nIDEvent);
}/////////////////////////////////
oncomm事件处理函数
void CDataDisplayView::OnCommMscomm()
{
VARIANT input1;                     //定义VARIANT类型变量
BYTE rxdata[2048];                  //定义存放二进制数据的数组
long len1,k;
COleSafeArray safearray1;           //定义COleSafeArray类的实例
CString strtemp,m_RcvData;
double mv,pH,cONC,tm;
DWORD InBufferCount;
SYSTEMTIME systime;
char buf[32];
    GetLocalTime(&systime);//本地时间
sprintf(buf, "%d:%d:%d", systime.wHour,systime.wMinute,systime.wMinute,systime.wSecond);
    switch(myComm.GetCommEvent())
{
    case 2:
//收到 RThreshold 个字符
//添加接收处理代码
InBufferCount=myComm.GetInBufferCount();
input1=myComm.GetInput();
safearray1=input1; //将VARAIANT变量赋值给COleSafeArray类的实例    
len1=safearray1.GetOneDimSize();//使用COleSafeArray类的成员函数获取数据长度
for(k=0;k<len1;k++)
safearray1.GetElement(&k,rxdata+k);//使用COleSafeArray类的成员函数将数据写入数组
for(int i = 5;i<(len1 - 2);i+=3)  //接收的数据从5-16为信息字节
{    switch(i)
   {
   case 5:
   m_RcvData = "mv";
   mv = dataCompution.FloatTOReal(rxdata[i],rxdata[i+1],rxdata[i+2]);//得到的double类型值
   if(pDlg2->m_flagShowMv)
   {
   pDlg2->m_dMv = mv;
   ::SendMessage(pDlg2->m_hWnd,WM_MvChanged,(WPARAM)buf,0);
   }
               strtemp.Format("%6.2f",mv);
   pDlg1->m_MV = strtemp;
   strtemp = "";
   break;
.....