<修改> 1、调整mms的调试打印;2、调整当前数据中心的参数及定值修改,校验数据改变后才提示更新文件;3、在调用写数据接口前,也先校验数据是否发生改变
This commit is contained in:
parent
46f9f4fe76
commit
dbfcf92552
|
|
@ -27,4 +27,7 @@ release/arm/
|
|||
src/system/uart_trans/
|
||||
src/system/FTU_cfg_parse/
|
||||
libiec61850-1.5.3/
|
||||
doc/
|
||||
doc/
|
||||
# claude
|
||||
CLAUDE.md
|
||||
mongoose/
|
||||
|
|
|
|||
|
|
@ -191,5 +191,5 @@ typedef struct
|
|||
|
||||
|
||||
|
||||
|
||||
bool mms_m_dbg_get(stru_mms_m_obj &obj);
|
||||
void *mms_m_get_obj(int app_fd);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<std::string, stru_LDevice>::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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue