modify for ledgerupdate

This commit is contained in:
lnk
2025-01-16 19:16:26 +08:00
parent c078194a8d
commit 040b1bd5f6
3 changed files with 43 additions and 241 deletions

View File

@@ -14207,11 +14207,11 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
} }
line_info.line_id = count_real_monitor; // <20><>¼<EFBFBD>ն<EFBFBD><D5B6>ź<EFBFBD> line_info.line_id = count_real_monitor; // <20><>¼<EFBFBD>ն<EFBFBD><D5B6>ź<EFBFBD>
printf("line_id: %d\n", line_info.line_id); printf("line_id: %d\n", line_info.line_id);
printf("mp_id: %d\n", line_info.mp_id); printf("mp_id: %s\n", line_info.mp_id);
printf("terminal_code: %s\n", line_info.terminal_code); printf("terminal_code: %s\n", line_info.terminal_code);
printf("voltage_level: %d\n", line_info.voltage_level); printf("voltage_level: %s\n", line_info.voltage_level);
printf("v_wiring_type: %d\n", line_info.v_wiring_type); printf("v_wiring_type: %s\n", line_info.v_wiring_type);
printf("monitor_status: %d\n", line_info.monitor_status); printf("monitor_status: %s\n", line_info.monitor_status);
printf("name: %s\n", line_info.name); printf("name: %s\n", line_info.name);
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
if (update[i].timestamp[0] != '\0') { if (update[i].timestamp[0] != '\0') {

View File

@@ -46,6 +46,7 @@ extern std::string intToString(int number);
int StringToInt(const std::string& str); int StringToInt(const std::string& str);
extern pthread_mutex_t mtx;//lnk20250115 extern pthread_mutex_t mtx;//lnk20250115
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#include "../mms/rdb_client.h" #include "../mms/rdb_client.h"
@@ -59,6 +60,7 @@ extern "C" {
extern int comtrade_remain_file_num; extern int comtrade_remain_file_num;
extern node_t* g_node; //lnk20241223 extern node_t* g_node; //lnk20241223
extern LD_info_t* find_LD_info_only_from_mp_id(char* mp_id);//lnk20241223 extern LD_info_t* find_LD_info_only_from_mp_id(char* mp_id);//lnk20241223
extern void print_terminal(const terminal* tmnl);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
@@ -1126,14 +1128,16 @@ std::string prepare_update(const std::string& code_str, const terminal& json_dat
// <20><><EFBFBD><EFBFBD> modify <20><> add <20><>ǩ // <20><><EFBFBD><EFBFBD> modify <20><> add <20><>ǩ
if (code_str == "ledger_modify") { if (code_str == "ledger_modify") {
indentLevel--;
add_indent(xmlStream, indentLevel); add_indent(xmlStream, indentLevel);
xmlStream << "</modify>" << std::endl; xmlStream << "</modify>" << std::endl;
indentLevel--;
} }
else { else {
indentLevel--;
add_indent(xmlStream, indentLevel); add_indent(xmlStream, indentLevel);
xmlStream << "</add>" << std::endl; xmlStream << "</add>" << std::endl;
indentLevel--;
} }
} else if (code_str == "delete_terminal") { } else if (code_str == "delete_terminal") {
@@ -1350,16 +1354,18 @@ void parse_control(const std::string& json_str, const std::string& output_dir) {
else else
std::strncpy(monitor_data.status, "N/A", sizeof(monitor_data.status) - 1); std::strncpy(monitor_data.status, "N/A", sizeof(monitor_data.status) - 1);
cJSON* lineNo = cJSON_GetObjectItem(item, "lineNo"); // logical_device_seq cJSON* lineNo = cJSON_GetObjectItem(monitor_item, "lineNo"); // logical_device_seq
if (lineNo && lineNo->type == cJSON_String) if (lineNo && lineNo->type == cJSON_String)
std::strncpy(monitor_data.logical_device_seq, lineNo->valuestring, sizeof(monitor_data.logical_device_seq) - 1); std::strncpy(monitor_data.logical_device_seq, lineNo->valuestring, sizeof(monitor_data.logical_device_seq) - 1);
else else
std::strncpy(monitor_data.logical_device_seq, "N/A", sizeof(monitor_data.logical_device_seq) - 1); std::strncpy(monitor_data.logical_device_seq, "N/A", sizeof(monitor_data.logical_device_seq) - 1);
cJSON* ptType = cJSON_GetObjectItem(item, "ptType"); // terminal_connect cJSON* ptType = cJSON_GetObjectItem(monitor_item, "ptType"); // terminal_connect
if (ptType && ptType->type == cJSON_String) if (ptType && ptType->type == cJSON_String)
std::strncpy(monitor_data.terminal_connect, ptType->valuestring, sizeof(monitor_data.terminal_connect) - 1); std::strncpy(monitor_data.terminal_connect, ptType->valuestring, sizeof(monitor_data.terminal_connect) - 1);
else else
std::strncpy(monitor_data.terminal_connect, "N/A", sizeof(monitor_data.terminal_connect) - 1); std::strncpy(monitor_data.terminal_connect, "N/A", sizeof(monitor_data.terminal_connect) - 1);
std::strncpy(monitor_data.timestamp, json_data.timestamp, sizeof(monitor_data.timestamp) - 1); std::strncpy(monitor_data.timestamp, json_data.timestamp, sizeof(monitor_data.timestamp) - 1);
@@ -1370,6 +1376,8 @@ void parse_control(const std::string& json_str, const std::string& output_dir) {
} }
} }
print_terminal(&json_data);
// ׼<><D7BC> XML <20><><EFBFBD>ݲ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD> // ׼<><D7BC> XML <20><><EFBFBD>ݲ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD>
std::string xmlContent = prepare_update(code_str, json_data); std::string xmlContent = prepare_update(code_str, json_data);
if (xmlContent != "") { if (xmlContent != "") {

View File

@@ -807,29 +807,30 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
printf("add ledger num:%d\n",update_num); printf("add 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> 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; new_in_work_found = FALSE;
printf(" ledger of %s\n",update[i].terminal_id); if(update[i].terminal_id != NULL){
ied = find_ied_from_terminal_id(update[i].terminal_id); //ͨ<><CDA8><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5>ն˺<D5B6><CBBA>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>õ<EFBFBD><C3B5> printf(" ledger of %s\n",update[i].terminal_id);
if (ied){ ied = find_ied_from_terminal_id(update[i].terminal_id); //ͨ<><CDA8><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5>ն˺<D5B6><CBBA>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>
printf("find ied by terminal_id, terminal already exsist\n"); if (ied){
new_in_work_found = TRUE; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> printf("find ied by terminal_id, terminal already exsist\n");
new_in_work_found = TRUE; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ǰ<EFBFBD>ն˴<D5B6> new_updates <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD> modify_updates <20><><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>ǰ<EFBFBD>ն˴<D5B6> new_updates <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD> modify_updates <20><><EFBFBD><EFBFBD>
if (ledger_update_xml->modify_update_num < MAX_UPDATEA_NUM) { if (ledger_update_xml->modify_update_num < MAX_UPDATEA_NUM) {
// <20><><EFBFBD>ӵ<EFBFBD> modify_updates <20><><EFBFBD><EFBFBD> // <20><><EFBFBD>ӵ<EFBFBD> modify_updates <20><><EFBFBD><EFBFBD>
ledger_update_xml->modify_updates[ledger_update_xml->modify_update_num] = update[i]; ledger_update_xml->modify_updates[ledger_update_xml->modify_update_num] = update[i];
ledger_update_xml->modify_update_num++; // <20><><EFBFBD><EFBFBD> modify <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> ledger_update_xml->modify_update_num++; // <20><><EFBFBD><EFBFBD> modify <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>նˣ<D5B6><CBA3><EFBFBD> new_updates <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD> // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>նˣ<D5B6><CBA3><EFBFBD> new_updates <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
for (j = i; j < ledger_update_xml->new_update_num - 1; j++) { for (j = i; j < ledger_update_xml->new_update_num - 1; j++) {
ledger_update_xml->new_updates[j] = ledger_update_xml->new_updates[j + 1]; // <20><>ǰ<EFBFBD>ƶ<EFBFBD>Ԫ<EFBFBD><D4AA> ledger_update_xml->new_updates[j] = ledger_update_xml->new_updates[j + 1]; // <20><>ǰ<EFBFBD>ƶ<EFBFBD>Ԫ<EFBFBD><D4AA>
} }
ledger_update_xml->new_update_num--; // <20><><EFBFBD><EFBFBD> new_update_num<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԫ<EFBFBD><D4AA>
i--; // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ǰԪ<C7B0>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} else {
fprintf(stderr, "Exceeded MAX_UPDATEA_NUM limit for modify_updates!\n");
}
ledger_update_xml->new_update_num--; // <20><><EFBFBD><EFBFBD> new_update_num<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԫ<EFBFBD><D4AA>
continue;
} else {
fprintf(stderr, "Exceeded MAX_UPDATEA_NUM limit for modify_updates!\n");
}
}
} }
if (!new_in_work_found) { //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>µ<EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8> if (!new_in_work_found) { //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>µ<EFBFBD>̨<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>
@@ -876,215 +877,6 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>////////////////////////////// //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,g_node->n_clients);
#if 0
// <20><> update[i] <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뵽 ied_usr <20><>
if (strlen(update[i].terminal_id) != 0) {
apr_snprintf(ied_usr->terminal_id, sizeof(ied_usr->terminal_id), "%s", update[i].terminal_id);
printf("ied_usr->terminal_id: %s\n", ied_usr->terminal_id);
}
if (update[i].terminal_code != NULL) {
apr_snprintf(ied_usr->terminal_code, sizeof(ied_usr->terminal_code), "%s", update[i].terminal_code);
printf("ied_usr->terminal_code: %s\n", ied_usr->terminal_code);
}
if (update[i].tmnl_factory != NULL) {
apr_snprintf(ied_usr->tmnl_factory, sizeof(ied_usr->tmnl_factory), "%s", update[i].tmnl_factory);
printf("ied_usr->tmnl_factory: %s\n", ied_usr->tmnl_factory);
}
if (update[i].tmnl_status != NULL) {
apr_snprintf(ied_usr->tmnl_status, sizeof(ied_usr->tmnl_status), "%s", update[i].tmnl_status);
printf("ied_usr->tmnl_status: %s\n", ied_usr->tmnl_status);
}
if (update[i].dev_type != NULL) {
apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", update[i].dev_type);
printf("ied_usr->dev_type: %s\n", ied_usr->dev_type);
}
if (update[i].dev_series != NULL) {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", update[i].dev_series);
printf("ied_usr->dev_series: %s\n", ied_usr->dev_series);
} else {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", ""); // Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
printf("ied_usr->dev_series (default): %s\n", ied_usr->dev_series);
}
if (update[i].dev_key != NULL) {
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", update[i].dev_key);
printf("ied_usr->dev_key: %s\n", ied_usr->dev_key);
} else {
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 = new_client_count; // <20><><EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ն<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) {
ied->channel[0].addr = ntohl(inet_addr(update[i].addr_str)); // DEV_IP
strncpy(ied->channel[0].addr_str, update[i].addr_str, LONGNAME - 1); // DEV_IP
printf("ied_usr->addr_str: %s\n", ied->channel[0].addr_str);
} else {
ied->channel[0].addr = ntohl(inet_addr("0.0.0.0")); // DEV_IP
strncpy(ied->channel[0].addr_str, update[i].addr_str, LONGNAME - 1); // DEV_IP
printf("ied_usr->addr_str: %s\n", ied->channel[0].addr_str);
}
if (update[i].port != NULL) {
int port = 102;
if (stringToInt(update[i].port, &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
printf("ied_usr->port: %d\n", ied->channel[0].port); // DEV_PortID
} else {
ied->channel[0].port = 102; // DEV_PortID
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
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽΪ "YYYY-MM-DD HH:MM:SS"
// ʹ<><CAB9>sscanf<6E><66><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ֶ<EFBFBD>
if (sscanf(update[i].timestamp, "%4d-%2d-%2d %2d:%2d:%2d",
&timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday,
&timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec) == 6) {
// <20><><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>1900<30><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
timeinfo.tm_year -= 1900;
// <20>·ݴ<C2B7>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E3A3AC>ȥ1
timeinfo.tm_mon -= 1;
// <20><>tm_isdst<73><74><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ-1<><31><EFBFBD><EFBFBD>mktime<6D>Զ<EFBFBD><D4B6>ж<EFBFBD>
timeinfo.tm_isdst = -1;
// ʹ<><CAB9>mktime<6D><65>struct tmת<6D><D7AA>Ϊtime_t
time_t raw_time = mktime(&timeinfo);
// <20>ж<EFBFBD>mktime<6D>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (raw_time != -1) {
ied_usr->time = (long long)raw_time;
printf("ied_usr->time: %lld\n", ied_usr->time);
} else {
printf("Error: mktime failed.\n");
}
} else {
printf("Error: sscanf failed. Invalid timestamp format.\n");
}
}
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++;
// <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;
for (j = 0; j < 10 && update[i].line[j].monitor_id[0] != '\0'; ++j) {
monitor monitor_data = update[i].line[j];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
count_real_monitor++;
// <20><>ʼ<EFBFBD><CABC> LD_info
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);
strncpy(line_info.name, monitor_data.monitor_name, sizeof(line_info.name) - 1);
strncpy(line_info.voltage_level, monitor_data.voltage_level, sizeof(line_info.voltage_level) - 1);
strncpy(line_info.v_wiring_type, monitor_data.terminal_connect, sizeof(line_info.v_wiring_type) - 1);
strncpy(line_info.monitor_status, monitor_data.status, sizeof(line_info.monitor_status) - 1);
strncpy(line_info.terminal_code, monitor_data.terminal_code, sizeof(line_info.terminal_code) - 1);
strncpy(logical_device_seq, monitor_data.logical_device_seq, sizeof(logical_device_seq) - 1);
if (isCharPtrEmpty(logical_device_seq)) {
line_info.cpuno = 1; // Ĭ<>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>1
printf("logical_device_seq: is null, set cpuno: %d\n", line_info.cpuno);
} else {
line_info.cpuno = atoi(logical_device_seq);
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: %d\n", line_info.mp_id);
printf("terminal_code: %s\n", line_info.terminal_code);
printf("voltage_level: %d\n", line_info.voltage_level);
printf("v_wiring_type: %d\n", line_info.v_wiring_type);
printf("monitor_status: %d\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;
char timestamp[64];
// <20><><EFBFBD><EFBFBD>update[i].timestamp<6D><70>ʽΪ "YYYY-MM-DD HH:MM:SS"
// <20><><EFBFBD>磺"2023-01-14 12:34:56"
sscanf(update[i].timestamp, "%4d-%2d-%2d %2d:%2d:%2d",
&timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday,
&timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec);
// <20><><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>1900<30>ʼ<EABFAA><CABC><EFBFBD><EFBFBD>
timeinfo.tm_year -= 1900;
// <20>·ݴ<C2B7>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>1
timeinfo.tm_mon -= 1;
// <20><>tm_isdst<73><74><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ-1<><31><EFBFBD><EFBFBD>mktime<6D>Զ<EFBFBD><D4B6>ж<EFBFBD>
timeinfo.tm_isdst = -1;
// ʹ<><CAB9>mktime<6D><65>struct tmת<6D><D7AA>Ϊtime_t
time_t raw_time = mktime(&timeinfo);
// <20>ж<EFBFBD>mktime<6D>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (raw_time != -1) {
line_info.time = (long long)raw_time;
printf("time: %lld\n", line_info.time);
} else {
printf("Error: mktime failed.\n");
}
}
line_info.read_flag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
// <20><><EFBFBD><EFBFBD> LD_info
if (ied && ied->usr_ext && line_info.cpuno && ((int)line_info.cpuno < 10)) {
char str[256];
byte_t cpuno = line_info.cpuno;
printf("cpuno: %d\n", line_info.cpuno);
printf("index cpuno: %d\n", cpuno - 1);
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);
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_usr->LD_info[j] = line_info;
printf("Monitor Info [ID: %s, Name: %s] saved in LD_info\n", line_info.mp_id, line_info.name);
}
#endif
//3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/////////////////////////////////// //3-д<><D0B4>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////
@@ -1224,7 +1016,9 @@ void check_ledger_update()//lnk20250113
trigger_update_xml_t trigger_ledger_update_xml; //̨<>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC> trigger_update_xml_t trigger_ledger_update_xml; //̨<>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>
printf("begin ledger update...\n"); printf("check ledger update...\n");
last_check_3s_config_time = now; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>նˣ<D5B6><CBA3><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ļ<EFBFBD> //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>նˣ<D5B6><CBA3><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ļ<EFBFBD>
while (APR_SUCCESS==parse_ledger_update_xml(&trigger_ledger_update_xml)){ //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF>Ը<EFBFBD><D4B8>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD> while (APR_SUCCESS==parse_ledger_update_xml(&trigger_ledger_update_xml)){ //<2F><><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF>Ը<EFBFBD><D4B8>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˵<EFBFBD>