增加modbus绑定
This commit is contained in:
91
api/menu.h
91
api/menu.h
@ -131,6 +131,15 @@ MenuErrCode menu_param_set_value(uint16_t param_id, float value);
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_param_get_value(uint16_t param_id, float* value);
|
||||
|
||||
/**
|
||||
* @brief 获取参数类型
|
||||
* @param param_id 参数ID
|
||||
* @param type 输出参数,参数类型
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_param_get_type(uint16_t param_id, MenuParamType* type);
|
||||
|
||||
#endif // MENU_CONFIG_ENABLE_PARAM
|
||||
|
||||
#if MENU_CONFIG_ENABLE_LANG
|
||||
@ -149,4 +158,86 @@ MenuErrCode menu_lang_set_current(uint8_t lang_id);
|
||||
MenuErrCode menu_lang_get_current(uint8_t* lang_id);
|
||||
#endif // MENU_CONFIG_ENABLE_LANG
|
||||
|
||||
/************************** Modbus映射功能(启用时有效) **************************/
|
||||
#if MENU_CONFIG_ENABLE_MODBUS_MAP
|
||||
/**
|
||||
* @brief Modbus寄存器类型(符合Modbus协议标准)
|
||||
*/
|
||||
typedef enum {
|
||||
MODBUS_REG_TYPE_COIL = 0, ///< 线圈(1位,地址范围00001-09999)
|
||||
MODBUS_REG_TYPE_DISCRETE_INPUT, ///< 离散输入(1位,地址范围10001-19999)
|
||||
MODBUS_REG_TYPE_HOLDING_REG, ///< 保持寄存器(16位,地址范围40001-49999)
|
||||
MODBUS_REG_TYPE_INPUT_REG, ///< 输入寄存器(16位,地址范围30001-39999)
|
||||
} ModbusRegType;
|
||||
|
||||
/**
|
||||
* @brief Modbus寄存器读写权限
|
||||
*/
|
||||
typedef enum {
|
||||
MODBUS_PERM_READ_ONLY = 0, ///< 只读(如离散输入、输入寄存器)
|
||||
MODBUS_PERM_WRITE_ONLY, ///< 只写(如线圈)
|
||||
MODBUS_PERM_READ_WRITE, ///< 读写(如保持寄存器)
|
||||
} ModbusPerm;
|
||||
|
||||
/**
|
||||
* @brief Modbus映射结构体(对外只读,内部初始化)
|
||||
*/
|
||||
typedef struct {
|
||||
uint16_t param_id; ///< 关联的参数ID
|
||||
ModbusRegType reg_type; ///< 寄存器类型
|
||||
uint16_t reg_addr; ///< 寄存器起始地址(协议地址,如40001)
|
||||
uint8_t reg_count; ///< 占用寄存器数量(如32位浮点占2个16位寄存器)
|
||||
ModbusPerm perm; ///< 读写权限
|
||||
uint8_t byte_order; ///< 字节序(0-小端,1-大端,2-Modbus标准)
|
||||
} ModbusMap;
|
||||
|
||||
/**
|
||||
* @brief 注册参数与Modbus寄存器的映射关系
|
||||
* @param param_id 参数ID(需已通过menu_param_register注册)
|
||||
* @param reg_type 寄存器类型
|
||||
* @param reg_addr 寄存器起始地址(协议地址,如40001)
|
||||
* @param reg_count 占用寄存器数量(如1:16位,2:32位,4:64位)
|
||||
* @param perm 读写权限
|
||||
* @param byte_order 字节序(可选,默认使用MENU_CONFIG_MODBUS_BYTE_ORDER)
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_modbus_map_register(uint16_t param_id, ModbusRegType reg_type, uint16_t reg_addr, uint8_t reg_count, ModbusPerm perm, uint8_t byte_order);
|
||||
|
||||
/**
|
||||
* @brief 根据参数ID查询Modbus映射关系
|
||||
* @param param_id 参数ID
|
||||
* @param map 输出参数,映射关系结构体
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_modbus_map_query_by_param(uint16_t param_id, ModbusMap* map);
|
||||
|
||||
/**
|
||||
* @brief 根据寄存器地址和类型查询Modbus映射关系
|
||||
* @param reg_type 寄存器类型
|
||||
* @param reg_addr 寄存器地址
|
||||
* @param map 输出参数,映射关系结构体
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_modbus_map_query_by_reg(ModbusRegType reg_type, uint16_t reg_addr, ModbusMap* map);
|
||||
|
||||
/**
|
||||
* @brief 将参数值写入对应的Modbus寄存器(双向转换:参数值→寄存器数据)
|
||||
* @param param_id 参数ID
|
||||
* @param reg_buf 输出参数,寄存器数据缓冲区(需足够大,如32位占2个16位寄存器)
|
||||
* @param buf_len 缓冲区长度(输入),实际写入长度(输出)
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_modbus_map_param_to_reg(uint16_t param_id, uint8_t* reg_buf, uint8_t* buf_len);
|
||||
|
||||
/**
|
||||
* @brief 将Modbus寄存器数据读取到参数值(双向转换:寄存器数据→参数值)
|
||||
* @param param_id 参数ID
|
||||
* @param reg_buf 输入参数,寄存器数据缓冲区
|
||||
* @param buf_len 缓冲区长度
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_modbus_map_reg_to_param(uint16_t param_id, const uint8_t* reg_buf, uint8_t buf_len);
|
||||
|
||||
#endif // MENU_CONFIG_ENABLE_MODBUS_MAP
|
||||
|
||||
#endif // MENU_H
|
||||
@ -64,4 +64,30 @@
|
||||
*/
|
||||
#define MENU_CONFIG_REFRESH_INTERVAL 50
|
||||
|
||||
/************************** Modbus映射功能配置(可裁剪) **************************/
|
||||
/**
|
||||
* @brief 是否启用参数-Modbus寄存器映射功能
|
||||
*/
|
||||
#define MENU_CONFIG_ENABLE_MODBUS_MAP 1
|
||||
|
||||
/**
|
||||
* @brief 最大Modbus映射数量(静态内存,根据项目调整)
|
||||
*/
|
||||
#define MENU_CONFIG_MAX_MODBUS_MAPS 16
|
||||
|
||||
/**
|
||||
* @brief Modbus寄存器地址最大值(根据实际Modbus从站配置)
|
||||
*/
|
||||
#define MENU_CONFIG_MODBUS_MAX_ADDR 0x0FFF
|
||||
|
||||
/**
|
||||
* @brief 默认Modbus字节序(0-小端,1-大端,2-字小端字节大端(Modbus标准))
|
||||
*/
|
||||
#define MENU_CONFIG_MODBUS_BYTE_ORDER 2
|
||||
|
||||
/**
|
||||
* @brief 是否启用Modbus映射权限校验(与参数权限联动)
|
||||
*/
|
||||
#define MENU_CONFIG_MODBUS_PERMISSION 1
|
||||
|
||||
#endif // MENU_CONFIG_H
|
||||
Reference in New Issue
Block a user