Files
airborne_CO2/Source/WDA/WDACalibration.h
2026-01-08 16:00:08 +08:00

64 lines
1.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
};