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/interceptThread.pas |  168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 168 insertions(+), 0 deletions(-)

diff --git a/src/thread/interceptThread.pas b/src/thread/interceptThread.pas
new file mode 100644
index 0000000..2f18748
--- /dev/null
+++ b/src/thread/interceptThread.pas
@@ -0,0 +1,168 @@
+{------------------------------------------------------------------------------}
+{单元名称:interceptThread.pas                                                 }
+{模块名称:计算截距线程                                                        }
+{模块说明:线程创建后自动运行,完成一次含水率检验,共三次                      }
+{建立日期:2025-01-15                                                          }
+{修改修改:2025-01-20                                                          }
+{版权所有:李良庭 liangtingli@outlook.com                                      }
+{------------------------------------------------------------------------------}
+unit interceptThread;
+
+interface
+
+uses
+  Windows, Classes, SysUtils, PubUtils, DateUtils, sBitBtn, ActuatorLib;
+
+type
+  TInterceptThread = class(TThread)
+  private
+    { Private declarations }
+    t_ret : Integer;                //返回值
+    t_nDatas : array[0..3] of Word; //暂存水分仪数据
+    t_faultCode : Word;             //水分仪故障码
+
+    procedure UpdateStartClock;
+    procedure UpdateStopClock;
+    procedure UpdateTest;
+    procedure UpdateTestError;
+    procedure UpdateFaultCode;
+    procedure UpdateCaption;
+  protected
+    procedure StartIntercept();
+    procedure Execute; override;
+  public
+    constructor Create(param: Boolean=false);
+    procedure Terminate;
+  end;
+
+implementation
+
+uses
+  uMain, uDM, uInit, uSaveData, Global, log4me;
+
+{ TInterceptThread }
+
+//--------线程初始化----------------------------------------
+//线程初始化
+constructor TInterceptThread.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 TInterceptThread.Terminate;
+begin
+  inherited;
+  m_InterceptThread := 0;        //清理线程句柄
+end;
+
+//--------界面处理函数--------------------------------------
+//计数器开始
+procedure TInterceptThread.UpdateStartClock;
+begin
+  //启动检测计时器动画
+  glStartTest := GetMillisecondTimeStamp;
+  dm.tmInter.Enabled := true;
+end;
+
+//计数器结束
+procedure TInterceptThread.UpdateStopClock;
+begin
+  dm.tmInter.Enabled := false;
+  frmMain.mtInterClock.Value := 0;
+end;
+
+//正常显示--执行检测
+procedure TInterceptThread.UpdateTest;
+begin
+  frmMain.lblInter.Caption := '检测一组水分成功!';
+end;
+
+//出错显示
+procedure TInterceptThread.UpdateTestError;
+begin
+  frmMain.lblInter.Caption := '检测失败,水分仪故障!';
+end;
+
+//更新故障码
+procedure TInterceptThread.UpdateFaultCode;
+begin
+  RefashFaultCode(t_faultCode);
+end;
+
+//更新检测结果到界面
+procedure TInterceptThread.UpdateCaption;
+var
+  nMois : double;
+  x0,x1,x2,x3,x4 : double;
+begin
+  //初始化系数
+  x0 := StrToFloat(Grain.coef[0]);
+  x1 := StrToFloat(Grain.coef[1]);
+  x2 := StrToFloat(Grain.coef[2]);
+  x3 := StrToFloat(Grain.coef[3]);
+  x4 := StrToFloat(Grain.coef[4]);
+
+  //计算含水率
+  {nMois := (x0 +
+            (x1 * t_nDatas[0]) +
+            (x2 * t_nDatas[0] * t_nDatas[0]) +
+            (x3 * t_nDatas[0] * t_nDatas[0] * t_nDatas[0]) );
+            (x4 * t_nDatas[0] * t_nDatas[0] * t_nDatas[0] * t_nDatas[0])); }
+  nMois := CalcValue(t_nDatas[0], x0,x1,x2,x3,x4);
+
+  with frmMain do begin
+    case glBtnTag1 of
+      1: edtInter1.Text := FloatToStr(nMois);
+      2: edtInter2.Text := FloatToStr(nMois);
+      3: edtInter3.Text := FloatToStr(nMois);
+    end;
+  end;
+end;
+
+//------- 执行线程 ----------------------------------------
+procedure TInterceptThread.StartIntercept();
+begin
+  //下发水分仪启动指令
+  Synchronize(UpdateStartClock);
+  t_ret := SendCommands(hWrDev, WR_DETECT, 0, glTime2);
+  Synchronize(UpdateStopClock);
+
+  //计算和输出
+  if t_ret<>0 then
+    Synchronize(UpdateTestError)
+  else begin
+    //输出一组含水率值(这里不加截距)
+    //0-电压、1-重量、2-温度、3-湿度
+    t_ret := ReadDatas(hWrDev, @t_nDatas);
+    Synchronize(UpdateTest);
+    Synchronize(UpdateCaption);
+  end;
+
+  //检查水分仪故障码
+  ReadFaultCode(hWrDev, @t_faultCode);
+  Synchronize(UpdateFaultCode);
+end;
+
+//------- 线程入口 ----------------------------------------
+procedure TInterceptThread.Execute;
+begin
+  { Place thread code here }
+  try
+    //执行截距调整代码
+    StartIntercept();
+    //防止线程阻塞CPU
+    Sleep(1000);
+  finally
+    //销毁线程
+    Terminate;
+  end;
+end;
+end.

--
Gitblit v1.9.3