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
129
130
{------------------------------------------------------------------------------}
{µ¥ÔªÃû³Æ£ºvreadyThread.pas                                                    }
{Ä£¿éÃû³Æ£ºÐ£×¼-×¼±¸Ï̠߳                                                      }
{Ä£¿é˵Ã÷£ºÏ̴߳´½¨ºó×Ô¶¯ÔËÐУ¬Íê³ÉÁ¸ÖÖÏ·¢                                    }
{½¨Á¢ÈÕÆÚ£º2023-11-09                                                          }
{ÐÞ¸ÄÐ޸ģº2023-11-09                                                          }
{°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com                                      }
{------------------------------------------------------------------------------}
 
unit vreadyThread;
 
interface
 
uses
  Windows, Classes, SysUtils, PubUtils, DateUtils, ActuatorLib;
 
type
  TvreadyThread = 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 StartVReady();
    procedure Execute; override;
  public
    constructor Create(param: Boolean=false);
    procedure Terminate;
  end;
 
implementation
 
uses
  uMain, uDM, uInit, uSaveData, Global, log4me;
 
{ TvreadyThread }
 
//--------Ï̳߳õʼ»¯----------------------------------------
//Ï̳߳õʼ»¯
constructor TVReadyThread.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 TVReadyThread.Terminate;
begin
  inherited;
  m_vReadyThread := 0;             //ÇåÀíÏ߳̾ä±ú
end;
 
//--------½çÃæ´¦Àíº¯Êý--------------------------------------
//¼ÆÊýÆ÷¿ªÊ¼
procedure TVReadyThread.UpdateStartClock;
begin
  //Æô¶¯¼ì²â¼ÆÊ±Æ÷¶¯»­
  glStartTest := GetMillisecondTimeStamp;
  dm.tmVerify.Enabled := true;
end;
 
//¼ÆÊýÆ÷½áÊø
procedure TVReadyThread.UpdateStopClock;
begin
  dm.tmVerify.Enabled := false;
  frmMain.mtVerifyClock.Value := 0;
end;
 
//---------------------------------------------------------
//Õý³£ÏÔʾ--ÐÞ¸ÄÁ¸ÖÖÐÅÏ¢
procedure TVReadyThread.UpdateGrain;
begin
  //¸üнçÃæÐÅÏ¢
  frmMain.lblVerify.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬Ð£×¼¾ÍÐ÷£¡';
end;
 
//³ö´íÏÔʾ--ÐÞ¸ÄÁ¸ÖÖ³ö´í
procedure TVReadyThread.UpdateGrainError;
begin
  //¸üнçÃæÐÅÏ¢
  frmMain.lblVerify.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü£¬Ð£×¼¹ÊÕÏ£¡';
end;
 
//------- Ö´ÐÐÏ̠߳----------------------------------------
procedure TVReadyThread.StartVReady();
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 TVReadyThread.Execute;
begin
  { Place thread code here }
  try
    //Ö´ÐÐ×¼±¸¶¯×÷
    StartVReady();
    //·ÀÖ¹Ïß³Ì×èÈûCPU
    Sleep(1);
  finally
    //ÊÖ¶¯Í˳öÏß³Ì
    m_VReadyThread := 0;
  end;
end;
 
end.