{------------------------------------------------------------------------------} {µ¥ÔªÃû³Æ£ºgrainThread.pas } {Ä£¿éÃû³Æ£ºÁ¸ÖÖÑ¡ÔñÏß³Ì } {Ä£¿é˵Ã÷£ºÏ̴߳´½¨ºó×Ô¶¯ÔËÐУ¬Íê³ÉÒ»´ÎÁ¸ÖÖÑ¡Ôñ } {½¨Á¢ÈÕÆÚ£º2024-07-02 } {ÐÞ¸ÄÐ޸ģº2024-07-02 } {°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com } {------------------------------------------------------------------------------} unit grainThread; interface uses Windows, Classes, SysUtils, PubUtils, DateUtils, ActuatorLib; type TGrainThread = class(TThread) private { Private declarations } t_ret : Integer; //·µ»ØÖµ t_faultCode : Word; //Ë®·ÖÒǹÊÕÏÂë procedure UpdateCaption; //ÊÖ¶¯¼ì²â·´À¡ procedure UpdateCaption1; //ÊÖ¶¯Ð£×¼·´À¡ procedure UpdateCaption2; //µ÷Õû½Ø¾à·´À¡ procedure UpdateFaultCode; protected procedure Start(); procedure Execute; override; public constructor Create(param: Boolean=false); procedure Terminate; end; implementation uses uMain, Global, log4me, uInit; { TGrainThread } //--------Ï̳߳õʼ»¯---------------------------------------- //Ï̳߳õʼ»¯ constructor TGrainThread.Create(param: Boolean=false); begin //Ïß³ÌÍ£Ö¹ºó×Ô¶¯ÊÍ·Å inherited Create(param); //ÉèÖÃÏß³ÌÔËÐÐ, False-×Ô¶¯ÔËÐÐ, True-ÊÖ¶¯Æô¶¯ FreeOnTerminate := True; //ÉèÖÃÏß³ÌÍ˳ö×Ô¶¯Ïú //·µ»ØÖµ t_ret := 0; t_faultCode := 0; end; //Ïß³ÌÏú»Ùʼþ procedure TGrainThread.Terminate; begin inherited; m_GrainThread := 0; //ÇåÀíÏ߳̾ä±ú end; //--------½çÃæ´¦Àíº¯Êý-------------------------------------- //ÊÖ¶¯¼ì²âʱ£¬Ï·¢Á¸ÖÖ·´À¡ÐÅÏ¢ procedure TGrainThread.UpdateCaption; begin with frmMain do begin //Ïò½çÃæ·µ»ØÐÅÏ¢ if t_ret<>0 then lblManTest.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü£¡' else lblManTest.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬×¼±¸¾ÍÐ÷£¡'; //ÏÔʾµ±Ç°¼ÓÔØµÄÁ¸ÖÖÐÅÏ¢ sLabel15.Caption := Format('Á¸Ê³ÖÖÀà - [%s]',[Grain.Name]); log4Info(Format('Á¸ÖÖ£ºµ±Ç°Ñ¡ÖÐ[%s], ´úÂë[%d], У׼ϵÊý[%s,%s,%s,%s,%s]', [Grain.Name, Grain.Code, Grain.Coef[0], Grain.Coef[1], Grain.Coef[2], Grain.Coef[3], Grain.Coef[4]])); end; end; //ÊÖ¶¯Ð£×¼Ê±£¬Ï·¢Á¸ÖÖ·´À¡ÐÅÏ¢ procedure TGrainThread.UpdateCaption1; begin with frmMain do begin if t_ret<>0 then lblVerify.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü' else lblVerify.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬Ð£×¼¾ÍÐ÷£¡'; //¼ÓÔØÁ¸ÖÖУ׼ϵÊý edtAutoCoef1.Text := Grain.coef[0]; edtAutoCoef2.Text := Grain.coef[1]; edtAutoCoef3.Text := Grain.coef[2]; edtAutoCoef4.Text := Grain.coef[3]; edtAutoCoef5.Text := Grain.coef[4]; //ÏÔʾµ±Ç°¼ÓÔØµÄÁ¸ÖÖÐÅÏ¢ sLabel3.Caption := Format('Ñ¡Ôñ - [%s]',[Grain.Name]); log4Info(Format('Á¸ÖÖ£ºµ±Ç°Ñ¡ÖÐ[%s], ´úÂë[%d], У׼ϵÊý[%s,%s,%s,%s,%s]', [Grain.Name, Grain.Code, Grain.Coef[0], Grain.Coef[1], Grain.Coef[2], Grain.Coef[3], Grain.Coef[4]])); end; end; //µ÷Õû½Ø¾àʱ£¬Ï·¢Á¸ÖÖ·´À¡ÐÅÏ¢ procedure TGrainThread.UpdateCaption2; begin with frmMain do begin //Ïò½çÃæ·µ»ØÐÅÏ¢ if t_ret<>0 then lblInter.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü£¡' else lblInter.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬×¼±¸¾ÍÐ÷£¡'; //ÏÔʾµ±Ç°¼ÓÔØµÄÁ¸ÖÖÐÅÏ¢ sLabel70.Caption := Format('Á¸Ê³ÖÖÀà - [%s]',[Grain.Name]); log4Info(Format('Á¸ÖÖ£ºµ±Ç°Ñ¡ÖÐ[%s], ´úÂë[%d], У׼ϵÊý[%s,%s,%s,%s,%s]', [Grain.Name, Grain.Code, Grain.Coef[0], Grain.Coef[1], Grain.Coef[2], Grain.Coef[3], Grain.Coef[4]])); end; end; //³ö´íÏÔʾ--ÒÇÆ÷×Ô¼ì³ö´í procedure TGrainThread.UpdateFaultCode; begin RefashFaultCode(t_faultCode); end; //------- Ö´ÐÐÏß³Ì ---------------------------------------- procedure TGrainThread.Start(); begin //Ï·¢Á¸ÖÖÐÅÏ¢ {log4info(Format('Ïß³ÌÐÅÏ¢£ºÏ·¢Á¸ÖÖÖ¸ÁctxDev=[%d],CmdType=[%d],GrainType=[%d],Resp=[2].', [hWrDev, WR_GOODS, Grain.Code]));} t_ret := SendCommands(hWrDev, WR_GOODS, Grain.Code, 2); //ÕâÀïÖ¸Áî×èÈûʱ¼ä=2s //Ïò½çÃæÊä³ö½á¹û if s_Grain=1 then Synchronize(UpdateCaption) //ÊÖ¶¯¼ì²â·´À¡ 1 else if s_Grain=2 then Synchronize(UpdateCaption1) //ÊÖ¶¯Ð£×¼·´À¡ 2 else Synchronize(UpdateCaption2);//µ÷Õû½Ø¾à·´À¡ 3 //¼ì²éË®·ÖÒǹÊÕÏÂë ReadFaultCode(hWrDev, @t_faultCode); Synchronize(UpdateFaultCode); end; //------- Ïß³ÌÈë¿Ú ---------------------------------------- procedure TGrainThread.Execute; begin { Place thread code here } try //Ñ¡ÔñÁ¸ÖÖ Start(); //·ÀÖ¹Ïß³Ì×èÈûCPU Sleep(1); finally //ÊÖ¶¯Í˳öÏß³Ì m_GrainThread := 0; end; end; end.