上位机数据采集系统接受单片机发过来的数据

我做了一个上位机采集激光器驱动电流的系统,是用mscomm控件做的,下面是界面图像是同一个工程下另一个xxx.cpp程序中画的。我看有人是在xxxDlg.cpp中Onpa... 我做了一个上位机采集激光器驱动电流的系统,是用mscomm控件做的,下面是界面

图像是同一个工程下另一个xxx.cpp程序中画的。我看有人是在xxxDlg.cpp中Onpaint中画的。现在我的图像Type是CMultiColorPlotCtrl,member是m_ctrlMultiColorPlot。看到的图像中的曲线是我在上位机程序中用随机数据产生的,不是单片机发过来的。上位机已经和单片机能正常收发了。现在要调试图像是否可以接收单片机发过来的数据,然后画成曲线,于是我写了一段下位机程序,循环发送100~200的整数,期望达到的目的就是能在图像中显示出来,和用随机数据产生的效果图一样,都是用曲线来显示。想问问在成员函数Onmscomm下,接收数据的程序该怎么写,请知道的朋友指点一二。高分送上。
忘了说了我用的VC++。
展开
 我来答
suiruop
2014-03-19 · TA获得超过341个赞
知道小有建树答主
回答量:210
采纳率:100%
帮助的人:115万
展开全部
下位机只有一个吗,那你直接可以发送了,

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。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tdfzq
2014-03-19 · TA获得超过839个赞
知道小有建树答主
回答量:771
采纳率:75%
帮助的人:200万
展开全部
从网上下载一个串口类,里面有接受消息函数,在里面按你的通讯协议,进行解码就行了,一帧数据可以用定时来判断,也可以用帧头特殊字符来判断。
追问
是SerialPort吗。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
geniusflly
2014-03-19 · TA获得超过112个赞
知道答主
回答量:136
采纳率:0%
帮助的人:50.4万
展开全部
看你的要求了,接受有两种模式 同步的和异步的,这两种网上都有很多现成的代码可用
追问
嗯    我去查查  。
追答
同步的很简单,异步的需要一些系统的知识,下面我正在用的代码,你可以参考,
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;
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式