RS232串口的接收信号问题

yeyuelingyun 2012-05-14 02:52:58
我接收信号的程序如下:
void CRS232CommDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
VARIANT variant_inp;
COleSafeArray safearray_inp;
long i=0;
int len;
char rxdata[1000];
CString tmp;
switch (m_mscom.GetCommEvent())
{
case 2:
{
variant_inp=m_mscom.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(i=0;i<len;i++)
{
safearray_inp.GetElement(&i,&rxdata[i]);
}
rxdata[i]='\0';
}
m_recv+=rxdata;
UpdateData(false);
break;
default:
break;
}
}
可是为什么在另一端始终都接收不到信号,是什么问题啊?
...全文
405 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2012-05-15
  • 打赏
  • 举报
回复
关于串口编程可以参考这篇文章
http://www.vckbase.com/document/viewdoc/?id=1734
sxqinge 2012-05-15
  • 打赏
  • 举报
回复
能进入OnComm()里面的if语句么?
如果可以的话,然后单步调试下看下变量的值,到底是哪里出了问题。
yeyuelingyun 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
你的OnComm的映射正确配置了没有?当发送数据时,你在这个事件函数中设置断点,看是否能进入到这个函数中?
[/Quote]
我试过了,我在void CSCommTestDlg::OnComm() 那边设置了一个断点,是能进入的,可是接收不到数据啊
sxqinge 2012-05-15
  • 打赏
  • 举报
回复
你的OnComm的映射正确配置了没有?当发送数据时,你在这个事件函数中设置断点,看是否能进入到这个函数中?
诶呦 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
现在我能确定这个程序是对的,因为我看了下龚建伟的书上的例程也是这么编的,我也用他的例程也是能通讯的,但是我和他的例程一模一样,编译也是正确的,但为什么就是接受不到数据啊?????????很急啊
[/Quote]
单步调试进入
switch (m_mscom.GetCommEvent())
{
case 2:
}
看case 2中的rxdata[]是否接收到数据
yeyuelingyun 2012-05-15
  • 打赏
  • 举报
回复
现在我能确定这个程序是对的,因为我看了下龚建伟的书上的例程也是这么编的,我也用他的例程也是能通讯的,但是我和他的例程一模一样,编译也是正确的,但为什么就是接受不到数据啊?????????很急啊
yeyuelingyun 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
1:设置个断点看看是否确实收到了数据
2:看看数据内容,如果是二进制的 应该转换一下
[/Quote]
怎么转换二进制的数啊?
zgl7903 2012-05-14
  • 打赏
  • 举报
回复
1:设置个断点看看是否确实收到了数据
2:看看数据内容,如果是二进制的 应该转换一下
yeyuelingyun 2012-05-14
  • 打赏
  • 举报
回复
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
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_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
}
我重新下了个程序,这是接收部分的程序,其中m_strRXData是CString型的,是接收文本框的变量,可还是接收不到信号,为什么啊?这个循环对不对啊?总感觉“m_strRXData+=strtemp;”这句有问题,可又看不出来,求解答啊。。。。。。。。。。。。。
yeyuelingyun 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
1.先确定硬件是否OK
2.用串口测试工具测试你的程序
3.把这段程序参考网上例程,看是否代码错误
[/Quote]
第一硬件是好的,我用串口调试器试过了,第二,我一端用我的程序发送信号,另一端用串口调试器接收信号,能接收到信号,证明发送信号是没问题的,但是关键是我用我的程序接收信号就接收不了,那是不是我得接收部分的程序出错了,但是不知道错在哪,所以才问问看的。。。
诶呦 2012-05-14
  • 打赏
  • 举报
回复
1.先确定硬件是否OK
2.用串口测试工具测试你的程序
3.把这段程序参考网上例程,看是否代码错误
yeyuelingyun 2012-05-14
  • 打赏
  • 举报
回复
其中m_recv是接收信号文本框的变量名

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧