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

📄 econv230p.~pas

📁 Delphi编写的ModBus协议上位机软件
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
  comm_status := not comm_status;
end;

//----------------------选择通讯协议-------------------------
procedure TMainForm.MODBUSRTU1Click(Sender: TObject);
begin
  if (comm_status) then exit;          //通讯进行时不进行端口设置
  (sender as TMenuItem).Checked := true;
  case (sender as TMenuItem).tag of
    0: econfile.comm.mode := 'RTU';
    1: econfile.comm.mode := 'ASCII';
    2: econfile.comm.mode := 'CDT'
    else econfile.comm.mode := 'RTU'
  end;
end;

//----------------------程序关闭处理--------------------------
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  vacomm1.close;
  econfile.Free;
end;

//----------------------选择通讯端口-------------------------
procedure TMainForm.COM11Click(Sender: TObject);
begin
  if (comm_status) then exit;          //通讯进行时不进行端口设置
  (sender as TMenuItem).Checked := true;
  econfile.comm.portnum := (sender as TMenuItem).tag;
  vacomm1.portnum := changportnum(econfile.comm.portnum);
end;

//----------------------选择波特率---------------------------
procedure TMainForm.b110Click(Sender: TObject);
begin
  if (comm_status) then exit;         // 通讯中不进行设置
  (sender as tmenuitem).checked := true;  // 显示被选中

  case (sender as tmenuitem).tag of
    0: econfile.comm.baudrate := 110;
    1: econfile.comm.baudrate := 300;
    2: econfile.comm.baudrate := 600;
    3: econfile.comm.baudrate := 1200;
    4: econfile.comm.baudrate := 2400;
    5: econfile.comm.baudrate := 4800;
    6: econfile.comm.baudrate := 9600;
    7: econfile.comm.baudrate := 14400;
    8: econfile.comm.baudrate := 19200;
    9: econfile.comm.baudrate := 38400;
    10: econfile.comm.baudrate := 56000;
    11: econfile.comm.baudrate := 57600;
    12: econfile.comm.baudrate := 115200;
    13: econfile.comm.baudrate := 128000;
    14: econfile.comm.baudrate := 256000;
    15: econfile.comm.baudrate := -1;
    else econfile.comm.baudrate := -1      //用户定义波特率
  end;
  if (econfile.comm.baudrate>=0) then
      vacomm1.baudrate := changbaudrate(econfile.comm.baudrate)
  else
  begin
    vacomm1.baudrate := bruser;
    vacomm1.UserBaudrate := econfile.comm.userbaud;
  end;
end;

//----------------------选择终端地址-------------------------
procedure TMainForm.address1Click(Sender: TObject);
var
  temp: string;
  i: integer;
begin
  if (comm_status) then exit;          // 通讯中不进行设置
  (sender as tmenuitem).checked := true;     // 显示被选中
  temp := (sender as tmenuitem).caption;
  i := pos('&', temp);
  delete(temp, i, 1);
  econfile.comm.rtuaddress := strtointdef(temp, 1);
end;

//----------------------选择奇偶校验-------------------------
procedure TMainForm.paritynoneClick(Sender: TObject);
begin
  if (comm_status) then exit;
   (sender as TMenuItem).Checked := true;
    econfile.comm.parity := (sender as TMenuItem).tag;
    vacomm1.Parity := changparity(econfile.comm.parity);
end;

//----------------------数据文件另存-------------------------
procedure TMainForm.saveasClick(Sender: TObject);
begin
  if save1.Execute then
  begin
    getfilename := save1.FileName;
    datamemo.Lines.SaveToFile(getfilename);
  end;  
end;

//----------------------遥控继电器输出-----------------------
procedure TMainForm.coilstategridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  case acol of
    0: begin
        coilstategrid.Options :=
                [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
        CanSelect := false;
       end
       else
       begin
         coilstategrid.Options:=
                [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
         CanSelect := true;
         smindex := arow;

         tempform.show;
         tempform.UpDown1.Position := ord(econfile.coilstatearray[smindex].value);
         tempform.tempedit.text := inttostr(ord(econfile.coilstatearray[smindex].value));
         tempform.Caption := '控制第 ' + inttostr(smindex) + ' 路继电器';

       end;
  end;
end;

//----------------------修改保持寄存器-----------------------
procedure TMainForm.holdregistergridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  case acol of
    0: begin
        coilstategrid.Options :=
                [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
        CanSelect := false;
       end
       else
       begin
         coilstategrid.Options:=
                [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
         CanSelect := true;
         smindex := arow;

//         tempform.UpDown1.Position :=strtointdef(econfile.holdregisterarray[smindex].value, 0);
         tempform.show;
         tempform.tempedit.text := econfile.holdregisterarray[smindex].value;
         tempform.Caption := '修改' + holdregistergrid.Cells[1,smindex];

       end;
  end;
end;

//----------------------修改电度值---------------------------
procedure TMainForm.PowerGridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  i: integer;
  j: longword;
begin
  case acol of
    0: begin
         coilstategrid.Options :=
                [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
         CanSelect := false;
       end
       else
       begin
         coilstategrid.Options:=
               [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
         CanSelect := true;
         smindex := arow;
         i := strtointdef(econfile.setpowerarray[smindex].address1, 0);
         j := strtointdef(econfile.holdregisterarray[i].value, 0);
         i := strtointdef(econfile.setpowerarray[smindex].address2, 0);
         j := strtoint64def(econfile.holdregisterarray[i].value, 0)*65536 + j;

         tempform.show;
         tempform.tempedit.text := inttostr(j);
         tempform.updown1.Visible := false;
//         tempform.UpDown1.Position := j;
         tempform.Caption := '设置' + powergrid.Cells[1,smindex];

       end;
  end;
end;

//----------------------修改保护参数-------------------------
procedure TMainForm.protectgridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  i:integer;
begin
  case acol of
    0,1,2,4,6:
    begin
        coilstategrid.Options :=
             [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
        CanSelect := false;
    end;
    3: begin
         protectgrid.Options :=
              [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
         CanSelect := true;
         smindex := strtointdef(econfile.setprotectarray[arow].address1,0);
         i := strtoint(econfile.holdregisterarray[smindex].value);

         tempform.show;
         tempform.UpDown1.Position := ord(i >= $8000);
         tempform.tempedit.text := inttostr(ord(i >= $8000));
         tempform.Caption := '设定' + holdregistergrid.Cells[1,smindex];

       end;
    5: begin
        protectgrid.Options :=
              [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
        CanSelect:=true;
        smindex := strtointdef(econfile.setprotectarray[arow].address2, 0);

        tempform.show;
        tempform.UpDown1.Position := strtointdef(econfile.holdregisterarray[smindex].value, 0);
        tempform.tempedit.text := econfile.holdregisterarray[smindex].value;
        tempform.Caption := '修改' + holdregistergrid.Cells[1, smindex];

       end;
    7: begin
        protectgrid.Options:=
              [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
        CanSelect := true;
        smindex := strtointdef(econfile.setprotectarray[arow].address3, 0);

        tempform.show;
        tempform.UpDown1.Position := strtointdef(econfile.holdregisterarray[smindex].value, 0);
        tempform.tempedit.text := econfile.holdregisterarray[smindex].value;
        tempform.Caption := '修改' + holdregistergrid.Cells[1, smindex];

      end;
    8: begin
         protectgrid.Options:=
              [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine];
         CanSelect := true;
         smindex := strtointdef(econfile.setprotectarray[arow].address1, 0);
         i := strtointdef(econfile.holdregisterarray[smindex].value, 0);

         tempform.show;
         tempform.UpDown1.Position := i mod $8000 ;
         tempform.tempedit.text := inttostr(i mod $8000);
         tempform.Caption := '设定' + econfile.setprotectarray[arow].name
                               + '动作继电器';

       end;

  end;
end;

//----------------------读保持寄存器-------------------------
procedure TMainForm.readholdtimerTimer(Sender: TObject);
begin
  readholdregister(econfile);
end;

//----------------------读fifo-------------------------------
procedure TMainForm.readfifotimerTimer(Sender: TObject);
begin
  readfifo(econfile);
end;

//----------------------接收标志处理-------------------------
procedure TMainForm.VaComm1RxFlag(Sender: TObject);
begin
  timeoutcount := 0;
  timerout1.Enabled := False;
end;

//----------------------显示关于窗口-------------------------
procedure TMainForm.m_aboutClick(Sender: TObject);
begin
  aboutform.showmodal;
end;

//----------------------修改输入寄存器对应系数----------------
procedure TMainForm.inputregistergridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  i,j: integer;
begin
   coilstategrid.Options :=
          [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
   CanSelect := true;
   j := arow;
   smindex := -1;
   for i:=1 to econfile.setpartotal do
   begin
     if (strtointdef(econfile.setpararray[i].address1,-1)=j)
       then
       begin
         smindex := strtointdef(econfile.setpararray[i].address2,-1);
         break;
       end;
   end;

   if smindex=-1 then exit;

   tempform.show;
   tempform.tempedit.text := econfile.holdregisterarray[smindex].value;
   tempform.Caption := '修改' + holdregistergrid.Cells[1,smindex];

end;

//----------------------保存帮助文件-------------------------
procedure TMainForm.save2Click(Sender: TObject);
begin
  helpmemo.Lines.SaveToFile('help.txt');
end;

//----------------------保存测试报告文件---------------------
procedure TMainForm.saverptbtnClick(Sender: TObject);
var tempfile: string;
begin
  if save1.Execute then
  begin
    tempfile:=save1.FileName;
    testrptmemo.Lines.SaveToFile(tempfile);
  end;
end;

//----------------------生成报告文件------------------------
procedure TMainForm.rptbtnClick(Sender: TObject);
var
  i: integer;
  s: string;
begin
  testrptmemo.Lines.Add(' ');
  testrptmemo.Lines.Add(' ');
  testrptmemo.Lines.Add
    ('       ==============='+econfile.filename+'测试报告===============      ');
  testrptmemo.Lines.Add(' ');
  S := '产品编号:            ' + '测试日期:  ' 
                   + DateToStr(Date) + '     ' + '质检编号:        ';
  testrptmemo.Lines.Add(S);
  testrptmemo.Lines.Add(' ');

  if econfile.coilstatetotal>0 then
     begin
       testrptmemo.Lines.Add(' ');
       s := '开关量输出测试结果';

⌨️ 快捷键说明

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