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

📄 u_645_command.pas

📁 此系统完成了单向复费率电能表的抄表以及编程
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      if d_1 > d_2 then
      begin
        MyMsgBox(' 查询数据的"日期时间"范围设置有误!前小后大','系  统  错  误', 0);
        exit;
      end;

      sqlstr := 'select 表号,录入日期 from '+trim(edit1.Text)+'_bh'+' where 录入日期>= '''+d_1+''' and 录入日期<= '''+d_2+''' order by 录入日期' ;

    end;

    with datam.ADOQ3 do
    begin
      try
        close;
        sql.Clear;
        sql.Add(sqlstr);
        open;
        f_645.DBEdit2.DataField := '表号';
      except
        MyMsgBox(' 查询数据失败!','系  统  错  误', 0);
        exit;
      end;
    end;

end;

procedure TF_645.RzRadioButton6Click(Sender: TObject);
begin
  rzlabeL24.Caption:='表号录入'+#13+'起始时间';
  Rzmaskedit1.Visible := true;
  Rzmaskedit2.Visible := true;
  rzlabeL25.Visible := true;
  rzlabeL25.Caption:='表号录入'+#13+'终止时间';
  rzmaskedit1.Text:=formatdatetime('yyyy-mm-dd hh:nn:ss',now);
  rzmaskedit2.Text:=formatdatetime('yyyy-mm-dd hh:nn:ss',now);
  rzedit11.Visible := FALSE;

end;

procedure TF_645.RzRadioButton7Click(Sender: TObject);
begin
  rzlabeL24.Caption:='表'+#13+'号';
  Rzmaskedit1.Visible := false;
  Rzmaskedit2.Visible := false;
  rzlabeL25.Visible := false;
  rzedit11.Visible := true;
  rzedit11.Clear;
end;

procedure TF_645.RzLabel26MouseEnter(Sender: TObject);
begin
   Rzlabel26.Font.Style := [fsBold,fsItalic];
   Rzlabel26.Cursor := crHandPoint;
   Rzlabel26.Font.Color := clblue ;
end;

procedure TF_645.RzLabel26MouseLeave(Sender: TObject);
begin
   Rzlabel26.Font.Style := [fsBold];
   Rzlabel26.Cursor := crDefault;
   Rzlabel26.Font.Color := clNavy ;
end;

procedure TF_645.RzCheckBox1Click(Sender: TObject);
begin
   if Rzcheckbox1.Checked then
   begin
     Rzedit12.Enabled := true;
     Rzedit12.text := trim(DBedit2.Text);
   end
   else
   begin
     Rzedit12.Clear;
     Rzedit12.Enabled := false;
   end;
end;

procedure TF_645.DBEdit2Change(Sender: TObject);
begin
  if (RzRadioGroup1.Buttons[0].Checked ) and (Rzcheckbox1.Checked)then
    Rzedit12.Text := trim(dbedit2.text);
end;

procedure TF_645.RzBitBtn2Click(Sender: TObject);
var
  sqlstr:string;
begin
  sqlstr := 'delete from '+trim(edit1.Text)+'_bh'+' where 表号= '''+trim(dbedit2.Text)+'''  ' ;
  if MessageDlg('确认是要删除表号为"'+trim(dbedit2.Text)+'"的表吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    with datam.ADOQ1 do
    begin
      try
        close;
        sql.Clear;
        sql.Add(sqlstr);
        execsql;
        MyMsgBox(' 数据已被成功删除!','成  统  提  示', 1);
      except
        MyMsgBox(' 删除数据失败!','系  统  错  误', 0);
        exit;
      end;
    end;
    RzBitBtn1.Click;

  end;
end;

procedure TF_645.RzRadioButton1Click(Sender: TObject);
begin
  COPY_fs :='1';
  Rzcombobox8.ItemIndex := 3;
  party:=EVEN;
end;

procedure TF_645.RzRadioButton2Click(Sender: TObject);
begin
  COPY_fs :='2';
  Rzcombobox8.ItemIndex := 7;
  party:=EVEN;
end;

procedure TF_645.RzRadioButton3Click(Sender: TObject);
begin
  COPY_fs :='3';
  party:=None;
  Rzcombobox8.ItemIndex := 5;
end;

procedure TF_645.RzLabel26Click(Sender: TObject);
var
  i,j,m,k,fh_int,data_len:integer;      //j:命令数
  ml_str : array[1..100] of string;    //命令数组  指令集
  lrrq,cbrq,sql_str,d1,d2,bh,send,revc,message1,message2,message3:string;
  fp:textfile;       //文本  连接文件
  ymgs,k_flag:string;
  autosave:Boolean;    //布尔
begin
  memo1.Clear;                    //清空以前的显示数据
  rZPROGRESSBAR1.Percent := 0;     //进度条初始值为0
  with datam.ADOQ4 do                  //adoquery4
  begin
     sql_str :='delete from temp';     //删除temp中数据 ,再把temp赋值
     close;               //修改SQl语句前先关闭
     sql.Clear;           //清除旧的sql语句
     sql.Add(sql_str);
     execsql;         //execsql跟open功能一样,不过open只能对查询语句

     sql_str :='select * from temp order by 抄表日期 desc';     //查询抄表日期数据
     close;
     sql.Clear;
     sql.Add(sql_str);
     execsql;
     open;
     Rzdbgrid2.Update;          //上传
  end;

    //数据自动入库
  if Rzradiobutton9.Checked then      //若为真,就自动入库  若为假  就手工入库
     autosave := true
  else
     autosave := false;
  cbrq:=formatdatetime('yyyy-mm-dd hh:nn:ss',now);      //抄表日期  日期格式

  IF COPY_fs ='' then       //抄表方式
  begin
    MyMsgBox(' 请选择合适的"通讯方式"!','系  统  错  误', 0);
    exit;
  end;

  if trim(edit1.Text) = '' then
  begin
    MyMsgBox(' 请先选择合适的"表型号"!','系  统  错  误', 0);
    exit;
  end;

  if strtoint(edit2.Text) = 0 then
  begin
    MyMsgBox(' 请先为该"表型号"添加"抄表命令"参数"!','系  统  错  误', 0);
    exit;
  end;

  IF Rzradiobutton7.Checked  then        //若为真   单抄
    if trim(Rzedit11.Text) = '' then
    begin
      MyMsgBox(' 请添加"表号"!','系  统  错  误', 0);
      exit;
    end;

  if Rzchecklist1.ItemsChecked=0 then
  begin
     MyMsgBox('请选择抄表命令参数项!','系统提示',0);
     exit;
  end;

  j:=1;    //命令数
  i:=1;     //单命令合计数目
  while i<= command_sum  do
  begin
     if rzchecklist1.ItemChecked[i] then      //list中选中的指令
     begin
       ml_str[j]:=A_command[i];     //ml_str 命令数组,指令集
       inc(j);               //自增
     end;
     inc(i);
  end ;

  inc(i);
  while i<= rzchecklist1.Count-1 do        //list中指令总数
  begin
     if rzchecklist1.ItemChecked[i] then
     begin
       ml_str[j]:=A_command[i-1];
       inc(j);
     end;
    inc(i);
  end;

  try
    //集抄
    if Rzradiobutton6.Checked then
    begin
       d1:=rzmaskedit1.Text;
       d2:=rzmaskedit2.Text;
       sql_str :='select * from '+trim(edit1.Text)+'_bh where (录入日期>='+
                 ' '''+d1+''') and (录入日期<= '''+d2+''') order by 录入日期' ;

       with datam.ADOQ1 do
       begin
          close;
          sql.Clear;
          sql.Add(sql_str);
          open;
          First;
       end;
       if datam.ADOQ1.RecordCount <= 0 then
       begin
          MyMsgBox(' 未查询到该日期范围内的数据,请查看日期时间设置是否正确!',
            '系  统  错  误', 0);
          exit;
       end
       else
       begin
          k := datam.ADOQ1.recordcount;
          memo1.Lines.Add('共抄表【'+inttostr(k)+'】块');
          m := 0;
          while not datam.ADOQ1.Eof do
          begin
             m :=m+1;           //trim(cbrq);
             lrrq:=datam.ADOQ1.fieldbyname('录入日期').AsString;
             bh := trim(datam.ADOQ1.fieldbyname('表号').AsString);

             for i :=1  to j-1  do
             begin
                with datam.ADOQ5 do
                begin
                  sql_str :='select * from '+trim(edit1.Text)+' where 命令= ' +
                            ' '''+ml_str[i]+''' ';
                  close;
                  sql.Clear;
                  sql.Add(sql_str);
                  open;

                  ymgs := trim(fieldbyname('掩码').AsString);
                  data_len := strtoint(trim(fieldbyname('长度').AsString));
                  k_flag := trim(fieldbyname('块标志').AsString);
                   //打开端口
                  if com_flag = 1 then
                  begin
                      CloseCOM();
                      com_flag :=0;
                  end;

                  OpenCOM(com_NO,baud,party);
                  Rzstatuspane2.Caption := '【端口】已打开';
                  f_645.Update;
                  com_flag :=1;

                  memo1.Lines.Add('抄表时间='+cbrq);
                  if COPY_fs ='1'  then
                  begin
                    send:='68' + tzstrx(bh) + '68'+'0102' +tzstrx(ml_str[i]);
                    fh_int:=NgOUT(TRIM(send),20,50);
                  end
                  else if COPY_fs ='2' then
                  begin
                    send:='68' + tzstrx(bh) + '68'+'0102' +tzstrx(ml_str[i]);
                    fh_int:=EasOUT(TRIM(send),0,20,50);
                  end
                  else
                  begin
                    send:='534E4414FFFFFFFFFFFF09AF' + tzstrx(bh) + '0105' +tzstrx(ml_str[i])+'BBBBBB';
                    fh_int:=XcOUT(TRIM(send),20,50);
                  end;
                  memo1.Lines.Add('发送数据='+send);
                  case fh_int of
                     0:
                       begin
                          assignfile(fp,'revc.dat');
                          reset(fp);
                          readln(fp,revc);
                          closefile(fp);
                          memo1.Lines.Add('返回数据='+revc);
                          //处理数据
                          disposal_data(bh,revc,ymgs,data_len,k_flag,lrrq,cbrq,autosave);
                          rZPROGRESSBAR1.Percent := rZPROGRESSBAR1.Percent +i;

                          memo1.Lines.Add('抄表【'+bh+'】成功');
                          f_645.Update;
                       end;
                    -1: memo1.Lines.Add('抄表【'+bh+'】失败:无16');//MyMsgBox(' 无16!','系  统  错  误', 0);
                    -2: memo1.Lines.Add('抄表【'+bh+'】失败:校验错误');//MyMsgBox(' 校验错误!','系  统  错  误', 0);
                    -3: memo1.Lines.Add('抄表【'+bh+'】失败:无报头');//MyMsgBox(' 无报头!','系  统  错  误', 0);
                    -4: memo1.Lines.Add('抄表【'+bh+'】失败:其它错误');//MyMsgBox(' 其它错误!','系  统  错  误', 0);
                  end;
                  //关闭端口
                  if com_flag = 1 then
                  begin
                      CloseCOM();
                      com_flag :=0;
                      Rzstatuspane2.Caption := '【端口】已关闭';
                      f_645.Update;
                  end;

                end;  //withe
             end; //for
             datam.ADOQ1.Next;
             rZPROGRESSBAR1.Percent := m * 100 DIV k;
          end;  //while
       end; //if datam.ADOQ1.RecordCount <= 0 then
    end
    //单抄
    else
    begin
      if trim(Rzedit11.Text) ='' then
      begin
          MyMsgBox(' 请输入单抄表号!','系  统  错  误', 0);
          Rzedit11.SetFocus;             //输入焦点
          exit;
      end;
      bh := PadLStr(trim(Rzedit11.Text),12,'0');        //表号前面补零,自定义函数

      sql_str :='select * from '+trim(edit1.Text)+'_bh where 表号='''+bh+'''';
      //sql_str为    'select * from '  430_bh  where 表号='''+bh+'''';


      with datam.ADOQ1 do
      begin
          close;
          sql.Clear;
          sql.Add(sql_str);
          open;
      end;
      case datam.ADOQ1.RecordCount of
       0:
        begin
           MyMsgBox(' 未查询到该表号数据!请确认表号的正确性','系  统  错  误', 0);
           Rzedit11.SetFocus;
           exit;
         end;
       1:
         begin
           lrrq:=trim(datam.ADOQ1.fieldbyname('录入日期').asstring);  //变量  录入日期

           for i :=1  to j-1  do     //j为命令数
           begin
              with datam.ADOQ5 do
              begin
                sql_str :='select * from '+trim(edit1.Text)+' where 命令= ' +
                          ' '''+ml_str[i]+''' ';

                close;
                sql.Clear;
                sql.Add(sql_str);
                open;

                ymgs := trim(fieldbyname('掩码').AsString);
                data_len := strtoint(trim(fieldbyname('长度').AsString));
                k_flag := trim(fieldbyname('块标志').AsString);

                 //打开端口
                if com_flag = 1 then        //com_flag端口开关标志
                begin
                    closeCOM();
                    com_flag :=0;
                end;

                OpenCOM(com_NO,baud,party);
                Rzstatuspane2.Caption := '【端口】已打开';
                f_645.Update;
                com_flag :=1;
                
                memo1.Lines.Add('抄表时间='+cbrq);
                send:='68' + tzstrx(bh) + '68' + '0102'+tzstrx(ml_str[i]);    //指令集
                memo1.Lines.Add('发送数据='+send);
                fh_int:=NgOUT(TRIM(send),20,50);
                case fh_int of
                  0:
                   begin
                      assignfile(fp,'revc.dat');
                      reset(fp);
                      readln(fp,revc);
                      closefile(fp);
                      memo1.Lines.Add('返回数据='+revc);
                      memo1.Lines.Add('抄表【'+bh+'】成功');
                      //处理数据
                      disposal_data(bh,revc,ymgs,data_len,k_flag,lrrq,cbrq,autosave);
                      rZPROGRESSBAR1.Percent := I * 100 DIV (J-1);
                   end;
                  -1: memo1.Lines.Add('抄表【'+bh+'】失败:无16');//MyMsgBox(' 无16!','系  统  错  误', 0);
                  -2: memo1.Lines.Add('抄表【'+bh+'】失败:校验错误');//MyMsgBox(' 校验错误!','系  统  错  误', 0);
                  -3: memo1.Lines.Add('抄表【'+bh+'】失败:无报头');//MyMsgBox(' 无报头!','系  统  错  误', 0);
                  -4: memo1.Lines.Add('抄表【'+bh+'】失败:其它错误');//MyMsgBox(' 其它错误!','系  统  错  误', 0);
                end;
                //关闭端口
                if com_flag = 1 then
                begin
                    CloseCOM();
                    com_flag :=0;
                    Rzstatuspane2.Caption := '【端口】已关闭';
                    //rZPROGRESSBAR1.Percent := 0;
                    f_645.Update;
                end;
              end; //w

⌨️ 快捷键说明

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