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

📄 project1.~dpr

📁 电力系统集中抄表 采集器 上位机软件 可以经行集中抄表
💻 ~DPR
📖 第 1 页 / 共 5 页
字号:
              str1 := str1 + Write_Buffer[i];
            Write_Buffer[8] := byte(str1 and $00FF);
            Write_Buffer[9] := byte((str1 shr 8) and $00FF);
            writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
            //加入处理数据
          end;
        end;
        ClearCommError(hcom, dwError, @cs);
        DelaySecond := 0; //有数据
      end;
      Delay(25);
      ClearCommError(hcom, dwError, @cs);
      DelaySecond := DelaySecond + 1; //25毫秒后无数据
      //receive.Lines.Add('DelaySecond' + inttostr(DelaySecond));
      if Break.Text = '1' then begin
        Break.Text := '0';
        receive.Lines.Add('通信被中断---通信结束');
        comcolorRed();
        RadioGroup1.Enabled := true;
        delete.Enabled := true;
        Button1.Enabled := true;
        ComboBox1.Enabled := true;
        exit;
      end;
    end;
    exit;
    RDdata: receive.Lines.Add('与集中器通信结束');
    //生成RD数据
   // AssignFile(ToF, 'c:\RD_' + S + '.dat'); //当日或指定日数据
    AssignFile(ToF, Filedir.Text + '\rd_dat\RD_' + S + '.dat'); //当日或指定日数据

    if datastring = '8E' then
      //   AssignFile(ToF, 'c:\RR_' + S + '.dat'); //当月数据
      AssignFile(ToF, Filedir.Text + '\rd_dat\RR_' + S + '.dat'); //当月数据


    Rewrite(ToF);
    LengthWrite_Buf := 266 * (page);

    for i := 0 to LengthWrite_Buf - 1 do
      Temp_buff[i] := Temp_buff[i + 1];

    //去头断尾
    for j := 1 to page do begin
      for i := 0 to 254 do
        RealTemp_buff[i + (j - 1) * 255] := Temp_buff[(j - 1) * 266 + 6 + i];
    end;
    //去头断尾
    LengthWrite_Buf := 255 * (page); //重新定义长度


    BlockWrite(ToF, RealTemp_buff, LengthWrite_Buf, LengthWrite_Buf);

    if datastring = '8F' then
      receive.Lines.Add('RD数据已经生成:' + Filedir.Text + '\rd_dat\RD_' + S + '.dat');

    if datastring = '8E' then
      receive.Lines.Add('RD数据已经生成:' + Filedir.Text + '\rd_dat\RR_' + S + '.dat');

    CloseFile(ToF);
    //生成RD数据
    jieshu: CloseHandle(hcom);
    comcolorRed();
    RadioGroup1.Enabled := true;
    delete.Enabled := true;
    Button1.Enabled := true;
    ComboBox1.Enabled := true;
    DBGrid1EnControl();
    DBGrid1EnControl();
    exit;
  except
  end;
end;

//6.8上装当月 6.9 上装当日6.13上装指定日 parse
function TForm1.Parse6869TempString(datastring: string): string;
var
  BiaoHao, Zong, Feng, Gu, ConStr, s, NowTime, Updatezong, Updatefeng, Updategu: string;
  i, updatenumber: integer;
  F1: TextFile;
begin
  //showmessage(copy(datastring,33,12));
  //DBGrid1EnControl();

  DBGrid2.SelectedRows.Count; //当前行号
  s := rightstr(DBGrid2.Fields[0].AsString, 4);
  datastring := copy(datastring, 21, length(datastring) - 20);
  AssignFile(F1, Filedir.Text + '\rd_txt\rd_' + s + '.txt');
  Rewrite(F1);
  for i := 1 to round(length(datastring) / 36) do begin
    BiaoHao := '';
    Zong := '';
    Feng := '';
    Gu := '';

    BiaoHao := copy(datastring, 1 + 36 * (i - 1), 12);
    BiaoHao := rightstr(BiaoHao, 9);

    Zong := Zong + copy(datastring, 13 + 36 * (i - 1), 6) + '.' + copy(datastring, 19 + 36 * (i - 1), 2);
    Feng := Feng + copy(datastring, 21 + 36 * (i - 1), 6) + '.' + copy(datastring, 27 + 36 * (i - 1), 2);
    Gu := Gu + copy(datastring, 29 + 36 * (i - 1), 6) + '.' + copy(datastring, 35 + 36 * (i - 1), 2);
    Zong := trim(Zong);

    //Zong :='111';// Zong + copy(datastring, 13 + 36 * (i - 1), 6) + '.' + copy(datastring, 19 + 36 * (i - 1), 2);
    //Feng :='22';// Feng + copy(datastring, 21 + 36 * (i - 1), 6) + '.' + copy(datastring, 27 + 36 * (i - 1), 2);
    //Gu := '3';//


    if BiaoHao <> 'FFFFFFFFF' then
      receive.Lines.Add('  电表局编号:' + BiaoHao + '  总:    ' + Zong + ' 峰:    ' + Feng + '  谷:    ' + Gu);
    //************************************
    DBGrid3.SetFocus;
    if DBGrid1.Columns.Count = 30 then
      ADOQuery3.Locate('bh', BiaoHao, []);
    if DBGrid1.Columns.Count = 23 then
      ADOQuery3.Locate('UP_BH', BiaoHao, []);
    //************************************


    Writeln(F1, '  电表局编号:' + BiaoHao + '  总:    ' + Zong + ' 峰:    ' + Feng + '  谷:    ' + Gu);
    if ExistDBF.Text = '1' then begin //存在
      if (Zong <> 'FFFFFF.FF') and (BiaoHao <> 'FFFFFFFFF') then //不是空值或错误
      {//填加到数据库中} begin



        NowTime := FormatDateTime('yyyy/mm/dd hh:mm:ss', now);
        updatenumber := updatenumber + 1;


        ADOQuery1.First;


        Delay(1);
        while not ADOQuery1.Eof do begin

          //********苏源系统*********
          if DBGrid1.Columns.Count = 30 then begin
            if (ADOQuery1.Fields[14].AsString = '4') and (ADOQuery1.Fields[1].AsString = BiaoHao) then begin
              ADOQuery1.Edit;
              ADOQuery1.Fields[3].AsString := Zong;
              ADOQuery1.Fields[7].AsString := NowTime;
              ADOQuery1.UpdateRecord;
            end;

            if (ADOQuery1.Fields[14].AsString = '1') and (ADOQuery1.Fields[1].AsString = BiaoHao) then begin
              ADOQuery1.Edit;
              ADOQuery1.Fields[3].AsString := Feng;
              ADOQuery1.Fields[7].AsString := NowTime;
              ADOQuery1.UpdateRecord;
            end;

            if (ADOQuery1.Fields[14].AsString = '3') and (ADOQuery1.Fields[1].AsString = BiaoHao) then begin
              ADOQuery1.Edit;
              ADOQuery1.Fields[3].AsString := Gu;
              ADOQuery1.Fields[7].AsString := NowTime;
              ADOQuery1.UpdateRecord;
            end;



          end;
          //********苏源系统*********


          //********寰宇系统*********
          if DBGrid1.Columns.Count = 23 then begin
            if (ADOQuery1.Fields[12].AsString = '2') and (ADOQuery1.Fields[0].AsString = rightstr(BiaoHao,7)) then begin
              ADOQuery1.Edit;
              ADOQuery1.Fields[1].AsString := Zong;
              ADOQuery1.Fields[5].AsString := NowTime;
              ADOQuery1.UpdateRecord;
            end;

            if (ADOQuery1.Fields[12].AsString = '4') and (ADOQuery1.Fields[0].AsString = rightstr(BiaoHao,7)) then begin
              ADOQuery1.Edit;
              ADOQuery1.Fields[1].AsString := Feng;
              ADOQuery1.Fields[5].AsString := NowTime;
              ADOQuery1.UpdateRecord;
            end;

            if (ADOQuery1.Fields[12].AsString = '5') and (ADOQuery1.Fields[0].AsString = rightstr(BiaoHao,7)) then begin
              ADOQuery1.Edit;
              ADOQuery1.Fields[1].AsString := Gu;
              ADOQuery1.Fields[5].AsString := NowTime;
              ADOQuery1.UpdateRecord;
            end;

          end;
          //********寰宇系统*********
          ADOQuery1.Next;
        end; //wwhile
      end; //exist
    end; //not FFFFF
  end; //for reclcy
  CloseFile(F1);
end;



//处理一块数据 下载抄表日 下载主流程 下载局编号
function TForm1.ParseDataOnlyOne(DataLen: integer): integer; //DataLen是传过来的收到每帧报文长度
var
  i, ff, ReceiveLen, j, page, ii, Temp_len, DelayNum, DelaySecond: integer;
  inbuff, Temp_buff: array[0..255 * 8] of byte;
  dwError: Dword;
  wait: Boolean;
  cs: Tcomstat;
  Bytesread: LongWord;
  TempString, ConStr, updatejzq: string;
label changejzq;
begin
  if (hcom = 0) then exit;
  ClearCommError(hcom, dwError, @cs);
  ReceiveLen := 0;
  j := 1;
  page := 0;
  DelaySecond := 1;
  for i := 1 to 255 * 8 do begin
    inbuff[i] := byte($00);
    Temp_buff[i] := byte($00);
  end;
  while DelaySecond < 64 * 5 do begin
    while cs.cbInQue > 0 do begin
      if ReadFile(hcom, inbuff, cs.cbInQue, Bytesread, nil) then begin
        {将inbuff加入Temp_buff}
        for Temp_len := 1 to cs.cbInQue do
          Temp_buff[ReceiveLen + Temp_len] := inbuff[Temp_len - 1];
        ReceiveLen := ReceiveLen + cs.cbInQue;
        {将inbuff加入Temp_buff}
        if ReceiveLen - (page + 1) * DataLen >= 0 then {//字节数够一个帧的长度}  begin
          TempString := '';
          for ii := 1 to DataLen do //  SizeOf(TComStat)
            TempString := TempString + Format('%2x', [Temp_buff[ii + page * DataLen]]);
          page := page + 1;
          //receive.Lines.Add(TempString);

          if trim(copy(TempString, 5, 2)) = trim(' 0') then begin
            receive.Lines.Add('设置成功' + Edit2.Text + '块');
            Result := 0;
            exit; //跳出此函数
          end;

          if (copy(TempString, 5, 2) = '8C') or (copy(TempString, 5, 2) = '8A') or (copy(TempString, 5, 2) = '86') then begin
            receive.Lines.Add('操作已顺利完成');

            Result := 0;
            if (copy(TempString, 5, 2) = '86') and (changejzqhao.Text = '1') then goto changejzq;
            exit; //跳出此函数
          end;

          //改集中器并刷新
          changejzq: if (copy(TempString, 5, 2) = '86') and (changejzqhao.Text = '1') then begin
            //receive.Lines.Add('操作已顺利完成');
            changejzqhao.Text := '0';

            updatejzq := 'Update jzq set Jzqhao=''' + Form4.MaskEdit1.Text + '''' + ' where Jzqhao=''' + dbgrid2select.Text + '''';
            ADOQuery2.SQL.Clear;
            ADOQuery2.SQL.Add(updatejzq);
            ADOQuery2.ExecSQL;

            //showmessage('下面开始执行select*');
            ADOQuery2.SQL.Clear;
            ADOQuery2.SQL.Add('select * from jzq');
            ADOQuery2.Open;
            DBGrid2.DataSource.DataSet := ADOQuery2;
            DbgridTitle('DBGrid2','');
            DBGrid2.Refresh;
            exit; //跳出此函数
            //把版本号加入数据库并加入日期
          end;
          //改集中器并刷新


          if (copy(TempString, 5, 2) = 'CC') or (copy(TempString, 5, 2) = 'C6') or (copy(TempString, 5, 2) = 'CA') then begin
            receive.Lines.Add('设置失败' + TempString);
            Result := 1;
            exit; //跳出此函数
          end
        end;

      end;
      ClearCommError(hcom, dwError, @cs);
      DelaySecond := 0; //有数据
    end;
    Delay(25);
    ClearCommError(hcom, dwError, @cs);
    DelaySecond := DelaySecond + 1; //25毫秒后无数据
    //   receive.Lines.Add('DelaySecond--->' + IntToStr(DelaySecond));
  end; {end if while DelaySecond<8}


end;



//DBgrid Title
procedure TForm1.DbgridTitle(DbgridNumber: string; BiaoMing: string);
var
  FieldStringSuYUan, FieldStringHuangYu: string;
begin
  FieldStringSuYUan := 'ZHH,BH,DZ,BYSS,DH,DXH,HM,CBSJ,CL,DJ,SYSS,YYH,JJDL,YCM,SSLBXM,NEWBH,CBZT,SCDL,SCYCM,TSXX,ZCWS,LD,YWBZ,CBFS,CBCS,QFXX,TDBZ,YHXYBZ,WH,CWSZ';
  FieldStringHuangYu := 'UP_BH,UP_SDB,UP_ZZ,DZ,DXH,CBSJ,HM,UP_ZBBZ,CL,DL,SDS,DJ,LX,DH,JJDL,YH,CBFS,CBCS,QFXX,TDBZ,YHXYBZ,WH,CWSZ';

  if DbgridNumber = 'DBGrid2' then begin
    DBGrid2.Columns[0].Title.caption := '集中器号';
    DBGrid2.Columns[1].Title.caption := '安装地址';
    DBGrid2.Columns[2].Title.caption := '版本号';
    DBGrid2.Columns[3].Title.caption := '版本时间';
  end;

  if (DbgridNumber = 'DBGrid1') and (DBGrid1.Columns.Count = 30) then begin
    //改变表显示顺序
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select ' + FieldStringSuYUan + ' from  ' + BiaoMing +' order by DH,DXH,SSLBXM');
    ADOQuery1.Active := true;
    ADOQuery1.Open;
    DBGrid1.DataSource.DataSet := ADOQuery1;
    //改变表显示顺序
    DBGrid1.Columns[0].Title.caption := '总户号';
    DBGrid1.Columns[1].Title.caption := '表号';
    DBGrid1.Columns[2].Title.caption := '地址';
    DBGrid1.Columns[2].Width :=120;

    DBGrid1.Columns[3].Title.caption := '本月示数';
    DBGrid1.Columns[3].Width :=60;

    DBGrid1.Columns[4].Title.caption := '段号';

    DBGrid1.Columns[5].Title.caption := '段序号';
    DBGrid1.Columns[5].Width :=40;

    DBGrid1.Columns[6].Title.caption := '户名';
    DBGrid1.Columns[6].Width :=40;

    DBGrid1.Columns[7].Title.caption := '抄表时间';
    DBGrid1.Columns[8].Title.caption := '乘率';
    DBGrid1.Columns[9].Title.caption := '电价值';
    DBGrid1.Columns[10].Title.caption := '上月示数';
    DBGrid1.Columns[11].Title.caption := '营业号';
    DBGrid1.Columns[12].Title.caption := '加减电量';
    DBGrid1.Columns[13].Title.caption := '异常码';
    DBGrid1.Columns[14].Title.caption := '示数类别项目';
    DBGrid1.Columns[15].Title.caption := '新表号';
    DBGrid1.Columns[16].Title.caption := '抄表状态';
    DBGrid1.Columns[17].Title.caption := '上次电量';
    DBGrid1.Columns[18].Title.caption := '上次异常码';
    DBGrid1.Columns[19].Title.caption := '提示信息';
    DBGrid1.Columns[20].Title.caption := '字车位数';
    DBGrid1.Columns[21].Title.caption := '零度';
    DBGrid1.Columns[22].Title.caption := '疑问标志';
    DBGrid1.Columns[23].Title.caption := '抄表方式';
    DBGrid1.Columns[24].Title.caption := '抄表次数';
    DBGrid1.Columns[25].Title.caption := '欠费信息';
    DBGrid1.Columns[26].Title.caption := '停电标志';
    DBGrid1.Columns[27].Title.caption := '用户信用标志';
    DBGrid1.Columns[28].Title.caption := '维护记录';
    DBGrid1.Columns[29].Title.caption := '电表错误时钟';
  //  DBGrid1.Refresh;
  end;

  //以下是寰宇系统
  if (DbgridNumber = 'DBGrid1') and (DBGrid1.Columns.Count = 23) then begin
    //改变表显示顺序
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select ' + FieldStringHuangYu + ' from ' + BiaoMing +' order by DH,dxh,lx');
    ADOQuery1.Active := true;
    ADOQuery1.Open;
    DBGrid1.DataSource.DataSet := ADOQuery1;
    //改变表显示顺序
    DBGrid1.Columns[0].Title.caption := '表号';
    DBGrid1.Columns[1].Title.caption := '本月示度';
    DBGrid1.Columns[2].Title.caption := '总户号';
    DBGrid1.Columns[3].Title.caption := '用电地址';
    DBGrid1.Columns[3].Width :=120;
    DBGrid1.Columns[4].Title.caption := '抄表本顺序号';
    DBGrid1.Columns[5].Title.caption := '抄表时间';
    DBGrid1.Columns[6].Title.caption := '用电户名';
    DBGrid1.Columns[7].Title.caption := '异常码';
    DBGrid1.Columns[8].Title.caption := '乘率';
    DBGrid1.Columns[9].Title.caption := '上次电量';
    DBGrid1.Columns[10].Title.caption := '上次示度';
    DBGrid1.Columns[11].Title.caption := '电价码';
    DBGrid1.Columns[12].Title.caption := '类型';
    DBGrid1.Columns[13].Title.caption := '抄表本段号';
    DBGrid1.Columns[14].Title.caption := '加减电量';
    DBGrid1.Columns[15].Title.caption := '营业号';
    DBGrid1.Columns[16].Title.caption := '抄表方式';
    DBGrid1.Columns[17].Title.caption := '抄表次数';
    DBGrid1.Columns[18].Title.caption := '欠费信息';
    DBGrid1.Columns[19].Title.caption := '停电标志';
    DBGrid1.Columns[20].Title.caption := '用户信用标志';
    DBGrid1.Columns[21].Title.caption := '维护记录';
    DBGrid1.Columns[22].Title.caption := '电表错误时钟';
  //  DBGrid1.Refresh;
  end;
end;
//

⌨️ 快捷键说明

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