上位机数据采集系统接受单片机发过来的数据
我做了一个上位机采集激光器驱动电流的系统,是用mscomm控件做的,下面是界面图像是同一个工程下另一个xxx.cpp程序中画的。我看有人是在xxxDlg.cpp中Onpa...
我做了一个上位机采集激光器驱动电流的系统,是用mscomm控件做的,下面是界面
图像是同一个工程下另一个xxx.cpp程序中画的。我看有人是在xxxDlg.cpp中Onpaint中画的。现在我的图像Type是CMultiColorPlotCtrl,member是m_ctrlMultiColorPlot。看到的图像中的曲线是我在上位机程序中用随机数据产生的,不是单片机发过来的。上位机已经和单片机能正常收发了。现在要调试图像是否可以接收单片机发过来的数据,然后画成曲线,于是我写了一段下位机程序,循环发送100~200的整数,期望达到的目的就是能在图像中显示出来,和用随机数据产生的效果图一样,都是用曲线来显示。想问问在成员函数Onmscomm下,接收数据的程序该怎么写,请知道的朋友指点一二。高分送上。
忘了说了我用的VC++。 展开
图像是同一个工程下另一个xxx.cpp程序中画的。我看有人是在xxxDlg.cpp中Onpaint中画的。现在我的图像Type是CMultiColorPlotCtrl,member是m_ctrlMultiColorPlot。看到的图像中的曲线是我在上位机程序中用随机数据产生的,不是单片机发过来的。上位机已经和单片机能正常收发了。现在要调试图像是否可以接收单片机发过来的数据,然后画成曲线,于是我写了一段下位机程序,循环发送100~200的整数,期望达到的目的就是能在图像中显示出来,和用随机数据产生的效果图一样,都是用曲线来显示。想问问在成员函数Onmscomm下,接收数据的程序该怎么写,请知道的朋友指点一二。高分送上。
忘了说了我用的VC++。 展开
3个回答
展开全部
下位机只有一个吗,那你直接可以发送了,
Private Sub MSComm1_OnComm()
Dim temp As String
If MSComm1.CommEvent = comEvReceive Then
temp = Asc(MSComm1.Input)
//自定义
End If
MSComm1.InBufferCount = 0
End Sub
注意你自定义的协议问题和进制的问题即可
Private Sub MSComm1_OnComm()
Dim temp As String
If MSComm1.CommEvent = comEvReceive Then
temp = Asc(MSComm1.Input)
//自定义
End If
MSComm1.InBufferCount = 0
End Sub
注意你自定义的协议问题和进制的问题即可
更多追问追答
追问
这是VB的啊,忘了说了,我用的VC。VB的我看过这段是怎么写的,也试过它的思路。
追答
哦,那不好意思了,我只学过VB。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从网上下载一个串口类,里面有接受消息函数,在里面按你的通讯协议,进行解码就行了,一帧数据可以用定时来判断,也可以用帧头特殊字符来判断。
追问
是SerialPort吗。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你的要求了,接受有两种模式 同步的和异步的,这两种网上都有很多现成的代码可用
追问
嗯 我去查查 。
追答
同步的很简单,异步的需要一些系统的知识,下面我正在用的代码,你可以参考,
long CCommEx::CFYReadComm(char *pBuffer, long lngRSize,long Overtime)
{
if(bFlagInit==false)return -1;
long T1=0,T2=0,T3=0;
char RXBuff[255],CMDBuff[255];
DWORD dwLength,dwWfso,dwErrorFlags;
COMSTAT ComState;
BOOL bResult = TRUE;
BOOL dwEndFlag=FALSE;
BOOL bReadOver = TRUE;
long lPos1;
lPos1=0;
memset(CMDBuff,'\0',255);
T1=GetTickCount();
for (;;)
{
T2=GetTickCount();
if ((T2-T1)>Overtime)return -2;
dwLength=0;
memset(RXBuff,'\0',255);
ClearCommError(hCom,&dwErrorFlags,&ComState);
bResult = ReadFile(hCom,RXBuff,255, &dwLength, &m_osRead);
if (!bResult)
{
if(GetLastError()==ERROR_IO_PENDING)
{
dwWfso=WaitForSingleObject(m_osRead.hEvent,200);
if(dwWfso==WAIT_OBJECT_0)
{
GetOverlappedResult(hCom,&m_osRead, &dwLength, TRUE);
}
}
}
if(dwLength>0)
{
memcpy_s(CMDBuff+lPos1,255,RXBuff,dwLength);
lPos1=lPos1+dwLength;
}
T3=GetTickCount();
printf("%d,dwLength: %d,%d\n value: %s\n",T3-T2,dwLength,lPos1,RXBuff);
if(CCheckRecvOK(CMDBuff,lPos1))
{
memcpy_s(pBuffer,255,CMDBuff,lPos1);
return lPos1;
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询