<修改> 1、拉分支,此分支着重由AI调整。

2、将参数定值的最大最小值、步长、单位等信息统一到参数定值文件中,各模块仅注册短地址与数据地址,其他由数据中心统一操作
This commit is contained in:
ypc 2026-06-05 14:15:27 +08:00
parent c03832a31e
commit 9a6c475575
8 changed files with 3448 additions and 27 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -66,7 +66,7 @@ int dc_signal_in(const std::string &saddr, const std::string &desc, const std::s
int dc_signal_in_with_callback(const std::string &saddr, const std::string &desc, const std::string &link_saddr, void **p_data, out_signal_change_cb cb);
int dc_signal_ao(const std::string &saddr, const std::string &desc, uint8_t data_type, const stru_signal_param &param, uint8_t ctrl_type, void *p_data, void *p_default_data, signal_change_cb cb);
int dc_signal_ao(const std::string &saddr, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void *p_data, void *p_default_data, signal_change_cb cb);
int dc_signal_ao_link_with_callback(const std::string &saddr, void **p_data, signal_change_cb cb);
@ -75,7 +75,7 @@ int dc_signal_ao_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_s
int dc_signal_ao_set_val_without_check(const std::string &saddr, uint8_t data_type, void *p_data);
// 数据中心参数信号注册接口
int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t data_type, const stru_signal_param &param, uint8_t ctrl_type, void **p_data, void **p_default_data, int num, signal_change_cb cb);
int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void **p_data, void **p_default_data, int num, signal_change_cb cb);
// 数据中心参数链接信号接口
int dc_signal_param_link_with_callback(const std::string &saddr, void **p_data, int num, signal_change_cb cb);

View File

@ -4,6 +4,14 @@
#include "dc_signal.h"
#include "myDatacenter.h"
#include <unordered_map>
#define DC_PARAM_PATH "/mnt/RTU/test/file/PARAM/param.xml"
void dc_param_cfg_parse();
void dc_param_cfg_parse();
// 存储参数元数据到中央表dc_param_cfg_parse 在创建信号前调用)
void dc_param_metadata_store(const std::string &saddr, const stru_signal_param &param);
// 按 saddr 查找参数元数据,找到返回 true否则返回 false
bool dc_param_metadata_lookup(const std::string &saddr, stru_signal_param &out_param);

View File

@ -1,6 +1,25 @@
#include "dc_param.h"
#include "tinyxml2.h"
// 中央元数据表(以 saddr 为键,初始化时写入,运行时只读)
static std::unordered_map<std::string, stru_signal_param> g_param_metadata;
void dc_param_metadata_store(const std::string &saddr, const stru_signal_param &param)
{
g_param_metadata[saddr] = param;
}
bool dc_param_metadata_lookup(const std::string &saddr, stru_signal_param &out_param)
{
auto it = g_param_metadata.find(saddr);
if (it != g_param_metadata.end())
{
out_param = it->second;
return true;
}
return false;
}
void dc_param_cfg_parse()
{
using namespace tinyxml2;
@ -75,7 +94,9 @@ void dc_param_cfg_parse()
param.step = step;
param.unit = unit ? std::string(unit) : std::string();
dc_signal_ao(saddr, desc, data_type, param,
// 先存入中央元数据表,再注册信号
dc_param_metadata_store(saddr, param);
dc_signal_ao(saddr, desc, data_type,
SIGNAL_CTRL_TYPE::SBO_NORMAL,
p_data, p_default_data, nullptr);
}
@ -155,7 +176,9 @@ void dc_param_cfg_parse()
param.step = step;
param.unit = unit ? std::string(unit) : std::string();
dc_signal_param(saddr, desc, data_type, param,
// 先存入中央元数据表,再注册信号
dc_param_metadata_store(saddr, param);
dc_signal_param(saddr, desc, data_type,
SIGNAL_CTRL_TYPE::SBO_NORMAL,
vec_p_data.data(), vec_p_default_data.data(), num, nullptr);
}

View File

@ -371,7 +371,25 @@ LOCAL int dc_data_compare(uint8_t data_type, void *p_data, void *p_data2)
return -1;
}
LOCAL bool dc_signal_ao_add_check(stru_signal *p_signal, const std::string &desc, uint8_t data_type, const stru_signal_param &param, uint8_t ctrl_type, void *p_default_data)
// 从中央元数据表查找并设置 signal.param
LOCAL void dc_signal_apply_metadata(stru_signal &signal)
{
stru_signal_param param;
if (dc_param_metadata_lookup(signal.saddr, param))
{
signal.param = param;
}
else
{
signal.param.min = 0.0f;
signal.param.max = 0.0f;
signal.param.step = 0.0f;
signal.param.unit.clear();
}
}
LOCAL bool dc_signal_ao_add_check(stru_signal *p_signal, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void *p_default_data)
{
if(p_signal == nullptr || p_default_data == nullptr)
{
@ -393,10 +411,6 @@ LOCAL bool dc_signal_ao_add_check(stru_signal *p_signal, const std::string &desc
change = true;
}
if(p_signal->param.min != param.min || p_signal->param.max != param.max || p_signal->param.step != param.step || p_signal->param.unit != param.unit)
{
p_signal->param = param;
change = true;
}
if(p_signal->ctrl_type != ctrl_type)
@ -413,7 +427,7 @@ LOCAL bool dc_signal_ao_add_check(stru_signal *p_signal, const std::string &desc
return change;
}
LOCAL bool dc_signal_param_add_check(stru_signal *p_signal, const std::string &desc, uint8_t data_type, const stru_signal_param &param, uint8_t ctrl_type, void **p_default_data, uint8_t num)
LOCAL bool dc_signal_param_add_check(stru_signal *p_signal, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void **p_default_data, uint8_t num)
{
bool change = false;
@ -429,10 +443,6 @@ LOCAL bool dc_signal_param_add_check(stru_signal *p_signal, const std::string &d
change = true;
}
if(p_signal->param.min != param.min || p_signal->param.max != param.max || p_signal->param.step != param.step || p_signal->param.unit != param.unit)
{
p_signal->param = param;
change = true;
}
if(p_signal->ctrl_type != ctrl_type)
@ -1083,7 +1093,7 @@ int dc_signal_in_with_callback(const std::string &saddr, const std::string &desc
return dc_signal_add_to_map(signal, g_datacenter.signal_in);
}
int dc_signal_ao(const std::string &saddr, const std::string &desc, uint8_t data_type, const stru_signal_param &param, uint8_t ctrl_type, void *p_data, void *p_default_data, signal_change_cb cb)
int dc_signal_ao(const std::string &saddr, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void *p_data, void *p_default_data, signal_change_cb cb)
{
if(p_data == nullptr || p_default_data == nullptr)
{
@ -1095,7 +1105,7 @@ int dc_signal_ao(const std::string &saddr, const std::string &desc, uint8_t data
stru_signal *p_signal = dc_find_signal(saddr, g_datacenter.signal_ao);
if(p_signal != nullptr && !p_signal->vec_p_data.empty() && !p_signal->vec_p_default_data.empty() && nullptr != p_signal->vec_p_data[0] && nullptr != p_signal->vec_p_default_data[0])
{
if(true == dc_signal_ao_add_check(p_signal, desc, data_type, param, ctrl_type, p_default_data))
if(true == dc_signal_ao_add_check(p_signal, desc, data_type, ctrl_type, p_default_data))
{
dc_set_param_cfg_change(true);
}
@ -1119,7 +1129,7 @@ int dc_signal_ao(const std::string &saddr, const std::string &desc, uint8_t data
signal.saddr.assign(saddr);
signal.desc.assign(desc);
signal.data_type = data_type;
signal.param = param;
dc_signal_apply_metadata(signal);
signal.ctrl_type = ctrl_type;
dc_signal_add_to_map(signal, g_datacenter.signal_ao);
@ -1263,7 +1273,7 @@ int dc_signal_ao_set_val_without_check(const std::string &saddr, uint8_t data_ty
return -1;
}
int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t data_type, const stru_signal_param &param, uint8_t ctrl_type, void **p_data, void **p_default_data, int data_num, signal_change_cb cb)
int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void **p_data, void **p_default_data, int data_num, signal_change_cb cb)
{
// 先从参数表里解析,调用参数注册
// 程序注册时,从参数表里去查找,同一个信息,使用参数表中的保存的数据值,在线程初始化时,通知所有链接此信号的信号
@ -1289,7 +1299,7 @@ int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t d
if(p_signal != nullptr)
{
// dc_set_signal_val(p_data, data_type, p_signal->p_data);
if(true == dc_signal_param_add_check(p_signal, desc, data_type, param, ctrl_type, p_default_data, data_num))
if(true == dc_signal_param_add_check(p_signal, desc, data_type, ctrl_type, p_default_data, data_num))
{
dc_set_param_cfg_change(true);
}
@ -1329,7 +1339,7 @@ int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t d
signal.saddr.assign(saddr);
signal.desc.assign(desc);
signal.data_type = data_type;
signal.param = param;
dc_signal_apply_metadata(signal);
signal.ctrl_type = ctrl_type;
dc_signal_add_to_map(signal, g_datacenter.signal_param);

View File

@ -417,9 +417,8 @@ LOCAL int iec61850m_ao_signal_init(int num, stru_point_item *p_item)
uint8_t local_type = g_mms_m_type_to_local_type[p->type];
uint8_t ctrl_type = SIGNAL_CTRL_TYPE::DIRECT_NORMAL;
stru_signal_param param = {0};
if(0 != dc_signal_ao(p->saddr, p->desc, local_type, param, ctrl_type, p->value.p_val[0], p->value.p_default[0], iec61850m_signal_ao_change_callback))
if(0 != dc_signal_ao(p->saddr, p->desc, local_type, ctrl_type, p->value.p_val[0], p->value.p_default[0], iec61850m_signal_ao_change_callback))
{
MY_LOG_E("dc_signal_ao failed, saddr %s, desc %s, type %d", p->saddr, p->desc, p->type);
return -1;
@ -445,9 +444,8 @@ LOCAL int iec61850m_param_signal_init(int num, stru_point_item *p_item)
uint8_t local_type = g_mms_m_type_to_local_type[p->type];
uint8_t ctrl_type = SIGNAL_CTRL_TYPE::DIRECT_NORMAL;
stru_signal_param param = {0};
if(0 != dc_signal_param(p->saddr, p->desc, local_type, param, ctrl_type, p->value.p_val, p->value.p_default, MMS_M_MAX_VAL_NUM, iec61850m_signal_param_change_callback))
if(0 != dc_signal_param(p->saddr, p->desc, local_type, ctrl_type, p->value.p_val, p->value.p_default, MMS_M_MAX_VAL_NUM, iec61850m_signal_param_change_callback))
{
MY_LOG_E("dc_signal_param failed, saddr %s, desc %s, type %d", p->saddr, p->desc, p->type);
return -1;

View File

@ -897,8 +897,9 @@ int self_ptl_do_signal_out(stru_app *p_app)
param.max = safeStringToFloat(p_ao->p_param->max);
param.step = safeStringToFloat(p_ao->p_param->step);
param.unit = p_ao->p_param->unit;
dc_param_metadata_store(p_ao->p_param->base.saddr, param);
ret |= dc_signal_ao(p_ao->p_param->base.saddr, p_ao->p_param->base.desc, p_ao->p_param->type, param, SIGNAL_CTRL_TYPE::SBO_NORMAL, p_ao->vec_p_data[0], p_ao->vec_p_default_data[0], self_ptl_signal_change_callback);
ret |= dc_signal_ao(p_ao->p_param->base.saddr, p_ao->p_param->base.desc, p_ao->p_param->type, SIGNAL_CTRL_TYPE::SBO_NORMAL, p_ao->vec_p_data[0], p_ao->vec_p_default_data[0], self_ptl_signal_change_callback);
}
}
@ -917,8 +918,9 @@ int self_ptl_do_signal_out(stru_app *p_app)
param.max = safeStringToFloat(p_param->p_param->max);
param.step = safeStringToFloat(p_param->p_param->step);
param.unit = p_param->p_param->unit;
dc_param_metadata_store(p_param->p_param->base.saddr, param);
ret |= dc_signal_param(p_param->p_param->base.saddr, p_param->p_param->base.desc, p_param->p_param->type, param,
ret |= dc_signal_param(p_param->p_param->base.saddr, p_param->p_param->base.desc, p_param->p_param->type,
SIGNAL_CTRL_TYPE::SBO_NORMAL, p_param->vec_p_data.data(), p_param->vec_p_default_data.data(), p_param->p_param->num, self_ptl_signal_change_callback);
}
}