完成工具
This commit is contained in:
BIN
bin/librocketmq.dll
Normal file
BIN
bin/librocketmq.dll
Normal file
Binary file not shown.
BIN
bin/libwinpthread-1.dll
Normal file
BIN
bin/libwinpthread-1.dll
Normal file
Binary file not shown.
BIN
bin/pq_tool.exe
Normal file
BIN
bin/pq_tool.exe
Normal file
Binary file not shown.
BIN
bin/pq_tool_new.exe
Normal file
BIN
bin/pq_tool_new.exe
Normal file
Binary file not shown.
BIN
bin/rocketmq-client-cpp.dll
Normal file
BIN
bin/rocketmq-client-cpp.dll
Normal file
Binary file not shown.
BIN
bin/rocketmq.dll
Normal file
BIN
bin/rocketmq.dll
Normal file
Binary file not shown.
@@ -59,7 +59,7 @@ if exist "%OUT%" (
|
||||
-Wno-deprecated-declarations ^
|
||||
-I"%SRC_DIR%" ^
|
||||
-o "%OUT%" ^
|
||||
"%SRC_DIR%\main.cpp" "%SRC_DIR%\interface.cpp" "%SRC_DIR%\mq.cpp" "%SRC_DIR%\tinyxml2.cpp" ^
|
||||
"%SRC_DIR%\main.cpp" "%SRC_DIR%\interface.cpp" "%SRC_DIR%\mq.cpp" "%SRC_DIR%\icd_mapper.cpp" "%SRC_DIR%\tinyxml2.cpp" ^
|
||||
-lcomctl32 -lcomdlg32 -lwinhttp -lole32 -luuid -lws2_32 -lgdi32 ^
|
||||
-static-libgcc -static-libstdc++
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"DATA_TYPE":"02" , "Monitor":"73e0a6553c2d24ee17f2623e14f9776b" , "Value":{"FLAG":0, "TIME":"1553994000000", "F_S":{"A":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "B":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "C":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }}}}
|
||||
{"DATA_TYPE":"02" , "Monitor":"73e0a6553c2d24ee17f2623e14f9776b" , "Value":{"FLAG":0, "TIME":"1554069000000", "F_S":{"A":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "B":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "C":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }}}}
|
||||
1
runtime/json/jsondata_03.txt
Normal file
1
runtime/json/jsondata_03.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"DATA_TYPE":"03" , "Monitor":"e57ecbe0e81e29b7b0d6f1c902af655a" , "Value":{"FLAG":0, "TIME":"1554069600000", "F_L":{"A":{ "PLT":"0.000000" }, "B":{ "PLT":"0.000000" }, "C":{ "PLT":"0.000000" }}}}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"key": "9b50d332-875b-40a8-bd4a-e12c69957721",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"9b50d332-875b-40a8-bd4a-e12c69957721\",\"id\":\"bd45e7c4df770ae1af803e8a05465e54\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"key": "5948178e-f193-4c1c-bb77-f164d8c7f17f",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"5948178e-f193-4c1c-bb77-f164d8c7f17f\",\"id\":\"73e0a6553c2d24ee17f2623e14f9776b\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"retryTimes": 0,
|
||||
"sendTime": "2026-07-09T15:59:42.018",
|
||||
"sendTime": "2026-07-13T14:57:45.340",
|
||||
"source": "WEB"
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
{"code":"A0000","message":"根据前置ip获取对应的终端台账信息,成功","data":[{"id":"08faa2065851a339c717c3ed740a4101","ip":"10.98.2.163","devType":"NRJB","org_name":null,"port":"102","stationName":null,"name":"CN-PQ-10101","subName":"110kV龙楼站","updateTime":"2026-04-15 09:13:13","manufacturer":"南瑞继保","status":"0","series":"3EE892A1B700DC65","devKey":"3EE892A1B700DC65","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"046237ae3fdb2c4140d23e6dfb0f84e1","name":"110kV龙商线","lineNo":"1","voltageLevel":"110kV","ptType":"0","status":"0"},{"id":"4ce4ec51ccd9ac5fcead64cdd1ca18b2","name":"测时间点","lineNo":"4","voltageLevel":"110kV","ptType":"0","status":"0"}]},{"id":"2846527052bb9676b1e4cb4aa12eb955","ip":"192.168.2.136","devType":"QHMS_MMS","org_name":null,"port":"102","stationName":null,"name":"580数据校验测试1","subName":"测试变电站","updateTime":"2026-06-22 22:01:00","manufacturer":"南京灿能","status":"0","series":"2DijPPYO62hj8xoILU8wjA==","devKey":"2DijPPYO62hj8xoILU8wjA==","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"0c9df16db618355080964b4b21d65110","name":"监测点1_星型","lineNo":"1","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"ce79a007a2bde0d58ff11540a9f50df7","name":"监测点2_角形","lineNo":"2","voltageLevel":"10kV","ptType":"1","status":"0"}]},{"id":"2e096de089538622968ceb790ef6e42e","ip":"192.168.1.103","devType":"NPQS_882_QH","org_name":null,"port":"102","stationName":null,"name":"海口测试装置","subName":"海口测试变电站","updateTime":"2026-04-15 09:13:14","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"1c67c3eb11b8f532701e767d83890d86","name":"海口测试监测点","lineNo":"1","voltageLevel":"0.1kV","ptType":"0","status":"0"}]},{"id":"ae459b86e680f3532a686813f4b5f7f1","ip":"10.96.71.89","devType":"PQS882_B4(4U4I)","org_name":null,"port":"102","stationName":null,"name":"CN-PQ-C-LL882B4","subName":"110kV龙楼站","updateTime":"2026-04-15 09:13:14","manufacturer":"南京灿能","status":"0","series":"3EE892A1B700DC65","devKey":"3EE892A1B700DC65","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"b4a7ecede01717b2f9487ac5ef72e851","name":"110kV龙发线","lineNo":"1","voltageLevel":"110kV","ptType":"0","status":"0"}]},{"id":"be2a30de595edcccd0275c9ec5cf3f4e","ip":"192.168.2.227","devType":"QHMS_MMS","org_name":null,"port":"102","stationName":null,"name":"国产装置测试辽宁","subName":"测试变电站","updateTime":"2011-12-26 05:21:00","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"10ecb57a79aaa1b4804d45a71cf868c7","name":"辽宁国产装置测点1","lineNo":"1","voltageLevel":"0.1kV","ptType":"0","status":"0"}]},{"id":"ca5420a552a727558c3b27ffaaf22a59","ip":"192.168.3.126","devType":"QH_ms","org_name":null,"port":"102","stationName":null,"name":"自主协议测试终端1","subName":"测试变电站","updateTime":"2019-03-31 09:00:00","manufacturer":"南京灿能","status":"1","series":"","devKey":"","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"73e0a6553c2d24ee17f2623e14f9776b","name":"自主协议监测点4","lineNo":"4","voltageLevel":"0.1kV","ptType":"0","status":"0"},{"id":"bd45e7c4df770ae1af803e8a05465e54","name":"自主协议测试监测点1","lineNo":"1","voltageLevel":"0.1kV","ptType":"1","status":"0"},{"id":"c7dbb4ebdb4a3aee920b5f0c9cb58d3d","name":"自主协议测试检测点2","lineNo":"2","voltageLevel":"0.1kV","ptType":"0","status":"0"},{"id":"e57ecbe0e81e29b7b0d6f1c902af655a","name":"自主协议监测点3","lineNo":"3","voltageLevel":"0.1kV","ptType":"0","status":"0"}]}]}
|
||||
{"code":"A0000","message":"根据前置ip获取对应的终端台账信息,成功","data":[{"id":"08faa2065851a339c717c3ed740a4101","ip":"10.98.2.163","devType":"NRJB","org_name":null,"port":"102","stationName":null,"name":"CN-PQ-10101","subName":"110kV龙楼站","updateTime":"2026-04-15 09:13:13","manufacturer":"南瑞继保","status":"0","series":"3EE892A1B700DC65","devKey":"3EE892A1B700DC65","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"046237ae3fdb2c4140d23e6dfb0f84e1","name":"110kV龙商线","lineNo":"1","voltageLevel":"110kV","ptType":"0","status":"0"},{"id":"4ce4ec51ccd9ac5fcead64cdd1ca18b2","name":"测时间点","lineNo":"4","voltageLevel":"110kV","ptType":"0","status":"0"}]},{"id":"2846527052bb9676b1e4cb4aa12eb955","ip":"192.168.2.136","devType":"QHMS_MMS","org_name":null,"port":"102","stationName":null,"name":"580数据校验测试1","subName":"测试变电站","updateTime":"2026-06-22 22:01:00","manufacturer":"南京灿能","status":"0","series":"2DijPPYO62hj8xoILU8wjA==","devKey":"2DijPPYO62hj8xoILU8wjA==","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"0c9df16db618355080964b4b21d65110","name":"监测点1_星型","lineNo":"1","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"ce79a007a2bde0d58ff11540a9f50df7","name":"监测点2_角形","lineNo":"2","voltageLevel":"10kV","ptType":"1","status":"0"}]},{"id":"2e096de089538622968ceb790ef6e42e","ip":"192.168.1.103","devType":"NPQS_882_QH","org_name":null,"port":"102","stationName":null,"name":"海口测试装置","subName":"海口测试变电站","updateTime":"2026-04-15 09:13:14","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"1c67c3eb11b8f532701e767d83890d86","name":"海口测试监测点","lineNo":"1","voltageLevel":"0.1kV","ptType":"0","status":"0"}]},{"id":"ae459b86e680f3532a686813f4b5f7f1","ip":"10.96.71.89","devType":"PQS882_B4(4U4I)","org_name":null,"port":"102","stationName":null,"name":"CN-PQ-C-LL882B4","subName":"110kV龙楼站","updateTime":"2026-04-15 09:13:14","manufacturer":"南京灿能","status":"0","series":"3EE892A1B700DC65","devKey":"3EE892A1B700DC65","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"b4a7ecede01717b2f9487ac5ef72e851","name":"110kV龙发线","lineNo":"1","voltageLevel":"110kV","ptType":"0","status":"0"}]},{"id":"be2a30de595edcccd0275c9ec5cf3f4e","ip":"192.168.2.227","devType":"QHMS_MMS","org_name":null,"port":"102","stationName":null,"name":"国产装置测试辽宁","subName":"测试变电站","updateTime":"2011-12-26 05:21:00","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"10ecb57a79aaa1b4804d45a71cf868c7","name":"辽宁国产装置测点1","lineNo":"1","voltageLevel":"0.1kV","ptType":"0","status":"0"}]},{"id":"ca5420a552a727558c3b27ffaaf22a59","ip":"192.168.3.126","devType":"QH_ms","org_name":null,"port":"102","stationName":null,"name":"自主协议测试终端1","subName":"测试变电站","updateTime":"2019-04-04 07:57:00","manufacturer":"南京灿能","status":"1","series":"","devKey":"","processNo":1,"maxProcessNum":2,"monitorData":[{"id":"73e0a6553c2d24ee17f2623e14f9776b","name":"自主协议监测点4","lineNo":"4","voltageLevel":"0.1kV","ptType":"0","status":"0"},{"id":"bd45e7c4df770ae1af803e8a05465e54","name":"自主协议测试监测点1","lineNo":"1","voltageLevel":"0.1kV","ptType":"1","status":"0"},{"id":"c7dbb4ebdb4a3aee920b5f0c9cb58d3d","name":"自主协议测试检测点2","lineNo":"2","voltageLevel":"0.1kV","ptType":"0","status":"0"},{"id":"e57ecbe0e81e29b7b0d6f1c902af655a","name":"自主协议监测点3","lineNo":"3","voltageLevel":"0.1kV","ptType":"0","status":"0"}]}]}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"DATA_TYPE":"02" , "Monitor":"c7dbb4ebdb4a3aee920b5f0c9cb58d3d" , "Value":{"FLAG":0, "TIME":"1554079200000", "F_S":{"A":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "B":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "C":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }}}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"c7dbb4ebdb4a3aee920b5f0c9cb58d3d","v_wiring_type":"0","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1554079200000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"c7dbb4ebdb4a3aee920b5f0c9cb58d3d","v_wiring_type":"0","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1554079200000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"mp_id":"c7dbb4ebdb4a3aee920b5f0c9cb58d3d","v_wiring_type":"0","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1554078960000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":2.30618097702973e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":2.39627515838947e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.000178760208655149,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":2.03925992536824e-07,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.00018571394321043,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.0006097003351897,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":4.4373569835443e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":5.1406845159363e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000209568199352361,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":4.71901131504637e-07,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.000394273374695331,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.000869561568833888,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":1.26391853427776e-06,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":6.4605853822286e-07,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.00014814076712355,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":2.27064367308571e-09,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":7.86442615208216e-06,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.00030028386390768,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":3.53362702298909e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":3.77912001567893e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.00019401429744903,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":3.19476640697758e-07,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.000289400282781571,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.000745046010706574,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":2.30618097702973e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":2.39627515838947e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.000178760208655149,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":2.03925992536824e-07,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.00018571394321043,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.0006097003351897,"MSQI6$MX$SeqV$seqT":0}}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"key": "caf78aad-a6cd-4c0b-a326-d990ffc5d2ac",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"caf78aad-a6cd-4c0b-a326-d990ffc5d2ac\",\"id\":\"c7dbb4ebdb4a3aee920b5f0c9cb58d3d\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"key": "dcc45a90-2c24-42bc-97ad-5c3ead41c06f",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"dcc45a90-2c24-42bc-97ad-5c3ead41c06f\",\"id\":\"c7dbb4ebdb4a3aee920b5f0c9cb58d3d\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"retryTimes": 0,
|
||||
"sendTime": "2026-07-09T15:09:13.791",
|
||||
"sendTime": "2026-07-10T15:32:31.218",
|
||||
"source": "WEB"
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
"devType": "QH_ms",
|
||||
"deviceId": "ca5420a552a727558c3b27ffaaf22a59",
|
||||
"deviceName": "自主协议测试终端1",
|
||||
"frontType": "cfg_stat_data",
|
||||
"guid": "dcc45a90-2c24-42bc-97ad-5c3ead41c06f",
|
||||
"jsonDataPath": "C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议测试检测点2_c7dbb4ebdb4a3aee920b5f0c9cb58d3d\\jsondata_01.txt",
|
||||
"jsonDataPaths": [
|
||||
"C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议测试检测点2_c7dbb4ebdb4a3aee920b5f0c9cb58d3d\\jsondata_01.txt",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"mp_id":"bd45e7c4df770ae1af803e8a05465e54","v_wiring_type":"1","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1553994600000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0}}
|
||||
{"mp_id":"bd45e7c4df770ae1af803e8a05465e54","v_wiring_type":"1","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1554079200000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0}}
|
||||
@@ -1 +1 @@
|
||||
{"mp_id":"bd45e7c4df770ae1af803e8a05465e54","v_wiring_type":"1","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1553994600000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
{"mp_id":"bd45e7c4df770ae1af803e8a05465e54","v_wiring_type":"1","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1554079200000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"mp_id":"bd45e7c4df770ae1af803e8a05465e54","v_wiring_type":"1","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1553994180000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":1.43677980304346e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":1.45851263368968e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.00019807560602203,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":1.25790047604823e-05,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.0121257426217198,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.0447842255234718,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":3.46712076861877e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":3.95017159462441e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000227958007599227,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":3.23943568218965e-05,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.0341325737535954,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.0742863416671753,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":6.22123934590491e-07,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":3.1744670536682e-07,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.000170126702869311,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":2.34403088938961e-07,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":0.000393147900467739,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.0123939784243703,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":2.40776771534001e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":2.56268049270147e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.000214563609915785,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":2.1682873921236e-05,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.0216916166245937,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.0588789656758308,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":1.43677980304346e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":1.45851263368968e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.00019807560602203,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":1.25790047604823e-05,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.0121257426217198,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.0447842255234718,"MSQI6$MX$SeqV$seqT":0}}
|
||||
{"mp_id":"bd45e7c4df770ae1af803e8a05465e54","v_wiring_type":"1","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1554078960000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":1.41045211421442e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":1.36450134959887e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.000199535948922858,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":1.25065434986027e-05,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.0123815685510635,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.0450649186968803,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":3.60354933945928e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":4.18354757130146e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000233774189837277,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":3.16954501613509e-05,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.0361814238131046,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.0725584179162979,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":3.39086199119265e-07,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":4.14284556882194e-07,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.000161996504175477,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":1.46507048270905e-07,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":0.000548359530512244,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.0154890371486545,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":2.45725750573911e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":2.46139461523853e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.000215115243918262,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":2.16840435314225e-05,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.0218308828771114,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.0590709634125233,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":1.41045211421442e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":1.36450134959887e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.000199535948922858,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":1.25065434986027e-05,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.0123815685510635,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.0450649186968803,"MSQI6$MX$SeqV$seqT":0}}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"key": "9b50d332-875b-40a8-bd4a-e12c69957721",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"9b50d332-875b-40a8-bd4a-e12c69957721\",\"id\":\"bd45e7c4df770ae1af803e8a05465e54\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"key": "7d6cc8dc-62db-48b2-9f8b-e12bab0377a5",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"7d6cc8dc-62db-48b2-9f8b-e12bab0377a5\",\"id\":\"bd45e7c4df770ae1af803e8a05465e54\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"retryTimes": 0,
|
||||
"sendTime": "2026-07-09T15:59:42.018",
|
||||
"sendTime": "2026-07-10T15:32:23.743",
|
||||
"source": "WEB"
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
"devType": "QH_ms",
|
||||
"deviceId": "ca5420a552a727558c3b27ffaaf22a59",
|
||||
"deviceName": "自主协议测试终端1",
|
||||
"frontType": "cfg_stat_data",
|
||||
"guid": "7d6cc8dc-62db-48b2-9f8b-e12bab0377a5",
|
||||
"jsonDataPath": "C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议测试监测点1_bd45e7c4df770ae1af803e8a05465e54\\jsondata_01.txt",
|
||||
"jsonDataPaths": [
|
||||
"C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议测试监测点1_bd45e7c4df770ae1af803e8a05465e54\\jsondata_01.txt",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"DATA_TYPE":"02" , "Monitor":"73e0a6553c2d24ee17f2623e14f9776b" , "Value":{"FLAG":0, "TIME":"1553992200000", "F_S":{"A":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "B":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "C":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }}}}
|
||||
{"DATA_TYPE":"02" , "Monitor":"e57ecbe0e81e29b7b0d6f1c902af655a" , "Value":{"FLAG":0, "TIME":"1554079200000", "F_S":{"A":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "B":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }, "C":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":null }}}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"e57ecbe0e81e29b7b0d6f1c902af655a","v_wiring_type":"0","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1554079200000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"e57ecbe0e81e29b7b0d6f1c902af655a","v_wiring_type":"0","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1554079200000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"mp_id":"e57ecbe0e81e29b7b0d6f1c902af655a","v_wiring_type":"0","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1554078960000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":1.50571331687388e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":1.49890156535548e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.000195257423911244,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":1.2523780412721e-07,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.00012145827349741,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.000668085063807666,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":3.73459333786741e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":3.83881342713721e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000222166156163439,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":3.94805823589195e-07,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.000296594691462815,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.000961637939326465,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":3.57456201527384e-07,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":4.64877643935324e-07,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.000164380791829899,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":4.37183489410131e-09,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":2.20051947508182e-06,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.000395290233427659,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":2.57019964919891e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":2.60492779489141e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.000209666875889525,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":2.22368853997068e-07,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.000208474855753593,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.000809346733149141,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":1.50571331687388e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":1.49890156535548e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.000195257423911244,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":1.2523780412721e-07,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.00012145827349741,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.000668085063807666,"MSQI6$MX$SeqV$seqT":0}}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"key": "1774ab44-2982-4523-93fe-42ce2f9f4195",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"1774ab44-2982-4523-93fe-42ce2f9f4195\",\"id\":\"e57ecbe0e81e29b7b0d6f1c902af655a\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"key": "1e205ae3-1052-49d4-9dfa-bb5114fe48b4",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"1e205ae3-1052-49d4-9dfa-bb5114fe48b4\",\"id\":\"e57ecbe0e81e29b7b0d6f1c902af655a\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"retryTimes": 0,
|
||||
"sendTime": "2026-07-09T15:14:01.278",
|
||||
"sendTime": "2026-07-10T15:32:39.681",
|
||||
"source": "WEB"
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
"devType": "QH_ms",
|
||||
"deviceId": "ca5420a552a727558c3b27ffaaf22a59",
|
||||
"deviceName": "自主协议测试终端1",
|
||||
"frontType": "cfg_stat_data",
|
||||
"guid": "1e205ae3-1052-49d4-9dfa-bb5114fe48b4",
|
||||
"jsonDataPath": "C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点3_e57ecbe0e81e29b7b0d6f1c902af655a\\jsondata_01.txt",
|
||||
"jsonDataPaths": [
|
||||
"C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点3_e57ecbe0e81e29b7b0d6f1c902af655a\\jsondata_01.txt",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"DATA_TYPE":"02" , "Monitor":"73e0a6553c2d24ee17f2623e14f9776b" , "Value":{"FLAG":0, "TIME":"1554336000000", "F_S":{"A":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":"0.000000" }, "B":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":"0.000000" }, "C":{ "PST":"0.000000","FLUC":"0.000000","FLUCF":"0.000000" }}}}
|
||||
@@ -0,0 +1 @@
|
||||
{"DATA_TYPE":"03" , "Monitor":"73e0a6553c2d24ee17f2623e14f9776b" , "Value":{"FLAG":0, "TIME":"1554336000000", "F_L":{"A":{ "PLT":"0.000000" }, "B":{ "PLT":"0.000000" }, "C":{ "PLT":"0.000000" }}}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1554336000000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0,"MMXU2$MX$FLUCCF$phsA$cVal$mag$f":0,"MMXU2$MX$FLUCCF$phsB$cVal$mag$f":0,"MMXU2$MX$FLUCCF$phsC$cVal$mag$f":0}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptPLT","rpt_no":0,"func_type":100,"data_time":1554336000000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK2$MX$PhPlt$phsA$cVal$mag$f":0,"MFLK2$MX$PhPlt$phsB$cVal$mag$f":0,"MFLK2$MX$PhPlt$phsC$cVal$mag$f":0}}
|
||||
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1554336000000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1554336000000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":3.68404398614075e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":3.74274641217198e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.000163955686730333,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":1.47475219591797e-07,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.000120074160804506,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.000399634998757392,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":6.18439007666893e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":6.43364692223258e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000193939675227739,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":3.55142219632398e-07,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.000320550752803683,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.000669123779516667,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":1.05252083812957e-05,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":6.66677306071506e-06,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.000135470312670805,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":2.32098762431576e-09,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":3.16639261654927e-06,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.000132512417621911,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":5.04406889376696e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":5.09150995640084e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.000178682268597186,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":2.56418076105547e-07,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.000204816984478384,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.000519392138812691,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":3.68404398614075e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":3.74274641217198e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.000163955686730333,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":1.47475219591797e-07,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.000120074160804506,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.000399634998757392,"MSQI6$MX$SeqV$seqT":0}}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"key": "463479db-9be4-4d31-a070-96d3d5636dd4",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"463479db-9be4-4d31-a070-96d3d5636dd4\",\"id\":\"73e0a6553c2d24ee17f2623e14f9776b\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"key": "5948178e-f193-4c1c-bb77-f164d8c7f17f",
|
||||
"messageBody": "{\"code\":\"set_log\",\"frontType\":\"cfg_stat_data\",\"grade\":\"TRACE\",\"guid\":\"5948178e-f193-4c1c-bb77-f164d8c7f17f\",\"id\":\"73e0a6553c2d24ee17f2623e14f9776b\",\"level\":\"measurepoint\",\"logtype\":1,\"nodeId\":\"6c2adb324940e19e208d717f4970f2ee\",\"processNo\":1}",
|
||||
"retryTimes": 0,
|
||||
"sendTime": "2026-07-09T13:22:47.811",
|
||||
"sendTime": "2026-07-13T14:57:45.340",
|
||||
"source": "WEB"
|
||||
}
|
||||
@@ -2,10 +2,17 @@
|
||||
"devType": "QH_ms",
|
||||
"deviceId": "ca5420a552a727558c3b27ffaaf22a59",
|
||||
"deviceName": "自主协议测试终端1",
|
||||
"jsonDataPath": "trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\jsondata.txt",
|
||||
"frontType": "cfg_stat_data",
|
||||
"guid": "5948178e-f193-4c1c-bb77-f164d8c7f17f",
|
||||
"jsonDataPath": "C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\jsondata_01.txt",
|
||||
"jsonDataPaths": [
|
||||
"C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\jsondata_01.txt",
|
||||
"C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\jsondata_02.txt",
|
||||
"C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\jsondata_03.txt"
|
||||
],
|
||||
"monitorId": "73e0a6553c2d24ee17f2623e14f9776b",
|
||||
"monitorName": "自主协议监测点4",
|
||||
"outputPath": "trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\final_sorted.xls",
|
||||
"outputPath": "C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\trace_data\\process_1\\device_自主协议测试终端1_ca5420a552a727558c3b27ffaaf22a59\\monitor_自主协议监测点4_73e0a6553c2d24ee17f2623e14f9776b\\final_sorted.xls",
|
||||
"processNo": "1",
|
||||
"xmlPath": "downloaded_xml\\be3e57c36220ed847a4acfa62c59dc38.xml"
|
||||
"xmlPath": "C:\\Users\\lnk\\Desktop\\发送jaon映射xml工具\\runtime\\downloaded_xml\\be3e57c36220ed847a4acfa62c59dc38.xml"
|
||||
}
|
||||
1
runtime/verify/jsondata_01.txt
Normal file
1
runtime/verify/jsondata_01.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptFluc.txt
Normal file
1
runtime/verify/origin_rptFluc.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1554315000000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0}}
|
||||
1
runtime/verify/origin_rptFluc_2.txt
Normal file
1
runtime/verify/origin_rptFluc_2.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptFluc","rpt_no":2,"func_type":100,"data_time":1554315600000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MMXU2$MX$FLUC$phsA$cVal$mag$f":0,"MMXU2$MX$FLUC$phsB$cVal$mag$f":0,"MMXU2$MX$FLUC$phsC$cVal$mag$f":0}}
|
||||
1
runtime/verify/origin_rptPST.txt
Normal file
1
runtime/verify/origin_rptPST.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1554315000000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
1
runtime/verify/origin_rptPST_2.txt
Normal file
1
runtime/verify/origin_rptPST_2.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptPST","rpt_no":1,"func_type":100,"data_time":1554315600000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MFLK1$MX$PhPst$phsA$cVal$mag$f":0,"MFLK1$MX$PhPst$phsB$cVal$mag$f":0,"MFLK1$MX$PhPst$phsC$cVal$mag$f":0}}
|
||||
1
runtime/verify/origin_rptStHarm.txt
Normal file
1
runtime/verify/origin_rptStHarm.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptStHarm_2.txt
Normal file
1
runtime/verify/origin_rptStHarm_2.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptStIHarm.txt
Normal file
1
runtime/verify/origin_rptStIHarm.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptStIHarm_2.txt
Normal file
1
runtime/verify/origin_rptStIHarm_2.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptStMMXU.txt
Normal file
1
runtime/verify/origin_rptStMMXU.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptStMMXU_2.txt
Normal file
1
runtime/verify/origin_rptStMMXU_2.txt
Normal file
File diff suppressed because one or more lines are too long
1
runtime/verify/origin_rptStMSQI.txt
Normal file
1
runtime/verify/origin_rptStMSQI.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1554314940000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":3.81384634238202e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":3.8304668123601e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.000161453004693612,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":1.43297441468349e-07,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.000124581449199468,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.000413570844102651,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":6.48184504825622e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":6.23395317234099e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000188535108463839,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":3.47228279906631e-07,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.000331826304318383,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.000654798583127558,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":1.09114616861916e-05,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":1.10286291601369e-05,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.000130246393382549,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":7.38720085102784e-10,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":7.02868248936284e-07,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.000135239184601232,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":5.08828888996504e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":5.18556116730906e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.000175979032064788,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":2.46728177444311e-07,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.000215921842027456,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.000542122579645365,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":3.81384634238202e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":3.8304668123601e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.000161453004693612,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":1.43297441468349e-07,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.000124581449199468,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.000413570844102651,"MSQI6$MX$SeqV$seqT":0}}
|
||||
1
runtime/verify/origin_rptStMSQI_2.txt
Normal file
1
runtime/verify/origin_rptStMSQI_2.txt
Normal file
@@ -0,0 +1 @@
|
||||
{"mp_id":"73e0a6553c2d24ee17f2623e14f9776b","v_wiring_type":"0","rpt_id":"rptStMSQI","rpt_no":5,"func_type":100,"data_time":1554315120000,"voltage_level":"0.000000","dev_type":"QH_ms","mms_json":{"MSQI2$MX$ImbNgA$mag$f":0,"MSQI2$MX$ImbNgV$mag$f":0,"MSQI2$MX$ImbZroA$mag$f":0,"MSQI2$MX$ImbZroV$mag$f":0,"MSQI2$MX$SeqA$c1$cVal$ang$f":0,"MSQI2$MX$SeqA$c1$cVal$mag$f":3.77992801077198e-05,"MSQI2$MX$SeqA$c2$cVal$ang$f":0,"MSQI2$MX$SeqA$c2$cVal$mag$f":3.71770620404277e-05,"MSQI2$MX$SeqA$c3$cVal$ang$f":0,"MSQI2$MX$SeqA$c3$cVal$mag$f":0.000162459997227415,"MSQI2$MX$SeqA$seqT":0,"MSQI2$MX$SeqV$c1$cVal$ang$f":0,"MSQI2$MX$SeqV$c1$cVal$mag$f":1.46863996519642e-07,"MSQI2$MX$SeqV$c2$cVal$ang$f":0,"MSQI2$MX$SeqV$c2$cVal$mag$f":0.000123170510050841,"MSQI2$MX$SeqV$c3$cVal$ang$f":0,"MSQI2$MX$SeqV$c3$cVal$mag$f":0.000407903105951846,"MSQI2$MX$SeqV$seqT":0,"MSQI3$MX$ImbNgA$mag$f":0,"MSQI3$MX$ImbNgV$mag$f":0,"MSQI3$MX$ImbZroA$mag$f":0,"MSQI3$MX$ImbZroV$mag$f":0,"MSQI3$MX$SeqA$c1$cVal$ang$f":0,"MSQI3$MX$SeqA$c1$cVal$mag$f":6.66953565087169e-05,"MSQI3$MX$SeqA$c2$cVal$ang$f":0,"MSQI3$MX$SeqA$c2$cVal$mag$f":5.95236160734203e-05,"MSQI3$MX$SeqA$c3$cVal$ang$f":0,"MSQI3$MX$SeqA$c3$cVal$mag$f":0.000194157313671894,"MSQI3$MX$SeqA$seqT":0,"MSQI3$MX$SeqV$c1$cVal$ang$f":0,"MSQI3$MX$SeqV$c1$cVal$mag$f":3.83766177947109e-07,"MSQI3$MX$SeqV$c2$cVal$ang$f":0,"MSQI3$MX$SeqV$c2$cVal$mag$f":0.000363907107384875,"MSQI3$MX$SeqV$c3$cVal$ang$f":0,"MSQI3$MX$SeqV$c3$cVal$mag$f":0.000638670870102942,"MSQI3$MX$SeqV$seqT":0,"MSQI4$MX$ImbNgA$mag$f":0,"MSQI4$MX$ImbNgV$mag$f":0,"MSQI4$MX$ImbZroA$mag$f":0,"MSQI4$MX$ImbZroV$mag$f":0,"MSQI4$MX$SeqA$c1$cVal$ang$f":0,"MSQI4$MX$SeqA$c1$cVal$mag$f":1.19578453450231e-05,"MSQI4$MX$SeqA$c2$cVal$ang$f":0,"MSQI4$MX$SeqA$c2$cVal$mag$f":9.52819573285524e-06,"MSQI4$MX$SeqA$c3$cVal$ang$f":0,"MSQI4$MX$SeqA$c3$cVal$mag$f":0.000127479725051671,"MSQI4$MX$SeqA$seqT":0,"MSQI4$MX$SeqV$c1$cVal$ang$f":0,"MSQI4$MX$SeqV$c1$cVal$mag$f":6.87537715649e-09,"MSQI4$MX$SeqV$c2$cVal$ang$f":0,"MSQI4$MX$SeqV$c2$cVal$mag$f":1.64034304361849e-06,"MSQI4$MX$SeqV$c3$cVal$ang$f":0,"MSQI4$MX$SeqV$c3$cVal$mag$f":0.000147920189192519,"MSQI4$MX$SeqV$seqT":0,"MSQI5$MX$ImbNgA$mag$f":0,"MSQI5$MX$ImbNgV$mag$f":0,"MSQI5$MX$ImbZroA$mag$f":0,"MSQI5$MX$ImbZroV$mag$f":0,"MSQI5$MX$SeqA$c1$cVal$ang$f":0,"MSQI5$MX$SeqA$c1$cVal$mag$f":5.11015205120202e-05,"MSQI5$MX$SeqA$c2$cVal$ang$f":0,"MSQI5$MX$SeqA$c2$cVal$mag$f":5.05749376316089e-05,"MSQI5$MX$SeqA$c3$cVal$ang$f":0,"MSQI5$MX$SeqA$c3$cVal$mag$f":0.000177015652297996,"MSQI5$MX$SeqA$seqT":0,"MSQI5$MX$SeqV$c1$cVal$ang$f":0,"MSQI5$MX$SeqV$c1$cVal$mag$f":2.514420884836e-07,"MSQI5$MX$SeqV$c2$cVal$ang$f":0,"MSQI5$MX$SeqV$c2$cVal$mag$f":0.000213714985875413,"MSQI5$MX$SeqV$c3$cVal$ang$f":0,"MSQI5$MX$SeqV$c3$cVal$mag$f":0.000528822594787925,"MSQI5$MX$SeqV$seqT":0,"MSQI6$MX$ImbNgA$mag$f":0,"MSQI6$MX$ImbNgV$mag$f":0,"MSQI6$MX$ImbZroA$mag$f":0,"MSQI6$MX$ImbZroV$mag$f":0,"MSQI6$MX$SeqA$c1$cVal$ang$f":0,"MSQI6$MX$SeqA$c1$cVal$mag$f":3.77992801077198e-05,"MSQI6$MX$SeqA$c2$cVal$ang$f":0,"MSQI6$MX$SeqA$c2$cVal$mag$f":3.71770620404277e-05,"MSQI6$MX$SeqA$c3$cVal$ang$f":0,"MSQI6$MX$SeqA$c3$cVal$mag$f":0.000162459997227415,"MSQI6$MX$SeqA$seqT":0,"MSQI6$MX$SeqV$c1$cVal$ang$f":0,"MSQI6$MX$SeqV$c1$cVal$mag$f":1.46863996519642e-07,"MSQI6$MX$SeqV$c2$cVal$ang$f":0,"MSQI6$MX$SeqV$c2$cVal$mag$f":0.000123170510050841,"MSQI6$MX$SeqV$c3$cVal$ang$f":0,"MSQI6$MX$SeqV$c3$cVal$mag$f":0.000407903105951846,"MSQI6$MX$SeqV$seqT":0}}
|
||||
509
runtime/verify/sample.xml
Normal file
509
runtime/verify/sample.xml
Normal file
@@ -0,0 +1,509 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--注:#7#代表通配符,用于通配数据类型 采用8421码,8-CP95 4-最小值 2-最大值 1-平均值-->
|
||||
<!-- %2,50%代表通配符,用于通配谐波数据,采用范围编码,第一个数字表示谐波起始号,第二个数字谐波结束号-->
|
||||
<!-- SEQ=后面的值采用8421码 8-T 4-C 2-B 1-A-->
|
||||
<!--注:type类型:0-DataType 1-监测点 2-剔除标记 3-发生时刻,毫秒 4-数据链表 5-相位 6-值索引 9-实时SOE事件-->
|
||||
<JSConfigTemplate version="2023-10-31" author="ww" SelectStat="JiangSu" SelectReal="Kafka Producer" desc="江西灿能PQS-882B4">
|
||||
<!--注:暂态事件解析规则配置 Flag:0-不分相 1-分相 如果Flag=0 A,B,C配置成一样,如果Flag=1,A,B,C根据实际配置-->
|
||||
<WavePhasic Flag="1" A="QVVR1" B="QVVR2" C="QVVR3" />
|
||||
<!--注:暂态事件持续事件单位:0-毫秒 1-秒-->
|
||||
<UnitOfTime Unit="0" />
|
||||
<!--注:上送值的时间:UTC-UTC时间 beijing-北京时间-->
|
||||
<ValueOfTime Unit="beijing" />
|
||||
<!--注:录波文件的时间:UTC-UTC时间 beijing-北京时间-->
|
||||
<ComtradeFile WaveTimeFlag="beijing" />
|
||||
<IED name="PQ" desc="电能质量监测装置" />
|
||||
<LDevice Prefix="PQLD" desc="监测点" />
|
||||
<ReportMap>
|
||||
<!--用于映射需要触发那些报告-->
|
||||
<!--ReportControl:ID,RCBName,intgPd,dchg,qchg,dupd,period,gi,issuffixed,seqNum,timeStamp,reasonCode,dataSet,dataRef,bufOvfl,entryID,configRef,segmentation,FlickerFlag-->
|
||||
<!--600/60秒,即10分钟/1分钟-->
|
||||
<!--0,0,0,1,0为周期触发报告-->
|
||||
<!--1,0,0,0,0为变位触发报告-->
|
||||
<ReportStat>
|
||||
<Report ReportControl="LLN0$BR$brcbPLT,600,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,1" />
|
||||
<Report ReportControl="LLN0$BR$brcbPST,600,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,2" />
|
||||
<Report ReportControl="LLN0$BR$brcbFluc,600,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,2" />
|
||||
<Report ReportControl="LLN0$BR$brcbStIHarm,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,1,0" />
|
||||
<Report ReportControl="LLN0$BR$brcbStHarm,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,1,0" />
|
||||
<Report ReportControl="LLN0$BR$brcbStMSQI,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,1,0" />
|
||||
<Report ReportControl="LLN0$BR$brcbStMMXU,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,1,0" />
|
||||
</ReportStat>
|
||||
<ReportReal>
|
||||
<Report ReportControl="LLN0$BR$brcbPLT,600,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,1" />
|
||||
<Report ReportControl="LLN0$BR$brcbPST,600,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,1" />
|
||||
<Report ReportControl="LLN0$BR$brcbFluc,600,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,1" />
|
||||
<Report ReportControl="LLN0$RP$urcbRtIHarm,3,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,0" />
|
||||
<Report ReportControl="LLN0$RP$urcbRtHarm,3,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,0" />
|
||||
<Report ReportControl="LLN0$RP$urcbRtMSQI,3,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,0" />
|
||||
<Report ReportControl="LLN0$RP$urcbRtMMXU,3,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,0" />
|
||||
</ReportReal>
|
||||
<ReportEvent>
|
||||
<Report ReportControl="LLN0$BR$brcbEveQVVR,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,8,1,0"/>
|
||||
<Report ReportControl="LLN0$BR$brcbEveRDRE,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,8,1,0"/>
|
||||
<Report ReportControl="LLN0$BR$brcbAlarm,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,8,1,0"/>
|
||||
</ReportEvent>
|
||||
</ReportMap>
|
||||
<Topic name="HISDATA" desc="历史数据">
|
||||
<DataType name="DATA_TYPE" value="02" desc="历史短时闪变数据" type="0">
|
||||
<Monitor name="MONITOR" desc="监测点" type="1">
|
||||
<Item name="FLAG" value="0" desc="剔除标记" type="2" />
|
||||
<Item name="TIME" desc="发生时刻" type="3" />
|
||||
<Item name="F_S" desc="闪变" type="4" >
|
||||
<Sequence name="SEQ" value="7" desc="相别" type="5" >
|
||||
<Value name="PST" desc="短时闪变" type="6" DO="MFLK1$MX$PhPst" DA="phs*$cVal$mag$f" />
|
||||
<Value name="FLUC" desc="电压波动幅值" type="6" DO="MMXU2$MX$FLUC" DA="phs*$cVal$mag$f" />
|
||||
<Value name="FLUCF" desc="电压波动频度" type="6" DO="MMXU2$MX$FLUCCF" DA="phs*$cVal$mag$f" />
|
||||
</Sequence>
|
||||
<Sequence name="SEQ" value="112" desc="相别" type="5" >
|
||||
<Value name="PST" desc="短时闪变" type="6" DO="MFLK1$MX$PPPst" DA="phs*$cVal$mag$f" />
|
||||
<Value name="FLUC" desc="电压波动幅度" type="6" DO="MMXU2$MX$PPFluc" DA="phs*$cVal$mag$f" />
|
||||
<Value name="FLUCF" desc="电压波动频度" type="6" DO="MMXU2$MX$PPFlucf" DA="phs*$cVal$mag$f" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
<DataType name="DATA_TYPE" value="03" desc="历史长时闪变数据" type="0">
|
||||
<Monitor name="MONITOR" desc="监测点" type="1">
|
||||
<Item name="FLAG" value="0" desc="剔除标记" type="2" />
|
||||
<Item name="TIME" desc="发生时刻" type="3" />
|
||||
<Item name="F_L" desc="闪变" type="4" >
|
||||
<Sequence name="SEQ" value="7" desc="相别" type="5" >
|
||||
<Value name="PLT" desc="长时闪变" type="6" DO="MFLK2$MX$PhPlt" DA="phs*$cVal$mag$f" />
|
||||
</Sequence>
|
||||
<Sequence name="SEQ" value="112" desc="相别" type="5" >
|
||||
<Value name="PLT" desc="长时闪变" type="6" DO="MFLK2$MX$PPPlt" DA="phs*$cVal$mag$f" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
<DataType name="DATA_TYPE" value="04" desc="历史暂态数据" type="0" >
|
||||
<Monitor name="MONITOR" desc="监测点" type="1" >
|
||||
<Item name="VOLTAGE" desc="暂态指标" type="4" >
|
||||
<Sequence name="SEQ" value="7" desc="相别" type="5">
|
||||
<Value name="MAG" desc="残余电压" type="6" DO="QVVR0$MX$VVa" DA="mag$f" />
|
||||
<Value name="DUR" desc="持续时间" type="6" DO="QVVR0$MX$VVaTm" DA="mag$f" />
|
||||
<Value name="SEQ" desc="相别" type="6" DO="" DA="" />
|
||||
<Value name="STARTTIME" desc="开始时间" type="6" DO="" DA="" />
|
||||
<Value name="ENDTIME" desc="结束时间" type="6" DO="" DA="" />
|
||||
<Value name="DISKIND" desc="暂降类型" type="6" DO="" DA="" />
|
||||
<Value name="WAVEFILE" desc="波形文件名称" type="6" DO="" DA="" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
<DataType name="DATA_TYPE" value="01" desc="历史稳态数据" type="0">
|
||||
<Monitor name="MONITOR" desc="监测点" type="1">
|
||||
<Item name="FLAG" value="0" desc="剔除标记" type="2" />
|
||||
<Item name="TIME" desc="发生时刻" type="3" />
|
||||
<Item name="V" desc="电压" type="4" >
|
||||
<!--电压V部分(A-C相)-->
|
||||
<Sequence name="SEQ" value="7" desc="相别(A-C相)" type="5">
|
||||
<!--注:Coefficient 值系数,转成kafka的时候乘以系数;BaseFlag 基础数据标志 0或没有-非基础数据 1-基础数据;LimitUp 数据合理上限,如果包含*%UN字符表示需要乘以电压等级电压,如果包含*%U字符表示需要乘以电压等级/1.732电压例如:220kV则相电压上限为1.5*220;LimitDown 数据合理下限 如果包含*%U字符表示需要乘以电压等级电压-->
|
||||
<Value name="G_DELTA_V" desc="电压偏差95值" type="6" DO="MMXU5$MX$VolDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="DELTA_V" desc="电压偏差平均值" type="6" DO="MMXU2$MX$VolDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="MAX_DELTA_V" desc="电压偏差最大值" type="6" DO="MMXU3$MX$VolDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="MIN_DELTA_V" desc="电压偏差最小值" type="6" DO="MMXU4$MX$VolDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="G_VRMS" desc="电压有效值95值" type="6" DO="MMXU5$MX$PhV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="VRMS" desc="电压有效值平均值" type="6" DO="MMXU2$MX$PhV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="MAX_VRMS" desc="电压有效值最大值" type="6" DO="MMXU3$MX$PhV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="MIN_VRMS" desc="电压有效值最小值" type="6" DO="MMXU4$MX$PhV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
|
||||
<Value name="G_VRMS_LVR" desc="线电压有效值95值" type="6" DO="MMXU5$MX$PPV" DA="l_phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="VRMS_LVR" desc="线电压有效值平均值" type="6" DO="MMXU2$MX$PPV" DA="l_phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="MAX_VRMS_LVR" desc="线电压有效值最大值" type="6" DO="MMXU3$MX$PPV" DA="l_phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="MIN_VRMS_LVR" desc="线电压有效值最小值" type="6" DO="MMXU4$MX$PPV" DA="l_phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
|
||||
<Value name="G_VTHD" desc="电压总谐波畸变率95值" type="6" DO="MHAI5$MX$ThdPhV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="VTHD" desc="电压总谐波畸变率平均值" type="6" DO="MHAI2$MX$ThdPhV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_VTHD" desc="电压总谐波畸变率最大值" type="6" DO="MHAI3$MX$ThdPhV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_VTHD" desc="电压总谐波畸变率最小值" type="6" DO="MHAI4$MX$ThdPhV" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_VFUND_ANGLE" desc="基波电压相角95值" type="6" DO="MHAI5$MX$FundPhVAng" DA="phs*$cVal$ang$f" />
|
||||
<Value name="VFUND_ANGLE" desc="基波电压相角平均值" type="6" DO="MHAI2$MX$FundPhVAng" DA="phs*$cVal$ang$f" />
|
||||
<Value name="MAX_VFUND_ANGLE" desc="基波电压相角最大值" type="6" DO="MHAI3$MX$FundPhVAng" DA="phs*$cVal$ang$f" />
|
||||
<Value name="MIN_VFUND_ANGLE" desc="基波电压相角最小值" type="6" DO="MHAI4$MX$FundPhVAng" DA="phs*$cVal$ang$f" />
|
||||
|
||||
<Value name="G_V1" desc="基波电压有效值95值" type="6" DO="MHAI5$MX$FundPhV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="V1" desc="基波电压有效值平均值" type="6" DO="MHAI2$MX$FundPhV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_V1" desc="基波电压有效值最大值" type="6" DO="MHAI3$MX$FundPhV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_V1" desc="基波电压有效值最小值" type="6" DO="MHAI4$MX$FundPhV" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_SV_%0,49%" desc="间谐波电压含有率(f25-2475)95值" type="6" DO="MHAI11$MX$HPhV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="SV_%0,49%" desc="间谐波电压含有率(f25-2475)平均值" type="6" DO="MHAI8$MX$HPhV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MAX_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最大值" type="6" DO="MHAI9$MX$HPhV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MIN_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最小值" type="6" DO="MHAI10$MX$HPhV" DA="phs*Har[%-0]$mag$f" />
|
||||
|
||||
<Value name="G_V%2,50%" desc="谐波电压含有率(2-50)95值" type="6" DO="MHAI5$MX$HPhV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="V%2,50%" desc="谐波电压含有率(2-50)平均值" type="6" DO="MHAI2$MX$HPhV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="MAX_V%2,50%" desc="谐波电压含有率(2-50)最大值" type="6" DO="MHAI3$MX$HPhV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="MIN_V%2,50%" desc="谐波电压含有率(2-50)最小值" type="6" DO="MHAI4$MX$HPhV" DA="phs*Har[%-2]$mag$f" />
|
||||
|
||||
<Value name="G_VA%2,50%" desc="谐波电压相角(2-50)95值" type="6" DO="MHAI5$MX$HPhV" DA="phs*Har[%-2]$ang$f" />
|
||||
<Value name="VA%2,50%" desc="谐波电压相角(2-50)平均值" type="6" DO="MHAI2$MX$HPhV" DA="phs*Har[%-2]$ang$f" />
|
||||
<Value name="MAX_VA%2,50%" desc="谐波电压相角(2-50)最大值" type="6" DO="MHAI3$MX$HPhV" DA="phs*Har[%-2]$ang$f" />
|
||||
<Value name="MIN_VA%2,50%" desc="谐波电压相角(2-50)最小值" type="6" DO="MHAI4$MX$HPhV" DA="phs*Har[%-2]$ang$f" />
|
||||
</Sequence>
|
||||
<!--电压V部分(A-C相)角型接线-->
|
||||
<Sequence name="SEQ" value="112" desc="相别(A-C相)" type="5">
|
||||
<!--注:Coefficient 值系数,转成kafka的时候乘以系数;BaseFlag 基础数据标志 0或没有-非基础数据 1-基础数据;LimitUp 数据合理上限,如果包含*%UN字符表示需要乘以电压等级电压,如果包含*%U字符表示需要乘以电压等级/1.732电压例如:220kV则相电压上限为1.5*220;LimitDown 数据合理下限 如果包含*%U字符表示需要乘以电压等级电压-->
|
||||
<Value name="G_VRMS_LVR" desc="电压有效值95值" type="6" DO="MMXU5$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="VRMS_LVR" desc="电压有效值平均值" type="6" DO="MMXU2$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="MAX_VRMS_LVR" desc="电压有效值最大值" type="6" DO="MMXU3$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
<Value name="MIN_VRMS_LVR" desc="电压有效值最小值" type="6" DO="MMXU4$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
|
||||
<Value name="G_VFUND_ANGLE" desc="基波电压相角95值" type="6" DO="MHAI5$MX$FundPPVAng" DA="phs*$cVal$ang$f" />
|
||||
<Value name="VFUND_ANGLE" desc="基波电压相角平均值" type="6" DO="MHAI2$MX$FundPPVAng" DA="phs*$cVal$ang$f" />
|
||||
<Value name="MAX_VFUND_ANGLE" desc="基波电压相角最大值" type="6" DO="MHAI3$MX$FundPPVAng" DA="phs*$cVal$ang$f" />
|
||||
<Value name="MIN_VFUND_ANGLE" desc="基波电压相角最小值" type="6" DO="MHAI4$MX$FundPPVAng" DA="phs*$cVal$ang$f" />
|
||||
|
||||
<Value name="G_V1" desc="基波电压有效值95值" type="6" DO="MHAI5$MX$FundPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="V1" desc="基波电压有效值平均值" type="6" DO="MHAI2$MX$FundPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_V1" desc="基波电压有效值最大值" type="6" DO="MHAI3$MX$FundPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_V1" desc="基波电压有效值最小值" type="6" DO="MHAI4$MX$FundPPV" DA="phs*$cVal$mag$f" />
|
||||
|
||||
|
||||
<Value name="G_DELTA_V" desc="电压偏差95值" type="6" DO="MMXU5$MX$PPVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="DELTA_V" desc="电压偏差平均值" type="6" DO="MMXU2$MX$PPVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="MAX_DELTA_V" desc="电压偏差最大值" type="6" DO="MMXU3$MX$PPVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="MIN_DELTA_V" desc="电压偏差最小值" type="6" DO="MMXU4$MX$PPVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
|
||||
<Value name="G_VTHD" desc="电压总谐波畸变率95值" type="6" DO="MHAI5$MX$ThdPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="VTHD" desc="电压总谐波畸变率平均值" type="6" DO="MHAI2$MX$ThdPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_VTHD" desc="电压总谐波畸变率最大值" type="6" DO="MHAI3$MX$ThdPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_VTHD" desc="电压总谐波畸变率最小值" type="6" DO="MHAI4$MX$ThdPPV" DA="phs*$cVal$mag$f" />
|
||||
<Value name="G_SV_%0,49%" desc="间谐波电压含有率(f25-2475)95值" type="6" DO="MHAI11$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="SV_%0,49%" desc="间谐波电压含有率(f25-2475)平均值" type="6" DO="MHAI8$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MAX_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最大值" type="6" DO="MHAI9$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MIN_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最小值" type="6" DO="MHAI10$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="G_V%2,50%" desc="谐波电压含有率(2-50)95值" type="6" DO="MHAI5$MX$HRPPV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="V%2,50%" desc="谐波电压含有率(2-50)平均值" type="6" DO="MHAI2$MX$HRPPV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="MAX_V%2,50%" desc="谐波电压含有率(2-50)最大值" type="6" DO="MHAI3$MX$HRPPV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="MIN_V%2,50%" desc="谐波电压含有率(2-50)最小值" type="6" DO="MHAI4$MX$HRPPV" DA="phs*Har[%-2]$mag$f" />
|
||||
<Value name="G_VA%2,50%" desc="谐波电压相角(2-50)95值" type="6" DO="MHAI5$MX$HRPPV" DA="phs*Har[%-2]$ang$f" />
|
||||
<Value name="VA%2,50%" desc="谐波电压相角(2-50)平均值" type="6" DO="MHAI2$MX$HRPPV" DA="phs*Har[%-2]$ang$f" />
|
||||
<Value name="MAX_VA%2,50%" desc="谐波电压相角(2-50)最大值" type="6" DO="MHAI3$MX$HRPPV" DA="phs*Har[%-2]$ang$f" />
|
||||
<Value name="MIN_VA%2,50%" desc="谐波电压相角(2-50)最小值" type="6" DO="MHAI4$MX$HRPPV" DA="phs*Har[%-2]$ang$f" />
|
||||
</Sequence>
|
||||
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
|
||||
<!--电压V部分(T相)-->
|
||||
<Value name="G_VNSEQ" desc="负序电压95值" type="6" DO="MSQI5$MX$SeqV" DA="c2$cVal$mag$f" />
|
||||
<Value name="VNSEQ" desc="负序电压平均值" type="6" DO="MSQI2$MX$SeqV" DA="c2$cVal$mag$f" />
|
||||
<Value name="MAX_VNSEQ" desc="负序电压最大值" type="6" DO="MSQI3$MX$SeqV" DA="c2$cVal$mag$f" />
|
||||
<Value name="MIN_VNSEQ" desc="负序电压最小值" type="6" DO="MSQI4$MX$SeqV" DA="c2$cVal$mag$f" />
|
||||
|
||||
<Value name="G_V_UNBAN" desc="负序电压不平衡95值" type="6" DO="MSQI5$MX$ImbNgV" DA="mag$f" />
|
||||
<Value name="V_UNBAN" desc="负序电压不平衡平均值" type="6" DO="MSQI2$MX$ImbNgV" DA="mag$f" />
|
||||
<Value name="MAX_V_UNBAN" desc="负序电压不平衡最大值" type="6" DO="MSQI3$MX$ImbNgV" DA="mag$f" />
|
||||
<Value name="MIN_V_UNBAN" desc="负序电压不平衡最小值" type="6" DO="MSQI4$MX$ImbNgV" DA="mag$f" />
|
||||
|
||||
<Value name="G_VZSEQ" desc="零序电压95值" type="6" DO="MSQI5$MX$SeqV" DA="c3$cVal$mag$f" />
|
||||
<Value name="VZSEQ" desc="零序电压平均值" type="6" DO="MSQI2$MX$SeqV" DA="c3$cVal$mag$f" />
|
||||
<Value name="MAX_VZSEQ" desc="零序电压最大值" type="6" DO="MSQI3$MX$SeqV" DA="c3$cVal$mag$f" />
|
||||
<Value name="MIN_VZSEQ" desc="零序电压最小值" type="6" DO="MSQI4$MX$SeqV" DA="c3$cVal$mag$f" />
|
||||
|
||||
<Value name="G_VZSEQ_UNBAN" desc="零序电压不平衡95值" type="6" DO="MSQI5$MX$ImbZroV" DA="mag$f" />
|
||||
<Value name="VZSEQ_UNBAN" desc="零序电压不平衡平均值" type="6" DO="MSQI2$MX$ImbZroV" DA="mag$f" />
|
||||
<Value name="MAX_VZSEQ_UNBAN" desc="零序电压不平衡最大值" type="6" DO="MSQI3$MX$ImbZroV" DA="mag$f" />
|
||||
<Value name="MIN_VZSEQ_UNBAN" desc="零序电压不平衡最小值" type="6" DO="MSQI4$MX$ImbZroV" DA="mag$f" />
|
||||
|
||||
<Value name="G_FREQ" desc="频率95值" type="6" DO="MMXU5$MX$Hz" DA="mag$f" />
|
||||
<Value name="FREQ" desc="频率平均值" type="6" DO="MMXU2$MX$Hz" DA="mag$f" />
|
||||
<Value name="MAX_FREQ" desc="频率最大值" type="6" DO="MMXU3$MX$Hz" DA="mag$f" />
|
||||
<Value name="MIN_FREQ" desc="频率最小值" type="6" DO="MMXU4$MX$Hz" DA="mag$f" />
|
||||
|
||||
<Value name="G_DELTA_FREQ" desc="频率偏差95值" type="6" DO="MMXU5$MX$FreqDev" DA="mag$f" />
|
||||
<Value name="DELTA_FREQ" desc="频率偏差平均值" type="6" DO="MMXU2$MX$FreqDev" DA="mag$f" />
|
||||
<Value name="MAX_DELTA_FREQ" desc="频率偏差最大值" type="6" DO="MMXU3$MX$FreqDev" DA="mag$f" />
|
||||
<Value name="MIN_DELTA_FREQ" desc="频率偏差最小值" type="6" DO="MMXU4$MX$FreqDev" DA="mag$f" />
|
||||
|
||||
<Value name="G_VPSEQ" desc="正序电压95值" type="6" DO="MSQI5$MX$SeqV" DA="c1$cVal$mag$f" />
|
||||
<Value name="VPSEQ" desc="正序电压平均值" type="6" DO="MSQI2$MX$SeqV" DA="c1$cVal$mag$f" />
|
||||
<Value name="MAX_VPSEQ" desc="正序电压最大值" type="6" DO="MSQI3$MX$SeqV" DA="c1$cVal$mag$f" />
|
||||
<Value name="MIN_VPSEQ" desc="正序电压最小值" type="6" DO="MSQI4$MX$SeqV" DA="c1$cVal$mag$f" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
<Item name="I" desc="电流" type="4" >
|
||||
<!--电流I部分(A-C相)-->
|
||||
<Sequence name="SEQ" value="7" desc="相别(A-C相)" type="5">
|
||||
<Value name="G_IRMS" desc="电流有效值95值" type="6" DO="MMXU5$MX$A" DA="phs*$cVal$mag$f" />
|
||||
<Value name="IRMS" desc="电流有效值平均值" type="6" DO="MMXU2$MX$A" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_IRMS" desc="电流有效值最大值" type="6" DO="MMXU3$MX$A" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_IRMS" desc="电流有效值最小值" type="6" DO="MMXU4$MX$A" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_I1" desc="基波电流有效值95值" type="6" DO="MHAI5$MX$HA" DA="phs*Har[1]$mag$f" />
|
||||
<Value name="I1" desc="基波电流有效值平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[1]$mag$f" />
|
||||
<Value name="MAX_I1" desc="基波电流有效值最大值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[1]$mag$f" />
|
||||
<Value name="MIN_I1" desc="基波电流有效值最小值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[1]$mag$f" />
|
||||
|
||||
<Value name="G_IFUND_ANGLE" desc="基波电流相角95值" type="6" DO="MHAI5$MX$HA" DA="phs*Har[1]$ang$f" />
|
||||
<Value name="IFUND_ANGLE" desc="基波电流相角平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[1]$ang$f" />
|
||||
<Value name="MAX_IFUND_ANGLE" desc="基波电流相角最大值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[1]$ang$f" />
|
||||
<Value name="MIN_IFUND_ANGLE" desc="基波电流相角最小值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[1]$ang$f" />
|
||||
|
||||
<Value name="G_SI_%2,51%" desc="间谐波电流幅值(f25-2475)95值" type="6" DO="MHAI11$MX$HA" DA="phs*Har[%-0]$mag$f" Offset="-2" />
|
||||
<Value name="SI_%2,51%" desc="间谐波电流幅值(f25-2475)平均值" type="6" DO="MHAI8$MX$HA" DA="phs*Har[%-0]$mag$f" Offset="-2" />
|
||||
<Value name="MAX_SI_%2,51%" desc="间谐波电流幅值(f25-2475)最大值" type="6" DO="MHAI9$MX$HA" DA="phs*Har[%-0]$mag$f" Offset="-2" />
|
||||
<Value name="MIN_SI_%2,51%" desc="间谐波电流幅值(f25-2475)最小值" type="6" DO="MHAI10$MX$HA" DA="phs*Har[%-0]$mag$f" Offset="-2" />
|
||||
|
||||
<Value name="G_I%2,50%" desc="谐波电流幅值(2-50)95值" type="6" DO="MHAI5$MX$HA" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="I%2,50%" desc="谐波电流幅值(2-50)平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MAX_I%2,50%" desc="谐波电流幅值(2-50)最大值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MIN_I%2,50%" desc="谐波电流幅值(2-50)最小值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[%-0]$mag$f" />
|
||||
|
||||
<Value name="G_IA%2,50%" desc="谐波电流相角(2-50)95值" type="6" DO="MHAI5$MX$HA" DA="phs*Har[%-0]$ang$f" />
|
||||
<Value name="IA%2,50%" desc="谐波电流相角(2-50)平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[%-0]$ang$f" />
|
||||
<Value name="MAX_IA%2,50%" desc="谐波电流相角(2-50)最大值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[%-0]$ang$f" />
|
||||
<Value name="MIN_IA%2,50%" desc="谐波电流相角(2-50)最小值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[%-0]$ang$f" />
|
||||
|
||||
<Value name="ITHD" desc="电流总谐波畸变率平均" type="6" DO="MHAI2$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="MAX_ITHD" desc="电流总谐波畸变率最大" type="6" DO="MHAI3$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="MIN_ITHD" desc="电流总谐波畸变率最小" type="6" DO="MHAI4$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="G_ITHD" desc="电流总谐波畸变率95" type="6" DO="MHAI5$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
</Sequence>
|
||||
<!--电流I部分(T相)-->
|
||||
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
|
||||
<Value name="G_IPSEQ" desc="正序电流95值" type="6" DO="MSQI5$MX$SeqA" DA="c1$cVal$mag$f" />
|
||||
<Value name="IPSEQ" desc="正序电流平均值" type="6" DO="MSQI2$MX$SeqA" DA="c1$cVal$mag$f" />
|
||||
<Value name="MAX_IPSEQ" desc="正序电流最大值" type="6" DO="MSQI3$MX$SeqA" DA="c1$cVal$mag$f" />
|
||||
<Value name="MIN_IPSEQ" desc="正序电流最小值" type="6" DO="MSQI4$MX$SeqA" DA="c1$cVal$mag$f" />
|
||||
<Value name="G_INSEQ" desc="负序电流95值" type="6" DO="MSQI5$MX$SeqA" DA="c2$cVal$mag$f" />
|
||||
<Value name="INSEQ" desc="负序电流平均值" type="6" DO="MSQI2$MX$SeqA" DA="c2$cVal$mag$f" />
|
||||
<Value name="MAX_INSEQ" desc="负序电流最大值" type="6" DO="MSQI3$MX$SeqA" DA="c2$cVal$mag$f" />
|
||||
<Value name="MIN_INSEQ" desc="负序电流最小值" type="6" DO="MSQI4$MX$SeqA" DA="c2$cVal$mag$f" />
|
||||
<Value name="G_IZSEQ" desc="零序电流平95值" type="6" DO="MSQI5$MX$SeqA" DA="c3$cVal$mag$f" />
|
||||
<Value name="IZSEQ" desc="零序电流平均值" type="6" DO="MSQI2$MX$SeqA" DA="c3$cVal$mag$f" />
|
||||
<Value name="MAX_IZSEQ" desc="零序电流最大值" type="6" DO="MSQI3$MX$SeqA" DA="c3$cVal$mag$f" />
|
||||
<Value name="MIN_IZSEQ" desc="零序电流最小值" type="6" DO="MSQI4$MX$SeqA" DA="c3$cVal$mag$f" />
|
||||
<Value name="G_I_UNBAN" desc="负序电流不平衡95值" type="6" DO="MSQI5$MX$ImbNgA" DA="mag$f" />
|
||||
<Value name="I_UNBAN" desc="负序电流不平衡平均值" type="6" DO="MSQI2$MX$ImbNgA" DA="mag$f" />
|
||||
<Value name="MAX_I_UNBAN" desc="负序电流不平衡最大值" type="6" DO="MSQI3$MX$ImbNgA" DA="mag$f" />
|
||||
<Value name="MIN_I_UNBAN" desc="负序电流不平衡最小值" type="6" DO="MSQI4$MX$ImbNgA" DA="mag$f" />
|
||||
<Value name="G_IZSEQ_UNBAN" desc="零序电流不平衡95值" type="6" DO="MSQI5$MX$ImbZroA" DA="mag$f" />
|
||||
<Value name="IZSEQ_UNBAN" desc="零序电流不平衡平均值" type="6" DO="MSQI2$MX$ImbZroA" DA="mag$f" />
|
||||
<Value name="MAX_IZSEQ_UNBAN" desc="零序电流不平衡最大值" type="6" DO="MSQI3$MX$ImbZroA" DA="mag$f" />
|
||||
<Value name="MIN_IZSEQ_UNBAN" desc="零序电流不平衡最小值" type="6" DO="MSQI4$MX$ImbZroA" DA="mag$f" />
|
||||
|
||||
</Sequence>
|
||||
</Item>
|
||||
<Item name="PQ" desc="功率" type="4" >
|
||||
<!--功率PQ部分(A-C相)-->
|
||||
<Sequence name="SEQ" value="7" desc="相别(A-C相)" type="5">
|
||||
<Value name="G_DF" desc="位移功率因数95值" type="6" DO="MMXU5$MX$DF" DA="phs*$cVal$mag$f" />
|
||||
<Value name="DF" desc="位移功率因数平均值" type="6" DO="MMXU2$MX$DF" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_DF" desc="位移功率因数最大值" type="6" DO="MMXU3$MX$DF" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_DF" desc="位移功率因数最小值" type="6" DO="MMXU4$MX$DF" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_PF" desc="功率因数95值" type="6" DO="MMXU5$MX$PF" DA="phs*$cVal$mag$f" />
|
||||
<Value name="PF" desc="功率因数平均值" type="6" DO="MMXU2$MX$PF" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_PF" desc="功率因数最大值" type="6" DO="MMXU3$MX$PF" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_PF" desc="功率因数最小值" type="6" DO="MMXU4$MX$PF" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_P_FUND" desc="基波有功功率95值" type="6" DO="MHAI5$MX$HW" DA="phs*Har[1]$mag$f" />
|
||||
<Value name="P_FUND" desc="基波有功功率平均值" type="6" DO="MHAI2$MX$HW" DA="phs*Har[1]$mag$f" />
|
||||
<Value name="MAX_P_FUND" desc="基波有功功率最大值" type="6" DO="MHAI3$MX$HW" DA="phs*Har[1]$mag$f" />
|
||||
<Value name="MIN_P_FUND" desc="基波有功功率最小值" type="6" DO="MHAI4$MX$HW" DA="phs*Har[1]$mag$f" />
|
||||
|
||||
<Value name="G_S" desc="视在功率95值" type="6" DO="MMXU5$MX$VA" DA="phs*$cVal$mag$f" />
|
||||
<Value name="S" desc="视在功率平均值" type="6" DO="MMXU2$MX$VA" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_S" desc="视在功率最大值" type="6" DO="MMXU3$MX$VA" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_S" desc="视在功率最小值" type="6" DO="MMXU4$MX$VA" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_Q" desc="无功功率95值" type="6" DO="MMXU5$MX$VAr" DA="phs*$cVal$mag$f" />
|
||||
<Value name="Q" desc="无功功率平均值" type="6" DO="MMXU2$MX$VAr" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_Q" desc="无功功率最大值" type="6" DO="MMXU3$MX$VAr" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_Q" desc="无功功率最小值" type="6" DO="MMXU4$MX$VAr" DA="phs*$cVal$mag$f" />
|
||||
|
||||
<Value name="G_P%2,50%" desc="谐波有功功率(2-50)95值" type="6" DO="MHAI5$MX$HW" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="P%2,50%" desc="谐波有功功率(2-50)平均值" type="6" DO="MHAI2$MX$HW" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MAX_P%2,50%" desc="谐波有功功率(2-50)最大值" type="6" DO="MHAI3$MX$HW" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MIN_P%2,50%" desc="谐波有功功率(2-50)最小值" type="6" DO="MHAI4$MX$HW" DA="phs*Har[%-0]$mag$f" />
|
||||
|
||||
<Value name="G_Q%1,50%" desc="谐波无功功率(1-50)95值" type="6" DO="MHAI5$MX$HVAr" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="Q%1,50%" desc="谐波无功功率(1-50)平均值" type="6" DO="MHAI2$MX$HVAr" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MAX_Q%1,50%" desc="谐波无功功率(1-50)最大值" type="6" DO="MHAI3$MX$HVAr" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MIN_Q%1,50%" desc="谐波无功功率(1-50)最小值" type="6" DO="MHAI4$MX$HVAr" DA="phs*Har[%-0]$mag$f" />
|
||||
|
||||
<Value name="G_S%1,50%" desc="谐波视在功率(1-50)95值" type="6" DO="MHAI5$MX$HVA" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="S%1,50%" desc="谐波视在功率(1-50)平均值" type="6" DO="MHAI2$MX$HVA" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MAX_S%1,50%" desc="谐波视在功率(1-50)最大值" type="6" DO="MHAI3$MX$HVA" DA="phs*Har[%-0]$mag$f" />
|
||||
<Value name="MIN_S%1,50%" desc="谐波视在功率(1-50)最小值" type="6" DO="MHAI4$MX$HVA" DA="phs*Har[%-0]$mag$f" />
|
||||
|
||||
<Value name="G_P" desc="有功功率95值" type="6" DO="MMXU5$MX$W" DA="phs*$cVal$mag$f" />
|
||||
<Value name="P" desc="有功功率平均值" type="6" DO="MMXU2$MX$W" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MAX_P" desc="有功功率最大值" type="6" DO="MMXU3$MX$W" DA="phs*$cVal$mag$f" />
|
||||
<Value name="MIN_P" desc="有功功率最小值" type="6" DO="MMXU4$MX$W" DA="phs*$cVal$mag$f" />
|
||||
</Sequence>
|
||||
<!--功率PQ部分(T相)-->
|
||||
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
|
||||
<Value name="G_DF" desc="位移功率因数95值" type="6" DO="MMXU5$MX$TotDF" DA="mag$f" />
|
||||
<Value name="DF" desc="位移功率因数平均值" type="6" DO="MMXU2$MX$TotDF" DA="mag$f" />
|
||||
<Value name="MAX_DF" desc="位移功率因数最大值" type="6" DO="MMXU3$MX$TotDF" DA="mag$f" />
|
||||
<Value name="MIN_DF" desc="位移功率因数最小值" type="6" DO="MMXU4$MX$TotDF" DA="mag$f" />
|
||||
|
||||
<Value name="G_PF" desc="功率因数95值" type="6" DO="MMXU5$MX$TotPF" DA="mag$f" />
|
||||
<Value name="PF" desc="功率因数平均值" type="6" DO="MMXU2$MX$TotPF" DA="mag$f" />
|
||||
<Value name="MAX_PF" desc="功率因数最大值" type="6" DO="MMXU3$MX$TotPF" DA="mag$f" />
|
||||
<Value name="MIN_PF" desc="功率因数最小值" type="6" DO="MMXU4$MX$TotPF" DA="mag$f" />
|
||||
|
||||
<Value name="G_S" desc="视在功率95值" type="6" DO="MMXU5$MX$TotVA" DA="mag$f" />
|
||||
<Value name="S" desc="视在功率平均值" type="6" DO="MMXU2$MX$TotVA" DA="mag$f" />
|
||||
<Value name="MAX_S" desc="视在功率最大值" type="6" DO="MMXU3$MX$TotVA" DA="mag$f" />
|
||||
<Value name="MIN_S" desc="视在功率最小值" type="6" DO="MMXU4$MX$TotVA" DA="mag$f" />
|
||||
|
||||
<Value name="G_Q" desc="无功功率95值" type="6" DO="MMXU5$MX$TotVAr" DA="mag$f" />
|
||||
<Value name="Q" desc="无功功率平均值" type="6" DO="MMXU2$MX$TotVAr" DA="mag$f" />
|
||||
<Value name="MAX_Q" desc="无功功率最大值" type="6" DO="MMXU3$MX$TotVAr" DA="mag$f" />
|
||||
<Value name="MIN_Q" desc="无功功率最小值" type="6" DO="MMXU4$MX$TotVAr" DA="mag$f" />
|
||||
|
||||
<Value name="G_P" desc="有功功率95值" type="6" DO="MMXU5$MX$TotW" DA="mag$f" />
|
||||
<Value name="P" desc="有功功率平均值" type="6" DO="MMXU2$MX$TotW" DA="mag$f" />
|
||||
<Value name="MAX_P" desc="有功功率最大值" type="6" DO="MMXU3$MX$TotW" DA="mag$f" />
|
||||
<Value name="MIN_P" desc="有功功率最小值" type="6" DO="MMXU4$MX$TotW" DA="mag$f" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
</Topic>
|
||||
<Topic name="RTDATA" desc="实时数据">
|
||||
<DataType name="DATA_TYPE" value="01" desc="实时稳态数据" send="1" type="0">
|
||||
<Monitor name="-" desc="监测点" type="1">
|
||||
<Item name="FLAG" value="0" desc="剔除标记" type="3" />
|
||||
<Item name="TIME" desc="发生时刻" type="3" />
|
||||
<Item name="V" desc="电压" type="4" >
|
||||
<!--电压V部分(A-C相)-->
|
||||
<Sequence name="SEQ" value="7" desc="相别(A-C相)" type="5">
|
||||
<Value name="VRMS" desc="电压有效值" type="6" DO="MMXU1$MX$PhV" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="DELTA_V" desc="电压偏差" type="6" DO="MMXU1$MX$VolDev" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="VTHD" desc="电压总谐波畸变率" type="6" DO="MHAI1$MX$ThdPhV" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="VFUND_ANGLE" desc="基波电压相角" type="6" DO="MHAI1$MX$FundPhVAng" DA="phs*$cVal$ang$f" Coefficient="1" />
|
||||
<Value name="VRMS_LVR" desc="线电压有效值" type="6" DO="MMXU1$MX$PPV" DA="l_phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
|
||||
|
||||
<Value name="V1" desc="基波电压有效值" type="6" DO="MHAI1$MX$FundPhV" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
|
||||
<Value name="V%2,50%" desc="2-50次谐波电压含有率" type="6" DO="MHAI1$MX$HPhVMag" DA="phs*Har[%-2]$mag$f" Coefficient="1" Offset="0" />
|
||||
<Value name="SV_%0,49%" desc="1-50次间谐波电压含有率" type="6" DO="MHAI7$MX$HPhV" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
|
||||
<Value name="VA%2,50%" desc="谐波电压相角(2-50)" type="6" DO="MHAI1$MX$HPhV" DA="phs*Har[%-2]$ang$f" />
|
||||
</Sequence>
|
||||
<!--电压V部分(A-C相)角型接线-->
|
||||
<Sequence name="SEQ" value="112" desc="相别(A-C相)" type="5">
|
||||
<!--注:Coefficient 值系数,转成kafka的时候乘以系数;BaseFlag 基础数据标志 0或没有-非基础数据 1-基础数据;LimitUp 数据合理上限,如果包含*%UN字符表示需要乘以电压等级电压,如果包含*%U字符表示需要乘以电压等级/1.732电压例如:220kV则相电压上限为1.5*220;LimitDown 数据合理下限 如果包含*%U字符表示需要乘以电压等级电压-->
|
||||
<Value name="DELTA_V" desc="电压偏差" type="6" DO="MMXU1$MX$VolDev" DA="phs*$cVal$mag$f" Coefficient="1"/>
|
||||
<Value name="VRMS_LVR" desc="电压有效值" type="6" DO="MMXU1$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" Coefficient="1" />
|
||||
<Value name="VTHD" desc="电压总谐波畸变率" type="6" DO="MHAI1$MX$ThdPPV" DA="phs*$cVal$mag$f" Coefficient="1"/>
|
||||
<Value name="VFUND_ANGLE" desc="基波电压相角" type="6" DO="MHAI1$MX$FundPPVAng" DA="phs*$cVal$ang$f" Coefficient="1" />
|
||||
<Value name="V1" desc="基波电压有效值" type="6" DO="MHAI1$MX$FundPPV" DA="phs*$cVal$mag$f" Coefficient="1"/>
|
||||
<Value name="SV_%0,49%" desc="间谐波电压含有率(f25-2475)" type="6" DO="MHAI7$MX$HPPV" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
|
||||
<Value name="V%2,50%" desc="谐波电压含有率(2-50)" type="6" DO="MHAI1$MX$HPPV" DA="phs*Har[%-2]$mag$f" Coefficient="1" Offset="0" />
|
||||
<Value name="VA%2,50%" desc="谐波电压相角(2-50)" type="6" DO="MHAI1$MX$HPPV" DA="phs*Har[%-2]$ang$f" />
|
||||
</Sequence>
|
||||
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
|
||||
<!--电压V部分(T相)-->
|
||||
<Value name="VNSEQ" desc="负序电压" type="6" DO="MSQI1$MX$SeqV" DA="c2$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="V_UNBAN" desc="负序电压不平衡" type="6" DO="MSQI1$MX$ImbNgV" DA="mag$f" Coefficient="1" />
|
||||
<Value name="VZSEQ" desc="零序电压" type="6" DO="MSQI1$MX$SeqV" DA="c3$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="VZSEQ_UNBAN" desc="零序电压不平衡" type="6" DO="MSQI1$MX$ImbZroV" DA="mag$f" Coefficient="1" />
|
||||
<Value name="FREQ" desc="频率" type="6" DO="MMXU1$MX$Hz" DA="mag$f" Coefficient="1" />
|
||||
<Value name="DELTA_FREQ" desc="频率偏差" type="6" DO="MMXU1$MX$FreqDev" DA="mag$f" Coefficient="1" />
|
||||
<Value name="VPSEQ" desc="正序电压" type="6" DO="MSQI1$MX$SeqV" DA="c1$cVal$mag$f" Coefficient="1" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
<Item name="I" desc="电流" type="4" >
|
||||
<!--电流I部分(A-C相)-->
|
||||
<Sequence name="SEQ" value="7" desc="相别(A-C相)" type="5">
|
||||
<Value name="IRMS" desc="电流有效值" type="6" DO="MMXU1$MX$A" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="I1" desc="基波电流有效值" type="6" DO="MHAI1$MX$FundA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="ITHD" desc="电流总谐波畸变率" type="6" DO="MHAI1$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
|
||||
<Value name="I_ANGLE" desc="基波电流相角" type="6" DO="MHAI1$MX$FundAAng" DA="phs*$cVal$ang$f" Coefficient="1" />
|
||||
|
||||
<Value name="I%2,50%" desc="2-50次谐波电流幅值" type="6" DO="MHAI1$MX$HA" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
|
||||
<Value name="SI_%0,49%" desc="1-50次间谐波电流含有率" type="6" DO="MHAI7$MX$HA" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
|
||||
|
||||
</Sequence>
|
||||
<!--电流I部分(T相)-->
|
||||
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
|
||||
<Value name="INSEQ" desc="负序电流" type="6" DO="MSQI1$MX$SeqA" DA="c2$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="I_UNBAN" desc="负序电流不平衡" type="6" DO="MSQI1$MX$ImbNgA" DA="mag$f" Coefficient="1" />
|
||||
<Value name="IZSEQ" desc="零序电流" type="6" DO="MSQI1$MX$SeqA" DA="c3$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="IZSEQ_UNBAN" desc="零序电流不平衡" type="6" DO="MSQI1$MX$ImbZroA" DA="mag$f" Coefficient="1" />
|
||||
<Value name="IPSEQ" desc="正序电流" type="6" DO="MSQI1$MX$SeqA" DA="c1$cVal$mag$f" Coefficient="1" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
<Item name="PQ" desc="功率" type="4" >
|
||||
<!--功率PQ部分(A-C相)-->
|
||||
<Sequence name="SEQ" value="7" desc="相别(A-C相)" type="5">
|
||||
<Value name="PF" desc="功率因数" type="6" DO="MMXU1$MX$PF" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="DF" desc="基波功率因数" type="6" DO="MMXU1$MX$DF" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="P_FUND" desc="基波有功功率" type="6" DO="MHAI1$MX$HW" DA="phs*Har[0]$mag$f" Coefficient="1" />
|
||||
<Value name="S" desc="视在功率" type="6" DO="MMXU1$MX$VA" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="Q" desc="无功功率" type="6" DO="MMXU1$MX$VAr" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
<Value name="P" desc="有功功率" type="6" DO="MMXU1$MX$W" DA="phs*$cVal$mag$f" Coefficient="1" />
|
||||
</Sequence>
|
||||
<!--功率PQ部分(T相)-->
|
||||
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
|
||||
<Value name="PF" desc="功率因数" type="6" DO="MMXU1$MX$TotPF" DA="mag$f" Coefficient="1" />
|
||||
<Value name="DF" desc="基波功率因数" type="6" DO="MMXU1$MX$TotDF" DA="mag$f" Coefficient="1" />
|
||||
<Value name="S" desc="视在功率" type="6" DO="MMXU1$MX$TotVA" DA="mag$f" Coefficient="1" />
|
||||
<Value name="Q" desc="无功功率" type="6" DO="MMXU1$MX$TotVAr" DA="mag$f" Coefficient="1" />
|
||||
<Value name="P" desc="有功功率" type="6" DO="MMXU1$MX$TotW" DA="mag$f" Coefficient="1" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
<DataType name="DATA_TYPE" value="02" desc="实时闪变数据" send="0" type="0">
|
||||
<Monitor name="MONITOR" desc="监测点" type="1">
|
||||
<Item name="TIME" desc="发生时刻" type="3" />
|
||||
<Item name="F" desc="闪变" type="4" >
|
||||
<Sequence name="SEQ" value="7" desc="相别" type="5" >
|
||||
<Value name="SF" desc="短时闪变" type="6" DO="MFLK0$MX$PhPst" DA="phs*$cVal$mag$f" Coefficient="1" PltFlag="False" />
|
||||
<Value name="LF" desc="长时闪变" type="6" DO="MFLK0$MX$PhPlt" DA="phs*$cVal$mag$f" Coefficient="1" PltFlag="True" />
|
||||
</Sequence>
|
||||
<Sequence name="SEQ" value="112" desc="相别" type="5" >
|
||||
<Value name="SF" desc="短时闪变" type="6" DO="MFLK0$MX$PPPst" DA="phs*$cVal$mag$f" Coefficient="1" PltFlag="False" />
|
||||
<Value name="LF" desc="长时闪变" type="6" DO="MFLK0$MX$PPPlt" DA="phs*$cVal$mag$f" Coefficient="1" PltFlag="True" />
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
<DataType name="DATA_TYPE" value="03" desc="实时暂态事件" send="0" type="0" >
|
||||
<Monitor name="MONITOR" desc="监测点" type="1" >
|
||||
<Item name="VOLTAGE" desc="暂态指标" type="4" >
|
||||
<Sequence name="SEQ" value="-" desc="相别" type="5">
|
||||
<Value name="MAG" desc="残余电压" type="6" DO="QVVR0$MX$VVa" DA="mag$f" Coefficient="1" />
|
||||
<Value name="DUR" desc="持续时间" type="6" DO="QVVR0$MX$VVaTm" DA="mag$f" Coefficient="1" />
|
||||
|
||||
</Sequence>
|
||||
</Item>
|
||||
</Monitor>
|
||||
</DataType>
|
||||
</Topic>
|
||||
<Topic name="SOEDATA" desc="告警SOE">
|
||||
<SOE name="ThdVVal" desc="电压总畸变率越限告警" type="9" DO="GGIO1$ST$Alm1" DA="stVal" />
|
||||
<SOE name="ThdAVal" desc="电流总畸变率越限告警" type="9" DO="GGIO1$ST$Alm2" DA="stVal" />
|
||||
<SOE name="HToddVVal" desc="奇次谐波电压含有率越限告警" type="9" DO="GGIO1$ST$Alm3" DA="stVal" />
|
||||
<SOE name="HTeddVVal" desc="偶次谐波电压含有率越限告警" type="9" DO="GGIO1$ST$Alm4" DA="stVal" />
|
||||
<SOE name="H2AVal" desc="2次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm5" DA="stVal" />
|
||||
<SOE name="H3AVal" desc="3次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm6" DA="stVal" />
|
||||
<SOE name="H4AVal" desc="4次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm7" DA="stVal" />
|
||||
<SOE name="H5AVal" desc="5次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm8" DA="stVal" />
|
||||
<SOE name="H7AVal" desc="7次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm9" DA="stVal" />
|
||||
<SOE name="H9AVal" desc="9次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm10" DA="stVal" />
|
||||
<SOE name="H11AVal" desc="11次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm11" DA="stVal" />
|
||||
<SOE name="H13AVal" desc="13次谐波电流越限告警" type="9" DO="GGIO1$ST$Alm12" DA="stVal" />
|
||||
<SOE name="ImbNgVFVal" desc="电压负序不平衡度越限告警" type="9" DO="GGIO1$ST$Alm13" DA="stVal" />
|
||||
<SOE name="ImbNgAFVal" desc="电流负序不平衡度越限告警" type="9" DO="GGIO1$ST$Alm14" DA="stVal" />
|
||||
<SOE name="OvHzStrVal" desc="频率高越限告警" type="9" DO="GGIO1$ST$Alm15" DA="stVal" />
|
||||
<SOE name="UnHzStrVal" desc="频率低越限告警" type="9" DO="GGIO1$ST$Alm16" DA="stVal" />
|
||||
<SOE name="LRVInterrup" desc="长期电压中断告警" type="9" DO="GGIO1$ST$Alm17" DA="stVal" />
|
||||
<SOE name="LRVSwell" desc="电压上偏差越限告警" type="9" DO="GGIO1$ST$Alm18" DA="stVal" />
|
||||
<SOE name="LRVSag" desc="电压下偏差越限告警" type="9" DO="GGIO1$ST$Alm19" DA="stVal" />
|
||||
<SOE name="PhPstVal" desc="短时闪变越限告警" type="9" DO="GGIO1$ST$Alm20" DA="stVal" />
|
||||
<SOE name="PhPltVal" desc="长时闪变越限告警" type="9" DO="GGIO1$ST$Alm21" DA="stVal" />
|
||||
<SOE name="PhyStateFault" desc="终端运行状态:故障" type="9" DO="GGIO1$ST$Alm22" DA="stVal" />
|
||||
<SOE name="PhyStateRun" desc="终端运行状态:运行" type="9" DO="GGIO1$ST$Alm23" DA="stVal" />
|
||||
<SOE name="PwrUp" desc="终端上电" type="9" DO="LPHD0$ST$PwrUp" DA="stVal" />
|
||||
<SOE name="PwrDn" desc="终端掉电" type="9" DO="LPHD0$ST$PwrDn" DA="stVal" />
|
||||
<SOE name="CommInterrupt" desc="终端通信中断" type="9" DO="" DA="" />
|
||||
<SOE name="CommResume" desc="终端通信恢复" type="9" DO="" DA="" />
|
||||
</Topic>
|
||||
</JSConfigTemplate>
|
||||
288
source/icd_mapper.cpp
Normal file
288
source/icd_mapper.cpp
Normal file
@@ -0,0 +1,288 @@
|
||||
#include "pq_app.h"
|
||||
#include "tinyxml2.h"
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cctype>
|
||||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
namespace {
|
||||
|
||||
std::string readAllBinary(const fs::path& path) {
|
||||
std::ifstream ifs(path, std::ios::binary);
|
||||
if (!ifs) throw std::runtime_error("Failed to open file: " + path.string());
|
||||
std::ostringstream ss;
|
||||
ss << ifs.rdbuf();
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
void writeAllBinary(const fs::path& path, const std::string& text) {
|
||||
std::ofstream ofs(path, std::ios::binary);
|
||||
if (!ofs) throw std::runtime_error("Failed to write file: " + path.string());
|
||||
ofs << text;
|
||||
}
|
||||
|
||||
std::string lowerAscii(std::string s) {
|
||||
std::transform(s.begin(), s.end(), s.begin(),
|
||||
[](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
||||
return s;
|
||||
}
|
||||
|
||||
bool declaresGbEncoding(const std::string& text) {
|
||||
std::string head = lowerAscii(text.substr(0, std::min<size_t>(text.size(), 256)));
|
||||
return head.find("gb2312") != std::string::npos ||
|
||||
head.find("gbk") != std::string::npos ||
|
||||
head.find("gb18030") != std::string::npos;
|
||||
}
|
||||
|
||||
bool isLikelyUtf8(const std::string& text) {
|
||||
int remaining = 0;
|
||||
for (unsigned char c : text) {
|
||||
if (remaining == 0) {
|
||||
if ((c & 0x80) == 0) continue;
|
||||
if ((c & 0xE0) == 0xC0) remaining = 1;
|
||||
else if ((c & 0xF0) == 0xE0) remaining = 2;
|
||||
else if ((c & 0xF8) == 0xF0) remaining = 3;
|
||||
else return false;
|
||||
} else {
|
||||
if ((c & 0xC0) != 0x80) return false;
|
||||
--remaining;
|
||||
}
|
||||
}
|
||||
return remaining == 0;
|
||||
}
|
||||
|
||||
std::string ansiToUtf8(const std::string& text) {
|
||||
if (text.empty()) return "";
|
||||
int wideLen = MultiByteToWideChar(936, 0, text.data(), (int)text.size(), nullptr, 0);
|
||||
if (wideLen <= 0) return text;
|
||||
std::wstring wide(wideLen, L'\0');
|
||||
MultiByteToWideChar(936, 0, text.data(), (int)text.size(), wide.data(), wideLen);
|
||||
int utf8Len = WideCharToMultiByte(CP_UTF8, 0, wide.data(), wideLen, nullptr, 0, nullptr, nullptr);
|
||||
std::string out(utf8Len, '\0');
|
||||
WideCharToMultiByte(CP_UTF8, 0, wide.data(), wideLen, out.data(), utf8Len, nullptr, nullptr);
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string loadXmlText(const fs::path& path) {
|
||||
std::string raw = readAllBinary(path);
|
||||
if (declaresGbEncoding(raw) || !isLikelyUtf8(raw)) return ansiToUtf8(raw);
|
||||
return raw;
|
||||
}
|
||||
|
||||
std::string localName(const char* name) {
|
||||
if (!name) return "";
|
||||
std::string s(name);
|
||||
size_t pos = s.find(':');
|
||||
return pos == std::string::npos ? s : s.substr(pos + 1);
|
||||
}
|
||||
|
||||
std::string attr(const tinyxml2::XMLElement* e, const char* name) {
|
||||
const char* v = e ? e->Attribute(name) : nullptr;
|
||||
return v ? v : "";
|
||||
}
|
||||
|
||||
void collectIcdDescriptions(const tinyxml2::XMLElement* element,
|
||||
std::unordered_map<std::string, std::string>& descByDo) {
|
||||
if (!element) return;
|
||||
if (localName(element->Name()) == "LN") {
|
||||
std::string lnClass = attr(element, "lnClass");
|
||||
std::string inst = attr(element, "inst");
|
||||
if (!lnClass.empty()) {
|
||||
for (const tinyxml2::XMLElement* child = element->FirstChildElement();
|
||||
child;
|
||||
child = child->NextSiblingElement()) {
|
||||
if (localName(child->Name()) != "DOI") continue;
|
||||
std::string doiName = attr(child, "name");
|
||||
std::string desc = attr(child, "desc");
|
||||
if (doiName.empty() || desc.empty()) continue;
|
||||
std::string key = lnClass + inst + "$MX$" + doiName;
|
||||
descByDo[key] = desc;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const tinyxml2::XMLElement* child = element->FirstChildElement();
|
||||
child;
|
||||
child = child->NextSiblingElement()) {
|
||||
collectIcdDescriptions(child, descByDo);
|
||||
}
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, std::string> parseIcdDescriptions(const fs::path& icdPath) {
|
||||
tinyxml2::XMLDocument doc;
|
||||
std::string xml = loadXmlText(icdPath);
|
||||
tinyxml2::XMLError rc = doc.Parse(xml.c_str(), xml.size());
|
||||
if (rc != tinyxml2::XML_SUCCESS) {
|
||||
throw std::runtime_error("Failed to parse ICD XML: " + std::to_string((int)rc));
|
||||
}
|
||||
std::unordered_map<std::string, std::string> descByDo;
|
||||
collectIcdDescriptions(doc.RootElement(), descByDo);
|
||||
return descByDo;
|
||||
}
|
||||
|
||||
std::string cellText(const tinyxml2::XMLElement* cell) {
|
||||
const tinyxml2::XMLElement* data = cell ? cell->FirstChildElement("Data") : nullptr;
|
||||
const char* text = data ? data->GetText() : nullptr;
|
||||
return text ? text : "";
|
||||
}
|
||||
|
||||
int cellIndex(const tinyxml2::XMLElement* cell, int fallback) {
|
||||
const char* idx = cell ? cell->Attribute("ss:Index") : nullptr;
|
||||
return idx && *idx ? std::max(1, std::atoi(idx)) : fallback;
|
||||
}
|
||||
|
||||
tinyxml2::XMLElement* cellAt(tinyxml2::XMLElement* row, int col) {
|
||||
int current = 1;
|
||||
for (tinyxml2::XMLElement* cell = row ? row->FirstChildElement("Cell") : nullptr;
|
||||
cell;
|
||||
cell = cell->NextSiblingElement("Cell")) {
|
||||
current = cellIndex(cell, current);
|
||||
if (current == col) return cell;
|
||||
++current;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
tinyxml2::XMLElement* ensureCell(tinyxml2::XMLDocument& doc, tinyxml2::XMLElement* row, int col) {
|
||||
if (tinyxml2::XMLElement* existing = cellAt(row, col)) return existing;
|
||||
tinyxml2::XMLElement* cell = doc.NewElement("Cell");
|
||||
cell->SetAttribute("ss:Index", col);
|
||||
row->InsertEndChild(cell);
|
||||
return cell;
|
||||
}
|
||||
|
||||
void setCellText(tinyxml2::XMLDocument& doc, tinyxml2::XMLElement* cell, const std::string& text) {
|
||||
tinyxml2::XMLElement* data = cell->FirstChildElement("Data");
|
||||
if (!data) {
|
||||
data = doc.NewElement("Data");
|
||||
data->SetAttribute("ss:Type", "String");
|
||||
cell->InsertEndChild(data);
|
||||
}
|
||||
data->SetText(text.c_str());
|
||||
}
|
||||
|
||||
std::vector<std::string> sortedKeysByLength(const std::unordered_map<std::string, std::string>& values) {
|
||||
std::vector<std::string> keys;
|
||||
keys.reserve(values.size());
|
||||
for (const auto& kv : values) keys.push_back(kv.first);
|
||||
std::sort(keys.begin(), keys.end(), [](const std::string& a, const std::string& b) {
|
||||
if (a.size() != b.size()) return a.size() > b.size();
|
||||
return a < b;
|
||||
});
|
||||
return keys;
|
||||
}
|
||||
|
||||
bool pathMatchesDo(const std::string& rawPath, const std::string& doKey) {
|
||||
return rawPath == doKey ||
|
||||
(rawPath.size() > doKey.size() &&
|
||||
rawPath.compare(0, doKey.size(), doKey) == 0 &&
|
||||
rawPath[doKey.size()] == '$');
|
||||
}
|
||||
|
||||
std::string descForPath(const std::string& rawPath,
|
||||
const std::unordered_map<std::string, std::string>& descByDo,
|
||||
const std::vector<std::string>& orderedKeys) {
|
||||
for (const auto& key : orderedKeys) {
|
||||
if (pathMatchesDo(rawPath, key)) {
|
||||
auto it = descByDo.find(key);
|
||||
return it == descByDo.end() ? "" : it->second;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
tinyxml2::XMLElement* findWorksheet(tinyxml2::XMLDocument& doc, const char* sheetName) {
|
||||
tinyxml2::XMLElement* workbook = doc.FirstChildElement("Workbook");
|
||||
for (tinyxml2::XMLElement* ws = workbook ? workbook->FirstChildElement("Worksheet") : nullptr;
|
||||
ws;
|
||||
ws = ws->NextSiblingElement("Worksheet")) {
|
||||
const char* name = ws->Attribute("ss:Name");
|
||||
if (name && std::string(name) == sheetName) return ws;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int headerColumn(tinyxml2::XMLElement* headerRow, const std::string& title) {
|
||||
int current = 1;
|
||||
for (tinyxml2::XMLElement* cell = headerRow ? headerRow->FirstChildElement("Cell") : nullptr;
|
||||
cell;
|
||||
cell = cell->NextSiblingElement("Cell")) {
|
||||
current = cellIndex(cell, current);
|
||||
if (cellText(cell) == title) return current;
|
||||
++current;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool pqApplyIcdDescriptionsToWorkbook(const std::string& icdPath,
|
||||
const std::string& workbookPath,
|
||||
std::string* message) {
|
||||
try {
|
||||
auto descByDo = parseIcdDescriptions(fs::u8path(icdPath));
|
||||
if (descByDo.empty()) {
|
||||
if (message) *message = "ICD 中没有解析到 LN/DOI desc";
|
||||
return false;
|
||||
}
|
||||
std::vector<std::string> orderedKeys = sortedKeysByLength(descByDo);
|
||||
|
||||
tinyxml2::XMLDocument doc;
|
||||
std::string workbookXml = readAllBinary(fs::u8path(workbookPath));
|
||||
tinyxml2::XMLError rc = doc.Parse(workbookXml.c_str(), workbookXml.size());
|
||||
if (rc != tinyxml2::XML_SUCCESS) {
|
||||
if (message) *message = "表格文件解析失败: " + std::to_string((int)rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
tinyxml2::XMLElement* sheet = findWorksheet(doc, "未匹配的原始数据");
|
||||
if (!sheet) {
|
||||
if (message) *message = "没有找到 sheet: 未匹配的原始数据";
|
||||
return false;
|
||||
}
|
||||
tinyxml2::XMLElement* table = sheet->FirstChildElement("Table");
|
||||
tinyxml2::XMLElement* header = table ? table->FirstChildElement("Row") : nullptr;
|
||||
int pathCol = headerColumn(header, "原始路径");
|
||||
int icdCol = headerColumn(header, "icd中代表的字段");
|
||||
if (pathCol <= 0 || icdCol <= 0) {
|
||||
if (message) *message = "未匹配 sheet 缺少 原始路径 或 icd中代表的字段 列";
|
||||
return false;
|
||||
}
|
||||
|
||||
int matched = 0;
|
||||
for (tinyxml2::XMLElement* row = header ? header->NextSiblingElement("Row") : nullptr;
|
||||
row;
|
||||
row = row->NextSiblingElement("Row")) {
|
||||
tinyxml2::XMLElement* pathCell = cellAt(row, pathCol);
|
||||
std::string rawPath = cellText(pathCell);
|
||||
if (rawPath.empty()) continue;
|
||||
std::string desc = descForPath(rawPath, descByDo, orderedKeys);
|
||||
if (desc.empty()) continue;
|
||||
tinyxml2::XMLElement* icdCell = ensureCell(doc, row, icdCol);
|
||||
setCellText(doc, icdCell, desc);
|
||||
++matched;
|
||||
}
|
||||
|
||||
tinyxml2::XMLPrinter printer;
|
||||
doc.Print(&printer);
|
||||
writeAllBinary(fs::u8path(workbookPath), printer.CStr());
|
||||
if (message) {
|
||||
*message = "ICD 导入完成,DOI=" + std::to_string(descByDo.size()) +
|
||||
",填入未匹配原始数据=" + std::to_string(matched);
|
||||
}
|
||||
return true;
|
||||
} catch (const std::exception& e) {
|
||||
if (message) *message = e.what();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
1640
source/interface.cpp
1640
source/interface.cpp
File diff suppressed because it is too large
Load Diff
463
source/main.cpp
463
source/main.cpp
@@ -7,9 +7,11 @@
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <functional>
|
||||
#include <limits>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <regex>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
@@ -593,23 +595,30 @@ static const ValueMeta* findMetaForKey(
|
||||
if (exactCandidates.empty()) collectByName(metas, secondary, wiring, filter, exactCandidates);
|
||||
return bestMeta(exactCandidates, pk);
|
||||
}
|
||||
// 把 XML 中序列 DA,如 phs*Har[%-2]$mag$f,改显示成 phs*Har[0-48]$mag$f
|
||||
static bool parseDaValueOffset(const std::string& daPath, int& offset) {
|
||||
std::smatch m;
|
||||
std::regex re(R"(%(-?\d+))");
|
||||
if (!std::regex_search(daPath, m, re)) return false;
|
||||
offset = std::stoi(m[1].str());
|
||||
return true;
|
||||
}
|
||||
|
||||
// 把 XML 中序列 DA,如 phs*Har[%-2]$mag$f,按“数组基准 + 取值偏移量”改显示成 phs*Har[0-48]$mag$f
|
||||
static std::string rewriteDaRangeForDisplay(const std::string& daPath,
|
||||
const ValueMeta& vm,
|
||||
int keyStart,
|
||||
int keyEnd) {
|
||||
if (!vm.isSequence) return daPath;
|
||||
|
||||
// 规则:
|
||||
// XML 模板里是 [%-2]
|
||||
// key 是 [2-50]
|
||||
// 显示要变成 [0-48]
|
||||
// 即:keyStart - vm.seqStart, keyEnd - vm.seqStart
|
||||
int dispStart = keyStart - vm.seqStart;
|
||||
int dispEnd = keyEnd - vm.seqStart;
|
||||
(void)keyStart;
|
||||
(void)keyEnd;
|
||||
int valueOffset = 0;
|
||||
parseDaValueOffset(daPath, valueOffset);
|
||||
int dispStart = vm.seqStart + valueOffset;
|
||||
int dispEnd = vm.seqEnd + valueOffset;
|
||||
|
||||
std::smatch m;
|
||||
std::regex re(R"(\[%-(\d+)\])");
|
||||
std::regex re(R"(\[%(-?\d+)\])");
|
||||
if (std::regex_search(daPath, m, re)) {
|
||||
std::ostringstream oss;
|
||||
oss << "[" << dispStart << "-" << dispEnd << "]";
|
||||
@@ -693,6 +702,13 @@ struct SheetSpec {
|
||||
std::string frontType;
|
||||
};
|
||||
|
||||
struct SheetStats {
|
||||
std::string sheetName;
|
||||
int normal = 0;
|
||||
int abnormal = 0;
|
||||
int missing = 0;
|
||||
};
|
||||
|
||||
struct OriginRecord {
|
||||
std::string path;
|
||||
std::string value;
|
||||
@@ -700,8 +716,16 @@ struct OriginRecord {
|
||||
int sourceOrder = 0;
|
||||
};
|
||||
|
||||
struct OriginHeader {
|
||||
std::string title;
|
||||
std::string fileName;
|
||||
int sourceOrder = 0;
|
||||
std::vector<HeaderItem> fields;
|
||||
};
|
||||
|
||||
struct OriginData {
|
||||
std::vector<OriginRecord> records;
|
||||
std::vector<OriginHeader> headers;
|
||||
std::unordered_map<std::string, std::vector<size_t>> pathToRecords;
|
||||
std::unordered_set<size_t> used;
|
||||
};
|
||||
@@ -710,6 +734,15 @@ struct OriginMatch {
|
||||
std::string path;
|
||||
std::string value;
|
||||
std::string reportName;
|
||||
int sourceOrder = -1;
|
||||
int rangeStart = std::numeric_limits<int>::min();
|
||||
int rangeEnd = std::numeric_limits<int>::min();
|
||||
std::vector<int> valueIndexes;
|
||||
};
|
||||
|
||||
struct ComparePlan {
|
||||
int originPickStart = std::numeric_limits<int>::min();
|
||||
int originPickEnd = std::numeric_limits<int>::min();
|
||||
};
|
||||
|
||||
struct JsonDataBucket {
|
||||
@@ -741,6 +774,51 @@ static std::string reportNameFromRoot(const json& root, const fs::path& originPa
|
||||
return originPath.filename().u8string();
|
||||
}
|
||||
|
||||
static const std::vector<std::string>& originHeaderKeys() {
|
||||
static const std::vector<std::string> keys = {
|
||||
"rpt_no",
|
||||
"data_time",
|
||||
"mp_id",
|
||||
"rpt_id",
|
||||
"voltage_level",
|
||||
"v_wiring_type"
|
||||
};
|
||||
return keys;
|
||||
}
|
||||
|
||||
static const std::vector<std::string>& originHeaderDisplayKeys() {
|
||||
static const std::vector<std::string> keys = {
|
||||
"rpt_no",
|
||||
"data_time",
|
||||
"mp_id",
|
||||
"voltage_level",
|
||||
"v_wiring_type"
|
||||
};
|
||||
return keys;
|
||||
}
|
||||
|
||||
static std::string rootHeaderValue(const json& root, const std::string& key) {
|
||||
if (!root.is_object()) return "";
|
||||
auto it = root.find(key);
|
||||
if (it == root.end()) return "";
|
||||
return jsonScalarForOutput(*it);
|
||||
}
|
||||
|
||||
static void appendOriginHeader(OriginData& data,
|
||||
const fs::path& originPath,
|
||||
int sourceOrder,
|
||||
const json& root,
|
||||
const std::string& reportName) {
|
||||
OriginHeader header;
|
||||
header.title = reportName.empty() ? originPath.filename().u8string() : reportName;
|
||||
header.fileName = originPath.filename().u8string();
|
||||
header.sourceOrder = sourceOrder;
|
||||
for (const auto& key : originHeaderKeys()) {
|
||||
header.fields.push_back({key, rootHeaderValue(root, key)});
|
||||
}
|
||||
data.headers.push_back(std::move(header));
|
||||
}
|
||||
|
||||
static std::vector<json> parseJsonRoots(const std::string& text) {
|
||||
std::vector<json> roots;
|
||||
size_t pos = 0;
|
||||
@@ -787,6 +865,7 @@ static std::vector<json> parseJsonRoots(const std::string& text) {
|
||||
|
||||
static void appendOriginRoot(OriginData& data, const fs::path& originPath, int sourceOrder, const json& root) {
|
||||
std::string reportName = reportNameFromRoot(root, originPath, sourceOrder);
|
||||
appendOriginHeader(data, originPath, sourceOrder, root, reportName);
|
||||
|
||||
const json* mms = &root;
|
||||
if (root.is_object() && root.contains("mms_json") && root["mms_json"].is_object()) {
|
||||
@@ -908,7 +987,9 @@ static std::vector<std::string> makeOriginPathCandidates(const std::string& doPa
|
||||
std::string primary = makeOriginPath(doPath, daPath, stat, phase, wiring);
|
||||
if (!primary.empty()) paths.push_back(primary);
|
||||
return paths;
|
||||
}static bool parseOriginRangePath(const std::string& path,
|
||||
}
|
||||
|
||||
static bool parseOriginRangePath(const std::string& path,
|
||||
std::string& before,
|
||||
int& start,
|
||||
int& end,
|
||||
@@ -923,12 +1004,38 @@ static std::vector<std::string> makeOriginPathCandidates(const std::string& doPa
|
||||
return start <= end;
|
||||
}
|
||||
|
||||
static bool parseOriginIndexedPath(const std::string& path,
|
||||
const std::string& before,
|
||||
const std::string& after,
|
||||
int& index) {
|
||||
if (path.size() < before.size() + after.size() + 3) return false;
|
||||
if (path.compare(0, before.size(), before) != 0) return false;
|
||||
if (!after.empty() &&
|
||||
path.compare(path.size() - after.size(), after.size(), after) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t midStart = before.size();
|
||||
size_t midEnd = after.empty() ? path.size() : path.size() - after.size();
|
||||
if (midEnd <= midStart + 2 || path[midStart] != '[' || path[midEnd - 1] != ']') return false;
|
||||
std::string number = path.substr(midStart + 1, midEnd - midStart - 2);
|
||||
if (number.empty() || !std::all_of(number.begin(), number.end(), [](unsigned char ch) {
|
||||
return std::isdigit(ch) != 0;
|
||||
})) {
|
||||
return false;
|
||||
}
|
||||
index = std::stoi(number);
|
||||
return true;
|
||||
}
|
||||
|
||||
static OriginMatch matchOrigin(OriginData* origin,
|
||||
const std::string& doPath,
|
||||
const std::string& daPath,
|
||||
const std::string& stat,
|
||||
const std::string& phase,
|
||||
const std::string& wiring) {
|
||||
const std::string& wiring,
|
||||
int pickStartOverride = std::numeric_limits<int>::min(),
|
||||
int pickEndOverride = std::numeric_limits<int>::min()) {
|
||||
OriginMatch match;
|
||||
if (!origin) return match;
|
||||
|
||||
@@ -938,25 +1045,75 @@ static OriginMatch matchOrigin(OriginData* origin,
|
||||
std::string before, after;
|
||||
int start = 0, end = 0;
|
||||
if (parseOriginRangePath(path, before, start, end, after)) {
|
||||
std::ostringstream values;
|
||||
bool any = false;
|
||||
std::string reportName;
|
||||
for (int i = start; i <= end; ++i) {
|
||||
if (i != start) values << ",";
|
||||
std::string onePath = before + "[" + std::to_string(i) + "]" + after;
|
||||
const OriginRecord* rec = firstUnusedRecord(origin, onePath);
|
||||
if (rec) {
|
||||
any = true;
|
||||
values << rec->value;
|
||||
if (reportName.empty()) reportName = rec->reportName;
|
||||
markRecordUsed(origin, rec);
|
||||
int pickStart = pickStartOverride == std::numeric_limits<int>::min() ? start : pickStartOverride;
|
||||
int pickEnd = pickEndOverride == std::numeric_limits<int>::min() ? end : pickEndOverride;
|
||||
|
||||
struct IndexedRecord {
|
||||
int index = 0;
|
||||
size_t recordIndex = 0;
|
||||
};
|
||||
std::map<int, std::vector<IndexedRecord>> bySource;
|
||||
for (size_t recIndex = 0; recIndex < origin->records.size(); ++recIndex) {
|
||||
int indexedPath = 0;
|
||||
if (!parseOriginIndexedPath(origin->records[recIndex].path, before, after, indexedPath)) continue;
|
||||
bySource[origin->records[recIndex].sourceOrder].push_back({indexedPath, recIndex});
|
||||
}
|
||||
|
||||
int bestSource = -1;
|
||||
int bestIntersection = 0;
|
||||
bool bestHasPickStart = false;
|
||||
for (const auto& kv : bySource) {
|
||||
int intersection = 0;
|
||||
bool hasPickStart = false;
|
||||
for (const auto& rec : kv.second) {
|
||||
if (rec.index >= pickStart && rec.index <= pickEnd) ++intersection;
|
||||
if (rec.index == pickStart) hasPickStart = true;
|
||||
}
|
||||
if (intersection <= 0) continue;
|
||||
if (bestSource < 0 ||
|
||||
(hasPickStart && !bestHasPickStart) ||
|
||||
(hasPickStart == bestHasPickStart && intersection > bestIntersection)) {
|
||||
bestSource = kv.first;
|
||||
bestIntersection = intersection;
|
||||
bestHasPickStart = hasPickStart;
|
||||
}
|
||||
}
|
||||
if (any) {
|
||||
match.path = path;
|
||||
match.value = values.str();
|
||||
match.reportName = reportName;
|
||||
return match;
|
||||
|
||||
if (bestSource >= 0) {
|
||||
std::map<int, size_t> indexToRecord;
|
||||
int displayStart = std::numeric_limits<int>::max();
|
||||
int displayEnd = std::numeric_limits<int>::min();
|
||||
for (const auto& rec : bySource[bestSource]) {
|
||||
if (indexToRecord.count(rec.index)) continue;
|
||||
indexToRecord[rec.index] = rec.recordIndex;
|
||||
displayStart = std::min(displayStart, rec.index);
|
||||
displayEnd = std::max(displayEnd, rec.index);
|
||||
}
|
||||
|
||||
std::ostringstream values;
|
||||
bool any = false;
|
||||
std::string reportName;
|
||||
for (int i = displayStart; i <= displayEnd; ++i) {
|
||||
if (i != displayStart) values << ",";
|
||||
match.valueIndexes.push_back(i);
|
||||
auto it = indexToRecord.find(i);
|
||||
if (it == indexToRecord.end()) continue;
|
||||
const OriginRecord& rec = origin->records[it->second];
|
||||
any = true;
|
||||
values << rec.value;
|
||||
if (reportName.empty()) reportName = rec.reportName;
|
||||
markRecordUsed(origin, &rec);
|
||||
}
|
||||
|
||||
if (any) {
|
||||
match.path = before + "[" + std::to_string(displayStart) + "-" + std::to_string(displayEnd) + "]" + after;
|
||||
match.value = values.str();
|
||||
match.reportName = reportName;
|
||||
match.sourceOrder = bestSource;
|
||||
match.rangeStart = displayStart;
|
||||
match.rangeEnd = displayEnd;
|
||||
return match;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -966,13 +1123,16 @@ static OriginMatch matchOrigin(OriginData* origin,
|
||||
match.path = path;
|
||||
match.value = rec->value;
|
||||
match.reportName = rec->reportName;
|
||||
match.sourceOrder = rec->sourceOrder;
|
||||
markRecordUsed(origin, rec);
|
||||
return match;
|
||||
}
|
||||
}
|
||||
|
||||
return match;
|
||||
}static size_t utf8CharLen(unsigned char c) {
|
||||
}
|
||||
|
||||
static size_t utf8CharLen(unsigned char c) {
|
||||
if (c < 0x80) return 1;
|
||||
if ((c & 0xE0) == 0xC0) return 2;
|
||||
if ((c & 0xF0) == 0xE0) return 3;
|
||||
@@ -1367,20 +1527,87 @@ static bool hasNullValue(const std::vector<std::string>& values) {
|
||||
}
|
||||
|
||||
static bool valuesEqualForCompare(const std::vector<std::string>& finalValues,
|
||||
const std::vector<std::string>& originValues) {
|
||||
if (finalValues.size() != originValues.size()) return false;
|
||||
const std::vector<std::string>& originValues,
|
||||
int originStartIndex = 0) {
|
||||
if (originStartIndex < 0) return false;
|
||||
if (originValues.size() < static_cast<size_t>(originStartIndex) + finalValues.size()) return false;
|
||||
for (size_t i = 0; i < finalValues.size(); ++i) {
|
||||
if (compareValueKey(finalValues[i]) != compareValueKey(originValues[i])) return false;
|
||||
if (compareValueKey(finalValues[i]) != compareValueKey(originValues[originStartIndex + i])) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static std::string matchStyleForValues(bool hasOrigin,
|
||||
static int displayIndexForOriginIndex(const std::vector<int>& originIndexes, int originIndex) {
|
||||
auto it = std::find(originIndexes.begin(), originIndexes.end(), originIndex);
|
||||
if (it == originIndexes.end()) return -1;
|
||||
return static_cast<int>(std::distance(originIndexes.begin(), it));
|
||||
}
|
||||
|
||||
static bool valuesEqualForCompareByOriginIndex(const std::vector<std::string>& finalValues,
|
||||
const std::vector<std::string>& originValues,
|
||||
const std::vector<int>& originIndexes,
|
||||
int originPickStart) {
|
||||
if (originPickStart == std::numeric_limits<int>::min()) {
|
||||
return valuesEqualForCompare(finalValues, originValues, 0);
|
||||
}
|
||||
if (originIndexes.empty()) {
|
||||
int originStartIndex = originPickStart < 0 ? -1 : originPickStart;
|
||||
return valuesEqualForCompare(finalValues, originValues, originStartIndex);
|
||||
}
|
||||
for (size_t i = 0; i < finalValues.size(); ++i) {
|
||||
int displayIndex = displayIndexForOriginIndex(originIndexes, originPickStart + static_cast<int>(i));
|
||||
if (displayIndex < 0 || displayIndex >= static_cast<int>(originValues.size())) return false;
|
||||
if (compareValueKey(finalValues[i]) != compareValueKey(originValues[displayIndex])) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool parseArrayBaseRange(const std::string& arrayBase, int& start, int& end) {
|
||||
std::smatch m;
|
||||
static const std::regex re(R"(^\s*(-?\d+)\s*-->\s*(-?\d+)\s*$)");
|
||||
if (!std::regex_match(arrayBase, m, re)) return false;
|
||||
start = std::stoi(m[1].str());
|
||||
end = std::stoi(m[2].str());
|
||||
return start <= end;
|
||||
}
|
||||
|
||||
static int parseOffsetText(const std::string& text, int fallback = 0) {
|
||||
try {
|
||||
if (trimValue(text).empty()) return fallback;
|
||||
return std::stoi(trimValue(text));
|
||||
} catch (...) {
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
static ComparePlan comparePlanForItem(const std::string& finalKey, const OutItem& item) {
|
||||
ComparePlan plan;
|
||||
(void)finalKey;
|
||||
int baseStart = 0;
|
||||
int baseEnd = 0;
|
||||
if (!parseArrayBaseRange(item.arrayBase, baseStart, baseEnd)) return plan;
|
||||
int valueOffset = parseOffsetText(item.valueOffset, 0);
|
||||
plan.originPickStart = baseStart + valueOffset;
|
||||
plan.originPickEnd = baseEnd + valueOffset;
|
||||
return plan;
|
||||
}
|
||||
|
||||
static std::string matchStyleForValues(bool hasOriginContext,
|
||||
bool hasOriginMatch,
|
||||
const std::vector<std::string>& finalValues,
|
||||
const std::vector<std::string>& originDisplayValues) {
|
||||
const std::vector<std::string>& originDisplayValues,
|
||||
int originStartIndex = 0) {
|
||||
if (hasNullValue(finalValues)) return "MatchRed";
|
||||
if (!hasOrigin) return "";
|
||||
return valuesEqualForCompare(finalValues, originDisplayValues) ? "MatchGreen" : "MatchOrange";
|
||||
if (!hasOriginContext) return "";
|
||||
if (!hasOriginMatch) return "MatchRed";
|
||||
return valuesEqualForCompare(finalValues, originDisplayValues, originStartIndex) ? "MatchGreen" : "MatchOrange";
|
||||
}
|
||||
|
||||
static void addRowStats(SheetStats* stats, const std::string& rowStyle) {
|
||||
if (!stats) return;
|
||||
if (rowStyle == "MatchGreen") ++stats->normal;
|
||||
else if (rowStyle == "MatchOrange") ++stats->abnormal;
|
||||
else if (rowStyle == "MatchRed") ++stats->missing;
|
||||
}
|
||||
|
||||
static std::string cellAttrs(const std::string& styleId, const std::string& extra = "") {
|
||||
@@ -1422,6 +1649,16 @@ static std::string originSeriesKey(const std::string& finalKey, const OutItem& i
|
||||
return replaceKeyRange(finalKey, start, end);
|
||||
}
|
||||
|
||||
static std::string originSeriesKeyForMatch(const std::string& finalKey,
|
||||
const OutItem& item,
|
||||
const OriginMatch& match) {
|
||||
if (match.rangeStart != std::numeric_limits<int>::min() &&
|
||||
match.rangeEnd != std::numeric_limits<int>::min()) {
|
||||
return replaceKeyRange(finalKey, match.rangeStart, match.rangeEnd);
|
||||
}
|
||||
return originSeriesKey(finalKey, item);
|
||||
}
|
||||
|
||||
static void writeSsCell(std::ofstream& ofs, const std::string& value, const std::string& attrs = "") {
|
||||
ofs << "<Cell" << attrs << "><Data ss:Type=\"String\">" << htmlEscape(value) << "</Data></Cell>";
|
||||
}
|
||||
@@ -1438,6 +1675,33 @@ static std::string displayLabelForSheet(const OutItem& item) {
|
||||
return item.label;
|
||||
}
|
||||
|
||||
static std::string originHeaderFieldValue(const OriginHeader& header, const std::string& key) {
|
||||
for (const auto& field : header.fields) {
|
||||
if (field.key == key) return field.val;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static std::vector<OriginHeader> visibleOriginHeadersForSheet(OriginData* origin,
|
||||
const std::vector<OutItem>& items,
|
||||
const std::string& wiring) {
|
||||
std::vector<OriginHeader> visible;
|
||||
if (!origin) return visible;
|
||||
|
||||
OriginData probe = *origin;
|
||||
std::set<int> usedOrders;
|
||||
for (const auto& item : items) {
|
||||
if (item.wiring != wiring) continue;
|
||||
OriginMatch om = matchOrigin(&probe, item.doPath, item.daPath, item.stat, item.phase, item.wiring);
|
||||
if (!om.value.empty() && om.sourceOrder >= 0) usedOrders.insert(om.sourceOrder);
|
||||
}
|
||||
|
||||
for (const auto& header : origin->headers) {
|
||||
if (usedOrders.count(header.sourceOrder)) visible.push_back(header);
|
||||
}
|
||||
return visible;
|
||||
}
|
||||
|
||||
static void writeDataWorksheet(std::ofstream& ofs,
|
||||
const std::string& sheetName,
|
||||
const std::string& wiring,
|
||||
@@ -1445,9 +1709,11 @@ static void writeDataWorksheet(std::ofstream& ofs,
|
||||
const std::vector<std::string>& blocks,
|
||||
const std::vector<OutItem>& items,
|
||||
OriginData* origin,
|
||||
bool showStatBlocks = true) {
|
||||
const int maxValues = 50;
|
||||
const int totalCols = 9 + maxValues;
|
||||
bool showStatBlocks,
|
||||
SheetStats* stats) {
|
||||
const int maxValues = 64;
|
||||
std::vector<OriginHeader> visibleOriginHeaders = visibleOriginHeadersForSheet(origin, items, wiring);
|
||||
const int totalCols = std::max(9 + maxValues, 3 + static_cast<int>(visibleOriginHeaders.size()));
|
||||
|
||||
ofs << "<Worksheet ss:Name=\"" << htmlEscape(sheetName) << "\"><Table>\n";
|
||||
ofs << "<Column ss:Width=\"210\"/><Column ss:Width=\"75\"/><Column ss:Width=\"85\"/><Column ss:Width=\"85\"/>";
|
||||
@@ -1460,10 +1726,34 @@ static void writeDataWorksheet(std::ofstream& ofs,
|
||||
writeSsCell(ofs, "头部信息", " ss:StyleID=\"Section\" ss:MergeAcross=\"" + std::to_string(totalCols - 1) + "\"");
|
||||
ofs << "</Row>\n";
|
||||
|
||||
for (const auto& h : headers) {
|
||||
size_t originHeaderRows = visibleOriginHeaders.empty() ? 0 : originHeaderDisplayKeys().size() + 1;
|
||||
size_t headerRows = std::max(headers.size(), originHeaderRows);
|
||||
for (size_t row = 0; row < headerRows; ++row) {
|
||||
writeSsRowStart(ofs);
|
||||
writeSsCell(ofs, h.key, " ss:StyleID=\"Default\"");
|
||||
writeSsCell(ofs, h.val, " ss:StyleID=\"Default\" ss:MergeAcross=\"" + std::to_string(totalCols - 2) + "\"");
|
||||
if (row < headers.size()) {
|
||||
writeSsCell(ofs, headers[row].key, " ss:StyleID=\"Default\"");
|
||||
writeSsCell(ofs, headers[row].val, " ss:StyleID=\"Default\"");
|
||||
} else {
|
||||
writeSsCell(ofs, "", " ss:StyleID=\"Default\"");
|
||||
writeSsCell(ofs, "", " ss:StyleID=\"Default\"");
|
||||
}
|
||||
|
||||
if (!visibleOriginHeaders.empty()) {
|
||||
if (row == 0) {
|
||||
writeSsCell(ofs, "原始报告", " ss:StyleID=\"Section\"");
|
||||
for (const auto& oh : visibleOriginHeaders) {
|
||||
writeSsCell(ofs, oh.fileName.empty() ? oh.title : oh.fileName, " ss:StyleID=\"Section\"");
|
||||
}
|
||||
} else {
|
||||
size_t fieldIndex = row - 1;
|
||||
const auto& displayKeys = originHeaderDisplayKeys();
|
||||
std::string key = fieldIndex < displayKeys.size() ? displayKeys[fieldIndex] : "";
|
||||
writeSsCell(ofs, key, " ss:StyleID=\"Default\"");
|
||||
for (const auto& oh : visibleOriginHeaders) {
|
||||
writeSsCell(ofs, key.empty() ? "" : originHeaderFieldValue(oh, key), " ss:StyleID=\"Default\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
ofs << "</Row>\n";
|
||||
}
|
||||
|
||||
@@ -1499,16 +1789,34 @@ static void writeDataWorksheet(std::ofstream& ofs,
|
||||
ofs << "</Row>\n";
|
||||
}
|
||||
|
||||
OriginMatch om = matchOrigin(origin, item.doPath, item.daPath, item.stat, item.phase, item.wiring);
|
||||
std::string finalKey, finalValue;
|
||||
splitFinalText(item.finalText, finalKey, finalValue);
|
||||
finalKey = offsetFinalKey(finalKey, item);
|
||||
ComparePlan comparePlan = comparePlanForItem(finalKey, item);
|
||||
OriginMatch om = matchOrigin(origin, item.doPath, item.daPath, item.stat, item.phase, item.wiring,
|
||||
comparePlan.originPickStart, comparePlan.originPickEnd);
|
||||
std::vector<std::string> finalValues = splitCommaValues(finalValue);
|
||||
std::vector<std::string> originValuesRaw = splitCommaValues(om.value);
|
||||
std::vector<std::string> originValues = roundOriginValuesForDisplay(originValuesRaw);
|
||||
bool hasOriginMatch = origin && !om.value.empty();
|
||||
std::string rowStyle = matchStyleForValues(hasOriginMatch, finalValues, originValues);
|
||||
std::string originKey = originSeriesKey(finalKey, item);
|
||||
int finalRangeStart = 0;
|
||||
int finalRangeEnd = 0;
|
||||
bool isSequenceRow = parseKeyRange(finalKey, finalRangeStart, finalRangeEnd);
|
||||
int originStartIndex = -1;
|
||||
if (comparePlan.originPickStart != std::numeric_limits<int>::min() &&
|
||||
om.rangeStart != std::numeric_limits<int>::min()) {
|
||||
originStartIndex = displayIndexForOriginIndex(om.valueIndexes, comparePlan.originPickStart);
|
||||
}
|
||||
std::string rowStyle;
|
||||
if (hasNullValue(finalValues)) rowStyle = "MatchRed";
|
||||
else if (!origin) rowStyle = "";
|
||||
else if (!hasOriginMatch) rowStyle = "MatchRed";
|
||||
else rowStyle = valuesEqualForCompareByOriginIndex(finalValues, originValues, om.valueIndexes,
|
||||
comparePlan.originPickStart)
|
||||
? "MatchGreen"
|
||||
: "MatchOrange";
|
||||
addRowStats(stats, rowStyle);
|
||||
std::string originKey = originSeriesKeyForMatch(finalKey, item, om);
|
||||
|
||||
writeSsRowStart(ofs);
|
||||
writeSsCell(ofs, displayLabelForSheet(item), cellAttrs(rowStyle, " ss:MergeDown=\"1\""));
|
||||
@@ -1526,7 +1834,12 @@ static void writeDataWorksheet(std::ofstream& ofs,
|
||||
writeSsRowStart(ofs);
|
||||
writeSsCell(ofs, "原始值", cellAttrs(rowStyle, " ss:Index=\"8\""));
|
||||
writeSsCell(ofs, om.value.empty() ? "" : originKey, cellAttrs(rowStyle));
|
||||
for (int i = 0; i < maxValues; ++i) writeSsCell(ofs, i < (int)originValues.size() ? originValues[i] : "", cellAttrs(rowStyle));
|
||||
for (int i = 0; i < maxValues; ++i) {
|
||||
std::string attrs = (isSequenceRow && hasOriginMatch && i == originStartIndex)
|
||||
? " ss:StyleID=\"OriginPickBlue\""
|
||||
: cellAttrs(rowStyle);
|
||||
writeSsCell(ofs, i < (int)originValues.size() ? originValues[i] : "", attrs);
|
||||
}
|
||||
ofs << "</Row>\n";
|
||||
|
||||
lastCategory = item.category;
|
||||
@@ -1555,7 +1868,7 @@ static void writeOriginRecordWorksheet(std::ofstream& ofs,
|
||||
bool roundValues) {
|
||||
const int maxValues = 50;
|
||||
ofs << "<Worksheet ss:Name=\"" << htmlEscape(sheetName) << "\"><Table>\n";
|
||||
ofs << "<Column ss:Width=\"320\"/><Column ss:Width=\"120\"/><Column ss:Width=\"160\"/>";
|
||||
ofs << "<Column ss:Width=\"320\"/><Column ss:Width=\"120\"/><Column ss:Width=\"160\"/><Column ss:Width=\"220\"/>";
|
||||
for (int i = 0; i < maxValues; ++i) ofs << "<Column ss:Width=\"90\"/>";
|
||||
ofs << "\n";
|
||||
|
||||
@@ -1563,6 +1876,7 @@ static void writeOriginRecordWorksheet(std::ofstream& ofs,
|
||||
writeSsCell(ofs, "原始路径", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "报告名", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "icd中代表的字段", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "原始值", " ss:StyleID=\"Head\"");
|
||||
for (int i = 1; i <= maxValues; ++i) writeSsCell(ofs, "值" + std::to_string(i), " ss:StyleID=\"Head\"");
|
||||
ofs << "</Row>\n";
|
||||
|
||||
@@ -1576,6 +1890,7 @@ static void writeOriginRecordWorksheet(std::ofstream& ofs,
|
||||
writeSsCell(ofs, rec.path);
|
||||
writeSsCell(ofs, rec.reportName);
|
||||
writeSsCell(ofs, "");
|
||||
writeSsCell(ofs, rec.value);
|
||||
for (int j = 0; j < maxValues; ++j) writeSsCell(ofs, j < (int)originValues.size() ? originValues[j] : "");
|
||||
ofs << "</Row>\n";
|
||||
}
|
||||
@@ -1583,13 +1898,49 @@ static void writeOriginRecordWorksheet(std::ofstream& ofs,
|
||||
}
|
||||
|
||||
static void writeMatchedWorksheet(std::ofstream& ofs, const OriginData& origin) {
|
||||
writeOriginRecordWorksheet(ofs, origin, "已匹配的原始数据", true, false);
|
||||
writeOriginRecordWorksheet(ofs, origin, "已匹配的原始数据", true, true);
|
||||
}
|
||||
|
||||
static void writeUnmatchedWorksheet(std::ofstream& ofs, const OriginData& origin) {
|
||||
writeOriginRecordWorksheet(ofs, origin, "未匹配的原始数据", false, true);
|
||||
}
|
||||
|
||||
static void writeSummaryWorksheet(std::ofstream& ofs, const std::vector<SheetStats>& stats) {
|
||||
ofs << "<Worksheet ss:Name=\"统计信息\"><Table>\n";
|
||||
ofs << "<Column ss:Width=\"180\"/><Column ss:Width=\"110\"/><Column ss:Width=\"110\"/><Column ss:Width=\"110\"/><Column ss:Width=\"90\"/>\n";
|
||||
writeSsRowStart(ofs);
|
||||
writeSsCell(ofs, "工作表", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "数据正常个数", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "数据异常个数", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "数据缺失个数", " ss:StyleID=\"Head\"");
|
||||
writeSsCell(ofs, "总数", " ss:StyleID=\"Head\"");
|
||||
ofs << "</Row>\n";
|
||||
int totalNormal = 0;
|
||||
int totalAbnormal = 0;
|
||||
int totalMissing = 0;
|
||||
for (const auto& item : stats) {
|
||||
int total = item.normal + item.abnormal + item.missing;
|
||||
totalNormal += item.normal;
|
||||
totalAbnormal += item.abnormal;
|
||||
totalMissing += item.missing;
|
||||
writeSsRowStart(ofs);
|
||||
writeSsCell(ofs, item.sheetName);
|
||||
writeSsCell(ofs, std::to_string(item.normal));
|
||||
writeSsCell(ofs, std::to_string(item.abnormal));
|
||||
writeSsCell(ofs, std::to_string(item.missing));
|
||||
writeSsCell(ofs, std::to_string(total));
|
||||
ofs << "</Row>\n";
|
||||
}
|
||||
writeSsRowStart(ofs);
|
||||
writeSsCell(ofs, "合计", " ss:StyleID=\"Section\"");
|
||||
writeSsCell(ofs, std::to_string(totalNormal), " ss:StyleID=\"Section\"");
|
||||
writeSsCell(ofs, std::to_string(totalAbnormal), " ss:StyleID=\"Section\"");
|
||||
writeSsCell(ofs, std::to_string(totalMissing), " ss:StyleID=\"Section\"");
|
||||
writeSsCell(ofs, std::to_string(totalNormal + totalAbnormal + totalMissing), " ss:StyleID=\"Section\"");
|
||||
ofs << "</Row>\n";
|
||||
ofs << "</Table></Worksheet>\n";
|
||||
}
|
||||
|
||||
static std::vector<HeaderItem> headersForSheet(const std::vector<HeaderItem>& headers, const std::string& dataType) {
|
||||
std::vector<HeaderItem> out = headers;
|
||||
std::string displayDataType = dataType;
|
||||
@@ -1660,6 +2011,7 @@ static void writeExcelWorkbook(const fs::path& outPath,
|
||||
ofs << "<Style ss:ID=\"MatchGreen\" ss:Parent=\"Default\"><Interior ss:Color=\"#D9EAD3\" ss:Pattern=\"Solid\"/></Style>\n";
|
||||
ofs << "<Style ss:ID=\"MatchOrange\" ss:Parent=\"Default\"><Interior ss:Color=\"#FCE4D6\" ss:Pattern=\"Solid\"/></Style>\n";
|
||||
ofs << "<Style ss:ID=\"MatchRed\" ss:Parent=\"Default\"><Interior ss:Color=\"#F4CCCC\" ss:Pattern=\"Solid\"/></Style>\n";
|
||||
ofs << "<Style ss:ID=\"OriginPickBlue\" ss:Parent=\"Default\"><Interior ss:Color=\"#CFE2F3\" ss:Pattern=\"Solid\"/></Style>\n";
|
||||
ofs << "</Styles>\n";
|
||||
|
||||
std::vector<SheetSpec> sheets = {
|
||||
@@ -1679,6 +2031,7 @@ static void writeExcelWorkbook(const fs::path& outPath,
|
||||
|
||||
const std::vector<HeaderItem> emptyHeaders;
|
||||
const std::unordered_map<std::string, std::string> emptyValues;
|
||||
std::vector<SheetStats> summaryStats;
|
||||
for (const auto& spec : sheets) {
|
||||
if (!specAllowsFrontType(spec, frontType)) continue;
|
||||
auto bucketIt = dataByType.find(spec.dataType);
|
||||
@@ -1687,12 +2040,16 @@ static void writeExcelWorkbook(const fs::path& outPath,
|
||||
bucketIt == dataByType.end() ? emptyValues : bucketIt->second.valueByKey;
|
||||
std::vector<OutItem> sheetItems = buildItemsForSheet(valueMetas, spec, valueByKey);
|
||||
sortOutItems(sheetItems);
|
||||
writeDataWorksheet(ofs, spec.name, spec.wiring, headersForSheet(headers, spec.dataType), blocks, sheetItems, origin, spec.showStatBlocks);
|
||||
}
|
||||
if (origin) {
|
||||
writeMatchedWorksheet(ofs, *origin);
|
||||
writeUnmatchedWorksheet(ofs, *origin);
|
||||
SheetStats stats;
|
||||
stats.sheetName = spec.name;
|
||||
writeDataWorksheet(ofs, spec.name, spec.wiring, headersForSheet(headers, spec.dataType), blocks, sheetItems, origin, spec.showStatBlocks, &stats);
|
||||
summaryStats.push_back(stats);
|
||||
}
|
||||
writeSummaryWorksheet(ofs, summaryStats);
|
||||
OriginData emptyOrigin;
|
||||
const OriginData& originForRawSheets = origin ? *origin : emptyOrigin;
|
||||
writeMatchedWorksheet(ofs, originForRawSheets);
|
||||
writeUnmatchedWorksheet(ofs, originForRawSheets);
|
||||
|
||||
ofs << "</Workbook>\n";
|
||||
}
|
||||
|
||||
254
source/mq.cpp
254
source/mq.cpp
@@ -477,6 +477,114 @@ std::string reportNameFromJsonText(const std::string& text) {
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string lowerAscii(std::string value);
|
||||
|
||||
bool isMonitorIdKey(const std::string& key) {
|
||||
std::string k = lowerAscii(trimCopy(key));
|
||||
return k == "monitor" ||
|
||||
k == "monitorid" ||
|
||||
k == "monitor_id" ||
|
||||
k == "mp_id" ||
|
||||
k == "mpid" ||
|
||||
k == "measurepointid" ||
|
||||
k == "measure_point_id" ||
|
||||
k == "measureid" ||
|
||||
k == "measure_id";
|
||||
}
|
||||
|
||||
bool looksLikeJsonText(const std::string& text) {
|
||||
std::string s = trimCopy(text);
|
||||
return !s.empty() && (s.front() == '{' || s.front() == '[');
|
||||
}
|
||||
|
||||
bool findMonitorIdValue(const json& value, std::string& out) {
|
||||
if (value.is_object()) {
|
||||
for (auto it = value.begin(); it != value.end(); ++it) {
|
||||
if (isMonitorIdKey(it.key())) {
|
||||
out = trimCopy(jsonScalarToString(it.value()));
|
||||
if (!out.empty()) return true;
|
||||
}
|
||||
}
|
||||
for (auto it = value.begin(); it != value.end(); ++it) {
|
||||
if ((it.key() == "messageBody" || it.key() == "body") && it.value().is_string()) {
|
||||
std::string embedded = it.value().get<std::string>();
|
||||
if (looksLikeJsonText(embedded)) {
|
||||
try {
|
||||
if (findMonitorIdValue(json::parse(embedded), out)) return true;
|
||||
} catch (...) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (findMonitorIdValue(it.value(), out)) return true;
|
||||
}
|
||||
} else if (value.is_array()) {
|
||||
for (const auto& item : value) {
|
||||
if (findMonitorIdValue(item, out)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string monitorIdFromJsonText(const std::string& text) {
|
||||
try {
|
||||
std::string monitorId;
|
||||
if (findMonitorIdValue(json::parse(text), monitorId)) return monitorId;
|
||||
} catch (...) {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
bool findGuidValue(const json& value, std::string& out) {
|
||||
if (value.is_object()) {
|
||||
for (auto it = value.begin(); it != value.end(); ++it) {
|
||||
std::string key = lowerAscii(trimCopy(it.key()));
|
||||
if (key == "guid" || key == "traceguid" || key == "trace_guid") {
|
||||
out = trimCopy(jsonScalarToString(it.value()));
|
||||
if (!out.empty()) return true;
|
||||
}
|
||||
}
|
||||
for (auto it = value.begin(); it != value.end(); ++it) {
|
||||
if ((it.key() == "messageBody" || it.key() == "body") && it.value().is_string()) {
|
||||
std::string embedded = it.value().get<std::string>();
|
||||
if (looksLikeJsonText(embedded)) {
|
||||
try {
|
||||
if (findGuidValue(json::parse(embedded), out)) return true;
|
||||
} catch (...) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (findGuidValue(it.value(), out)) return true;
|
||||
}
|
||||
} else if (value.is_array()) {
|
||||
for (const auto& item : value) {
|
||||
if (findGuidValue(item, out)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string guidFromJsonText(const std::string& text) {
|
||||
try {
|
||||
std::string guid;
|
||||
if (findGuidValue(json::parse(text), guid)) return guid;
|
||||
json root = json::parse(text);
|
||||
if (root.is_object()) {
|
||||
auto it = root.find("key");
|
||||
if (it != root.end()) return trimCopy(jsonScalarToString(*it));
|
||||
}
|
||||
} catch (...) {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string normalizeMonitorId(std::string value) {
|
||||
value = trimCopy(value);
|
||||
value.erase(std::remove_if(value.begin(), value.end(), [](unsigned char ch) {
|
||||
return std::isspace(ch) != 0 || ch == '"' || ch == '\'' || ch == '{' || ch == '}';
|
||||
}), value.end());
|
||||
return lowerAscii(value);
|
||||
}
|
||||
|
||||
std::string safePathPart(std::string value, const std::string& fallback) {
|
||||
if (value.empty()) value = fallback;
|
||||
for (char& ch : value) {
|
||||
@@ -566,6 +674,18 @@ class RocketMqRuntime {
|
||||
int (*DestroyPushConsumer)(CPushConsumer*) = nullptr;
|
||||
};
|
||||
|
||||
struct TraceSession {
|
||||
std::string monitorId;
|
||||
std::string monitorName;
|
||||
std::string traceDir;
|
||||
std::string xmlPath;
|
||||
std::string frontType;
|
||||
std::string guid;
|
||||
std::unordered_set<std::string> receivedDataTypes;
|
||||
long long dataTimestamp = 0;
|
||||
int originCounter = 0;
|
||||
};
|
||||
|
||||
public:
|
||||
~RocketMqRuntime() {
|
||||
DetachedHandles old;
|
||||
@@ -624,6 +744,10 @@ public:
|
||||
dataTimestamp_ = 0;
|
||||
originCounter_ = 0;
|
||||
currentTraceDir_.clear();
|
||||
currentMonitorId_.clear();
|
||||
currentMonitorName_.clear();
|
||||
sessions_.clear();
|
||||
sessionsByGuid_.clear();
|
||||
lastError_.clear();
|
||||
|
||||
if (!loadLibraryLocked()) {
|
||||
@@ -703,16 +827,36 @@ public:
|
||||
|
||||
void setTraceTarget(const PqToolConfig& cfg,
|
||||
const PqLedgerDevice& device,
|
||||
const PqLedgerMonitor& monitor) {
|
||||
const PqLedgerMonitor& monitor,
|
||||
const std::string& frontType,
|
||||
const std::string& guid) {
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
cfg_ = cfg;
|
||||
currentTraceDir_ = pqTraceDirectoryFor(cfg, device, monitor);
|
||||
currentXmlPath_ = pqFindDeviceXmlPath(cfg, device);
|
||||
currentMonitorId_ = monitor.id;
|
||||
currentMonitorName_ = monitor.name;
|
||||
fs::path dir = fs::u8path(currentTraceDir_);
|
||||
fs::create_directories(dir);
|
||||
clearTraceTextRecords(dir);
|
||||
dataTimestamp_ = 0;
|
||||
originCounter_ = 0;
|
||||
std::string monitorKey = normalizeMonitorId(monitor.id);
|
||||
auto old = sessions_.find(monitorKey);
|
||||
if (old != sessions_.end() && !old->second.guid.empty()) {
|
||||
sessionsByGuid_.erase(normalizeMonitorId(old->second.guid));
|
||||
}
|
||||
TraceSession& session = sessions_[monitorKey];
|
||||
session.monitorId = monitor.id;
|
||||
session.monitorName = monitor.name;
|
||||
session.traceDir = currentTraceDir_;
|
||||
session.xmlPath = currentXmlPath_;
|
||||
session.frontType = frontType;
|
||||
session.guid = guid;
|
||||
session.receivedDataTypes.clear();
|
||||
session.dataTimestamp = 0;
|
||||
session.originCounter = 0;
|
||||
if (!guid.empty()) sessionsByGuid_[normalizeMonitorId(guid)] = monitorKey;
|
||||
|
||||
json context = {
|
||||
{"deviceId", device.id},
|
||||
@@ -721,6 +865,8 @@ public:
|
||||
{"processNo", device.processNo},
|
||||
{"monitorId", monitor.id},
|
||||
{"monitorName", monitor.name},
|
||||
{"guid", guid},
|
||||
{"frontType", frontType},
|
||||
{"xmlPath", currentXmlPath_},
|
||||
{"jsonDataPath", (dir / "jsondata_01.txt").u8string()},
|
||||
{"jsonDataPaths", json::array({
|
||||
@@ -776,6 +922,37 @@ private:
|
||||
return instance().onMessage(msg);
|
||||
}
|
||||
|
||||
TraceSession* findSessionForMessageLocked(const std::string& body,
|
||||
const std::string& key,
|
||||
std::string& actualMonitor,
|
||||
std::string& reason) {
|
||||
actualMonitor.clear();
|
||||
reason.clear();
|
||||
|
||||
actualMonitor = monitorIdFromJsonText(body);
|
||||
std::string normalized = normalizeMonitorId(actualMonitor);
|
||||
if (!normalized.empty()) {
|
||||
auto it = sessions_.find(normalized);
|
||||
if (it != sessions_.end()) return &it->second;
|
||||
reason = "monitor not being traced, actual=" + actualMonitor;
|
||||
}
|
||||
|
||||
std::string guid = guidFromJsonText(body);
|
||||
if (guid.empty()) guid = trimCopy(key);
|
||||
std::string normalizedGuid = normalizeMonitorId(guid);
|
||||
if (!normalizedGuid.empty()) {
|
||||
auto git = sessionsByGuid_.find(normalizedGuid);
|
||||
if (git != sessionsByGuid_.end()) {
|
||||
auto sit = sessions_.find(git->second);
|
||||
if (sit != sessions_.end()) return &sit->second;
|
||||
}
|
||||
if (reason.empty()) reason = "guid not being traced, actual=" + guid;
|
||||
}
|
||||
|
||||
if (reason.empty()) reason = "missing monitor id/guid";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int onMessage(CMessageExt* msg) {
|
||||
std::string topic = GetMessageTopic && GetMessageTopic(msg) ? GetMessageTopic(msg) : "";
|
||||
std::string tag = GetMessageTags && GetMessageTags(msg) ? GetMessageTags(msg) : "";
|
||||
@@ -790,25 +967,58 @@ private:
|
||||
+ " tag=" + tag
|
||||
+ " key=" + key
|
||||
+ " bodyLen=" + std::to_string(body.size()) + "\n");
|
||||
bool isData = topic == cfg_.dataTopic && tagMatches(cfg_.dataTag, tag);
|
||||
std::string dataFrontType = dataFrontTypeForMessageLocked(topic, tag);
|
||||
bool isData = !dataFrontType.empty();
|
||||
bool isTrace = topic == cfg_.traceTopic && tagMatches(cfg_.traceTag, tag);
|
||||
TraceSession* session = nullptr;
|
||||
if (isData || isTrace) {
|
||||
std::string actualMonitor;
|
||||
std::string reason;
|
||||
session = findSessionForMessageLocked(body, key, actualMonitor, reason);
|
||||
if (!session) {
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis()
|
||||
+ " skipped " + (isData ? "DATATopic" : "TraceTopic")
|
||||
+ " by monitor router: " + reason
|
||||
+ " topic=" + topic
|
||||
+ " tag=" + tag + "\n");
|
||||
return 0;
|
||||
}
|
||||
if (isData && !session->frontType.empty() && session->frontType != dataFrontType) {
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis()
|
||||
+ " skipped DATATopic by frontType router: session="
|
||||
+ session->frontType + ", message=" + dataFrontType
|
||||
+ " topic=" + topic + " tag=" + tag + "\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (isData) {
|
||||
std::string dataType = dataTypeFromJsonText(body);
|
||||
fs::path out = jsonDataOutputPathLocked(dataType);
|
||||
std::string normalizedType = normalizeDataType(dataType);
|
||||
if (!session->receivedDataTypes.insert(normalizedType).second) {
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis()
|
||||
+ " skipped DATATopic duplicate DATA_TYPE=" + normalizedType
|
||||
+ " monitor=" + session->monitorId
|
||||
+ " topic=" + topic + " tag=" + tag + "\n");
|
||||
return 0;
|
||||
}
|
||||
fs::path out = jsonDataOutputPathLocked(*session, dataType);
|
||||
writeTextFile(out, body);
|
||||
long long bodyTs = timestampFromJsonText(body);
|
||||
dataTimestamp_ = bodyTs > 0 ? bodyTs : storeTs;
|
||||
session->dataTimestamp = bodyTs > 0 ? bodyTs : storeTs;
|
||||
if (normalizeMonitorId(session->monitorId) == normalizeMonitorId(currentMonitorId_)) {
|
||||
dataTimestamp_ = session->dataTimestamp;
|
||||
}
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis() + " DATATopic DATA_TYPE=" + dataType + " tag=" + tag + " -> " + out.u8string() + "\n");
|
||||
if (event_) event_({"data", eventTitle("DATATopic", out.u8string()), body, out.u8string()});
|
||||
if (event_) event_({"data", eventTitle("DATATopic", out.u8string()), body, out.u8string(), session->monitorId, session->traceDir});
|
||||
} else if (isTrace) {
|
||||
long long bodyTs = timestampFromJsonText(body);
|
||||
if (dataTimestamp_ > 0 && bodyTs > 0 && bodyTs < dataTimestamp_) {
|
||||
if (session->dataTimestamp > 0 && bodyTs > 0 && bodyTs < session->dataTimestamp) {
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis() + " TraceTopic tag=" + tag + " skipped by timestamp\n");
|
||||
} else {
|
||||
fs::path out = nextOriginOutputPathLocked(reportNameFromJsonText(body));
|
||||
fs::path out = nextOriginOutputPathLocked(*session, reportNameFromJsonText(body));
|
||||
writeTextFile(out, body);
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis() + " TraceTopic tag=" + tag + " -> " + out.u8string() + "\n");
|
||||
if (event_) event_({"trace", eventTitle("TraceTopic", out.u8string()), body, out.u8string()});
|
||||
if (event_) event_({"trace", eventTitle("TraceTopic", out.u8string()), body, out.u8string(), session->monitorId, session->traceDir});
|
||||
}
|
||||
} else {
|
||||
appendTextFile(runtimeLogPath("mq_messages.log"), nowIsoMillis() + " skipped topic=" + topic + " tag=" + tag + "\n");
|
||||
@@ -833,9 +1043,16 @@ private:
|
||||
return fs::u8path("origin.txt");
|
||||
}
|
||||
|
||||
fs::path jsonDataOutputPathLocked(const std::string& dataType) const {
|
||||
std::string dataFrontTypeForMessageLocked(const std::string& topic, const std::string& tag) const {
|
||||
if (topic == cfg_.dataStatTopic && tagMatches(cfg_.dataStatTag, tag)) return "cfg_stat_data";
|
||||
if (topic == cfg_.dataRealtimeTopic && tagMatches(cfg_.dataRealtimeTag, tag)) return "cfg_3s_data";
|
||||
return "";
|
||||
}
|
||||
|
||||
fs::path jsonDataOutputPathLocked(const TraceSession& session, const std::string& dataType) const {
|
||||
std::string suffix = normalizeDataType(dataType);
|
||||
std::string filename = "jsondata_" + safePathPart(suffix, "unknown") + ".txt";
|
||||
if (!session.traceDir.empty()) return fs::u8path(session.traceDir) / fs::u8path(filename);
|
||||
if (!currentTraceDir_.empty()) return fs::u8path(currentTraceDir_) / fs::u8path(filename);
|
||||
if (!cfg_.jsonDataPath.empty()) {
|
||||
std::vector<std::string> paths;
|
||||
@@ -852,18 +1069,18 @@ private:
|
||||
return runtimeJsonPath(filename);
|
||||
}
|
||||
|
||||
fs::path nextOriginOutputPathLocked(const std::string& reportName) {
|
||||
if (currentTraceDir_.empty()) return originOutputPath();
|
||||
fs::path nextOriginOutputPathLocked(TraceSession& session, const std::string& reportName) {
|
||||
if (session.traceDir.empty() && currentTraceDir_.empty()) return originOutputPath();
|
||||
std::string safeReport = reportName.empty() ? "" : safePathPart(reportName, "report");
|
||||
std::string baseName;
|
||||
if (safeReport.empty()) {
|
||||
++originCounter_;
|
||||
baseName = "origin" + std::to_string(originCounter_);
|
||||
++session.originCounter;
|
||||
baseName = "origin" + std::to_string(session.originCounter);
|
||||
} else {
|
||||
baseName = "origin_" + safeReport;
|
||||
}
|
||||
|
||||
fs::path dir = fs::u8path(currentTraceDir_);
|
||||
fs::path dir = session.traceDir.empty() ? fs::u8path(currentTraceDir_) : fs::u8path(session.traceDir);
|
||||
fs::path out = dir / fs::u8path(baseName + ".txt");
|
||||
int suffix = 2;
|
||||
while (fs::exists(out)) {
|
||||
@@ -1063,6 +1280,10 @@ private:
|
||||
std::string lastError_;
|
||||
std::string currentTraceDir_;
|
||||
std::string currentXmlPath_;
|
||||
std::string currentMonitorId_;
|
||||
std::string currentMonitorName_;
|
||||
std::unordered_map<std::string, TraceSession> sessions_;
|
||||
std::unordered_map<std::string, std::string> sessionsByGuid_;
|
||||
bool active_ = false;
|
||||
long long dataTimestamp_ = 0;
|
||||
int originCounter_ = 0;
|
||||
@@ -1383,14 +1604,15 @@ bool pqSendTraceRequest(const PqToolConfig& cfg,
|
||||
const std::string& frontType,
|
||||
PqLogFn log,
|
||||
PqMqEventFn event) {
|
||||
rocketRuntime().setTraceTarget(cfg, device, monitor);
|
||||
std::string payload = pqBuildTracePayload(cfg, device, monitor, frontType);
|
||||
std::string guid = guidFromJsonText(payload);
|
||||
rocketRuntime().setTraceTarget(cfg, device, monitor, frontType, guid);
|
||||
fs::path traceDir = fs::u8path(pqTraceDirectoryFor(cfg, device, monitor));
|
||||
fs::create_directories(traceDir);
|
||||
fs::path sentPath = traceDir / "sent_trace_request.json";
|
||||
writeTextFile(sentPath, prettyJsonOrRaw(payload));
|
||||
writeTextFile(runtimeJsonPath("last_trace_request.json"), json::parse(payload).dump(2));
|
||||
if (event) event({"sent", eventTitle("Send", sentPath.u8string()), payload, sentPath.u8string()});
|
||||
if (event) event({"sent", eventTitle("Send", sentPath.u8string()), payload, sentPath.u8string(), monitor.id, traceDir.u8string()});
|
||||
std::string mqError;
|
||||
if (rocketRuntime().sendTrace(cfg, payload, mqError, log)) {
|
||||
if (log) log("Trace target monitor=" + monitor.name + "(" + monitor.id + "), frontType=" + frontType);
|
||||
|
||||
@@ -88,6 +88,8 @@ struct PqMqEvent {
|
||||
std::string title;
|
||||
std::string body;
|
||||
std::string path;
|
||||
std::string monitorId;
|
||||
std::string traceDir;
|
||||
};
|
||||
|
||||
using PqMqEventFn = std::function<void(const PqMqEvent&)>;
|
||||
@@ -128,5 +130,8 @@ bool pqRunParser(const std::string& xmlPath,
|
||||
const std::string& outPath,
|
||||
std::string* err,
|
||||
const std::string& frontType = "");
|
||||
bool pqApplyIcdDescriptionsToWorkbook(const std::string& icdPath,
|
||||
const std::string& workbookPath,
|
||||
std::string* message = nullptr);
|
||||
|
||||
int runPqGuiApp();
|
||||
|
||||
Reference in New Issue
Block a user