From 868daf94f29ce1ffdd799a68c07bb668cd373bcd Mon Sep 17 00:00:00 2001 From: HP\李良庭 <liliangting@lanpucloud.cn:1111> Date: 星期二, 08 七月 2025 11:49:03 +0800 Subject: [PATCH] 提交分辨率自适应版本V3.1.0.1500 --- src/thread/grainThread.~pas | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 170 insertions(+), 0 deletions(-) diff --git a/src/thread/grainThread.~pas b/src/thread/grainThread.~pas new file mode 100644 index 0000000..e16d6b7 --- /dev/null +++ b/src/thread/grainThread.~pas @@ -0,0 +1,170 @@ +{------------------------------------------------------------------------------} +{单元名称: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; //调整截距反馈 + 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 := Format('粮食品种修改失败,故障码 [%d]!',[t_faultCode]) + else + lblManTest.Caption := '粮食品种修改成功,准备就绪!'; + RefashFaultCode(t_faultCode); + + //显示当前加载的粮种信息 + 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 := Format('粮食品种修改失败,故障码 [%d]!',[t_faultCode]) + else + lblVerify.Caption := '粮食品种修改成功,校准就绪!'; + + //加载粮种校准系数 + 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 := Format('粮食品种修改失败,故障码 [%d]!',[t_faultCode]) + else + lblInter.Caption := '粮食品种修改成功,准备就绪!'; + + //显示当前加载的粮种信息 + 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.Start(); +begin + //检查水分仪故障码 + t_ret := ReadFaultCode(hWrDev, @t_faultCode); + //下发粮种信息 + if t_ret >=0 then + 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 +end; + +//------- 线程入口 ---------------------------------------- +procedure TGrainThread.Execute; +begin + { Place thread code here } + try + //选择粮种 + Start(); + //防止线程阻塞CPU + Sleep(1); + finally + //手动退出线程 + m_GrainThread := 0; + end; +end; + +end. -- Gitblit v1.9.3