<修改> 1、拉分支,此分支着重由AI调整。
2、将参数定值的最大最小值、步长、单位等信息统一到参数定值文件中,各模块仅注册短地址与数据地址,其他由数据中心统一操作
This commit is contained in:
parent
c03832a31e
commit
9a6c475575
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -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_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 ¶m, 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);
|
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_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 ¶m, 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);
|
int dc_signal_param_link_with_callback(const std::string &saddr, void **p_data, int num, signal_change_cb cb);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,14 @@
|
||||||
#include "dc_signal.h"
|
#include "dc_signal.h"
|
||||||
#include "myDatacenter.h"
|
#include "myDatacenter.h"
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#define DC_PARAM_PATH "/mnt/RTU/test/file/PARAM/param.xml"
|
#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 ¶m);
|
||||||
|
|
||||||
|
// 按 saddr 查找参数元数据,找到返回 true,否则返回 false
|
||||||
|
bool dc_param_metadata_lookup(const std::string &saddr, stru_signal_param &out_param);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,25 @@
|
||||||
#include "dc_param.h"
|
#include "dc_param.h"
|
||||||
#include "tinyxml2.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 ¶m)
|
||||||
|
{
|
||||||
|
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()
|
void dc_param_cfg_parse()
|
||||||
{
|
{
|
||||||
using namespace tinyxml2;
|
using namespace tinyxml2;
|
||||||
|
|
@ -75,7 +94,9 @@ void dc_param_cfg_parse()
|
||||||
param.step = step;
|
param.step = step;
|
||||||
param.unit = unit ? std::string(unit) : std::string();
|
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,
|
SIGNAL_CTRL_TYPE::SBO_NORMAL,
|
||||||
p_data, p_default_data, nullptr);
|
p_data, p_default_data, nullptr);
|
||||||
}
|
}
|
||||||
|
|
@ -155,7 +176,9 @@ void dc_param_cfg_parse()
|
||||||
param.step = step;
|
param.step = step;
|
||||||
param.unit = unit ? std::string(unit) : std::string();
|
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,
|
SIGNAL_CTRL_TYPE::SBO_NORMAL,
|
||||||
vec_p_data.data(), vec_p_default_data.data(), num, nullptr);
|
vec_p_data.data(), vec_p_default_data.data(), num, nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -371,7 +371,25 @@ LOCAL int dc_data_compare(uint8_t data_type, void *p_data, void *p_data2)
|
||||||
return -1;
|
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 ¶m, 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)
|
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;
|
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)
|
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;
|
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 ¶m, 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;
|
bool change = false;
|
||||||
|
|
||||||
|
|
@ -429,10 +443,6 @@ LOCAL bool dc_signal_param_add_check(stru_signal *p_signal, const std::string &d
|
||||||
change = true;
|
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)
|
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);
|
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 ¶m, 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)
|
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);
|
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(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);
|
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.saddr.assign(saddr);
|
||||||
signal.desc.assign(desc);
|
signal.desc.assign(desc);
|
||||||
signal.data_type = data_type;
|
signal.data_type = data_type;
|
||||||
signal.param = param;
|
dc_signal_apply_metadata(signal);
|
||||||
signal.ctrl_type = ctrl_type;
|
signal.ctrl_type = ctrl_type;
|
||||||
|
|
||||||
dc_signal_add_to_map(signal, g_datacenter.signal_ao);
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t data_type, const stru_signal_param ¶m, 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)
|
if(p_signal != nullptr)
|
||||||
{
|
{
|
||||||
// dc_set_signal_val(p_data, data_type, p_signal->p_data);
|
// 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);
|
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.saddr.assign(saddr);
|
||||||
signal.desc.assign(desc);
|
signal.desc.assign(desc);
|
||||||
signal.data_type = data_type;
|
signal.data_type = data_type;
|
||||||
signal.param = param;
|
dc_signal_apply_metadata(signal);
|
||||||
signal.ctrl_type = ctrl_type;
|
signal.ctrl_type = ctrl_type;
|
||||||
|
|
||||||
dc_signal_add_to_map(signal, g_datacenter.signal_param);
|
dc_signal_add_to_map(signal, g_datacenter.signal_param);
|
||||||
|
|
|
||||||
|
|
@ -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 local_type = g_mms_m_type_to_local_type[p->type];
|
||||||
uint8_t ctrl_type = SIGNAL_CTRL_TYPE::DIRECT_NORMAL;
|
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);
|
MY_LOG_E("dc_signal_ao failed, saddr %s, desc %s, type %d", p->saddr, p->desc, p->type);
|
||||||
return -1;
|
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 local_type = g_mms_m_type_to_local_type[p->type];
|
||||||
uint8_t ctrl_type = SIGNAL_CTRL_TYPE::DIRECT_NORMAL;
|
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);
|
MY_LOG_E("dc_signal_param failed, saddr %s, desc %s, type %d", p->saddr, p->desc, p->type);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
||||||
|
|
@ -897,8 +897,9 @@ int self_ptl_do_signal_out(stru_app *p_app)
|
||||||
param.max = safeStringToFloat(p_ao->p_param->max);
|
param.max = safeStringToFloat(p_ao->p_param->max);
|
||||||
param.step = safeStringToFloat(p_ao->p_param->step);
|
param.step = safeStringToFloat(p_ao->p_param->step);
|
||||||
param.unit = p_ao->p_param->unit;
|
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.max = safeStringToFloat(p_param->p_param->max);
|
||||||
param.step = safeStringToFloat(p_param->p_param->step);
|
param.step = safeStringToFloat(p_param->p_param->step);
|
||||||
param.unit = p_param->p_param->unit;
|
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);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue