eis/eqpalg/.do_not_use/otheralg/exp_material.cpp

121 lines
4.3 KiB
C++
Raw Permalink Normal View History

/******************************************************************************************************************
* Action instruction algorithm
*
* arg[0] data determination expression
*
*
*
* 1.0 2020-12-17 zoufuzhou
******************************************************************************************************************/
#include <eqpalg/algs/exp_material.h>
#include <eqpalg/utility/build_alarm_info.h>
#include <eqpalg/utility/equip_prod.h>
#include <mix_cc/ihyper_db/utility.h>
#include <mix_cc/type/mix_time.h>
#include <map>
#include <memory>
#include <string>
#include <utility>
/**
* @brief
* @return int
*/
int ExpMaterial::init() {
int ret = 0;
try {
Exp::init();
pmem_trk_ = std::make_unique<CMemTrk>();
m_entId = (*pmem_trk_)(m_zone)->entId;
m_startpos = -1;
this->data_source_ = DataSource::MEMORY;
m_zone = rule_json_.at("action_condition").at("zone").at(1).get<int64>();
} catch (const std::exception& e) {
std::throw_with_nested(
mix_cc::Exception(-1, "load error", BOOST_CURRENT_LOCATION));
}
return ret;
}
ExpMaterial::ExpMaterial(const string& name, const mix_cc::json& rule_json,
const string& ruleId)
: Exp(name, rule_json, ruleId, 1) {
logger_.reset(new LOG("ExpMaterial:" + rule_name_, AUTO_CATCH_PID));
}
ExpMaterial::~ExpMaterial() {}
AlarmInfo ExpMaterial::mon_proc() {
AlarmInfo now_alarm;
try {
act_triggered_ = exp_act_->evaluate();
// logger_->Debug() << "act_triggered_:" << exp_str_ << "=" <<
// act_triggered_
// << endl;
if (static_cast<bool>(act_triggered_)) {
this->print_exp_vars(exp_str_);
// 获得钢卷信息同CPC算法
string entId = (*pmem_trk_)(m_zone)->entId;
if (m_startpos >= 0 && entId != m_entId) {
m_endpos = (*pmem_trk_).getHistory(m_zone, CS_TRK::BEFORE)->wplen;
if (m_endpos < 1000) {
logger_->Warn() << " end pos is zero " << endl;
m_endpos = 1500;
}
auto msg = rule_name_ + " 钢卷:" + m_entId + "位置m[" +
std::to_string(m_startpos / 1000) + "," +
std::to_string(m_endpos / 1000) + "T]," +
rule_json_.at("action_condition")
.at("error")
.at(1)
.get<std::string>();
logger_->Debug() << msg << endl;
now_alarm =
utility::build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_,
"EXP_MAT", msg, query_time_range_);
utility::equip_prod(
rule_id_, m_entId, m_startpos, m_endpos,
SingletonTemplate<
GlobaltemSharedMemory>::GetInstance()["D122_FUR_SPEED"]);
m_startpos = -1;
} else if (m_startpos < 0) {
m_startpos = (*pmem_trk_)(m_zone)->wplen;
m_entId = (*pmem_trk_)(m_zone)->entId;
auto msg = rule_name_ + "start 钢卷:" + m_entId +
"位置m:" + std::to_string(m_startpos / 1000) +
rule_json_.at("action_condition")
.at("error")
.at(1)
.get<std::string>();
logger_->Debug() << msg << endl;
}
} else if (m_startpos >= 0) {
int m_endpos = (*pmem_trk_)(m_zone)->wplen;
auto msg = rule_name_ + " 钢卷:" + m_entId + "位置m[" +
std::to_string(m_startpos / 1000) + "," +
std::to_string(m_endpos / 1000) + "]," +
rule_json_.at("action_condition")
.at("error")
.at(1)
.get<std::string>();
logger_->Debug() << msg << endl;
now_alarm =
utility::build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_,
"EXP_MAT", msg, query_time_range_);
utility::equip_prod(
rule_id_, m_entId, m_startpos, m_endpos,
SingletonTemplate<
GlobaltemSharedMemory>::GetInstance()["D122_FUR_SPEED"]);
m_startpos = -1;
} else {
m_startpos = -1;
m_entId = (*pmem_trk_)(m_zone)->entId;
}
} catch (const std::exception& e) {
std::throw_with_nested(
mix_cc::Exception(-1, "calc_once error", BOOST_CURRENT_LOCATION));
}
return now_alarm;
}