资讯详情

Delphi 485 Modbus Rtu读写RFID示例源码

读写器介绍:MODBUS RTU 读卡器IC-10MR PLC读卡器 M1/S50/S70/ 安卓Android-淘宝网 (taobao.com)https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.21.65135b43XOBlto&id=41901878033

procedure TForm1.FormShow(Sender: TObject); var  i:Integer;  count:Integer; begin  dispstr:='';  count := 0;   for i := 1 to 20 do                    //开发环境调试时,关闭菜单栏 Tool/Debugger Options/integrated debugging 选项  begin    Comm1.CommName:='\\.\COM'   IntToStr(i);     try     Comm1.StartComm; /////打开串口     Comm1.StopComm; /////打开串口     ComboBox1.Items.Add('COM'   IntToStr(i));     count := count   1;    except     end;    if(count>0) then   begin     ComboBox1.ItemIndex:=count-1;   end;  end; end;  procedure TForm1.BitBtn1Click(Sender: TObject); begin  if(BitBtn1.Caption = 打开串口 then  begin   try     Comm1.CommName:='\\.\' ComboBox1.Text;     以下代码必须复制过去     Comm1.BaudRate:=strtoint(ComboBox2.text);    //19200;     Comm1.ByteSize:=_8;     Comm1.ParityCheck:=False;     case combobox3.ItemIndex of       0: Comm1.Parity:=None;       1: Comm1.Parity:=Odd;       2: Comm1.Parity:=Even;       3: Comm1.Parity:=Mark;     else         Comm1.Parity:=Space;     end;     Comm1.StopBits:=_1;     Comm1.XoffChar:='#';     comm1.ReadIntervalTimeout:= StrToInt(RichEdit13.Lines[0]);      Comm1.StartComm; /////打开串口     BitBtn1.Caption := 关闭串口;      ComboBox1.Enabled:=False;   except     ShowMessage打开端口失败!');   end;  end  else  begin   try     timer2.Enabled :=false;     checkbox2.State := cbunchecked;      timer1.Enabled :=false;     checkbox1.State := cbunchecked;      Comm1.StopComm; //关闭串口     BitBtn1.Caption := 打开串口;     ComboBox1.Enabled:=True;   except    end;  end;  end;  procedure TForm1.BitBtn2Click(Sender: TObject); var  sendd:array[0..7]of Byte;  //发送字节缓冲  i:integer;  SendDataStr:string; begin  if(BitBtn1.Caption <> 关闭串口 then  begin   Application.MessageBox(请先打开串口再读取网站号!', '警告', MB_OK MB_ICONSTOP);    //MB_ICONQUESTION MB_ICONEXCLAMATION MB_ICONWARNING MB_ICONINFORMATION MB_ICONASTERISK MB_ICONHAND MB_ICONERROR MB_ICONSTOP   Exit;  end;    sendd[0] := $00;   sendd[1] := $03;   sendd[2] := $00;   sendd[3] := $00;   sendd[4] := $00;   sendd[5] := $01;   sendd[6] := $85;   sendd[7] := $DB;    FuncCode:=1;  //读取在线站号   issendwaitrev1 := True;   sendwaitrevsize := 0;    Comm1.WriteCommData(@sendd[0], 8);    SendDataStr:=串口发送数据:   for i:=0 to 7 do   begin     SendDataStr:=SendDataStr inttohex(sendd[i],2) ' ';   end;    ListBox1.Items.Add(SendDataStr);   listbox1.ItemIndex:=listbox1.Count-1;  end;  procedure TFom1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var

i,para:integer;
answ:integer;
GetdataStr:string;
SendDataStr:string;
cardhao:Longword;
strls1:string;
CRC16:longint;
sendd:array[0..7]of Byte;   //发送字节缓冲

begin
  GetdataStr:='串口接收数据:';
  if issendwaitrev1 then
  begin//在有发送指令等待返回
    issendwaitrev1 := False;
    sendwaitrevsize := BufferLength;
    move(Buffer^,pchar(@(sendwaitData[0]))^,BufferLength);

    for i:=0 to  BufferLength-1  do
    begin
        GetdataStr:=GetdataStr+inttohex(sendwaitData[i],2)+' ';
    end;
    ListBox1.Items.Add(GetdataStr);
    listbox1.ItemIndex:=listbox1.Count-1;

    CRC16 := CRC_16(@sendwaitData,BufferLength);
    if crc16=0 then
    begin
        case FuncCode of
             1:
               begin
                       RichEdit1.Text :=inttostr(sendwaitData[4]);
               end;
             2:
               begin
                       answ:=Application.MessageBox('在线站点号设置成功!是否要读出在线设备的站号?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP
                       if answ=1 then
                       begin
                           BitBtn2.Click;
                       end;
               end;
             6:
               begin
                       BitBtn9.Click;

                       {answ:=Application.MessageBox('读卡操作已成功执行,是否要读出设备内寄存器内数据?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP
                       if answ=1 then
                       begin
                           BitBtn9.Click;
                       end;}
               end;
             7:
               begin
                    strls1:='';
                    for i:=3 to  3+sendwaitData[2]-1  do
                    begin
                        strls1:=strls1+inttohex(sendwaitData[i],2)+' ';
                    end;
                    RichEdit3.Text :=strls1;

                    if (StrToInt(RichEdit5.Lines[0])=7) and  (StrToInt(RichEdit6.Lines[0])>2) then
                    begin
                        if sendwaitData[4]>0 then
                        begin
                             cardhao := sendwaitData[8] + sendwaitData[7]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;
                             strls1:='状态位:'+inttohex(sendwaitData[4],2)+' 物理卡号:'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2)+'-'+inttohex(sendwaitData[8],2);
                             strls1:=strls1+' 换成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);
                             strls1:=strls1+ ' 扇区内数据:' ;
                             if cardno10<>RightStr('000000000' + IntToStr(cardhao),10) then
                             begin
                                  if CheckBox1.Checked =true then cardno10:=RightStr('000000000' + IntToStr(cardhao),10);
                                  if MidStr(DectoBin(sendwaitData[4]),7,1)='1' then
                                  begin
                                      for i:=9 to BufferLength-3 do
                                       begin
                                           strls1:=strls1+inttohex(sendwaitData[i],2);
                                       end;
                                  end;
                                  edit1.Text :=strls1;
                                  if checkbox3.checked=true then
                                  begin
                                     BitBtn5.Click;
                                  end;
                             end;
                        end
                        else
                        begin
                             edit1.Text :='';
                        end;
                    end
                    else
                    begin
                          edit1.Text :='';
                    end;
               end;
             8:
               begin

               end;
             9:
               begin
                    sendd[0] := StrToInt(RichEdit1.Lines[0]);
                    sendd[1] := $06;
                    sendd[2] := $00;
                    sendd[3] := $07;
                    sendd[4] := $00;
                    sendd[5] := $14;

                    CRC16 := CRC_16(@sendd,6);

                    sendd[6] := CRC16 mod 256;;
                    sendd[7] := (CRC16 div 256) mod 256;

                    FuncCode:=10;   //驱动在线站号完成写卡
                    issendwaitrev1 := True;
                    sendwaitrevsize := 0;

                    Comm1.WriteCommData(@sendd[0], 8);

                    SendDataStr:='串口发送数据:';
                    for i:=0 to 7 do
                    begin
                        SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';
                    end;

                    ListBox1.Items.Add(SendDataStr);
                    listbox1.ItemIndex:=listbox1.Count-1;
               end;
             10:
               begin
                    sendd[0] := StrToInt(RichEdit1.Lines[0]);
                    sendd[1] := $03;
                    sendd[2] := $00;
                    sendd[3] := $07;
                    sendd[4] := $00;
                    sendd[5] := $01;

                    CRC16 := CRC_16(@sendd,6);

                    sendd[6] := CRC16 mod 256;;
                    sendd[7] := (CRC16 div 256) mod 256;

                    FuncCode:=11;   //写卡后读出写卡状态
                    issendwaitrev1 := True;
                    sendwaitrevsize := 0;

                    Comm1.WriteCommData(@sendd[0], 8);

                    SendDataStr:='串口发送数据:';
                    for i:=0 to 7 do
                    begin
                        SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';
                    end;

                    ListBox1.Items.Add(SendDataStr);
                    listbox1.ItemIndex:=listbox1.Count-1;
               end;
             11:
               begin
                   if RightStr(DectoBin(sendwaitData[4]),1)='1' then
                   begin
                      BitBtn5.Click;
                      Application.MessageBox('写卡操作成功!', '提示', MB_OK+MB_ICONINFORMATION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP
                   end;
               end;
             21:
               begin
                       RichEdit4.Text :=inttostr(sendwaitData[4]);
               end;
             22:
               begin
                       answ:=Application.MessageBox('在线站点号设置成功!是否要读出在线设备的站号?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP
                       if answ=1 then
                       begin
                           BitBtn11.Click;
                       end;
               end;
             25:
               begin
                   if (sendwaitData[1]=3) and (sendwaitData[3]+sendwaitData[4]+sendwaitData[5]+sendwaitData[6]>0) then
                   begin
                        cardhao := sendwaitData[4] + sendwaitData[3]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;
                        strls1:='物理卡号:'+inttohex(sendwaitData[3],2)+'-'+inttohex(sendwaitData[4],2)+'-'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2);
                        strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);
                        edit3.Text :=strls1;

                        if checkbox2.Checked =false then
                        begin
                             answ:=Application.MessageBox('    已成功读取设备寄存器内卡号,是否要清除寄存器数据使读卡器能继续读卡?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP
                             if answ=1 then
                             begin
                                  BitBtn16.Click;
                             end;
                        end
                        else
                        begin
                             BitBtn16.Click;
                        end;
                   end
                   else
                   begin
                       // edit3.Text :='';
                   end;
               end;
             30:
               begin
                  if sendwaitrevsize>4 then
                  begin
                      ComboBox14.ItemIndex := StrToint(LeftStr(inttohex(sendwaitData[4],2),1));
                      para:= StrToint(RightStr(inttohex(sendwaitData[4],2),1));
                      ComboBox8.ItemIndex := para mod 2;
                      ComboBox13.ItemIndex := para div 2;
                  end;
               end;
             31:
               begin
                       RichEdit1.Text :=inttostr(sendwaitData[4]);
                       timer3.Enabled :=false;
                       revn:=true;
                       BitBtn20.Caption :='检测在线读写器的波特率及校验位';
                       Application.MessageBox('已检测到在线设备的波特率及校验码,可以开始测试各项功能!', '提示', MB_OK+MB_ICONINFORMATION);
               end;
             32:
               begin
                       RichEdit4.Text :=inttostr(sendwaitData[4]);
                       timer4.Enabled :=false;
                       revn:=true;
                       BitBtn21.Caption :='检测在线读卡器的波特率及校验位';
                       Application.MessageBox('已检测到在线设备的波特率及校验码,可以开始测试各项功能!', '提示', MB_OK+MB_ICONINFORMATION);
               end;
        end;
    end;
  end;
end;
    {case FuncCode of
         1:
           begin
              if  sendwaitData[5]=(sendwaitData[3] xor sendwaitData[4])  then
              begin
                  RichEdit1.Text :=inttostr(sendwaitData[4]*256+sendwaitData[3]) ;
              end;
              FuncCode:=0;
           end;
         2:
           begin
               FuncCode:=0;
               answ:=Application.MessageBox('在线站点号设置成功!是否要读出在线设备的站号?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP
               if answ=1 then
               begin
                   BitBtn2.Click;
               end;
           end;
         3:
           begin
               If (sendwaitData[1] = $69) And (sendwaitData[2] = $D2) And ((sendwaitData[3] Xor sendwaitData[4] Xor sendwaitData[5] Xor sendwaitData[6] Xor sendwaitData[7]) = sendwaitData[8]) Then
               begin
                    cardhao := sendwaitData[7] + sendwaitData[6]*256 + sendwaitData[5]*256*256 + sendwaitData[4]*256*256*256;
                    strls1:='物理卡号:'+inttohex(sendwaitData[4],2)+'-'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2);
                    strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);
                    edit1.Text :=strls1;
               end
               else
               begin
                    edit1.Text :='';
               end;
               FuncCode:=0;
           end;
         4:
           begin
                If (sendwaitData[1] = $69) And (sendwaitData[2] = $2A) and (sendwaitrevsize>2) then
                begin
                     strls1:='设备按键:';
                     for i:=2 to  sendwaitrevsize  do
                     begin
                          if sendwaitData[i]=$0D then break ;
                          strls1:=strls1+chr(sendwaitData[i]);
                     end;
                     edit1.Text :=strls1;
                end
                else
                begin
                     edit1.Text :='';
                end;
               FuncCode:=0;
           end;
         5:
           begin
               If (sendwaitData[1] = $69) And (sendwaitData[2] = $69)  then
               begin
                   If (sendwaitData[3] = $01) And ((sendwaitData[4] Xor sendwaitData[5] Xor sendwaitData[6] Xor sendwaitData[7] Xor sendwaitData[8]) = sendwaitData[9])  then     //只有卡号
                   begin
                        cardhao := sendwaitData[8] + sendwaitData[7]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;
                        strls1:='物理卡号:'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2)+'-'+inttohex(sendwaitData[8],2);
                        strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);
                        edit2.Text :=strls1;
                        dispstr:='卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);
                   end
                   else
                   begin
                        if (sendwaitData[3] = $02) And (sendwaitData[4] = $2A) And (sendwaitrevsize > 8)  then   //只有按键
                        begin
                             strls1:='设备按键:';
                             dispstr:='';
                             for i:=4 to  sendwaitrevsize  do
                             begin
                                  if sendwaitData[i]=$0D then break ;
                                  strls1:=strls1+chr(sendwaitData[i]);
                                  dispstr:=dispstr+chr(sendwaitData[i]);
                             end;
                             edit2.Text :=strls1;
                             dispstr:='按键:'+midstr(dispstr+'               ',1,10);
                        end
                        else
                        begin
                             if  (sendwaitData[3] = $03) And ((sendwaitData[4] Xor sendwaitData[5] Xor sendwaitData[6] Xor sendwaitData[7] Xor sendwaitData[8]) = sendwaitData[9]) then //卡号和按键
                             begin
                                  cardhao := sendwaitData[8] + sendwaitData[7]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;
                                  strls1:='物理卡号:'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2)+'-'+inttohex(sendwaitData[8],2);
                                  strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);

                                  strls1:=strls1+',设备按键:';
                                  keystr:='';
                                  for i:=10 to  sendwaitrevsize  do
                                  begin
                                       if sendwaitData[i]=$0D then break ;
                                       strls1:=strls1+chr(sendwaitData[i]);
                                       keystr:=keystr+chr(sendwaitData[i]);
                                  end;
                                  edit2.Text :=strls1;

                                  dispstr:='卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);
                                  dispstr:=dispstr+'按键:'+midstr(keystr+'               ',1,10);
                             end
                             else
                             begin
                                 edit2.Text :='';
                                 dispstr:='';
                             end;
                        end;
                   end;
                   if checkbox2.State = cbchecked then BitBtn12.Click;
               end
               else
               begin
                      edit2.Text :='';
                      dispstr:='';
               end;
               FuncCode:=0;
           end;
    else
         begin

         end;
    end;
  end
  else
  begin

    revsize := BufferLength;
    if (revsize>50) then
    begin
      revsize := 50;
    end;
    move(Buffer^,pchar(@(MyReceiveData[MyReceivePoint].MyData[1]))^,revsize);
    Inc(MyReceivePoint);
  end;

end;        }


end.

​

procedure TForm1.FormShow(Sender: TObject); var   i:Integer;   count:Integer; begin   dispstr:='';   count := 0;

  for i := 1 to 20 do                                       //开发环境调试时,请关闭菜单栏  Tool/Debugger Options/integrated debugging 选项   begin       Comm1.CommName:='\\.\COM' + IntToStr(i);

      try          Comm1.StartComm; //打开串口          Comm1.StopComm; //打开串口          ComboBox1.Items.Add('COM' + IntToStr(i));          count := count + 1;       except

      end;

    if(count>0) then     begin          ComboBox1.ItemIndex:=count-1;     end;   end; end;

procedure TForm1.BitBtn1Click(Sender: TObject); begin   if(BitBtn1.Caption = '打开串口') then   begin     try         Comm1.CommName:='\\.\'+ComboBox1.Text;         //以下代码一定要复制过去         Comm1.BaudRate:=strtoint(ComboBox2.text);        //19200;         Comm1.ByteSize:=_8;         Comm1.ParityCheck:=False;         case combobox3.ItemIndex of              0: Comm1.Parity:=None;              1: Comm1.Parity:=Odd;              2: Comm1.Parity:=Even;              3: Comm1.Parity:=Mark;         else                 Comm1.Parity:=Space;         end;         Comm1.StopBits:=_1;         Comm1.XoffChar:='#';         comm1.ReadIntervalTimeout:= StrToInt(RichEdit13.Lines[0]);

        Comm1.StartComm; //打开串口         BitBtn1.Caption := '关闭串口';

        ComboBox1.Enabled:=False;     except         ShowMessage('打开端口失败!');     end;   end   else   begin     try         timer2.Enabled :=false;         checkbox2.State := cbunchecked;

        timer1.Enabled :=false;         checkbox1.State := cbunchecked;

        Comm1.StopComm; //关闭串口         BitBtn1.Caption := '打开串口';         ComboBox1.Enabled:=True;     except

    end;   end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string; begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;

    sendd[0] := $00;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $00;     sendd[4] := $00;     sendd[5] := $01;     sendd[6] := $85;     sendd[7] := $DB;

    FuncCode:=1;   //读取在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

 end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;   BufferLength: Word); var

i,para:integer; answ:integer; GetdataStr:string; SendDataStr:string; cardhao:Longword; strls1:string; CRC16:longint; sendd:array[0..7]of Byte;   //发送字节缓冲

begin   GetdataStr:='串口接收数据:';   if issendwaitrev1 then   begin//在有发送指令等待返回     issendwaitrev1 := False;     sendwaitrevsize := BufferLength;     move(Buffer^,pchar(@(sendwaitData[0]))^,BufferLength);

    for i:=0 to  BufferLength-1  do     begin         GetdataStr:=GetdataStr+inttohex(sendwaitData[i],2)+' ';     end;     ListBox1.Items.Add(GetdataStr);     listbox1.ItemIndex:=listbox1.Count-1;

    CRC16 := CRC_16(@sendwaitData,BufferLength);     if crc16=0 then     begin         case FuncCode of              1:                begin                        RichEdit1.Text :=inttostr(sendwaitData[4]);                end;              2:                begin                        answ:=Application.MessageBox('在线站点号设置成功!是否要读出在线设备的站号?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP                        if answ=1 then                        begin                            BitBtn2.Click;                        end;                end;              6:                begin                        BitBtn9.Click;

                       {answ:=Application.MessageBox('读卡操作已成功执行,是否要读出设备内寄存器内数据?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP                        if answ=1 then                        begin                            BitBtn9.Click;                        end;}                end;              7:                begin                     strls1:='';                     for i:=3 to  3+sendwaitData[2]-1  do                     begin                         strls1:=strls1+inttohex(sendwaitData[i],2)+' ';                     end;                     RichEdit3.Text :=strls1;

                    if (StrToInt(RichEdit5.Lines[0])=7) and  (StrToInt(RichEdit6.Lines[0])>2) then                     begin                         if sendwaitData[4]>0 then                         begin                              cardhao := sendwaitData[8] + sendwaitData[7]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;                              strls1:='状态位:'+inttohex(sendwaitData[4],2)+' 物理卡号:'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2)+'-'+inttohex(sendwaitData[8],2);                              strls1:=strls1+' 换成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);                              strls1:=strls1+ ' 扇区内数据:' ;                              if cardno10<>RightStr('000000000' + IntToStr(cardhao),10) then                              begin                                   if CheckBox1.Checked =true then cardno10:=RightStr('000000000' + IntToStr(cardhao),10);                                   if MidStr(DectoBin(sendwaitData[4]),7,1)='1' then                                   begin                                       for i:=9 to BufferLength-3 do                                        begin                                            strls1:=strls1+inttohex(sendwaitData[i],2);                                        end;                                   end;                                   edit1.Text :=strls1;                                   if checkbox3.checked=true then                                   begin                                      BitBtn5.Click;                                   end;                              end;                         end                         else                         begin                              edit1.Text :='';                         end;                     end                     else                     begin                           edit1.Text :='';                     end;                end;              8:                begin

               end;              9:                begin                     sendd[0] := StrToInt(RichEdit1.Lines[0]);                     sendd[1] := $06;                     sendd[2] := $00;                     sendd[3] := $07;                     sendd[4] := $00;                     sendd[5] := $14;

                    CRC16 := CRC_16(@sendd,6);

                    sendd[6] := CRC16 mod 256;;                     sendd[7] := (CRC16 div 256) mod 256;

                    FuncCode:=10;   //驱动在线站号完成写卡                     issendwaitrev1 := True;                     sendwaitrevsize := 0;

                    Comm1.WriteCommData(@sendd[0], 8);

                    SendDataStr:='串口发送数据:';                     for i:=0 to 7 do                     begin                         SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';                     end;

                    ListBox1.Items.Add(SendDataStr);                     listbox1.ItemIndex:=listbox1.Count-1;                end;              10:                begin                     sendd[0] := StrToInt(RichEdit1.Lines[0]);                     sendd[1] := $03;                     sendd[2] := $00;                     sendd[3] := $07;                     sendd[4] := $00;                     sendd[5] := $01;

                    CRC16 := CRC_16(@sendd,6);

                    sendd[6] := CRC16 mod 256;;                     sendd[7] := (CRC16 div 256) mod 256;

                    FuncCode:=11;   //写卡后读出写卡状态                     issendwaitrev1 := True;                     sendwaitrevsize := 0;

                    Comm1.WriteCommData(@sendd[0], 8);

                    SendDataStr:='串口发送数据:';                     for i:=0 to 7 do                     begin                         SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';                     end;

                    ListBox1.Items.Add(SendDataStr);                     listbox1.ItemIndex:=listbox1.Count-1;                end;              11:                begin                    if RightStr(DectoBin(sendwaitData[4]),1)='1' then                    begin                       BitBtn5.Click;                       Application.MessageBox('写卡操作成功!', '提示', MB_OK+MB_ICONINFORMATION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP                    end;                end;              21:                begin                        RichEdit4.Text :=inttostr(sendwaitData[4]);                end;              22:                begin                        answ:=Application.MessageBox('在线站点号设置成功!是否要读出在线设备的站号?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP                        if answ=1 then                        begin                            BitBtn11.Click;                        end;                end;              25:                begin                    if (sendwaitData[1]=3) and (sendwaitData[3]+sendwaitData[4]+sendwaitData[5]+sendwaitData[6]>0) then                    begin                         cardhao := sendwaitData[4] + sendwaitData[3]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;                         strls1:='物理卡号:'+inttohex(sendwaitData[3],2)+'-'+inttohex(sendwaitData[4],2)+'-'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2);                         strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);                         edit3.Text :=strls1;

                        if checkbox2.Checked =false then                         begin                              answ:=Application.MessageBox('    已成功读取设备寄存器内卡号,是否要清除寄存器数据使读卡器能继续读卡?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP                              if answ=1 then                              begin                                   BitBtn16.Click;                              end;                         end                         else                         begin                              BitBtn16.Click;                         end;                    end                    else                    begin                        // edit3.Text :='';                    end;                end;              30:                begin                   if sendwaitrevsize>4 then                   begin                       ComboBox14.ItemIndex := StrToint(LeftStr(inttohex(sendwaitData[4],2),1));                       para:= StrToint(RightStr(inttohex(sendwaitData[4],2),1));                       ComboBox8.ItemIndex := para mod 2;                       ComboBox13.ItemIndex := para div 2;                   end;                end;              31:                begin                        RichEdit1.Text :=inttostr(sendwaitData[4]);                        timer3.Enabled :=false;                        revn:=true;                        BitBtn20.Caption :='检测在线读写器的波特率及校验位';                        Application.MessageBox('已检测到在线设备的波特率及校验码,可以开始测试各项功能!', '提示', MB_OK+MB_ICONINFORMATION);                end;              32:                begin                        RichEdit4.Text :=inttostr(sendwaitData[4]);                        timer4.Enabled :=false;                        revn:=true;                        BitBtn21.Caption :='检测在线读卡器的波特率及校验位';                        Application.MessageBox('已检测到在线设备的波特率及校验码,可以开始测试各项功能!', '提示', MB_OK+MB_ICONINFORMATION);                end;         end;     end;   end; end;     {case FuncCode of          1:            begin               if  sendwaitData[5]=(sendwaitData[3] xor sendwaitData[4])  then               begin                   RichEdit1.Text :=inttostr(sendwaitData[4]*256+sendwaitData[3]) ;               end;               FuncCode:=0;            end;          2:            begin                FuncCode:=0;                answ:=Application.MessageBox('在线站点号设置成功!是否要读出在线设备的站号?', '提示', MB_OKcancel+MB_ICONQUESTION);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP                if answ=1 then                begin                    BitBtn2.Click;                end;            end;          3:            begin                If (sendwaitData[1] = $69) And (sendwaitData[2] = $D2) And ((sendwaitData[3] Xor sendwaitData[4] Xor sendwaitData[5] Xor sendwaitData[6] Xor sendwaitData[7]) = sendwaitData[8]) Then                begin                     cardhao := sendwaitData[7] + sendwaitData[6]*256 + sendwaitData[5]*256*256 + sendwaitData[4]*256*256*256;                     strls1:='物理卡号:'+inttohex(sendwaitData[4],2)+'-'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2);                     strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);                     edit1.Text :=strls1;                end                else                begin                     edit1.Text :='';                end;                FuncCode:=0;            end;          4:            begin                 If (sendwaitData[1] = $69) And (sendwaitData[2] = $2A) and (sendwaitrevsize>2) then                 begin                      strls1:='设备按键:';                      for i:=2 to  sendwaitrevsize  do                      begin                           if sendwaitData[i]=$0D then break ;                           strls1:=strls1+chr(sendwaitData[i]);                      end;                      edit1.Text :=strls1;                 end                 else                 begin                      edit1.Text :='';                 end;                FuncCode:=0;            end;          5:            begin                If (sendwaitData[1] = $69) And (sendwaitData[2] = $69)  then                begin                    If (sendwaitData[3] = $01) And ((sendwaitData[4] Xor sendwaitData[5] Xor sendwaitData[6] Xor sendwaitData[7] Xor sendwaitData[8]) = sendwaitData[9])  then     //只有卡号                    begin                         cardhao := sendwaitData[8] + sendwaitData[7]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;                         strls1:='物理卡号:'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2)+'-'+inttohex(sendwaitData[8],2);                         strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);                         edit2.Text :=strls1;                         dispstr:='卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);                    end                    else                    begin                         if (sendwaitData[3] = $02) And (sendwaitData[4] = $2A) And (sendwaitrevsize > 8)  then   //只有按键                         begin                              strls1:='设备按键:';                              dispstr:='';                              for i:=4 to  sendwaitrevsize  do                              begin                                   if sendwaitData[i]=$0D then break ;                                   strls1:=strls1+chr(sendwaitData[i]);                                   dispstr:=dispstr+chr(sendwaitData[i]);                              end;                              edit2.Text :=strls1;                              dispstr:='按键:'+midstr(dispstr+'               ',1,10);                         end                         else                         begin                              if  (sendwaitData[3] = $03) And ((sendwaitData[4] Xor sendwaitData[5] Xor sendwaitData[6] Xor sendwaitData[7] Xor sendwaitData[8]) = sendwaitData[9]) then //卡号和按键                              begin                                   cardhao := sendwaitData[8] + sendwaitData[7]*256 + sendwaitData[6]*256*256 + sendwaitData[5]*256*256*256;                                   strls1:='物理卡号:'+inttohex(sendwaitData[5],2)+'-'+inttohex(sendwaitData[6],2)+'-'+inttohex(sendwaitData[7],2)+'-'+inttohex(sendwaitData[8],2);                                   strls1:=strls1+' 换算成十位卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);

                                  strls1:=strls1+',设备按键:';                                   keystr:='';                                   for i:=10 to  sendwaitrevsize  do                                   begin                                        if sendwaitData[i]=$0D then break ;                                        strls1:=strls1+chr(sendwaitData[i]);                                        keystr:=keystr+chr(sendwaitData[i]);                                   end;                                   edit2.Text :=strls1;

                                  dispstr:='卡号:'+ RightStr('000000000' + IntToStr(cardhao),10);                                   dispstr:=dispstr+'按键:'+midstr(keystr+'               ',1,10);                              end                              else                              begin                                  edit2.Text :='';                                  dispstr:='';                              end;                         end;                    end;                    if checkbox2.State = cbchecked then BitBtn12.Click;                end                else                begin                       edit2.Text :='';                       dispstr:='';                end;                FuncCode:=0;            end;     else          begin

         end;     end;   end   else   begin

    revsize := BufferLength;     if (revsize>50) then     begin       revsize := 50;     end;     move(Buffer^,pchar(@(MyReceiveData[MyReceivePoint].MyData[1]))^,revsize);     Inc(MyReceivePoint);   end;

end;        }

procedure TForm1.BitBtn3Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    newjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

  if(not isrightint(RichEdit2.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit2.SetFocus();             RichEdit2.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);     newjh:=StrToInt(RichEdit2.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $00;     sendd[4] := $00;     sendd[5] := newjh;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=2;   //更改在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn4Click(Sender: TObject); begin   listbox1.Clear; end;

procedure TForm1.BitBtn7Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $07;     sendd[4] := $00;     sendd[5] := $04;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=9;   //驱动在线站号开始写卡     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn8Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;     RichEdit5.Text :='7';

    oldjh:=StrToInt(RichEdit1.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $07;     sendd[4] := $00;     sendd[5] := $08;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=6;   //驱动在线站号读卡     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.CheckBox1MouseDown(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer); begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;

  if checkbox2.checked=true then   begin      checkbox2.checked:=false;      timer2.Enabled :=false;   end;

  if (strtoint(RichEdit1.Lines[0])=0) then   begin             Application.MessageBox('轮询的站点号不可以为0,请先指定轮询站号!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

  if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;   if(not isrightint(RichEdit8.Lines[0])) then   begin             Application.MessageBox('间隔时间输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit8.SetFocus();             RichEdit8.SelectAll();             exit;   end;

  if checkbox1.State = cbUnchecked then   begin       timer1.Interval := StrToInt(RichEdit8.Lines[0]);       timer1.Enabled :=true;   end   else   begin       timer1.Enabled :=false;       timer1.Enabled :=false;       timer1.Enabled :=false;   end; end;

procedure TForm1.Timer1Timer(Sender: TObject); begin     if checkbox1.State = cbchecked then     begin          timer1.Enabled :=false;          BitBtn8.Click;          sleep(StrToInt(RichEdit8.Lines[0]));          timer1.Enabled :=true;     end; end;

procedure TForm1.BitBtn12Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $04;     sendd[4] := $00;     sendd[5] := Combobox7.ItemIndex+1 ;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=23;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn14Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    newjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

  if(not isrightint(RichEdit7.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit7.SetFocus();             RichEdit7.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);     newjh:=StrToInt(RichEdit7.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $02;     sendd[4] := $00;     sendd[5] := newjh;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=22;   //更改在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn15Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $00;     sendd[4] := $00;     sendd[5] := $02;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=25;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    if listbox1.Count>10 then listbox1.Clear ;     ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.RichEdit8Chang(Sender: TObject); begin    if  StrToInt(RichEdit8.Lines[0])<50 then    begin         RichEdit8.Text :='50';         Application.MessageBox('    轮询一台机的间隔时间不要小于50MS!如果同时轮询多台机可缩短间隔时间。', '警告', MB_OK+MB_ICONSTOP);    end;    if  StrToInt(RichEdit13.Lines[0])>=StrToInt(RichEdit8.Lines[0]) then    begin           if StrToInt(RichEdit13.Lines[0])+10>50 then           begin               RichEdit8.Text :=inttostr(StrToInt(RichEdit13.Lines[0])+10);           end           else           begin               RichEdit8.Text :='50';           end;           Application.MessageBox('    轮询间隔时间不能小于通讯超时时间。', '警告', MB_OK+MB_ICONSTOP);    end; end;

procedure TForm1.RichEdit13Change(Sender: TObject); begin    if  StrToInt(RichEdit13.Lines[0])<10 then    begin         RichEdit13.Text :='10';         Application.MessageBox('    通讯超时时间不要小于10毫秒。', '警告', MB_OK+MB_ICONSTOP);    end;    if  StrToInt(RichEdit13.Lines[0])>=StrToInt(RichEdit8.Lines[0]) then    begin           if StrToInt(RichEdit13.Lines[0])+10>50 then           begin               RichEdit8.Text :=inttostr(StrToInt(RichEdit13.Lines[0])+10);           end           else           begin               RichEdit8.Text :='50';           end;           Application.MessageBox('    轮询间隔时间不能小于通讯超时时间。', '警告', MB_OK+MB_ICONSTOP);    end;    comm1.ReadIntervalTimeout:= StrToInt(RichEdit13.Lines[0]); end;

procedure TForm1.BitBtn5Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $02;     sendd[4] := $00;     sendd[5] := Combobox4.ItemIndex+1 ;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=3;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn6Click(Sender: TObject); var    sendd:array[0..12]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    BTL:longint;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);     BTL:=StrToInt(Combobox5.Text);

    sendd[0] := oldjh;     sendd[1] := $10;     sendd[2] := $00;     sendd[3] := $3C;     sendd[4] := $00;     sendd[5] := $02;     sendd[6] := $04;     sendd[7] := (BTL div 256) mod 256;     sendd[8] := BTL mod 256;     sendd[9] := $55;     sendd[10] := $AA;

    CRC16 := CRC_16(@sendd,11);

    sendd[11] := CRC16 mod 256;;     sendd[12] := (CRC16 div 256) mod 256;

    FuncCode:=4;   //更改在线站号波特率     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 13);

    SendDataStr:='串口发送数据:';     for i:=0 to 12 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn17Click(Sender: TObject); var    sendd:array[0..12]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $10;     sendd[2] := $00;     sendd[3] := $3E;     sendd[4] := $00;     sendd[5] := $02;     sendd[6] := $04;     sendd[7] := $00;     sendd[8] := Combobox6.ItemIndex ;     sendd[9] := $55;     sendd[10] := $AA;

    CRC16 := CRC_16(@sendd,11);

    sendd[11] := CRC16 mod 256;;     sendd[12] := (CRC16 div 256) mod 256;

    FuncCode:=5;   //更改在线站号校验位     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 13);

    SendDataStr:='串口发送数据:';     for i:=0 to 12 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn9Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    BegEE:integer;    EENum:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);     BegEE:=StrToInt(RichEdit5.Lines[0]);     EENum:=StrToInt(RichEdit6.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := BegEE;     sendd[4] := $00;     sendd[5] := EENum;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=7;   //驱动在线站号读卡     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    if listbox1.Count>10 then listbox1.Clear ;     ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn10Click(Sender: TObject); var    sendd:array[0..100]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    EENum:integer;    CRC16:longint;    wstr:string;    rwstr:string;    wlen:integer; begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);     EENum:=StrToInt(RichEdit6.Lines[0]);     wlen:=EENum*2;      //每个寄存器为2个字节

    wstr:=trim(RichEdit3.Lines[0]);     wstr:=wstr+' '+trim(RichEdit3.Lines[1]);     if (length(wstr)>0) then wstr:=wstr+' '    ;     for i:=1 to  wlen do     begin         wstr:=wstr+'00 ';     end;

    sendd[0] := oldjh;     sendd[1] := $10;     sendd[2] := $00;     sendd[3] := $0A;      //写卡信息的起始寄存器     sendd[4] := $00;     sendd[5] := EENum;    //操作寄存器的个数     sendd[6] := wlen;     //每个寄存器为2个字节

    rwstr:='';     for i:=1 to wlen do     begin        sendd[6+i]:=strtoint('$'+midstr(wstr,i*3-2,2));        rwstr:=rwstr+midstr(wstr,i*3-2,2)+' ';     end;     RichEdit3.Text := rwstr;

    CRC16 := CRC_16(@sendd,wlen+7);

    sendd[wlen+7] := CRC16 mod 256;;     sendd[wlen+8] := (CRC16 div 256) mod 256;

    FuncCode:=8;   //更新在线站卡的卡数据寄存器     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], wlen+9);

    SendDataStr:='串口发送数据:';     for i:=0 to wlen+8 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn11Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string; begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;

    sendd[0] := $00;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $02;     sendd[4] := $00;     sendd[5] := $01;     sendd[6] := $24;     sendd[7] := $1B;

    FuncCode:=21;   //读取在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn13Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    part:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint;    hexpart:string; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $03;     sendd[4] := $80;

    part:= Combobox8.ItemIndex ;     part:=part+2*Combobox13.ItemIndex ;

    hexpart:=inttohex(part,1);     hexpart:='$'+inttohex(Combobox14.ItemIndex,1)+hexpart;

    sendd[5] := strtoint(hexpart) ;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=26;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn16Click(Sender: TObject); var    sendd:array[0..12]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $10;     sendd[2] := $00;     sendd[3] := $00;     sendd[4] := $00;     sendd[5] := $02;     sendd[6] := $04;     sendd[7] := $00;     sendd[8] := $00;     sendd[9] := $00;     sendd[10] := $00;

    CRC16 := CRC_16(@sendd,11);

    sendd[11] := CRC16 mod 256;;     sendd[12] := (CRC16 div 256) mod 256;

    FuncCode:=24;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 13);

    SendDataStr:='串口发送数据:';     for i:=0 to 12 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.CheckBox2MouseDown(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer); begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再进行读取在线站号的操作!', '警告', MB_OK+MB_ICONSTOP);        //MB_ICONQUESTION  MB_ICONEXCLAMATION  MB_ICONWARNING  MB_ICONINFORMATION  MB_ICONASTERISK  MB_ICONHAND  MB_ICONERROR  MB_ICONSTOP     Exit;   end;

  if (strtoint(RichEdit4.Lines[0])=0) then   begin             Application.MessageBox('轮询的站点号不可以为0,请先指定轮询站号!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

  if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;   if(not isrightint(RichEdit9.Lines[0])) then   begin             Application.MessageBox('间隔时间输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit9.SetFocus();             RichEdit9.SelectAll();             exit;   end;

  if checkbox2.State = cbUnchecked then   begin       timer2.Interval := StrToInt(RichEdit9.Lines[0]);       timer2.Enabled :=true;   end   else   begin       timer2.Enabled :=false;       timer2.Enabled :=false;       timer2.Enabled :=false;   end; end;

procedure TForm1.Timer2Timer(Sender: TObject); begin     if checkbox2.State = cbchecked then     begin          timer2.Enabled :=false;          BitBtn15.Click;          timer2.Enabled :=true;     end; end;

procedure TForm1.BitBtn18Click(Sender: TObject); var    sendd:array[0..12]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    BTL:longint;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);     BTL:=StrToInt(Combobox9.Text);

    sendd[0] := oldjh;     sendd[1] := $10;     sendd[2] := $00;     sendd[3] := $3C;     sendd[4] := $00;     sendd[5] := $02;     sendd[6] := $04;     sendd[7] := (BTL div 256) mod 256;     sendd[8] := BTL mod 256;     sendd[9] := $55;     sendd[10] := $AA;

    CRC16 := CRC_16(@sendd,11);

    sendd[11] := CRC16 mod 256;;     sendd[12] := (CRC16 div 256) mod 256;

    FuncCode:=4;   //更改在线站号波特率     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 13);

    SendDataStr:='串口发送数据:';     for i:=0 to 12 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn19Click(Sender: TObject); var    sendd:array[0..12]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $10;     sendd[2] := $00;     sendd[3] := $3E;     sendd[4] := $00;     sendd[5] := $02;     sendd[6] := $04;     sendd[7] := $00;     sendd[8] := Combobox10.ItemIndex ;     sendd[9] := $55;     sendd[10] := $AA;

    CRC16 := CRC_16(@sendd,11);

    sendd[11] := CRC16 mod 256;;     sendd[12] := (CRC16 div 256) mod 256;

    FuncCode:=5;   //更改在线站号校验位     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 13);

    SendDataStr:='串口发送数据:';     for i:=0 to 12 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn20Click(Sender: TObject); begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再继续操作!', '警告', MB_OK+MB_ICONSTOP);     Exit;   end;   BitBtn20.Caption :='正在测试串口波特率及校验位';   btlp:=0;   jlmp:=-1;   revn:=false;   timer3.Enabled :=true; end;

procedure TForm1.Timer3Timer(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    btlstr:string; begin   if (revn=true) or (btlp>5)  then   begin       Timer3.Enabled :=false;       BitBtn20.Caption :='检测在线读写器的波特率及校验位';       Application.MessageBox('  未能检测到在线设备,请查询线路是否正常连接及设备型号是否正确!', '提示', MB_OK+MB_ICONSTOP);       Exit;   end;

  Comm1.StopComm; //关闭串口   Comm1.CommName:='\\.\'+ComboBox1.Text;   combobox2.ItemIndex:=btlp;   Comm1.BaudRate:=strtoint(ComboBox2.text);   btlstr:='   串口波特率:'+ComboBox2.text;   Comm1.ByteSize:=_8;   Comm1.ParityCheck:=False;   Comm1.StopBits:=_1;   Comm1.XoffChar:='#';   jlmp:=jlmp+1;   if jlmp<5 then   begin     combobox3.ItemIndex:=jlmp;     case combobox3.ItemIndex of                   0:                     begin                          Comm1.Parity:=None;                          btlstr:=btlstr+',校验位:None'                     end;                   1:                     begin                          Comm1.Parity:=Odd;                          btlstr:=btlstr+',校验位:Odd '                     end;                   2:                     begin                          Comm1.Parity:=Even;                          btlstr:=btlstr+',校验位:Even'                     end;                   3:                     begin                          Comm1.Parity:=Mark;                          btlstr:=btlstr+',校验位:Mark'                     end;                   4:                     begin                          Comm1.Parity:=Space;                          btlstr:=btlstr+',校验位:Space'                     end;     end;     Comm1.StartComm; //打开串口     sleep(2);

    sendd[0] := $00;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $00;     sendd[4] := $00;     sendd[5] := $01;     sendd[6] := $85;     sendd[7] := $DB;

    FuncCode:=31;   //读取在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    SendDataStr:=SendDataStr+btlstr ;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

  end   else   begin        jlmp:=-1;        btlp:=btlp+1;   end; end;

procedure TForm1.BitBtn21Click(Sender: TObject); begin   if(BitBtn1.Caption <> '关闭串口') then   begin     Application.MessageBox('请先打开串口再继续操作!', '警告', MB_OK+MB_ICONSTOP);     Exit;   end;   BitBtn21.Caption :='正在测试串口波特率及校验位';   btlp:=0;   jlmp:=-1;   revn:=false;   timer4.Enabled :=true; end; { procedure TForm1.Timer3Timer(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    btlstr:string; begin   if (revn=true) or (btlp>5)  then   begin       Timer3.Enabled :=false;       BitBtn20.Caption :='检测在线读写器的波特率及校验位';       Application.MessageBox('  未能检测到在线设备,请查询线路是否正常连接及设备型号是否正确!', '提示', MB_OK+MB_ICONSTOP);       Exit;   end;

  Comm1.StopComm; //关闭串口   Comm1.CommName:='\\.\'+ComboBox1.Text;   combobox2.ItemIndex:=btlp;   Comm1.BaudRate:=strtoint(ComboBox2.text);   btlstr:='   串口波特率:'+ComboBox2.text;   Comm1.ByteSize:=_8;   Comm1.ParityCheck:=False;   Comm1.StopBits:=_1;   Comm1.XoffChar:='#';   jlmp:=jlmp+1;   if jlmp<5 then   begin     combobox3.ItemIndex:=jlmp;     case combobox3.ItemIndex of                   0:                     begin                          Comm1.Parity:=None;                          btlstr:=btlstr+',校验位:None'                     end;                   1:                     begin                          Comm1.Parity:=Odd;                          btlstr:=btlstr+',校验位:Odd '                     end;                   2:                     begin                          Comm1.Parity:=Even;                          btlstr:=btlstr+',校验位:Even'                     end;                   3:                     begin                          Comm1.Parity:=Mark;                          btlstr:=btlstr+',校验位:Mark'                     end;                   4:                     begin                          Comm1.Parity:=Space;                          btlstr:=btlstr+',校验位:Space'                     end;     end;     Comm1.StartComm; //打开串口     sleep(2);

    sendd[0] := $00;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $00;     sendd[4] := $00;     sendd[5] := $01;     sendd[6] := $85;     sendd[7] := $DB;

    FuncCode:=31;   //读取在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    SendDataStr:=SendDataStr+btlstr ;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

  end   else   begin        jlmp:=-1;        btlp:=btlp+1;   end; end;  }

procedure TForm1.Timer4Timer(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    btlstr:string; begin   if (revn=true) or (btlp>5)  then   begin       Timer4.Enabled :=false;       BitBtn21.Caption :='检测在线读卡器的波特率及校验位';       Application.MessageBox('  未能检测到在线设备,请查询线路是否正常连接及设备型号是否正确!', '提示', MB_OK+MB_ICONSTOP);       Exit;   end;

  Comm1.StopComm; //关闭串口   Comm1.CommName:='\\.\'+ComboBox1.Text;   combobox2.ItemIndex:=btlp;   Comm1.BaudRate:=strtoint(ComboBox2.text);   btlstr:='   串口波特率:'+ComboBox2.text;   Comm1.ByteSize:=_8;   Comm1.ParityCheck:=False;   Comm1.StopBits:=_1;   Comm1.XoffChar:='#';   jlmp:=jlmp+1;   if jlmp<5 then   begin     combobox3.ItemIndex:=jlmp;     case combobox3.ItemIndex of                   0:                     begin                          Comm1.Parity:=None;                          btlstr:=btlstr+',校验位:None'                     end;                   1:                     begin                          Comm1.Parity:=Odd;                          btlstr:=btlstr+',校验位:Odd '                     end;                   2:                     begin                          Comm1.Parity:=Even;                          btlstr:=btlstr+',校验位:Even'                     end;                   3:                     begin                          Comm1.Parity:=Mark;                          btlstr:=btlstr+',校验位:Mark'                     end;                   4:                     begin                          Comm1.Parity:=Space;                          btlstr:=btlstr+',校验位:Space'                     end;     end;     Comm1.StartComm; //打开串口     sleep(2);

    sendd[0] := $00;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $02;     sendd[4] := $00;     sendd[5] := $01;     sendd[6] := $24;     sendd[7] := $1B;

    FuncCode:=32;   //读取在线站号     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    SendDataStr:=SendDataStr+btlstr ;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

  end   else   begin        jlmp:=-1;        btlp:=btlp+1;   end; end;

procedure TForm1.BitBtn22Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint;    delaytime:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);     delaytime:=StrToInt(RichEdit10.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $46;     sendd[4] :=  (delaytime div 256) mod 256;     sendd[5] := delaytime mod 256;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=3;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn23Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint;    delaytime:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);     delaytime:=StrToInt(RichEdit10.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $46;     sendd[4] := $00;     sendd[5] := $00;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=3;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn24Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit1.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $01;     if checkbox4.checked=true then     begin         sendd[4] := $80;         sendd[5] := Combobox11.ItemIndex+2*Combobox12.ItemIndex;     end     else     begin         sendd[4] := $00;         sendd[5] := Combobox11.ItemIndex+2*Combobox12.ItemIndex;   //$00;     end;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=3;   //驱动在线站号发声     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.BitBtn25Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint;    delaytime:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);     delaytime:=StrToInt(RichEdit11.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $46+Combobox15.ItemIndex;

    sendd[4] :=  (delaytime div 256) mod 256;     sendd[5] := delaytime mod 256;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=46;        issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.BitBtn26Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint;    delaytime:longint; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit1.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit1.SetFocus();             RichEdit1.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);     delaytime:=StrToInt(RichEdit11.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $06;     sendd[2] := $00;     sendd[3] := $46;

    sendd[4] := $00;     sendd[5] := $00;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=46;        issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1;

end;

procedure TForm1.Button1Click(Sender: TObject); var    sendd:array[0..7]of Byte;   //发送字节缓冲    i:integer;    part:integer;    SendDataStr:string;    oldjh:integer;    CRC16:longint;    hexpart:string; begin   if(BitBtn1.Caption <> '关闭串口') then   begin        Application.MessageBox('请先打开串口再进行修改在线设备站号的操作!', '警告', MB_OK+MB_ICONSTOP);        Exit;   end;   if(not isrightint(RichEdit4.Lines[0])) then   begin             Application.MessageBox('设备号输入框中有非法字符!', '警告', MB_OK+MB_ICONSTOP);             RichEdit4.SetFocus();             RichEdit4.SelectAll();             exit;   end;

    oldjh:=StrToInt(RichEdit4.Lines[0]);

    sendd[0] := oldjh;     sendd[1] := $03;     sendd[2] := $00;     sendd[3] := $03;     sendd[4] := $00;     sendd[5] := $01;

    CRC16 := CRC_16(@sendd,6);

    sendd[6] := CRC16 mod 256;;     sendd[7] := (CRC16 div 256) mod 256;

    FuncCode:=30;   //读设备参数     issendwaitrev1 := True;     sendwaitrevsize := 0;

    Comm1.WriteCommData(@sendd[0], 8);

    SendDataStr:='串口发送数据:';     for i:=0 to 7 do     begin          SendDataStr:=SendDataStr+inttohex(sendd[i],2)+' ';     end;

    ListBox1.Items.Add(SendDataStr);     listbox1.ItemIndex:=listbox1.Count-1; end;

procedure TForm1.FormCreate(Sender: TObject); begin

end;

end.

标签: 继电器3e4

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台