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

📄 project1.~dpr

📁 电力系统集中抄表 采集器 上位机软件 可以经行集中抄表
💻 ~DPR
📖 第 1 页 / 共 5 页
字号:
    if (datastring = '6.1') then begin

      if length(trim(copy(TempString, 13, 2))) = 1 then
        JzpYear := '200' + trim(copy(TempString, 13, 2));

      if length(trim(copy(TempString, 13, 2))) = 2 then
        JzpYear := '20' + trim(copy(TempString, 13, 2));

      receive.Lines.Add('集中器时间:' + JzpYear + ' 年' + copy(TempString, 15, 2) + ' 月'
        + copy(TempString, 17, 2) + ' 日' + copy(TempString, 19, 2) + ' 时'
        + copy(TempString, 21, 2) + ' 分' + copy(TempString, 23, 2) + ' 秒');
    end;


    //以下是解析设置时间
    if (datastring = '6.2') then begin
      if copy(TempString, 5, 2) = '85' then begin
        NowTime := FormatDateTime('yyyy/mm/dd-hh:mm:ss', now);
        receive.Lines.Add('集中器时间设置为:  ' + NowTime);
      end;
      if copy(TempString, 5, 2) = 'C5' then begin
        receive.Lines.Add('集中器时间设置失败');
      end;
    end;
    //以上是解析设置时间

    //以下是解析版本号6.3
    if (datastring = '6.3') then begin
      Str := '';
      for i := 6 to 12 do
        Str := Str + char(byte(inbuff[i]));
      receive.Lines.Add('集中器版本:' + Str);
      //把版本号加入数据库并加入日期
      NowTime := FormatDateTime('yyyy/mm/dd hh:mm:ss', now);
      ADOQuery2.Edit;
      ADOQuery2.Fields[2].AsString := Str;
      ADOQuery2.Fields[3].AsString := NowTime;
      ADOQuery2.UpdateRecord;


      //把版本号加入数据库并加入日期

    end;
    //以上是解析版本号6.3

     //集中器清空6.11
    if (datastring = '6.11') and (copy(TempString, 5, 2) = '87') then begin
      receive.Lines.Add('集中器已经清空');
    end;

    //集中器复位6.14
    if (datastring = '6.14') and (copy(TempString, 5, 2) = '90') then begin
      receive.Lines.Add('集中器已经复位');
    end;


    if Break.Text = '1' then begin
      Break.Text := '0';
      receive.Lines.Add('通信被中断---通信结束');
      goto proend;
    end;


    CloseHandle(hcom);
    proend: comcolorRed();
    PopupMenu1.AutoPopup := true;
    exit;
  except
    ShowMessage('222');
  end;
end;

//以下是延时
procedure TForm1.Delay(dwMilliseconds: Longint);
var
  iStart, iStop: Dword;
begin
  iStart := GetTickCount; //获得以毫秒为单位的windows运行时间
  repeat

    iStop := GetTickCount;
    Application.ProcessMessages;
  until (iStop - iStart) >= dwMilliseconds;
  //showmessage(Format('%2d',[dwMilliseconds]));
end;
//以上是延时


//解析6.6 .67


//  6.1读时间
procedure TForm1.ReadTimeClick(Sender: TObject);
var
  WriteNumber, numRead, lw: LongWord;
  Write_Buffer, buf, AddBuffer, AddBuffer1: array[0..10] of byte;
  TemWrite_Buffer, str2, S: string;
  i, ff, DelaySecond: integer;
  str1: Word; //byte;
  NowDate: tdatetime;
  dwEvtMask, dwError: Dword;
  wait: Boolean;
  cs: Tcomstat;
begin


  if comminitialize() = '1' then exit;

  Write_Buffer[0] := byte($EA);
  Write_Buffer[1] := byte($EA);

  Write_Buffer[2] := byte($02);

  {S := ExtractFileName(filelistbox1.filename);
  Write_Buffer[3]:=HexToDec(Copy(S,3,4));        // byte($FA);
  Write_Buffer[4]:=HexToDec(Copy(S,1,2));//byte($01);  }


  DBGrid2.SelectedRows.Count; //当前行号
  S := DBGrid2.Fields[0].AsString;
  Write_Buffer[3] := HexToDec(copy(S, 3, 4));
  Write_Buffer[4] := HexToDec(copy(S, 1, 2));

  Write_Buffer[5] := byte($00);
  Write_Buffer[6] := byte($00);
  Write_Buffer[7] := byte($00); //$ 表示16进制
  str1 := 0; //必须先赋值
  for i := 0 to 7 do
    str1 := str1 + Write_Buffer[i];
  str2 := Format('%1x', [str1]);


  Write_Buffer[8] := byte(str1 and $00FF); // byte($FA);
  Write_Buffer[9] := byte((str1 shr 8) and $00FF); //byte($01);

  Write_Buffer[10] := byte($DD);

  //TemWrite_Buffer:=send.Text; //  '12345';
  if (hcom = 0) then exit;
  writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
  RadioGroup1.Enabled := false;
  delete.Enabled := false;
  Button1.Enabled := false;
  ComboBox1.Enabled := false;
  //PopupMenu1.AutoPopup := false;
  Receivedata('6.1');
  RadioGroup1.Enabled := true;
  delete.Enabled := true;
  Button1.Enabled := true;
  ComboBox1.Enabled := true;
  PopupMenu1.AutoPopup := true;

end;

procedure TForm1.dd21Click(Sender: TObject);
var
  WriteNumber, numRead: LongWord;
  Write_Buffer, buf, AddBuffer, AddBuffer1: array[0..16] of byte;
  TemWrite_Buffer, str2, StrMonth, Strday, Strhour, Strminute, Strsecond, NowTime, S: string;
  lw: LongWord;
  i, ff, InteMonth, Inteday, Intehour, Inteminute, Intesecond, DelaySecond: integer;
  str1: Word; //byte;
  NowDate: tdatetime;
  mytime: tdatetime;
  YearWord, MonthWord, DayWord, HourWord, MinuteWord, SecondWord: Word;
  SysTime: TsystemTime;
  dwEvtMask, dwError: Dword;
  wait: Boolean;
  cs: Tcomstat;
begin
  try
    if comminitialize() = '1' then exit;

    Write_Buffer[0] := byte($EA); //$ 表示16进制
    Write_Buffer[1] := byte($EA);
    Write_Buffer[2] := byte($05);

    DBGrid2.SelectedRows.Count; //当前行号
    S := DBGrid2.Fields[0].AsString;
    Write_Buffer[3] := HexToDec(copy(S, 3, 4));
    Write_Buffer[4] := HexToDec(copy(S, 1, 2));

    Write_Buffer[5] := byte($06);
    //以下是时间
    NowTime := FormatDateTime('yyyy/mm/dd-hh:mm:ss', now);
    Write_Buffer[6] := HexToDec(copy(NowTime, 3, 2)); //Year
    Write_Buffer[7] := HexToDec(copy(NowTime, 6, 2)); //月份
    Write_Buffer[8] := HexToDec(copy(NowTime, 9, 2)); //日期;
    Write_Buffer[9] := HexToDec(copy(NowTime, 12, 2)); //小时
    Write_Buffer[10] := HexToDec(copy(NowTime, 15, 2)); //分钟
    Write_Buffer[11] := HexToDec(copy(NowTime, 18, 2)); //是秒数
    //以上是时间
    str1 := 0; //必须先赋值
    for i := 0 to 11 do
      str1 := str1 + Write_Buffer[i];
    str2 := Format('%1x', [str1]);

    Write_Buffer[12] := byte($00);
    Write_Buffer[13] := byte($00);
    Write_Buffer[14] := byte(str1 and $00FF); //低字节
    Write_Buffer[15] := byte((str1 shr 8) and $00FF); //右移8位取高字节
    Write_Buffer[16] := byte($DD);


    if (hcom = 0) then exit;
    writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
    RadioGroup1.Enabled := false;
    delete.Enabled := false;
    Button1.Enabled := false;
    ComboBox1.Enabled := false;
    //PopupMenu1.AutoPopup := false;
    Receivedata('6.2');
    RadioGroup1.Enabled := true;
    delete.Enabled := true;
    Button1.Enabled := true;
    ComboBox1.Enabled := true;
    PopupMenu1.AutoPopup := true;
  except
  end;
end;

//6.3读版本
procedure TForm1.dd31Click(Sender: TObject);
var
  WriteNumber, numRead: LongWord;
  Write_Buffer, buf: array[0..10] of byte;
  TemWrite_Buffer, S: string;
  lw: LongWord;
  str1: Word;
  SysTime: TsystemTime;
  dwEvtMask, dwError: Dword;
  i, ff, InteMonth, Inteday, Intehour, Inteminute, Intesecond, DelaySecond: integer;
  wait: Boolean;
  cs: Tcomstat;
begin
  if comminitialize() = '1' then exit;

  Write_Buffer[0] := byte($EA);
  Write_Buffer[1] := byte($EA);
  Write_Buffer[2] := byte($09);

  DBGrid2.SelectedRows.Count; //当前行号
  S := DBGrid2.Fields[0].AsString;
  Write_Buffer[3] := HexToDec(copy(S, 3, 4));
  Write_Buffer[4] := HexToDec(copy(S, 1, 2));

  Write_Buffer[5] := byte($00);
  Write_Buffer[6] := byte($00);
  Write_Buffer[7] := byte($00);
  str1 := 0; //必须先赋值
  for i := 0 to 7 do
    str1 := str1 + Write_Buffer[i];


  Write_Buffer[8] := byte(str1 and $00FF); //低字节
  Write_Buffer[9] := byte((str1 shr 8) and $00FF); //右移8位取高字节
  Write_Buffer[10] := byte($DD);

  PurgeComm(hcom, (PURGE_RXABORT and PURGE_RXCLEAR)); //清空输入区
  if (hcom = 0) then exit;
  writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
  RadioGroup1.Enabled := false;
  //PopupMenu1.AutoPopup := false;
  delete.Enabled := false;
  Button1.Enabled := false;
  ComboBox1.Enabled := false;
  DBGrid2.DataSource.DataSet.DisableControls;
  Receivedata('6.3');
  RadioGroup1.Enabled := true;
  delete.Enabled := true;
  Button1.Enabled := true;
  ComboBox1.Enabled := true;
  PopupMenu1.AutoPopup := true;
  DBGrid2.DataSource.DataSet.EnableControls;
  FJDBGrid2CellClick();
end;

//下载电表局编号6.4
procedure TForm1.N1Click(Sender: TObject);
var
  WriteNumber, numRead: LongWord;
  Write_Buf, buf, Write_Buffer1: array[1..255 * 80 + 1] of byte;
  Write_Buffer: array[0..265] of byte;
  FromF, ToF, TempFromF: file of byte;
  str1: Word;
  NumWritten, i, j, page, ii, jj, LengthWrite_Buf, RepeatAgainNumber, delaytrue: integer;
  dwEvtMask: Dword;
  wait, OpenYesNo: Boolean;
  S: string;
label RepeatAgain, proend;


begin
  if comminitialize() = '1' then exit;
  RadioGroup1.Enabled := false;
  delete.Enabled := false;
  Button1.Enabled := false;
  ComboBox1.Enabled := false;
  //PopupMenu1.AutoPopup := false;
 // PopupMenu1false();


  if ExistDBF.Text = '' then goto proend; //没有选择

  if ExistDBF.Text = '1' then {//1代表有DBF}  begin
    jzqBHFromDBF();
    //PopupMenu1true();
    exit;
  end;
  OpenYesNo := OpenDialog1.Execute;
  if not OpenYesNo then goto proend;
  if OpenYesNo then { Display Open dialog box }  begin
    AssignFile(FromF, OpenDialog1.filename); //Assign 分配, 指派到FromF文件
    if OpenDialog1.filename = '' then goto proend;
    Reset(FromF); { Record size = 1 }


    for i := 1 to FileSize(FromF) do
      Write_Buf[i] := byte($FF); //给全部BUF赋初值
    buf[i] := byte($FF);

    BlockRead(FromF, buf, FileSize(FromF), numRead); //读数据赋值给BUF

    //以下是将数据存入Temp.dat文件
    i := 1;
    ii := 1;
    LengthWrite_Buf := 1;
    while i <= FileSize(FromF) do begin
      if (buf[i] >= byte($30)) and (buf[i] <= byte($39)) then begin
        for j := 1 to 6 do begin
          Write_Buffer1[(j - 1) * 2 + 1] := byte(buf[(j - 1) * 2 + 1 + i - 1] and $0F); //39
          Write_Buffer1[(j - 1) * 2 + 2] := byte(buf[(j - 1) * 2 + 2 + i - 1] and $0F); //30
          Write_Buf[j + ii - 1] := byte((Write_Buffer1[(j - 1) * 2 + 1] shl 4) + Write_Buffer1[(j - 1) * 2 + 2]); //90
          LengthWrite_Buf := LengthWrite_Buf + 1;
        end;
        i := i + 12;
        ii := ii + 6;
      end
      else
        i := i + 1;
    end;
    // showmessage(inttostr(LengthWrite_Buf));
    LengthWrite_Buf := LengthWrite_Buf - 1;
    AssignFile(ToF, Filedir.Text + '\rd_dat\Temp.dat'); { Open output file }
    Rewrite(ToF);
    BlockWrite(ToF, Write_Buf, LengthWrite_Buf, LengthWrite_Buf);
    CloseFile(FromF);
    CloseFile(ToF);
    //以上是将数据存入Temp.dat文件


    AssignFile(FromF, Filedir.Text + '\rd_dat\Temp.dat'); //Assign 分配, 指派到FromF文件
    Reset(FromF);


    page := round(FileSize(FromF) / 255);
    if round(FileSize(FromF) / 255) * 255 < FileSize(FromF) then
      page := round(FileSize(FromF) / 255) + 1;

    for i := 1 to page * 255 do
      buf[i] := byte($FF);

    BlockRead(FromF, buf, FileSize(FromF), numRead); //读数据赋值给BUF
    Write_Buffer[0] := byte($EA); //$ 表示16进制
    Write_Buffer[1] := byte($EA);

    //以下是控制码
    Write_Buffer[2] := byte($2C); //有后续报文时

    DBGrid2.SelectedRows.Count; //当前行号
    S := DBGrid2.Fields[0].AsString;
    Write_Buffer[3] := HexToDec(copy(S, 3, 4)); // byte($FA);
    Write_Buffer[4] := HexToDec(copy(S, 1, 2)); //byte($01);

    Write_Buffer[5] := byte($FF);
    receive.Lines.Add('正在与集中器通讯中...');
    for i := page downto 1 do {//块号从大到小}  begin

      if i = 1 then
        Write_Buffer[2] := byte($0C); //无后续报文时
      for j := 1 to 255 do
        Write_Buffer[j + 5] := buf[j + (page - i) * 255];

      str1 := 0; //必须先赋值

      //以下是帧编码
      Write_Buffer[261] := byte(i); //前8位;
      Write_Buffer[262] := byte($00); //后8位

      for ii := 0 to 262 do
        str1 := str1 + Write_Buffer[ii];

      Write_Buffer[263] := byte(str1 and $00FF);
      Write_Buffer[264] := byte((str1 shr 8) and $00FF);
      Write_Buffer[265] := byte($DD);

      if (hcom = 0) then goto proend; ;
      RepeatAgainNumber := 0;
      RepeatAgai

⌨️ 快捷键说明

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