SourceCode/Bond/SGMeasurement/SGMeasurementDlg.cpp
@@ -130,6 +130,8 @@
      m_bTrayIconCreated = FALSE;
   }
   m_plcListener.Stop();
   DestroyWindow();
   CDialogEx::OnClose();
}
@@ -245,7 +247,7 @@
   strFullLogLine.Format(_T("%s %s"), strLevel, strContent);
   // 写入日志文件
   // LOG_LINE(strFullLogLine);
   LOG_LINE(strFullLogLine);
}
void CSGMeasurementDlg::HighlightAllMatches(const CString& strSearch, COLORREF clrHighlight/* = RGB(255, 165, 0)*/)
@@ -637,7 +639,8 @@
   fAvg1 = CalcAverage(vecGlass1);
   fAvg2 = CalcAverage(vecGlass2);
   fOffset = std::fabs(fAvg2 - fAvg1);  // 第二片 - 第一片
   fOffset = fAvg2 - fAvg1;            // 第二片 - 第一片
   //fOffset = std::fabs(fAvg2 - fAvg1);   // 第二片 - 第一片
   CString strLog;
   strLog.Format(_T("第一片玻璃平均值: %.3f,第二片玻璃平均值: %.3f,偏移量: %.3f"), fAvg1, fAvg2, fOffset);
@@ -758,10 +761,10 @@
   vecBuffer.resize(nReceived);
   CleanInvalidValuesInPlace(nOutNo, vecBuffer);
   std::vector<float> vecGlass1, vecGlass2;
    std::vector<float> vecGlass1, vecGlass2;
   if (!SplitGlassSegments(nOutNo, vecBuffer, vecGlass1, vecGlass2, m_fJumpThreshold, m_nJumpWindow, m_nValleyMargin, m_nMinGlass1Count)) {
      AppendLogLineRichStyled(_T("未能识别出两片玻璃的数据。"), LOG_COLOR_WARNING);
      return -1.0f;
      return -1.0f;
   }
   std::vector<float> vecGlass1Filtered, vecGlass2Filtered;
@@ -880,6 +883,66 @@
   // 初始化IP地址控件,设置为默认IP地址
   ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS))->SetAddress(192, 168, 0, 10);
   // 设置 PLC 监听器的日志回调函数
   m_plcListener.SetLogCallback([this](const CString& msg, int type) {
      if (type == -1) {
         AppendLogLineRichStyled(msg, LOG_COLOR_ERROR);
      }
      else if (type == 0) {
         AppendLogLineRichStyled(msg, LOG_COLOR_SUCCESS);
      }
      else if (type == 1) {
         AppendLogLineRichStyled(msg, LOG_COLOR_WARNING);
      }
      else if (type == 2) {
         AppendLogLineRichStyled(msg, LOG_COLOR_NORMAL);
      }
   });
   // 初始化 PLC 监听器
   m_plcListener.Initialize(StationIdentifier(0, 255), 200);
   // 设置 PLC 监听器的开始采集回调函数
   m_plcListener.SetStartCallback([this]() {
      if (!m_bConnected) {
         ConnectToDevice();
      }
      if (InitDataStorage()) {
         StartDataStorage();
         UpdateControlStatus(m_bConnected, m_bSaving);
      }
   });
   // 设置 PLC 监听器的停止采集回调函数
   m_plcListener.SetStopCallback([this]() {
      StopDataStorage();
      UpdateControlStatus(m_bConnected, m_bSaving);
   });
   // 设置 PLC 监听器的分析回调函数
   m_plcListener.SetAnalyzeCallback([this]() {
      if (!m_bConnected) {
         AppendLogLineRichStyled(_T("设备未连接,请先连接设备。"), LOG_COLOR_WARNING);
         return std::array<double, 4>{ -1.0, -1.0, -1.0, -1.0 };
      }
      std::array<double, 4> result;
      for (int i = 0; i < 4; ++i) {
         result[i] = AnalyzeStoredData(i + 1); // OUT1 ~ OUT4
      }
      if (std::any_of(result.begin(), result.end(), [](double v) { return v < 0; })) {
         AppendLogLineRichStyled(_T("分析失败,某些输出端口数据无效。"), LOG_COLOR_ERROR);
         return std::array<double, 4>{ -1.0, -1.0, -1.0, -1.0 };
      }
      CString strLog;
      strLog.Format(_T("分析结果:OUT1: %.3f, OUT2: %.3f, OUT3: %.3f, OUT4: %.3f"), result[0], result[1], result[2], result[3]);
      return result;
   });
   m_plcListener.Start();
   // 初始化日志框
   AppendLogLineRichStyled(_T("准备就绪..."), LOG_COLOR_SUCCESS);