This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/application/inc/params.h

433 lines
13 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __PARAMS_H__
#define __PARAMS_H__
#include "lib.h"
#include "main.h"
#include "hart_common_tables_specification.h"
#include "wl_flash.h"
#include "storage.h"
#define CURRENT_VERSION (DW_VER << 16 | HW_VER << 8 | SW_VER)
// 存储相关的地址定义
#define BUSINESS_ADDRESS_PAGE 1
#define CALIB_PARAM_ADDRESS_START (BUSINESS_ADDRESS_PAGE * FM24_PAGE_SIZE) // 校准参数存储的基础地址 需要1页
#define MODE_PARAMS_ADDRESS_START CALIB_PARAM_ADDRESS_START + FM24_PAGE_SIZE // 模式参数存储的基础地址 需要1页
#define SPECIFICATION_TABLE_DATA_ADDRESS_START MODE_PARAMS_ADDRESS_START + FM24_PAGE_SIZE // 规格表数据存储的基础地址 需要3页
#define HART_ADDRESS_PAGE 10 // HART 信息存储起始页
#define HART_PARAMS_ADDRESS_START (HART_ADDRESS_PAGE * FM24_PAGE_SIZE) // HART 信息存储的基础地址 需要2页
#define HART_VARIABLE_ADDRESS_START HART_PARAMS_ADDRESS_START + 2 * FM24_PAGE_SIZE // HART 变量存储的基础地址 需要4页
#define HART_CONSTANT_ADDRESS_START HART_VARIABLE_ADDRESS_START + 4 * FM24_PAGE_SIZE // HART 常量存储的基础地址 需要6页
#define HART_STANDARD_VARIABLE_ADDRESS_START HART_CONSTANT_ADDRESS_START + 6 * FM24_PAGE_SIZE // HART 标准变量存储的基础地址 需要1页
typedef enum
{
// PARAMS_CRC_KEY_NOINIT_DATA, // 非初始化数据
// PARAMS_CRC_KEY_CALIBPARA_PARAM, // 校准参数
// PARAMS_CRC_KEY_DIAGNOSIS_RESULT, // 诊断结果
// PARAMS_CRC_KEY_SPECIFICATION_TABLE, // 规格表
PARAMS_CRC_KEY_DEVICE, // 设备信息
PARAMS_CRC_KEY_REAL_TIME_DATA, // 实时数据
PARAMS_CRC_KEY_MODE_PARAM, // 模式参数:控制算法自定义参数
PARAMS_CRC_KEY_MAX,
} params_crc_key_e;
/// 定位器型号
typedef enum
{
POSITIONER_MODEL_GPS2000 = EXTENDED_DEVICE_TYPE_GSDT_GPS2000,
POSITIONER_MODEL_GPS3000 = EXTENDED_DEVICE_TYPE_GSDT_GPS3000,
POSITIONER_MODEL_MAX,
} positioner_model_e;
/// 输出开关触发逻辑
typedef enum
{
// TRIGGER_LOGIC_DISABLE = 0, // 禁用 无效,默认低电平
TRIGGER_LOGIC_BELOW = 0, // 低电平
TRIGGER_LOGIC_ABOVE = 1, // 高电平
} swo_logic_e;
/// 阀门尺寸
typedef enum
{
VALUE_SIZE_OTHER = 0, // 其它
VALUE_SIZE_34,
VALUE_SIZE_45,
VALUE_SIZE_56,
} valve_size_e;
/// 阀门行程范围
typedef enum
{
VALUE_TRAVEL_OTHER = 0, // 其它
VALUE_TRAVEL_16,
VALUE_TRAVEL_25,
VALUE_TRAVEL_40,
VALUE_TRAVEL_60,
VALUE_TRAVEL_100,
VALUE_TRAVEL_130,
VALUE_TRAVEL_160,
VALUE_TRAVEL_200,
VALUE_TRAVEL_ANGLE_60,
VALUE_TRAVEL_ANGLE_90,
} value_travel_e;
/// 执行机构行程类型
typedef enum
{
TRAVEL_TYPE_STRAIGHT = 0x00, // 直行程
TRAVEL_TYPE_ANGULAR = 0x01, // 角行程
} value_travel_type_e;
/// 执行机构作用类型
typedef enum
{
DOUBLE_ACTING_WITH_SPRING = 3, // 双作用带弹簧气缸
DOUBLE_ACTING_NO_SPRING = 1, // 双作用不带弹簧气缸
SINGLE_ACTING_WITH_SPRING = 2, // 单作用带弹簧气缸
SINGLE_ACTING_DIAPHRAGM = 0, // 单作用弹簧薄膜式
} value_relay_type_e;
/// 定位器作用方向
typedef enum
{
CONTROLLER_ACTING_NORMAL = 0, // 正作用, I增大 -> 输出气压增大
CONTROLLER_ACTING_REVERSE = 1, // 反作用, I增大 -> 输出气压减小
} dev_driver_dir_e;
/// 定位器安装方向
typedef enum
{
CONTROLLER_INSTALL_REVERSE = 0, // 反向安装磁条反馈ADC值上小下大
CONTROLLER_INSTALL_NORMAL = 1, // 正向安装磁条反馈ADC值上大下小
} dev_install_dir_e;
/// 设备授权等级
typedef enum
{
DEV_USFEATURES_AC = 129,
DEV_USFEATURES_HC = 561,
DEV_USFEATURES_AD = 573,
DEV_USFEATURES_PD = 575,
} dev_usfeatures_e;
/// LCD显示方向
typedef enum
{
DISP_DIR_0 = 0,
DISP_DIR_180 = 1,
} display_direction_e;
/// LCD显示语言
typedef enum
{
CHINESE = 0,
ENGLISH = 1,
LANGUAGE_MAX,
} display_language_e;
/// 行程显示方式
typedef enum
{
TRAVEL_DISPLAY_NORMAL = 0, // 正向显示,与阀门开度一致
TRAVEL_DISPLAY_REVERSE = 1, // 反向显示,与阀门开度相反
} display_travel_mode_e;
/// 行程单位
typedef enum
{
TRAVEL_UNIT_PRE = 0, // 百分比
TRAVEL_UNIT_MM = 1, // 毫米
TRAVEL_UNIT_INCH = 2, // 英寸
TRAVEL_UNIT_ANGLE = 3, // 角度
} travel_unit_e;
/// 力学单位
typedef enum
{
FORCE_UNIT_N = 0, // 牛
FORCE_UNIT_KN = 1, // 千牛
} force_unit_e;
/// 报警处理方式
typedef enum
{
ALARM_HANDLING_CONTINUE = 0, // 不影响阀门动作
ALARM_HANDLING_KEEP = 1, // 阀门位置保持
ALARM_HANDLING_SHUTDOWN = 2, // 停机处理,恢复零功率状态
} alarm_handle_mode_e;
/// 复位处理方式
typedef enum
{
RESET_HANDLING_CONTINUE = 0, // 自动控制
RESET_HANDLING_PAUSE = 1, // 控制阀门到上次位置
} reset_handle_mode_e;
/// PID参数选择
typedef enum
{
ADAPTIVE_PID = 0, // 自适应PID
SELF_PID = 1, // 自定义PID
} pid_index_e;
/// 整定结果
typedef enum
{
TUNED_NONE = 0, // 未整定
TUNED_ONGOING = 1, // 整定中
TUNED_SUCCESS = 2, // 整定成功
TUNED_FAILED = 3, // 整定失败
TUNED_OTHER = 0xff, // 其它错误
} tuned_result_e;
// 气压传感规格
typedef enum
{
PRESSURE_PARAM_S,
PRESSURE_PARAM_A,
PRESSURE_PARAM_B,
PRESSURE_PARAM_MAX,
} pressure_type_e;
/********************************************** 参照Fisher陆续更新 **********************************************/
// 反馈特性
typedef enum
{
SSTEM_19_ARRAY = 0x40,
SSTEM_25_ARRAY = 0x41,
SSTEM_38_ARRAY = 0x42,
SSTEM_50_ARRAY = 0x43,
SSTEM_07_ARRAY = 0x44,
SSTEM_100_ARRAY = 0x46,
SSTEM_110_ARRAY = 0x47,
SSTEM_210_ARRAY = 0x4a,
SSTEM_1_ROLLER_ARRAY = 0x55,
RSHAFT_END_ARRAY = 0x5a,
RSHAFT_1_WINDOW_ARRAY = 0x5f,
RSHAFT_2_WINDOW_ARRAY = 0x61,
DEFAULT_ARRAY = 0x64,
} feedback_char_e;
typedef enum
{
DEFAULT_ARRAY_INDEX = 0,
MAX_ARRAY_INDEX,
} magnet_index_e;
// 电流单位与HART协议保持一致
typedef enum
{
INPUT_UNIT_MA = UNITS_CODE_CURRENT_MA, // 毫安
INPUT_UNIT_PERCENT = UNITS_CODE_ANALYSIS_PERCENT, // 百分比
} input_unit_e;
// 行程特性
typedef enum
{
TRAVEL_CHAR_LINEAR = 0, // 线性
TRAVEL_CHAR_EQUAL = 2, // 等百分比
TRAVEL_CHAR_QUICK_OPEN = 3, // 快开
TRAVEL_CHAR_CUSTOM = 4, // 自定义:两点之间默认线性
} valve_chart_e;
// 压力单位
typedef enum
{
PRESSURE_UNIT_PSI = UNITS_CODE_PRESSURE_PSI,
PRESSURE_UNIT_BAR = UNITS_CODE_PRESSURE_BAR,
PRESSURE_UNIT_KPA = UNITS_CODE_PRESSURE_KPA,
PRESSURE_UNIT_MPA = UNITS_CODE_PRESSURE_MPA,
PRESSURE_UNIT_KGF = UNITS_CODE_PRESSURE_KGCM2,
} press_unit_e;
// 温度单位与HART协议保持一致
typedef enum
{
TEMPERATURE_UNIT_C = UNITS_CODE_TEMPERATURE_CELSIUS, // 摄氏度
TEMPERATURE_UNIT_F = UNITS_CODE_TEMPERATURE_FAHRENHEIT, // 华氏度
} temp_unit_e;
// 仪器模式
typedef enum
{
INST_OS = 0, // 服务外,要修改配置参数时,需要设置为服务外
INST_IS = 1, // 服务内
} inst_mode_e;
// 行程压力选择
typedef enum
{
TRAVEL_CTRL = 0, // 行程控制
TVL_PRESS_AUTO_RST = 1, // 压力控制
SRNSOR_FAULT_BACK = 2, // 传感器故障回退
SENSOR_FAULT_OR_DEVIATED = 3, // 传感器故障或偏差
} travel_press_e;
typedef enum
{
SHUTDOWN_DISABLED,
SHUTDOWN_ENABLED,
} sis_opt_e;
// 控制模式
typedef enum
{
TEST_CTRL_MODE = 0, // 测试 正常运行模式 t
DIGITAL_CTRL_MODE = 2, // 数字 手动控制模式 m
ANALOG_CTRL_MODE = 3, // 模拟 自动控制模式 a
STOP_MODE = 4, // 停机 s
WAIT_MODE = 5, // 待机 w
} control_mode_e;
// 上次整定结果
typedef enum
{
NEVER_HAPPENED, // 未整定过
CAL_SUCCESS, // 整定成功
POWER_LOST, // 整定断电
USER_ABORT, // 用户中断
TIMEOUT, // 整定超时
} auto_cal_status_e;
// 零功率条件
typedef enum
{
VALVE_CLOSE = 0, // 阀门全关(阀门在下面)
VALVE_OPEN = 1, // 阀门全开(阀门在上面)
} zero_power_e;
// 切除/限位选择
typedef enum
{
LLIMIT_HLIMIT = 0, // 下限限位+上限限位
LHARD_HLIMIT = 1, // 下限硬切除+上限限位
LLIMIT_HHARD = 2, // 下限限位+上限硬切除
LHARD_HHARD = 3, // 下限硬切除+上限硬切除
LSOFT_HLIMIT = 5, // 下限软切除+上限限位
LSOFT_HHARD = 7, // 下限软切除+上限硬切除
LLIMIT_HSOFT = 10, // 下限限位+上限软切除
LHARD_HSOFT = 11, // 下限硬切除+上限软切除
LSOFT_HSOFT = 15, // 下限软切除+上限软切除
} cutoff_limit_e;
// 手动/伺服控制
typedef enum
{
ALLOW_SERVO_CTRL = 0, // 允许伺服控制
SUSPEND_SERVO_CTRL = 1, // 暂停伺服控制
} manual_loader_e;
typedef enum
{
TRAVEL_PRESS_DISABLE = 0,
TRAVEL_ENABLE = 1,
PRESS_ENABLE = 2,
TRAVEL_PRESS_ENABLE = 3,
} ui_enable_e;
typedef enum
{
PARAMS_RESET_CALIB_PARAM, // 校准参数
PARAMS_RESET_UDEVICE, // 设备信息
PARAMS_RESET_BOARD_DATA, // 板卡数据
PARAMS_RESET_REAL_TIME_DATA, // 实时数据
PARAMS_RESET_DIAGNOSIS_DATA, // 诊断数据
PARAMS_RESET_MODE_PARAM, // 模式参数
PARAMS_RESET_HART_DATA, // HART数据
PARAMS_RESET_HART_VARIABLE, // HART变量和常量
PARAMS_RESET_SPECIFICATION_TABLE_DATA, // 规格表数据
PARAMS_RESET_ALL, // 上面的全部复位
PARAMS_RESET_PRESSURE_SENSOR, // 压力传感器
} params_reset_e;
typedef enum
{
FORWARD_DIR = 0,
INVERT_DIR = 1,
} invert_feedback_e;
typedef enum
{
RST_DIGITAL = 0x02, // 数字模式
RST_ANALOG = 0x03, // 模拟模式
RST_STOP = 0x04, // 停机模式
RST_WAIT = 0x05, // 待机模式
RST_RESUME_CTRL = 0x06, // 恢复上一次模式
} restart_ctrl_mode_e;
typedef enum
{
RST_OUT_OF_SERVICE = 0,
RST_IN_SERVICE = 1,
RST_RESUME_INST = 2,
} restart_inst_mode_e;
typedef union
{
uint16_t data;
struct
{
uint8_t all : 1;
uint8_t calib_param : 1; // 校准参数 1
uint8_t udevice : 1; // 设备信息 1
uint8_t specification_table_data : 1; // 规格表数据
uint8_t board_data : 1; // 板卡数据
uint8_t real_time_data : 1; // 实时数据 1
uint8_t diagnosis_data : 1; // 诊断数据
uint8_t mode_param : 1; // 模式参数
uint8_t hart_data : 1; // HART数据 1
uint8_t hart_variable : 1; // HART变量 1
uint8_t pressure_sensor : 1; // 压力传感器
} bits;
} params_reset_u;
typedef union
{
uint8_t data;
struct
{
uint8_t value_relay_type : 2; // 执行机构作用类型
uint8_t dev_driver_dir : 1; // 定位器作用方向
uint8_t reserve : 4; // 保留
uint8_t value_travel_type : 1; // 阀门类型
} bits;
} act_style_u;
extern params_reset_u params_reset; ///< 参数复位标志
extern wl_flash_t wl_flash_board_data; ///< 板卡数据
/// 磁条规格 [0]:最小值 [1]:最大值
extern const uint16_t magnet_param_table[MAX_ARRAY_INDEX][2];
/// 气压传感规格 [0]:最小值 [1]:最大值
extern const uint16_t pressure_param_table[PRESSURE_PARAM_MAX][2];
extern storage_t *calib_param_storage;
extern storage_t *specification_table_data_storage;
extern storage_t *mode_params_storage;
extern storage_t *hart_attribute_storage;
extern storage_t *hart_variable_storage;
extern storage_t *hart_constant_storage;
extern storage_t *hart_standard_variable_storage;
extern void params_init(void);
extern void params_factory_settings(void); // 上电第一次初始化
extern void params_restart_inspection(void);
extern void params_restart_set(params_reset_e index); // 复位设置
extern BOOL params_restart_get(params_reset_e index); // 复位获取 true:复位中 false:未复位
extern void hart_attribute_params_restart(void);
extern void hart_attribute_params_map_restart(void);
extern void hart_attribute_params_map_address_update(void);
extern void spec_table_data_mapping(BOOL inverse);
extern void spec_table_data_reset(void);
extern void hart_attribute_storage_init(uint32_t base_addr);
extern void hart_variable_storage_init(uint32_t base_addr);
extern void hart_constant_storage_init(uint32_t base_addr);
extern void hart_standard_variable_storage_init(uint32_t base_addr);
extern void hart_long_addr_set(void); // 设置长地址
extern uint16_t get_pwm_arr_default(void);
#endif // __PARAMS_H__