<修改> 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;
while(g_running)
{
IedServer_lockDataModel(gp_iedServer);
// IedServer_lockDataModel(gp_iedServer);
IedServer_unlockDataModel(gp_iedServer);
// IedServer_unlockDataModel(gp_iedServer);
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_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;
}
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_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;
}

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