#pragma once #include "pch.h" // WDA校正功能类 // 用于执行WDA传感器的自动校准流程 class WDACalibration { public: WDACalibration(); ~WDACalibration(); // 执行WDA校正流程 // 参数: // pSerialPort - 串口指针(必须已打开) // dTemperature - 校准温度(单位:℃) // 返回: // 0 - 成功 // 1 - 串口未打开 // 2 - 发送命令失败(重试次数过多) // 3 - 接收响应超时(重试次数过多) // 4 - 响应无效(重试次数过多) // 5 - 未知错误 // 注意:WDA工作状态检查由调用者(IrisSensor_WDA_P0)负责,错误码2由调用者返回 int ExecuteCalibration(QSerialPort* pSerialPort, double dTemperature); private: // 校正状态枚举 enum CalibrationState { Calib_Idle, Calib_Step1_TC0, Calib_Step2_KY18_First, Calib_Step3_AC_First, Calib_Step4_KY18_Second, Calib_Step5_AC_Second, Calib_Step6_Restore_KY18, Calib_Step7_Restore_TC }; // 发送校正命令 int SendCalibrationCommand(QSerialPort* pSerialPort, const std::string& sCommand); // 接收校正响应 int RecvCalibrationResponse(QSerialPort* pSerialPort, std::string& sResponse, int iTimeoutMs = 5000); // 检查响应是否匹配当前步骤 bool CheckCalibrationResponse(const std::string& sResponse, CalibrationState eStep); // 检查校正是否完成 bool CheckCalibrationComplete(const std::string& sResponse); // 从响应中提取AC值 std::string ExtractACValues(const std::string& sResponse); // 检查所有值是否小于10 bool AllValuesLessThan10(const std::string& sACValues); // 执行单个校正步骤 // 返回:0-成功,非0-失败 // sResponse:输出参数,接收到的响应(仅在成功时有效) int ExecuteCalibrationStep(QSerialPort* pSerialPort, CalibrationState eStep, const std::string& sTempValue, int& iRetryCount, int& iTryCount, std::string& sResponse); };