#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__