unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CPort, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    btn1: TButton;
    mmo1: TMemo;
    tmr1: TTimer;
    ComPort: TComPort;
    mmo2: TMemo;
    procedure tmr1Timer(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);   
    procedure TsData(const str: string);
    procedure btn1Click(Sender: TObject);
  private
    FData:string;
    FNewDate:Double;
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
function HexStrToStr(const S:string):string;
var
t:Integer;
  ts:string;
  M,Code:Integer;
begin
t:=1;
  Result:='';
while t<=Length(S) do
  begin
    while not (S[t] in ['0'..'9','A'..'F','a'..'f']) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
      ts:='$'+S[t]
    else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code); //  把16进制字符串转换成十进制数12h->18
if Code=0 then    //转换成功
begin
Result:=Result+Chr(M);//返回指定ascII值的字符  chr(18)->#$12
end;                    //s=1234567  -> result=#$12'3V'#7
inc(t,2);
end;
end;
function StrToHexStr(const S:string):string;
//字符串转换成16进制字符串
var
  I:Integer;
begin
  for I:=1 to Length(S) do
  begin
    if I=1 then
      Result:=IntToHex(Ord(S[1]),2)
    else Result:=Result+' '+IntToHex(Ord(S[I]),2);
  end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin  
  if ComPort.Connected then
    ComPort.Close
  else ComPort.Open;
end;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  S:string;
  I,J:Integer;
  M:Byte;
begin
 ComPort.ReadStr(S,Count);
 for I:=1 to Count do
 mmo1.Text:=mmo1.Text+StrToHexStr(S);
 for I:=1 to Count do
 begin
 M:=ord(s[I]);
 if s[I]='255' then
   begin
    FNewDate:=StrToFloat(s[I+1]);
    FNewDate:=FNewDate+StrToInt(s[I+2])*256;
    FNewDate:=FNewDate*0.000057;
    FData:=FData+floattostr(FNewDate);
    mmo2.Text := Mmo2.Text + FData;
   end;
 end; 
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
  TsData('F0');
end;
procedure TForm1.TsData(const str: string);
var
  ss:string;
begin
 if Comport.Connected then     //串口打开时发送相应数据到输出缓冲区
    begin
      ss:=HexStrToStr(Str);
      Comport.WriteStr(ss);   //写缓冲区
    end;
end;连接串口后会出现unable to open com port
请问是不是代码哪里错了。