From 111ffa36bd4d237339c6df18074279e582685554 Mon Sep 17 00:00:00 2001 From: lnk Date: Tue, 7 Jul 2026 16:32:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=BD=E8=B8=AA=E5=8E=9F?= =?UTF-8?q?=E5=A7=8B=E6=8A=A5=E5=91=8A=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json/create_json.cpp | 110 +++++++++++++++++++++++++++-------- json/mms_json_inter.h | 4 +- json/save2json.cpp | 131 +++++++++++++++++++++++++++++++++++++++--- mms/db_interface.h | 8 ++- mms/mms_process.c | 2 +- mms/mmscli_log.c | 12 ++-- mms/mmscli_rpt.c | 29 +++++++--- 7 files changed, 245 insertions(+), 51 deletions(-) diff --git a/json/create_json.cpp b/json/create_json.cpp index f648209..f56f683 100644 --- a/json/create_json.cpp +++ b/json/create_json.cpp @@ -32,10 +32,12 @@ #include #include #include +#include +#include -// ★MOD: 全局追踪表:mp_id -> remaining times +//全局追踪表:mp_id -> rpt_no -> remaining times static QMutex g_trace_mutex; -static QHash g_trace_map; +static QHash > g_trace_map; ///////////////////////////////////////////////////lnk2024-10-21//////////////////////////////////////////////////////// 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; } -// 打开追踪:次数 times(比如 5) +// 打开追踪:每个报告各追踪一次 void process_trace_command(const std::string& id, int times) { - if (times <= 0) return; + (void)times; QString qid = QString::fromStdString(id).trimmed(); if (qid.isEmpty()) return; + QList 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); - g_trace_map[qid] = times; // 重新打开就覆盖/重置次数 + QHash& 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] = rpt_map.value(rpt_no, 0) + 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); - auto it = g_trace_map.constFind(mp_id); - return (it != g_trace_map.constEnd() && it.value() > 0); + QHash >::const_iterator mp_it = g_trace_map.constFind(mp_id); + if (mp_it == g_trace_map.constEnd()) + return false; + + QHash::const_iterator rpt_it = mp_it.value().constFind(rpt_no); + return (rpt_it != mp_it.value().constEnd() && rpt_it.value() > 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); - auto it = g_trace_map.find(mp_id); - if (it == g_trace_map.end()) return; + QHash >::iterator mp_it = g_trace_map.find(mp_id); + if (mp_it == g_trace_map.end()) return; - int left = it.value(); + QHash::iterator rpt_it = mp_it.value().find(rpt_no); + if (rpt_it == mp_it.value().end()) return; + + int left = rpt_it.value(); left -= 1; - if (left <= 0) g_trace_map.erase(it); - else it.value() = left; + if (left <= 0) + mp_it.value().erase(rpt_it); + else + rpt_it.value() = left; + + if (mp_it.value().isEmpty()) + g_trace_map.erase(mp_it); } //追踪61850原始数据 @@ -316,19 +359,20 @@ static QString build_mms_json_object(const json_block_data* data) return json; } -static QString build_trace_json(const json_block_data* data, const char *v_wiring_type, const char *source_name) +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 "{}"; QString mms_json = build_mms_json_object(data); QString wiring_type = v_wiring_type ? QString::fromLocal8Bit(v_wiring_type) : ""; - QString source = source_name ? QString::fromLocal8Bit(source_name) : ""; + QString rpt = rpt_id ? QString::fromLocal8Bit(rpt_id) : ""; QString json; json += "{"; 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("\"source_name\":\"%1\",").arg(escape_json_string(source)); + 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("\"data_time\":%1,").arg(QString::number((qlonglong)data->time)); json += QString("\"voltage_level\":\"%1\",").arg(QString::number(data->voltage_level, 'f', 6)); @@ -339,13 +383,13 @@ static QString build_trace_json(const json_block_data* data, const char *v_wirin return json; } -static void send_trace_if_needed(json_block_data* pdata, const char *v_wiring_type, const char *source_name) +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; - if (trace_is_enabled(mp_id_q)) { + if (trace_is_enabled(mp_id_q, rpt_no)) { // 1) 组 json - QString jsonText = build_trace_json(pdata, v_wiring_type, source_name); + QString jsonText = build_trace_json(pdata, v_wiring_type, rpt_id, rpt_no); // 2) 组 KafkaData Ckafka_data_t KafkaData; @@ -359,9 +403,25 @@ static void send_trace_if_needed(json_block_data* pdata, const char *v_wiring_ty kafka_data_list_mutex.unlock(); // 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添加频率值存储 struct mp_freq_save { double G_FREQ; @@ -1166,9 +1226,12 @@ void printCTopicList(const std::list& ctopic_list) { val->fValue); } } + break; // 只打印第一个 Item 的 SequenceList 和 DataValueList,避免输出过多 } + break; // 只打印第一个 Monitor 的 ItemList,避免输出过多 } + // 如果需要打印 SOEList,可加以下: /* int soeIndex = 0; @@ -1214,16 +1277,13 @@ static void print_mms_str_map(const json_block_data* data) } //20250214添加角型接线处理 -int transfer_json_block_data(char v_wiring_type[], json_block_data *data, const char *source_name) //json生成函数 zw修改 2023-8-11 调整传送json结构 目前仅限历史稳态数据 +int transfer_json_block_data(char v_wiring_type[], json_block_data *data) //json生成函数 zw修改 2023-8-11 调整传送json结构 目前仅限历史稳态数据 { // 刚进函数就打印 mms_str_map if (DEBUGOPEN) { print_mms_str_map(data); } - //数据追踪上送 - send_trace_if_needed(data, v_wiring_type, source_name); - list ctopic_list; ////lnk2024-8-15 区分星型,角型接线 diff --git a/json/mms_json_inter.h b/json/mms_json_inter.h index b67339a..1cd04b3 100644 --- a/json/mms_json_inter.h +++ b/json/mms_json_inter.h @@ -73,7 +73,9 @@ public: int list_num; }; -int transfer_json_block_data(char v_wiring_type[], json_block_data* data, const char *source_name);//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 */ diff --git a/json/save2json.cpp b/json/save2json.cpp index cf875e0..18783c3 100644 --- a/json/save2json.cpp +++ b/json/save2json.cpp @@ -198,6 +198,7 @@ static QMap>> real_data_report_map; //多个监 static QMap json_data_map;//CZY 2023-08-17 ww 2023年3月13日17:23:17扩展Map,用于保存各条线路的数据 static QMap json_flicker_data_map;//CZY 2023-09-11 展Map,用于保存各条线路的闪变数据 static QMap json_pst_data_map;//CZY 2023-09-11 展Map,用于保存各条线路的闪变数据 +static QMap json_trace_data_map; //////////////////////////////////////////////////////////////////////////////lnk20260310文件控制 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))){ //数据追踪 //打开监测点数据追踪开关 - process_trace_command(id,3); //3表示追踪次数 + process_trace_command(id,1); //每个报告各追踪1次 } else{ std::cout << "type doesnt match" <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添加接线参数 -int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag, const char *source_name)//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修改 { - const char *end_source = (source_name && source_name[0]) ? source_name : "unknown"; json_block_data* pdata; if (flicker_flag == 1) { if (!json_flicker_data_map.contains(monid_char))//未查到数据 { - printf("---------- json_block_create_end: source=%s mp_id= %s json_flicker_data_map can't find MonitorId----------\n", end_source, monid_char); + printf("---------- json_block_create_end: mp_id= %s json_flicker_data_map can't find MonitorId----------\n", monid_char); return 1; } pdata = json_flicker_data_map.value(monid_char); @@ -3651,7 +3764,7 @@ int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_f { if (!json_data_map.contains(monid_char))//未查到数据 { - printf("---------- json_block_create_end: source=%s mp_id= %s json_data_map can't find MonitorId----------\n", end_source, monid_char); + printf("---------- json_block_create_end: mp_id= %s json_data_map can't find MonitorId----------\n", monid_char); return 1; } pdata = json_data_map.value(monid_char); @@ -3660,7 +3773,7 @@ int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_f { if (!json_pst_data_map.contains(monid_char))//未查到数据 { - printf("---------- json_block_create_end: source=%s mp_id= %s json_pst_data_map can't find MonitorId----------\n", end_source, monid_char); + printf("---------- json_block_create_end: mp_id= %s json_pst_data_map can't find MonitorId----------\n", monid_char); return 1; } pdata = json_pst_data_map.value(monid_char); @@ -3694,11 +3807,11 @@ int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_f json_pst_data_map.remove(monid_char); } - printf("---------- json_block_create_end: source=%s mp_id= %s pdata->mms_str_map.count() == 0 ----------\n", end_source, monid_char); + printf("---------- json_block_create_end: mp_id= %s pdata->mms_str_map.count() == 0 ----------\n", monid_char); return 1; } //lnk2024-8-16添加接线参数 - int ret = transfer_json_block_data(v_wiring_type, pdata, end_source); + int ret = transfer_json_block_data(v_wiring_type, pdata); if (pdata != NULL) delete pdata; @@ -3715,7 +3828,7 @@ int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_f json_pst_data_map.remove(monid_char); } - printf("---------- json_block_create_end: source=%s MonitorId= %s ----------\n", end_source, monid_char); + printf("---------- json_block_create_end: MonitorId= %s ----------\n", monid_char); return ret; } diff --git a/mms/db_interface.h b/mms/db_interface.h index ac559dd..8baa3f3 100644 --- a/mms/db_interface.h +++ b/mms/db_interface.h @@ -72,7 +72,13 @@ int json_block_create_flag(char monid_char[], int flag, int flicker_flag); int json_block_create_data(char monid_char[], char* mms_str , double v, int flicker_flag); //3. json生成结束函数 //lnk2024-8-16添加参数 -int json_block_create_end(char v_wiring_type[], char monid_char[], int flicker_flag, const char *source_name); //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 补招模式优化 void add_mvl_type_ctrl(char doname[], int ctrl); diff --git a/mms/mms_process.c b/mms/mms_process.c index e8975ef..9dfd5d0 100644 --- a/mms/mms_process.c +++ b/mms/mms_process.c @@ -387,7 +387,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) 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, cpuno, rpt_no, diff --git a/mms/mmscli_log.c b/mms/mmscli_log.c index 8bc0617..a6eeebb 100644 --- a/mms/mmscli_log.c +++ b/mms/mmscli_log.c @@ -295,9 +295,9 @@ static ST_RET process_jou_entry(loginfo_t *loginfo,apr_time_t t, { printf("\n newTime: %d %d %d %d %d %d", newTime.tm_year, newTime.tm_mon, newTime.tm_mday, newTime.tm_hour, newTime.tm_min, newTime.tm_sec); printf("\n preTime: %d %d %d %d %d %d", preTime.tm_year, preTime.tm_mon, preTime.tm_mday, preTime.tm_hour, preTime.tm_min, preTime.tm_sec); - json_block_create_end(loginfo->LD_info->v_wiring_type,loginfo->LD_info->mp_id, 0, loginfo->logName);//稳态 - json_block_create_end(loginfo->LD_info->v_wiring_type,loginfo->LD_info->mp_id, 1, loginfo->logName);//长闪 - json_block_create_end(loginfo->LD_info->v_wiring_type,loginfo->LD_info->mp_id, 2, loginfo->logName);//短闪 波动 + json_block_create_end(loginfo->LD_info->v_wiring_type,loginfo->LD_info->mp_id, 0);//稳态 + json_block_create_end(loginfo->LD_info->v_wiring_type,loginfo->LD_info->mp_id, 1);//长闪 + json_block_create_end(loginfo->LD_info->v_wiring_type,loginfo->LD_info->mp_id, 2);//短闪 波动 process_jou_entry_t = t;//调整至最新时标 ied_t* ied; @@ -603,9 +603,9 @@ ST_RET mms_jread (loginfo_t *loginfo,MVL_NET_INFO *clientNetInfo, ST_CHAR *dom_n if ( jread_resp->more_follows == 0 && ((i + 1) == jread_resp->num_of_jou_entry)) { printf("\njread_resp->more_follows == 0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); //lnk2024-8-16添加接线参数 - json_block_create_end(loginfo->LD_info->v_wiring_type, loginfo->LD_info->mp_id, 0, loginfo->logName);//more follows为0 数据接受最后一条 强行处理稳态数据的json防止遗留 - json_block_create_end(loginfo->LD_info->v_wiring_type, loginfo->LD_info->mp_id, 1, loginfo->logName); - json_block_create_end(loginfo->LD_info->v_wiring_type, loginfo->LD_info->mp_id, 2, loginfo->logName); + json_block_create_end(loginfo->LD_info->v_wiring_type, loginfo->LD_info->mp_id, 0);//more follows为0 数据接受最后一条 强行处理稳态数据的json防止遗留 + json_block_create_end(loginfo->LD_info->v_wiring_type, loginfo->LD_info->mp_id, 1); + json_block_create_end(loginfo->LD_info->v_wiring_type, loginfo->LD_info->mp_id, 2); ied_t* ied; ied = find_ied_from_dev_code(loginfo->LD_info->terminal_code); diff --git a/mms/mmscli_rpt.c b/mms/mmscli_rpt.c index bbb8122..5a2d31a 100644 --- a/mms/mmscli_rpt.c +++ b/mms/mmscli_rpt.c @@ -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_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); 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 { 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; } } @@ -1076,6 +1078,7 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va, } else { 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); not_set_rpt_TimeID_this = FALSE; /*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 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_trace_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo); + } }//else } } @@ -1126,18 +1131,19 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va, } else { 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); if (rptinfo->flickerflag==1)//CZY 2023-08-17 WW 2022-11-14 增加闪变标志 { //ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持 //int devkind = ied_usr->dev_flag; - json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID); //lnk2024-8-16增加接线类型参数 + json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag); //lnk2024-8-16增加接线类型参数 } else if(rptinfo->flickerflag == 0){//CZY 2023-08-17 WW 2022-11-14 增加多个报告判断 if (LD_info->rptRecvFlag == LD_info->rptRecvCheckFlag) { //ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持 //int devkind = ied_usr->dev_flag; - json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID); //lnk2024-8-16增加接线类型参数 + json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag); //lnk2024-8-16增加接线类型参数 LD_info->rptRecvCheckFlag = 0; } } @@ -1145,7 +1151,7 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va, if (LD_info->rptPstRecvFlag == LD_info->rptPstRecvCheckFlag) { //ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持 //int devkind = ied_usr->dev_flag; - json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID); //lnk2024-8-16增加接线类型参数 + json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag); //lnk2024-8-16增加接线类型参数 LD_info->rptPstRecvCheckFlag = 0; } } @@ -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_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); 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) { @@ -1461,6 +1468,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va, } else { 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; } } @@ -1484,6 +1492,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va, } else { 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); not_set_rpt_TimeID_this = FALSE; //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"); if (urcbRealDataHasReceived(ied_usr->dev_idx,rpt_no,LD_info, t / 1000)){//判断时间重复 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; } } @@ -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); 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_trace_block_create_data(LD_info->mp_id, FULL_FCDA_Name, v, rptinfo->flickerflag, rcb_info->RptID, rptinfo->rptNo); + } }//else } @@ -1550,19 +1562,20 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va, } else { 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); if (rptinfo->flickerflag == 1)//CZY 2023-08-17 WW 2022-11-14 增加闪变标志 { //ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持 //int devkind = ied_usr->dev_flag; - json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID);//lnk角形处理 + json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag);//lnk角形处理 } else if (rptinfo->flickerflag == 0) {//CZY 2023-08-17 WW 2022-11-14 增加多个报告判断 if (LD_info->rptRecvFlag == LD_info->rptRecvCheckFlag) { //LD_info->rptRecvFlag是报告初始化时报告序号左移之和,固定于报告初始化 //ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持 //int devkind = ied_usr->dev_flag; - json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID);//lnk角形处理 + json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag);//lnk角形处理 LD_info->rptRecvCheckFlag = 0; } } @@ -1570,7 +1583,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va, if (LD_info->rptPstRecvFlag == LD_info->rptPstRecvCheckFlag) { //ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持 //int devkind = ied_usr->dev_flag; - json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag, rcb_info->RptID);//lnk角形处理 + json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag);//lnk角形处理 LD_info->rptPstRecvCheckFlag = 0; } }