HP\李良庭
2025-07-08 868daf94f29ce1ffdd799a68c07bb668cd373bcd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
{------------------------------------------------------------------------------}
{µ¥ÔªÃû³Æ£ºuDM.pas                                                             }
{Ä£¿éÃû³Æ£ºÈ«¾ÖÊý¾ÝÄ£Ðͼ¯                                                      }
{Ä£¿é˵Ã÷£º°üÀ¨È«¾Ö¶¨Ê±Æ÷¡¢Êý¾Ý´æ´¢µÈ                                          }
{½¨Á¢ÈÕÆÚ£º2023-10-24                                                          }
{ÐÞ¸ÄÐ޸ģº2024-07-08                                                          }
{°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com                                      }
{------------------------------------------------------------------------------}
 
unit uDM;
 
interface
 
uses
  SysUtils, Classes, ExtCtrls, PubUtils, IdBaseComponent, IdComponent,
  IdUDPBase, IdUDPClient;
 
type
  Tdm = class(TDataModule)
    tmClock: TTimer;
    tmManTest: TTimer;
    tmAutoTest: TTimer;
    tmVerify: TTimer;
    tmRegFault: TTimer;
    tmInter: TTimer;
    tmReset: TTimer;
    IdUDPClient1: TIdUDPClient;
    tmHeart: TTimer;
    procedure tmClockTimer(Sender: TObject);
    procedure tmManTestTimer(Sender: TObject);
    procedure tmAutoTestTimer(Sender: TObject);
    procedure tmVerifyTimer(Sender: TObject);
    procedure tmRegFaultTimer(Sender: TObject);
    procedure tmInterTimer(Sender: TObject);
    procedure tmResetTimer(Sender: TObject);
    procedure tmHeartTimer(Sender: TObject);
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  dm: Tdm;
 
implementation
 
uses
  uMain, global;
 
{$R *.dfm}
 
procedure Tdm.tmClockTimer(Sender: TObject);
begin
  with frmMain do begin
    //×Ô¶¯Ä£Ê½-ʱÖÓ
    ssYear.Value := StrToInt(FormatDateTime('YYYY',Now()));
    ssMonth.Value := StrToInt(FormatDateTime('MM',Now()));
    ssDay.Value := StrToInt(FormatDateTime('DD',Now()));
    ssClock.Time := Now();
 
    //ÊÖ¶¯Ä£Ê½-ʱÖÓ
    ssYear1.Value := StrToInt(FormatDateTime('YYYY',Now()));
    ssMonth1.Value := StrToInt(FormatDateTime('MM',Now()));
    ssDay1.Value := StrToInt(FormatDateTime('DD',Now()));
    ssClock1.Time := Now();
  end;
end;
 
procedure Tdm.tmAutoTestTimer(Sender: TObject);
begin
  frmMain.mtAutoClock.Value := (GetMillisecondTimeStamp - glStartTest)/1000;
end;
 
procedure Tdm.tmManTestTimer(Sender: TObject);
begin
  frmMain.mtManClock.Value := (GetMillisecondTimeStamp - glStartTest)/1000;
end;
 
procedure Tdm.tmVerifyTimer(Sender: TObject);
begin
  frmMain.mtVerifyClock.Value := (GetMillisecondTimeStamp - glStartTest)/1000;
end;
 
//×¢²áʧ°Ü£¬Æô¶¯Í˳öϵͳ¶¨Ê±Æ÷
procedure Tdm.tmRegFaultTimer(Sender: TObject);
begin
  frmMain.Close;
end;
 
//µ÷Õû½Ø¾àµÄ¼ÆÊ±Æ÷
procedure Tdm.tmInterTimer(Sender: TObject);
begin
  frmMain.mtInterClock.Value := (GetMillisecondTimeStamp - glStartTest)/1000;
end;
 
procedure Tdm.tmResetTimer(Sender: TObject);
begin
  frmMain.lblMaintain.Caption := Format('Ìáʾ£ºË®·ÖÒÇ [¸´Î»] ÖУ¬ÇëµÈ´ý %.3f Ãë.',
                                        [(GetMillisecondTimeStamp - glStartTest)/1000]);
end;
 
//------------------------------------------------------------------------------
//Ïò¹Ì¶¨IPºÍport·¢×Ö·û´®'4'ÐÄÌø
procedure Tdm.tmHeartTimer(Sender: TObject);
var
  HeartbeatStr: string;
begin
  HeartbeatStr := '4'; // ÐÄÌø×Ö·û´®
  try
    IdUDPClient1.Send(HeartbeatStr); // ·¢ËÍÐÄÌøÐÅÏ¢
  except
    on E: Exception do
      frmMain.lblAutoRet_error.Caption := 'UDP ÐÄÌø·¢ËÍʧ°Ü: ' + E.Message; // ´íÎó´¦Àí
  end;
end;
 
procedure Tdm.DataModuleCreate(Sender: TObject);
begin
  IdUDPClient1.Host := PlcConn.heart_ip;
  IdUDPClient1.Port := PlcConn.heart_port;
  IdUDPClient1.Active := true;
  tmHeart.Interval := 1*1000; //1sÒ»´Î
  tmHeart.Enabled := true;
end;
 
end.