📄 main.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 + -