108 lines
3.6 KiB
Plaintext
108 lines
3.6 KiB
Plaintext
#include <eqpalg/utility/sample_utilites.h>
|
|
namespace utility {
|
|
|
|
/**
|
|
* @brief 判断样本是否应该报警
|
|
* @param sample 总采样信息
|
|
* @param real_value 输入的实际值
|
|
* @param diff 运行的差值
|
|
* @return true 样本应报警
|
|
* @return false 样本不应报警
|
|
*/
|
|
bool is_alarm_value(SampleTrendAnalysis *sample, double real_value,
|
|
double diff) {
|
|
bool ret_flag = false;
|
|
if (sample->HaveSample()) {
|
|
switch (sample->JudgeMode()) {
|
|
case JUDGE_MODE::DIFFERENCE:
|
|
if (fabs(fabs(real_value) -
|
|
fabs(sample->GetProperty()->data.abs_diff.avg)) > diff) {
|
|
ret_flag = true;
|
|
}
|
|
break;
|
|
case JUDGE_MODE::PRCENTAGE:
|
|
if (fabs(fabs(real_value) -
|
|
fabs(sample->GetProperty()->data.abs_diff.avg)) /
|
|
fabs(sample->GetProperty()->data.abs_diff.avg) >
|
|
diff) {
|
|
ret_flag = true;
|
|
}
|
|
break;
|
|
case JUDGE_MODE::NORMAL:
|
|
if (real_value > sample->GetProperty()->data.normal_cfdi.up ||
|
|
real_value < sample->GetProperty()->data.normal_cfdi.low) {
|
|
ret_flag = true;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return ret_flag;
|
|
}
|
|
|
|
/**
|
|
* @brief 判断样本是否应该报警 *无报警下限,适用于样本判断偏差是否合法的算法
|
|
* @param sample 总采样信息
|
|
* @param real_value 输入的实际值
|
|
* @param diff 运行的差值
|
|
* @return true 样本应报警
|
|
* @return false 样本不应报警
|
|
*/
|
|
bool is_alarm_value_no_down_lim(SampleTrendAnalysis *sample, double real_value,
|
|
double diff) {
|
|
bool ret_flag = false;
|
|
if (sample->HaveSample()) {
|
|
switch (sample->JudgeMode()) {
|
|
case JUDGE_MODE::DIFFERENCE:
|
|
if (fabs(fabs(real_value) -
|
|
fabs(sample->GetProperty()->data.abs_diff.avg)) > diff &&
|
|
fabs(real_value) - fabs(sample->GetProperty()->data.abs_diff.avg) >
|
|
0) {
|
|
ret_flag = true;
|
|
}
|
|
break;
|
|
case JUDGE_MODE::PRCENTAGE:
|
|
if (fabs(fabs(real_value) -
|
|
fabs(sample->GetProperty()->data.abs_diff.avg)) /
|
|
fabs(sample->GetProperty()->data.abs_diff.avg) >
|
|
diff &&
|
|
(fabs(real_value) - fabs(sample->GetProperty()->data.abs_diff.avg)) >
|
|
0) {
|
|
ret_flag = true;
|
|
}
|
|
break;
|
|
case JUDGE_MODE::NORMAL:
|
|
if (real_value > sample->GetProperty()->data.normal_cfdi.up) {
|
|
ret_flag = true;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return ret_flag;
|
|
}
|
|
|
|
/**
|
|
* @brief 产生样本描述
|
|
* @param sample 总样本信息
|
|
* @param real_value 输入的实际值
|
|
* @param diff 合法区间
|
|
* @return string 产生的样本描述
|
|
*/
|
|
string generate_sample_describe(SampleTrendAnalysis *sample, double real_value,
|
|
double diff) {
|
|
string value = " 实际值:" + to_string(real_value);
|
|
if (sample->JudgeMode() == JUDGE_MODE::DIFFERENCE) {
|
|
value += " 区间[" +
|
|
to_string(sample->GetProperty()->data.abs_diff.avg - diff) + "," +
|
|
to_string(sample->GetProperty()->data.abs_diff.avg + diff) + "]";
|
|
} else if (sample->JudgeMode() == JUDGE_MODE::PRCENTAGE) {
|
|
value += " 基准值:" + to_string(sample->GetProperty()->data.abs_diff.avg) +
|
|
"," + to_string(diff * 100) + "%";
|
|
} else if (sample->JudgeMode() == JUDGE_MODE::NORMAL) {
|
|
value += " 区间[" + to_string(sample->GetProperty()->data.normal_cfdi.low) +
|
|
"," + to_string(sample->GetProperty()->data.normal_cfdi.up) + "]";
|
|
}
|
|
return value;
|
|
}
|
|
} |