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
{------------------------------------------------------------------------------}
{µ¥ÔªÃû³Æ£ºReadyThread.pas                                                     }
{Ä£¿éÃû³Æ£º×¼±¸Ï̠߳                                                           }
{Ä£¿é˵Ã÷£ºÏ̴߳´½¨ºó×Ô¶¯ÔËÐУ¬Íê³ÉÁ¸ÖÖÏ·¢                                    }
{½¨Á¢ÈÕÆÚ£º2023-11-08                                                          }
{ÐÞ¸ÄÐ޸ģº2023-11-08                                                          }
{°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com                                      }
{------------------------------------------------------------------------------}
unit readyThread;
 
interface
 
uses
  Windows, Classes, SysUtils, PubUtils, DateUtils, ActuatorLib;
 
type
  TReadyThread = class(TThread)
  private
    { Private declarations }
    t_ret : Integer;                //·µ»ØÖµ
    t_nDatas : array[0..3] of Word; //ÔÝ´æË®·ÖÒÇÊý¾Ý
 
    procedure UpdateStartClock;
    procedure UpdateStopClock;
    procedure UpdateGrain;
    procedure UpdateGrainError;
  protected
    procedure StartReady();
    procedure Execute; override;
  public
    constructor Create(param: Boolean=false);
    procedure Terminate;
  end;
 
implementation
 
uses
  uMain, uDM, uInit, uSaveData, Global, log4me;
 
{ TReadyThread }
//--------Ï̳߳õʼ»¯----------------------------------------
//Ï̳߳õʼ»¯
constructor TReadyThread.Create(param: Boolean=false);
begin
  //Ïß³ÌÍ£Ö¹ºó×Ô¶¯ÊÍ·Å
  inherited Create(param);        //ÉèÖÃÏß³ÌÔËÐÐ, False-×Ô¶¯ÔËÐÐ, True-ÊÖ¶¯Æô¶¯
  FreeOnTerminate := True;        //ÉèÖÃÏß³ÌÍ˳ö×Ô¶¯Ïú
  //·µ»ØÖµ
  t_ret := 0;
  //³õʼ»¯Ë®·ÖÒÇÊý×é
  t_nDatas[0] := 0;
  t_nDatas[1] := 0;
  t_nDatas[2] := 0;
  t_nDatas[3] := 0;
end;
 
//Ïß³ÌÏú»Ùʼþ
procedure TReadyThread.Terminate;
begin
  inherited;
  m_ReadyThread := 0;             //ÇåÀíÏ߳̾ä±ú
end;
 
//--------½çÃæ´¦Àíº¯Êý--------------------------------------
//¼ÆÊýÆ÷¿ªÊ¼
procedure TReadyThread.UpdateStartClock;
begin
  //Æô¶¯¼ì²â¼ÆÊ±Æ÷¶¯»­
  glStartTest := GetMillisecondTimeStamp;
  dm.tmManTest.Enabled := true;
end;
 
//¼ÆÊýÆ÷½áÊø
procedure TReadyThread.UpdateStopClock;
begin
  dm.tmManTest.Enabled := false;
  frmMain.mtManClock.Value := 0;
end;
 
//Õý³£ÏÔʾ--ÐÞ¸ÄÁ¸ÖÖÐÅÏ¢
procedure TReadyThread.UpdateGrain;
begin
  //¸üнçÃæÐÅÏ¢
  frmMain.lblManTest.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬×¼±¸¾ÍÐ÷£¡';
end;
 
//³ö´íÏÔʾ--ÐÞ¸ÄÁ¸ÖÖ³ö´í
procedure TReadyThread.UpdateGrainError;
begin
  //¸üнçÃæÐÅÏ¢
  frmMain.lblManTest.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü£¬Ë®·ÖÒǹÊÕÏ£¡';
end;
 
//------- Ö´ÐÐÏ̠߳----------------------------------------
procedure TReadyThread.StartReady();
begin
  //·µ»ØÖµ
  t_ret := 0;
  //Ï·¢Á¸ÖÖÐÞ¸ÄÖ¸Áî
  Synchronize(UpdateStartClock);
  t_ret := SendCommands(hWrDev, WR_GOODS, Grain.Code, 3);    //ÕâÀïÖ¸Áî×èÈûʱ¼ä=3s
  Synchronize(UpdateStopClock);
  if t_ret<0 then begin
    Synchronize(UpdateGrainError);
    Exit;
  end
  else
    Synchronize(UpdateGrain);
end;
 
//------- Ïß³ÌÈë¿Ú ----------------------------------------
procedure TReadyThread.Execute;
begin
  { Place thread code here }
  try
    //Ö´ÐÐ×¼±¸¶¯×÷
    StartReady();
    //·ÀÖ¹Ïß³Ì×èÈûCPU
    Sleep(1);
  finally
    //ÊÖ¶¯Í˳öÏß³Ì
    m_ReadyThread := 0;
  end;
end;
 
end.