From dbfcf92552379ea06d707f6ff9ab846a19bac65d Mon Sep 17 00:00:00 2001 From: ypc <15051963820@163.com> Date: Wed, 10 Jun 2026 16:58:12 +0800 Subject: [PATCH] =?UTF-8?q?<=E4=BF=AE=E6=94=B9>=201=E3=80=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4mms=E7=9A=84=E8=B0=83=E8=AF=95=E6=89=93=E5=8D=B0?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E8=B0=83=E6=95=B4=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=BF=83=E7=9A=84=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=8F=8A=E5=AE=9A=E5=80=BC=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=95=B0=E6=8D=AE=E6=94=B9=E5=8F=98=E5=90=8E=E6=89=8D?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6=EF=BC=9B?= =?UTF-8?q?3=E3=80=81=E5=9C=A8=E8=B0=83=E7=94=A8=E5=86=99=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=8E=A5=E5=8F=A3=E5=89=8D=EF=BC=8C=E4=B9=9F=E5=85=88?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E6=95=B0=E6=8D=AE=E6=98=AF=E5=90=A6=E5=8F=91?= =?UTF-8?q?=E7=94=9F=E6=94=B9=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++++- src/protocol/libmms_m/inc/mms_m.h | 2 +- src/protocol/libmms_m/src/mms_m.cpp | 16 +++++++++---- src/protocol/libmms_s/src/mms_s_model.cpp | 4 ++-- src/protocol/libmms_s/src/mms_s_param.cpp | 10 ++++----- src/protocol/libmms_s/src/mms_s_setting.cpp | 9 +++++--- src/protocol/libmms_s/src/mms_s_value.cpp | 2 +- src/system/libdatacenter/src/dc_param.cpp | 4 ---- src/system/libdatacenter/src/dc_signal.cpp | 25 +++++++++++---------- src/system/libiec61850m/src/iec61850m.cpp | 23 ++++++++++++------- src/system/libiec61850s/src/iec61850s.cpp | 2 +- 11 files changed, 60 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 72490aa..20a5cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,7 @@ release/arm/ src/system/uart_trans/ src/system/FTU_cfg_parse/ libiec61850-1.5.3/ -doc/ \ No newline at end of file +doc/ +# claude +CLAUDE.md +mongoose/ diff --git a/src/protocol/libmms_m/inc/mms_m.h b/src/protocol/libmms_m/inc/mms_m.h index 1fb30e5..d4d0827 100644 --- a/src/protocol/libmms_m/inc/mms_m.h +++ b/src/protocol/libmms_m/inc/mms_m.h @@ -191,5 +191,5 @@ typedef struct - +bool mms_m_dbg_get(stru_mms_m_obj &obj); void *mms_m_get_obj(int app_fd); diff --git a/src/protocol/libmms_m/src/mms_m.cpp b/src/protocol/libmms_m/src/mms_m.cpp index 8a28f32..41529d2 100644 --- a/src/protocol/libmms_m/src/mms_m.cpp +++ b/src/protocol/libmms_m/src/mms_m.cpp @@ -443,8 +443,11 @@ static void mms_m_send_read_param(stru_mms_m_obj &obj, stru_mms_m_event &event) int act_sg = obj.current_zone; - LOG_I("%s: read params with zone=%d (bound=%s)", obj.cfg_path.c_str(), act_sg, - strlen(obj.zone_saddr) > 0 ? obj.zone_saddr : "unbound"); + if(mms_m_dbg_get(obj)) + { + LOG_I("%s: read params with zone=%d (bound=%s)", obj.cfg_path.c_str(), act_sg, + strlen(obj.zone_saddr) > 0 ? obj.zone_saddr : "unbound"); + } for(int i = 0; i < obj.p_cfg->point.param_num; i++) { @@ -1937,6 +1940,10 @@ static int mms_m_ied_init(stru_mms_m_obj &obj) return 0; } +bool mms_m_dbg_get(stru_mms_m_obj &obj) +{ + return obj.debug_print_flag == MMS_M_DEBUG_PRINT_ON ? true : false; +} void *mms_m_get_obj(int app_fd){ @@ -2380,8 +2387,9 @@ static struct _mms_m_resaon_str {IEC61850_REASON_INTEGRITY, "IEC61850_REASON_INTEGRITY"}, {IEC61850_REASON_GI, "IEC61850_REASON_GI"}, {IEC61850_REASON_UNKNOWN, "IEC61850_REASON_UNKNOWN"}, - {MMS_M_REASON_ALL_CALL, "MMS_M_REASON_ALL_CALL"}, - {MMS_M_REASON_READ_PARAM, "MMS_M_REASON_READ_PARAM"} + {MMS_M_REASON_ALL_CALL, "MMS_M_REASON_ALL_CALL"}, + {MMS_M_REASON_READ_AO, "MMS_M_REASON_READ_AO"}, + {MMS_M_REASON_READ_PARAM, "MMS_M_REASON_READ_PARAM"} }; char *mms_m_out_reason_str(int reason) diff --git a/src/protocol/libmms_s/src/mms_s_model.cpp b/src/protocol/libmms_s/src/mms_s_model.cpp index 22990ae..ccb2e51 100644 --- a/src/protocol/libmms_s/src/mms_s_model.cpp +++ b/src/protocol/libmms_s/src/mms_s_model.cpp @@ -663,8 +663,8 @@ LOCAL int model_ReportControlBlock_init(LogicalNode *LLN0, stru_icd &icd, std::m int Options = model_get_rpt_options(rcb.optFields); // 将 OptFields 结构转为位掩码 int trgOps = model_get_rpt_trgOps(rcb.trgOps); // 将 TrgOps 结构转为位掩码 - LOG_I("RCB CREATE: name=%s dchg=%d qchg=%d dupd=%d period=%d -> trgOps=0x%x", - it_rcb->c_str(), rcb.trgOps.dchg, rcb.trgOps.qchg, rcb.trgOps.dupd, rcb.trgOps.period, trgOps); + // LOG_I("RCB CREATE: name=%s dchg=%d qchg=%d dupd=%d period=%d -> trgOps=0x%x", + // it_rcb->c_str(), rcb.trgOps.dchg, rcb.trgOps.qchg, rcb.trgOps.dupd, rcb.trgOps.period, trgOps); rcb.Rcb = ReportControlBlock_create(it_rcb->c_str(), LLN0, rcb.rptID.c_str(), rcb.buffered, rcb.datSet.c_str(), rcb.confRev, trgOps, Options, rcb.bufTime, rcb.intgPd); } diff --git a/src/protocol/libmms_s/src/mms_s_param.cpp b/src/protocol/libmms_s/src/mms_s_param.cpp index 7e52122..0e0ac75 100644 --- a/src/protocol/libmms_s/src/mms_s_param.cpp +++ b/src/protocol/libmms_s/src/mms_s_param.cpp @@ -182,7 +182,7 @@ LOCAL void param_load_active_sg_values(stru_LDevice &ld, int actSG) } } - LOG_I("Load active setting group %d values done", actSG); + // LOG_I("Load active setting group %d values done", actSG); } /** @@ -769,7 +769,7 @@ int param_init(IedServer server, stru_icd &icd) return 0; } - param_values_show(); + // param_values_show(); for(std::map::iterator it_ld = icd.ied.map_ldevice.begin(); it_ld!= icd.ied.map_ldevice.end(); it_ld++) { @@ -782,9 +782,9 @@ int param_init(IedServer server, stru_icd &icd) } LogicalNode *ln0 = p_ld->sgcb->parent; - LOG_I("ld %s sgcb ln0 %s, actSG %d, numofSGs %d, editSG %d, cnfEdit %d, timestamp %ld, resvTms %d, sibling %p", - it_ld->first.c_str(), ln0 ? ln0->name : "NULL", p_ld->sgcb->actSG, p_ld->sgcb->numOfSGs, p_ld->sgcb->editSG, - p_ld->sgcb->cnfEdit, p_ld->sgcb->timestamp, p_ld->sgcb->resvTms, p_ld->sgcb->sibling); + // LOG_I("ld %s sgcb ln0 %s, actSG %d, numofSGs %d, editSG %d, cnfEdit %d, timestamp %ld, resvTms %d, sibling %p", + // it_ld->first.c_str(), ln0 ? ln0->name : "NULL", p_ld->sgcb->actSG, p_ld->sgcb->numOfSGs, p_ld->sgcb->editSG, + // p_ld->sgcb->cnfEdit, p_ld->sgcb->timestamp, p_ld->sgcb->resvTms, p_ld->sgcb->sibling); param_load_active_sg_values(*p_ld, p_ld->sgcb->actSG); diff --git a/src/protocol/libmms_s/src/mms_s_setting.cpp b/src/protocol/libmms_s/src/mms_s_setting.cpp index 38da575..a04cd6f 100644 --- a/src/protocol/libmms_s/src/mms_s_setting.cpp +++ b/src/protocol/libmms_s/src/mms_s_setting.cpp @@ -523,8 +523,11 @@ LOCAL void setting_handle_init(IedServer server, stru_icd &icd) IedServer_handleWriteAccess(server, (DataAttribute *)node, writeAccessHandler, NULL); - DataAttribute *da = (DataAttribute *)node; - LOG_I("Write access handler set for sAddr %s, data attribute name: %s, da %p", sAddr.c_str(), da->name, da); + if(mms_s_dbg_get()) + { + DataAttribute *da = (DataAttribute *)node; + LOG_I("Write access handler set for sAddr %s, data attribute name: %s, da %p", sAddr.c_str(), da->name, da); + } } } @@ -589,7 +592,7 @@ int setting_init(IedServer server, stru_icd &icd) return 0; } - setting_values_show(); + // setting_values_show(); setting_value_init(server, icd); diff --git a/src/protocol/libmms_s/src/mms_s_value.cpp b/src/protocol/libmms_s/src/mms_s_value.cpp index 24e0e3a..b0d11f7 100644 --- a/src/protocol/libmms_s/src/mms_s_value.cpp +++ b/src/protocol/libmms_s/src/mms_s_value.cpp @@ -429,7 +429,7 @@ LOCAL void mms_s_da_value_init_Dbpos(DataAttribute *da, std::string val) da->mmsValue = Dbpos_toMmsValue(NULL, pos); } - // if(mms_s_dbg_get()) + if(mms_s_dbg_get()) { MmsType val_type = MmsValue_getType(da->mmsValue); LOG_I("da %s-%s, value %s, pos %d, type %d, path %s", da->parent->name, da->name, val.c_str(), pos, val_type, get_DA_path((ModelNode *)da).c_str()); diff --git a/src/system/libdatacenter/src/dc_param.cpp b/src/system/libdatacenter/src/dc_param.cpp index 83402c5..c733bb2 100644 --- a/src/system/libdatacenter/src/dc_param.cpp +++ b/src/system/libdatacenter/src/dc_param.cpp @@ -294,10 +294,6 @@ static int dc_param_register_signals(const std::string ¶m_path, if (!vec_p_data.empty() && vec_p_data.size() == vec_p_default_data.size()) { - printf("[REG_PARAM] saddr=%s num=%d\n", saddr, num); - for (size_t _i = 0; _i < vec_p_data.size(); _i++) { - printf(" zone %zu: val=%s def=%s\n", _i, dc_get_signal_val(vec_p_data[_i], data_type).c_str(), dc_get_signal_val(vec_p_default_data[_i], data_type).c_str()); - } dc_signal_param(saddr, desc, data_type, SIGNAL_CTRL_TYPE::SBO_NORMAL, vec_p_data.data(), vec_p_default_data.data(), num, nullptr); diff --git a/src/system/libdatacenter/src/dc_signal.cpp b/src/system/libdatacenter/src/dc_signal.cpp index b9087fa..0320fa7 100644 --- a/src/system/libdatacenter/src/dc_signal.cpp +++ b/src/system/libdatacenter/src/dc_signal.cpp @@ -1262,6 +1262,11 @@ int dc_signal_ao_set_val_without_check(const std::string &saddr, uint8_t data_ty return -1; } + if(0 != dc_check_val_valid(p_signal, 0, p_data)) + { + return -1; + } + dc_set_signal_val(p_signal->vec_p_data[0], data_type, p_data); dc_set_param_cfg_change(true); return 0; @@ -1287,13 +1292,11 @@ int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t d return -1; } - printf("[SIGNAL_PARAM] saddr=%s data_num=%d\n", saddr.c_str(), data_num); for(int i = 0; i < data_num; i++) { if(p_data[i] == nullptr || p_default_data[i] == nullptr) { - printf("[SIGNAL_PARAM_ERR] saddr=%s i=%d p_data=%p p_def=%p\n", saddr.c_str(), i, (void*)p_data[i], (void*)p_default_data[i]); - MY_LOG_E("p_data[%d] or p_default_data[%d] is nullptr", i, i); + LOG_E("p_data[%d] or p_default_data[%d] is nullptr", i, i); return -1; } } @@ -1314,11 +1317,8 @@ int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t d // dc_set_signal_val(p_data, data_type, p_signal->p_data); bool check_result = dc_signal_param_add_check(p_signal, desc, data_type, ctrl_type, p_default_data, data_num); - printf("[SIGNAL_PARAM_REPLACE] saddr=%s add_check=%d old_size=%d new_size=%d\n", - saddr.c_str(), (int)check_result, (int)p_signal->vec_p_data.size(), data_num); if (check_result) { - printf("[SIGNAL_PARAM_REPLACE] add_check=true -> metadata changed, cfg_change set!\n"); dc_set_param_cfg_change(true); } else @@ -1475,7 +1475,7 @@ int dc_signal_param_set_val_without_check(const std::string &saddr, uint8_t data XXH128_hash_t hash = XXH3_128bits(saddr.c_str(), saddr.length()); stru_signal *p_signal = dc_find_signal(saddr, g_datacenter.signal_param); - printf("[SET_PARAM] saddr=%s zone=%d data=%.6f\n", saddr.c_str(), (int)setting_zone, *(float*)p_data); + if(p_signal != nullptr && setting_zone < p_signal->vec_p_data.size()) { if(p_signal->data_type != data_type) @@ -1485,12 +1485,14 @@ int dc_signal_param_set_val_without_check(const std::string &saddr, uint8_t data return -1; } + if(0 != dc_check_val_valid(p_signal, setting_zone, p_data)) + { + return -1; + } dc_set_signal_val(p_signal->vec_p_data[setting_zone], data_type, p_data); - printf("[SET_PARAM_OK] saddr=%s zone=%d -> vec[%d]=%.6f, %p\n", saddr.c_str(), (int)setting_zone, (int)setting_zone, *(float*)p_signal->vec_p_data[setting_zone], p_signal->vec_p_data[setting_zone]); dc_set_param_cfg_change(true); return 0; } - printf("[SET_PARAM_FAIL] saddr=%s zone=%d signal=%p size=%d\n", saddr.c_str(), (int)setting_zone, (void*)p_signal, p_signal ? (int)p_signal->vec_p_data.size() : -1); LOG_E("saddr %s not found in param table", saddr.c_str()); return -1; @@ -2182,13 +2184,12 @@ void dc_param_cfg_check(const std::string &path) sig_elem->SetAttribute("unit", p_param->param.unit.c_str()); sig_elem->SetAttribute("num", p_param->vec_p_data.size()); - - printf("[SAVE_PARAM] saddr=%s num=%d\n", p_param->saddr.c_str(), (int)p_param->vec_p_data.size()); + for(int i = 0; i < p_param->vec_p_data.size(); i++) { std::string val = dc_get_signal_val(p_param->vec_p_data[i], p_param->data_type); std::string def = dc_get_signal_val(p_param->vec_p_default_data[i], p_param->data_type); - printf(" zone %d: val=%s def=%s, %p, %p\n", i+1, val.c_str(), def.c_str(), p_param->vec_p_data[i], p_param->vec_p_default_data[i]); + XMLElement *item_elem = doc.NewElement("Item"); item_elem->SetAttribute("index", i+1); item_elem->SetAttribute("value", val.c_str()); diff --git a/src/system/libiec61850m/src/iec61850m.cpp b/src/system/libiec61850m/src/iec61850m.cpp index 57c9c36..7e938d9 100644 --- a/src/system/libiec61850m/src/iec61850m.cpp +++ b/src/system/libiec61850m/src/iec61850m.cpp @@ -164,8 +164,6 @@ LOCAL void mms_data_back(stru_mms_m_out_value *p) { if(strcmp(p_cfg->point.p_st[j].saddr, p->name) == 0 && NULL != p_cfg->point.p_st[j].value.p_val[0]) { - // *(uint8_t *)p_cfg->point.p_st[j].value.p_val[0] = MY_GET_DATA_WITH_TYPE(p->p_value, uint8_t); - dc_set_out_signal_val(p_cfg->point.p_st[j].saddr, p->p_value); } } @@ -174,11 +172,6 @@ LOCAL void mms_data_back(stru_mms_m_out_value *p) { if(strcmp(p_cfg->point.p_mx[j].saddr, p->name) == 0 && NULL != p_cfg->point.p_mx[j].value.p_val[0]) { - // if(p->type == MMS_FLOAT) - // *(float *)p_cfg->point.p_mx[j].value.p_val[0] = MY_GET_DATA_WITH_TYPE(p->p_value, float); - // else if(p->type == MMS_INTEGER) - // *(int32_t *)p_cfg->point.p_mx[j].value.p_val[0] = MY_GET_DATA_WITH_TYPE(p->p_value, int32_t); - dc_set_out_signal_val(p_cfg->point.p_mx[j].saddr, p->p_value); } } @@ -191,6 +184,13 @@ LOCAL void mms_data_back(stru_mms_m_out_value *p) uint8_t local_type = (it_ao != g_mms_m_type_to_local_type.end()) ? it_ao->second : 0; if(local_type != 0) { + std::string set_val = dc_get_signal_val(p->p_value, local_type); + std::string param_val = dc_get_signal_val(p_cfg->point.p_ao[j].value.p_val[0], local_type); + if(set_val == param_val) + { + continue; + } + dc_signal_ao_set_val_without_check(p_cfg->point.p_ao[j].saddr, local_type, p->p_value); } } @@ -204,6 +204,13 @@ LOCAL void mms_data_back(stru_mms_m_out_value *p) uint8_t local_type = (it_param != g_mms_m_type_to_local_type.end()) ? it_param->second : 0; if(local_type != 0) { + std::string set_val = dc_get_signal_val(p->p_value, local_type); + std::string param_val = dc_get_signal_val(p_cfg->point.p_param[j].value.p_val[p->set_zone - 1], local_type); + if(set_val == param_val) + { + continue; + } + printf("mms_data_back: set param %s zone=%d\n", p_cfg->point.p_param[j].saddr, p->set_zone); dc_signal_param_set_val_without_check(p_cfg->point.p_param[j].saddr, local_type, p->set_zone - 1, p->p_value); } @@ -586,7 +593,7 @@ int iec61850m_init() return -1; } - show_cfg(*p_info->p_cfg); + // show_cfg(*p_info->p_cfg); if(0 != iec61850m_signal_init(*p_info->p_cfg)) { diff --git a/src/system/libiec61850s/src/iec61850s.cpp b/src/system/libiec61850s/src/iec61850s.cpp index 79a881d..86ac1ef 100644 --- a/src/system/libiec61850s/src/iec61850s.cpp +++ b/src/system/libiec61850s/src/iec61850s.cpp @@ -353,7 +353,7 @@ int iec61850s_signals_init() return -1; } - show_mms_xml(*p_cfg); + // show_mms_xml(*p_cfg); if(0 != iec61850s_st_signals_init(p_cfg->vec_st)) {