⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 本人自己用Delphi做的串口测试程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  progressbar1.position:=progressbar1.Min ;
  bflagsuccess:=true;
  ADDR:=0;
  ByteArray[0]:=$53;
  ByteArray[1]:=$03;
  ByteArray[2]:=ADDR;
  ByteArray[3]:=$08;
  ByteArray[4]:=$00;
  ByteArray[5]:=$00;
  ByteArray[6]:=$00;
  ByteArray[7]:=$00;
  ByteArray[8]:=$00;
  ByteArray[9]:=$00;
  ByteArray[10]:=$00;
  ByteArray[11]:=$00;
  ByteArray[12]:=$00;
  ByteArray[13]:=$45;

  for j:=0 to 31 do
  begin
         ByteArray[2]:=ADDR;
         ByteArray[12]:=$00;
         ByteArray[12]:=(ByteArray[12]+ByteArray[1]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[2]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[3]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[4]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[5]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[6]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[7]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[8]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[9]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[10]);
         ByteArray[12]:=(ByteArray[12]+ByteArray[11]);
         ByteArray[12]:=$FF-ByteArray[12];
         ByteArray[12]:=ByteArray[12]+1;

         vTmp:=VarArrayCreate([0,13],VarByte);
         for i:=0 to 13 do
         begin
              vTmp[i]:=ByteArray[i];
         end;
         ovTmp:=vTmp;
         MSCOMM1.InputMode:=1;
         MSCOMM1.InBufferCount :=0;
         mscomm1.Output :=ovTmp;
         SLEEP(50);
         if(mscomm1.InBufferCount >=14)then
         BEGIN
            MSCOMM1.InputMode :=comInputModeBinary;
            iReceived:=MSCOMM1.InBufferCount;
            ovTmp:=MSCOMM1.Input ;
            vTmp:=VarArrayCreate([0,13],varByte);
            vTmp:=ovTmp;
            for i:=0 to 13 do
            begin
               bTmp:=vTmp[i];
               ByteArray[I]:=bTmp;
            end;
            ByteArray[12]:=ByteArray[12]+ByteArray[1];
            ByteArray[12]:=ByteArray[12]+ByteArray[2];
            ByteArray[12]:=ByteArray[12]+ByteArray[3];
            ByteArray[12]:=ByteArray[12]+ByteArray[4];
            ByteArray[12]:=ByteArray[12]+ByteArray[5];
            ByteArray[12]:=ByteArray[12]+ByteArray[6];
            ByteArray[12]:=ByteArray[12]+ByteArray[7];
            ByteArray[12]:=ByteArray[12]+ByteArray[8];
            ByteArray[12]:=ByteArray[12]+ByteArray[9];
            ByteArray[12]:=ByteArray[12]+ByteArray[10];
            ByteArray[12]:=ByteArray[12]+ByteArray[11];
            IF(ByteArray[12]=0 )AND (ByteArray[1]=$3)THEN
            BEGIN
              for i:=0 to  7 do
              begin
                buf_rec[j][i]:= ByteArray[4+i];
              end;
            END
            ELSE
            BEGIN
              IF  ByteArray[12]<>0 THEN   showmessage('接收数据校验错误! 请重试。');
              IF  ByteArray[1]<>$3 THEN   showmessage('接收数据命令错误! 请重试。');
              bflagsuccess:=false;
            END;
         END
         ELSE
         begin
            bflagsuccess:=false;
            showmessage('无返回数据,请检查线路和端口设置后重试。');
            exit;
         end;
         ADDR:=ADDR+8;
         if(progressbar1.position<>progressbar1.Max  )then
            progressbar1.StepIt ;
    end;
    if  bflagsuccess=true then
      BufferToMemo
    else
        showmessage('操作失败! 请重试。');

    progressbar1.Position :=0;

end;

procedure TForm1.FF1Click(Sender: TObject);
begin
  SetBuffer($FF);
  BufferToMemo();
end;

procedure TForm1.N5Click(Sender: TObject);
var
  ss:string;
  ii:integer;
begin
  ss:='$'+edit1.Text;
  if TryStrToInt(ss, ii) then
  begin
    SetBuffer(ii);
    BufferToMemo();
  end
  else
    showmessage('数据中有非数字字符(0~9,A~F,a~f),请修改后重试。');
//  SetBuffer(strtoint('$'+edit1.Text));
end;

procedure TForm1.N4Click(Sender: TObject);
var
  i,j:integer;
  strmemo:string;
begin
      for j:=0 to 31 do
      begin
          for i:=0 to 7 do
          begin
             buf_rec[j][i]:=8*j+i;
          end;
      end;
      BufferToMemo;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  instr,tmp:string;
  ival,i,j:integer;


  ByteArray:array[0..13] of byte;
  ovTmp:OleVariant;
  vTmp:Variant;
  ADDR:BYTE;
  bTmp:byte;
  bflagsuccess:boolean;
begin
  SetBuffer(0);
   for j:=0 to 15 do
   begin
       instr:=memo1.Lines.ValueFromIndex[1+j];
       tmp:=RightStr(instr,48);
       for i:=0 to 15 do
       begin
         ival:=strtoint('$'+trim(LeftStr(tmp,3)));
         buf_rec[2*j+(i div 8)][i mod 8]:=ival;
         tmp:=RightStr(instr,48-3*(i+1));
       end;
   end;


  progressbar1.position:=progressbar1.Min ;
  bflagsuccess:=true;
  ADDR:=0;

  for j:=0 to 31 do
  begin
      ByteArray[0]:=$53;
      ByteArray[1]:=$04;
      ByteArray[2]:=ADDR;
      ByteArray[3]:=$08;
      ByteArray[4]:=buf_rec[j][0];
      ByteArray[5]:=buf_rec[j][1];
      ByteArray[6]:=buf_rec[j][2];
      ByteArray[7]:=buf_rec[j][3];
      ByteArray[8]:=buf_rec[j][4];
      ByteArray[9]:=buf_rec[j][5];
      ByteArray[10]:=buf_rec[j][6];
      ByteArray[11]:=buf_rec[j][7];
      ByteArray[12]:=$00;
      ByteArray[12]:=(ByteArray[12]+ByteArray[1]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[2]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[3]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[4]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[5]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[6]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[7]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[8]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[9]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[10]);
      ByteArray[12]:=(ByteArray[12]+ByteArray[11]);
      ByteArray[12]:=$FF-ByteArray[12];
      ByteArray[12]:=ByteArray[12]+1;
      ByteArray[13]:=$45;


         vTmp:=VarArrayCreate([0,13],VarByte);
         for i:=0 to 13 do
         begin
              vTmp[i]:=ByteArray[i];
         end;
         ovTmp:=vTmp;
         MSCOMM1.InputMode:=1;
         MSCOMM1.InBufferCount :=0;
         mscomm1.Output :=ovTmp;
         SLEEP(50);
         if(mscomm1.InBufferCount >=14)then
         BEGIN
            MSCOMM1.InputMode :=comInputModeBinary;
            ovTmp:=MSCOMM1.Input ;
            vTmp:=VarArrayCreate([0,13],varByte);
            vTmp:=ovTmp;
            for i:=0 to 13 do
            begin
               bTmp:=vTmp[i];
               ByteArray[I]:=bTmp;
            end;
            ByteArray[12]:=ByteArray[12]+ByteArray[1];
            ByteArray[12]:=ByteArray[12]+ByteArray[2];
            ByteArray[12]:=ByteArray[12]+ByteArray[3];
            ByteArray[12]:=ByteArray[12]+ByteArray[4];
            ByteArray[12]:=ByteArray[12]+ByteArray[5];
            ByteArray[12]:=ByteArray[12]+ByteArray[6];
            ByteArray[12]:=ByteArray[12]+ByteArray[7];
            ByteArray[12]:=ByteArray[12]+ByteArray[8];
            ByteArray[12]:=ByteArray[12]+ByteArray[9];
            ByteArray[12]:=ByteArray[12]+ByteArray[10];
            ByteArray[12]:=ByteArray[12]+ByteArray[11];
            IF(ByteArray[12]=0 )AND (ByteArray[1]=$1)THEN
            BEGIN
               bflagsuccess:=true;
            END
            ELSE
            BEGIN
              IF  ByteArray[12]<>0 THEN   showmessage('接收数据校验错误! 请重试。');
              IF  ByteArray[1]<>$1 THEN   showmessage('接收数据命令错误! 请重试。');
              bflagsuccess:=false;
            END;
         END
         ELSE
         begin
            bflagsuccess:=false;
         end;
         ADDR:=ADDR+8;
         if(progressbar1.position<>progressbar1.Max  )then
            progressbar1.StepIt ;
    end;
    if  bflagsuccess=true then
      showmessage('写操作成功!')
    else
      showmessage('操作失败! 请重试。');

    progressbar1.Position :=0;

end;

procedure TForm1.N9Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.N6Click(Sender: TObject);
var
  j,i,ival:integer;
  instr,tmp:string;
begin
    if  openDialog1.Execute then
    begin
       memo1.Lines.LoadFromFile(opendialog1.Files.CommaText );
    end;

   for j:=0 to 15 do
   begin
       instr:=memo1.Lines.ValueFromIndex[1+j];
       tmp:=RightStr(instr,48);
       for i:=0 to 15 do
       begin
         ival:=strtoint('$'+trim(LeftStr(tmp,3)));
         buf_rec[2*j+(i div 8)][i mod 8]:=ival;
         tmp:=RightStr(instr,48-3*(i+1));
       end;
   end;
   BufferToMemo();

end;

procedure TForm1.N7Click(Sender: TObject);
begin
  if savedialog1.Execute then
  begin
      memo1.Lines.SaveToFile(savedialog1.Files.CommaText );
  end;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  N6.Click ;
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
  N7.Click ;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -