#pragma once #include "myBase.h" #include #include #include // 信号控制枚举 enum SIGNAL_CTRL_TYPE { NONE, // 无 DIRECT_NORMAL, // 直控 SBO_NORMAL, // 选控 }; // 信号控制步骤枚举 enum SIGNAL_CTRL_STEP { READY, // 准备 SELECT, // 选择 DIRECT, // 执行 CANCEL, // 取消 }; // 数据中心信号控制结构体 typedef struct { uint8_t step:2; // 控制步骤 uint8_t type:2; // 控制类型 uint8_t backup:4; // 备用字节 uint8_t data_type; // 数据类型 void *p_data; // 数据指针 }stru_signal_ctrl; typedef struct { float min; // 最小值 float max; // 最大值 float step; // 步长 std::string unit; // 单位 // std::string default_value; // 默认值字符串 // void *p_default; // 默认值 }stru_signal_param; typedef void (*out_signal_change_cb)(std::string saddr, uint8_t data_type, void *p_data, void *p_last_data); typedef void (*signal_change_cb)(std::string saddr, SIGNAL_CTRL_STEP step, uint8_t data_type, uint8_t setting_zone, void *p_data); int datacenter_init(); void datacenter_run_100ms(); void datacenter_run_1000ms(); // 数据中心out信号注册接口 int dc_signal_out(const std::string &saddr, const std::string &desc, uint8_t data_type, void *p_data); int dc_signal_out_with_callback(const std::string &saddr, const std::string &desc, uint8_t data_type, void *p_data, out_signal_change_cb cb); int dc_signal_out_link_with_callback(const std::string &saddr, void **p_data, out_signal_change_cb cb); // 数据中心in信号注册并链接out信号接口 int dc_signal_in(const std::string &saddr, const std::string &desc, const std::string &link_saddr, void **p_data); 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_link_with_callback(const std::string &saddr, void **p_data, signal_change_cb cb); int dc_signal_ao_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, 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, std::vector &vec_p_data, std::vector &vec_p_default_data, signal_change_cb cb); // 数据中心参数链接信号接口 int dc_signal_param_link_with_callback(const std::string &saddr, std::vector &vec_p_data, signal_change_cb cb); // 数据中心参数设置接口 int dc_signal_param_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, uint8_t setting_zone, void *p_data); int dc_signal_param_set_val_without_check(const std::string &saddr, uint8_t data_type, uint8_t setting_zone, void *p_data); // 数据中心遥控信号注册接口 int dc_signal_yk(const std::string &saddr, const std::string &desc, uint8_t data_type, uint8_t ctrl_type, void *p_data, signal_change_cb cb); // 数据中心遥控信号链接接口 int dc_signal_yk_link_with_callback(const std::string &saddr, void **p_data, signal_change_cb cb); // 数据中心遥控控制接口(校验前置,调用前需先调 dc_yk_ctrl_valid) int dc_signal_yk_set_status(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, void *p_data); // 数据中心获取out信号信息接口 int dc_get_out_signal_info(const std::string &saddr, std::string &desc, uint8_t &data_type, void **p_data); // 数据中心获取in信号信息接口 int dc_get_in_signal_info(const std::string &saddr, std::string &desc, uint8_t &data_type, void **p_data); int dc_get_ao_signal_info(const std::string &saddr, std::string &desc, uint8_t &data_type, stru_signal_param *p_param, uint8_t &ctrl_type, void **p_data, void **p_default_data); // 数据中心获取参数信号信息接口 int dc_get_param_signal_info(const std::string &saddr, std::string &desc, uint8_t &data_type, stru_signal_param *p_param, uint8_t &ctrl_type, std::vector *p_vec_p_data, std::vector *p_vec_p_default_data); // 数据中心获取遥控信号信息接口 int dc_get_yk_signal_info(const std::string &saddr, std::string &desc, uint8_t &data_type, uint8_t &ctrl_type, void **p_data); // 数据中心获取信号值字符串接口 std::string dc_get_signal_val(void *p_data, uint8_t data_type); // 数据中心设置信号值字符串接口 int dc_set_out_signal_val(const std::string &saddr, void *set_data); // 数据中心根据数据类型创建数据指针接口 void *dc_create_data_ptr_by_type(uint8_t data_type); void dc_delete_signal_data(void *p_data, uint8_t data_type); // 数据中心根据数据类型ID获取数据类型字符串接口 std::string dc_get_data_type_str_by_id(uint8_t data_type); // 数据中心根据数据类型字符串获取数据类型ID接口 uint8_t dc_get_data_type_id_by_str(const std::string &data_type_str); uint8_t dc_get_data_type_len(uint8_t data_type); void dc_set_signal_val_from_str(void *p_data, uint8_t data_type, const std::string &str); typedef struct { std::string saddr; float fVal; uint32_t sec; uint16_t ms; }stru_disturb_dd; typedef struct { std::string saddr; uint8_t status; uint32_t sec; uint16_t ms; }stru_dc_soe; typedef struct { std::string saddr; float fVal; }stru_dc_disturb_yc; typedef struct { std::vector vec_soe; std::vector vec_disturb_yc; }stru_dc_fault; typedef void (*dc_queue_pop_cb)(void *p_data); int dc_disturb_dd_queue_push(const stru_disturb_dd &dd); int dc_disturb_dd_register_queue_pop(dc_queue_pop_cb cb); int dc_event_queue_push(const stru_dc_soe &soe); int dc_event_register_queue_pop(dc_queue_pop_cb cb); int dc_fault_queue_push(const stru_dc_fault &fault); int dc_fault_register_queue_pop(dc_queue_pop_cb cb);