串口下重复发送数据的问题!

girlgxp 2006-11-15 08:39:17
我的程序如下:
发送数据:
Timer1->Enabled=true;
for(int i=0;i<3;i++)
{
j=j+1;
ClearCommError(hComm,&dwError,&cs);
while(cs.cbOutQue==0)
{
WriteFile(hComm,byte,1,&lrc,0);
// ShowMessage("ok");
break;
}
}
接收数据用Timer等待:
ClearCommError(hComm,&dwError,&cs);
if(j==3)
{
while(cs.cbInQue==1)
{
Edit1->Text=IntToStr(j);
ReadFile(hComm,&byte,cs.cbInQue,&nBytesRead,0);
for(int i=0;i<8;i++)
{
int p=(int)(byte>>8-i-1);
p=p&0x01;
bufpa[i]=char(p+48);
}
RT->Text=bufpa; // RT->Text+
Timer1->Enabled=false;
j=0;
break;
}
}
else
{
while(cs.cbInQue==1)
{
Edit1->Text=IntToStr(j);
RT->Text=RT->Text+"ok";
PurgeComm(hComm,PURGE_RXCLEAR); // PURGE_TXCLEAR |
break;
}
}
我主要目的是连续的发送三次数据,等待第三次数据返回,用的一个串口com1的 2&3脚短接。
编程时首先是连续发三次数据其中第二个数据的不到;上面的例子中我的Timer间隔为1MS结果没有任何反应。请问大家是什么原因,我个人觉得是时间设置的不对。因为在发送中如果我添加ShowMessage就能顺利接收每次的数据。如果有例程给我发一个,试了很多天了一直没有解决。
另外线程中也有试过没有解决问题。
...全文
1209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
girlgxp 2006-12-25
  • 打赏
  • 举报
回复
我的问题解决了,现在是用了线程异步通信机制,嗬嗬,看来语言是相通的,我是参考了一本VC++里面的API解决的。谢谢大家了哦!
laowang2 2006-12-09
  • 打赏
  • 举报
回复
up
梦回童年001 2006-11-23
  • 打赏
  • 举报
回复
发完就把Buff清空
zwh202342 2006-11-19
  • 打赏
  • 举报
回复
建议sleep(200)试试看。我的数据就是这样等待回应得。
xwb1966 2006-11-19
  • 打赏
  • 举报
回复
问题出在while(cs.cbOutQue==0)这个判断上, 由于PC的执行速度远比串口传输快, 第一个循环发出的数据在第二次循环时, 可能还没有来得及送出, 此时cs.cbOutQue不是0, 因此没有进循环, 导致没有发送.
串口工具集成目前多数串口工具的优秀功能于一身,采用CSerialPort类进行编写,并在此基础上对该类进行了改进。本工具免费试用,永不过期。并且本着奉献的精神,公开本串口工具的源代码,希望广大用户反馈意见或建议。 源码地址:code.csdn.net/itas109/serialport_itas109 博客地址:blog.csdn.net/itas109 Email:itas109@qq.com 本软件主要在XP系统做测试使用。 本工具的主要功能有: 1.接收从串口进来的数据并在窗口显示. 2.所接收到的数据数据显示方式可以选择为字符方式或者HEX方式 3.支持显示中文 4.串口波特率可以选择为300bps-115200bps. 5.可以即时刷新存在的串口号.如果您增加了usb转串口等设备,点击刷新串口按钮后,新的串口号也会在列表中出现. 6.支持最多20个串口列表,包括COM1-COM256中的任意20个活跃串口 7.可以选择“5、6、7、8”四种数据长度. 8.可以选择为“1、2”两种停止位. 9.数据可以选择为“无、奇校验、偶校验、1、0”四种方式. 10.串口设置和字符串操作等设置在程序关闭时自动保存,打开时自动载入.您可以自行设置是否自动保存. 11.可以在字符串输入框输入您想发送的字符串,并发送. 12.可以在字符串输入框输入您想发送的HEX数据串,数据的值从00到FF,没有任何限制. 13.可以定时重复发送数据,并可以设置发送时间间隔. 14.可以在发送字符串时选择发送新行,即自动加上回车换行. 15.可以即时显示发送的字节数和接收到的字节数,按清除窗口将会清零. 16、可以设置自动清空功能,在达到30行数据时,自动清空。未设置时,达到100行,自动清空. 17、在手动发送旁边的按钮可以设置按ENTER发送数据,注意点击“打开串口”后,请使焦点离开该控件. 另外要说明的是,由于本人编程能力有效,未免可能有些差错,在此先声明一下,您可以免费使用和自由传播本软件,但是我不对本软件所造成的任何损失负责!如果你使用了本软件,即表明您愿意接收这一条款。如果你不能接受,请立即将其删除!

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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