{------------------------------------------------------------------------------} {µ¥ÔªÃû³Æ£º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.