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

📄 u_rs485.pas

📁 此系统完成了485抄表
💻 PAS
📖 第 1 页 / 共 2 页
字号:
         send_a:='FEFEFE68'+tzstrx(edit1.Text)+'68'+'0102'+tzstrx(edit2.Text);
       end;
       if (radiobutton5.Checked=true) then
       begin
         send_a:='534E4414FFFFFFFFFFFF09AF'+tzstrx(edit1.Text)+'0105'+tzstrx(edit2.Text)+'BBBBBB';
       end;
     end;
     if radiobutton2.Checked=true then
     begin
       bc_pass:='00'+tzstrx(edit3.Text);
       ml_len:=inttohex(((length(edit6.Text) div 2) + 6),2);
       if (radiobutton3.Checked=true) or (radiobutton4.Checked=true) then
       begin
         send_a:='68'+tzstrx(edit1.Text)+'68'+'04'+ml_len+tzstrx(edit2.Text)+bc_pass+tzstrx(edit6.Text);
       end;
       if (radiobutton5.Checked=true) then
       begin
          AA1:='534E44';
          AA2:='FFFFFFFFFFFF09AF'+TZSTRX(edit1.Text)+'04' ;
          AA3:=TZSTRX(TRIM(edit2.Text))+'BBBBBB';
          AA4:=(trim(bc_pass))+TZSTRX(TRIM(edit6.Text));
          AA5:=TZSTRX(edit1.Text)+'04';
          AACD1:=INTTOhex((LENGTH(AA2+AA3+AA4) DIV 2+3),2);
          AACD2:=INTTOhex((LENGTH(AA3+AA4) DIV 2),2);
          send_a:=AA1+AACD1+AA2+AACD2+AA3+AA4;
       end;
     end;
   end
   else
   begin
     send_a:=edit6.Text;
   end;
   send_str:=trim(send_a);
   if (radiobutton3.Checked=true) or (radiobutton4.Checked=true) then
     str:=send_jy(send_str)
   else
     str:=xc_send_jy(send_str);
   memo1.Lines.Add(str);
   str:=hex_str(str);
   comm1.RTSEnabled:=false;
   for i :=1  to length(str) do
   begin
     sleep(10);
     comm1.OutputString(str[i]);
   end;
   sleep(strtoint(edit4.Text));
   comm1.RTSEnabled:=true;
   for i :=0  to 100 do
   begin
     sleep(strtoint(edit4.Text));
     if (radiobutton3.Checked=true) or (radiobutton4.Checked=true) then
     begin
       comm1.InputLen:=1;
       fh_str:=comm1.Input;
       if fh_str='68' then
         break
       else if i=100 then
       begin
         showmessage('no 68');
         exit;
       end;
     end
     else
     begin
       comm1.InputLen:=2;
       fh_str:=comm1.Input;
       if fh_str='4441' then
         break
       else if i=100 then
       begin
         showmessage('no 68');
         exit;
       end;
     end;
   end;
   if (radiobutton3.Checked=true) or (radiobutton4.Checked=true) then
   begin
     ss:=fh_str;
     memo1.Lines.Add(ss);
     sleep(strtoint(edit5.Text));
     comm1.InputLen:=9;
     fh_str:=comm1.Input;
     ss:=ss+fh_str;
     kzm:=copy(fh_str,15,2);
     kzm:=copy(kzm,1,1);
     memo1.Lines.Add(kzm);
     if kzm='C' then
     begin
       showmessage('其它错误');
       exit;
     end;
     fh_len:=copy(fh_str,17,2);
     sj_len:=h_dec(fh_len);
     data_len:=strtoint(sj_len);
     sleep(strtoint(edit5.Text));
     comm1.InputLen:=data_len+2;
     fh_str:=comm1.Input;
     ss:=ss+fh_str;
     memo1.Lines.Add(ss);
     js_jy:=revc_jy(ss);
     memo1.Lines.Add(js_jy);
     fh_jy:=copy(rightstr(ss,4),1,2);
     memo1.Lines.Add(fh_jy);
     fh_16:=copy(rightstr(ss,4),3,2);
     memo1.Lines.Add(fh_16);
     if fh_jy<>js_jy then
     begin
       showmessage('检验错误');
       exit;
     end;
     if fh_16<>'16' then
     begin
       showmessage('无结尾符');
       exit;
     end;
     fh_data:=copy(ss,21,length(ss)-24);
     memo1.lines.add(fh_data);
     fh_data:=data_del_33(fh_data);
     memo1.Lines.Add(fh_data);
   end
   else
   begin
     ss:=fh_str;
     memo1.Lines.Add(ss);
     //exit;
     sleep(strtoint(edit5.Text));
     comm1.InputLen:=9;
     fh_str:=comm1.Input;
     ss:=ss+fh_str;
     ss1:=copy(fh_str,9,10);
     kzm:=copy(fh_str,15,2);
     kzm:=copy(kzm,1,1);
     memo1.Lines.Add(kzm);
     if kzm='C' then
     begin
       showmessage('其它错误');
       exit;
     end;
     fh_len:=copy(fh_str,17,2);
     sj_len:=h_dec(fh_len);
     data_len:=strtoint(sj_len);
     sleep(strtoint(edit5.Text));
     comm1.InputLen:=data_len+2;
     fh_str:=comm1.Input;
     ss:=ss+fh_str;
     ss1:=ss1+fh_str;
     memo1.Lines.Add(ss);
     memo1.Lines.Add(ss1);
     js_jy:=revc_jy(ss1);
     memo1.Lines.Add(js_jy);
     fh_jy:=copy(rightstr(ss,4),1,2);
     memo1.Lines.Add(fh_jy);
     fh_16:=copy(rightstr(ss,4),3,2);
     memo1.Lines.Add(fh_16);
     if fh_jy<>js_jy then
       showmessage('检验错误');
     //if fh_16<>'05' then
       //showmessage('无结尾符');
     fh_data:=copy(ss,23,length(ss)-26);
     memo1.lines.add(fh_data);
     //fh_data:=data_del_33(fh_data);
     //memo1.Lines.Add(fh_data);
   end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  comm1.CommPort:=com;
  comm1.BaudRate:=baud;
  comm1.DataBits:=db8;
  comm1.StopBits:=sb1;
  comm1.Parity:=party;
  comm1.PortOpen:=true;
  comm1.DTREnabled:=true;
  comm1.RTSEnabled:=true;
  comm1.DataCount:=0;
  comm1.RThreshold:=1;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  comm1.PortOpen:=false;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  fh_int:integer;
  fp:textfile;
  buffer,send_str:string;
  send_a,aa1,aa2,aa3,aa4,aa5,aacd1,aacd2,bc_pass,ml_len,ss1:string;
begin
  if edit1.Text='' then
   begin
     showmessage('请输入通讯表号');
     edit1.SetFocus;
     exit;
   end;
   if edit2.Text='' then
   begin
     showmessage('请输入通讯命令');
     edit2.SetFocus;
     exit;
   end;
   if radiobutton2.Checked=true then
   begin
     if edit3.Text='' then
     begin
       showmessage('请输入密码');
       edit3.SetFocus;
       //exit;
     end;
     if edit6.Text='' then
     begin
       showmessage('请输入编程数据');
       edit6.SetFocus;
       //exit;
     end;
   end;
   if radiobutton1.Checked=true then
   begin
     if (radiobutton3.Checked=true) or (radiobutton4.Checked=true) then
     begin
       send_a:='68'+tzstrx(edit1.Text)+'68'+'0102'+tzstrx(edit2.Text);
     end;
     if (radiobutton5.Checked=true) then
     begin
       send_a:='534E4414FFFFFFFFFFFF09AF'+tzstrx(edit1.Text)+'0105'+tzstrx(edit2.Text)+'BBBBBB';
     end;
   end;
   if radiobutton2.Checked=true then
   begin
     bc_pass:='00'+tzstrx(edit3.Text);
     ml_len:=inttohex(((length(edit6.Text) div 2) + 6),2);
     if (radiobutton3.Checked=true) or (radiobutton4.Checked=true) then
     begin
         send_a:='68'+tzstrx(edit1.Text)+'68'+'04'+ml_len+tzstrx(edit2.Text)+bc_pass+tzstrx(edit6.Text);
     end;
     if (radiobutton5.Checked=true) then
     begin
        AA1:='534E44';
        AA2:='FFFFFFFFFFFF09AF'+TZSTRX(edit1.Text)+'04' ;
        AA3:=TZSTRX(TRIM(edit2.Text))+'BBBBBB';
        AA4:=(trim(bc_pass))+TZSTRX(TRIM(edit6.Text));
        AA5:=TZSTRX(edit1.Text)+'04';
        AACD1:=INTTOhex((LENGTH(AA2+AA3+AA4) DIV 2+3),2);
        AACD2:=INTTOhex((LENGTH(AA3+AA4) DIV 2),2);
        send_a:=AA1+AACD1+AA2+AACD2+AA3+AA4;
     end;
   end;
  send_str:=trim(send_a);
  if (radiobutton3.Checked=true)  then
     fh_int:=NgOUT(send_str,strtoint(edit4.Text),strtoint(edit5.Text));
  if (radiobutton4.Checked=true)  then
     fh_int:=EasOUT(send_str,0,strtoint(edit4.Text),strtoint(edit5.Text));
  if (radiobutton5.Checked=true)  then
     fh_int:=XcOUT(send_str,strtoint(edit4.Text),strtoint(edit5.Text));
  memo1.Lines.Add(send_str);
  if fh_int=-4 then
  begin
    showmessage('其它错误');
    exit;
  end;
  if fh_int=-3 then
  begin
    showmessage('无报头');
    exit;
  end;
  if fh_int=-2 then
  begin
    showmessage('校验错误');
    exit;
  end;
  if fh_int=-1 then
  begin
    showmessage('无16');
    exit;
  end;
  assignfile(fp,'revc.dat');
  reset(fp);
  readln(fp,buffer);
  closefile(fp);
  memo1.Lines.Add(buffer);
  showmessage('success');
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  fh:integer;
begin
  fh:=opencom(com,baud,party);
  if fh<>0 then
  begin
    showmessage('串口已经打开!');
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  closecom();
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  baud:=br1200;
  com:=pncom1;
  party:=Even;
  self.StatusBar1.Panels[3].Text:='Rs485';
  self.StatusBar1.Panels[1].Text:='COM1';
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
begin
  baud:=br1200;
  //com:=pncom1;
  party:=EVEN;
  self.StatusBar1.Panels[3].Text:='Rs485';
end;

procedure TForm1.RadioButton4Click(Sender: TObject);
begin
  baud:=br9600;
  //com:=pncom1;
  party:=EVEN;
  self.StatusBar1.Panels[3].Text:='东软载波';
end;

procedure TForm1.RadioButton5Click(Sender: TObject);
begin
  baud:=br2400;
  //com:=pncom1;
  party:=None;
  self.StatusBar1.Panels[3].Text:='小程载波';
end;

procedure TForm1.RadioButton6Click(Sender: TObject);
begin
  com:=pncom1;
  self.StatusBar1.Panels[1].Text:='COM1';
end;

procedure TForm1.RadioButton7Click(Sender: TObject);
begin
  com:=pncom4;
  self.StatusBar1.Panels[1].Text:='COM2';
end;

end.

⌨️ 快捷键说明

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