spcomm接收数据包问题(接上次问题 加急)(100分)

  • 主题发起人 主题发起人 faint83
  • 开始时间 开始时间
F

faint83

Unregistered / Unconfirmed
GUEST, unregistred user!
1、上次的代码无法正确显示数据。
2、数据包格式为:
(1)、每10位为一组,其中有8位即1字节有效ASCII数据,波特率4800,则每秒480字节有效数据吧。
(2)、每12组以上数据为一个数据包,即一个数据包有12字节有效数据(即12个ASCII字符),其中开始和终止各一个字节始/终字符(分别为ASCII码Xon和Xoff)。最终有效数据即中间的10个ASCII字符。
3、问:
(1)、ReceiveData事件究竟是每接收一组(在这个情况下就是上述的一组10位,去除起止位为8位有效数据,无奇偶校验位)数据触发一次,还是怎样?
(2)、我对Spcomm控件设置了XonChar=#02(Xon),XoffChar=#03(Xoff),不知这样是否可以自动截出数据包(即上述12组为一包的数据包)?
(3)、我在设置了上述两个属性后,设定每次ReceiveData事件发生后将一个全局变量加1并显示。则每秒约加几十左右,看起来似乎像是每1组一次(波特率4800,每秒有效480字节,即40包,近似)。
所以究竟是每组触发一次,还是每数据包触发一次,还是缓冲区满触发一次,还是可以设置?


解决后与上个问题一起散分 谢谢了
 
究竟receivedata事件是每组触发一次,还是每数据包触发一次,还是缓冲区满触发一次?
 
楼主是开发串口什么类型的程序呀?
 
用多线程序有数据就读
 
下位机不断发送 上位机只负责接收
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
str: PChar;
begin
str := StrAlloc(100);
str := Buffer;
Memo1.Text := str;
end;
这段程序在另一个串口已经可以实现 memo1中的值是实时变化的 '=xxxxxxx'
现在要把收到的数据 逆序,即变成 xxxxxxx=
写了
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);





var
str: PChar;
i:integer;
str1: array of char;
begin
str := StrAlloc(bufferlength);
str := Buffer;
setlength(str1,bufferlength);
move(buffer^,str1[0],bufferlength);
for i:= low(str1) to high(str1) do
begin
str1:=str^;
str:=str+1;
end;
str:=buffer;
for i:=high(str1) to low(str1) do
begin
str^:=str1;
str:=str+1;
end;
Memo1.Text := str;

end;
显示的还是 =xxxxxxx 是什么问题?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部