#include #include #include #include // std::map event_no_of_item; int AlgTorque::init() { LOG d("AlgTorque::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; } AlgTorque::AlgTorque(const string name, const Json::Value rulejson, const string ruleId) : AlgBase(name, rulejson, ruleId) { this->init(); m_curr = this->mstime(); int dltime = m_json_param["interval"]["time"][1].asInt(); m_start = m_curr - dltime; m_end = m_curr - dltime; this->set_cycle_time(max(50, m_json_param["interval"]["time"][1].asInt() / 2)); } AlgTorque::~AlgTorque() {} int AlgTorque::calculate(string &outjson) { LOG d("AlgTorque::calculate", AUTO_CATCH_PID); outjson = ""; int ret = 0; try { m_curr = this->mstime(); int dltime = m_json_param["interval"]["time"][1].asInt(); if (m_curr - m_end < dltime) { // d.Debug() << " 时间间隔太小! " << endl; return 0; } else { m_start = m_end; m_end = m_curr; } HD3TimeRegion timeRegion; timeRegion.left.nSec = m_start / 1000; timeRegion.left.nSec = m_end / 1000; bool m_flag = true; double m_min = 0.0, m_max = 0.0; for (unsigned int i = 0; i < m_tags.size() - 1; i++) { m_max = ihd_tools_->StatsTag(m_tags[i], m_start, m_end, HD3_STATS_TYPE_MAX); m_min = ihd_tools_->StatsTag(m_tags[i], m_start, m_end, HD3_STATS_TYPE_MIN); if (m_max - m_min >= 5) { m_flag = false; break; } } if (m_flag) { m_max = ihd_tools_->StatsTag(m_tags[2], m_start, m_end, HD3_STATS_TYPE_MAX); m_min = ihd_tools_->StatsTag(m_tags[2], m_start, m_end, HD3_STATS_TYPE_MIN); // d.Debug() << " max : " << m_max << " min : " << m_min << endl; if (m_max - m_min > m_json_param["limit_error"]["value"][1].asDouble()) { string msg = m_json_param["limit_error"]["content"][1].asString() + " 转矩变化值为" + std::to_string(m_max - m_min) + ",阈值为" + std::to_string(m_json_param["limit_error"]["value"][1].asDouble()); d.Debug() << msg << endl; string tmp = this->build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_, "TORQUE", msg, timeRegion); if (!tmp.empty()) outjson = tmp; } // else d.Debug() << rule_name_ << " 数据正常! " << endl; } else { // d.Debug() << rule_name_ << " 数据正常! " << endl; } } catch (const std::exception &e) { d.Error() << mix_cc::get_nested_exception(e) << std::endl; ret = -1; } return ret; }