L
lsssxs
Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.CheckBox4Click(Sender: TObject);
var
sar:array[1..5] of string;//声明数组
i:integer;
begin
While CheckBox4.Checked=true do
begin
//判断是不是选择了,然后循环执行下面代码,
Application.ProcessMessages;//这样可以执行别的窗口,
//有选中的时候执行
if Button3.Caption='关闭串口' then
//判断串口是否打开
begin
sar[1]:=HexStrToStr('01 03 00 00 00 01 84 0A');
sar[2]:=HexStrToStr('01 03 00 00 00 02 84 0A');
sar[3]:=HexStrToStr('01 03 00 00 00 03 84 0A');
begin
ComPort1.ClearBuffer(true,true);
wait(30);
//延期100ms 继续下面的代码,这里使用
SendString(sar[1]);
//这个是发送一组
wait(30);
//延期100ms 继续下面的代码,这里使用
if (length(scr)<24) and (scr<>'') and (length(scr)>10) then
begin
edit4.text:=inttostr(HextoOct(copy(scr,length(scr)-8+1,2)));
Sleep(50)//防止cpu占用100%
end else
begin
edit4.Text:='0';
memo3.lines.add('1号电源通讯不正常,或未设定----->'+formatdatetime('hh:mm:ss:ms',now));
end;
//==============到这里是发送1组数据================
wait(30);
//延期100ms 继续下面的代码,这里使用
SendString(sar[2]);
//这个是发送二组
wait(30);
//延期100ms 继续下面的代码,这里使用
if (length(scr)<24) and (scr<>'') and (length(scr)>10) then
begin
edit6.text:=inttostr(HextoOct(copy(scr,length(scr)-8+1,2)));
Sleep(50)//防止cpu占用100%
end else
begin
edit6.Text:='0';
memo3.lines.add('1号电源通讯不正常,或未设定----->'+formatdatetime('hh:mm:ss:ms',now));
end;
//==============到这里是发送2组数据================
wait(30);
//延期100ms 继续下面的代码,这里使用
SendString(sar[3]);
//这个是发送三组
wait(30);
//延期100ms 继续下面的代码,这里使用
if (length(scr)<24) and (scr<>'') and (length(scr)>10) then
begin
edit5.text:=inttostr(HextoOct(copy(scr,length(scr)-8+1,2)));
Sleep(50)//防止cpu占用100%
end else
begin
edit5.Text:='0';
memo3.lines.add('1号电源通讯不正常,或未设定----->'+formatdatetime('hh:mm:ss:ms',now));
end;
//==============到这里是发送3组数据================
end
else
ShowMessage('请先打开端口,同时确认硬件连接正常!');
end;
end;
要请教的是:现在我使用循环的方式来发送,读取是可以读取到串口发送和接收了
但是这样写的结果是cpu占用90~100%;那位兄弟指教一下,串口连续循环的发送指令出去,采用那种方法好
感谢先
var
sar:array[1..5] of string;//声明数组
i:integer;
begin
While CheckBox4.Checked=true do
begin
//判断是不是选择了,然后循环执行下面代码,
Application.ProcessMessages;//这样可以执行别的窗口,
//有选中的时候执行
if Button3.Caption='关闭串口' then
//判断串口是否打开
begin
sar[1]:=HexStrToStr('01 03 00 00 00 01 84 0A');
sar[2]:=HexStrToStr('01 03 00 00 00 02 84 0A');
sar[3]:=HexStrToStr('01 03 00 00 00 03 84 0A');
begin
ComPort1.ClearBuffer(true,true);
wait(30);
//延期100ms 继续下面的代码,这里使用
SendString(sar[1]);
//这个是发送一组
wait(30);
//延期100ms 继续下面的代码,这里使用
if (length(scr)<24) and (scr<>'') and (length(scr)>10) then
begin
edit4.text:=inttostr(HextoOct(copy(scr,length(scr)-8+1,2)));
Sleep(50)//防止cpu占用100%
end else
begin
edit4.Text:='0';
memo3.lines.add('1号电源通讯不正常,或未设定----->'+formatdatetime('hh:mm:ss:ms',now));
end;
//==============到这里是发送1组数据================
wait(30);
//延期100ms 继续下面的代码,这里使用
SendString(sar[2]);
//这个是发送二组
wait(30);
//延期100ms 继续下面的代码,这里使用
if (length(scr)<24) and (scr<>'') and (length(scr)>10) then
begin
edit6.text:=inttostr(HextoOct(copy(scr,length(scr)-8+1,2)));
Sleep(50)//防止cpu占用100%
end else
begin
edit6.Text:='0';
memo3.lines.add('1号电源通讯不正常,或未设定----->'+formatdatetime('hh:mm:ss:ms',now));
end;
//==============到这里是发送2组数据================
wait(30);
//延期100ms 继续下面的代码,这里使用
SendString(sar[3]);
//这个是发送三组
wait(30);
//延期100ms 继续下面的代码,这里使用
if (length(scr)<24) and (scr<>'') and (length(scr)>10) then
begin
edit5.text:=inttostr(HextoOct(copy(scr,length(scr)-8+1,2)));
Sleep(50)//防止cpu占用100%
end else
begin
edit5.Text:='0';
memo3.lines.add('1号电源通讯不正常,或未设定----->'+formatdatetime('hh:mm:ss:ms',now));
end;
//==============到这里是发送3组数据================
end
else
ShowMessage('请先打开端口,同时确认硬件连接正常!');
end;
end;
要请教的是:现在我使用循环的方式来发送,读取是可以读取到串口发送和接收了
但是这样写的结果是cpu占用90~100%;那位兄弟指教一下,串口连续循环的发送指令出去,采用那种方法好
感谢先