eis/eqpalg/algs/roller3.h

93 lines
2.2 KiB
C
Raw Normal View History

#pragma once
/**
* @file roller3.h
* @brief
* @author your name (you@domain.com)
* @version 0.1
* @date 2026-01-12
*
* Copyright: Baosight Co. Ltd.
* DO NOT COPY/USE WITHOUT PERMISSION
*
*/
#include <array>
#include <eqpalg/algs/exp_base.h>
#include <eqpalg/define/public.h>
#include <map>
#include <utility>
namespace HoldState {
enum class AlarmState { None = 0, DownLower, UpHigher };
enum class AlarmType { Warn = 0, Error };
struct StateInfo {
TimePoint last_start_time = std::chrono::system_clock::now();
AlarmState last_alarm_tate =
AlarmState::None;
AlarmType alarm_type = AlarmType::Error;
};
}
using std::string;
class Roller3 : public ExpBase {
public:
Roller3(const string &name, const mix_cc::json &rule_json,
const string &ruleId, size_t exp_type);
virtual ~Roller3();
public:
int init() override;
virtual AlarmInfo mon_proc() override;
std::vector<AlarmInfo> exec_task(mix_cc::time_range_t time_range) override;
private:
double limit_error_;
double limit_warn_;
double median_;
vector<double> deviations_;
vector<double> values_;
vector<int> tag_seq_;
string tags_exp_;
int value_num_ = 0;
vector<int>
is_zero_list_;
std::map<int, HoldState::StateInfo> state_info_map_;
private:
int init_X_exp();
void print_load_content();
/**
* @brief
* @param expr My Param doc
* @return vector<int>
*/
vector<int> extractTagNumbers(const string &expr);
/**
* @brief
* @param data My Param doc
* @return double
*/
double calculateMedian(std::vector<double> data);
/**
* @brief maxmax数据的下标和值
*/
std::pair<int, double> findMaxWithIndex(const std::vector<double> &vec);
/**
* @brief Get the up down object
* @param value My Param doc
* @param is_up
* @return double
*/
double get_up_down(const double &value, bool is_up);
/**
* @brief
* @param value
* @return AlarmState None = 0, DownLower, median_
*/
HoldState::AlarmState detect_up_down(const double &value);
};