Merge branch '测试2' of http://192.168.1.22:3000/zw/Linux_Front1056 into 测试2

This commit is contained in:
zw
2025-09-08 14:37:43 +08:00
87 changed files with 1617 additions and 90 deletions

29
LFtid1056/boot/feservice Normal file
View File

@@ -0,0 +1,29 @@
#!/bin/bash
export CLOUD_PATH=/home/pq/zwproject/LFtid1056
if [ -z "$CLOUD_PATH" ]; then
echo "Error: CLOUD_PATH is not set. Please set it first."
exit 1
fi
case "$1" in
'start')
$CLOUD_PATH/boot/start_fe.sh
;;
'stop')
$CLOUD_PATH/boot/stop_fe.sh
;;
'restart')
$CLOUD_PATH/boot/stop_fe.sh
$CLOUD_PATH/boot/start_fe.sh
;;
*)
echo "Usage: feservice start|stop|restart"
exit 1
;;
esac

62
LFtid1056/boot/ps_fe.sh Normal file
View File

@@ -0,0 +1,62 @@
#!/bin/bash
# ========= 0. 获取脚本所在路径的上一层,设置为 FEP_ENV =========
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
FEP_ENV="$(dirname "$SCRIPT_DIR")"
export FEP_ENV
# ========= 1. 初始化软连接 =========
TEMP_LINK_CREATED=0
if [ ! -L "/FeProject" ]; then
if [ ! -e "/FeProject" ]; then
sudo ln -s "$FEP_ENV" /FeProject
TEMP_LINK_CREATED=1
echo "Temporary symlink /FeProject created."
else
echo "/FeProject exists but is not a symlink. Please check manually."
fi
fi
if [ -z "$FEP_ENV" ]; then
echo "Error: FEP_ENV is not set. Please set it first."
exit 1
fi
RUNTIME_CF_FILE="$FEP_ENV/etc/runtime.cf"
while read LINE ; do
if [ -n "$LINE" ] ; then
if [ ${LINE:0:1} != "#" ]; then
BINPATH=`echo $LINE | awk -F '^' '{printf $1}'`
BINPATH=`echo "$BINPATH" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $BINPATH
BIN=`echo $LINE | awk -F '^' '{printf $2}'`
BIN=`echo "$BIN" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $BIN
SPECIAL=`echo $LINE | awk -F '^' '{printf $4}'`
SPECIAL=`echo "$SPECIAL" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $SPECIAL
SLEEPSEC=`echo $LINE | awk -F '^' '{printf $5}'`
SLEEPSEC=`echo "$SLEEPSEC" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $SLEEPSEC
STARTFLAG=`echo $LINE | awk -F '^' '{printf $7}'`
STARTFLAG=`echo "$STARTFLAG" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $STARTFLAG
# if [ "`echo $STARTFLAG`" != "IGNORE_START" ]; then
CMD_STR=" ps -w | grep `echo "'"``echo $BIN``echo "'"` | grep -v 'grep'"
BIN2=`echo $BIN`
ps -ef | grep "$BIN2" | grep -v 'grep'
# fi
fi
fi
done < $RUNTIME_CF_FILE
# ========= 4. 清理软链接(仅在本次脚本中创建) =========
if [ "$TEMP_LINK_CREATED" -eq 1 ]; then
if [ -L "/FeProject" ]; then
sudo rm -f /FeProject
echo "Temporary symlink /FeProject removed."
fi
fi

View File

@@ -0,0 +1,97 @@
#!/bin/bash
# ========= 0. <20><>ȡ<EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>Ϊ FEP_ENV =========
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
FEP_ENV="$(dirname "$SCRIPT_DIR")"
export FEP_ENV
# ========= 1. <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =========
TEMP_LINK_CREATED=0
if [ ! -L "/FeProject" ]; then
if [ ! -e "/FeProject" ]; then
sudo ln -s "$FEP_ENV" /FeProject
TEMP_LINK_CREATED=1
echo "Temporary symlink /FeProject created."
else
echo "/FeProject exists but is not a symlink. Please check manually."
fi
fi
if [ -z "$FEP_ENV" ]; then
echo "Error: FEP_ENV is not set. Please set it first."
exit 1
fi
# ========= 2. <20><>־<EFBFBD><D6BE>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> =========
check_log_file() {
if [ -n "$1" ]; then
FILE_SIZE=$(du "$1" | awk '{print $1}')
if [ "$FILE_SIZE" -ge 5120 ]; then
[ -f "$1.3" ] && rm -f "$1.3"
[ -f "$1.2" ] && mv "$1.2" "$1.3"
[ -f "$1.1" ] && mv "$1.1" "$1.2"
mv "$1" "$1.1"
fi
fi
}
LOGFILE="$FEP_ENV/dat/log/start_fe.log"
check_log_file "$LOGFILE"
echo "" ; echo ""
echo "******* $(date "+%F %R:%S") Start Processes *******"
echo "" >>"$LOGFILE"
echo "" >>"$LOGFILE"
echo "******* $(date "+%F %R:%S") Start Processes *******" >>"$LOGFILE"
# ========= 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =========
RUNTIME_CF_FILE="$FEP_ENV/etc/runtime.cf"
echo "Using config file name: $RUNTIME_CF_FILE"
echo "Using config file name: $RUNTIME_CF_FILE" >>"$LOGFILE"
cd "$FEP_ENV/boot" || exit 1
CURDIR=$(pwd)
while read -r LINE; do
if [ -n "$LINE" ] && [[ ${LINE:0:1} != "#" ]]; then
BINPATH=$(echo "$LINE" | awk -F '^' '{print $1}' | grep -o "[^ ]\+\( \+[^ ]\+\)*")
echo "$BINPATH"
BIN=$(echo "$LINE" | awk -F '^' '{print $2}' | grep -o "[^ ]\+\( \+[^ ]\+\)*")
echo "$BIN"
SPECIAL=$(echo "$LINE" | awk -F '^' '{print $4}' | grep -o "[^ ]\+\( \+[^ ]\+\)*")
echo "$SPECIAL"
SLEEPSEC=$(echo "$LINE" | awk -F '^' '{print $5}' | grep -o "[^ ]\+\( \+[^ ]\+\)*")
echo "$SLEEPSEC"
STARTFLAG=$(echo "$LINE" | awk -F '^' '{print $7}' | grep -o "[^ ]\+\( \+[^ ]\+\)*")
echo "$STARTFLAG"
RESTARTFLAG=$(echo "$LINE" | awk -F '^' '{print $6}' | grep -o "[^ ]\+\( \+[^ ]\+\)*")
echo "$RESTARTFLAG"
if [ "$RESTARTFLAG" = "IGNORE_RESTART" ]; then
CMD_STR="sleep $SLEEPSEC"
echo "$CMD_STR"
echo "$CMD_STR" >>"$LOGFILE"
eval "$CMD_STR"
CMD_STR="$BINPATH$BIN $SPECIAL"
echo "$CMD_STR"
echo "$CMD_STR" >>"$LOGFILE"
eval "$CMD_STR" &>/dev/null
fi
fi
done < "$RUNTIME_CF_FILE"
cd "$CURDIR"
DT=$(date "+%F %R:%S.%N")
echo "******* ${DT:0:23} Start Processes Succcessfully *******"
echo "******* ${DT:0:23} Start Processes Succcessfully *******" >>"$LOGFILE"
# ========= 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1>νű<CEBD><C5B1>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD> =========
if [ "$TEMP_LINK_CREATED" -eq 1 ]; then
if [ -L "/FeProject" ]; then
sudo rm -f /FeProject
echo "Temporary symlink /FeProject removed."
fi
fi

129
LFtid1056/boot/stop_fe.sh Normal file
View File

@@ -0,0 +1,129 @@
#!/bin/bash
# ========= 0. 获取脚本所在路径的上一层,设置为 FEP_ENV =========
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
FEP_ENV="$(dirname "$SCRIPT_DIR")"
export FEP_ENV
# ========= 1. 初始化软连接 =========
TEMP_LINK_CREATED=0
if [ ! -L "/FeProject" ]; then
if [ ! -e "/FeProject" ]; then
sudo ln -s "$FEP_ENV" /FeProject
TEMP_LINK_CREATED=1
echo "Temporary symlink /FeProject created."
else
echo "/FeProject exists but is not a symlink. Please check manually."
fi
fi
if [ -z "$FEP_ENV" ]; then
echo "Error: FEP_ENV is not set. Please set it first."
exit 1
fi
check_log_file()
{
if [ -n "$1" ] ; then
FILE_SIZE=0
FILE_SIZE=`du $1 | awk '{print $1}'`
if [ $FILE_SIZE -ge 5120 ]
then
if [ -f "$1".3 ]; then
rm -f "$1".3
fi
if [ -f "$1".2 ]; then
mv "$1".2 "$1".3
fi
if [ -f "$1".1 ]; then
mv "$1".1 "$1".2
fi
mv "$1" "$1".1
fi
fi
}
LOGFILE="$FEP_ENV/dat/log/start_fe.log"
check_log_file $LOGFILE
echo "" ; echo ""
echo "****** `date "+%F %R:%S"` Stop Processes ******"
echo "" >>"$LOGFILE"
echo "" >>"$LOGFILE"
echo "****** `date "+%F %R:%S"` Stop Processes ******" >>"$LOGFILE"
RUNTIME_CF_FILE="$FEP_ENV/etc/runtime.cf"
#cat $RUNTIME_CF_FILE |tac > /tmp/runtime.cf
sed '1!G;h;$!d' $RUNTIME_CF_FILE > /tmp/runtime.cf
echo "Using config file name: $RUNTIME_CF_FILE"
echo "Using config file name: $RUNTIME_CF_FILE">>"$LOGFILE"
while read LINE ; do
if [ -n "$LINE" ] ; then
if [ ${LINE:0:1} != "#" ]; then
BINPATH=`echo $LINE | awk -F '^' '{printf $1}'`
BINPATH=`echo "$BINPATH" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $BINPATH
BIN=`echo $LINE | awk -F '^' '{printf $2}'`
BIN=`echo "$BIN" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $BIN
SPECIAL=`echo $LINE | awk -F '^' '{printf $4}'`
SPECIAL=`echo "$SPECIAL" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $SPECIAL
SLEEPSEC=`echo $LINE | awk -F '^' '{printf $5}'`
SLEEPSEC=`echo "$SLEEPSEC" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $SLEEPSEC
STARTFLAG=`echo $LINE | awk -F '^' '{printf $7}'`
STARTFLAG=`echo "$STARTFLAG" | grep -o "[^ ]\+\( \+[^ ]\+\)*"`
# echo $STARTFLAG
if [ "`echo $STARTFLAG`" != "IGNORE_START" ]; then
# echo ""
# echo "" >>"$LOGFILE"
CMD_STR=" ps -w | grep `echo "'"``echo $BIN``echo "'"` | grep -v 'grep'"
BIN2=`echo $BIN`
BIN3=`echo $BIN |awk '{print$1}'`
# CMD_STR="killall `echo $BIN | awk '{print$1}'` 2>&1 "
PIDSTR=`ps -ef | grep "$BIN2" | grep -v 'grep'`
if [ -n "$PIDSTR" ] ; then
if [ "$BIN3" == "fe_main" ]; then
CMD_STR=" sleep 3 "
echo "$CMD_STR"
echo "$CMD_STR" >>"$LOGFILE"
$CMD_STR
fi
CMD_STR="kill -15 `echo $PIDSTR | awk '{print$2}'` "
echo " Kill process: \"$BIN\" with PID `echo $PIDSTR | awk '{print$2}'`"
echo " Kill process: \"$BIN\" with PID `echo $PIDSTR | awk '{print$2}'`" >>"$LOGFILE"
echo " Executing: $CMD_STR"
echo " Executing: $CMD_STR" >>"$LOGFILE"
CMD_RESULT=`$CMD_STR`
if [ -n "$CMD_RESULT" ] ; then
echo "$CMD_RESULT"
echo "$CMD_RESULT" >>"$LOGFILE"
fi
else
echo " Process \"$BIN\" not running."
fi
fi
fi
fi
done < /tmp/runtime.cf
DT=`date "+%F %R:%S.%N"`
echo "****** ${DT:0:23} Stop Processes Succcessfully ******"
echo "" >>"$LOGFILE"
echo "****** ${DT:0:23} Stop Processes Succcessfully ******" >>"$LOGFILE"
# ========= 4. 清理软链接(仅在本次脚本中创建) =========
if [ "$TEMP_LINK_CREATED" -eq 1 ]; then
if [ -L "/FeProject" ]; then
sudo rm -f /FeProject
echo "Temporary symlink /FeProject removed."
fi
fi

View File

@@ -2737,34 +2737,34 @@ bool compare_qvvr_and_file(const std::string& cfg_path, const std::vector<qvvr_d
// DataArrayItem to_json
void to_json(nlohmann::json& j, const DataArrayItem& d) {
j = nlohmann::json{
{"DataAttr", d.DataAttr},
{"DataTimeSec", d.DataTimeSec},
{"DataTimeUSec", d.DataTimeUSec},
{"DataTag", d.DataTag},
{"Data", d.Data}
{"dataAttr", d.DataAttr},
{"dataTimeSec", d.DataTimeSec},
{"dataTimeUSec", d.DataTimeUSec},
{"dataTag", d.DataTag},
{"data", d.Data}
};
}
// MsgObj to_json
void to_json(nlohmann::json& j, const MsgObj& m) {
j = nlohmann::json{
{"Cldid", m.Cldid},
{"DataType", m.DataType},
{"DataAttr", m.DataAttr},
{"DsNameIdx", m.DsNameIdx},
{"DataArray", m.DataArray}
{"clDid", m.Cldid},
{"dataType", m.DataType},
{"dataAttr", m.DataAttr},
{"dsNameIdx", m.DsNameIdx},
{"dataArray", m.DataArray}
};
}
// FullObj to_json
void to_json(nlohmann::json& j, const FullObj& f) {
j = nlohmann::json{
{"Id", f.mac},
{"Mid", f.Mid},
{"Did", f.Did},
{"Pri", f.Pri},
{"Type", f.Type},
{"Msg", f.Msg}
{"id", f.mac},
{"mid", f.Mid},
{"did", f.Did},
{"pri", f.Pri},
{"type", f.Type},
{"msg", f.Msg}
};
}
std::string generate_json(
@@ -2820,6 +2820,9 @@ void upload_data_test(){
//////////////////////////////////////////////////////////////////////////////////////////////////台账赋值给通信
std::vector<DeviceInfo> GenerateDeviceInfoFromLedger(const std::vector<terminal_dev>& terminal_devlist) {
std::lock_guard<std::mutex> lock(ledgermtx);
std::vector<DeviceInfo> devices;
for (const auto& terminal : terminal_devlist) {
@@ -3217,7 +3220,7 @@ void check_device_busy_timeout()
if (dev.busytimecount > 30)
{
std::cout << "[Timeout] Device " << dev.terminal_id
<< " busytype=READING_FILEMENU 超时("
<< " busytype=READING_FILEDATA 超时("
<< dev.busytimecount << "s)" << std::endl;
//发送超时响应
@@ -3376,7 +3379,7 @@ bool save_set_value(const std::string &dev_id, unsigned char mp_index, const std
return true;
}
bool save_internal_value(const std::string &dev_id, const std::vector<float> &fabsf) {
bool save_internal_value(const std::string &dev_id, const std::vector<ushort> &fabsf) {
// 找到对应 terminal_dev
std::lock_guard<std::mutex> lock(ledgermtx);
@@ -3407,6 +3410,37 @@ bool save_internal_value(const std::string &dev_id, const std::vector<float> &fa
return true;
}
bool save_internal_info(const std::string &dev_id, const std::vector<NameFixValue> &fixValueList) {
// 找到对应 terminal_dev
std::lock_guard<std::mutex> lock(ledgermtx);
auto it = std::find_if(terminal_devlist.begin(), terminal_devlist.end(),
[&](const terminal_dev &dev) { return dev.terminal_id == dev_id; });
if (it == terminal_devlist.end()) {
std::cerr << "[send_set_reply] device not found: " << dev_id << std::endl;
return false;
}
terminal_dev &dev = *it;
// 判断 isbusy==2 且 busytype==READING_INTERFIXEDVALUE
if (dev.isbusy != 2 || dev.busytype != static_cast<int>(DeviceState::READING_INTERFIXEDVALUE)) {
std::cerr << "[send_set_reply] device not in READING_INTERFIXEDVALUE state." << std::endl;
return false;
}
// ★ 新增:清理原有的内部定值列表
dev.dz_internal_info_list.clear();
//将值严格按顺序存入list中
for (const auto &info : fixValueList) {
dev.dz_internal_info_list.push_back(info);
}
dev.isbusy--;
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////回复定值读取响应
bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, const std::vector<DZ_TAB_STRUCT> &dz_info) {
std::lock_guard<std::mutex> lock(ledgermtx);
@@ -3440,6 +3474,12 @@ bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, con
return false;
}
//将dz_info存入监测点
pMon->dz_info_list.clear();
for (const auto &dz : dz_info) {
pMon->dz_info_list.push_back(dz);
}
// 4) 取该监测点的 set_values严格按顺序用于 DZ_Value
std::vector<float> ordered_vals;
ordered_vals.reserve(pMon->set_values.size());
@@ -3530,3 +3570,198 @@ bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, con
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////回复内部定值响应读取
bool send_internal_value_reply(const std::string &dev_id, const std::vector<DZ_kzz_bit> &control_words)
{
std::lock_guard<std::mutex> lock(ledgermtx);
// 1) 找终端
auto it = std::find_if(terminal_devlist.begin(), terminal_devlist.end(),
[&](const terminal_dev &d) { return d.terminal_id == dev_id; });
if (it == terminal_devlist.end()) {
std::cerr << "[send_internal_value_reply] device not found: " << dev_id << std::endl;
return false;
}
terminal_dev &dev = *it;
// 2) 校验状态:发送“内部定值读取结果”回复,应处于 READING_INTERFIXEDVALUEisbusy == 1
if (dev.isbusy != 1 || dev.busytype != static_cast<int>(DeviceState::READING_INTERFIXEDVALUE)) {
std::cerr << "[send_internal_value_reply] device not in READING_INTERFIXEDVALUE state." << std::endl;
return false;
}
//将control_words存入dev
dev.control_words.clear();
for (const auto &cw : control_words) {
dev.control_words.push_back(cw);
}
// -------------------- [新增] 建立 internal_values 与 dz_internal_info_list 的一一对应 --------------------
// 说明:按索引次序一一对应(第 i 个 NameFixValue 对应 internal_values 的第 i 个)
// 若数量不同,按 min 对齐,忽略多出来的一边并告警。
std::vector<float> internal_vals; // [新增]
internal_vals.reserve(dev.internal_values.size()); // [新增]
for (float v : dev.internal_values) internal_vals.push_back(v); // [新增]
const size_t n_dz = dev.dz_internal_info_list.size(); // [新增]
const size_t n_val = internal_vals.size(); // [新增]
const size_t n_use = std::min(n_dz, n_val); // [新增]
if (n_dz != n_val) { // [新增]
std::cerr << "[send_internal_value_reply] WARN: dz_internal_info_list size("
<< n_dz << ") != internal_values size(" << n_val
<< "), will use min(" << n_use << ")." << std::endl;
}
// ------------------------------------------------------------------------------------------------------
// 3) 组包顶层
nlohmann::json j;
j["guid"] = dev.guid;
j["FrontIP"] = FRONT_IP;
j["Node"] = g_front_seg_index;
j["Dev_mac"] = normalize_mac(dev.addr_str);
nlohmann::json detail;
detail["Type"] = 0x2106; // 设备数据
nlohmann::json msg;
msg["DataType"] = 0x0D; // 内部定值
// 4) === 将 C# 的拼接逻辑移植为 DataArray ===
// C# 变量对应关系:
// DevInfo.nDevIndex -> 这里用 1
// DevInfo.strGuId -> 这里用 装置id
// DevInfo.controlwordlist -> 这里用参数 control_wordsDZ_kzz_bit 含 kzz_bit/bit_enable
//
// NameFixValue 列表:使用 dev.dz_internal_info_list
//
// 关键逻辑:
// - 遍历每个 NameFixValuek 从 1 递增nStep 每个定值递增 1
// - 若 DataType == 1将 Max/Min/Default 都 /100并 property 输出一个空对象 [{}](保持与 C# 一致)
// - 否则:为该定值构建 property 位数组,范围 [nStep*16, (nStep+1)*16)
// 名称为空则提前结束本定值的 propertyflag = (DefaultValue >> j) & 0x01
//
nlohmann::json dataArray = nlohmann::json::array(); // [新增]
int nStep = 0; // [新增] 每个 NameFixValue 递增
int kSort = 1; // [新增] 排序号,从 1 开始
// 保护dz_internal_info_list 是引用成员,确保不会因并发被改动(当前已在 ledgermtx 下)
//for (const auto& nf : dev.dz_internal_info_list) { // [新增]
for (size_t idxNF = 0; idxNF < n_use; ++idxNF) { // [修改] 使用 idxNF 控制索引
const auto& nf = dev.dz_internal_info_list[idxNF];
// 取字段
const uint16_t dataType = nf.DataType;
const uint16_t minRaw = nf.MinValue;
const uint16_t maxRaw = nf.MaxValue;
const uint16_t defaultRaw = nf.DefaultValue;
const std::string unit = trim_cstr(nf.sDimension, sizeof(nf.sDimension));
const std::string name = trim_cstr(nf.sFixValueName, sizeof(nf.sFixValueName));
// 取对应内部值
const float internal_v_raw = internal_vals[idxNF]; // [新增]
const double internal_v_out = static_cast<double>(internal_v_raw); // [新增] 直接转 double 输出,不缩放
// 构造一条记录
nlohmann::json one;
one["cpu_no"] = 1; // [新增] C#: DevInfo.nDevIndex 填设备号固定为1
one["dev_type"] = dev_id; // [新增] C#: DevInfo.strGuId 填装置id
one["type"] = 90; // [新增] 固定 "90"
one["unit"] = unit; // [新增]
one["describe"] = name; // [新增]
one["sort"] = kSort; // [新增]
one["Internal_Value"] = internal_v_out; // [新增] 精确对应 internal_values 的值(含必要缩放)
// 数值DataType == 1 时缩放 /100
if (dataType == 1) { // [新增] 缩放分支
int ChangeMaxValue = static_cast<int>(maxRaw) / 100;
int ChangeMinValue = static_cast<int>(minRaw) / 100;
int ChangeDefaultValue = static_cast<int>(defaultRaw) / 100;
one["maxvalue"] = ChangeMaxValue;
one["minvalue"] = ChangeMinValue;
one["defaultvalue"] = ChangeDefaultValue;
one["value"] = ChangeDefaultValue;
// C# 在该分支 property 写成 [{ }](一个空对象的数组)
nlohmann::json prop = nlohmann::json::array();
prop.push_back(nlohmann::json::object()); // [{}]
one["property"] = std::move(prop);
} else { // [新增] 未缩放分支 + property 位描述
one["maxvalue"] = static_cast<int>(maxRaw);
one["minvalue"] = static_cast<int>(minRaw);
one["defaultvalue"] = static_cast<int>(defaultRaw);
one["value"] = static_cast<int>(defaultRaw);
// 构建 property16 位窗口,从 nStep*16 到 (nStep+1)*16 - 1
nlohmann::json prop = nlohmann::json::array();
bool hasAny = false;
const int begin = nStep * 16;
const int end = (nStep + 1) * 16; // 不含 end
for (int idx = begin, jbit = 0; idx < end; ++idx, ++jbit) {
if (idx < 0 || static_cast<size_t>(idx) >= control_words.size()) break;
// 名称空则提前退出(仿 C#temp=="" break
const std::string cw_name = trim_cstr(control_words[idx].kzz_bit, sizeof(control_words[idx].kzz_bit));
if (cw_name.empty()) {
// 注意C# 如果 j==0 则设置了 flag2=1仅用于逗号处理这里不需要
break;
}
int flag = (defaultRaw >> jbit) & 0x01; // 取该位默认值
nlohmann::json bitItem;
bitItem["type_num"] = jbit;
bitItem["bit0"] = ""; // 保持与 C# 一致
bitItem["bit1"] = "";
bitItem["describe"] = cw_name;
bitItem["flag"] = (flag ? "1" : "0"); // C# 用字符串
prop.push_back(std::move(bitItem));
hasAny = true;
}
if (!hasAny) {
// 与 C# 对齐:如果一个都没有,就给 [{}] 以避免 "property":[] 的结构差异
prop.push_back(nlohmann::json::object());
}
one["property"] = std::move(prop);
}
dataArray.push_back(std::move(one)); // [新增]
++nStep; // [新增] 进入下一个 16 位窗口
++kSort; // [新增]
}
msg["DataArray"] = std::move(dataArray); // [新增]
detail["Msg"] = std::move(msg);
j["Detail"] = std::move(detail);
// 5) 入队发送(保持你的队列逻辑)
queue_data_t connect_info;
connect_info.strTopic = Topic_Reply_Topic;
connect_info.strText = j.dump(); // 序列化为字符串
{
std::lock_guard<std::mutex> lk(queue_data_list_mutex);
queue_data_list.push_back(std::move(connect_info));
}
// 调试打印
std::cout << "[send_internal_value_reply] queued JSON:\n" << j.dump(4) << std::endl;
// 6) 发送后更新终端状态(保持你现有规则)
if (dev.isbusy > 0) {
dev.isbusy--;
}
if (dev.isbusy == 0) {
dev.guid.clear();
dev.busytype = 0;
dev.internal_values.clear(); // 清理本次定值记录
dev.dz_internal_info_list.clear(); // 清理本次定值描述记录(注意:如果这是引用成员,确保其实际容器存在)
}
return true;
}

View File

@@ -743,9 +743,36 @@ int parse_device_cfg_web()
///////////////////////////////////////////////////////////////////////////////用例这里将局部的map拷贝到全局map后续根据协议台账修改
// 先清空全局 container再逐个拷贝 map 中的 terminal_dev
std::lock_guard<std::mutex> lock(ledgermtx);
terminal_devlist.clear();
for (const auto& kv : terminal_dev_map) {
terminal_devlist.push_back(kv.second); // kv.second 是对象,不用判断指针
terminal_dev dev = kv.second; // kv.second 是对象,不用判断指针
// ======= [新增] 对 terminal_dev 中 web 未返回/未设置字段做统一初始化,避免脏值 =======
dev.guid.clear(); // [新增] 业务 guid 初始为空
dev.busytype = 0; // [新增] 业务类型(状态机)默认 0
dev.isbusy = 0; // [新增] 未进行业务
dev.busytimecount = 0; // [新增] 业务计时清零
dev.internal_values.clear(); // [新增] 内部定值清空,等后续业务真实填充
dev.dz_internal_info_list.clear(); // [新增] 内部定值信息清空,等后续业务真实填充
// ------------------------------------------------------------------------------------
// ======= [新增] 对每个监测点做必要的内部结构初始化 =======
for (auto &mon : dev.line) {
// 暂态事件容器显式清理(虽然默认构造已空,但这里确保无脏数据)
mon.qvvrevent.qvvrdata.clear(); // [新增]
mon.qvvrevent.qvvrfile.clear(); // [新增]
// 定值列表清理,等待后续配置/采集填充
mon.set_values.clear(); // [新增]
mon.dz_info_list.clear(); // [新增]
}
// ------------------------------------------------------------------------------------
terminal_devlist.push_back(dev);
}
// 判断监测点接线类型

View File

@@ -91,16 +91,18 @@ public:
std::string terminal_connect; //监测点接线方式
std::string timestamp; //更新时间
std::string status; //监测点状态
double PT1; // 电压变比1
double PT2; // 电压变比2
double CT1; // 电流变比1
double CT2; // 电流变比2
qvvr_event qvvrevent; //暂态事件
//暂态事件
qvvr_event qvvrevent;
//定值list
std::list<float> set_values;
std::vector<DZ_TAB_STRUCT> dz_info_list; //定值信息列表
};
//终端台账
@@ -113,7 +115,9 @@ public:
int busytimecount; //业务进行计时
//内部定值list
std::list<float> internal_values;
std::list<ushort> internal_values;
std::vector<NameFixValue> dz_internal_info_list; //内部定值信息列表
std::vector<DZ_kzz_bit> control_words;
std::string terminal_id;
std::string terminal_name;
@@ -513,7 +517,35 @@ void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type);
//查guid
std::string find_guid_index_from_dev_id(const std::string& dev_id);
//
//内部定值响应
bool send_internal_value_reply(const std::string &dev_id, const std::vector<DZ_kzz_bit> &control_words);
//定值响应
bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, const std::vector<DZ_TAB_STRUCT> &dz_info);
//保存内部定值描述
bool save_internal_info(const std::string &dev_id, const std::vector<NameFixValue> &fixValueList);
//保存内部定值数值
bool save_internal_value(const std::string &dev_id, const std::vector<ushort> &fabsf);
//保存定值数值
bool save_set_value(const std::string &dev_id, unsigned char mp_index, const std::vector<float> &fabsf);
//发送文件
void SendFileWeb(const std::string& strUrl, const std::string& localpath, const std::string& cloudpath, std::string& wavepath);
//小工具
inline std::string trim_cstr(const char* s, size_t n) {
if (!s) return {};
size_t end = 0;
while (end < n && s[end] != '\0') ++end;
std::string out(s, s + end);
while (!out.empty() && (out.back() == ' ' || out.back() == '\t' || out.back() == '\r' || out.back() == '\n'))
out.pop_back();
return out;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
extern int g_front_seg_index;
extern std::string FRONT_IP;

View File

@@ -429,7 +429,7 @@ std::string parseJsonMessageRC(const std::string& inputJson) {
}
}
bool parseJsonMessageRT(const std::string& body,std::string& devSeries,std::string& line,bool& realData,bool& soeData,int& limit){
bool parseJsonMessageRT(const std::string& body,std::string& devSeries,ushort& line,bool& realData,bool& soeData,int& limit){
json root;
try {
root = json::parse(body);
@@ -472,7 +472,7 @@ bool parseJsonMessageRT(const std::string& body,std::string& devSeries,std::stri
try {
devSeries = messageBody["devSeries"].get<std::string>();
line = messageBody["line"].get<std::string>();
line = messageBody["line"].get<ushort>();
realData = messageBody["realData"].get<bool>();
soeData = messageBody["soeData"].get<bool>();
limit = messageBody["limit"].get<int>();
@@ -859,7 +859,8 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms
}
// 消息解析
std::string devid, line;
std::string devid;
ushort line;
bool realData = false, soeData = false;
int limit = 0;
@@ -870,33 +871,16 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms
}
// 加锁访问台账
int dev_index;
int mp_index;
if( !devid.empty() && !line.empty()){
std::lock_guard<std::mutex> lock(ledgermtx);
dev_index = find_dev_index_from_dev_id(devid);
mp_index = find_mp_index_from_mp_id(line);
if( !devid.empty() && line > 0){
//不再使用文件触发方式,直接调用接口向终端发起请求
ClientManager::instance().set_real_state_count(devid, 60, line);//一秒询问一次询问60次,下一次同一个测点调用的话就会刷新
}
else{
std::cerr << "rtdata is NULL." << std::endl;
DIY_ERRORLOG("process","【ERROR】前置的%d号进程处理topic:%s_%s的补招触发消息失败,消息的json结构不正确", g_front_seg_index,FRONT_INST.c_str(), G_MQCONSUMER_TOPIC_RT.c_str());
}
if (dev_index == -1 || mp_index == -1) {
std::cerr << "dev index or mp index is not found" << std::endl;
return rocketmq::RECONSUME_LATER;
}
// 写入 XML
/*if (!createXmlFile(dev_index, mp_index, realData, soeData, limit, "new")) {
DIY_ERRORLOG("process", "【ERROR】前置无法创建实时数据触发文件");
std::cerr << "Failed to create the XML file." << std::endl;
return rocketmq::RECONSUME_LATER;
}*/
//不再使用文件触发方式,直接调用接口向终端发起请求
ClientManager::instance().set_real_state_count(devid, 60,mp_index);//一秒询问一次询问60次
return rocketmq::CONSUME_SUCCESS;
}

View File

@@ -409,6 +409,9 @@ extern bool normalOutputEnabled;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////测试shell用的函数
void Worker::printLedgerinshell(const terminal_dev& dev, int fd) {
// —— 显示控制:最多打印的元素数量(防止过长)——
constexpr size_t MAX_ITEMS = 5; // 可按需调整或删除限制
std::ostringstream os;
os << "\r\x1B[K------------------------------------\n";
os << "\r\x1B[K|-- terminal_id : " << dev.terminal_id << "\n";
@@ -426,12 +429,63 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) {
os << "\r\x1B[K|-- tmnl_factory : " << dev.tmnl_factory << "\n";
os << "\r\x1B[K|-- tmnl_status : " << dev.tmnl_status << "\n";
os << "\r\x1B[K|-- timestamp : " << dev.timestamp << "\n";
os << "\r\x1B[K|-- mac : " << dev.mac << "\n";
// ========================= 终端级 · 内部定值 =========================
// internal_valuesushort 列表)与 dz_internal_info_list 一一对应,仅展示前 MAX_ITEMS 条
os << "\r\x1B[K|-- Internal Values (" << dev.internal_values.size() << "):\n";
{
size_t idx = 0;
for (auto itv = dev.internal_values.begin();
itv != dev.internal_values.end() && idx < MAX_ITEMS;
++itv, ++idx) {
os << "\r\x1B[K |-- [" << idx << "] value: " << static_cast<unsigned>(*itv) << "\n";
}
if (dev.internal_values.size() > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (dev.internal_values.size() - MAX_ITEMS) << " more)\n";
}
}
// dz_internal_info_listNameFixValue 描述,和 internal_values 对应)
os << "\r\x1B[K|-- Internal Value Descriptions (" << dev.dz_internal_info_list.size() << "):\n";
{
const size_t n = dev.dz_internal_info_list.size();
for (size_t i = 0; i < n && i < MAX_ITEMS; ++i) {
const auto& nf = dev.dz_internal_info_list[i];
os << "\r\x1B[K |-- [" << i << "] "
<< "Name=" << trim_cstr(nf.sFixValueName, sizeof(nf.sFixValueName))
<< ", Type=" << nf.DataType
<< ", Unit=" << trim_cstr(nf.sDimension, sizeof(nf.sDimension))
<< ", Min=" << nf.MinValue
<< ", Max=" << nf.MaxValue
<< ", Default=" << nf.DefaultValue
<< "\n";
}
if (n > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n";
}
}
// control_words控制字描述
os << "\r\x1B[K|-- Control Words (" << dev.control_words.size() << "):\n";
{
const size_t n = dev.control_words.size();
for (size_t i = 0; i < n && i < MAX_ITEMS; ++i) {
const DZ_kzz_bit& b = dev.control_words[i];
os << "\r\x1B[K |-- [" << i << "] "
<< "name=\"" << trim_cstr(b.kzz_bit, sizeof(b.kzz_bit)) << "\""
<< ", enable=" << static_cast<int>(b.bit_enable) << "\n";
}
if (n > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n";
}
}
// ========================= 监测点级 · line =========================
for (size_t i = 0; i < dev.line.size(); ++i) {
const auto& ld = dev.line[i];
if (ld.monitor_id.empty()) continue;
os << "\r\x1B[K|-- line[" << i << "]:\n";
os << "\r\x1B[K |-- monitor_id : " << ld.monitor_id << "\n";
os << "\r\x1B[K |-- monitor_name : " << ld.monitor_name << "\n";
@@ -441,17 +495,117 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) {
os << "\r\x1B[K |-- terminal_connect : " << ld.terminal_connect << "\n";
os << "\r\x1B[K |-- status : " << ld.status << "\n";
os << "\r\x1B[K |-- timestamp : " << ld.timestamp << "\n";
os << "\r\x1B[K |-- CT1=" << ld.CT1 << ", CT2=" << ld.CT2
<< ", PT1=" << ld.PT1 << ", PT2=" << ld.PT2 << "\n";
os << "\r\x1B[K |-- CT1: " << ld.CT1 << "\n";
os << "\r\x1B[K |-- CT2: " << ld.CT2 << "\n";
os << "\r\x1B[K |-- PT1: " << ld.PT1 << "\n";
os << "\r\x1B[K |-- PT2: " << ld.PT2 << "\n";
// --- 监测点 · 定值set_values ---
os << "\r\x1B[K |-- Set Values (" << ld.set_values.size() << "):\n";
{
size_t idx = 0;
for (auto it = ld.set_values.begin();
it != ld.set_values.end() && idx < MAX_ITEMS;
++it, ++idx) {
os << "\r\x1B[K |-- [" << idx << "] " << *it << "\n";
}
if (ld.set_values.size() > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (ld.set_values.size() - MAX_ITEMS) << " more)\n";
}
}
// --- 监测点 · 定值描述文件dz_info_list ---
os << "\r\x1B[K |-- DZ Table (" << ld.dz_info_list.size() << "):\n";
{
const size_t n = ld.dz_info_list.size();
for (size_t j = 0; j < n && j < MAX_ITEMS; ++j) {
const DZ_TAB_STRUCT& z = ld.dz_info_list[j];
os << "\r\x1B[K |-- [" << j << "] "
<< "LN=" << z.LN_Num
<< ", DZ=" << z.DZ_Num
<< ", Name=" << trim_cstr(z.DZ_Name, sizeof(z.DZ_Name))
<< ", Type=" << z.DZ_Type
<< ", Min=" << z.DZ_Min
<< ", Max=" << z.DZ_Max
<< ", Def=" << z.DZ_Default
<< ", Unit=" << trim_cstr(z.DZ_UNIT, sizeof(z.DZ_UNIT))
<< "\n";
}
if (n > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n";
}
}
// --- 监测点 · 暂态事件qvvrevent ---
os << "\r\x1B[K |-- QVVR Event:\n";
// 1) 暂态事件列表
os << "\r\x1B[K |-- Events (" << ld.qvvrevent.qvvrdata.size() << "):\n";
{
const size_t n = ld.qvvrevent.qvvrdata.size();
for (size_t k = 0; k < n && k < MAX_ITEMS; ++k) {
const qvvr_data& e = ld.qvvrevent.qvvrdata[k];
os << "\r\x1B[K |-- [" << k << "] "
<< "used=" << e.used_status
<< ", type=" << e.QVVR_type
<< ", time=" << static_cast<unsigned long long>(e.QVVR_time)
<< ", per=" << e.QVVR_PerTime
<< ", amp=" << e.QVVR_Amg
<< ", phase="<< e.phase
<< "\n";
}
if (n > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n";
}
}
// 2) 文件组列表
os << "\r\x1B[K |-- File Groups (" << ld.qvvrevent.qvvrfile.size() << "):\n";
{
const size_t n = ld.qvvrevent.qvvrfile.size();
for (size_t g = 0; g < n && g < MAX_ITEMS; ++g) {
const qvvr_file& fg = ld.qvvrevent.qvvrfile[g];
os << "\r\x1B[K |-- [" << g << "] "
<< "used=" << fg.used_status
<< ", tcount=" << fg.file_time_count
<< ", downloaded=" << fg.is_download
<< ", paired=" << fg.is_pair
<< "\n";
// 文件名列表file_name
os << "\r\x1B[K |-- file_name (" << fg.file_name.size() << "):\n";
{
size_t c = 0;
for (const auto& fn : fg.file_name) {
if (c++ >= MAX_ITEMS) break;
os << "\r\x1B[K |-- " << fn << "\n";
}
if (fg.file_name.size() > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (fg.file_name.size() - MAX_ITEMS) << " more)\n";
}
}
// 已下载列表file_download
os << "\r\x1B[K |-- file_download (" << fg.file_download.size() << "):\n";
{
size_t c = 0;
for (const auto& fn : fg.file_download) {
if (c++ >= MAX_ITEMS) break;
os << "\r\x1B[K |-- " << fn << "\n";
}
if (fg.file_download.size() > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (fg.file_download.size() - MAX_ITEMS) << " more)\n";
}
}
}
if (n > MAX_ITEMS) {
os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n";
}
}
}
os << "\r\x1B[K------------------------------------\n";
sendStr(fd, os.str());
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////打印所有的终端列表
void Worker::ledger(const std::string& terminal_id, int fd) {
sendStr(fd, "\r\x1B[Kprint ledger in shell\n");

View File

@@ -0,0 +1,77 @@
[Queue]
BrokerList=
RTDataTopic=Real_Time_Data_Topic
HisTopic=njcnAppAutoDataTopic
PSTTopic=njcnAppAutoDataTopic
PLTTopic=njcnAppAutoDataTopic
AlmTopic=AlmTopic
SngTopic=SngTopic
QUEUE_TAG=stat
QUEUE_KEY=stat
[Flag]
FrontInst=
FrontIP=192.168.1.138
[Ledger]
TerminalStatus="[0]"
MonitorStatus="[1,2]"
IcdFlag=0
IedCount=300
[Http]
WebDevice=http://192.168.1.103:10220/icd/getLedgerInfo
WebEvent=http://192.168.1.103:10222/event/addCldEvent
WebFileupload=http://192.168.1.103:10207/file/upload
WebFiledownload=
[RocketMq]
producer=Group_producer
Ipport=192.168.1.24:9876
AccessKey=rmqroot
SecretKey=001@#njcnmq
Topic_Test=lnk_Topic
Tag_Test=Test_Tag
Key_Test=Test_Keys
Testflag=1
Testnum=0
Testtype=0
TestPort=11000
TestList=8ad28e2e36dfbd19906f9e2a4894b375
consumer=Group_consumer
ConsumerIpport=192.168.1.24:9876
ConsumerTopicRT=ask_real_data_topic
ConsumerTagRT=Test_Tag
ConsumerKeyRT=Test_Keys
ConsumerAccessKey=rmqroot
ConsumerSecretKey=001@#njcnmq
ConsumerChannel=
ConsumerTopicUD=control_Topic
ConsumerTagUD=Test_Tag
ConsumerKeyUD=Test_Keys
ConsumerTopicRC=recall_Topic
ConsumerTagRC=Test_Tag
ConsumerKeyRC=Test_Keys
ConsumerTopicSET=process_Topic
ConsumerTagSET=Test_Tag
ConsumerKeySET=Test_Keys
ConsumerTopicLOG=ask_log_Topic
ConsumerTagLOG=Test_Tag
ConsumerKeyLOG=Test_Keys
LOGTopic=log_Topic
LOGTag=Test_Tag
LOGKey=Test_Keys
CONNECTTopic=Device_Run_Flag_Topic
CONNECTTag=Test_Tag
CONNECTKey=Test_Keys
Heart_Beat_Topic=Heart_Beat_Topic
Heart_Beat_Tag=Test_Tag
Heart_Beat_Key=Test_Key
Topic_Reply_Topic=Topic_Reply_Topic
Topic_Reply_Tag=Test_Tag
Topic_Reply_Key=Test_Key

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null}

View File

@@ -0,0 +1 @@
{"code":"A0000","message":"根据前置ip获取对应的终端台账信息,成功","data":[{"id":"175427bfa6ed1de818464e43dd09e04f","ip":"192.168.1.242","devType":"PQS882_B4_MMS(4U4I)","org_name":null,"port":"102","stationName":null,"name":"南昌终端_242","subName":"南昌变电站","updateTime":"2025-08-07 14:58:03","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":2,"maxProcessNum":3,"monitorData":[{"id":"4067998c0327a624b83610879c7de4c6","name":"监测点3","lineNo":"3","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"74203b186428c1684aa450ad05257b06","name":"监测点1","lineNo":"1","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"777737a13b16cf860d65d9f71e54f858","name":"监测点4","lineNo":"4","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"e07c34b721ac9ccd62e03d796a2f7fa8","name":"监测点2","lineNo":"2","voltageLevel":"10kV","ptType":"0","status":"0"}]},{"id":"438a3bc6cb9c04c91d572973b5760d25","ip":"192.168.1.234","devType":"PQS_882B4","org_name":null,"port":"102","stationName":null,"name":"宜春终端_234","subName":"宜春变电站","updateTime":"2025-08-07 14:58:02","manufacturer":"浪拜迪","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"5f99b9ba4e563439ec8490a0c598da8d","name":"监测点1","lineNo":"1","voltageLevel":"110kV","ptType":"0","status":"0"}]},{"id":"8cb7a1abcd70b26716358267ea517a22","ip":"192.168.1.238","devType":"NPQS_682","org_name":null,"port":"102","stationName":null,"name":"赣州终端_238","subName":"赣州变电站","updateTime":"2025-08-07 14:58:03","manufacturer":"浪拜迪","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"1b9cece8b66b100a52c4a31f469e8e0a","name":"监测点1","lineNo":"1","voltageLevel":"220kV","ptType":"0","status":"0"},{"id":"6072c5deecdae5d1b4dd5c475517444b","name":"监测点2","lineNo":"2","voltageLevel":"220kV","ptType":"0","status":"0"}]},{"id":"ad60520f9294864f41ca48b5acee62d6","ip":"192.168.1.229","devType":"PQS882_B4_MMS(4U4I)","org_name":null,"port":"102","stationName":null,"name":"南昌终端_229","subName":"南昌变电站","updateTime":"2025-08-07 11:43:07","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"683e77d95099a315fb777b16113e34ae","name":"监测点3","lineNo":"3","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"824ab9440f0c9c279c2fc2080e19d07a","name":"监测点2","lineNo":"2","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"d446071b8bd8dd493687bae4746c02e5","name":"监测点1","lineNo":"1","voltageLevel":"10kV","ptType":"1","status":"0"},{"id":"fde41900cbaef358c9a9e23960ee2593","name":"监测点4","lineNo":"4","voltageLevel":"10kV","ptType":"0","status":"0"}]},{"id":"e8d14ec6395262c4984f1f8152a9135b","ip":"192.168.1.230","devType":"NPQS_681","org_name":null,"port":"102","stationName":null,"name":"上饶终端","subName":"上饶变电站","updateTime":"2025-08-07 11:43:07","manufacturer":"北京四方","status":"0","series":"5nfaNZS5ukTZ3L4rQiMinA==","devKey":"g/4565/nRBWbqxo7gZ8JZdg4ozz2DutoY/MaCC1PMIw=","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"401a696fe9918bb4cce7d9393d0d5df7","name":"上饶监测点1","lineNo":"1","voltageLevel":"750kV","ptType":"0","status":"0"}]},{"id":"f3a02c4a89e75fe0cc377088fd1cb2f1","ip":"192.168.1.240","devType":"NPQS_882B4","org_name":null,"port":"102","stationName":null,"name":"九江终端_240","subName":"九江变电站","updateTime":"2025-08-07 14:58:03","manufacturer":"浪拜迪","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"cfc481a71953f85a23fd448c3cffc884","name":"监测点1","lineNo":"1","voltageLevel":"35kV","ptType":"0","status":"0"}]}]}

View File

@@ -616,6 +616,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_REALSTAT));
// <20><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD>ݴ<EFBFBD><DDB4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -702,6 +703,10 @@ void process_received_message(string mac, string id,const char* data, size_t len
else {
std::cerr << "Failed to save file: " << file_path
<< ", Error: " << strerror(errno) << std::endl;
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>֪ͨ<CDA8>ƶ<EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::BAD_REQUEST),
id, static_cast<int>(DeviceState::READING_EVENTFILE));
}
//<2F><>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>أ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>еȺ<D0B5><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>״̬<D7B4><CCAC>ֱ<EFBFBD>ӾͻῪʼ<E1BFAA><CABC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
@@ -710,6 +715,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_EVENTFILE));
// <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -754,6 +760,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
else {
std::cout << "reason code: " << static_cast<int>(udata[8]) << "-" << static_cast<int>(udata[9]) << "-" << static_cast<int>(udata[10]) << "-" << static_cast<int>(udata[11]) << std::endl;
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_FILEMENU));
// <20><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>ݴ<EFBFBD><DDB4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -835,7 +842,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
//ʹ<>ýӿ<C3BD><D3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>lnk20250826
std::string filename;
//SendFileWeb(WEB_FILEUPLOAD, file_path, file_path, filename);
SendFileWeb(WEB_FILEUPLOAD, file_path, file_path, filename);
std::cout << "File upload: " << filename << std::endl;
}
@@ -845,12 +852,13 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
//<2F><>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>أ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>еȺ<D0B5><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>״̬<D7B4><CCAC>ֱ<EFBFBD>ӾͻῪʼ<E1BFAA><CABC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
ClientManager::instance().change_device_state(id, DeviceState::READING_FILEDATA);
}
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_FILEDATA));
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -913,7 +921,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
//<2F><EFBFBD><E6B4A2>ֵlnk20250827
//save_internal_value(id, monitor_index, fList);
save_set_value(id, monitor_index, fList);
//<2F><><EFBFBD>Զ<EFBFBD>ֵ<EFBFBD>޸Ĺ<DEB8><C4B9><EFBFBD>
//ClientManager::instance().set_fixedvalue_action_to_device(id, monitor_index, fList);
@@ -923,6 +931,8 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR),id,static_cast<int>(DeviceState::READING_FIXEDVALUE));
// <20><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -1000,13 +1010,15 @@ void process_received_message(string mac, string id,const char* data, size_t len
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>)
uint8_t monitor_index = parser.RecvData[0];
std::cout << "Monitor Index: " << static_cast<int>(monitor_index) << std::endl;
//send_set_value_reply(id, monitor_index, dz_list);
send_set_value_reply(id, monitor_index, dz_list);
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR),id,static_cast<int>(DeviceState::READING_FIXEDVALUEDES));
// <20><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -1026,12 +1038,20 @@ void process_received_message(string mac, string id,const char* data, size_t len
else if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewNACK)) {
std::cout << "set error" << mac << std::endl;
// װ<>÷<EFBFBD><C3B7><EFBFBD>Ӧ<EFBFBD>𣬶<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
//<2F><>Ӧlnk20250828
send_reply_to_cloud(static_cast<int>(ResponseCode::BAD_REQUEST),id,static_cast<int>(DeviceState::SET_FIXEDVALUE));
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
//<2F><>Ӧlnk20250828
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR),id,static_cast<int>(DeviceState::SET_FIXEDVALUE));
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
break;
@@ -1071,7 +1091,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
//<2F><EFBFBD><E6B4A2>ֵlnk20250827
//save_internal_value(id, fList);
save_internal_value(id, fList);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
//ClientManager::instance().set_interfixedvalue_action_to_device(id, fList);
@@ -1081,6 +1101,9 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_INTERFIXEDVALUE));
// <20><>ȡװ<C8A1><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -1149,11 +1172,17 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
}
//lnk20250905
save_internal_info(id, fixValueList);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_INTERFIXEDVALUEDES));
// <20><>ȡװ<C8A1><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -1209,11 +1238,14 @@ void process_received_message(string mac, string id,const char* data, size_t len
<< ", enable: " << static_cast<int>(dz_info.bit_enable) << std::endl;
}
send_internal_value_reply(id, control_words);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::READING_CONTROLWORD));
// <20><>ȡװ<C8A1>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
@@ -1224,6 +1256,8 @@ void process_received_message(string mac, string id,const char* data, size_t len
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
std::cout << "set success" << mac << std::endl;
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::OK), id, static_cast<int>(DeviceState::SET_INTERFIXEDVALUE));
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewNACK)) {
@@ -1232,11 +1266,14 @@ void process_received_message(string mac, string id,const char* data, size_t len
std::cout << "reason code: " << static_cast<int>(udata[8]) << "-" << static_cast<int>(udata[9]) << "-" << static_cast<int>(udata[10]) << "-" << static_cast<int>(udata[11]) << std::endl;
// װ<>÷<EFBFBD><C3B7><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
send_reply_to_cloud(static_cast<int>(ResponseCode::BAD_REQUEST), id, static_cast<int>(DeviceState::SET_INTERFIXEDVALUE));
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send_reply_to_cloud(static_cast<int>(ResponseCode::INTERNAL_ERROR), id, static_cast<int>(DeviceState::SET_INTERFIXEDVALUE));
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}

View File

@@ -0,0 +1,585 @@
<?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-->
<!--send类型0-不发送kafka、1-发送kafka-->
<!--type类型0-DataType、1-监测点、2-剔除标记、3-发生时刻毫秒、4-数据链表、5-相位、6-值索引、9-实时SOE事件-->
<!--nane:参数项、desc:参数描述、type:参数等级、DO:数据对象名、DA:数据属性名、Coefficient:数据系数、Offset:起始序号偏移量、PltFlag:长时闪变标志-->
<!--角型接线时相角为0不再进行DO、DA路径值扩展-->
<JSConfigTemplate version="2021-12-15" author="ww" SelectStat="JiangSu" SelectReal="Kafka Producer" desc="昆明长水机场增加谐波类数据配置">
<!--注:暂态事件解析规则配置 Flag0-不分相 1-分相 如果Flag=0 ABC配置成一样如果Flag=1ABC根据实际配置-->
<WavePhasic Flag="1" A="QVVR1" B="QVVR2" C="QVVR3" />
<!--暂态事件持续事件单位0-毫秒 1--->
<UnitOfTime Unit="1" />
<!--上送值的时间UTC-UTC时间 beijing-北京时间-->
<ValueOfTime Unit="UTC" />
<!--录波文件的时间UTC-UTC时间 beijing-北京时间-->
<ComtradeFile WaveTimeFlag="beijing" />
<IED name="PQMonitor" desc="电能质量监测装置" />
<LDevice Prefix="PQM" 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$brcbFlickerData,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,3,1" />
<Report ReportControl="LLN0$BR$brcbStatisticData,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,1,0" />
</ReportStat>
<ReportReal>
<Report ReportControl="LLN0$RP$urcbRealData,3,0,0,0,1,0,yes,1,1,1,1,1,0,1,1,1,3,2" />
</ReportReal>
<ReportEvent>
<Report ReportControl="LLN0$BR$brcbQVVR,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,8,1,0"/>
<Report ReportControl="LLN0$BR$brcbRDRE,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,8,1,0"/>
<Report ReportControl="LLN0$BR$brcbGGIO,60,1,0,0,0,0,yes,1,1,1,1,1,0,1,1,1,8,1,0"/>
<Report ReportControl="LLN0$BR$brcbLPHD,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="MFLK0$MX$PhPst" DA="phs*$cVal$mag$f" />
<Value name="FLUC" desc="电压波动幅度" type="6" DO="MFLK0$MX$PhFluc" DA="phs*$cVal$mag$f" />
<Value name="FLUCF" desc="电压波动频度" type="6" DO="MFLK0$MX$PhFlucf" 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="MFLK0$MX$PhPlt" 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*220LimitDown 数据合理下限 如果包含*%U字符表示需要乘以电压等级电压-->
<Value name="G_DELTA_V" desc="电压偏差95值" type="6" DO="MMXU4$MX$PhVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
<Value name="DELTA_V" desc="电压偏差平均值" type="6" DO="MMXU2$MX$PhVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
<Value name="MAX_DELTA_V" desc="电压偏差最大值" type="6" DO="MMXU1$MX$PhVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
<Value name="MIN_DELTA_V" desc="电压偏差最小值" type="6" DO="MMXU3$MX$PhVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
<Value name="G_VRMS" desc="电压有效值95值" type="6" DO="MMXU4$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="MMXU1$MX$PhV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
<Value name="MIN_VRMS" desc="电压有效值最小值" type="6" DO="MMXU3$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="MMXU4$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="MMXU1$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="MMXU3$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="MHAI4$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="MHAI1$MX$ThdPhV" DA="phs*$cVal$mag$f" />
<Value name="MIN_VTHD" desc="电压总谐波畸变率最小值" type="6" DO="MHAI3$MX$ThdPhV" DA="phs*$cVal$mag$f" />
<Value name="G_VFUND_ANGLE" desc="基波电压相角95值" type="6" DO="MHAI4$MX$HFundPhV" DA="phs*$cVal$ang$f" />
<Value name="VFUND_ANGLE" desc="基波电压相角平均值" type="6" DO="MHAI2$MX$HFundPhV" DA="phs*$cVal$ang$f" />
<Value name="MAX_VFUND_ANGLE" desc="基波电压相角最大值" type="6" DO="MHAI1$MX$HFundPhV" DA="phs*$cVal$ang$f" />
<Value name="MIN_VFUND_ANGLE" desc="基波电压相角最小值" type="6" DO="MHAI3$MX$HFundPhV" DA="phs*$cVal$ang$f" />
<Value name="G_V1" desc="基波电压有效值95值" type="6" DO="MHAI4$MX$HFundPhV" DA="phs*$cVal$mag$f" />
<Value name="V1" desc="基波电压有效值平均值" type="6" DO="MHAI2$MX$HFundPhV" DA="phs*$cVal$mag$f" />
<Value name="MAX_V1" desc="基波电压有效值最大值" type="6" DO="MHAI1$MX$HFundPhV" DA="phs*$cVal$mag$f" />
<Value name="MIN_V1" desc="基波电压有效值最小值" type="6" DO="MHAI3$MX$HFundPhV" DA="phs*$cVal$mag$f" />
<Value name="G_SV_%0,49%" desc="间谐波电压含有率(f25-2475)95值" type="6" DO="MHAI9$MX$HRPhV" DA="phs*Har[%-0]$mag$f" />
<Value name="SV_%0,49%" desc="间谐波电压含有率(f25-2475)平均值" type="6" DO="MHAI7$MX$HRPhV" DA="phs*Har[%-0]$mag$f" />
<Value name="MAX_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最大值" type="6" DO="MHAI6$MX$HRPhV" DA="phs*Har[%-0]$mag$f" />
<Value name="MIN_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最小值" type="6" DO="MHAI8$MX$HRPhV" DA="phs*Har[%-0]$mag$f" />
<Value name="G_V%2,50%" desc="谐波电压含有率(2-50)95值" type="6" DO="MHAI4$MX$HRPhV" DA="phs*Har[%-2]$mag$f" />
<Value name="V%2,50%" desc="谐波电压含有率(2-50)平均值" type="6" DO="MHAI2$MX$HRPhV" DA="phs*Har[%-2]$mag$f" />
<Value name="MAX_V%2,50%" desc="谐波电压含有率(2-50)最大值" type="6" DO="MHAI1$MX$HRPhV" DA="phs*Har[%-2]$mag$f" />
<Value name="MIN_V%2,50%" desc="谐波电压含有率(2-50)最小值" type="6" DO="MHAI3$MX$HRPhV" DA="phs*Har[%-2]$mag$f" />
<Value name="G_VA%2,50%" desc="谐波电压相角(2-50)95值" type="6" DO="MHAI4$MX$HRPhV" DA="phs*Har[%-2]$ang$f" />
<Value name="VA%2,50%" desc="谐波电压相角(2-50)平均值" type="6" DO="MHAI2$MX$HRPhV" DA="phs*Har[%-2]$ang$f" />
<Value name="MAX_VA%2,50%" desc="谐波电压相角(2-50)最大值" type="6" DO="MHAI1$MX$HRPhV" DA="phs*Har[%-2]$ang$f" />
<Value name="MIN_VA%2,50%" desc="谐波电压相角(2-50)最小值" type="6" DO="MHAI3$MX$HRPhV" 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*220LimitDown 数据合理下限 如果包含*%U字符表示需要乘以电压等级电压-->
<Value name="G_DELTA_V" desc="电压偏差95值" type="6" DO="MMXU4$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="MMXU1$MX$PPVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
<Value name="MIN_DELTA_V" desc="电压偏差最小值" type="6" DO="MMXU3$MX$PPVDev" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="20" LimitDown="-20" Coefficient="1"/>
<Value name="G_VRMS_LVR" desc="电压有效值95值" type="6" DO="MMXU4$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="MMXU1$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
<Value name="MIN_VRMS_LVR" desc="电压有效值最小值" type="6" DO="MMXU3$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
<Value name="G_VTHD" desc="电压总谐波畸变率95值" type="6" DO="MHAI4$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="MHAI1$MX$ThdPPV" DA="phs*$cVal$mag$f" />
<Value name="MIN_VTHD" desc="电压总谐波畸变率最小值" type="6" DO="MHAI3$MX$ThdPPV" DA="phs*$cVal$mag$f" />
<Value name="G_VFUND_ANGLE" desc="基波电压相角95值" type="6" DO="MHAI4$MX$HFundPPVAng" DA="phs*$cVal$ang$f" />
<Value name="VFUND_ANGLE" desc="基波电压相角平均值" type="6" DO="MHAI2$MX$HFundPPVAng" DA="phs*$cVal$ang$f" />
<Value name="MAX_VFUND_ANGLE" desc="基波电压相角最大值" type="6" DO="MHAI1$MX$HFundPPVAng" DA="phs*$cVal$ang$f" />
<Value name="MIN_VFUND_ANGLE" desc="基波电压相角最小值" type="6" DO="MHAI3$MX$HFundPPVAng" DA="phs*$cVal$ang$f" />
<Value name="G_V1" desc="基波电压有效值95值" type="6" DO="MHAI4$MX$HFundPPV" DA="phs*$cVal$mag$f" />
<Value name="V1" desc="基波电压有效值平均值" type="6" DO="MHAI2$MX$HFundPPV" DA="phs*$cVal$mag$f" />
<Value name="MAX_V1" desc="基波电压有效值最大值" type="6" DO="MHAI1$MX$HFundPPV" DA="phs*$cVal$mag$f" />
<Value name="MIN_V1" desc="基波电压有效值最小值" type="6" DO="MHAI3$MX$HFundPPV" DA="phs*$cVal$mag$f" />
<Value name="G_SV_%0,49%" desc="间谐波电压含有率(f25-2475)95值" type="6" DO="MHAI9$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
<Value name="SV_%0,49%" desc="间谐波电压含有率(f25-2475)平均值" type="6" DO="MHAI7$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
<Value name="MAX_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最大值" type="6" DO="MHAI6$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
<Value name="MIN_SV_%0,49%" desc="间谐波电压含有率(f25-2475)最小值" type="6" DO="MHAI8$MX$HRPPV" DA="phs*Har[%-0]$mag$f" />
<Value name="G_V%2,50%" desc="谐波电压含有率(2-50)95值" type="6" DO="MHAI4$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="MHAI1$MX$HRPPV" DA="phs*Har[%-2]$mag$f" />
<Value name="MIN_V%2,50%" desc="谐波电压含有率(2-50)最小值" type="6" DO="MHAI3$MX$HRPPV" DA="phs*Har[%-2]$mag$f" />
<Value name="G_VA%2,50%" desc="谐波电压相角(2-50)95值" type="6" DO="MHAI4$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="MHAI1$MX$HRPPV" DA="phs*Har[%-2]$ang$f" />
<Value name="MIN_VA%2,50%" desc="谐波电压相角(2-50)最小值" type="6" DO="MHAI3$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="MSQI4$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="MSQI1$MX$SeqV" DA="c2$cVal$mag$f" />
<Value name="MIN_VNSEQ" desc="负序电压最小值" type="6" DO="MSQI3$MX$SeqV" DA="c2$cVal$mag$f" />
<Value name="G_V_UNBAN" desc="负序电压不平衡95值" type="6" DO="MSQI4$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="MSQI1$MX$ImbNgV" DA="mag$f" />
<Value name="MIN_V_UNBAN" desc="负序电压不平衡最小值" type="6" DO="MSQI3$MX$ImbNgV" DA="mag$f" />
<Value name="G_VZSEQ" desc="零序电压95值" type="6" DO="MSQI4$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="MSQI1$MX$SeqV" DA="c3$cVal$mag$f" />
<Value name="MIN_VZSEQ" desc="零序电压最小值" type="6" DO="MSQI3$MX$SeqV" DA="c3$cVal$mag$f" />
<Value name="G_VZSEQ_UNBAN" desc="零序电压不平衡95值" type="6" DO="MSQI4$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="MSQI1$MX$ImbZroV" DA="mag$f" />
<Value name="MIN_VZSEQ_UNBAN" desc="零序电压不平衡最小值" type="6" DO="MSQI3$MX$ImbZroV" DA="mag$f" />
<Value name="G_FREQ" desc="频率95值" type="6" DO="MMXU4$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="MMXU1$MX$Hz" DA="mag$f" />
<Value name="MIN_FREQ" desc="频率最小值" type="6" DO="MMXU3$MX$Hz" DA="mag$f" />
<Value name="G_DELTA_FREQ" desc="频率偏差95值" type="6" DO="MMXU4$MX$HzDev" DA="mag$f" />
<Value name="DELTA_FREQ" desc="频率偏差平均值" type="6" DO="MMXU2$MX$HzDev" DA="mag$f" />
<Value name="MAX_DELTA_FREQ" desc="频率偏差最大值" type="6" DO="MMXU1$MX$HzDev" DA="mag$f" />
<Value name="MIN_DELTA_FREQ" desc="频率偏差最小值" type="6" DO="MMXU3$MX$HzDev" DA="mag$f" />
<Value name="G_VPSEQ" desc="正序电压95值" type="6" DO="MSQI4$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="MSQI1$MX$SeqV" DA="c1$cVal$mag$f" />
<Value name="MIN_VPSEQ" desc="正序电压最小值" type="6" DO="MSQI3$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="MMXU4$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="MMXU1$MX$A" DA="phs*$cVal$mag$f" />
<Value name="MIN_IRMS" desc="电流有效值最小值" type="6" DO="MMXU3$MX$A" DA="phs*$cVal$mag$f" />
<Value name="G_I1" desc="基波电流有效值95值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[0]$mag$f" />
<Value name="I1" desc="基波电流有效值平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[0]$mag$f" />
<Value name="MAX_I1" desc="基波电流有效值最大值" type="6" DO="MHAI1$MX$HA" DA="phs*Har[0]$mag$f" />
<Value name="MIN_I1" desc="基波电流有效值最小值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[0]$mag$f" />
<Value name="G_IFUND_ANGLE" desc="基波电流相角95值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[0]$ang$f" />
<Value name="IFUND_ANGLE" desc="基波电流相角平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[0]$ang$f" />
<Value name="MAX_IFUND_ANGLE" desc="基波电流相角最大值" type="6" DO="MHAI1$MX$HA" DA="phs*Har[0]$ang$f" />
<Value name="MIN_IFUND_ANGLE" desc="基波电流相角最小值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[0]$ang$f" />
<Value name="G_SI_%0,49%" desc="间谐波电流幅值(f25-2475)95值" type="6" DO="MHAI9$MX$HA" DA="phs*Har[%-0]$mag$f" />
<Value name="SI_%0,49%" desc="间谐波电流幅值(f25-2475)平均值" type="6" DO="MHAI7$MX$HA" DA="phs*Har[%-0]$mag$f" />
<Value name="MAX_SI_%0,49%" desc="间谐波电流幅值(f25-2475)最大值" type="6" DO="MHAI6$MX$HA" DA="phs*Har[%-0]$mag$f" />
<Value name="MAX_SI_%0,49%" desc="间谐波电流幅值(f25-2475)最小值" type="6" DO="MHAI8$MX$HA" DA="phs*Har[%-0]$mag$f" />
<Value name="G_I%1,50%" desc="谐波电流幅值(2-50)95值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[%-1]$mag$f" />
<Value name="I%1,50%" desc="谐波电流幅值(2-50)平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[%-1]$mag$f" />
<Value name="MAX_I%1,50%" desc="谐波电流幅值(2-50)最大值" type="6" DO="MHAI1$MX$HA" DA="phs*Har[%-1]$mag$f" />
<Value name="MIN_I%1,50%" desc="谐波电流幅值(2-50)最小值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[%-1]$mag$f" />
<Value name="G_IA%1,50%" desc="谐波电流相角(2-50)95值" type="6" DO="MHAI4$MX$HA" DA="phs*Har[%-1]$ang$f" />
<Value name="IA%1,50%" desc="谐波电流相角(2-50)平均值" type="6" DO="MHAI2$MX$HA" DA="phs*Har[%-1]$ang$f" />
<Value name="MAX_IA%1,50%" desc="谐波电流相角(2-50)最大值" type="6" DO="MHAI1$MX$HA" DA="phs*Har[%-1]$ang$f" />
<Value name="MIN_IA%1,50%" desc="谐波电流相角(2-50)最小值" type="6" DO="MHAI3$MX$HA" DA="phs*Har[%-1]$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="MHAI1$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="MIN_ITHD" desc="电流总谐波畸变率最小" type="6" DO="MHAI3$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="G_ITHD" desc="电流总谐波畸变率95" type="6" DO="MHAI4$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
</Sequence>
<!--电流I部分(T相)-->
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
<Value name="G_INSEQ" desc="负序电流95值" type="6" DO="MSQI4$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="MSQI1$MX$SeqA" DA="c2$cVal$mag$f" />
<Value name="MIN_INSEQ" desc="负序电流最小值" type="6" DO="MSQI3$MX$SeqA" DA="c2$cVal$mag$f" />
<Value name="G_I_UNBAN" desc="负序电流不平衡95值" type="6" DO="MSQI4$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="MSQI1$MX$ImbNgA" DA="mag$f" />
<Value name="MIN_I_UNBAN" desc="负序电流不平衡最小值" type="6" DO="MSQI3$MX$ImbNgA" DA="mag$f" />
<Value name="G_IZSEQ" desc="零序电流95值" type="6" DO="MSQI4$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="MSQI1$MX$SeqA" DA="c3$cVal$mag$f" />
<Value name="MIN_IZSEQ" desc="零序电流最小值" type="6" DO="MSQI3$MX$SeqA" DA="c3$cVal$mag$f" />
<Value name="G_VZSEQ_UNBAN" desc="零序电流不平衡95值" type="6" DO="MSQI4$MX$ImbZroA" DA="mag$f" />
<Value name="VZSEQ_UNBAN" desc="零序电流不平衡平均值" type="6" DO="MSQI2$MX$ImbZroA" DA="mag$f" />
<Value name="MAX_IZSEQ_UNBAN" desc="零序电流不平衡最大值" type="6" DO="MSQI1$MX$ImbZroA" DA="mag$f" />
<Value name="MIN_IZSEQ_UNBAN" desc="零序电流不平衡最小值" type="6" DO="MSQI3$MX$ImbZroA" DA="mag$f" />
<Value name="G_IPSEQ" desc="正序电流95值" type="6" DO="MSQI4$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="MSQI1$MX$SeqA" DA="c1$cVal$mag$f" />
<Value name="MIN_IPSEQ" desc="正序电流最小值" type="6" DO="MSQI3$MX$SeqA" DA="c1$cVal$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_PF" desc="功率因数95值" type="6" DO="MMXU4$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="MMXU1$MX$PF" DA="phs*$cVal$mag$f" />
<Value name="MIN_PF" desc="功率因数最小值" type="6" DO="MMXU3$MX$PF" DA="phs*$cVal$mag$f" />
<Value name="G_DF" desc="位移功率因数95值" type="6" DO="MMXU4$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="MMXU1$MX$DF" DA="phs*$cVal$mag$f" />
<Value name="MIN_DF" desc="位移功率因数最小值" type="6" DO="MMXU3$MX$DF" DA="phs*$cVal$mag$f" />
<Value name="G_P_FUND" desc="基波有功功率95值" type="6" DO="MHAI4$MX$HW" DA="phs*Har[0]$mag$f" />
<Value name="P_FUND" desc="基波有功功率平均值" type="6" DO="MHAI2$MX$HW" DA="phs*Har[0]$mag$f" />
<Value name="MAX_P_FUND" desc="基波有功功率最大值" type="6" DO="MHAI1$MX$HW" DA="phs*Har[0]$mag$f" />
<Value name="MIN_P_FUND" desc="基波有功功率最小值" type="6" DO="MHAI3$MX$HW" DA="phs*Har[0]$mag$f" />
<Value name="G_S" desc="视在功率95值" type="6" DO="MMXU4$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="MMXU1$MX$VA" DA="phs*$cVal$mag$f" />
<Value name="MIN_S" desc="视在功率最小值" type="6" DO="MMXU3$MX$VA" DA="phs*$cVal$mag$f" />
<Value name="G_Q" desc="无功功率95值" type="6" DO="MMXU4$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="MMXU1$MX$VAr" DA="phs*$cVal$mag$f" />
<Value name="MIN_Q" desc="无功功率最小值" type="6" DO="MMXU3$MX$VAr" DA="phs*$cVal$mag$f" />
<Value name="G_P%1,50%" desc="谐波有功功率(2-50)95值" type="6" DO="MHAI4$MX$HW" DA="phs*Har[%-1]$mag$f" />
<Value name="P%1,50%" desc="谐波有功功率(2-50)平均值" type="6" DO="MHAI2$MX$HW" DA="phs*Har[%-1]$mag$f" />
<Value name="MAX_P%1,50%" desc="谐波有功功率(2-50)最大值" type="6" DO="MHAI1$MX$HW" DA="phs*Har[%-1]$mag$f" />
<Value name="MIN_P%1,50%" desc="谐波有功功率(2-50)最小值" type="6" DO="MHAI3$MX$HW" DA="phs*Har[%-1]$mag$f" />
<Value name="G_Q%1,50%" desc="谐波无功功率(2-50)95值" type="6" DO="MHAI4$MX$HVAr" DA="phs*Har[%-1]$mag$f" />
<Value name="Q%1,50%" desc="谐波无功功率(2-50)平均值" type="6" DO="MHAI2$MX$HVAr" DA="phs*Har[%-1]$mag$f" />
<Value name="MAX_Q%1,50%" desc="谐波无功功率(2-50)最大值" type="6" DO="MHAI1$MX$HVAr" DA="phs*Har[%-1]$mag$f" />
<Value name="MIN_Q%1,50%" desc="谐波无功功率(2-50)最小值" type="6" DO="MHAI3$MX$HVAr" DA="phs*Har[%-1]$mag$f" />
<Value name="G_S%1,50%" desc="谐波视在功率(2-50)95值" type="6" DO="MHAI4$MX$HVA" DA="phs*Har[%-1]$mag$f" />
<Value name="S%1,50%" desc="谐波视在功率(2-50)平均值" type="6" DO="MHAI2$MX$HVA" DA="phs*Har[%-1]$mag$f" />
<Value name="MAX_S%1,50%" desc="谐波视在功率(2-50)最大值" type="6" DO="MHAI1$MX$HVA" DA="phs*Har[%-1]$mag$f" />
<Value name="MIN_S%1,50%" desc="谐波视在功率(2-50)最小值" type="6" DO="MHAI3$MX$HVA" DA="phs*Har[%-1]$mag$f" />
<Value name="G_P" desc="有功功率95值" type="6" DO="MMXU4$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="MMXU1$MX$W" DA="phs*$cVal$mag$f" />
<Value name="MIN_P" desc="有功功率最小值" type="6" DO="MMXU3$MX$W" DA="phs*$cVal$mag$f" />
</Sequence>
<!--功率PQ部分(T相)-->
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
<Value name="G_PF" desc="功率因数95值" type="6" DO="MMXU4$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="MMXU1$MX$TotPF" DA="mag$f" />
<Value name="MIN_PF" desc="功率因数最小值" type="6" DO="MMXU3$MX$TotPF" DA="mag$f" />
<Value name="G_DF" desc="位移功率因数95值" type="6" DO="MMXU4$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="MMXU1$MX$TotDF" DA="mag$f" />
<Value name="MIN_DF" desc="位移功率因数最小值" type="6" DO="MMXU3$MX$TotDF" DA="mag$f" />
<Value name="G_S" desc="视在功率95值" type="6" DO="MMXU4$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="MMXU1$MX$TotVA" DA="mag$f" />
<Value name="MIN_S" desc="视在功率最小值" type="6" DO="MMXU3$MX$TotVA" DA="mag$f" />
<Value name="G_Q" desc="无功功率95值" type="6" DO="MMXU4$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="MMXU1$MX$TotVAr" DA="mag$f" />
<Value name="MIN_Q" desc="无功功率最小值" type="6" DO="MMXU3$MX$TotVAr" DA="mag$f" />
<Value name="G_P" desc="有功功率95值" type="6" DO="MMXU4$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="MMXU1$MX$TotW" DA="mag$f" />
<Value name="MIN_P" desc="有功功率最小值" type="6" DO="MMXU3$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="MMXU0$MX$PhV" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="DELTA_V" desc="电压偏差" type="6" DO="MMXU0$MX$PhVDev" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="VTHD" desc="电压总谐波畸变率" type="6" DO="MHAI0$MX$ThdPhV" DA="phs*$cVal$mag$f" Coefficient="1" />
<!--icd101/102模型-->
<Value name="VFUND_ANGLE" desc="基波电压相角" type="6" DO="MHAI0$MX$HFundPhV" DA="phs*$cVal$ang$f" Coefficient="1" />
<Value name="VRMS_LVR" desc="线电压有效值" type="6" DO="MMXU0$MX$PPV" DA="l_phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" />
<!--icd100模型-->
<!--<Value name="V_ANGLE" desc="基波电压相角" type="6" DO="MMXU0$MX$PhV||MMXU0$MX$PPV" DA="phs*$cVal$ang$f||phs##$cVal$ang$f" Coefficient="1" /-->
<!--icd101/102模型-->
<Value name="V1" desc="基波电压有效值" type="6" DO="MHAI0$MX$HFundPhV" DA="phs*$cVal$mag$f" Coefficient="1" />
<!--icd100模型-->
<!--Value name="V1" desc="基波电压有效值" type="6" DO="MHAI2$MX$HFundPhV||MHAI2$MX$HFundPPV" DA="phs*$cVal$mag$f||phs##$cVal$mag$f" Coefficient="1" /-->
<Value name="V%2,50%" desc="2-50次谐波电压含有率" type="6" DO="MHAI0$MX$HRPhV" DA="phs*Har[%-2]$mag$f" Coefficient="1" Offset="0" />
<Value name="SV_%0,49%" desc="1-50次间谐波电压含有率" type="6" DO="MHAI5$MX$HRPhV" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
<Value name="VA%2,50%" desc="谐波电压相角(2-50)" type="6" DO="MHAI5$MX$HRPhV" 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*220LimitDown 数据合理下限 如果包含*%U字符表示需要乘以电压等级电压-->
<Value name="DELTA_V" desc="电压偏差" type="6" DO="MMXU0$MX$PPVDev" DA="phs*$cVal$mag$f" Coefficient="1"/>
<Value name="VRMS_LVR" desc="电压有效值" type="6" DO="MMXU0$MX$PPV" DA="phs*$cVal$mag$f" BaseFlag="1" LimitUp="0*%U" LimitDown="150*%U" Coefficient="1" />
<Value name="VTHD" desc="电压总谐波畸变率" type="6" DO="MHAI0$MX$ThdPPV" DA="phs*$cVal$mag$f" Coefficient="1"/>
<Value name="VFUND_ANGLE" desc="基波电压相角" type="6" DO="MHAI0$MX$HFundPPV" DA="phs*$cVal$ang$f" Coefficient="1" />
<Value name="V1" desc="基波电压有效值" type="6" DO="MHAI0$MX$HFundPPV" DA="phs*$cVal$mag$f" Coefficient="1"/>
<Value name="SV_%0,49%" desc="间谐波电压含有率(f25-2475)" type="6" DO="MHAI0$MX$HRPPV" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
<Value name="V%2,50%" desc="谐波电压含有率(2-50)" type="6" DO="MHAI5$MX$HRPPV" DA="phs*Har[%-2]$mag$f" Coefficient="1" Offset="0" />
<Value name="VA%2,50%" desc="谐波电压相角(2-50)" type="6" DO="MHAI5$MX$HRPPV" 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="MSQI0$MX$SeqV" DA="c2$cVal$mag$f" Coefficient="1" />
<Value name="V_UNBAN" desc="负序电压不平衡" type="6" DO="MSQI0$MX$ImbNgV" DA="mag$f" Coefficient="1" />
<Value name="VZSEQ" desc="零序电压" type="6" DO="MSQI0$MX$SeqV" DA="c3$cVal$mag$f" Coefficient="1" />
<Value name="VZSEQ_UNBAN" desc="零序电压不平衡" type="6" DO="MSQI0$MX$ImbZroV" DA="mag$f" Coefficient="1" />
<Value name="FREQ" desc="频率" type="6" DO="MMXU0$MX$Hz" DA="mag$f" Coefficient="1" />
<Value name="DELTA_FREQ" desc="频率偏差" type="6" DO="MMXU0$MX$HzDev" DA="mag$f" Coefficient="1" />
<Value name="VPSEQ" desc="正序电压" type="6" DO="MSQI0$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="MMXU0$MX$A" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="I1" desc="基波电流有效值" type="6" DO="MHAI0$MX$HA" DA="phs*Har[0]$mag$f" Coefficient="1" />
<Value name="ITHD" desc="电流总谐波畸变率" type="6" DO="MHAI0$MX$ThdA" DA="phs*$cVal$mag$f" Coefficient="1" />
<!--icd101/102模型-->
<Value name="I_ANGLE" desc="基波电流相角" type="6" DO="MHAI0$MX$HA" DA="phs*Har[0]$ang$f" Coefficient="1" />
<!--icd100模型-->
<!--Value name="I_ANGLE" desc="基波电流相角" type="6" DO="MMXU0$MX$A" DA="phs*$cVal$ang$f" Coefficient="1" /-->
<Value name="I%2,50%" desc="2-50次谐波电流幅值" type="6" DO="MHAI0$MX$HA" DA="phs*Har[%-1]$mag$f" Coefficient="1" Offset="0" />
<Value name="SI_%0,49%" desc="1-50次间谐波电流含有率" type="6" DO="MHAI5$MX$HA" DA="phs*Har[%-0]$mag$f" Coefficient="1" Offset="0" />
<!--Value name="I%1,49%" desc="1-50次谐波电流含有率" type="6" DO="MHAI0$MX$HA" DA="phs*Har[%-2]$mag$f" Coefficient="1" Offset="1" /-->
</Sequence>
<!--电流I部分(T相)-->
<Sequence name="SEQ" value="8" desc="相别(T相)" type="5">
<Value name="INSEQ" desc="负序电流" type="6" DO="MSQI0$MX$SeqA" DA="c2$cVal$mag$f" Coefficient="1" />
<Value name="I_UNBAN" desc="负序电流不平衡" type="6" DO="MSQI0$MX$ImbNgA" DA="mag$f" Coefficient="1" />
<Value name="IZSEQ" desc="零序电流" type="6" DO="MSQI0$MX$SeqA" DA="c3$cVal$mag$f" Coefficient="1" />
<Value name="IZSEQ_UNBAN" desc="零序电流不平衡" type="6" DO="MSQI0$MX$ImbZroA" DA="mag$f" Coefficient="1" />
<Value name="IPSEQ" desc="正序电流" type="6" DO="MSQI0$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="MMXU0$MX$PF" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="DF" desc="基波功率因数" type="6" DO="MMXU0$MX$DF" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="P_FUND" desc="基波有功功率" type="6" DO="MHAI0$MX$HW" DA="phs*Har[0]$mag$f" Coefficient="1" />
<Value name="S" desc="视在功率" type="6" DO="MMXU0$MX$VA" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="Q" desc="无功功率" type="6" DO="MMXU0$MX$VAr" DA="phs*$cVal$mag$f" Coefficient="1" />
<Value name="P" desc="有功功率" type="6" DO="MMXU0$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="MMXU0$MX$TotPF" DA="mag$f" Coefficient="1" />
<Value name="DF" desc="基波功率因数" type="6" DO="MMXU0$MX$TotDF" DA="mag$f" Coefficient="1" />
<Value name="S" desc="视在功率" type="6" DO="MMXU0$MX$TotVA" DA="mag$f" Coefficient="1" />
<Value name="Q" desc="无功功率" type="6" DO="MMXU0$MX$TotVAr" DA="mag$f" Coefficient="1" />
<Value name="P" desc="有功功率" type="6" DO="MMXU0$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||MFLK0$MX$PPPst" DA="phs*$cVal$mag$f||phs##$cVal$mag$f" Coefficient="1" PltFlag="False" />
<Value name="LF" desc="长时闪变" type="6" DO="MFLK0$MX$PhPlt||MFLK0$MX$PPPlt" DA="phs*$cVal$mag$f||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" />
<!--Value name="STARTTIME" desc="开始时间" type="6" DO="" DA="" Coefficient="1" />
<Value name="ENDTIME" desc="结束时间" type="6" DO="" DA="" Coefficient="1" />
<Value name="DISKIND" desc="暂降类型" type="6" DO="" DA="" Coefficient="1" />
<Value name="WAVEFILE" desc="波形文件名称" type="6" DO="" DA="" Coefficient="1" /-->
</Sequence>
</Item>
</Monitor>
</DataType>
</Topic>
<Topic name="RTDATASOE" desc="实时SOE事件">
<DataType name="DATA_TYPE" value="01" desc="稳态SOE事件" type="0" >
<SOE desc="频率偏差越上限" type="9" DO="GGIO0$ST$Alm1" DA="stVal" TriggerFlag="Alm1" />
<SOE desc="频率偏差越下限" type="9" DO="GGIO0$ST$Alm2" DA="stVal" TriggerFlag="Alm2" />
<SOE desc="电压偏差越上限" type="9" DO="GGIO0$ST$Alm3" DA="stVal" TriggerFlag="Alm3" />
<SOE desc="电压偏差越下限" type="9" DO="GGIO0$ST$Alm4" DA="stVal" TriggerFlag="Alm4" />
<SOE desc="短时闪变越限" type="9" DO="GGIO0$ST$Alm5" DA="stVal" TriggerFlag="Alm5" />
<SOE desc="长时闪变越限" type="9" DO="GGIO0$ST$Alm6" DA="stVal" TriggerFlag="Alm6" />
<SOE desc="电压波动越限" type="9" DO="GGIO0$ST$Alm7" DA="stVal" TriggerFlag="Alm7" />
<SOE desc="电压负序不平衡度越限" type="9" DO="GGIO0$ST$Alm8" DA="stVal" TriggerFlag="Alm8" />
<SOE desc="电压总谐波畸变率越限" type="9" DO="GGIO0$ST$Alm9" DA="stVal" TriggerFlag="Alm9" />
<SOE desc="2次谐波电压越限" type="9" DO="GGIO0$ST$Alm10" DA="stVal" TriggerFlag="Alm10" />
<SOE desc="3次谐波电压越限" type="9" DO="GGIO0$ST$Alm11" DA="stVal" TriggerFlag="Alm11" />
<SOE desc="4次谐波电压越限" type="9" DO="GGIO0$ST$Alm12" DA="stVal" TriggerFlag="Alm12" />
<SOE desc="5次谐波电压越限" type="9" DO="GGIO0$ST$Alm13" DA="stVal" TriggerFlag="Alm13" />
<SOE desc="6次谐波电压越限" type="9" DO="GGIO0$ST$Alm14" DA="stVal" TriggerFlag="Alm14" />
<SOE desc="7次谐波电压越限" type="9" DO="GGIO0$ST$Alm15" DA="stVal" TriggerFlag="Alm15" />
<SOE desc="8次谐波电压越限" type="9" DO="GGIO0$ST$Alm16" DA="stVal" TriggerFlag="Alm16" />
<SOE desc="9次谐波电压越限" type="9" DO="GGIO0$ST$Alm17" DA="stVal" TriggerFlag="Alm17" />
<SOE desc="10次谐波电压越限" type="9" DO="GGIO0$ST$Alm18" DA="stVal" TriggerFlag="Alm18" />
<SOE desc="11次谐波电压越限" type="9" DO="GGIO0$ST$Alm19" DA="stVal" TriggerFlag="Alm19" />
<SOE desc="12次谐波电压越限" type="9" DO="GGIO0$ST$Alm20" DA="stVal" TriggerFlag="Alm20" />
<SOE desc="13次谐波电压越限" type="9" DO="GGIO0$ST$Alm21" DA="stVal" TriggerFlag="Alm21" />
<SOE desc="14次谐波电压越限" type="9" DO="GGIO0$ST$Alm22" DA="stVal" TriggerFlag="Alm22" />
<SOE desc="15次谐波电压越限" type="9" DO="GGIO0$ST$Alm23" DA="stVal" TriggerFlag="Alm23" />
<SOE desc="16次谐波电压越限" type="9" DO="GGIO0$ST$Alm24" DA="stVal" TriggerFlag="Alm24" />
<SOE desc="17次谐波电压越限" type="9" DO="GGIO0$ST$Alm25" DA="stVal" TriggerFlag="Alm25" />
<SOE desc="18次谐波电压越限" type="9" DO="GGIO0$ST$Alm26" DA="stVal" TriggerFlag="Alm26" />
<SOE desc="19次谐波电压越限" type="9" DO="GGIO0$ST$Alm27" DA="stVal" TriggerFlag="Alm27" />
<SOE desc="20次谐波电压越限" type="9" DO="GGIO0$ST$Alm28" DA="stVal" TriggerFlag="Alm28" />
<SOE desc="21次谐波电压越限" type="9" DO="GGIO0$ST$Alm29" DA="stVal" TriggerFlag="Alm29" />
<SOE desc="22次谐波电压越限" type="9" DO="GGIO0$ST$Alm30" DA="stVal" TriggerFlag="Alm30" />
<SOE desc="23次谐波电压越限" type="9" DO="GGIO0$ST$Alm31" DA="stVal" TriggerFlag="Alm31" />
<SOE desc="24次谐波电压越限" type="9" DO="GGIO0$ST$Alm32" DA="stVal" TriggerFlag="Alm32" />
<SOE desc="25次谐波电压越限" type="9" DO="GGIO0$ST$Alm33" DA="stVal" TriggerFlag="Alm33" />
<SOE desc="26次谐波电压越限" type="9" DO="GGIO0$ST$Alm34" DA="stVal" TriggerFlag="Alm34" />
<SOE desc="27次谐波电压越限" type="9" DO="GGIO0$ST$Alm35" DA="stVal" TriggerFlag="Alm35" />
<SOE desc="28次谐波电压越限" type="9" DO="GGIO0$ST$Alm36" DA="stVal" TriggerFlag="Alm36" />
<SOE desc="29次谐波电压越限" type="9" DO="GGIO0$ST$Alm37" DA="stVal" TriggerFlag="Alm37" />
<SOE desc="30次谐波电压越限" type="9" DO="GGIO0$ST$Alm38" DA="stVal" TriggerFlag="Alm38" />
<SOE desc="31次谐波电压越限" type="9" DO="GGIO0$ST$Alm39" DA="stVal" TriggerFlag="Alm39" />
<SOE desc="32次谐波电压越限" type="9" DO="GGIO0$ST$Alm40" DA="stVal" TriggerFlag="Alm40" />
<SOE desc="33次谐波电压越限" type="9" DO="GGIO0$ST$Alm41" DA="stVal" TriggerFlag="Alm41" />
<SOE desc="34次谐波电压越限" type="9" DO="GGIO0$ST$Alm42" DA="stVal" TriggerFlag="Alm42" />
<SOE desc="35次谐波电压越限" type="9" DO="GGIO0$ST$Alm43" DA="stVal" TriggerFlag="Alm43" />
<SOE desc="36次谐波电压越限" type="9" DO="GGIO0$ST$Alm44" DA="stVal" TriggerFlag="Alm44" />
<SOE desc="37次谐波电压越限" type="9" DO="GGIO0$ST$Alm45" DA="stVal" TriggerFlag="Alm45" />
<SOE desc="38次谐波电压越限" type="9" DO="GGIO0$ST$Alm46" DA="stVal" TriggerFlag="Alm46" />
<SOE desc="39次谐波电压越限" type="9" DO="GGIO0$ST$Alm47" DA="stVal" TriggerFlag="Alm47" />
<SOE desc="40次谐波电压越限" type="9" DO="GGIO0$ST$Alm48" DA="stVal" TriggerFlag="Alm48" />
<SOE desc="41次谐波电压越限" type="9" DO="GGIO0$ST$Alm49" DA="stVal" TriggerFlag="Alm49" />
<SOE desc="42次谐波电压越限" type="9" DO="GGIO0$ST$Alm50" DA="stVal" TriggerFlag="Alm50" />
<SOE desc="43次谐波电压越限" type="9" DO="GGIO0$ST$Alm51" DA="stVal" TriggerFlag="Alm51" />
<SOE desc="44次谐波电压越限" type="9" DO="GGIO0$ST$Alm52" DA="stVal" TriggerFlag="Alm52" />
<SOE desc="45次谐波电压越限" type="9" DO="GGIO0$ST$Alm53" DA="stVal" TriggerFlag="Alm53" />
<SOE desc="46次谐波电压越限" type="9" DO="GGIO0$ST$Alm54" DA="stVal" TriggerFlag="Alm54" />
<SOE desc="47次谐波电压越限" type="9" DO="GGIO0$ST$Alm55" DA="stVal" TriggerFlag="Alm55" />
<SOE desc="48次谐波电压越限" type="9" DO="GGIO0$ST$Alm56" DA="stVal" TriggerFlag="Alm56" />
<SOE desc="49次谐波电压越限" type="9" DO="GGIO0$ST$Alm57" DA="stVal" TriggerFlag="Alm57" />
<SOE desc="50次谐波电压越限" type="9" DO="GGIO0$ST$Alm58" DA="stVal" TriggerFlag="Alm58" />
<SOE desc="2次谐波电流越限" type="9" DO="GGIO0$ST$Alm59" DA="stVal" TriggerFlag="Alm59" />
<SOE desc="3次谐波电流越限" type="9" DO="GGIO0$ST$Alm60" DA="stVal" TriggerFlag="Alm60" />
<SOE desc="4次谐波电流越限" type="9" DO="GGIO0$ST$Alm61" DA="stVal" TriggerFlag="Alm61" />
<SOE desc="5次谐波电流越限" type="9" DO="GGIO0$ST$Alm62" DA="stVal" TriggerFlag="Alm62" />
<SOE desc="6次谐波电流越限" type="9" DO="GGIO0$ST$Alm63" DA="stVal" TriggerFlag="Alm63" />
<SOE desc="7次谐波电流越限" type="9" DO="GGIO0$ST$Alm64" DA="stVal" TriggerFlag="Alm64" />
<SOE desc="8次谐波电流越限" type="9" DO="GGIO0$ST$Alm65" DA="stVal" TriggerFlag="Alm65" />
<SOE desc="9次谐波电流越限" type="9" DO="GGIO0$ST$Alm66" DA="stVal" TriggerFlag="Alm66" />
<SOE desc="10次谐波电流越限" type="9" DO="GGIO0$ST$Alm67" DA="stVal" TriggerFlag="Alm67" />
<SOE desc="11次谐波电流越限" type="9" DO="GGIO0$ST$Alm68" DA="stVal" TriggerFlag="Alm68" />
<SOE desc="12次谐波电流越限" type="9" DO="GGIO0$ST$Alm69" DA="stVal" TriggerFlag="Alm69" />
<SOE desc="13次谐波电流越限" type="9" DO="GGIO0$ST$Alm70" DA="stVal" TriggerFlag="Alm70" />
<SOE desc="14次谐波电流越限" type="9" DO="GGIO0$ST$Alm71" DA="stVal" TriggerFlag="Alm71" />
<SOE desc="15次谐波电流越限" type="9" DO="GGIO0$ST$Alm72" DA="stVal" TriggerFlag="Alm72" />
<SOE desc="16次谐波电流越限" type="9" DO="GGIO0$ST$Alm73" DA="stVal" TriggerFlag="Alm73" />
<SOE desc="17次谐波电流越限" type="9" DO="GGIO0$ST$Alm74" DA="stVal" TriggerFlag="Alm74" />
<SOE desc="18次谐波电流越限" type="9" DO="GGIO0$ST$Alm75" DA="stVal" TriggerFlag="Alm75" />
<SOE desc="19次谐波电流越限" type="9" DO="GGIO0$ST$Alm76" DA="stVal" TriggerFlag="Alm76" />
<SOE desc="20次谐波电流越限" type="9" DO="GGIO0$ST$Alm77" DA="stVal" TriggerFlag="Alm77" />
<SOE desc="21次谐波电流越限" type="9" DO="GGIO0$ST$Alm78" DA="stVal" TriggerFlag="Alm78" />
<SOE desc="22次谐波电流越限" type="9" DO="GGIO0$ST$Alm79" DA="stVal" TriggerFlag="Alm79" />
<SOE desc="23次谐波电流越限" type="9" DO="GGIO0$ST$Alm80" DA="stVal" TriggerFlag="Alm80" />
<SOE desc="24次谐波电流越限" type="9" DO="GGIO0$ST$Alm81" DA="stVal" TriggerFlag="Alm81" />
<SOE desc="25次谐波电流越限" type="9" DO="GGIO0$ST$Alm82" DA="stVal" TriggerFlag="Alm82" />
<SOE desc="26次谐波电流越限" type="9" DO="GGIO0$ST$Alm83" DA="stVal" TriggerFlag="Alm83" />
<SOE desc="27次谐波电流越限" type="9" DO="GGIO0$ST$Alm84" DA="stVal" TriggerFlag="Alm84" />
<SOE desc="28次谐波电流越限" type="9" DO="GGIO0$ST$Alm85" DA="stVal" TriggerFlag="Alm85" />
<SOE desc="29次谐波电流越限" type="9" DO="GGIO0$ST$Alm86" DA="stVal" TriggerFlag="Alm86" />
<SOE desc="30次谐波电流越限" type="9" DO="GGIO0$ST$Alm87" DA="stVal" TriggerFlag="Alm87" />
<SOE desc="31次谐波电流越限" type="9" DO="GGIO0$ST$Alm88" DA="stVal" TriggerFlag="Alm88" />
<SOE desc="32次谐波电流越限" type="9" DO="GGIO0$ST$Alm89" DA="stVal" TriggerFlag="Alm89" />
<SOE desc="33次谐波电流越限" type="9" DO="GGIO0$ST$Alm90" DA="stVal" TriggerFlag="Alm90" />
<SOE desc="34次谐波电流越限" type="9" DO="GGIO0$ST$Alm91" DA="stVal" TriggerFlag="Alm91" />
<SOE desc="35次谐波电流越限" type="9" DO="GGIO0$ST$Alm92" DA="stVal" TriggerFlag="Alm92" />
<SOE desc="36次谐波电流越限" type="9" DO="GGIO0$ST$Alm93" DA="stVal" TriggerFlag="Alm93" />
<SOE desc="37次谐波电流越限" type="9" DO="GGIO0$ST$Alm94" DA="stVal" TriggerFlag="Alm94" />
<SOE desc="38次谐波电流越限" type="9" DO="GGIO0$ST$Alm95" DA="stVal" TriggerFlag="Alm95" />
<SOE desc="39次谐波电流越限" type="9" DO="GGIO0$ST$Alm96" DA="stVal" TriggerFlag="Alm96" />
<SOE desc="40次谐波电流越限" type="9" DO="GGIO0$ST$Alm97" DA="stVal" TriggerFlag="Alm97" />
<SOE desc="41次谐波电流越限" type="9" DO="GGIO0$ST$Alm98" DA="stVal" TriggerFlag="Alm98" />
<SOE desc="42次谐波电流越限" type="9" DO="GGIO0$ST$Alm99" DA="stVal" TriggerFlag="Alm99" />
<SOE desc="43次谐波电流越限" type="9" DO="GGIO0$ST$Alm100" DA="stVal" TriggerFlag="Alm100" />
<SOE desc="44次谐波电流越限" type="9" DO="GGIO0$ST$Alm101" DA="stVal" TriggerFlag="Alm101" />
<SOE desc="45次谐波电流越限" type="9" DO="GGIO0$ST$Alm102" DA="stVal" TriggerFlag="Alm102" />
<SOE desc="46次谐波电流越限" type="9" DO="GGIO0$ST$Alm103" DA="stVal" TriggerFlag="Alm103" />
<SOE desc="47次谐波电流越限" type="9" DO="GGIO0$ST$Alm104" DA="stVal" TriggerFlag="Alm104" />
<SOE desc="48次谐波电流越限" type="9" DO="GGIO0$ST$Alm105" DA="stVal" TriggerFlag="Alm105" />
<SOE desc="49次谐波电流越限" type="9" DO="GGIO0$ST$Alm106" DA="stVal" TriggerFlag="Alm106" />
<SOE desc="50次谐波电流越限" type="9" DO="GGIO0$ST$Alm107" DA="stVal" TriggerFlag="Alm107" />
<SOE desc="电压越上限(自定义触发)" type="9" DO="GGIO0$ST$Alm108" DA="stVal" TriggerFlag="Alm108" />
<SOE desc="电压越下限(自定义触发)" type="9" DO="GGIO0$ST$Alm109" DA="stVal" TriggerFlag="Alm109" />
<SOE desc="电流越上限(自定义触发)" type="9" DO="GGIO0$ST$Alm110" DA="stVal" TriggerFlag="Alm110" />
<SOE desc="电流越下限(自定义触发)" type="9" DO="GGIO0$ST$Alm111" DA="stVal" TriggerFlag="Alm111" />
<SOE desc="电压变化量越限(自定义触发)" type="9" DO="GGIO0$ST$Alm112" DA="stVal" TriggerFlag="Alm112" />
<SOE desc="电流变化量越限(自定义触发)" type="9" DO="GGIO0$ST$Alm113" DA="stVal" TriggerFlag="Alm113" />
</DataType>
<DataType name="DATA_TYPE" value="02" desc="暂态SOE事件" type="0" >
</DataType>
<DataType name="DATA_TYPE" value="03" desc="状态SOE事件" type="0" >
<SOE desc="终端工作电源上电" type="9" DO="LPHD0$ST$PwrUp" DA="stVal" TriggerFlag="PwrUp" />
<SOE desc="终端工作电源掉电" type="9" DO="GGIO0$ST$PwrDn" DA="stVal" TriggerFlag="PwrDn" />
</DataType>
</Topic>
<Topic name="SOEDATA" desc="告警SOE">
<SOE name="ThdVVal" desc="电压总畸变率越限告警" type="9" DO="GGIO0$ST$Alm9" DA="stVal" />
<SOE name="ThdAVal" desc="电流总畸变率越限告警" type="9" DO="" DA="" />
<SOE name="HToddVVal" desc="奇次谐波电压含有率越限告警" type="9" DO="" DA="" />
<SOE name="HTeddVVal" desc="偶次谐波电压含有率越限告警" type="9" DO="" DA="" />
<SOE name="H2AVal" desc="2次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm59" DA="stVal" />
<SOE name="H3AVal" desc="3次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm60" DA="stVal" />
<SOE name="H4AVal" desc="4次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm61" DA="stVal" />
<SOE name="H5AVal" desc="5次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm62" DA="stVal" />
<SOE name="H7AVal" desc="7次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm64" DA="stVal" />
<SOE name="H9AVal" desc="9次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm66" DA="stVal" />
<SOE name="H11AVal" desc="11次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm68" DA="stVal" />
<SOE name="H13AVal" desc="13次谐波电流越限告警" type="9" DO="GGIO0$ST$Alm70" DA="" />
<SOE name="ImbNgVFVal" desc="电压负序不平衡度越限告警" type="9" DO="GGIO0$ST$Alm8" DA="stVal" />
<SOE name="ImbNgAFVal" desc="电流负序不平衡度越限告警" type="9" DO="" DA="" />
<SOE name="OvHzStrVal" desc="频率高越限告警" type="9" DO="GGIO0$ST$Alm1" DA="stVal" />
<SOE name="UnHzStrVal" desc="频率低越限告警" type="9" DO="GGIO0$ST$Alm2" DA="" />
<SOE name="LRVInterrup" desc="长期电压中断告警" type="9" DO="" DA="" />
<SOE name="LRVSwell" desc="电压上偏差越限告警" type="9" DO="GGIO0$ST$Alm3" DA="stVal" />
<SOE name="LRVSag" desc="电压下偏差越限告警" type="9" DO="GGIO0$ST$Alm4" DA="stVal" />
<SOE name="PhPstVal" desc="短时闪变越限告警" type="9" DO="GGIO0$ST$Alm5" DA="stVal" />
<SOE name="PhPltVal" desc="长时闪变越限告警" type="9" DO="GGIO0$ST$Alm6" DA="stVal" />
<SOE name="PhyStateFault" desc="终端运行状态:故障" type="9" DO="" DA="" />
<SOE name="PhyStateRun" desc="终端运行状态:运行" type="9" DO="" DA="" />
<SOE name="PwrUp" desc="终端上电" type="9" DO="" DA="" />
<SOE name="PwrDn" desc="终端掉电" type="9" DO="" DA="" />
<SOE name="CommInterrupt" desc="终端通信中断" type="9" DO="" DA="" />
<SOE name="CommResume" desc="终端通信恢复" type="9" DO="" DA="" />
</Topic>
</JSConfigTemplate>

6
LFtid1056/etc/runtime.cf Normal file
View File

@@ -0,0 +1,6 @@
# 文件名runtime.cf
# 执行程序路径 ^ 可执行程序名 启动参数 ^ 重启特有参数 ^ 首次启动特有参数 ^ 程序首次启动前的延时秒数 ^ 重启是否忽略 ^ 首次启动是否忽略
/home/pq/zwproject/LFtid1056/bin/ ^ cloud-front-test -s 3_3^ ^ ^ 1 ^ ^
/home/pq/zwproject/LFtid1056/bin/ ^ cloud-front-test -s 2_3^ ^ ^ 1 ^ ^
/home/pq/zwproject/LFtid1056/bin/ ^ cloud-front-test -s 1_3^ ^ ^ 1 ^ ^
/home/pq/zwproject/LFtid1056/bin/ ^ fe_watchdog -m 8192 ^ ^ ^ 1 ^ IGNORE_RESTART ^

View File

@@ -153,7 +153,7 @@ void* client_manager_thread(void* arg) {
printf("Started client connections\n");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector<PointInfo> points1 = {
{"P001", "Main Voltage", "D001",1 ,1, 1, 1, 1,"0.38k",0},
{"P002", "Backup Voltage", "D001",2 ,1, 1, 1, 1,"0.38k",0}
@@ -165,16 +165,16 @@ void* client_manager_thread(void* arg) {
"D001", "Primary Device", "Model-X", "00-B7-8D-01-88-7f",
1, points1,true
}
};
};*/
// <20><><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
//std::vector<DeviceInfo> test_devices = generate_test_devices(100);
//lnk<6E><6B>̨<EFBFBD>˶<EFBFBD>ȡ<EFBFBD>
//std::vector<DeviceInfo> devices = GenerateDeviceInfoFromLedger(terminal_devlist);//lnk<6E><6B><EFBFBD><EFBFBD>
std::vector<DeviceInfo> devices = GenerateDeviceInfoFromLedger(terminal_devlist);//lnk<6E><6B><EFBFBD><EFBFBD>
//̨<>˴<EFBFBD>ӡ
//PrintDevices(devices);
PrintDevices(devices);
// <20><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
start_client_connect(devices);
@@ -302,7 +302,7 @@ int main(int argc ,char** argv) {//
std::cerr << "process param error,exit" << std::endl;
return 1;
}
//init_daemon();
init_daemon();
srand(time(NULL)); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ʼ<EFBFBD><CABC><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
@@ -319,10 +319,10 @@ int main(int argc ,char** argv) {//
cleanup_args(args);
}
/*while(!INITFLAG){
while(!INITFLAG){
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << "waiting cloudfront initialize ..." << std::endl;
}*/
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>߳<EFBFBD><DFB3><EFBFBD>
for (int i = 1; i < THREAD_CONNECTIONS; i++) {
@@ -387,7 +387,7 @@ int main(int argc ,char** argv) {//
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector<PointInfo> points2 = {
{"P101", "Generator Output", "D002",1 ,1, 1, 1, 1,"0.38k",0}
};
@@ -398,7 +398,7 @@ int main(int argc ,char** argv) {//
"D002", "Backup Device", "Model-Y", "00-B7-8D-A8-00-D6",
1, points2,true
}
};
};*/
// <20><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD>״̬
static int queue_monitor = 0;
@@ -407,9 +407,9 @@ int main(int argc ,char** argv) {//
printf("Message queue size: %zu\n", message_queue.size());
queue_monitor = 0;
for (const auto& device : devices) {
/*for (const auto& device : devices) {
//ClientManager::instance().add_device(device);
}
}*/
/*std::vector<DeviceInfo> test_devices = generate_test_devices(count);
count++;