3 Commits

Author SHA1 Message Date
lnk
45d139e628 最多只记录一次原始数据 2026-07-14 14:20:23 +08:00
lnk
111ffa36bd 数据追踪原始报告块 2026-07-07 16:32:48 +08:00
lnk
d78cef25a0 数据追踪增加接线方式和来源 2026-07-03 14:43:13 +08:00
6 changed files with 229 additions and 31 deletions

View File

@@ -32,10 +32,12 @@
#include <QMutexLocker> #include <QMutexLocker>
#include <QMapIterator> #include <QMapIterator>
#include <QStringList> #include <QStringList>
#include <QByteArray>
#include <QList>
// ★MOD: 全局追踪表mp_id -> remaining times //全局追踪表mp_id -> rpt_no -> remaining times
static QMutex g_trace_mutex; static QMutex g_trace_mutex;
static QHash<QString, int> g_trace_map; static QHash<QString, QHash<int, int> > g_trace_map;
///////////////////////////////////////////////////lnk2024-10-21//////////////////////////////////////////////////////// ///////////////////////////////////////////////////lnk2024-10-21////////////////////////////////////////////////////////
extern void SendJsonAPI_web(const std::string& strUrl, const char* code, const std::string& json, char** ptr); extern void SendJsonAPI_web(const std::string& strUrl, const char* code, const std::string& json, char** ptr);
@@ -258,36 +260,77 @@ static QString escape_json_string(const QString& s)
return out; return out;
} }
// 打开追踪:次数 times比如 5 // 打开追踪:每个报告各追踪一次
void process_trace_command(const std::string& id, int times) void process_trace_command(const std::string& id, int times)
{ {
if (times <= 0) return; (void)times;
QString qid = QString::fromStdString(id).trimmed(); QString qid = QString::fromStdString(id).trimmed();
if (qid.isEmpty()) return; if (qid.isEmpty()) return;
QList<int> rpt_nos;
QByteArray qid_bytes = qid.toLocal8Bit();
pthread_mutex_lock(&mtx);
LD_info_t *ld_info = find_LD_info_only_from_mp_id(qid_bytes.data());
if (ld_info != NULL && ld_info->rptinfo != NULL && ld_info->rptcount > 0) {
for (int i = 0; i < ld_info->rptcount; ++i) {
if (ld_info->rptinfo[i] == NULL)
continue;
int rpt_no = ld_info->rptinfo[i]->rptNo;
if (!rpt_nos.contains(rpt_no))
rpt_nos.append(rpt_no);
}
}
pthread_mutex_unlock(&mtx);
if (rpt_nos.isEmpty()) {
cout << "[TRACE] mp_id=" << id << " has no report info" << endl;
return;
}
QMutexLocker lk(&g_trace_mutex); QMutexLocker lk(&g_trace_mutex);
g_trace_map[qid] = times; // 重新打开就覆盖/重置次数 QHash<int, int>& rpt_map = g_trace_map[qid];
for (int i = 0; i < rpt_nos.size(); ++i) {
int rpt_no = rpt_nos.at(i);
rpt_map[rpt_no] = 1;
cout << "[TRACE] mp_id=" << id << " add rpt_no=" << rpt_no
<< " left=" << rpt_map.value(rpt_no) << endl;
}
} }
// 查询是否要追踪 // 查询是否要追踪
static bool trace_is_enabled(const QString& mp_id) static bool trace_is_enabled(const QString& mp_id, int rpt_no)
{ {
QMutexLocker lk(&g_trace_mutex); QMutexLocker lk(&g_trace_mutex);
auto it = g_trace_map.constFind(mp_id); QHash<QString, QHash<int, int> >::const_iterator mp_it = g_trace_map.constFind(mp_id);
return (it != g_trace_map.constEnd() && it.value() > 0); if (mp_it == g_trace_map.constEnd())
return false;
QHash<int, int>::const_iterator rpt_it = mp_it.value().constFind(rpt_no);
return (rpt_it != mp_it.value().constEnd() && rpt_it.value() > 0);
} }
// 命中一次并扣减;扣到 0 自动删 // 命中一次并扣减;扣到 0 自动删
static void trace_hit_and_decrement(const QString& mp_id) static void trace_hit_and_decrement(const QString& mp_id, int rpt_no)
{ {
QMutexLocker lk(&g_trace_mutex); QMutexLocker lk(&g_trace_mutex);
auto it = g_trace_map.find(mp_id); QHash<QString, QHash<int, int> >::iterator mp_it = g_trace_map.find(mp_id);
if (it == g_trace_map.end()) return; if (mp_it == g_trace_map.end()) return;
int left = it.value(); QHash<int, int>::iterator rpt_it = mp_it.value().find(rpt_no);
if (rpt_it == mp_it.value().end()) return;
int left = rpt_it.value();
left -= 1; left -= 1;
if (left <= 0) g_trace_map.erase(it); if (left <= 0)
else it.value() = left; mp_it.value().erase(rpt_it);
else
rpt_it.value() = left;
if (mp_it.value().isEmpty())
g_trace_map.erase(mp_it);
} }
//追踪61850原始数据 //追踪61850原始数据
@@ -316,15 +359,20 @@ static QString build_mms_json_object(const json_block_data* data)
return json; return json;
} }
static QString build_trace_json(const json_block_data* data) static QString build_trace_json(const json_block_data* data, const char *v_wiring_type, const char *rpt_id, int rpt_no)
{ {
if (!data) return "{}"; if (!data) return "{}";
QString mms_json = build_mms_json_object(data); QString mms_json = build_mms_json_object(data);
QString wiring_type = v_wiring_type ? QString::fromLocal8Bit(v_wiring_type) : "";
QString rpt = rpt_id ? QString::fromLocal8Bit(rpt_id) : "";
QString json; QString json;
json += "{"; json += "{";
json += QString("\"mp_id\":\"%1\",").arg(escape_json_string(data->mp_id)); json += QString("\"mp_id\":\"%1\",").arg(escape_json_string(data->mp_id));
json += QString("\"v_wiring_type\":\"%1\",").arg(escape_json_string(wiring_type));
json += QString("\"rpt_id\":\"%1\",").arg(escape_json_string(rpt));
json += QString("\"rpt_no\":%1,").arg(rpt_no);
json += QString("\"func_type\":%1,").arg(data->func_type); json += QString("\"func_type\":%1,").arg(data->func_type);
json += QString("\"data_time\":%1,").arg(QString::number((qlonglong)data->time)); json += QString("\"data_time\":%1,").arg(QString::number((qlonglong)data->time));
json += QString("\"voltage_level\":\"%1\",").arg(QString::number(data->voltage_level, 'f', 6)); json += QString("\"voltage_level\":\"%1\",").arg(QString::number(data->voltage_level, 'f', 6));
@@ -335,13 +383,13 @@ static QString build_trace_json(const json_block_data* data)
return json; return json;
} }
static void send_trace_if_needed(json_block_data* pdata) static void send_trace_if_needed(json_block_data* pdata, const char *v_wiring_type, const char *rpt_id, int rpt_no)
{ {
const QString mp_id_q = pdata->mp_id; const QString mp_id_q = pdata->mp_id;
if (trace_is_enabled(mp_id_q)) { if (trace_is_enabled(mp_id_q, rpt_no)) {
// 1) 组 json // 1) 组 json
QString jsonText = build_trace_json(pdata); QString jsonText = build_trace_json(pdata, v_wiring_type, rpt_id, rpt_no);
// 2) 组 KafkaData // 2) 组 KafkaData
Ckafka_data_t KafkaData; Ckafka_data_t KafkaData;
@@ -355,9 +403,25 @@ static void send_trace_if_needed(json_block_data* pdata)
kafka_data_list_mutex.unlock(); kafka_data_list_mutex.unlock();
// 3) 次数 -1 // 3) 次数 -1
trace_hit_and_decrement(mp_id_q); trace_hit_and_decrement(mp_id_q, rpt_no);
} }
} }
int trace_json_block_data(char v_wiring_type[], json_block_data *data, const char *rpt_id, int rpt_no)
{
send_trace_if_needed(data, v_wiring_type, rpt_id, rpt_no);
return 1;
}
int trace_json_is_enabled(const char *mp_id, int rpt_no)
{
QString mp_id_q = mp_id ? QString::fromLocal8Bit(mp_id).trimmed() : "";
if (mp_id_q.isEmpty())
return 0;
return trace_is_enabled(mp_id_q, rpt_no) ? 1 : 0;
}
////////////////////////////////////////////////////////////////////////////////////////////lnk20250710添加频率值存储 ////////////////////////////////////////////////////////////////////////////////////////////lnk20250710添加频率值存储
struct mp_freq_save { struct mp_freq_save {
double G_FREQ; double G_FREQ;
@@ -1162,9 +1226,12 @@ void printCTopicList(const std::list<CTopic*>& ctopic_list) {
val->fValue); val->fValue);
} }
} }
break; // 只打印第一个 Item 的 SequenceList 和 DataValueList避免输出过多
} }
break; // 只打印第一个 Monitor 的 ItemList避免输出过多
} }
// 如果需要打印 SOEList可加以下 // 如果需要打印 SOEList可加以下
/* /*
int soeIndex = 0; int soeIndex = 0;
@@ -1217,9 +1284,6 @@ int transfer_json_block_data(char v_wiring_type[], json_block_data *data) //json
print_mms_str_map(data); print_mms_str_map(data);
} }
//数据追踪上送
send_trace_if_needed(data);
list<CTopic*> ctopic_list; list<CTopic*> ctopic_list;
////lnk2024-8-15 区分星型,角型接线 ////lnk2024-8-15 区分星型,角型接线
@@ -3763,4 +3827,3 @@ void Set_xml_nodeinfo_one(char* dev_type)
} }
} }

View File

@@ -74,6 +74,8 @@ public:
}; };
int transfer_json_block_data(char v_wiring_type[], json_block_data* data);//lnk2024-8-16添加参数 int transfer_json_block_data(char v_wiring_type[], json_block_data* data);//lnk2024-8-16添加参数
int trace_json_is_enabled(const char *mp_id, int rpt_no);
int trace_json_block_data(char v_wiring_type[], json_block_data* data, const char *rpt_id, int rpt_no);
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@@ -198,6 +198,7 @@ static QMap<int, QMap<int, QList<long long>>> real_data_report_map; //多个监
static QMap<QString, json_block_data*> json_data_map;//CZY 2023-08-17 ww 2023年3月13日17:23:17扩展Map用于保存各条线路的数据 static QMap<QString, json_block_data*> json_data_map;//CZY 2023-08-17 ww 2023年3月13日17:23:17扩展Map用于保存各条线路的数据
static QMap<QString, json_block_data*> json_flicker_data_map;//CZY 2023-09-11 展Map用于保存各条线路的闪变数据 static QMap<QString, json_block_data*> json_flicker_data_map;//CZY 2023-09-11 展Map用于保存各条线路的闪变数据
static QMap<QString, json_block_data*> json_pst_data_map;//CZY 2023-09-11 展Map用于保存各条线路的闪变数据 static QMap<QString, json_block_data*> json_pst_data_map;//CZY 2023-09-11 展Map用于保存各条线路的闪变数据
static QMap<QString, json_block_data*> json_trace_data_map;
//////////////////////////////////////////////////////////////////////////////lnk20260310文件控制 //////////////////////////////////////////////////////////////////////////////lnk20260310文件控制
pthread_mutex_t g_file_req_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t g_file_req_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -1539,7 +1540,7 @@ int parse_log(const std::string& json_str) {
} }
else if((level == "measurepoint") && (grade == "TRACE") && (!id.empty() && !is_blank(id))){ //数据追踪 else if((level == "measurepoint") && (grade == "TRACE") && (!id.empty() && !is_blank(id))){ //数据追踪
//打开监测点数据追踪开关 //打开监测点数据追踪开关
process_trace_command(id,3); //3表示追踪次数 process_trace_command(id,1); //每个报告各追踪1次
} }
else{ else{
std::cout << "type doesnt match" <<std::endl; std::cout << "type doesnt match" <<std::endl;
@@ -3633,6 +3634,119 @@ int json_block_create_data(char monid_char[], char* mms_str, double v, int flick
return TRUE; return TRUE;
} }
static QString json_trace_block_key(char monid_char[], int flicker_flag, int rpt_no)
{
QString key;
key.append(monid_char ? monid_char : "");
key.append("|");
key.append(QString::number(flicker_flag));
key.append("|");
key.append(QString::number(rpt_no));
return key;
}
static json_block_data* get_json_trace_block_data(char monid_char[], int flicker_flag, int rpt_no)
{
QString key = json_trace_block_key(monid_char, flicker_flag, rpt_no);
if (!json_trace_data_map.contains(key))
return NULL;
return json_trace_data_map.value(key);
}
static void init_json_trace_block_data(char monid_char[], char voltage_level[], int flicker_flag, int rpt_no)
{
QString key = json_trace_block_key(monid_char, flicker_flag, rpt_no);
json_block_data* pdata = NULL;
if (!json_trace_data_map.contains(key)) {
pdata = new json_block_data();
json_trace_data_map.insert(key, pdata);
}
pdata = json_trace_data_map.value(key);
pdata->monitorId = -1;
pdata->func_type = g_node_id;
pdata->flag = 0;
pdata->time = 0;
pdata->voltage_level = get_voltage_level(voltage_level);
pdata->mp_id = monid_char ? QString::fromLocal8Bit(monid_char) : QString("not define");
pdata->dev_type.clear();
pdata->mms_str_map.clear();
pdata->data_have_statistic = 0;
}
int json_trace_block_create_start(char voltage_level[], char monid_char[], int flicker_flag, char temcode[], int line_id, char v_wiring_type[], char rpt_id[], int rpt_no)
{
(void)v_wiring_type;
(void)rpt_id;
if (!trace_json_is_enabled(monid_char, rpt_no))
return 0;
try_start_kafka_thread();
init_json_trace_block_data(monid_char, voltage_level, flicker_flag, rpt_no);
json_block_data* pdata = get_json_trace_block_data(monid_char, flicker_flag, rpt_no);
if (pdata != NULL) {
pdata->dev_type.append(temcode ? temcode : "");
pdata->monitorId = line_id;
}
return TRUE;
}
int json_trace_block_create_time(char monid_char[], long long Time, int flicker_flag, char rpt_id[], int rpt_no)
{
(void)rpt_id;
json_block_data* pdata = get_json_trace_block_data(monid_char, flicker_flag, rpt_no);
if (pdata == NULL)
return 0;
pdata->time = Time;
return TRUE;
}
int json_trace_block_create_flag(char monid_char[], int flag, int flicker_flag, char rpt_id[], int rpt_no)
{
(void)rpt_id;
json_block_data* pdata = get_json_trace_block_data(monid_char, flicker_flag, rpt_no);
if (pdata == NULL)
return 0;
pdata->flag = flag;
return TRUE;
}
int json_trace_block_create_data(char monid_char[], char* mms_str, double v, int flicker_flag, char rpt_id[], int rpt_no)
{
(void)rpt_id;
json_block_data* pdata = get_json_trace_block_data(monid_char, flicker_flag, rpt_no);
if (pdata == NULL)
return 0;
pdata->mms_str_map.insert(QString::fromAscii(mms_str), v);
return TRUE;
}
int json_trace_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag, char rpt_id[], int rpt_no)
{
QString key = json_trace_block_key(monid_char, flicker_flag, rpt_no);
if (!json_trace_data_map.contains(key))
return 1;
json_block_data* pdata = json_trace_data_map.value(key);
if (pdata == NULL) {
json_trace_data_map.remove(key);
return 1;
}
int ret = 1;
if (pdata->mms_str_map.count() > 0)
ret = trace_json_block_data(v_wiring_type, pdata, rpt_id, rpt_no);
delete pdata;
json_trace_data_map.remove(key);
return ret;
}
//lnk2024-8-16添加接线参数 //lnk2024-8-16添加接线参数
int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag)//WW 2023年3月13日16:38:41 多ICD修改 int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag)//WW 2023年3月13日16:38:41 多ICD修改
@@ -3693,7 +3807,7 @@ int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_f
json_pst_data_map.remove(monid_char); json_pst_data_map.remove(monid_char);
} }
printf("---------- json_block_create_end: pdata->mms_str_map.count() == 0 ----------\n"); printf("---------- json_block_create_end: mp_id= %s pdata->mms_str_map.count() == 0 ----------\n", monid_char);
return 1; return 1;
} }
//lnk2024-8-16添加接线参数 //lnk2024-8-16添加接线参数

View File

@@ -74,6 +74,12 @@ int json_block_create_data(char monid_char[], char* mms_str , double v, int flic
//lnk2024-8-16添加参数 //lnk2024-8-16添加参数
int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag); //CZY 2023-08-17 测试 int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag); //CZY 2023-08-17 测试
int json_trace_block_create_start(char voltage_level[], char monid_char[], int flicker_flag, char temcode[], int line_id, char v_wiring_type[], char rpt_id[], int rpt_no);
int json_trace_block_create_time(char monid_char[], long long Time, int flicker_flag, char rpt_id[], int rpt_no);
int json_trace_block_create_flag(char monid_char[], int flag, int flicker_flag, char rpt_id[], int rpt_no);
int json_trace_block_create_data(char monid_char[], char* mms_str, double v, int flicker_flag, char rpt_id[], int rpt_no);
int json_trace_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag, char rpt_id[], int rpt_no);
//zw 2024-01-31 补招模式优化 //zw 2024-01-31 补招模式优化
void add_mvl_type_ctrl(char doname[], int ctrl); void add_mvl_type_ctrl(char doname[], int ctrl);
int sel_mvl_type_ctrl_flag(char doname[]); int sel_mvl_type_ctrl_flag(char doname[]);

View File

@@ -387,7 +387,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
rptinfo = LD_info->rptinfo[rpt_no] ; rptinfo = LD_info->rptinfo[rpt_no] ;
//检查是否需要注册或取消注册报告,或不做任何处理 //检查是否需要注册或取消注册报告,或不做任何处理
printf("[RPT][CHECK] ip=%s cpu=%d rpt_no=%d rptcount=%d LD_name=%s rptinfo=%p\n", if(DEBUGOPEN)printf("[RPT][CHECK] ip=%s cpu=%d rpt_no=%d rptcount=%d LD_name=%s rptinfo=%p\n",
chnl_usr->ip_str, chnl_usr->ip_str,
cpuno, cpuno,
rpt_no, rpt_no,

View File

@@ -993,6 +993,7 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
ied = find_ied_from_dev_code(LD_info->terminal_code); ied = find_ied_from_dev_code(LD_info->terminal_code);
ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext; ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext;
json_trace_block_create_start(LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id, LD_info->v_wiring_type, rcb_info->RptID, rptinfo->rptNo);
if (rptinfo->flickerflag==1)//CZY 2023-08-17 WW 2022-11-14 只有闪变和第一次进入才会初始化 json_block_create_start(LD_info->line_id); if (rptinfo->flickerflag==1)//CZY 2023-08-17 WW 2022-11-14 只有闪变和第一次进入才会初始化 json_block_create_start(LD_info->line_id);
json_block_create_start( LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id); json_block_create_start( LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id);
@@ -1057,6 +1058,7 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
} }
else { else {
json_block_create_flag(LD_info->mp_id, flag, rptinfo->flickerflag); json_block_create_flag(LD_info->mp_id, flag, rptinfo->flickerflag);
json_trace_block_create_flag(LD_info->mp_id, flag, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
not_set_rpt_q_this = FALSE; not_set_rpt_q_this = FALSE;
} }
} }
@@ -1076,6 +1078,7 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
} }
else { else {
json_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag); json_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag);
json_trace_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
printf("rcb_info->RptID=%s ,LineId=%d , Timestamp= %lld \n", rcb_info->RptID, LD_info->line_id, t / 1000); printf("rcb_info->RptID=%s ,LineId=%d , Timestamp= %lld \n", rcb_info->RptID, LD_info->line_id, t / 1000);
not_set_rpt_TimeID_this = FALSE; not_set_rpt_TimeID_this = FALSE;
/*if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {//lnk 20250624 /*if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {//lnk 20250624
@@ -1108,8 +1111,10 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
else if (strstr(rcb_info->RptID, "RDRE")) {//CZY 2023-08-17 WW 2022-11-14 修改判断LLN0$BR$brcbRDRE else if (strstr(rcb_info->RptID, "RDRE")) {//CZY 2023-08-17 WW 2022-11-14 修改判断LLN0$BR$brcbRDRE
processRDRE_data(LD_info, FULL_FCDA_Name, v); processRDRE_data(LD_info, FULL_FCDA_Name, v);
} }
else else {
json_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag); json_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag);
json_trace_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
}
}//else }//else
} }
} }
@@ -1126,6 +1131,7 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
} }
else { else {
printf("%d : %d", LD_info->rptRecvFlag, LD_info->rptRecvCheckFlag); printf("%d : %d", LD_info->rptRecvFlag, LD_info->rptRecvCheckFlag);
json_trace_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
//append_db_records(RPT_IDX); //append_db_records(RPT_IDX);
if (rptinfo->flickerflag==1)//CZY 2023-08-17 WW 2022-11-14 增加闪变标志 if (rptinfo->flickerflag==1)//CZY 2023-08-17 WW 2022-11-14 增加闪变标志
{ {
@@ -1376,6 +1382,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
ied = find_ied_from_dev_code(LD_info->terminal_code); ied = find_ied_from_dev_code(LD_info->terminal_code);
ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext; ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext;
json_trace_block_create_start(LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id, LD_info->v_wiring_type, rcb_info->RptID, rptinfo->rptNo);
if (rptinfo->flickerflag == 1)//CZY 2023-08-17 WW 2022-11-14 只有闪变和第一次进入才会初始化 json_block_create_start(LD_info->line_id); if (rptinfo->flickerflag == 1)//CZY 2023-08-17 WW 2022-11-14 只有闪变和第一次进入才会初始化 json_block_create_start(LD_info->line_id);
json_block_create_start(LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id); json_block_create_start(LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id);
else if (rptinfo->flickerflag == 0) { else if (rptinfo->flickerflag == 0) {
@@ -1461,6 +1468,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
} }
else { else {
json_block_create_flag(LD_info->mp_id, flag, rptinfo->flickerflag); json_block_create_flag(LD_info->mp_id, flag, rptinfo->flickerflag);
json_trace_block_create_flag(LD_info->mp_id, flag, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
not_set_rpt_q_this = FALSE; not_set_rpt_q_this = FALSE;
} }
} }
@@ -1484,6 +1492,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
} }
else { else {
json_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag); json_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag);
json_trace_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
printf("rcb_info->RptID=%s ,LineId=%d , Timestamp= %lld \n", rcb_info->RptID, LD_info->line_id, t / 1000); printf("rcb_info->RptID=%s ,LineId=%d , Timestamp= %lld \n", rcb_info->RptID, LD_info->line_id, t / 1000);
not_set_rpt_TimeID_this = FALSE; not_set_rpt_TimeID_this = FALSE;
//if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) { //if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {
@@ -1497,6 +1506,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
printf("rtdata RptID match"); printf("rtdata RptID match");
if (urcbRealDataHasReceived(ied_usr->dev_idx,rpt_no,LD_info, t / 1000)){//判断时间重复 if (urcbRealDataHasReceived(ied_usr->dev_idx,rpt_no,LD_info, t / 1000)){//判断时间重复
printf("this rt report Time repeats"); printf("this rt report Time repeats");
//json_trace_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
return; return;
} }
} }
@@ -1531,8 +1541,10 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
ied_usr_t* ied_usr = GET_IEDEXT_ADDR(ied); ied_usr_t* ied_usr = GET_IEDEXT_ADDR(ied);
processGGIO_start_data_end(LD_info->mp_id, FULL_FCDA_Name, v, time, ied_usr->dev_type, LD_info->line_id);//GGIO数据全套处理流程 processGGIO_start_data_end(LD_info->mp_id, FULL_FCDA_Name, v, time, ied_usr->dev_type, LD_info->line_id);//GGIO数据全套处理流程
} }
else else {
json_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag); json_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag);
json_trace_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
}
}//else }//else
} }
@@ -1550,6 +1562,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
} }
else { else {
printf("%d : %d", LD_info->rptRecvFlag, LD_info->rptRecvCheckFlag); printf("%d : %d", LD_info->rptRecvFlag, LD_info->rptRecvCheckFlag);
json_trace_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo);
//append_db_records(RPT_IDX); //append_db_records(RPT_IDX);
if (rptinfo->flickerflag == 1)//CZY 2023-08-17 WW 2022-11-14 增加闪变标志 if (rptinfo->flickerflag == 1)//CZY 2023-08-17 WW 2022-11-14 增加闪变标志
{ {