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