modify for ledgerupdate

This commit is contained in:
lnk
2025-01-21 17:48:37 +08:00
parent 760dffe884
commit 5f5a3be6c9
4 changed files with 239 additions and 271 deletions

View File

@@ -57,6 +57,13 @@ extern "C" {
#ifdef __cplusplus
}
#endif
///////////////////////////////lnk20250118̨<38>˱<EFBFBD><CBB1><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4>أ<EFBFBD><D8A3><EFBFBD>̬<EFBFBD>ڴ<EFBFBD><DAB4>صķ<D8B5>ʽ<EFBFBD><CABD>ÿ<EFBFBD><C3BF><EFBFBD>ڴ<EFBFBD><DAB4>ط<EFBFBD>һ<EFBFBD><D2BB>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD>
// <20><><EFBFBD>ڴ洢<DAB4>ն<EFBFBD> ID <20>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
std::list<std::pair<std::string, apr_pool_t*> > pool_list;
///////////////////////////////////////////////////
//ZW 2023-10-10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нṹ
class RecallInfo
{
@@ -191,6 +198,9 @@ std::string LEDGER_UPDATE_FN = "LedgerUpdate.log";
const int MAX_CPUNO = 10;
//lnk20250121<32>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int IED_COUNT = 200; //Ĭ<><C4AC>200
//WW 2-23-08-20 add start
otl_connect db; //OTL<54><4C><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD> WW 2023-08-20
int g_iOTLFlag = 0; //Sql<71>Ƿ<EFBFBD>ִ<EFBFBD>б<EFBFBD>־(0-<2D><>ִ<EFBFBD>У<EFBFBD>1-ִ<><D6B4>) //lnk202410-22<32>滻web<65>ӿں<D3BF><DABA>ر<EFBFBD>
@@ -666,6 +676,7 @@ void init_config() {
std::cout << "Read MONITOR_STATUS:" << MONITOR_STATUS << std::endl;
ICD_FLAG = settings.value("Ledger/IcdFlag", 0).toString().toStdString();
std::cout << "Read ICD_FLAG:" << ICD_FLAG << std::endl;
IED_COUNT = settings.value("Ledger/IedCount", 0).toInt();
//////////////////////////////////////////////////<2F><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD>///////////////////
SOCKETENABLE = settings.value("Socket/SocketEnable", 0).toInt();
@@ -3849,7 +3860,8 @@ int parse_rpt_log_ini()
QStringList* log_temp = new QStringList();
rpt_cfg_strlists.insert(type, rpt_temp);
log_cfg_strlists.insert(type, log_temp);
parse_one_rpt_log_ini(ied_usr->dev_flag, rpt_cfg_strlists[type], log_cfg_strlists[type], ied_usr->dev_type);
//g_DevFlagû<67><C3BB>ʹ<EFBFBD><CAB9>
parse_one_rpt_log_ini(g_DevFlag, rpt_cfg_strlists[type], log_cfg_strlists[type], ied_usr->dev_type);
}
/*if (not_loaded[ied_usr->dev_flag]) {
@@ -12145,10 +12157,12 @@ int parse_device_cfg_web()
std::cout << "terminal_ledger_num:" << count_cfg << std::endl;
g_node->n_clients = count_cfg; //<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
g_node->clients = (ied_t**)apr_pcalloc(g_cfg_pool, count_cfg * sizeof(ied_t*));
g_node->n_clients = count_cfg;
//<2F><><EFBFBD><EFBFBD>ٵ<EFBFBD>ied<65>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lnk20250121
g_node->clients = (ied_t**)apr_pcalloc(g_cfg_pool, IED_COUNT * sizeof(ied_t*));//g_node->clients <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD><D5BC><EFBFBD><E6B4A2> count_cfg <20><> ied_t* <20><><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD><EBA3A8>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3A9><EFBFBD>ǣ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3A9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int k = 0; k < count_cfg; k++)
g_node->clients[k] = (ied_t*)apr_pcalloc(g_cfg_pool, sizeof(ied_t));
g_node->clients[k] = (ied_t*)apr_pcalloc(g_cfg_pool, sizeof(ied_t));//ÿ<><C3BF> g_node->clients[k] ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>ģ<EFBFBD>ÿ<EFBFBD><C3BF> ied_t <20><EFBFBD><E1B9B9>ռ<EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4><EFBFBD><E9A3A9><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><>ȡ<EFBFBD>ն<EFBFBD>̨<EFBFBD>˱<EFBFBD><CBB1>滻Ϊweb<65>ӿ<EFBFBD>
//////////////////////////////////////////////////////////////////////////////////////////////////
@@ -12192,21 +12206,24 @@ int parse_device_cfg_web()
//<2F><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>
ied = g_node->clients[count_real++];
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));//<2F>ն<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>initpool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
ied->usr_ext = ied_usr;
if (ied_usr == NULL)
return APR_ENOMEM;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>initpool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
if (ied_usr->LD_info == NULL)
return APR_ENOMEM;
ied_usr->dev_flag = g_DevFlag;
ied_usr->dev_flag = ENABLE;//<2F>ն<EFBFBD><D5B6><EFBFBD>Ч
ied->chncount = 1;
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);//ͨ<>Žṹ<C5BD><E1B9B9>g_cfg_pool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC>ն˵<D5B6>ip<69>˿ڵ<CBBF>
ied->channel[0].ied = ied;
ied->channel[0].status = STATUS_BREAKOFF;
ied->cpucount = 0;
@@ -12309,7 +12326,8 @@ int parse_device_cfg_web()
cout << "ied_usr->time:" << ied_usr->time << endl;
}
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));//<2F><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Žṹ<C5BD><E1B9B9>g_init_pool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4A3BA>չ<EFBFBD><D5B9>¼һЩ<D2BB><D0A9><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
ied->channel[0].connect = chnl_usr;
chnl_usr->chnl = &(ied->channel[0]);
chnl_usr->chnl_id = 0;
@@ -12413,7 +12431,7 @@ int parse_device_cfg_web()
strcpy(line_info.name, monitor_name);
cout << "name:" << line_info.name << endl;
line_info.read_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
line_info.read_flag = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
//ied = find_ied_from_dev_code(line_info.terminal_code); //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC>ն<EFBFBD><D5B6>ˣ<EFBFBD><CBA3>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
@@ -12427,10 +12445,11 @@ int parse_device_cfg_web()
ied_usr = (ied_usr_t*)ied->usr_ext;
ied_usr->LD_info[cpuno - 1] = line_info; //cpunoĬ<6F><C4AC><EFBFBD><EFBFBD>1
ied_usr->LD_info[cpuno - 1].ied = ied;
apr_snprintf(str, sizeof(str), "PQMonitorPQM%d", cpuno);
ied_usr->LD_info[cpuno - 1].LD_name = apr_pstrdup(g_init_pool, str);
ied_usr->LD_info[cpuno - 1].ht_fcd = apr_hash_make(g_init_pool);
ied_usr->LD_info[cpuno - 1].ht_full_fcda = apr_hash_make(g_init_pool);
apr_snprintf(str, sizeof(str), "PQMonitorPQM%d", cpuno);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>תΪPQMonitorPQM+<2B>߼<EFBFBD><DFBC><EFBFBD>
ied_usr->LD_info[cpuno - 1].LD_name = apr_pstrdup(g_init_pool, str);//<2F><> str <20>еĸ<D0B5>ʽ<EFBFBD><CABD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ڴ<EFBFBD><DAB4><EFBFBD> g_init_pool <20>С<EFBFBD>ied_usr->LD_info[cpuno - 1].LD_name <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>LD_name <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PQMonitorPQM{cpuno} <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD>ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ied<65><64>
ied_usr->LD_info[cpuno - 1].ht_fcd = apr_hash_make(g_init_pool); //<2F><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֱ<EFBFBD>Ϊ ied_usr->LD_info[cpuno - 1] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ht_fcd <20><> ht_full_fcda<64><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿յĹ<D5B5>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>apr_hash_make(g_init_pool) <20><><EFBFBD><EFBFBD> g_init_pool <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD>
ied_usr->LD_info[cpuno - 1].ht_full_fcda = apr_hash_make(g_init_pool);//<2F><><EFBFBD>ǵ<EFBFBD> key ֵ<><D6B5> value <20>ں<EFBFBD><DABA><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>п<EFBFBD><D0BF>ܻᱻ<DCBB><E1B1BB><EFBFBD><EFBFBD>
ied_usr->LD_info[cpuno - 1].rptcount = 0;
cout << "rptcount:" << ied_usr->LD_info[cpuno - 1].rptcount << endl;
@@ -12442,171 +12461,7 @@ int parse_device_cfg_web()
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
#if 0
ied = g_node->clients[count_real++];
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));
ied->usr_ext = ied_usr;
if (ied_usr == NULL)
return APR_ENOMEM;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));
if (ied_usr->LD_info == NULL)
return APR_ENOMEM;
ied_usr->dev_flag = g_DevFlag;
ied->chncount = 1;
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);
ied->channel[0].ied = ied;
ied->channel[0].status = STATUS_BREAKOFF;
ied->cpucount = 0;
if (strlen(terminal_id) != 0) {
apr_snprintf(ied_usr->terminal_id, sizeof(ied_usr->terminal_id), "%s", terminal_id);//terminal_id
cout << "ied_usr->terminal_id:" << ied_usr->terminal_id << endl;
}
if (terminal_code != NULL) {
apr_snprintf(ied_usr->terminal_code, sizeof(ied_usr->terminal_code), "%s", terminal_code);//terminal_code
cout << "ied_usr->terminal_code:" << ied_usr->terminal_code << endl;
}
/*<2A><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if (org_name != NULL) {
apr_snprintf(ied_usr->org_name, sizeof(ied_usr->org_name), "%s", org_name);//org_name
cout << "ied_usr->org_name:" << ied_usr->org_name << endl;
}
if (maint_name != NULL) {
apr_snprintf(ied_usr->maint_name, sizeof(ied_usr->maint_name), "%s", maint_name);//maint_name
cout << "ied_usr->maint_name:" << ied_usr->maint_name << endl;
}
if (station_name != NULL) {
apr_snprintf(ied_usr->station_name, sizeof(ied_usr->station_name), "%s", station_name);//station_name
cout << "ied_usr->station_name:" << ied_usr->station_name << endl;
}
*/
if (tmnl_factory != NULL) {
apr_snprintf(ied_usr->tmnl_factory, sizeof(ied_usr->tmnl_factory), "%s", tmnl_factory);//tmnl_factory
cout << "ied_usr->tmnl_factory:" << ied_usr->tmnl_factory << endl;
}
if (tmnl_status != NULL) {
apr_snprintf(ied_usr->tmnl_status, sizeof(ied_usr->tmnl_status), "%s", tmnl_status);//tmnl_status
cout << "ied_usr->tmnl_status:" << ied_usr->tmnl_status << endl;
}
if (dev_type != NULL) {
apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", dev_type);//dev_type
cout << "ied_usr->dev_type:" << ied_usr->dev_type << endl;
}
if (dev_series != NULL) {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", dev_seri);//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}
else
{
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", "");//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}
if (dev_key != NULL) {
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", dev_key);//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
}
else
{
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", "");//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
}
//<2F>ϲ<EFBFBD><CFB2><EFBFBD>
/* cout << "code" << ied_usr->terminal_code << endl;
if (terminal_ext_map.contains(QString::fromUtf8(ied_usr->terminal_code))) {
terminal_ext* ext = terminal_ext_map.value(QString::fromUtf8(ied_usr->terminal_code));
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", ext->terminal_key);//DEV_Key
cout << "dev_key:" << ied_usr->dev_key << endl;
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", ext->terminal_identify_code);//DEV_Series
cout << "dev_series:" << ied_usr->dev_series << endl;
}
else
{
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", "");//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", "");//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}*/
ied->channel[0].channel_type = CHANNEL_TYPE_IPV4;//channel
ied->channel[0].addr_str[LONGNAME - 1] = 0;//DEV_IP
if (addr_str != NULL) {
ied->channel[0].addr = ntohl(inet_addr(addr_str));//DEV_IP
strncpy(ied->channel[0].addr_str, addr_str, LONGNAME - 1);//DEV_IP
cout << "ied_usr->addr_str:" << ied->channel[0].addr_str << endl;
}
else
{
ied->channel[0].addr = ntohl(inet_addr("0.0.0.0"));//DEV_IP
strncpy(ied->channel[0].addr_str, addr_str, LONGNAME - 1);//DEV_IP
cout << "ied_usr->addr_str:" << ied->channel[0].addr_str << endl;
}
if (port_char != NULL) {
int port = 102;
if (stringToInt(port_char, &port)) {
// ת<><D7AA><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>portStrȫΪ<C8AB><CEAA><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ת<EFBFBD><D7AA>Ϊint<6E><74><EFBFBD>͵<EFBFBD>port
ied->channel[0].port = port;//DEV_PortID
cout << "ied_usr->port:" << ied->channel[0].port << endl;//DEV_PortID
}
else {
ied->channel[0].port = 102;//DEV_PortID
cout << "ied_usr->port:" << port_char << ",<2C>ǺϷ<C7BA><CFB7>˿<EFBFBD>.ʹ<><CAB9>Ĭ<EFBFBD>϶˿<CFB6>:" << ied->channel[0].port << endl;//DEV_PortID
}
}
if (timestamp.year != 0) {
//// <20><><EFBFBD><EFBFBD>struct tm<74><6D><EFBFBD><EFBFBD>
struct tm timeinfo;
timeinfo.tm_year = timestamp.year - 1900; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȥ1900
timeinfo.tm_mon = timestamp.month - 1; // <20>·<EFBFBD><C2B7><EFBFBD>Ҫ<EFBFBD><D2AA>ȥ1
timeinfo.tm_mday = timestamp.day;
timeinfo.tm_hour = timestamp.hour;
timeinfo.tm_min = timestamp.minute;
timeinfo.tm_sec = timestamp.second;
time_t time = std::mktime(&timeinfo);
ied_usr->time = static_cast<long long>(time);
cout << "ied_usr->time:" << ied_usr->time << endl;
}
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));
ied->channel[0].connect = chnl_usr;
chnl_usr->chnl = &(ied->channel[0]);
chnl_usr->chnl_id = 0;
chnl_usr->m_state = CHANNEL_DISCONNECTED;
chnl_usr->m_ClosedMsTime = NEXT_CONNECT_TIME * (-1);
g_pt61850app->chnl_counts++;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::cout << "value:" << terminal_id <<" "<<terminal_code <<" "<<tmnl_factory <<" "<<dev_series <<" "<<dev_key <<" "<< tmnl_status <<" "<<dev_type <<" "<<addr_str <<" "<<port_char <<" "<< timestamp.year << std::endl;
}//̨<><CCA8>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//û<>ж<EFBFBD>ǰ<EFBFBD><C7B0>
/*//<2F>滻ǰ<E6BBBB>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
if (MULTIPLE_NODE_FLAG) {
codes.push_back("updatefront");
codes.push_back(std::string(FRONT_IP));
codes.push_back(intToString(FRONT_INST));
codes.push_back(intToString(count_real));
codes.push_back(std::string(PROGRAM_VERSION)); //<2F>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>updateһ<65><D2BB><EFBFBD><EFBFBD>д<EFBFBD><D0B4>PROGRAM_VERSION
parse_device_web_test_front_write(codes);
codes.clear();
}
//<2F>滻ǰ<E6BBBB>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>*/
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////
if (count_real < count_cfg)
g_node->n_clients = count_real;
@@ -13096,7 +12951,7 @@ void OnTimerThread::run()
pthread_mutex_lock(&mtx);//lnk20250114
std::string mp_num_str = "";
mp_num_str.append("connected device count:");
mp_num_str.append(QString::number(FRONT_MP_NUM).toStdString());
mp_num_str.append(QString::number(FRONT_MP_NUM).toStdString());//<2F><>¼<EFBFBD><C2BC><EFBFBD>ӵļ<D3B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mp_num_str.append(",g_node clients:");
mp_num_str.append(QString::number(g_node->n_clients).toStdString());
@@ -14142,7 +13997,7 @@ void SOEFileWeb_test()
/*<2A><>װC<D7B0>ɵ<EFBFBD><C9B5>õ<EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>º<EFBFBD><C2BA><EFBFBD> */////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////
int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_index)
int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_index,int ied_take)
{
chnl_usr_t* chnl_usr = NULL;
ied_usr_t* ied_usr = NULL;
@@ -14183,8 +14038,10 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", ""); // Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
printf("ied_usr->dev_key (default): %s\n", ied_usr->dev_key);
}
ied_usr->dev_idx = terminal_index; // <20><><EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ն<EFBFBD><D5B6>ź<EFBFBD>
ied_usr->dev_idx = terminal_index; //<2F>ն<EFBFBD><D5B6>ź<EFBFBD>
printf("dev_idx: %d\n", ied_usr->dev_idx);
ied->channel[0].channel_type = CHANNEL_TYPE_IPV4; // channel
ied->channel[0].addr_str[LONGNAME - 1] = 0; // DEV_IP
if (update[i].addr_str != NULL) {
@@ -14207,6 +14064,7 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
printf("ied_usr->port: %s, <20>ǺϷ<C7BA><CFB7>˿<EFBFBD>. ʹ<><CAB9>Ĭ<EFBFBD>϶˿<CFB6>: %d\n", update[i].port, ied->channel[0].port); // DEV_PortID
}
}
if (update[i].timestamp != NULL && strlen(update[i].timestamp) > 0) {
// <20><><EFBFBD><EFBFBD>struct tm<74><6D><EFBFBD><EFBFBD>
struct tm timeinfo = {0}; // <20><>ʼ<EFBFBD><CABC>Ϊ0
@@ -14235,13 +14093,22 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
return -1;
}
}
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));
ied->channel[0].connect = chnl_usr;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>пռ<D0BF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(!ied_take){
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));
ied->channel[0].connect = chnl_usr;
g_pt61850app->chnl_counts++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
else{
chnl_usr = (chnl_usr_t*)ied->channel[0].connect;
}
chnl_usr->chnl = &(ied->channel[0]);
chnl_usr->chnl_id = 0;
chnl_usr->m_state = CHANNEL_DISCONNECTED;
chnl_usr->m_ClosedMsTime = NEXT_CONNECT_TIME * (-1);
g_pt61850app->chnl_counts++;
// <20><> monitorData <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뵽 LD_info <20><>
int count_real_monitor = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵ļ<CBB5><C4BC><EFBFBD><EFBFBD><EFBFBD>
int j;
@@ -14249,9 +14116,10 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
monitor monitor_data = update[i].line[j];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
count_real_monitor++;
// <20><>ʼ<EFBFBD><CABC> LD_info
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LD_info<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>漰ָ<E6BCB0><D6B8><EFBFBD>IJ<EFBFBD><C4B2>ֶ<EFBFBD>Ϊ<EFBFBD><CEAA>
LD_info_t line_info;
memset(&line_info, 0, sizeof(line_info));
char logical_device_seq[64];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
strncpy(line_info.mp_id, monitor_data.monitor_id, sizeof(line_info.mp_id) - 1);
@@ -14269,6 +14137,7 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
printf("logical_device_seq: %d\n", line_info.cpuno);
}
line_info.line_id = count_real_monitor; // <20><>¼<EFBFBD>ն<EFBFBD><D5B6>ź<EFBFBD>
printf("line_id: %d\n", line_info.line_id);
printf("mp_id: %s\n", line_info.mp_id);
printf("terminal_code: %s\n", line_info.terminal_code);
@@ -14276,6 +14145,7 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
printf("v_wiring_type: %s\n", line_info.v_wiring_type);
printf("monitor_status: %s\n", line_info.monitor_status);
printf("name: %s\n", line_info.name);
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
if (update[i].timestamp[0] != '\0') {
struct tm timeinfo;
@@ -14313,13 +14183,24 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
ied_usr->LD_info[cpuno - 1] = line_info; // cpunoĬ<6F><C4AC><EFBFBD><EFBFBD>1
ied_usr->LD_info[cpuno - 1].ied = ied;
apr_snprintf(str, sizeof(str), "PQMonitorPQM%d", cpuno);
ied_usr->LD_info[cpuno - 1].LD_name = apr_pstrdup(g_init_pool, str);
ied_usr->LD_info[cpuno - 1].ht_fcd = apr_hash_make(g_init_pool);
ied_usr->LD_info[cpuno - 1].ht_full_fcda = apr_hash_make(g_init_pool);
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD> LD_name<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if (ied_usr->LD_info[cpuno - 1].LD_name == NULL) {
ied_usr->LD_info[cpuno - 1].LD_name = apr_pstrdup(g_init_pool, str);
} else {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD><EFBFBD>ԭ<EFBFBD>пռ<D0BF><D5BC>ϸ<EFBFBD><CFB8><EFBFBD>
apr_cpystrn(ied_usr->LD_info[cpuno - 1].LD_name, str, sizeof(ied_usr->LD_info[cpuno - 1].LD_name));
}
// <20><><EFBFBD>¹<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬ԭ<E6A3AC><D4AD><EFBFBD><EFBFBD>ied<65>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>˿յĹ<D5B5>ϣ<EFBFBD><CFA3><EFBFBD>Ͳ<EFBFBD><CDB2>ٷ<EFBFBD><D9B7><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>ʱû<CAB1><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (ied_usr->LD_info[cpuno - 1].ht_fcd == NULL) {
ied_usr->LD_info[cpuno - 1].ht_fcd = apr_hash_make(g_init_pool);
}
if (ied_usr->LD_info[cpuno - 1].ht_full_fcda == NULL) {
ied_usr->LD_info[cpuno - 1].ht_full_fcda = apr_hash_make(g_init_pool);
}
ied_usr->LD_info[cpuno - 1].rptcount = 0;
printf("rptcount: %d\n", ied_usr->LD_info[cpuno - 1].rptcount);
if (cpuno > ied->cpucount) {
ied->cpucount = cpuno;
ied->cpucount = cpuno;//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD>еļ<D0B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬û<E0A3AC>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ǵIJ<C7B5><C4B2><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ᱣ֤<E1B1A3><D6A4><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>Щ֮ǰ<D6AE><C7B0>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ǵļ<C7B5><C4BC><EFBFBD><EFBFBD><EFBFBD>
}
}
// ied_usr->LD_info[j] = line_info;
@@ -14411,33 +14292,47 @@ void create_ledger_log(trigger_update_xml_t* ledger_update_xml) {
log_file.close();
std::cout << "Ledger log has been updated." << std::endl;
}
///////////////////////////////////////////////////////////////////////////
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ied_usr_t <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
void clear_ied_usr(ied_t* ied) {
if (ied && ied->usr_ext) { // <20><><EFBFBD><EFBFBD> usr_ext <20>Ƿ<EFBFBD>Ϊ NULL
ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext;
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ա
memset(ied_usr->dev_type, 0, sizeof(ied_usr->dev_type));
memset(ied_usr->dev_key, 0, sizeof(ied_usr->dev_key));
memset(ied_usr->dev_series, 0, sizeof(ied_usr->dev_series));
memset(ied_usr->terminal_id, 0, sizeof(ied_usr->terminal_id));
memset(ied_usr->org_name, 0, sizeof(ied_usr->org_name));
memset(ied_usr->maint_name, 0, sizeof(ied_usr->maint_name));
memset(ied_usr->station_name, 0, sizeof(ied_usr->station_name));
memset(ied_usr->tmnl_factory, 0, sizeof(ied_usr->tmnl_factory));
memset(ied_usr->tmnl_status, 0, sizeof(ied_usr->tmnl_status));
memset(ied_usr->terminal_code, 0, sizeof(ied_usr->terminal_code));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>͵ij<CDB5>Ա
ied_usr->dev_idx = 0;
ied_usr->dev_flag = 0;
ied_usr->cookie = NULL;
ied_usr->last_call_wavelist_time = 0;
ied_usr->time = 0;
ied_usr->update_flag = 0;
///////////////////////////////////////////////////////////////////////////̨<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲿<EFBFBD>ֹ<EFBFBD><EFBFBD>ܴ<EFBFBD><EFBFBD>룺δʹ<EFBFBD><EFBFBD>
// ɾ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>
void delete_sub_pool(const char* terminal_id) {
std::list<std::pair<std::string, apr_pool_t*> >::iterator it;
for (it = pool_list.begin(); it != pool_list.end(); ++it) {
if (it->first == terminal_id) {
apr_pool_destroy(it->second); // <20><><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>
pool_list.erase(it); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
break;
}
}
}
//<2F>Ҷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
apr_pool_t* find_sub_pool(const char* terminal_id) {
std::list<std::pair<std::string, apr_pool_t*> >::iterator it;
for (it = pool_list.begin(); it != pool_list.end(); ++it) {
if (it->first == terminal_id) {
return it->second; // <20>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
}
}
return NULL; // û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ӳ<EFBFBD>
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ӳز<D3B3><D8B2><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
apr_pool_t* create_sub_pool(apr_pool_t* parent_pool, const char* terminal_id) {
apr_pool_t* new_sub_pool = NULL;
// <20>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ӳ<EFBFBD>
apr_pool_create(&new_sub_pool, parent_pool);
if (new_sub_pool == NULL) {
return NULL; // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
}
// <20><><EFBFBD>ӳغ<D3B3><D8BA>ն<EFBFBD> ID <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pool_list.push_back(std::make_pair(std::string(terminal_id), new_sub_pool));
return new_sub_pool;
}
/*<2A><>װC<D7B0>ɵ<EFBFBD><C9B5>õ<EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8>º<EFBFBD><C2BA><EFBFBD> */////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -33,7 +33,9 @@ extern pthread_mutex_t mtx;
extern apr_pool_t* g_cfg_pool;
extern apr_pool_t* g_init_pool;
extern int g_DevFlag;
extern int g_DevFlag; //<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>ʹ<EFBFBD><CAB9>lnk20250121
extern int IED_COUNT;
//lnk20250115end
@@ -832,50 +834,84 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
}
}
if (!new_in_work_found) { //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>µ<EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>
if (!new_in_work_found) { //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>µ<EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int terminal_index;
int ied_take = 0; //<2F><>ǰ̨<C7B0><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ʹ<EFBFBD>õ<EFBFBD>ied<65>ռ䣿0û<30>У<EFBFBD>1<EFBFBD><31>
//<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>Ӻͳ<D3BA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//1-<2D><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ڴ<EFBFBD><DAB4>ռ<EFBFBD>//////////////////////////////
//<2F>µ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (n_clients) <20><>ԭ<EFBFBD>е<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D4AD><EFBFBD><EFBFBD>Ϊ g_node->n_clients)
int new_client_count = g_node->n_clients + 1; // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>̨<EFBFBD><CCA8>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ䣺ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> clients ָ<><D6B8>һ<EFBFBD><D2BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
ied_t** new_clients = (ied_t**)apr_pcalloc(g_cfg_pool, new_client_count * sizeof(ied_t*));
//<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD>Ƿ񳬹<EFBFBD>ԭ<EFBFBD>е<EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾ʹӲ<EFBFBD>ʹ<EFBFBD>ܵ<EFBFBD>ied<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><EFBFBD>ÿռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
if(new_client_count > IED_COUNT){
ied_t *ied_unused = NULL;
ied_usr_t* ied_usr_unused = NULL;
ied_unused = find_ied_from_terminal_id();
if(ied_unused != NULL){
ied_usr_unused = (ied_usr_t*)ied_unused->usr_ext;
ied = ied_unused; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>iedָ<64><D6B8><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>δʹ<CEB4>õ<EFBFBD>ied<65>ռ<EFBFBD>
terminal_index = ied_usr_unused->dev_idx //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ied<65>ı<EFBFBD><C4B1><EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD>
int k;
for (k = 0; k < g_node->n_clients; k++) {
new_clients[k] = g_node->clients[k];
}
//<2F><>ӡ<EFBFBD><EFBFBD>ʾ
printf("!!!!!!!!ied index:%d ,terminal_id:%s has been taken!!!!!!!!!!\n",ied_usr_unused->dev_idx,ied_usr_unused->terminal_id);
// Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD>
new_clients[g_node->n_clients] = (ied_t*)apr_pcalloc(g_cfg_pool, sizeof(ied_t));
//<2F>ն˳<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
ied_usr = (ied_usr_t*)ied->usr_ext;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_node->clients = new_clients; // <20><> clients ָ<><D6B8><EFBFBD>µ<EFBFBD><C2B5>ڴ<EFBFBD><DAB4>ռ<EFBFBD>
g_node->n_clients = new_client_count; // <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//1-<2D><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ڴ<EFBFBD><DAB4>ռ<EFBFBD>//////////////////////////////
ied_usr->dev_flag = ENABLE;//<2F>ն<EFBFBD><D5B6><EFBFBD>Ч
//2-<2D><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>///////////////////////////////////
ied = g_node->clients[new_client_count - 1];//<EFBFBD>ն<EFBFBD>̨<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һλ
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));
ied->usr_ext = ied_usr;
if (ied_usr == NULL)
return APR_ENOMEM;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));
if (ied_usr->LD_info == NULL)
return APR_ENOMEM;
ied_usr->dev_flag = g_DevFlag;
ied->chncount = 1;
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);
ied->channel[0].ied = ied;
ied->channel[0].status = STATUS_BREAKOFF;
ied->cpucount = 0;
//2-<2D><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>///////////////////////////////////
ied->chncount = 1; //ͨ<>Ŷ˿<C5B6><CBBF><EFBFBD>
ied->channel[0].ied = ied; //ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ied->channel[0].status = STATUS_BREAKOFF;//<2F><>ʼ<EFBFBD><CABC>Ϊͨ<CEAA><CDA8><EFBFBD>ж<EFBFBD>
ied->cpucount = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼΪ0<CEAA><30><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ʱд<CAB1><D0B4>
ied_take = 1;//ied֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>
}
else{
printf("!!!!!!!!!!ledger array is full!!!!!!\n");
return;
}
}
else{//<2F><><EFBFBD><EFBFBD>̨<EFBFBD>ʺ<EFBFBD><CABA><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˷<EFBFBD>Χ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>¼
g_node->clients[new_client_count - 1] = (ied_t*)apr_pcalloc(g_cfg_pool, sizeof(ied_t));
// <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_node->n_clients = new_client_count; // <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//1-<2D><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ڴ<EFBFBD><DAB4>ռ<EFBFBD>//////////////////////////////
//2-<2D><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>///////////////////////////////////
ied = g_node->clients[new_client_count - 1];//<2F>ն<EFBFBD>̨<EFBFBD><CCA8>ָ<EFBFBD><EFBFBD><EBB6A8><EFBFBD><EFBFBD>ied<65><64><EFBFBD>鵱ǰλ<C7B0>õĺ<C3B5>һλ
terminal_index = new_client_count - 1;//<2F>µ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD>ն<EFBFBD>
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));
ied->usr_ext = ied_usr;//<2F>ڴ<EFBFBD><DAB4>ҵ<EFBFBD>ied<65><64>
if (ied_usr == NULL)
return APR_ENOMEM;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;//<2F><>FeProject/<2F>ӹ<EFBFBD><D3B9><EFBFBD>Ŀ¼/etc/pt61850netd_pqfe.xml<6D>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ܲ<EFBFBD>ѯʱ<D1AF><CAB1>
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));//<2F>ڴ<EFBFBD><DAB4>ҵ<EFBFBD>ied<65><64>
if (ied_usr->LD_info == NULL)
return APR_ENOMEM;
ied_usr->dev_flag = ENABLE;//<2F>ն<EFBFBD><D5B6><EFBFBD>Ч
ied->chncount = 1; //ͨ<>Ŷ˿<C5B6><CBBF><EFBFBD>
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);//<2F>ڴ<EFBFBD><DAB4>ҵ<EFBFBD>ied<65><64>
ied->channel[0].ied = ied; //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ied->channel[0].status = STATUS_BREAKOFF;//<2F><>ʼ<EFBFBD><CABC>Ϊͨ<CEAA><CDA8><EFBFBD>ж<EFBFBD>
ied->cpucount = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼΪ0<CEAA><30><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ʱд<CAB1><D0B4>
//2-<2D><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>̨<EFBFBD><CCA8>///////////////////////////////////
}
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////
int ret = update_one_terminal_ledger(update,i,ied,g_node->n_clients);
int ret = update_one_terminal_ledger(update,i,ied,terminal_index,ied_take);
if(ret){
printf("ledger can not be update!!!!!quit process!!!!!\n");
return 0;
@@ -918,7 +954,7 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//////////////////////////////////////////////////////////////////////////////modify
update = ledger_update_xml->modify_updates; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
update_num = ledger_update_xml->modify_updates_num;
update_num = ledger_update_xml->modify_update_num;
printf("modify ledger num:%d\n",update_num);
for (i=0; i<update_num; i++){ //<2F><EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
new_in_work_found = FALSE;
@@ -988,7 +1024,7 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
}
///////////////////////////////////////////////////////////////////////////////delete
update = ledger_update_xml->delete_updates; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
update_num = ledger_update_xml->delete_updates_num;
update_num = ledger_update_xml->delete_update_num;
printf("delete ledger num:%d\n",update_num);
for (i=0; i<update_num; i++){ //<2F><EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
new_in_work_found = FALSE;
@@ -1015,30 +1051,45 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
int index_to_remove = 0;
ied_t* ied_find = NULL;
int iedno;
ied_usr_t* ied_usr_find = NULL;
ied_usr = (ied_usr_t*)ied->usr_ext;
ied_usr_t* ied_usr_find = NULL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ied
ied_usr = (ied_usr_t*)ied->usr_ext;//Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD>ied
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied_find = g_node->clients[iedno];
ied_usr_find = (ied_usr_t*)ied_find->usr_ext;
if (ied_usr_find && strcmp(ied_usr_find->terminal_id, ied_usr->terminal_id) == 0) {
index_to_remove = iedno;
index_to_remove = iedno;//<2F>ҵ<EFBFBD>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD>ied<65><64>g_node<64>е<EFBFBD>λ<EFBFBD><CEBB>
break; //<2F>ҵ<EFBFBD><D2B5>˳<EFBFBD>
}
}
clear_ied_usr(ied); //̨<><CCA8><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD> ied <20><><EFBFBD>ڴ<EFBFBD>
ied_t* ied_to_remove = g_node->clients[index_to_remove];
memset(ied_to_remove, 0, sizeof(ied_t));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD> ied <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ied_t* ied_to_remove = g_node->clients[index_to_remove];//ָ<><D6B8>g_node<64><65>Ӧ<EFBFBD><D3A6><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// <20>ͷ<EFBFBD> ied_usr <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ڴ棨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
if(ied_to_remove == ied){//ͨ<><CDA8><EFBFBD>ն<EFBFBD>id<69>ҵ<EFBFBD><D2B5><EFBFBD>iedӦ<64><D3A6>Ҳָ<D2B2><D6B8>g_node<64><65>Ӧ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
printf("this ied is ied_to_remove\n");
}
//<2F>ͷ<EFBFBD>iedͨ<64>ŵ<EFBFBD><C5B5>ڴ<EFBFBD>
if (ied_to_remove->channel) {
apr_pool_clear(ied_to_remove->channel); // <20>ͷ<EFBFBD> g_cfg_pool <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>е<EFBFBD> channel <20>ڴ<EFBFBD>
ied_to_remove->channel = NULL;
}
// <20>ͷ<EFBFBD> ied<65><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˽ṹ<CBBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if (ied_to_remove->usr_ext->LD_info) {
apr_pool_clear(ied_to_remove->usr_ext->LD_info); // <20>ͷ<EFBFBD> g_init_pool <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>е<EFBFBD> LD_info <20>ڴ<EFBFBD>
ed_to_remove->usr_ext->LD_info = NULL;
}
// <20>ͷ<EFBFBD> ied̨<64>˽ṹ<CBBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if (ied_to_remove->usr_ext) {
apr_pool_clear(g_init_pool); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD>ڴ<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
apr_pool_clear(ied_to_remove->usr_ext); // <20>ͷ<EFBFBD> g_init_pool <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> ied_usr <20>ڴ<EFBFBD>
ied_to_remove->usr_ext = NULL;
}
// <20>ƶ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA>
for (int i = index_to_remove; i < g_node->n_clients - 1; i++) {
for (i = index_to_remove; i < g_node->n_clients - 1; i++) {
g_node->clients[i] = g_node->clients[i + 1];
}
@@ -1046,6 +1097,9 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
ied_t** new_clients = (ied_t**)apr_pcalloc(g_cfg_pool, (g_node->n_clients - 1) * sizeof(ied_t*));
memcpy(new_clients, g_node->clients, (g_node->n_clients - 1) * sizeof(ied_t*));
//<2F>ͷ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
apr_pool_clear(g_node->clients);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_node->clients = new_clients;
g_node->n_clients--;
@@ -1569,7 +1623,7 @@ void CheckNextNotConnectedChannel()
ST_CHAR serverARName[32];
ied_usr_t *ied_usr = (ied_usr_t*)chnl_usr->chnl->ied->usr_ext;
apr_snprintf(serverARName,sizeof(serverARName),"%s:%d",chnl_usr->ip_str,chnl_usr->chnl->port);
if (chnl_usr->chnl->ied->cpucount != NULL && chnl_usr->chnl->ied->cpucount > 0) {//2023-09-26 czy <20><><EFBFBD><EFBFBD>line count<0 <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
if (chnl_usr->chnl->ied->cpucount != NULL && chnl_usr->chnl->ied->cpucount > 0 && ied_usr->dev_flag == ENABLE) {//2023-09-26 czy <20><><EFBFBD><EFBFBD>line count<0 <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>//lnk20250121<32><31><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ret = mms_connectToServer(ied_usr->dev_key, ied_usr->dev_series, serverARName, &(chnl_usr->net_info), &(chnl_usr->m_reqCtrl));
if (ret == SD_SUCCESS)
{

View File

@@ -68,6 +68,10 @@ CHECK_NOTHING CHECK_SYN
#define DEFAULT_EDIT_FXDAREANO (0x80FE) /**< Ĭ<>ϱ<CFB1><E0BCAD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
#define FIXED_AREA_GRP_DOT2_EDIT_AREA (2) /**< <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>-><3E><EFBFBD><E0BCAD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
//lnk<6E><6B><EFBFBD><EFBFBD>ʹ<EFBFBD>ܱ<EFBFBD>־20250121
#define ENABLE 1
#define UNUSED 0
extern unsigned int g_node_id;
typedef struct element_usr_t element_usr_t;
@@ -463,15 +467,15 @@ LD_info_t* find_LD_info_only_from_mp_id(char* mp_id);
////////////////////////////////lnk20250115
int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml);
extern const int MAX_CPUNO;
extern int stringToInt(const char* str, int* result);
extern bool isCharPtrEmpty(const char* str);
extern int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml);
extern int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_index);
extern void print_trigger_update_xml(const trigger_update_xml_t* trigger_update);
extern char* parse_model_cfg_web_one(ied_t* ied);
extern void Set_xml_nodeinfo_one(char* dev_type);
extern void create_ledger_log(trigger_update_xml_t* ledger_update_xml);
extern void clear_ied_usr(ied_t* ied);
int stringToInt(const char* str, int* result);
bool isCharPtrEmpty(const char* str);
int parse_ledger_update_xml(trigger_update_xml_t* trigger_update_xml);
int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_index,int ied_take);
void print_trigger_update_xml(const trigger_update_xml_t* trigger_update);
char* parse_model_cfg_web_one(ied_t* ied);
void Set_xml_nodeinfo_one(char* dev_type);
void create_ledger_log(trigger_update_xml_t* ledger_update_xml);
ied_t* find_ied_from_terminal_id();
////////////////////////////////
int parse_3s_xml(trigger_3s_xml_t* trigger_3s_xml);
int create_3s_xml(trigger_3s_xml_t* trigger_3s_xml);

View File

@@ -308,6 +308,21 @@ ied_t* find_ied_from_terminal_id(char terminal_id[])
}
return NULL;
}
//lnk20250121<32>Ҳ<EFBFBD>ʹ<EFBFBD>õ<EFBFBD>ied<65>ռ<EFBFBD>
ied_t* find_ied_from_terminal_id()
{
ied_t* ied_find_unused = NULL;
int iedno;
ied_usr_t* ied_usr_find_unused = NULL;
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied_find_unused = g_node->clients[iedno];
ied_usr_find_unused = (ied_usr_t*)ied_find_unused->usr_ext;
if (ied_usr_find_unused && ied_usr_find_unused->dev_flag == UNUSED) {
return ied_find_unused;
}
}
return NULL;
}
LD_info_t* find_LD_info_from_line_id(ied_t* ied, int line_id)
{