hephi 发表于 2010-4-1 10:56:13

C++ Builder在线程中读取高速串口数据

我用victor在线程中读串口数据
int n = Form1->YbCommDevice1->Read(Buf,8192);
每次读到的不是完整的数据包
在数据包中有识别码
怎样才能实现读出一完整的数据包
注:用定时器读取速度太慢,老是丢包

串口API可以实现单字节读取
便于数据包首尾定位
谁有用API实现串口线程通讯的例子
谢谢!

hephi 发表于 2010-4-9 13:29:51

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)

ztrx 发表于 2010-9-15 17:30:12

按你的方法改了,重新安装后还是出现
Unresolved external '__fastcall Cport::TCustomComPort::SetPortA(const System::AnsiString)'

beixue 发表于 2010-11-10 16:31:18

回家再看看

vjcmain 发表于 2014-2-21 22:24:04

hephi 发表于 2010-4-9 13:29
ComPort与ComDataPacket结合使用,实现高速串口数据收发
相见恨晚啊!!!!!!!!!!!!
在接收事件中 ...

谢谢你的经验分享,按照你的方法我成功了,非常感谢
页: [1]
查看完整版本: C++ Builder在线程中读取高速串口数据