137 lines
4.6 KiB
C++
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;
|
||
|
|
}
|