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

121 lines
4.3 KiB
C++
Raw Permalink 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.

/******************************************************************************************************************
* 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;
}