vb串口通信接收的问题如何解决?
答案:3 悬赏:30
解决时间 2021-01-24 10:00
- 提问者网友:玫瑰园
- 2021-01-23 13:45
vb串口通信接收的问题如何解决?
最佳答案
- 二级知识专家网友:神鬼未生
- 2021-01-23 14:24
粗略的看了一下,你的代码没有问题,我怀疑是其他的地方出现了问题。
给你一个我以前写的,模仿串口调试助手用串口控件的方法写的程序,你参考一下吧。
代码已发到你的邮箱。
补充:
接收就是在OnComm() 函数里啊,你的这段代码没有什么问题。
有没有做串口控件的事件映射啊:
BEGIN_EVENTSINK_MAP(CCuteComDlg, CDialog)
ON_EVENT(CCuteComDlg, IDC_MSCOMM1, 1 , OnComm, VTS_NONE)
END_EVENTSINK_MAP()
如果有的话,那接收应该没有问题的。况且即使只有发没有收,那也不会点发送就会出错的。
我发给你的代码你看到了吗,那是标准串口控件的用法,里面收发演示都有的,你详细看一下吧,应该是对你有所帮助的。
有人说是因为龚建伟的串口初始化部分代码有问题,才导致了后面的安全数组出现错误。
我一直是使用如下代码进行串口控件的初始化的,已经应用到过很多程序中没有出现过问题,你可以试试:
if(m_ctrlComm.get_PortOpen())
m_ctrlComm.put_PortOpen(FALSE);
m_ctrlComm.put_CommPort(1); //选择com1
//输出方式为二进制方式
m_ctrlComm.put_InputMode(1);//text,binary
//m_ctrlComm.put_InBufferSize(64);
//m_ctrlComm.put_OutBufferSize(512);
m_ctrlComm.put_Settings("9600,n,8,1"); //波特率9600,无校验ndo,8个数据位,1个停止位
if( !m_ctrlComm.get_PortOpen())
m_ctrlComm.put_PortOpen(TRUE);//打开串口
m_ctrlComm.put_RThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0
//0---读接收缓冲区的所有内容
//n---读接收缓冲区的 n 个字符(或二进制码)
m_ctrlComm.get_Input();//先预读缓冲区以清除残留数据
这是VS2008中的代码,在VC6.0中请把函数前缀get_替换为
给你一个我以前写的,模仿串口调试助手用串口控件的方法写的程序,你参考一下吧。
代码已发到你的邮箱。
补充:
接收就是在OnComm() 函数里啊,你的这段代码没有什么问题。
有没有做串口控件的事件映射啊:
BEGIN_EVENTSINK_MAP(CCuteComDlg, CDialog)
ON_EVENT(CCuteComDlg, IDC_MSCOMM1, 1 , OnComm, VTS_NONE)
END_EVENTSINK_MAP()
如果有的话,那接收应该没有问题的。况且即使只有发没有收,那也不会点发送就会出错的。
我发给你的代码你看到了吗,那是标准串口控件的用法,里面收发演示都有的,你详细看一下吧,应该是对你有所帮助的。
有人说是因为龚建伟的串口初始化部分代码有问题,才导致了后面的安全数组出现错误。
我一直是使用如下代码进行串口控件的初始化的,已经应用到过很多程序中没有出现过问题,你可以试试:
if(m_ctrlComm.get_PortOpen())
m_ctrlComm.put_PortOpen(FALSE);
m_ctrlComm.put_CommPort(1); //选择com1
//输出方式为二进制方式
m_ctrlComm.put_InputMode(1);//text,binary
//m_ctrlComm.put_InBufferSize(64);
//m_ctrlComm.put_OutBufferSize(512);
m_ctrlComm.put_Settings("9600,n,8,1"); //波特率9600,无校验ndo,8个数据位,1个停止位
if( !m_ctrlComm.get_PortOpen())
m_ctrlComm.put_PortOpen(TRUE);//打开串口
m_ctrlComm.put_RThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0
//0---读接收缓冲区的所有内容
//n---读接收缓冲区的 n 个字符(或二进制码)
m_ctrlComm.get_Input();//先预读缓冲区以清除残留数据
这是VS2008中的代码,在VC6.0中请把函数前缀get_替换为
全部回答
- 1楼网友:独钓一江月
- 2021-01-23 16:43
关于VB串口通信,有一套非常好的技术资料,600M多,你在淘宝搜索"太阳雨VB串口通信技术资料"就可以找到,对指导您的VB串口编程非常有帮助.
- 2楼网友:刀戟声无边
- 2021-01-23 15:17
我暂时保留我的看法!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯