现在公司要求我做一个升级软件,要求把一个BIN文件里的内容发给串口,每一次都要求发1024个字节,如果说少于1024个字节的话,就按照实际的数据来发(读取出来的实际字节数内容来发),每发一次(成功数据)它的硬件都会返回一个数据给我表示成功,这个程序应该怎么写呢?
procedure TForm1.BitBtn3Click(Sender: TObject);
var hzkstrr:string;
hzkstream:TFileStream;
begin
if not(OpenDialog1.Execute) then exit;
hzkStream.Free;
hzkStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
SetLength(hzkstr,256);//设置读取缓冲区大小
hzkstream.Position:=0;//读取起始位置
txlen:=hzkStream.Read(hzkstr[1],256);//数据读到HZKSTR中,TXLEN=实际读取长度
Comm1.WriteCommData(PAnsiChar(hzkstr),txlen);
hzkStream.Free;
end;
上面的代码我不知道怎么循环读取数据发送,且什么时候结束.
希望高手多多指教,谢谢!!!!
procedure TForm1.BitBtn3Click(Sender: TObject);
var hzkstrr:string;
hzkstream:TFileStream;
begin
if not(OpenDialog1.Execute) then exit;
hzkStream.Free;
hzkStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
SetLength(hzkstr,256);//设置读取缓冲区大小
hzkstream.Position:=0;//读取起始位置
txlen:=hzkStream.Read(hzkstr[1],256);//数据读到HZKSTR中,TXLEN=实际读取长度
Comm1.WriteCommData(PAnsiChar(hzkstr),txlen);
hzkStream.Free;
end;
上面的代码我不知道怎么循环读取数据发送,且什么时候结束.
希望高手多多指教,谢谢!!!!
代码如下:
var
hzkstr:string;
hzkstream:TFileStream;
TXLEN:integer;
我想把文件读取出来到MEMO中,然后再来处理
procedure TForm1.BitBtn3Click(Sender: TObject);
var hzkstrr:string;
hzkstream:TFileStream;
begin
if not(OpenDialog1.Execute) then exit;
hzkStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
SetLength(hzkstr,256);//设置读取缓冲区大小
hzkstream.Position:=0;//读取起始位置
repeat
txlen:=hzkStream.Read(hzkstr[1],256);//数据读到HZKSTR中,TXLEN=实际读取长度
Comm1.WriteCommData(PAnsiChar(hzkstr),txlen);
until hzkStream.position >=hzkStream.size;
hzkStream.Free;
end;
fromf,tof:file;
numread,numwrite,i:integer;
buf:array[1..1024] of char;
begin
str1:='';
if opendialog1.Execute then
begin
assignfile(fromf,opendialog1.FileName);
reset(fromf,1);
if savedialog1.Execute then
begin
assignfile(tof,savedialog1.FileName);
rewrite(tof,1);
canvas.TextOut(10,10,'copying'+inttostr(filesize(fromf))+'bytess...');
repeat
blockread(fromf,buf,sizeof(buf),numread);
memo1.Lines.Add(buf);
until (numread=0);
closefile(fromf);
end;
end;
end;
这个代码可以把BIN文件里面的内容读取出来(读取出来的好像是ASC码),但是现在有一个问题就是怎么把BUF里面内容转换成HEX
要显示到memo里format一下就是了
var
....
....
buf:array[1..1024] of byte;
strhex:string;
i:integer;
begin
....
....
strhex:='';
for i:=low(buf) to high(buf) do
begin
strhex:=strhex+format('%.2x ',[buf[i]]);//转换成16进制
end;
memo1.Lines.Add(strhex);
....
....
end;