VC++串口通讯程序如何修改接收框中显示的内容

来源:百度知道 编辑:UC知道 时间:2024/05/09 11:04:21
相信做过串口通讯的朋友都知道串口调试助手这个软件,我也是用了基于MSComm控件用VC6.0写的程序。
下面是一个很标准的接受函数:
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 每8个bit占一个内存
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strEditRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
}
而我的程序也可以像串口调试助手那样,发送16进制得到16进制或者字符型数据。但是工作的需要,发送一个16进制读数指令,

我想你可以这样:
1.由于串口方式下使用的是流式的协议,所以应该使用一个缓冲,假设为buf.
2.你收到数据后将收到的所有数据写入到缓冲中。
3.解析缓冲中的数据,这样解析,根据你的问题我大致可以知道你接收到的报文的头为02,尾为0D.
所以在解析的时候首先需要找到头的位置,然后在依次读取,直到遇到尾,然后将中间的数据显示出来即可.当然,根据你具体的协议可能还会有错误的处理.
具体是这样的:
struct packet
{
char head;//02
char data[20];
char tail;//0d
};

感觉你这 代码 类似 龚建伟 的 书上的代码!

再去 看看 他的 书吧

网络上有 电子文档 的

祝你顺利

不要老师抄袭代码,主要自己消化吸收呀,多去调试就好了。

好的程序是调试出来的。