64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
#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);
|
||
};
|
||
|