C++ Builder在线程中读取高速串口数据
我用victor在线程中读串口数据int n = Form1->YbCommDevice1->Read(Buf,8192);
每次读到的不是完整的数据包
在数据包中有识别码
怎样才能实现读出一完整的数据包
注:用定时器读取速度太慢,老是丢包
串口API可以实现单字节读取
便于数据包首尾定位
谁有用API实现串口线程通讯的例子
谢谢! ComPort与ComDataPacket结合使用,实现高速串口数据收发
相见恨晚啊!!!!!!!!!!!!
在接收事件中,数据包与数据包之间可以无时间间隔……
自己整理的ComPort中文使用说明
1、组件栏http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544768.png
(原文件名:image001.png)
2、ComPorthttp://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544769.png
(原文件名:image003.png)
3、ComDataPackethttp://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544770.png(原文件名:image005.png)
4、ComPort与ComDataPacket结合使用,实现高速串口数据收发
初始化:
……
ComDataPacket1->CaseInsensitive = true; //数据包首尾监控接收使能
ComDataPacket1->IncludeStrings=false; //接收不包括首尾字符
ComDataPacket1->StartString = 'x'; //数据包起始位
ComDataPacket1->StopString = 'y'; //数据包停止位
ComDataPacket1->Size = 6; //数据包长度包括起始位,不包括停止位
……
如MCU发送”x12345y”,PC实际收到12345
PC发送数据包不包括StartString和StopString
如PC发送"12345",MCU实际收到12345
MCU要发送7个字符串,而ComDataPacket1->Size要设置成6;
接收函数:
void __fastcall TForm1::ComDataPacket1Packet(TObject *Sender,
const AnsiString Str)
{
check_data(Str); //在此事件中校验并处理数据
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CPort在BCB6下编译错误解决方法
点击此处下载 ourdev_544772.txt(文件大小:1K) (原文件名:CPort在BCB6下编译问题的解决.txt)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
最新的ComPort(TComPort4Beta_Delphi2010)
支持CB6,CB2007,CB2009
点击此处下载 ourdev_544774.rar(文件大小:504K) (原文件名:TComPort4Beta_Delphi2010.rar) 按你的方法改了,重新安装后还是出现
Unresolved external '__fastcall Cport::TCustomComPort::SetPortA(const System::AnsiString)' 回家再看看 hephi 发表于 2010-4-9 13:29
ComPort与ComDataPacket结合使用,实现高速串口数据收发
相见恨晚啊!!!!!!!!!!!!
在接收事件中 ...
谢谢你的经验分享,按照你的方法我成功了,非常感谢
页:
[1]