#include #include #include #include extern std::map glob_items; int AlgLoopLen::init() { LOG d("AlgLoopLen::init", AUTO_CATCH_PID); int ret = 0; try { } catch (const std::exception &e) { d.Error() << mix_cc::get_nested_exception(e) << std::endl; ret = -1; } return ret; } AlgLoopLen::AlgLoopLen(const string name, const Json::Value rulejson, const string ruleId) : AlgBase(name, rulejson, ruleId) { // CMemTable mod1("ZONE0",1); // gb_data = mod1(); this->init(); m_start = -1; looplen_start = 0.0; } AlgLoopLen::~AlgLoopLen() {} int AlgLoopLen::calculate(string &outjson) { LOG d("AlgLoopLen::calculate", AUTO_CATCH_PID); outjson = ""; int ret = 0; try { // m_tags[0] : 套量编码器信号 // m_tags[1] : 速度信号 if (m_start > 0) { time_t m_curr = this->mstime(); HD3TimeRegion timeRegion; timeRegion.left.nSec = m_start / 1000; timeRegion.left.nSec = m_curr / 1000; if (m_curr - m_start < m_json_param["delay"]["time"].asInt()) { return 0; } double looplen_end = glob_items[m_tags[0]].value; if (fabs(looplen_end - looplen_start) < m_json_param["limit_alarm"]["value"][1].asDouble()) { string msg = m_json_param["limit_alarm"]["content"][1].asString() + " " + "当前套量变化幅度为" + std::to_string(fabs(looplen_end - looplen_start)); string tmp = this->build_alarm_info(MsgLevel::WARN, rule_id_, rule_name_, "LOOPLEN", msg, timeRegion); if (!tmp.empty()) outjson = tmp; } else if (fabs(looplen_end - looplen_start) < m_json_param["limit_error"]["value"][1].asDouble()) { string msg = m_json_param["limit_error"]["content"][1].asString() + " " + "当前套量变化幅度为" + std::to_string(fabs(looplen_end - looplen_start)); string tmp = this->build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_, "LOOPLEN", msg, timeRegion); if (!tmp.empty()) outjson = tmp; } else { // d.Debug() << rule_name_ << " 数据正常! " << endl; } m_start = -1; } else { double speed = glob_items[m_tags[1]].value; if (fabs(speed) > EPS) { m_start = this->mstime(); } } } catch (const std::exception &e) { d.Error() << mix_cc::get_nested_exception(e) << std::endl; ret = -1; } return ret; }