F
faint83
Unregistered / Unconfirmed
GUEST, unregistred user!
用spcomm进行串口通讯时碰到如下问题
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
str: array of char;
str1:string;
result:double;
i,j: integer;
begin
try
setlength(str,bufferlength);
move(buffer^,Pchar(str)^,bufferlength);
str1:='';
for j:=0 to 11 do
begin
if (str[j]=#02) and (str[j+11]=#03) then
begin
for i:=j+2 to j+7 do
str1:=str1+str;
result:=strtofloat(str1);
........
主要问题是 和其他进程如 qq 和摄像头的冲突问题,如果不开摄像头,可以正常接收
如果开了摄像头 我用
move(buffer^,Pchar(str)^,bufferlength);
edit1.text:=inttostr(bufferlength);
查看 bufferlength 值,发现其固定为8。因为我只接收下位机数据,下位机发来的一贞数据由12组组成,其中的第3组到第8组为数据。这样导致常常无法接收完整的一贞数据来进行处理
而不开摄像头或qq时 bufferlength为8到80跳动,接收正常!这是第一个运行点的情况,且readintevalouttime只能设为15 否则读不到数据
第二个运行点 :下位机一贞数据为8组 开摄像头后虽然bufferlength也被固定为8,但可正常显示,readintevalouttime为500 这个点运行正常
主要是第一个点的问题 ,本来以为是摄像头冲突,今天发现开qq也会影响bufferlength
有人说是readintevaltimeout=15 这里有问题?超时时间太快?请教高手了 该如何解决
是否可以设bufferlength长度?
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
str: array of char;
str1:string;
result:double;
i,j: integer;
begin
try
setlength(str,bufferlength);
move(buffer^,Pchar(str)^,bufferlength);
str1:='';
for j:=0 to 11 do
begin
if (str[j]=#02) and (str[j+11]=#03) then
begin
for i:=j+2 to j+7 do
str1:=str1+str;
result:=strtofloat(str1);
........
主要问题是 和其他进程如 qq 和摄像头的冲突问题,如果不开摄像头,可以正常接收
如果开了摄像头 我用
move(buffer^,Pchar(str)^,bufferlength);
edit1.text:=inttostr(bufferlength);
查看 bufferlength 值,发现其固定为8。因为我只接收下位机数据,下位机发来的一贞数据由12组组成,其中的第3组到第8组为数据。这样导致常常无法接收完整的一贞数据来进行处理
而不开摄像头或qq时 bufferlength为8到80跳动,接收正常!这是第一个运行点的情况,且readintevalouttime只能设为15 否则读不到数据
第二个运行点 :下位机一贞数据为8组 开摄像头后虽然bufferlength也被固定为8,但可正常显示,readintevalouttime为500 这个点运行正常
主要是第一个点的问题 ,本来以为是摄像头冲突,今天发现开qq也会影响bufferlength
有人说是readintevaltimeout=15 这里有问题?超时时间太快?请教高手了 该如何解决
是否可以设bufferlength长度?