<修改> 1、调整数据中心接口,参数修改后可以在上位机读取到;2、在上位机修改定值区后,设置参数值放到回调外面,回调中有IedServer_lockDataModel,估计会影响

This commit is contained in:
ypc 2026-06-11 17:30:55 +08:00
parent 3806a32af9
commit 6c9b8e90b1
3 changed files with 44 additions and 8 deletions

View File

@ -217,9 +217,9 @@ LOCAL void *mms_s_run_task(void *parameter)
IedModel *iedModel = (IedModel *)parameter; IedModel *iedModel = (IedModel *)parameter;
while(g_running) while(g_running)
{ {
IedServer_lockDataModel(gp_iedServer); // IedServer_lockDataModel(gp_iedServer);
IedServer_unlockDataModel(gp_iedServer); // IedServer_unlockDataModel(gp_iedServer);
Thread_sleep(100); Thread_sleep(100);

View File

@ -1273,6 +1273,16 @@ int dc_signal_ao_set_val_without_check(const std::string &saddr, uint8_t data_ty
dc_set_signal_val(p_signal->vec_p_data[0], data_type, p_data); dc_set_signal_val(p_signal->vec_p_data[0], data_type, p_data);
dc_set_param_cfg_change(true); dc_set_param_cfg_change(true);
for(auto &entry : p_signal->change_cb_list)
{
if(entry.second)
{
if (entry.first == module_id) continue;
entry.second(saddr, SIGNAL_CTRL_STEP::DIRECT, data_type, 0, p_data);
}
}
return 0; return 0;
} }
else else
@ -1497,6 +1507,16 @@ int dc_signal_param_set_val_without_check(const std::string &saddr, uint8_t data
} }
dc_set_signal_val(p_signal->vec_p_data[setting_zone], data_type, p_data); dc_set_signal_val(p_signal->vec_p_data[setting_zone], data_type, p_data);
dc_set_param_cfg_change(true); dc_set_param_cfg_change(true);
for(auto &entry : p_signal->change_cb_list)
{
if(entry.second != nullptr)
{
if (entry.first == module_id) continue;
entry.second(saddr, SIGNAL_CTRL_STEP::DIRECT, data_type, setting_zone, p_data);
}
}
return 0; return 0;
} }

View File

@ -30,6 +30,24 @@ LOCAL std::vector<stru_mms_s_setting> g_vec_setting = {};
LOCAL std::vector<stru_mms_s_param> g_vec_param = {}; LOCAL std::vector<stru_mms_s_param> g_vec_param = {};
LOCAL mms_s_value_update_cb g_mms_s_value_update_cb = NULL; LOCAL mms_s_value_update_cb g_mms_s_value_update_cb = NULL;
LOCAL std::string g_sg_zone_saddr = "";
LOCAL std::string g_sg_zone_act_sg = "";
LOCAL void check_sg_zone_change()
{
if(g_sg_zone_saddr.empty() || g_sg_zone_act_sg.empty())
{
return;
}
if(g_mms_s_value_update_cb != NULL)
{
g_mms_s_value_update_cb(g_sg_zone_saddr.c_str(), g_sg_zone_act_sg.c_str());
}
g_sg_zone_saddr = "";
g_sg_zone_act_sg = "";
}
LOCAL void iec61850s_sg_change_callback(const char *zone_saddr, int new_act_sg) LOCAL void iec61850s_sg_change_callback(const char *zone_saddr, int new_act_sg)
{ {
@ -62,12 +80,9 @@ LOCAL void iec61850s_sg_change_callback(const char *zone_saddr, int new_act_sg)
return; return;
} }
// /* 同步更新 MMS 服务端模型,使 IEDScout 等客户端能读到最新值 */ /* 同步更新 MMS 服务端模型,使 IEDScout 等客户端能读到最新值 */
// std::string val_str = dc_get_signal_val(p_val, setting.base.type); g_sg_zone_saddr = zone_saddr;
// if(g_mms_s_value_update_cb != NULL) g_sg_zone_act_sg = dc_get_signal_val((void *)&new_act_sg, setting.base.type);
// {
// g_mms_s_value_update_cb(zone_saddr, val_str.c_str());
// }
break; break;
} }
@ -552,6 +567,7 @@ void *app_iec61850s(void *arg)
if(event & EV_TIMER3) if(event & EV_TIMER3)
{ {
check_sg_zone_change();
p_app->run_cnt++; p_app->run_cnt++;
} }
} }