初始化添加pqdif判断,新增pqdif进程

This commit is contained in:
lnk
2026-07-17 11:15:16 +08:00
parent 45d139e628
commit fe16beb188
9 changed files with 72 additions and 9 deletions

View File

@@ -156,6 +156,7 @@ public:
char dev_type[64];
char dev_key[255];
char dev_series[255];
char com_type[32];
char addr_str[64];
char port[64];
char timestamp[64];
@@ -859,7 +860,10 @@ void init_config() {
}
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//暂态录波
TEST_PORT = TEST_PORT + SOE_COMTRADE_BASE_NODE_ID + g_front_seg_index;
}
}
else if (g_node_id == PQDIF_DATA_BASE_NODE_ID) {
TEST_PORT = TEST_PORT + PQDIF_DATA_BASE_NODE_ID + g_front_seg_index;
}
}
@@ -3388,6 +3392,31 @@ void SendJsonAPI_web(const std::string& strUrl, const char* code, const std::str
}
// 打印 terminal_dev_map 中所有内容的函数
static bool is_cfg_pqdif_process()
{
return std::strstr(subdir, "cfg_pqdif_data") != NULL;
}
static bool is_pqdif_com_type(const char* com_type)
{
QString type = com_type ? QString::fromLocal8Bit(com_type).trimmed() : QString();
return type.compare("pqdif", Qt::CaseInsensitive) == 0;
}
static bool terminal_should_bind_to_current_process(const terminal_dev* dev)
{
if (dev == NULL)
return false;
if (is_pqdif_com_type(dev->com_type))
return is_cfg_pqdif_process();
if (is_cfg_pqdif_process())
return false;
return (atoi(dev->processNo) == g_front_seg_index || g_front_seg_index == 0);
}
void printTerminalDevMap(const QMap<QString, terminal_dev*>& terminal_dev_map) {
QMap<QString, terminal_dev*>::const_iterator it;
for (it = terminal_dev_map.constBegin(); it != terminal_dev_map.constEnd(); ++it) {
@@ -3406,6 +3435,7 @@ void printTerminalDevMap(const QMap<QString, terminal_dev*>& terminal_dev_map) {
<< ", Device Type:" << QString(dev->dev_type)
<< ", Device Key:" << QString(dev->dev_key)
<< ", Device Series:" << QString(dev->dev_series)
<< ", Device comType:" << QString(dev->com_type)
<< ", Device processNo:" << QString(dev->processNo)
<< ", Device maxProcessNum:" << QString(dev->maxProcessNum)
<< ", Address:" << QString(dev->addr_str)
@@ -4085,6 +4115,13 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
else strncpy(dev->dev_series, "N/A", sizeof(dev->dev_series) - 1);
dev->dev_series[sizeof(dev->dev_series) - 1] = '\0';
cJSON* comType = cJSON_GetObjectItem(item, "comType");
if (comType == NULL)
comType = cJSON_GetObjectItem(item, "com_type");
if (comType && comType->type == cJSON_String) strncpy(dev->com_type, comType->valuestring, sizeof(dev->com_type) - 1);
else strncpy(dev->com_type, "mms", sizeof(dev->com_type) - 1);
dev->com_type[sizeof(dev->com_type) - 1] = '\0';
//lnk20250210台账进程号
cJSON* processNo = cJSON_GetObjectItem(item, "processNo"); // processNo转为字符串
if (processNo && processNo->type == cJSON_Number) snprintf(dev->processNo, sizeof(dev->processNo), "%d", processNo->valueint);
@@ -4190,19 +4227,20 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
//lnk20260312防止内存泄漏
bool inserted = false;
bool should_bind = terminal_should_bind_to_current_process(dev);
// 检查是否存在重复键
if (terminal_dev_map->contains(key)) {
std::cerr << "Duplicate terminal_code found: " << key.toStdString() << std::endl;
// 删除旧的 terminal_dev 对象以避免内存泄漏
delete terminal_dev_map->value(key);
if (should_bind) delete terminal_dev_map->value(key);
// 移除旧的键值对
terminal_dev_map->remove(key);
if (should_bind) terminal_dev_map->remove(key);
// 插入新的 terminal_dev 对象
if(atoi(dev->processNo) == g_front_seg_index || g_front_seg_index == 0){//lnk20250210匹配进程号
if(should_bind){//lnk20250210匹配进程号
//调试用
std::cout<< "process num match" << std::endl;
terminal_dev_map->insert(key, dev);
@@ -4210,7 +4248,7 @@ int terminal_ledger_web(QMap<QString, terminal_dev*>* terminal_dev_map,
}//后续修改为只有进程号匹配上index才录入当前进程
} else {
// 插入新的 terminal_dev 对象
if(atoi(dev->processNo) == g_front_seg_index || g_front_seg_index == 0){//lnk20250210匹配进程号
if(should_bind){//lnk20250210匹配进程号
//调试用
std::cout<< "process num match" << std::endl;
terminal_dev_map->insert(key, dev);
@@ -7290,6 +7328,8 @@ const char* get_front_msg_from_subdir() {
return "实时数据进程";
else if (std::strstr(subdir, "cfg_soe_comtrade") != NULL)
return "暂态和告警进程";
else if (std::strstr(subdir, "cfg_pqdif_data") != NULL)
return "pqdif处理进程";
else if (std::strstr(subdir, "cfg_recallhis_data") != NULL)
return "稳态补招进程";
else if (std::strstr(subdir, "cfg_stat_data") != NULL)
@@ -7511,4 +7551,4 @@ void read_latest_ledger_file(char** out) {
fclose(fp);
}
}
}
}

View File

@@ -229,6 +229,8 @@ std::string get_front_type_from_subdir() {
return "realTime";
else if (std::strstr(subdir, "cfg_soe_comtrade") != NULL)
return "comtrade";
else if (std::strstr(subdir, "cfg_pqdif_data") != NULL)
return "pqdif";
else if (std::strstr(subdir, "cfg_recallhis_data") != NULL)
return "recall";
else if (std::strstr(subdir, "cfg_stat_data") != NULL)
@@ -869,4 +871,4 @@ int main() {
return 0;
}
*/
*/

View File

@@ -26,6 +26,7 @@
#define THREE_SECS_DATA_BASE_NODE_ID 200 // 三秒数据、实时数据
#define SOE_COMTRADE_BASE_NODE_ID 300 // soe 录波
#define HIS_DATA_BASE_NODE_ID 400 //历史、补招
#define PQDIF_DATA_BASE_NODE_ID 800 // pqdif数据
class json_block_data //json拼接参数类
{

View File

@@ -271,6 +271,8 @@ void add_comm_log(char* log_str)
com_log_fn += "comm_300_comtrade.txt";
else if (g_node_id == HIS_DATA_BASE_NODE_ID)
com_log_fn += "comm_400_his.txt";
else if (g_node_id == PQDIF_DATA_BASE_NODE_ID)
com_log_fn += "comm_800_pqdif.txt";
else if (g_node_id == NEW_HIS_DATA_BASE_NODE_ID) {
com_log_fn.append(QString("comm_400_his_%1.txt").arg(g_front_seg_index));
}

View File

@@ -31,6 +31,7 @@
#define NEW_HIS_DATA_BASE_NODE_ID 500
#define RECALL_HIS_DATA_BASE_NODE_ID 600
#define RECALL_ALL_DATA_BASE_NODE_ID 700
#define PQDIF_DATA_BASE_NODE_ID 800
#define REPORT_TYPE_STAT 1
#define REPORT_TYPE_REAL 2

View File

@@ -81,6 +81,8 @@ void init_global_function_enable()
three_secs_enabled = 1;
}else if (strcmp(subdir,"cfg_soe_comtrade")==0) { //告警和录波和暂态
g_node_id = SOE_COMTRADE_BASE_NODE_ID;
}else if (strcmp(subdir,"cfg_pqdif_data")==0) {
g_node_id = PQDIF_DATA_BASE_NODE_ID;
}else if (strcmp(subdir,"cfg_his_data")==0) { //不使用
g_node_id = RECALL_ALL_DATA_BASE_NODE_ID;
g_node_id = HIS_DATA_BASE_NODE_ID;

View File

@@ -1634,12 +1634,18 @@ void CheckAllConnectedChannel()
if(DEBUGOPEN)printf("[FILEDIR] enter HandleFileDirReqForChannel");
HandleFileDirReqForChannel(chnl_usr);//文件目录请求
}
ChannelCheckIECReports(chnl_usr);//报告
if(g_node_id == PQDIF_DATA_BASE_NODE_ID){
//补招PQDIF文件
}
else{
ChannelCheckIECReports(chnl_usr);//报告
}
if ( (g_node_id == SOE_COMTRADE_BASE_NODE_ID) || (g_node_id == HIS_DATA_BASE_NODE_ID) || (g_node_id == NEW_HIS_DATA_BASE_NODE_ID) || (g_node_id == RECALL_HIS_DATA_BASE_NODE_ID) || (g_node_id == RECALL_ALL_DATA_BASE_NODE_ID))
ChannelCheckWaveFiles(chnl_usr);//录波文件
if(g_node_id == HIS_DATA_BASE_NODE_ID || g_node_id == NEW_HIS_DATA_BASE_NODE_ID || g_node_id == RECALL_HIS_DATA_BASE_NODE_ID || (g_node_id == RECALL_ALL_DATA_BASE_NODE_ID))
ChannelCheckIECLogs(chnl_usr);//补招文件
if ( (sGetMsTime() - chnl_usr->m_LastPosRespTime) > 15*1000 ) //wait 15 secs隔15秒获取一次响应两次没响应后关闭
{
char** varnames ;

View File

@@ -311,6 +311,9 @@ apr_status_t run_protocol()
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//暂态录波
ServerPort = SOCKET_PORT + SOE_COMTRADE_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == PQDIF_DATA_BASE_NODE_ID) {
ServerPort = SOCKET_PORT + PQDIF_DATA_BASE_NODE_ID + g_front_seg_index;
}
struct sockaddr_in server_sockaddr;
memset(&server_sockaddr, 0, sizeof(server_sockaddr));
@@ -351,6 +354,9 @@ apr_status_t run_protocol()
else if (g_node_id == SOE_COMTRADE_BASE_NODE_ID) {//暂态录波
HTTP_PORT = HTTP_PORT + SOE_COMTRADE_BASE_NODE_ID + g_front_seg_index;
}
else if (g_node_id == PQDIF_DATA_BASE_NODE_ID) {
HTTP_PORT = HTTP_PORT + PQDIF_DATA_BASE_NODE_ID + g_front_seg_index;
}
printf("try_start_web_http_thread \n");
try_start_web_http_thread();
printf("try_start_http_thread \n");

View File

@@ -329,6 +329,7 @@ handle_reset() {
sed -i '/cfg_recallhis_data/d' /FeProject/etc/runtime.cf
sed -i '/cfg_3s_data/d' /FeProject/etc/runtime.cf
sed -i '/cfg_soe_comtrade/d' /FeProject/etc/runtime.cf
sed -i '/cfg_pqdif_data/d' /FeProject/etc/runtime.cf
sed -i '/fe_watchdog/d' /FeProject/etc/runtime.cf
# 根据进程号添加对应进程配置
@@ -340,6 +341,7 @@ handle_reset() {
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_recallhis_data -s 1_1^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_3s_data^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_soe_comtrade^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_pqdif_data^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
else
#看门狗固定放在第一个防止stop时会把要杀死的进程重启
@@ -353,6 +355,7 @@ handle_reset() {
#以下部分没有多进程
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_3s_data^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_soe_comtrade^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
sed -i "2a\\$(printf '/FeProject/bin/ ^ pt61850netd_pqfe -d cfg_pqdif_data^ ^ ^ 1 ^ ^\n')" /FeProject/etc/runtime.cf
fi