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

📄 main.pas

📁 Timing system which communicates with a microcontroler based system
💻 PAS
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, BaseGrid, AdvGrid, RzStatus, ComCtrls, Menus, ExtCtrls,
  Serial, IniFiles, AdvGridExcel, RzPrgres, StdCtrls;

type
  TfrmMain = class(TForm)
    mnuMain: TMainMenu;
    mnuDatei: TMenuItem;
    mnuSet: TMenuItem;
    mnuHelp: TMenuItem;
    mnuHelp_Info: TMenuItem;
    mnuDatei_Get: TMenuItem;
    mnuDatei_Save: TMenuItem;
    N1: TMenuItem;
    mnuDatei_End: TMenuItem;
    mnuSet_Parameter: TMenuItem;
    N2: TMenuItem;
    mnuSet_Save: TMenuItem;
    mnuSet_Load: TMenuItem;
    StatusBar1: TStatusBar;
    Data: TAdvStringGrid;
    Timer1: TTimer;
    Serial1: TSerial;
    SerStdDlg1: TSerStdDlg;
    AdvGridExcelIO1: TAdvGridExcelIO;
    pBar: TRzProgressBar;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Serial1EventChar(Sender: TObject);
    procedure mnuSet_ParameterClick(Sender: TObject);
    procedure mnuSet_SaveClick(Sender: TObject);
    procedure mnuSet_LoadClick(Sender: TObject);
    procedure mnuDatei_EndClick(Sender: TObject);
    procedure mnuDatei_SaveClick(Sender: TObject);
    procedure mnuDatei_GetClick(Sender: TObject);
  private
    { Private declarations }
    nr, datarecords  : integer;  // Anzahl empfangene und gesendete Zeichen
    ComConf : TserialConfig;
    text : string;

    procedure ActivateCom();
    procedure ResetMenu();
    procedure ProcessData();
    function  CharPos(ch: Char; const ss: string): Integer;

  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

  const
  INIFileName = '.\Zeitnehmung.ini';
  INISection  = 'Comm';
  INIEntry    = 'Configuration';


implementation

{$R *.dfm}

procedure TfrmMain.ActivateCom();
begin
//  frmMain.Cursor:= crDefault;
  pBar.Visible:= False;
  Timer1.Enabled:= False;
  Statusbar1.settextbuf('Bereit f黵 躡ertragung');
  ShowMessage('Zum Datentransfer Taste "0" an der Zeitnehmung dr點ken');
end;

procedure TfrmMain.ResetMenu();
begin
//  frmMain.Cursor:= crDefault;
  mnuDatei_Get.Enabled:= True;
  mnuDatei_Save.Enabled:= True;
  mnuSet.Enabled:= True;
  pBar.Visible:= False;
  pBar.TotalParts:= 100;
  Statusbar1.settextbuf('Datentransfer beendet');
end;

function TfrmMain.CharPos(ch: Char; const ss: string): Integer;
var
  i: Integer;
begin
  Result := 0;
  if ss <> '' then
  begin
    for i := 1 to Length(ss) do
    begin
      if ss[i] = ch then
      begin
        Result := i;
        Exit;
      end;     // if s[i]
    end;       // for i
  end;         // if s
end;

procedure TfrmMain.ProcessData();
var
  DS, Lauf, Stnr, LZ, FS, VS : String;
  n, Pf, Vw, iPos, Hr, Sec : Integer;
  erster : Char;

begin
  erster:= Text[1];
  if erster in ['0','1','2','3','4','5','6','7','8','9'] then
  begin
  iPos := CharPos(';', Text);
  if iPos <> 0 then
  begin
    DS:= Copy(Text, 1, ipos-1);
    Delete(Text, 1, iPos);
  end;
  iPos := CharPos(';', Text);
  if iPos <> 0 then
  begin
    Lauf:= Copy(Text, 1, ipos-1);
    Delete(Text, 1, iPos);
  end;
  iPos := CharPos(';', Text);
  if iPos <> 0 then
  begin
    Stnr:= Copy(Text, 1, ipos-1);
    Delete(Text, 1, iPos);
  end;
  iPos := CharPos(';', Text);
  if iPos <> 0 then
  begin
    LZ:= Copy(Text, 1, ipos-1);
    Delete(Text, 1, iPos);
    iPos:= StrToInt(LZ);
    Sec:= iPos mod 100;
    hr:= iPos div 100;
    LZ:= IntToStr(Hr)+'.'+IntToStr(Sec);
  end;
  iPos := CharPos(#13, Text);
  if StrToInt(Lauf) > 3 then
  begin
    FS:= Copy(Text, 1, ipos-1);
    iPos:= StrToInt(FS);
    Vw:= iPos mod 10;
    Pf:= iPos div 10;
    FS:= IntToStr(Pf);
    VS:= IntToStr(Vw);
  end
  else
  begin
    FS:= Text;
  end;
  n:= StrToInt(DS);
  Data.Cells[0,n]:= DS;
  Data.Cells[1,n]:= Lauf;
  Data.Cells[2,n]:= Stnr;
  Data.Cells[3,n]:= LZ;
  Data.Cells[4,n]:= FS;
  Data.Cells[5,n]:= VS;
  pBar.IncPartsByOne;
// Hier sind die Daten zu verarbeiten
  n:=Serial1.TransmittText('C');
  end;
end;

procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
  if pBar.PartsComplete<100 then
    pBar.IncPartsByOne
  else
    pBar.PartsComplete:=0;
end;

procedure TfrmMain.Serial1EventChar(Sender: TObject);
var
  s, ht : string;
  n : Integer;
  tpos : integer;

begin
  label1.Visible:= False;
  s:=Serial1.ReceiveText;
//  nr:=nr+Length(s);  // Anzahl empfangener (eingelesener) Zeichen
  Text:=s;
  if (length(s)>0) and (length(s)<10) then
  begin
    if AnsiCompareStr(Text, 'MRFS'#$D#$A)=0 then
    begin
      pBar.Visible:= False;
      Timer1.Enabled:= False;
      Statusbar1.settextbuf('Bereit f黵 躡ertragung');
      Label1.Visible:= True;
//      ShowMessage('Zum Datentransfer Taste "0" an der Zeitnehmung dr點ken');
    end
//      ActivateCom
    else if Text[1] = '#' then
    begin
      ht:= Text;
      Delete(ht, 1, 1);
      tPos := CharPos(#13, ht);
      if tPos <> 0 then
      begin
        s:= Copy(ht, 0, tpos-1);
      end
      else
      begin
        s:= '0';
      end;
      datarecords:= StrToInt(s);
      pBar.TotalParts:= datarecords;
      data.RowCount:= datarecords+1;
      n:=Serial1.TransmittText('C');
    end
    else if AnsiCompareStr(Text, 'STX'#$D#$A)=0 then
    begin
      StatusBar1.SimpleText:='Empfange Daten';
 //     pBar.TotalParts:= 200;
      frmMain.Cursor:= crHourGlass;
      pBar.Visible:= True;
      n:=Serial1.TransmittText('C');
    end
    else if AnsiCompareStr(Text, 'ETX'#$D#$A)=0 then
      ResetMenu
    else
      if length(s)>0 then ProcessData;
  end
  else
    if length(s)>0 then ProcessData;

end;

procedure TfrmMain.mnuSet_ParameterClick(Sender: TObject);
begin
  SerStdDlg1.Execute;
end;

procedure TfrmMain.mnuSet_LoadClick(Sender: TObject);
// Einstellungen aus INI-Datei laden
var
  c : TINIFile;
  s : string;
  d : TSerialConfig;
begin
  c:=TINIFile.Create(INIFileName);
  s:=c.ReadString(INISection,INIEntry,EmptyStr);
  c.Free;
  if Length(s)=0 then
    ShowMessage('Es gibt keine gespeicherten Konfigurationsdaten!')
  else
  begin
    d:=Serial1.StrToConfig(s);
    if d.Valid then
    begin
      Serial1.SetConfig(d);
      if Serial1.Active then
      begin
        Serial1.Active:=False;
        Serial1.Active:=True;
      end; // end if
    end
    else
      ShowMessage('Die Konfigurationsdaten sind ung黮tig!');
  end;
end;

procedure TfrmMain.mnuSet_SaveClick(Sender: TObject);
// Einstellungen in INI-Datei speichern
var
  c : TINIFile;
begin
  c:=TINIFile.Create(INIFileName);
  c.WriteString(INISection,INIEntry,Serial1.ConfigToStr(Serial1.GetConfig));
  c.Free;
  ShowMessage('Die Einstellungen in der Datei "Zeitnehmung.ini" gespeichert.');
end;

procedure TfrmMain.mnuDatei_EndClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmMain.mnuDatei_SaveClick(Sender: TObject);
begin
  Data.SaveToCSV('Zeitprotokoll.csv');
end;

procedure TfrmMain.mnuDatei_GetClick(Sender: TObject);
begin
   ShowMessage('Zeitnehmung einschalten oder RESET dr點ken');
   mnuDatei_Get.Enabled:= False;
   mnuDatei_Save.Enabled:= False;
   mnuSet.Enabled:= False;
   Serial1.Active:= True;
   if Serial1.Active=True then
     Statusbar1.settextbuf('Serial Port open')

   else
     Statusbar1.settextbuf('Serial Port Closed');

   pBar.PartsComplete:=0;
   pBar.Visible:= True;
//   frmMain.Cursor:= crHourGlass;
   Timer1.Enabled:= True;
//   repeat
//   Statusbar1.settextbuf('Warte auf Meldung der Zeitnehmung');
//   until StrComp(PChar(Text),'MRFS')=0;

//   Statusbar1.settextbuf('Bereit f黵 躡ertragung');
//   ShowMessage('Zum Datentransfer Taste "0" an der Zeitnehmung dr點ken');
end;

end.

⌨️ 快捷键说明

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