763 lines
31 KiB
C
763 lines
31 KiB
C
#ifndef __ENTITY_H__
|
||
#define __ENTITY_H__
|
||
#include "lib.h"
|
||
#include "adcs.h"
|
||
#include "pid.h"
|
||
#include "params.h"
|
||
#include "hart.h"
|
||
#include "pdctrl.h"
|
||
#include "mode.h"
|
||
#include "app_hart.h"
|
||
#include "params.h"
|
||
|
||
// 注:1. 板子正常电流在2.5ma左右,在超频时会有所增加,但不会超过4ma,如果超过4ma,说明板子有问题,需要检查是否短路
|
||
|
||
#define DEBUG_ENABLE TRUE ///< 是否启用调试,正式发布时请关闭。使能下:蓝牙发送调试数据
|
||
#define CPU_ENCRYPT_ENABLE FALSE ///< 是否启用加密 !没有验证,暂时不开启
|
||
#define LCD_DESIGN FALSE ///< 是否运行LCD设计,TRUE模式下程序会跳过一些初始化操作,直接进入LCD设计模式
|
||
#define HART_SOFTWARE_TEST_ENABLE FALSE ///< HART软件测试模式,用于中科博微测试
|
||
#define HART_HARDWARE_TEST_ENABLE FALSE ///< HART硬件测试模式,用于中科博微测试
|
||
|
||
///< 设备版本 1个字节 当前设备基于SMT32L476基础上开发
|
||
#define DW_VER 2
|
||
///< 硬件版本号 1个字节 硬件修订
|
||
#define HW_VER 5
|
||
///< 软件版本号 1个字节 软件修订
|
||
#define SW_VER 22
|
||
|
||
#define HART_VERSION HART_PROTOCOL_VERSION_7 ///< HART协议版本号
|
||
#define HART_WRITE_MAX_COUNT 3 ///< HART写入最大次数
|
||
#define CPU_VREF 2.5f ///< CPU基准电压
|
||
#define CPU_VREF_OFFSET 0.3f ///< CPU基准电压偏差
|
||
#define CPU_VREF_RUN_MIN (CPU_VREF - 0.1f) ///< CPU运行最小电压
|
||
#define CPU_VREF_RUN_MAX (CPU_VREF + 0.1f) ///< CPU运行最大电压
|
||
#define CPU_UGAGE_MAX 90.0f ///< CPU使用率最大值
|
||
#define MEM_UGAGE_MAX 90.0f ///< 内存使用率最大值
|
||
|
||
#define POSITION_FEEDBACK_MAX 3500 ///< 位置反馈最大值
|
||
#define POSITION_FEEDBACK_MIN 600 ///< 位置反馈最小值
|
||
#define POSITION_FEEDBACK_CENTER 2048 ///< 位置反馈中心偏移量
|
||
#define POSITION_FEEDBACK_CENTER_OFFSER 100 ///< 位置反馈中心偏移量
|
||
|
||
#define IP_CURRENT_MAX 2.0f ///< IP电流最大值
|
||
#define IP_VOL_OFFSET 0.5f ///< IP电压偏差(理论输出与实际输出差值)
|
||
#define BOARD_START_CURRENT_MAX 2.0f ///< 板子启动最大电流,可以运行加速
|
||
#define LOOP_CURRENT_MIN 4.0f ///< 输入模拟电流最小值
|
||
#define LOOP_CURRENT_MAX 20.0f ///< 输入模拟电流最大值
|
||
#define LOOP_CURRENT_OFFSET 0.05f ///< 输入模拟电流偏差
|
||
#define INPUT_CURRENT_RUN 3.5f ///< 输入电流运行,达到这个电流程序才启动
|
||
#define SYSTEM_CLOCK_HIGHT_CURRENT_MIN 3.8f ///< 系统高频运行的最低启动电流,瞬间被降低到以下需要能够恢复,外置存储才能加速写入;
|
||
#define INPUT_CURRENT_MIN_UART 3.8f ///< HART UART 输入电流下限3.8mA
|
||
#define FAL_WRITE_CURRENT 3.8f ///< fal写入最小输入电流
|
||
#define GUI_RUN_CURRENT 3.8f ///< gui运行最小输入电流
|
||
#define GUI_HIGHT_CURRENT_MIN 4.0f ///< GUI高频运行的最低电流
|
||
#define BLE_CURRENT_WORK 7.5f ///< 蓝牙启动工作电流
|
||
#define LOOP_TUNE_CURRENT 8.0f ///< 自整定最小输入电流
|
||
|
||
#define SYSTEM_CLOCK_HIGHT 11059200U ///< 系统高频运行的时钟
|
||
#define SYSTEM_HART_CLOCK 460.8f
|
||
|
||
#define TEMP_MIN -40.0f ///< 温度最低-40℃
|
||
#define TEMP_MAX 85.0f ///< 温度最高85℃
|
||
#define WORK_HOURS_MAX (24 * 365 * 10) ///< 最大工作时间24小时*365天*10年 = 87600小时
|
||
|
||
#define PRESS_MAX 400.0f ///< 气源压力上限
|
||
#define PRESS_MIN 200.0f ///< 气源压力下限
|
||
|
||
#define LCD_WORK_TEMP_MIN -20.0f ///< LCD最低工作稳定
|
||
#define LCD_WORK_TEMP_MAX 70.0f ///< LCD最高工作稳定
|
||
#define BLE_WORK_TEMP_MIN -40.0f ///< 蓝牙最低工作稳定
|
||
#define BLE_WORK_TEMP_MAX 80.0f ///< 蓝牙最高工作稳定
|
||
#define BAROMETER_MAX 10 ///< 气压表最大值
|
||
|
||
#define DESCRIPTOR "GSDT"
|
||
#define SELF_VCHART_LEN 21 ///< 自定义阀门特性长度
|
||
#define VALVE_SERIAL_NUM_LEN 16 ///< 阀门序列号长度
|
||
#define INST_SERIAL_NUM_LEN 16 ///< 定位器序列号长度(仪表序列号长度)
|
||
#define MAN_SERIAL_NUM_LEN 16 ///< 制造信息序列号
|
||
#define OPERATOR_NAME_LEN HART_PACKED25_LEN ///< 操作员姓名长度
|
||
#define PASSWORD_LEN 4 ///< LCD主菜单页面进入密码长度
|
||
#define PST_PROHIBIT_DETAIL_LEN 6 ///< 部分行程测试故障信息长度
|
||
#define MA_TO_PERCENT (100.0 / (LOOP_CURRENT_MAX - LOOP_CURRENT_MIN)) ///< 1毫安占百分百的比例 6.25%
|
||
#define MA_TO_PERCENT_01 (MA_TO_PERCENT / 10) ///< 0.1毫安占百分百的比例 0.625%
|
||
#define MA_TO_PERCENT_005 (MA_TO_PERCENT / 20) ///< 0.05毫安占百分百的比例 0.3125%
|
||
#define MIN_TARGET_PERCENT -25.0f // 最小目标百分比
|
||
#define MAX_TARGET_PERCENT 125.0f // 最大目标百分比
|
||
|
||
#define NOINIT_NORESET_FLAG (0x0520) ///< 无初始化标志
|
||
|
||
/**
|
||
*
|
||
STM32L476xx devices feature up to 1 Mbyte of embedded Flash memory available for
|
||
storing programs and data. The Flash memory is divided into two banks allowing read while-write operations. This feature allows to perform a read operation from one bank while
|
||
an erase or program operation is performed to the other bank. The dual bank boot is also
|
||
supported. Each bank contains 256 pages of 2 Kbyte
|
||
*/
|
||
|
||
/**
|
||
* 板卡信息数据管理
|
||
*/
|
||
#define BOARD_DATA_START_ADDRESS (257 * LL_FLASH_PAGE_SIZE)
|
||
#define BOARD_DATA_PAGE_NUM 1
|
||
#define BOARD_DATA_END_ADDRESS (BOARD_DATA_START_ADDRESS + BOARD_DATA_PAGE_NUM * LL_FLASH_PAGE_SIZE) ///< 默认的board存储结束地址
|
||
|
||
/**
|
||
* ADC通道定义: 主频4、分频系数8,根据公式 TCONV(转换时间) = (采样时间 + 12.5 个周期)/(主频/ADC分频系数) 计算每个通道单个采集时间
|
||
* ADC_LOOP_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_PSB_CHANNEL: 12.5+12.5=105个周期,25/(4/8)=50us
|
||
* ADC_BP_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_IPSB_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_NTC_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_VIP_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_DCDC_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_BPA_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
* ADC_BPB_CHANNEL: 12.5+12.5=25个周期,25/(4/8)=50us
|
||
*
|
||
* 通道采集数量为30个,单个采集时间为50us,总共采集时间为400*50us = 20000us
|
||
*/
|
||
typedef enum
|
||
{
|
||
ADC_LOOP_CHANNEL = 0, ///< IN5 输入电流ADC通道
|
||
ADC_PSB_CHANNEL, ///< IN6 阀位反馈ADC通道
|
||
ADC_BP_CHANNEL, ///< IN7 压力传感器ADC通道
|
||
ADC_IPSB_CHANNEL, ///< IN8 内部I/P位置电压(小回路)
|
||
ADC_NTC_CHANNEL, ///< IN9 温度ADC电压
|
||
ADC_VIP_CHANNEL, ///< IN11 I/P输出电流
|
||
ADC_DCDC_CHANNEL, ///< IN12 DCDC检测通道
|
||
ADC_BPA_CHANNEL, ///< IN13 A路压力
|
||
ADC_BPB_CHANNEL, ///< IN14 B路压力
|
||
ADC_VDD_CHANNEL, ///< IN16 VDD电压
|
||
ADC_TEMP_CHANNEL, ///< 内部参考温度
|
||
ADC_INVREF_CHANNEL, ///< 内部参考电压
|
||
|
||
///< 下面的定义和ADC中的存储没有关系
|
||
ADC_FLOW, ///< 流量传感器
|
||
ADC1_MAX, ///< ADC1通道最大数量
|
||
} adc1_channel_e;
|
||
|
||
/**
|
||
* ADC通道定义: 主频4、分频系数8,根据公式 TCONV(转换时间) = (采样时间 + 12.5 个周期)/(主频/ADC分频系数) 计算每个通道单个采集时间
|
||
* ADC2_LOOP_CHANNEL: 12.5+12.5=25个周期,25/(4/8)= 50us
|
||
* ADC2_PSB_CHANNEL: 12.5+12.5=25个周期,25/(4/8)= 50us
|
||
* 通道采集数量为999个,单个采集时间为50us,总共采集时间为999*50 = 49950us
|
||
*/
|
||
typedef enum
|
||
{
|
||
ADC2_MAX,
|
||
} adc2_channel_e;
|
||
|
||
///< 校准参数信息
|
||
typedef enum
|
||
{
|
||
CALIBPARA_LOOP = 0, ///< 4~20mA采集校准参数
|
||
CALIBPARA_PSB = 1, ///< 位置反馈校准参数
|
||
CALIBPARA_PS = 2, ///< 气源压力校准参数
|
||
CALIBPARA_PA = 3, ///< A输出压力校准参数
|
||
CALIBPARA_PB = 4, ///< B输出压力校准参数
|
||
CALIBPARA_IPSB = 5, ///< 小回路校准参数
|
||
CALIBPARA_VIP = 6, ///< 4~20mA输出校准参数
|
||
CALIBPARA_MAX,
|
||
} calibration_e;
|
||
|
||
///< 任务流程状态机
|
||
typedef enum
|
||
{
|
||
FLOW_EVENT_NORMAL, ///< 正常任务流程
|
||
FLOW_EVENT_DIAGNOSIS, ///< 诊断任务流程
|
||
} flow_event_e;
|
||
|
||
// 自定义特性表:每个点代表一个行程目标位置,以行程范围的百分比表示;响应的设定点以相对设定值的百分比来表示
|
||
typedef struct
|
||
{
|
||
uint8_t points;
|
||
uint16_t setpoint[SELF_VCHART_LEN]; ///< 设定点 计算公式100*(值-2048)/8192
|
||
uint16_t value[SELF_VCHART_LEN]; // 行程目标位置 计算公式100*(值-2048)/8192
|
||
} custom_property_table_t;
|
||
|
||
////< 参数校准
|
||
typedef struct
|
||
{
|
||
BOOL is_calibration; ///< 是否校准
|
||
int16_t offset; ///< 偏移
|
||
int16_t span; ///< 跨度
|
||
uint16_t original_adc_value[2]; ///< ADC值
|
||
float32 min; ///< 最小值,用作分子
|
||
float32 max; ///< 最大值,用作分子
|
||
float32 slope; ///< 斜率
|
||
uint32_t crc; ///< CRC校验
|
||
} calib_param_t;
|
||
|
||
////< 校准记录
|
||
typedef struct
|
||
{
|
||
uint32_t operation_time; ///< 时间 4字节
|
||
uint8_t control_byte; ///< 控制字节
|
||
uint8_t operator[OPERATOR_NAME_LEN]; ///< 人员 25字节
|
||
} calib_record_t;
|
||
|
||
////< 设备基础参数
|
||
typedef struct
|
||
{
|
||
///< 定位器硬件版本号
|
||
uint8_t dev_hw_version;
|
||
///< 定位器软件版本号
|
||
uint8_t dev_sw_version;
|
||
///< 定位器算法模式 详见:mode_algorithm_e
|
||
uint8_t dev_algorithm_mode;
|
||
///< 执行机构尺寸
|
||
uint8_t valve_size;
|
||
///< 执行机构行程
|
||
uint8_t value_travel;
|
||
///< 自定义执行机构行程
|
||
uint8_t self_value_travel;
|
||
///< 写入保护禁用/使能
|
||
uint8_t write_protect_enable;
|
||
///< 增速器禁用/使能
|
||
uint8_t speed_increaser_enable;
|
||
///< 快排阀禁用/使能
|
||
uint8_t quick_exhaust_enable;
|
||
///< 无线通讯禁用/使能
|
||
uint8_t wireless_enable;
|
||
///< PWM输出电流禁用/使能,外部输出4-20mA电流
|
||
uint8_t output_current_enable;
|
||
///< LCD显示方向:0/180
|
||
uint8_t display_direction;
|
||
///< LCD显示语言
|
||
uint8_t display_language;
|
||
///< 行程百分比显示方式
|
||
///< 0 = 正向显示,与阀门开度一致
|
||
///< 1 = 反向显示,与阀门开度相反
|
||
uint8_t display_travel_mode;
|
||
///< 报警处理方式
|
||
uint8_t alarm_handle_mode;
|
||
///< 复位处理方式
|
||
uint8_t reset_handle_mode;
|
||
///< 力学单位(摩擦力/弹簧力)
|
||
uint8_t force_unit;
|
||
///< 信号切除禁用/使能
|
||
uint8_t travel_cut_enable;
|
||
///< 分程控制禁用/使能
|
||
uint8_t part_travel_enable;
|
||
///< 整定标志 0:未整定,1:整定中,2:整定成功,3:整定失败。这个作为中间变量和FISHER的上一次整定结果做映射关系
|
||
uint8_t tuned_flag;
|
||
///< 整定错误码 mode_adjust_error_e,tuned_flag未3时有效
|
||
uint8_t tuned_err_code;
|
||
///< PID参数选择,0 = 自适应,1 = 自定义
|
||
uint8_t pid_index;
|
||
///< 定位器型号(仪表型号)
|
||
uint16_t dev_model;
|
||
///< 设备授权等级
|
||
uint16_t dev_usfeatures;
|
||
///< 行程偏差报警等待时间(秒)(偏差超出范围的持续时间上限)
|
||
uint16_t travel_error_time;
|
||
///< 阀门全开时间
|
||
uint16_t all_open_time;
|
||
///< 阀门全关时间
|
||
uint16_t all_close_time;
|
||
///< 阀门0位置行程反馈ADC值
|
||
uint16_t pos0_travel_vol;
|
||
///< 阀门100位置行程反馈ADC值
|
||
uint16_t pos100_travel_vol;
|
||
///< 阀门0位置小回路反馈ADC值
|
||
uint16_t pos0_minor_vol;
|
||
///< 阀门100位置小回路反馈ADC值
|
||
uint16_t pos100_minor_vol;
|
||
///< 阀门0位置A路气压反馈ADC值
|
||
uint16_t pos0_press_a_vol;
|
||
///< 阀门100位置A路气压反馈ADC值
|
||
uint16_t pos100_press_a_vol;
|
||
///< 阀门0位置B路气压反馈ADC值
|
||
uint16_t pos0_press_b_vol;
|
||
///< 阀门100位置B路气压反馈ADC值
|
||
uint16_t pos100_press_b_vol;
|
||
///< 驱动阀门动作所需上限值
|
||
uint16_t output_max;
|
||
///< 驱动阀门动作所需下限值
|
||
uint16_t output_min;
|
||
// ///< PWM输出电流校验4ma采样值
|
||
// uint16_t output_4ma_duty;
|
||
// ///< PWM输出电流标定20ma采样值
|
||
// uint16_t output_20ma_duty;
|
||
///< 输入电流ADC原始值
|
||
uint16_t input_raw;
|
||
///< 气源压力ADC原始值
|
||
uint16_t press_s_raw;
|
||
///< A路压力ADC原始值
|
||
uint16_t press_a_raw;
|
||
///< B路压力ADC原始值
|
||
uint16_t press_b_raw;
|
||
///< 记录存储间隔时间(秒) 实时数据是I2C存储,间隔时间不宜太短,建议大于30秒
|
||
uint16_t save_cycle;
|
||
///< 定位器版本号
|
||
uint32_t dev_version;
|
||
///< 摩擦力范围上限
|
||
float32 friction_upper;
|
||
///< 摩擦力范围下限
|
||
float32 friction_lower;
|
||
///< 弹簧力范围上限
|
||
float32 elasticity_upper;
|
||
///< 弹簧力范围下限
|
||
float32 elasticity_lower;
|
||
///< 行程报警死区:行程回归超过死区,认为回归正常范围
|
||
float32 travel_alert_dead;
|
||
///< 分程控制下限
|
||
float32 part_travel_lower;
|
||
///< 分程控制上限
|
||
float32 part_travel_upper;
|
||
///< 累计行程死区:行程超过累计行程死区时,计算累计行程
|
||
float32 travel_sum_dead;
|
||
///< 动作次数死区:行程超过动作次数死区时,计算动作次数
|
||
float32 act_sum_dead;
|
||
///< 参考电压
|
||
float32 vref;
|
||
///< 阀门打开(上行)变化速率 (%/秒),如需在5秒钟左右移动100%行程,请将其设置为 20 [%/sec]
|
||
float32 travel_rate_open;
|
||
///< 阀门关闭(下行)变化速率 (%/秒),如需在5秒钟左右移动100%行程,请将其设置为 20 [%/sec]
|
||
float32 travel_rate_close;
|
||
///< 自定义PID参数
|
||
float32 spid_kp;
|
||
float32 spid_ki;
|
||
float32 spid_kd;
|
||
float32 spid_dead;
|
||
///< 纠正系统误差造成的影响,作用于死区,比如检测出系统偏差为0.2%,则将其设置为0.2%,算法系统内部自动处理
|
||
float32 deviation;
|
||
///< 输出开关触发逻辑
|
||
uint8_t swo_logic[2];
|
||
///< 阀门序列号
|
||
uint8_t valve_serial_num[VALVE_SERIAL_NUM_LEN];
|
||
///< 定位器序列号(仪表序列号)
|
||
uint8_t dev_serial_num[INST_SERIAL_NUM_LEN];
|
||
///< 制造信息序列号
|
||
uint8_t man_info_serial_num[MAN_SERIAL_NUM_LEN];
|
||
///< 制造方案序列号
|
||
uint8_t man_scheme_serial_num[MAN_SERIAL_NUM_LEN];
|
||
///< LCD主菜单页面进入密码长度
|
||
uint8_t menus_main_password[PASSWORD_LEN];
|
||
///< 输出开关触发位置
|
||
float32 swo_value[2];
|
||
///< 自定义阀门特性
|
||
custom_property_table_t custom_property_table;
|
||
/********************************************** 参照Fisher陆续更新 **********************************************/
|
||
///< 反馈特性(磁条规格)
|
||
uint8_t feedback_char; ///< 取值范围 feedback_char_e
|
||
///< 电流单位
|
||
uint8_t input_unit; ///< 取值范围 input_unit_e
|
||
///< 行程特性
|
||
uint8_t travel_char; ///< 取值范围 valve_chart_e
|
||
///< 执行机构类型
|
||
act_style_u act_style; ///< 取值范围 act_style_u
|
||
///< 压力单位
|
||
uint8_t press_unit;
|
||
///< 温度单位
|
||
uint8_t temp_unit;
|
||
///< 仪器模式
|
||
uint8_t inst_mode; ///< 取值范围 inst_mode_e
|
||
///< 行程压力选择
|
||
uint8_t travel_press_select; ///< 取值范围 travel_press_e
|
||
///< 上次整定结果
|
||
uint8_t auto_cal_status; ///< 取值范围 auto_cal_status_e
|
||
///< 控制模式
|
||
uint8_t control_mode; ///< 取值范围 control_mode_e
|
||
///< 零功率条件(阀门气开气关类型)
|
||
uint8_t zero_power_condition; ///< 取值范围 zero_power_e
|
||
///< 切除/限位选择
|
||
uint8_t cutoff_limit_select; ///< 取值范围 cutoff_limit_e
|
||
///< 手动/伺服控制
|
||
uint8_t manual_loader; ///< 取值范围 manual_loader_e
|
||
///< 通讯超时时间
|
||
uint8_t comm_timeout;
|
||
///< 反向反馈(定位器安装方向)
|
||
uint8_t invert_feedback;
|
||
///< 积分控制使能
|
||
uint8_t comp_mode; ///< 取值范围 ui_enable_e
|
||
///< 压力传感器使能
|
||
uint8_t press_sensor_enable;
|
||
///< 自动校准按钮
|
||
uint8_t autocal_btn;
|
||
///< 重启仪器模式
|
||
uint8_t restart_inst_mode; ///< 取值范围 restart_inst_mode_e
|
||
///< 重新启动控制模式
|
||
uint8_t restart_ctrl_mode; ///< 取值范围 restart_ctrl_mode_e
|
||
///< 轮询地址
|
||
uint8_t polling_addr;
|
||
///< 警报记录使能
|
||
uint8_t aer_config;
|
||
///< 输出压力限制使能
|
||
uint8_t output_press_limit_enable;
|
||
///< 行程单位
|
||
uint8_t travel_units;
|
||
///< 位置变送器状态
|
||
uint8_t xmtr_installed_posxmtrstate;
|
||
///< 保留位
|
||
uint16_t reserve_78;
|
||
///< 超前滞后上限
|
||
uint16_t lead_lag_open;
|
||
///< 超前滞后下限
|
||
uint16_t lead_lag_close;
|
||
///< 滞后时间
|
||
uint16_t lvp_filter_selector;
|
||
///< 触发灵敏度
|
||
uint16_t trigger_sensitivity;
|
||
///< 位置跨度
|
||
uint16_t pos_span;
|
||
///< 位置偏移
|
||
uint16_t pos_offset;
|
||
///< 变化点(与行程有关)
|
||
uint16_t crossover_out;
|
||
///< 原始驱动
|
||
uint16_t driver_raw;
|
||
///< 伺服输出偏差
|
||
uint16_t servo_output_bias;
|
||
///< 输入电流4ma偏移
|
||
int16_t input_offset;
|
||
///< 输入电流20ma范围
|
||
int16_t input_span;
|
||
///< 输出电流4ma采样值
|
||
int16_t output_offset;
|
||
///< 输出电流20ma范围
|
||
int16_t output_span;
|
||
///< 气源压力偏移
|
||
uint16_t press_s_offset;
|
||
///< 气源压力跨度
|
||
uint16_t press_s_span;
|
||
///< A路压力偏移
|
||
uint16_t press_a_offset;
|
||
///< A路压力跨度
|
||
uint16_t press_a_span;
|
||
///< B路压力偏移
|
||
uint16_t press_b_offset;
|
||
///< B路压力跨度
|
||
uint16_t press_b_span;
|
||
///< 小回路跨度
|
||
uint16_t minor_loop_span;
|
||
///< 动作次数报警设定值
|
||
uint32_t cycle_count_limit;
|
||
///< 累计行程报警设定值
|
||
uint32_t travel_accum_alert_pt;
|
||
///< 压力控制100位置压力值(只用于显示)
|
||
float32 press_100_percent;
|
||
///< 压力控制0位置压力值(只用于显示)
|
||
float32 press_0_percent;
|
||
///< 行程控制100位置行程(只用于显示)
|
||
float32 travel_100_percent;
|
||
///< 行程控制0位置行程(只用于显示)
|
||
float32 travel_0_percent;
|
||
///< 供应压力上限报警设定值
|
||
float32 high_supply_alert_pt;
|
||
///< 供应压力下限报警设定值
|
||
float32 low_supply_alert_pt;
|
||
///< 压力控制偏差报警设定值
|
||
float32 press_dev_alert_pt;
|
||
///< 行程控制偏差报警设定值
|
||
float32 travel_dev_alert_pt;
|
||
///< 行程上限报警设定值
|
||
float32 travel_hi_alert_pt;
|
||
///< 行程下限报警设定值
|
||
float32 travel_lo_alert_pt;
|
||
///< 行程上限过高报警设定值
|
||
float32 travel_hihi_alert_pt;
|
||
///< 行程下限过低报警设定值
|
||
float32 travel_lolo_alert_pt;
|
||
///< 压力范围上限(顶点压力)
|
||
float32 press_range_hi;
|
||
///< 压力范围下限(起点压力)
|
||
float32 press_range_lo;
|
||
///< 温度范围下限
|
||
float32 min_temp;
|
||
///< 温度范围上限
|
||
float32 max_temp;
|
||
///< 切除/限位上限
|
||
float32 cutoff_limit_hi;
|
||
///< 切除/限位下限
|
||
float32 cutoff_limit_lo;
|
||
///< 自定义PID参数
|
||
float32 travel_kp; ///< 行程比例增益
|
||
float32 travel_ki; ///< 行程积分增益
|
||
float32 travel_kv; ///< 行程速度增益
|
||
float32 travel_kd; ///< 行程微分增益
|
||
float32 press_kp; ///< 压力比例增益
|
||
float32 press_ki; ///< 压力积分增益
|
||
float32 press_rate; ///< 压力速率
|
||
float32 press_kd; ///< 压力微分增益
|
||
///< 积分死区
|
||
float32 integral_db;
|
||
///< 行程/压力偏差跳变点
|
||
float32 tvl_dev_trip;
|
||
///< 行程/压力偏差时间
|
||
float32 tvl_dev_time;
|
||
///< 行程/压力设定点速率上限
|
||
float32 rate_limit_open;
|
||
///< 行程/压力设定点速率下限
|
||
float32 rate_limit_close;
|
||
///< 超前滞后启动
|
||
float32 lead_lag_boost;
|
||
///< A口压力跳变点
|
||
float32 ps1_trigger_db;
|
||
///< B口压力跳变点
|
||
float32 ps2_trigger_db;
|
||
///< 行程偏差报警时间
|
||
float32 travel_dev_alert_time;
|
||
///< 输入电流跳变点
|
||
float32 current_trigger_db;
|
||
///< 压力偏差报警时间
|
||
float32 press_dev_alert_time;
|
||
///< 上限软切割速率
|
||
float32 soft_cutoff_rate_open_unscaled;
|
||
///< 下限软切割速率
|
||
float32 soft_cutoff_rate_close_unscaled;
|
||
///< 积分限位
|
||
float32 intergal_limit_unscaled;
|
||
///< 压力A限制
|
||
float32 press_a_limit;
|
||
///< 所有行程警报死区
|
||
float32 travel_alert_deadband_unscaled;
|
||
///< 周期计数累计死区
|
||
float32 cycle_count_deadband_unscaled;
|
||
///< 输入电流上限
|
||
float32 input_range_hi;
|
||
///< 输入电流下限
|
||
float32 input_range_lo;
|
||
///< 停机自检
|
||
uint8_t selftest_shutdown[HART_PACKED6_LEN];
|
||
///< 校准记录
|
||
calib_record_t calib_record;
|
||
///< 更多状态标志使能/禁用
|
||
hart_device_specific_status_u more_status_mask_6x;
|
||
/************** 下面定义的参数只供FISHER指令查询暂时不使用 **********************/
|
||
///< 仪表覆盖状态
|
||
uint8_t sis_override_status; ///< 暂时固定数据 A0
|
||
///< 行程报警使能/禁止
|
||
uint8_t demand_stroke_alert_enable; ///< TRUE = 使能,FALSE = 禁止
|
||
///< 位置整定参数
|
||
uint8_t pos_tuning_set;
|
||
///< 压力整定参数
|
||
uint8_t press_tuning_set;
|
||
///< 停机触发
|
||
uint8_t sis_opt; ///< 取值范围 sis_opt_e
|
||
///< 突发模式
|
||
uint8_t burst_mode; ///< TRUE = 是,FALSE = 否
|
||
///< XMTR状态
|
||
uint8_t xmtr_status; ///< 暂时固定数据 00
|
||
///< 部分行程测试延期原因
|
||
uint8_t pst_deferral_reason; ///< 暂时固定数据 00
|
||
///< SVT报警使能/禁用
|
||
uint8_t svt_alert_enable; ///< TRUE = 使能,FALSE = 禁用
|
||
///< 部分行程测试故障信息
|
||
uint8_t pst_prohibit_detail[PST_PROHIBIT_DETAIL_LEN]; ///< 暂时没有部分行程测试功能
|
||
///< 附属标志
|
||
uint8_t accessory_flags;
|
||
///< 自动校准稳定时间
|
||
uint8_t autocal_settling_time;
|
||
///< XMTR模式标志
|
||
uint8_t xmtr_mode_flag;
|
||
///< XMTR使能
|
||
uint8_t xntr_enable;
|
||
///< SVT使能标志
|
||
uint8_t svt_enable_flag;
|
||
///< 辅助输入类型
|
||
uint8_t aux_input_type;
|
||
///< 复位时间报警设定值
|
||
float32 reset_stroke_time_alert_pt; ///< 暂时固定数据 00 00 00 00
|
||
///< 行程时间报警设定值
|
||
float32 demand_stroke_time_alert_pt; ///< 暂时固定数据 00 00 00 00
|
||
///< 启动时间报警设定值
|
||
float32 breakout_time_alert_pt; ///< 暂时固定数据 00 00 00 00
|
||
///< 行程控制小回路增益
|
||
float32 travel_mlfb_gain;
|
||
///< 压力控制小回路增益
|
||
float32 press_mlfb_gain;
|
||
///< SVT跳闸压力报警设定值
|
||
float32 svt_trip_press_alert_pt;
|
||
///< SVT恢复压力报警设定值
|
||
float32 svt_recovery_press_alert_pt;
|
||
///< 默认设置点
|
||
float32 default_setpoint; ///< 暂时固定数据 1
|
||
///< 部分行程测试解电至跳闸
|
||
float32 loop_pst_ett;
|
||
///< 部分行程测试充电至跳闸
|
||
float32 loop_pst_dett;
|
||
///< LCP通讯跳闸警报时间
|
||
uint16_t lcp_trip_alert_sec;
|
||
///< 部分行程测试最小压力
|
||
float32 min_pst_press;
|
||
///< 部分行程测试最小压力时间
|
||
float32 min_pst_press_time;
|
||
|
||
uint32_t crc; // 用于校验
|
||
} udevice_t;
|
||
|
||
typedef struct
|
||
{
|
||
uint8_t last_dev_variable; ///< 上一个设备变量
|
||
uint8_t work_menu_index; ///< 工作菜单索引
|
||
int8_t mode_control_stable_temperature; ///< 整定稳定温度值
|
||
int16_t mode_control_offset; ///< 模式控制偏移量
|
||
uint16_t hart_run_time_h; ///< 需要将dev_run_time_h/18得到hart_run_time_h 按照1=18小时计算
|
||
uint16_t dev_run_time_s; ///< 设备工作时长(秒)
|
||
uint16_t power_on_cnt; ///< 设备上电次数
|
||
uint16_t reset_cnt; ///< 设备复位次数
|
||
uint32_t dev_run_time_h; ///< 设备工作时长(小时)
|
||
uint32_t travel_accum; ///< 累计行程
|
||
uint32_t cycle_count; ///< 动作次数
|
||
float32 travel_set_pt; ///< 目标行程设定值
|
||
float32 press_set_pt; ///< 目标压力设定值
|
||
date_time_t real_time; ///< 实时时间
|
||
|
||
uint32_t crc; ///< CRC校验
|
||
} rt_save_param_t;
|
||
|
||
typedef struct
|
||
{
|
||
uint8_t unit; ///< 单位
|
||
uint16_t min_ad_value; ///< 最小AD值
|
||
uint16_t max_ad_value; ///< 最大AD值
|
||
float32 min_set; ///< 最小值
|
||
float32 max_set; ///< 最大值
|
||
uint32_t crc; ///< CRC校验
|
||
} pressure_calib_param_t; ///< 压力校准参数
|
||
|
||
typedef union
|
||
{
|
||
uint64_t data;
|
||
struct
|
||
{
|
||
uint8_t app_init_over : 1; ///< app初始化完成标志:中断中有部分方法需要应用层全部初始化完成后再执行
|
||
uint8_t current_low : 1; ///< 低电流标识位,参考SYSTEM_CLOCK_HIGHT_CURRENT_MIN
|
||
uint8_t lcd_detect : 1; ///< LCD检测,用于标记LCD扩展板是否存在,将反初始化LED和LCD
|
||
uint8_t small_signal_deal : 1; ///< 小信号处理标志位
|
||
uint8_t tuning_enter : 1; ///< 校准进入
|
||
uint8_t auto_tuning_enter : 1; ///< 自动校准进入
|
||
uint8_t hart_rts_on : 1; ///< 用于测试HART通讯,数据发送完成标志位
|
||
uint8_t hart_send_test : 2; ///< HART发送测试 0:不发送 1:发送测试0 2:发送测试1
|
||
|
||
uint8_t calib_param_storage : 1; ///< 校准参数存储标志位,用于校验一致性
|
||
uint8_t specification_table_data_storage : 1; ///< 规格表数据存储标志位,用于校验一致性
|
||
uint8_t mode_params_storage : 1; ///< 算法存储标志位,用于校验一致性
|
||
uint8_t hart_attribute_storage : 1; ///< HART属性存储标志位,用于校验一致性
|
||
uint8_t hart_variable_storage : 1; ///< HART变量存储标志位,用于校验一致性
|
||
uint8_t hart_constant_storage : 1; ///< HART常量存储标志位,用于校验一致性
|
||
uint8_t hart_standard_variable_storage : 1; ///< HART标准变量存储标志位,用于校验一致性
|
||
} bits;
|
||
} rt_data_flag_u;
|
||
|
||
typedef struct
|
||
{
|
||
rt_data_flag_u flag; ///< 实时数据标志位
|
||
|
||
uint8_t record_algorithm_mode; ///< 设备算法模式,用于切到正常模式时恢复
|
||
uint8_t tuned_id; ///< 整定步骤
|
||
uint16_t mode_auto_load; ///< 模式自动加载,算法运行周期 ms
|
||
uint16_t ip_output; ///< IP输出值
|
||
uint16_t minor_loop_normal; ///< TODO 暂不明确
|
||
uint16_t crossover_out_u; ///< 磁条反馈原始值
|
||
uint16_t humidity; ///< 设备湿度
|
||
uint32_t seconds; ///< 总共秒数 从2000年开始
|
||
float32 temperature; ///< 设备温度
|
||
float32 loop_current; ///< 回路电流
|
||
float32 target_travel; ///< 目标行程/目标位置
|
||
float32 actual_travel; ///< 实际行程(阀门行程/实际位置)
|
||
float32 test_target; ///< 测试模式目标
|
||
float32 servo_feedback; ///< 伺服反馈(和实际行程的值一样)
|
||
float32 pressure_s; ///< 气源压力
|
||
float32 pressure_a; ///< A路压力
|
||
float32 pressure_b; ///< B路压力
|
||
float32 pressure_s_kpa; ///< 气源压力
|
||
float32 pressure_a_kpa; ///< A路压力
|
||
float32 pressure_b_kpa; ///< B路压力
|
||
float32 pressure_cross_point; ///< 交叉点
|
||
float32 friction; ///< 摩擦力
|
||
float32 elasticity; ///< 弹簧力
|
||
float32 cpu_percent; ///< CPU使用率
|
||
float32 cpu_temperature; ///< CPU温度
|
||
float32 cpu_volt; ///< CPU内部电压
|
||
float32 board_current; ///< 板卡电流
|
||
float32 dc; ///< DCDC电压
|
||
float32 vdd; ///< VDD电压
|
||
float32 mem_percent; ///< 内存使用率
|
||
float32 driver_signal; ///< 驱动信号(百分比)
|
||
|
||
///< 系统内部参数
|
||
uint32_t storage_change; ///< 存储变化次数
|
||
float32 pid_target; // pid控制目标
|
||
float32 pid_actual; // pid控制实际
|
||
float32 show_loop;
|
||
float32 show_target;
|
||
float32 show_actual;
|
||
uint32_t cpuid[3]; ///< CPUID
|
||
|
||
} real_time_data_t;
|
||
|
||
typedef struct
|
||
{
|
||
uint16_t pow_on_cnt_flag; ///< 上电复位标志
|
||
} flash_storage_t;
|
||
|
||
////< 驱动使能图标
|
||
typedef union
|
||
{
|
||
uint64_t dev;
|
||
struct
|
||
{
|
||
uint64_t hart : 1; ///< hart模块
|
||
uint64_t bluetooth : 1; ///< 蓝牙模块
|
||
uint64_t work_mode : 3; ///< 工作模式
|
||
uint64_t write_protect : 1; ///< 写保护
|
||
uint64_t lock : 1; ///< 锁模块
|
||
} bits;
|
||
} driver_icon_enable_u;
|
||
|
||
typedef union
|
||
{
|
||
uint8_t data;
|
||
struct
|
||
{
|
||
uint8_t reset_or_power_on : 1; ///< 复位或上电标志 FALSE: 复位 TRUE: 上电
|
||
} bits;
|
||
} noinit_dat_flag_u;
|
||
|
||
// 复位不清除的参数
|
||
typedef struct
|
||
{
|
||
uint16_t rest_flag; ///< 复位标志
|
||
noinit_dat_flag_u flag; ///< 复位或上电标志
|
||
|
||
uint8_t language; ///< 语言
|
||
uint8_t inst_mode; ///< 仪表模式
|
||
uint8_t control_mode; ///< 控制模式
|
||
uint8_t dev_algorithm_mode; ///< 定位器算法模式
|
||
uint16_t dev_model; ///< 定位器型号
|
||
float32 dead_zone; ///< 死区
|
||
int16_t travel_set_pt; ///< 目标行程设定值
|
||
uint8_t mode_params[300]; ///< 模式参数
|
||
calib_param_t loop; ///< 4-20mA校准参数
|
||
calib_param_t loop_output; ///< 4-20mA输出校准参数
|
||
calib_param_t pressure_s;
|
||
|
||
uint32_t crc; ///< 校验
|
||
} noinit_data_t;
|
||
|
||
// 重启不会初始化的数据
|
||
extern noinit_data_t noinit_data; ///< 复位不初始化数据
|
||
extern __IO udevice_t udevice; ///< 设备参数
|
||
extern __IO rt_save_param_t rt_save; ///< 实时保存参数
|
||
|
||
extern __IO calib_param_t calib_param[CALIBPARA_MAX]; ///< 校准参数
|
||
extern __IO real_time_data_t rt_data; ///< 实时参数
|
||
extern pressure_calib_param_t pressure_calib_param[PRESSURE_PARAM_MAX]; ///< 压力校准参数
|
||
extern mode_params_u mode_params; ///< 模式参数
|
||
extern pid_t _pid; ///< PID参数
|
||
extern driver_icon_enable_u driver_icon_enable; ///< 驱动使能图标
|
||
|
||
///< 模拟量
|
||
extern __IO uint16_t adc_raw[ADC1_MAX]; ///< ADC原始值
|
||
|
||
extern __IO flow_event_e flow_event; ///< 任务流程状态机
|
||
|
||
///< 函数
|
||
extern void h24_bluetooth_output_dbg(uint8_t *data, uint16_t len); ///< 蓝牙输出调试
|
||
extern void bluetooth_output(uint8_t *data, uint16_t len); ///< 蓝牙输出
|
||
|
||
extern void board_data_save(void); ///< 保存板卡参数
|
||
extern void noinit_data_set(void); ///< 复位不清除数据设置
|
||
#endif ///< __ENTITY_H__
|