首页
学习
活动
专区
圈层
工具
发布

可读物
EN

Stack Overflow用户
提问于 2014-03-16 11:36:02
回答 1查看 10.3K关注 0票数 1

我试图在串行行RS232上从主机读取一个简单的字符串。两种接收-传输的参数是相同的:

代码语言:javascript
复制
Baudrate: 9600;
Data: 8bit;
Parity: None;
Stop: 1bit;
Flow Control: None;

我试过发送这个字符串:

!A243B324C213D300#

我用'!‘和“#”作为标题和结束,以确保字符串将收到。问题是,我可以接收字符串直到第15个字符(3)。

我之所以知道这一点,是因为如果我使用这个代码:

代码语言:javascript
复制
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
begin
 ComPort1.ReadStr(Str, Count);
 memo1.Lines.Add(str);
end;

我去看看

!A243B324C213D3

00#

我试图扩展comport的缓冲区,但没有结果。

所以为什么我不能一次就收到完整的字符串?

我在这里找到了这个图书馆,直到现在它还能正常工作:

http://sourceforge.net/projects/comport/

EN

回答 1

Stack Overflow用户

发布于 2014-03-16 15:42:56

与TComPort组件一起出现的另一个组件是: TComDataPacket。只需将其连接到TComPort,设置StartString和StopString属性,并使用事件onPacket获取完整的数据。

示例:

代码语言:javascript
复制
...
    ComDataPacket1.Comport := Comport1;
    ComDataPacket1.StartString := '!';
    ComDataPacket1.StopString := '#';
    ComDataPacket1.onPacket := ComDataPacket1Packet;
...

//this is real code from one of my applications where I use it for barcode reader service
procedure TDM.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
     BarCodeReader.Barcode := Str;  
end;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22436319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档