问题:
为什么我的串口接收事件,要在线程执行完后才执行的啊,这样函数返回来的值就不对了(前一次的测试结果);请问如下解决
我的线程主要代码是
procedure OneThread.Execute;
var
times:byte;
A,B:String;
begin
A:=SendString('?'+#$D#$A); //读电阻值(函数如下)
B:=SendString('?'+#$D#$A); //读电阻值
end;//--------------读电阻值函数---
function OneThread.SendString(const str: string):String;
begin
FrmMain.Comm1.WriteCommData(Pchar(str),Length(str));
sleep(550);
result:=Resistance; //Resistance为全局变量
//每条指令发送出去时,接收是有一定的时间限制的,通常发送与接收的时间间隔100毫秒
end;
串口接收代码如下
//-------------------串口接收事件-----------------------------------
procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
str :string;
Resistance:string;
StrOfAdd,Empty:byte;
begin
SetLength(Str,BufferLength);
move(buffer^,pchar(@Str[1])^,bufferlength);
try
//查找加号的位置+1
StrOfAdd:=pos('+',str)+1;
//查找空格的位置
empty:=pos(' ',str);
//取出电阻值
Resistance:=COPy(str,strofadd,empty-strofadd);
ResistanceValue:=strtofloat(Resistance); //赋给全局变量 //取出电阻值+单位
Resistance:=COPy(str,strofadd,empty-strofadd+3);
//memo2.Lines.Add(resistance);
LEDResistance.Caption:=resistance;
except
exit;
end;
end;
为什么我的串口接收事件,要在线程执行完后才执行的啊,这样函数返回来的值就不对了(前一次的测试结果);请问如下解决
我的线程主要代码是
procedure OneThread.Execute;
var
times:byte;
A,B:String;
begin
A:=SendString('?'+#$D#$A); //读电阻值(函数如下)
B:=SendString('?'+#$D#$A); //读电阻值
end;//--------------读电阻值函数---
function OneThread.SendString(const str: string):String;
begin
FrmMain.Comm1.WriteCommData(Pchar(str),Length(str));
sleep(550);
result:=Resistance; //Resistance为全局变量
//每条指令发送出去时,接收是有一定的时间限制的,通常发送与接收的时间间隔100毫秒
end;
串口接收代码如下
//-------------------串口接收事件-----------------------------------
procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
str :string;
Resistance:string;
StrOfAdd,Empty:byte;
begin
SetLength(Str,BufferLength);
move(buffer^,pchar(@Str[1])^,bufferlength);
try
//查找加号的位置+1
StrOfAdd:=pos('+',str)+1;
//查找空格的位置
empty:=pos(' ',str);
//取出电阻值
Resistance:=COPy(str,strofadd,empty-strofadd);
ResistanceValue:=strtofloat(Resistance); //赋给全局变量 //取出电阻值+单位
Resistance:=COPy(str,strofadd,empty-strofadd+3);
//memo2.Lines.Add(resistance);
LEDResistance.Caption:=resistance;
except
exit;
end;
end;
解决方案 »
- 这样设计数据库合适吗?
- image 控件基础设置,载入图片后,其他按钮就不显示了,怎么设置?
- 登记薄:二零零六,您的期待和希望是什么?
- 关于DateTimePicker控件的使用问题?
- 请问在SQL Server数据库中的表是否一定要设主键,是否一定要设索引,主键和索引的关系如何。
- 一个关于FTP的问题
- 读取SCSI硬盘序列号的算法
- 〓 〓 〓 〓 如何获取ip地址 〓 〓 〓 〓
- Font.Size和Font.Height有什么区别?怎么得到字体的高度和宽度?
- ADOCONECTION每次连接SQLSERVER有没有必要重新指定一次CONECTIONSTRING 和 CONNECTED
- 使用全局原子运行让程序之运行一个的问题
- 请问delphi7 为何有时候对一个变量右键选 find declaration却不跳转?
全局变量怎么写在Comm1ReceiveData里面?
另外spcomm里面的读取间隔超时参数设置为5ms,也就是readintervalTimeout属性