eis/eqpalg/.do_not_use/unused_algs/AlgCarLimit.cpp

137 lines
4.6 KiB
C++

#include <T_LEN_FEEDBACK.h>
#include <T_TIME_SET.h>
#include <base/BitTool.h>
#include <eqpalg/algs/AlgCarLimit.h>
#include <glob/ProxyMag.h>
#include <utility/StringHelper.h>
/*****************************************/
extern std::map<std::string, ITEM> glob_items;
int AlgCarLimit::init() {
LOG d("AlgCarLimit::init", AUTO_CATCH_PID);
int ret = 0;
try {
// p_tele->ReBuild(event_no_of_item[m_tags[0]]);
// p_btel->ReBuild(1010);
// change v2
// mp_timeset = new
// CMemTable<T_TIME_SET::STR_T_TIME_SET>("T_LOV_TAB1", 999);
} catch (const std::exception &e) {
d.Error() << mix_cc::get_nested_exception(e) << std::endl;
ret = -1;
}
// CMemTable<PLC_DATA>
// tele(std::to_string(event_no_of_item[m_tags[0]]), 1);
// (*p_tele).ReBuild(event_no_of_item[m_tags[0]], *tele());
pre_limit_pos = glob_items[m_tags[2]].value;
return ret;
}
AlgCarLimit::AlgCarLimit(const string name, const Json::Value rulejson,
const string ruleId)
: AlgBase(name, rulejson, ruleId) {
this->init();
}
AlgCarLimit::~AlgCarLimit() {}
int AlgCarLimit::calculate(string &outjson) {
LOG d("AlgCarLimit::calculate", AUTO_CATCH_PID);
outjson = "";
int sta_pos[2] = {4094, 4500};
int ret = 0;
try {
//"小车走形位置实际值",
//"小车速度",
//"限位位置"
int itmp[3];
// for(int i = 0;i<3;i++)
// {
// if(i == 0 || event_no_of_item[m_tags[i]] != event_no_of_item[m_tags[i-1]])
// {
// CMemTable<PLC_DATA>
// tele(std::to_string(event_no_of_item[m_tags[0]]), 1);
// (*p_tele).ReBuild(event_no_of_item[m_tags[0]], *tele());
// itmp[i]= (*p_tele)[m_tags[i]];
// }
// itmp[i]= (*p_tele)[m_tags[i]];
// }
m_act_pos = glob_items[m_tags[0]].value;
m_speed = glob_items[m_tags[1]].value;
m_limit_pos = glob_items[m_tags[2]].value;
HD3TimeRegion timeRegion;
timeRegion.left.nSec = time(0);
timeRegion.right.nSec = time(0);
if (m_speed > 0 && (pre_limit_pos == 0 && m_limit_pos == 1)) {
d.Debug() << "m_act_pos:" << m_act_pos << " m_speed:" << m_speed
<< " m_limit_pos:" << endl;
if (abs(m_act_pos - sta_pos[0]) >
m_json_param["limt_alarm"]["value"][1].asDouble()) {
string msg = rule_name_ +
"::" + m_json_param["limt_alarm"]["name"][1].asString() +
":" + m_json_param["limt_alarm"]["content"][1].asString() +
"统计,实际[" + std::to_string(sta_pos[0]) +
"," + std::to_string(m_act_pos) + "]";
// d.Debug() << "|MSG|" << msg << endl;
outjson = this->build_alarm_info(MsgLevel::WARN, rule_id_, rule_name_,
"CAR_LIMIT", msg, timeRegion);
this->submitDataBase(m_act_pos);
}
} else if (m_speed < 0 && (pre_limit_pos == 0 && m_limit_pos == 1)) {
d.Debug() << "m_act_pos:" << m_act_pos << " m_speed:" << m_speed
<< " m_limit_pos:" << endl;
if (abs(m_act_pos - sta_pos[0]) >
m_json_param["limit_error"]["value"][1].asDouble()) {
string msg =
rule_name_ + "::" + m_json_param["limit_error"]["name"][1].asString() +
":" + m_json_param["limit_error"]["content"][1].asString() +
"统计,实际[" + std::to_string(sta_pos[0]) + "," +
std::to_string(m_act_pos) + "]";
// d.Debug() << "|MSG|" << msg << endl;
outjson = this->build_alarm_info(MsgLevel::WARN, rule_id_, rule_name_,
"CAR_LIMIT", msg, timeRegion);
this->submitDataBase(m_act_pos);
}
}
pre_limit_pos = m_limit_pos;
} catch (const std::exception &e) {
d.Error() << mix_cc::get_nested_exception(e) << std::endl;
ret = -1;
}
return ret;
}
int AlgCarLimit::submitDataBase(long long actpos) {
LOG d("AlgCarLimit::submitDataBase", AUTO_CATCH_PID);
try {
short direction = 1;
if (m_speed < 0) {
direction = -1;
}
char cBuffer[16] = "";
time_t t;
time(&t);
strftime(cBuffer, sizeof(cBuffer), "%Y%m%d%H%M%S", localtime(&t));
T_LEN_FEEDBACK lfbDB;
lfbDB.initInsertKeys(cBuffer, this->m_tags[2].c_str(), direction);
lfbDB.set_chinese(
this->m_json_param["limit_error"]["content"][1].asCString());
lfbDB.set_interval(actpos);
lfbDB.set_flag(1);
lfbDB.insertDB();
lfbDB.dbCommit();
} catch (const std::exception &e) {
d.Error() << mix_cc::get_nested_exception(e) << std::endl;
}
return 0;
}