604 lines
20 KiB
C
604 lines
20 KiB
C
#ifndef __ENTITY_H__
|
||
#define __ENTITY_H__
|
||
#include "lib.h"
|
||
#include "adcs.h"
|
||
#include "params.h"
|
||
#include "pdctrl.h"
|
||
#include "mode.h"
|
||
|
||
|
||
// 硬件版本号 1个字节
|
||
#ifdef V4
|
||
#define HW_VER 0x04
|
||
#elif V5
|
||
#define HW_VER 0x05
|
||
#else
|
||
#error "Please define hardware version!"
|
||
#endif
|
||
|
||
// 固件版本号 1个字节
|
||
#define FW_VER 0x06
|
||
|
||
// 是否运行蓝牙输出数据到VOFA上位机
|
||
#define H24_BLE_OUTPUT_DBG TRUE
|
||
|
||
// CPU基准电压
|
||
#define CPU_VREF 3.0f
|
||
// 输入电流小于3.8mA
|
||
#define INPUT_CURRENT_MIN 3.8f
|
||
#define WAIT_COUNT_MAX 10
|
||
// 蓝牙工作电流
|
||
#define BLE_CURRENT_WORK 7.9f
|
||
// 气压表最大值
|
||
#define BAROMETER_MAX 7
|
||
|
||
// LCD最低工作稳定-20℃
|
||
#define LCD_WORK_TEMP_MIN -20
|
||
|
||
#define LOOP_CURRENT_MIN 4.0f ///< 输入电流最小值
|
||
#define LOOP_CURRENT_MAX 20.0f ///< 输入电流最大值
|
||
|
||
#define ADC_TM_CYCLE 10U ///< ADC采样周期
|
||
#define ADJUST_TM_CYCLE 10U ///< 标定周期
|
||
#define SELF_VCHART_LEN 17 ///< 自定义阀门特性长度
|
||
#define VALVE_SERIAL_NUM_LEN 16 ///< 阀门序列号长度
|
||
#define INST_SERIAL_NUM_LEN 16 ///< 定位器序列号长度
|
||
|
||
// ADC通道定义
|
||
#define ADC_LOOP_CHANNEL IN5 ///< 输入电流ADC通道
|
||
#define ADC_PSB_CHANNEL IN6 ///< 阀位反馈ADC通道
|
||
#define ADC_BP_CHANNEL IN7 ///< 压力传感器ADC通道
|
||
#define ADC_IPSB_CHANNEL IN8 ///< 内部I/P位置电压(小回路)
|
||
#define ADC_NTC_CHANNEL IN9 ///< 温度ADC电压
|
||
#define ADC_VIP_CHANNEL IN11 ///< I/P输出ADC电压
|
||
#define ADC_DCDC_CHANNEL IN12 ///< DCDC检测通道
|
||
#define ADC_BPA_CHANNEL IN13 ///< A路压力
|
||
#define ADC_BPB_CHANNEL IN14 ///< B路压力
|
||
#define DAC_OUT_MAX 4095 ///< DAC输出最大值
|
||
|
||
// 校准参数信息
|
||
#define CALIBPARA_LOOP 0 ///< 4~20mA采集校准参数
|
||
#define CALIBPARA_PSB 1 ///< 位置反馈校准参数
|
||
#define CALIBPARA_BP 2 ///< 气源压力校准参数
|
||
#define CALIBPARA_PA 3 ///< A输出压力校准参数
|
||
#define CALIBPARA_PB 4 ///< B输出压力校准参数
|
||
#define CALIBPARA_IPSB 5 ///< I/P内反馈校准参数
|
||
#define CALIBPARA_NTC 6 ///< NTC温度校准参数
|
||
#define CALIBPARA_VIP 7 ///< 4~20mA输出校准参数
|
||
#define CALIBPARA_DC 8 ///< 电压
|
||
// 校准参数数量
|
||
#define CALIBPARA_NUM (CALIBPARA_DC + 1)
|
||
|
||
// M95_1 EEPROM地址定义
|
||
#define EE_INITIAL_ADDRESS 0U // 参数储存起始地址
|
||
#define EE_CRC_ADDRESS (EE_INITIAL_ADDRESS + 128) // CRC校验地址8个CRC, 前面预留128个字节
|
||
#define EE_CALIBPARA_ADDRESS (EE_CRC_ADDRESS + 2 * CRC_NUM) // 校准参数储存地址,8个CRC
|
||
#define EE_DEVICE_ADDRESS (EE_CALIBPARA_ADDRESS + 8 * CALIBPARA_NUM) // 设备参数储存地址
|
||
#define EE_CONTROLLER_ALARM_ADDR (EE_DEVICE_ADDRESS + sizeof(uDeviceTypedef)) // 定位器内部报警设置
|
||
#define EE_HART_DEVICE_VARIABLE_ADDR (EE_CONTROLLER_ALARM_ADDR + sizeof(uControllerAlarmDef)) // HART设备属性存储地址
|
||
#define EE_HART_DEVICE_VARIABLE_USER_ADDR (EE_HART_DEVICE_VARIABLE_ADDR + sizeof(hart_storage_variable_t)) // HART设备用户自定义属性存储地址
|
||
|
||
// CRC预留数量
|
||
#define CRC_NUM 8 // CRC预留数量
|
||
// CRC内存索引
|
||
#define CALIBPARA_CRC 0 // 校准参数CRC
|
||
#define DEVICE_CRC 1 // 设备参数CRC
|
||
#define HART_DEVICE_VARIABLE_CRC 2 // HART设备属性CRC
|
||
#define HART_DEVICE_VARIABLE_USER_CRC 3 // HART设备用户自定义属性CRC
|
||
// CRC内存地址
|
||
#define CALIBPARA_CRC_ADDR (EE_CRC_ADDRESS + CALIBPARA_CRC * 2) // 校准参数CRC地址
|
||
#define DEVICE_CRC_ADDR (EE_CRC_ADDRESS + DEVICE_CRC * 2) // 设备参数CRC地址
|
||
#define HART_DEVICE_VARIABLE_CRC_ADDR (EE_CRC_ADDRESS + HART_DEVICE_VARIABLE_CRC * 2) // HART设备属性CRC地址
|
||
#define HART_DEVICE_VARIABLE_USER_CRC_ADDR (EE_CRC_ADDRESS + HART_DEVICE_VARIABLE_USER_CRC * 2) // HART设备用户自定义属性CRC地址
|
||
|
||
#pragma pack(1) // 编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式
|
||
|
||
/// 参数类型
|
||
typedef enum
|
||
{
|
||
CALIBPARA_PARAM = 0, ///< 校准参数
|
||
DEVICE_PARAM, ///< 设备参数
|
||
HART_DEVICE_VARIABLE_PARAM, ///< HART设备属性
|
||
HART_DEVICE_VARIABLE_USER_PARAM, ///< HART设备用户自定义属性
|
||
RT_PARAM, ///< 实时参数
|
||
|
||
WARNING_PARAM, ///< 报警参数
|
||
} param_type_t;
|
||
|
||
/// 时间结构
|
||
typedef union
|
||
{
|
||
uint8_t Byte[6];
|
||
|
||
struct
|
||
{
|
||
uint8_t Year;
|
||
uint8_t Month;
|
||
uint8_t Day;
|
||
uint8_t Hour;
|
||
uint8_t Minute;
|
||
uint8_t Second;
|
||
} Date;
|
||
} uDateTime_TypeDef;
|
||
|
||
typedef struct
|
||
{
|
||
// 版本号
|
||
#define eVersion_EE_ADDR EE_DEVICE_ADDRESS
|
||
uint16_t eVersion;
|
||
|
||
// 显示方向 0/180
|
||
#define eDispDir_EE_ADDR eVersion_EE_ADDR + 2
|
||
uint16_t eDispDir;
|
||
|
||
// 主屏显示方式
|
||
#define MainDisp_EE_ADDR eDispDir_EE_ADDR + 2
|
||
uint16_t MainDisp;
|
||
|
||
// 显示语言
|
||
#define eLanguage_EE_ADDR MainDisp_EE_ADDR + 2
|
||
uint16_t eLanguage;
|
||
|
||
// 定位器Hart地址(作废)
|
||
#define DeviceAddr_EE_ADDR eLanguage_EE_ADDR + 2
|
||
uint16_t DeviceAddr;
|
||
|
||
// 定位器工作模式
|
||
#define WorkMode_EE_ADDR DeviceAddr_EE_ADDR + 2
|
||
uint16_t WorkMode;
|
||
|
||
// 行程类型, 直行程/角行程
|
||
#define eTravelType_EE_ADDR WorkMode_EE_ADDR + 2
|
||
uint16_t eTravelType;
|
||
|
||
// 磁条规格
|
||
#define MagnetIndex_EE_ADDR eTravelType_EE_ADDR + 2
|
||
uint16_t MagnetIndex;
|
||
|
||
// 行程范围选择
|
||
#define TravelRangeIndex_EE_ADDR MagnetIndex_EE_ADDR + 2
|
||
uint16_t TravelRangeIndex;
|
||
|
||
// 自定义行程范围
|
||
#define TravelRangeSelf_EE_ADDR TravelRangeIndex_EE_ADDR + 2
|
||
uint16_t TravelRangeSelf;
|
||
|
||
// 行程百分比显示方式
|
||
#define eTravelDispMode_EE_ADDR TravelRangeSelf_EE_ADDR + 2
|
||
uint16_t eTravelDispMode;
|
||
|
||
// 行程起点和终点反馈电压
|
||
#define TravelVol0_EE_ADDR eTravelDispMode_EE_ADDR + 2
|
||
uint16_t TravelVol0;
|
||
|
||
#define TravelVol100_EE_ADDR TravelVol0_EE_ADDR + 2
|
||
uint16_t TravelVol100;
|
||
|
||
// 行程显示单位
|
||
#define eTravelUnit_EE_ADDR TravelVol100_EE_ADDR + 2
|
||
uint16_t eTravelUnit;
|
||
|
||
// 阀门打开(上行)变化速率 (%/秒),如需在5秒钟左右移动100%行程,请将其设置为 20 [%/sec]
|
||
#define TravelRateOpen_EE_ADDR eTravelUnit_EE_ADDR + 2
|
||
float32 TravelRateOpen;
|
||
|
||
// 阀门关闭(下行)变化速率 (%/秒),如需在5秒钟左右移动100%行程,请将其设置为 20 [%/sec]
|
||
#define TravelRateClose_EE_ADDR TravelRateOpen_EE_ADDR + 4
|
||
float32 TravelRateClose;
|
||
|
||
// 行程偏差报警点 ±%
|
||
#define TravelError_EE_ADDR TravelRateClose_EE_ADDR + 4
|
||
float32 TravelError;
|
||
|
||
// 行程偏差报警等待时间(秒)(偏差超出范围的持续时间上限)
|
||
#define TravelErrorWaitTime_EE_ADDR TravelError_EE_ADDR + 4
|
||
uint16_t TravelErrorWaitTime;
|
||
|
||
// 死区(%),表示在目标位置附近设置的可允许偏差。若阀门填料的摩擦力较大,可相应调整并设置此数值,
|
||
// 以防止因摩擦导致循环受限。若死区设置为0.5%,则其对应范围为目标的±0.5%。
|
||
#define TravelDead_EE_ADDR TravelErrorWaitTime_EE_ADDR + 2
|
||
float32 TravelDead; // 0.1~10.0%
|
||
|
||
// 死区报警上限
|
||
#define TravelDeadUpper_EE_ADDR TravelDead_EE_ADDR + 4
|
||
float32 TravelDeadUpper;
|
||
|
||
// 死区更新等待时间(输入信号幅度大于当前的死区值时,阀门保持不动的时间上限,超过时间上限后更新当前死区值)
|
||
#define TravelDeadUpperWaitTime_EE_ADDR TravelDeadUpper_EE_ADDR + 4
|
||
uint16_t TravelDeadUpperWaitTime;
|
||
|
||
// 累计行程上限
|
||
#define TravelSumUpper_EE_ADDR TravelDeadUpperWaitTime_EE_ADDR + 2
|
||
uint32_t TravelSumUpper;
|
||
|
||
// 动作次数上限
|
||
#define ActNumberUpper_EE_ADDR TravelSumUpper_EE_ADDR + 4
|
||
uint32_t ActNumberUpper;
|
||
|
||
// 高低位置报警线
|
||
#define TravelUpperAlarm_EE_ADDR ActNumberUpper_EE_ADDR + 4
|
||
float32 TravelUpperAlarm;
|
||
|
||
#define TravelLowerAlarm_EE_ADDR TravelUpperAlarm_EE_ADDR + 4
|
||
float32 TravelLowerAlarm;
|
||
|
||
// 开关1/2闭合触发位置 ( % of 行程, -25% ~ 125%)
|
||
#define SWTriggerValue_EE_ADDR TravelLowerAlarm_EE_ADDR + 4
|
||
float32 SWTriggerValue[2];
|
||
|
||
// 开关1/2闭合触发条件:高于,低于,禁用
|
||
// 阀门开关触发逻辑
|
||
#define eSWTriggerLogic_EE_ADDR SWTriggerValue_EE_ADDR + 8
|
||
uint16_t eSWTriggerLogic[2];
|
||
|
||
// 输入范围低4-19mA (2位小数,如 4mA = 400,20mA = 2000)
|
||
#define InputIL_EE_ADDR eSWTriggerLogic_EE_ADDR + 4
|
||
float32 InputIL;
|
||
|
||
// 输入范围高5-20mA (2位小数,如 4mA = 400,20mA = 2000)
|
||
#define InputIH_EE_ADDR InputIL_EE_ADDR + 4
|
||
float32 InputIH;
|
||
|
||
// 输入电流报警下限
|
||
#define InputILA_EE_ADDR InputIH_EE_ADDR + 4
|
||
float32 InputILowAlarm;
|
||
|
||
/***************************************************************************************/
|
||
/* 压力
|
||
bar(2位小数,如, 1bar = 100, 7bar = 700)
|
||
KPa或者PSI(1位小数,如, 1.0Kpa = 10, 101.9KPa = 1019; 116.9PSI = 1169)
|
||
1Kpa = 0.1450377psi, 1psi = 6.894757Kpa
|
||
Mpa--0.XXXX Mpa, 1Kpa = 0.001Mpa
|
||
*/
|
||
// 压力单位
|
||
#define ePressUnit_EE_ADDR InputILA_EE_ADDR + 4
|
||
uint16_t ePressUnit;
|
||
|
||
// 输入的额定气源压力
|
||
#define SupplyPressure_EE_ADDR ePressUnit_EE_ADDR + 2
|
||
float32 SupplyPressure;
|
||
|
||
// 气源偏差范围±%
|
||
#define SupplyPressureError_EE_ADDR SupplyPressure_EE_ADDR + 4
|
||
float32 SupplyPressureError;
|
||
|
||
// 报警等待时间(秒)(偏差超出范围的持续时间上限)
|
||
#define SupplyPressureErrorWaitTime_EE_ADDR SupplyPressureError_EE_ADDR + 4
|
||
uint16_t SupplyPressureErrorWaitTime;
|
||
|
||
// 整定时,阀门0%--100%位置的气压值
|
||
#define TravelPressureA0_EE_ADDR SupplyPressureErrorWaitTime_EE_ADDR + 2
|
||
float32 TravelPressureA0;
|
||
|
||
#define TravelPressureA100_EE_ADDR TravelPressureA0_EE_ADDR + 4
|
||
float32 TravelPressureA100;
|
||
|
||
#define TravelPressureB0_EE_ADDR TravelPressureA100_EE_ADDR + 4
|
||
float32 TravelPressureB0;
|
||
|
||
#define TravelPressureB100_EE_ADDR TravelPressureB0_EE_ADDR + 4
|
||
float32 TravelPressureB100;
|
||
|
||
/***************************************************************************************/
|
||
// 阀门特性
|
||
#define eValveCharacteristics_EE_ADDR TravelPressureB100_EE_ADDR + 4
|
||
uint16_t eValveCharacteristics;
|
||
|
||
// 自定义阀门特性
|
||
#define SelfVChart_EE_ADDR eValveCharacteristics_EE_ADDR + 2
|
||
uint16_t SelfVChart[SELF_VCHART_LEN];
|
||
|
||
// 小信号切除
|
||
#define SmallSignalCutEnable_EE_ADDR SelfVChart_EE_ADDR + 2 * 17
|
||
uint16_t SmallSignalCutEnable;
|
||
|
||
// 小信号上限
|
||
#define SmallSignalUpper_EE_ADDR SmallSignalCutEnable_EE_ADDR + 2
|
||
float32 SmallSignalUpper;
|
||
|
||
// 小信号下限
|
||
#define SmallSignalLower_EE_ADDR SmallSignalUpper_EE_ADDR + 4
|
||
float32 SmallSignalLower;
|
||
|
||
// 执行机构单/双作用
|
||
#define eActuator_EE_ADDR SmallSignalLower_EE_ADDR + 4
|
||
uint16_t eActuator;
|
||
|
||
// 定位器(控制器)正/反作用
|
||
#define eControllerAction_EE_ADDR eActuator_EE_ADDR + 2
|
||
uint16_t eControllerAction;
|
||
|
||
// 气开/气关设置(零控信号阀门状态, 0-关闭,其它打开)
|
||
#define eAirAction_EE_ADDR eControllerAction_EE_ADDR + 2
|
||
uint16_t eAirAction;
|
||
|
||
// 增速器
|
||
#define SpeedIncreaserEnable_EE_ADDR eAirAction_EE_ADDR + 2
|
||
uint16_t SpeedIncreaserEnable;
|
||
|
||
// 快排阀
|
||
#define QuickExhaustValveEnable_EE_ADDR SpeedIncreaserEnable_EE_ADDR + 2
|
||
uint16_t QuickExhaustValveEnable;
|
||
|
||
// 整定时,阀门动作的所需要的上下限值
|
||
#define DAC_Max_EE_ADDR QuickExhaustValveEnable_EE_ADDR + 2
|
||
uint16_t DAC_Max;
|
||
|
||
#define DAC_Min_EE_ADDR DAC_Max_EE_ADDR + 2
|
||
uint16_t DAC_Min;
|
||
|
||
// 放大器报警设置:驱动信号下限,报警等待时间(控制UP或IP的驱动信号大于下限时,放大器输出压力保持不变的时间上限)
|
||
#define DAC_AlarmWaitTimer_EE_ADDR DAC_Min_EE_ADDR + 2
|
||
uint16_t DAC_AlarmWaitTime;
|
||
|
||
// 阀门全开/全关时间
|
||
#define AllOpenTime_EE_ADDR DAC_AlarmWaitTimer_EE_ADDR + 2
|
||
uint16_t AllOpenTime;
|
||
|
||
#define AllCloseTime_EE_ADDR AllOpenTime_EE_ADDR + 2
|
||
uint16_t AllCloseTime;
|
||
|
||
// PID参数选择,1:自适应/2:自定义
|
||
#define PIDIndex_EE_ADDR AllCloseTime_EE_ADDR + 2
|
||
uint16_t PIDIndex;
|
||
|
||
// 自适应PID参数
|
||
#define APID_KP_EE_ADDR PIDIndex_EE_ADDR + 2
|
||
float32 APID_KP;
|
||
|
||
#define APID_TI_EE_ADDR APID_KP_EE_ADDR + 4
|
||
float32 APID_TI;
|
||
|
||
#define APID_TD_EE_ADDR APID_TI_EE_ADDR + 4
|
||
float32 APID_TD;
|
||
|
||
// 自定义PID参数
|
||
#define SPID_KP_EE_ADDR APID_TD_EE_ADDR + 4
|
||
float32 SPID_KP;
|
||
|
||
#define SPID_TI_EE_ADDR SPID_KP_EE_ADDR + 4
|
||
float32 SPID_TI;
|
||
|
||
#define SPID_TD_EE_ADDR SPID_TI_EE_ADDR + 4
|
||
float32 SPID_TD;
|
||
|
||
// 积分使能
|
||
#define IntegralEnable_EE_ADDR SPID_TD_EE_ADDR + 4
|
||
uint16_t IntegralEnable;
|
||
|
||
// 积分初始值
|
||
#define IniIntegral_EE_ADDR IntegralEnable_EE_ADDR + 2
|
||
float32 IniIntegral;
|
||
|
||
// 积分工作区域(%)
|
||
#define IntegralZone_EE_ADDR IniIntegral_EE_ADDR + 4
|
||
float32 IntegralZone; // 0.1~20.0%
|
||
|
||
// 报警处理方式
|
||
#define eAlarmHandleMode_EE_ADDR IntegralZone_EE_ADDR + 4
|
||
uint16_t eAlarmHandleMode;
|
||
|
||
// 温度报警上限
|
||
#define TemperatureUpperAlarm_EE_ADDR eAlarmHandleMode_EE_ADDR + 2
|
||
float32 TemperatureUpperAlarm;
|
||
|
||
// 温度报警下限
|
||
#define TemperatureLowerAlarm_EE_ADDR TemperatureUpperAlarm_EE_ADDR + 4
|
||
float32 TemperatureLowerAlarm;
|
||
|
||
// 摩擦力
|
||
#define Friction_EE_ADDR TemperatureLowerAlarm_EE_ADDR + 4
|
||
float32 Friction;
|
||
|
||
// 允许的摩擦力上限
|
||
#define FrictionUpper_EE_ADDR Friction_EE_ADDR + 4
|
||
float32 FrictionUpper;
|
||
|
||
// 允许的摩擦力下限
|
||
#define FrictionLower_EE_ADDR FrictionUpper_EE_ADDR + 4
|
||
float32 FrictionLower;
|
||
|
||
// 弹簧故障报警
|
||
// 标准弹性系数范围、弹簧提供的压力上下限允许的变化范围(根据始终点的输出气压判断)
|
||
#define Elasticity_EE_ADDR FrictionLower_EE_ADDR + 4
|
||
float32 Elasticity;
|
||
|
||
// 允许的弹力范围上限
|
||
#define ElasticityUpper_EE_ADDR Elasticity_EE_ADDR + 4
|
||
float32 ElasticityUpper;
|
||
|
||
// 允许的弹力范围下限
|
||
#define ElasticityLower_EE_ADDR ElasticityUpper_EE_ADDR + 4
|
||
float32 ElasticityLower;
|
||
|
||
// 是否整定过 1:整定过 0:未整定
|
||
#define TunedFlag_EE_ADDR ElasticityLower_EE_ADDR + 4
|
||
uint16_t TunedFlag;
|
||
|
||
// 记录存储间隔时间(秒)
|
||
#define SaveRecordInterval_EE_ADDR TunedFlag_EE_ADDR + 2
|
||
uint16_t SaveRecordInterval;
|
||
|
||
// 开机控制方式
|
||
#define ControlMode_EE_ADDR SaveRecordInterval_EE_ADDR + 2
|
||
uint16_t ControlMode;
|
||
|
||
// PWM电流标定4ma值
|
||
#define CurrentCalibrationA_EE_ADDR ControlMode_EE_ADDR + 2
|
||
uint16_t CurrentCalibrationA;
|
||
|
||
// PWM电流标定20ma值
|
||
#define CurrentCalibrationB_EE_ADDR CurrentCalibrationA_EE_ADDR + 2
|
||
uint16_t CurrentCalibrationB;
|
||
|
||
// 磁条接收的反馈电压由大变小 0 由小变大 1
|
||
#define ProcessChange_Flag_EE_ADDR CurrentCalibrationB_EE_ADDR + 2
|
||
uint16_t ProcessChange_Flag;
|
||
|
||
// DAC中间值 用于刹车
|
||
#define PosMidDac_Val_EE_ADDR ProcessChange_Flag_EE_ADDR + 2
|
||
uint16_t PosMidDac_Val;
|
||
|
||
// 小回路最小值
|
||
#define MinorLoop0_Val_EE_ADDR PosMidDac_Val_EE_ADDR + 2
|
||
uint16_t MinorLoopVol0_Val;
|
||
|
||
// 小回路最大值
|
||
#define MinorLoop100_Val_EE_ADDR MinorLoop0_Val_EE_ADDR + 2
|
||
uint16_t MinorLoopVol100_Val;
|
||
|
||
// 部分行程使能
|
||
#define PartTravelEnable_EE_ADDR MinorLoop100_Val_EE_ADDR + 2
|
||
uint16_t PartTravelEnable;
|
||
|
||
#define PartTravelMin_EE_ADDR PartTravelEnable_EE_ADDR + 2
|
||
float32 PartTravelMin;
|
||
|
||
#define PartTravelMax_EE_ADDR PartTravelMin_EE_ADDR + 4
|
||
float32 PartTravelMax;
|
||
|
||
// 无线通讯使能
|
||
#define WirelessComm_EE_ADDR PartTravelMax_EE_ADDR + 4
|
||
uint16_t WirelessCommEnable;
|
||
|
||
// PWM 4-20mA使能
|
||
#define mAOutput_EE_ADDR WirelessComm_EE_ADDR + 2
|
||
uint16_t mAOutputEnable;
|
||
|
||
// 压力偏移量
|
||
#define PressureOffset_EE_ADDR mAOutput_EE_ADDR + 2
|
||
float32 PressureOffset;
|
||
|
||
// 间隙控制范围 (%),当阀门的当前位置在基于最终目标位置的 GAP 参数设置范围(目标位置 ± GAP)内时,使用GAP PID参数
|
||
#define TravelGap_EE_ADDR PressureOffset_EE_ADDR + 4
|
||
uint16_t TravelGap; // 0.1~20.0%
|
||
|
||
// TravelDAC_KVal 相差值
|
||
#define TravelDAC_MaxKu_EE_ADDR TravelGap_EE_ADDR + 2
|
||
float32 TravelDAC_KVal_Up;
|
||
|
||
#define TravelDAC_MaxKd_EE_ADDR TravelDAC_MaxKu_EE_ADDR + 4
|
||
float32 TravelDAC_KVal_Dn;
|
||
|
||
// 开机通电时间
|
||
#define uAccumulatedTime_EE_ADDR TravelDAC_MaxKd_EE_ADDR + 4
|
||
uDateTime_TypeDef uAccumulatedTime;
|
||
|
||
#define FM24WriteADDR_EE_ADDR uAccumulatedTime_EE_ADDR + 6
|
||
uint32_t fm24BaseAddr;
|
||
|
||
// 阀门序列号
|
||
#define ValveSerialNum_EE_ADDR FM24WriteADDR_EE_ADDR + 4
|
||
uint8_t ValveSerialNum[VALVE_SERIAL_NUM_LEN];
|
||
|
||
// 仪器序列号
|
||
#define InstSerialNum_EE_ADDR ValveSerialNum_EE_ADDR + VALVE_SERIAL_NUM_LEN
|
||
uint8_t InstSerialNum[INST_SERIAL_NUM_LEN];
|
||
|
||
// 阀门类型
|
||
#define ValveStyle_EE_ADDR InstSerialNum_EE_ADDR + INST_SERIAL_NUM_LEN
|
||
uint16_t ValveStyle;
|
||
|
||
// 阀门尺寸
|
||
#define ValveSize_EE_ADDR ValveStyle_EE_ADDR + 2
|
||
uint16_t SpecValveSize;
|
||
|
||
// 阀门等级
|
||
#define ValveClass_EE_ADDR ValveSize_EE_ADDR + 2
|
||
uint16_t SpecValveClass;
|
||
|
||
// 阀杆直径
|
||
#define ValveStemDiameter_EE_ADDR ValveClass_EE_ADDR + 2
|
||
float32 SpecValveStemDiameter;
|
||
|
||
// 包装类型
|
||
#define ValvePackingType_EE_ADDR ValveStemDiameter_EE_ADDR + 4
|
||
uint16_t SpecValvePackingType;
|
||
|
||
// 控制输出模式 1:DAC 2:PWM
|
||
#define ControlOutputMode_EE_ADDR ValvePackingType_EE_ADDR + 2
|
||
uint16_t SpecControlOutputMode;
|
||
|
||
} uDeviceTypedef;
|
||
|
||
/// 实时参数
|
||
typedef struct
|
||
{
|
||
// 头部信息:
|
||
uint16_t crc; ///< CRC校验值
|
||
|
||
// 动态数据:
|
||
uDateTime_TypeDef timestamp; ///< 时间戳
|
||
uint64_t write_cnt; ///< FM24写入次数
|
||
float32 travel_target; ///< 行程目标
|
||
uint32_t travel_cnt; ///< 行程累计
|
||
uint32_t action_cnt; ///< 动作次数
|
||
float32 max_recorded_temp; ///< 最高温度记录
|
||
float32 min_recorded_temp; ///< 最低温度记录
|
||
uint32_t number_of_power_ups; ///< 上电次数
|
||
|
||
// HART 动态数据
|
||
uint8_t last_device_variable; ///< 上一个设备变量,这表示应用程序应在现场设备中找到的最后一个设备变量代码
|
||
uint16_t configuration_update_count; ///< 配置更新次数
|
||
} uRealTimeDef;
|
||
|
||
// 阀门执行机构参数
|
||
typedef struct
|
||
{
|
||
// 充/排气调节时间-阀门10%到90%或90%到10%所需要的时间,单位ms
|
||
uint32_t AdjTime;
|
||
// 纯延时时间-从进气开始到阀门开始动作的时间差,单位ms
|
||
uint32_t DelayTime;
|
||
// 最大速度
|
||
uint16_t Vmax;
|
||
// 最大速度位置
|
||
uint16_t VmaxLoc;
|
||
// 最大过冲量
|
||
uint16_t OVSmax;
|
||
} ValveParaDef;
|
||
|
||
// 驱动使能图标
|
||
typedef union
|
||
{
|
||
uint64_t dev;
|
||
struct
|
||
{
|
||
uint64_t hart : 1; // hart模块
|
||
uint64_t bluetooth : 1; // 蓝牙模块
|
||
uint64_t work_mode : 3; // 工作模式
|
||
uint64_t lock : 1; // 锁模块
|
||
} Bits;
|
||
} driver_icon_enable_u;
|
||
|
||
#pragma pack() // 编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式
|
||
|
||
extern uint16_t crc_param[CRC_NUM]; ///< CRC参数
|
||
extern float32 calib_param[CALIBPARA_NUM][2]; ///< 校准参数
|
||
extern mode_params_t mode_params; ///< 模式参数
|
||
extern uDeviceTypedef uDevice; ///< 设备参数
|
||
extern uRealTimeDef uRtData; ///< 实时参数
|
||
extern uint8_t cpu_percent; ///< CPU使用率
|
||
// 模拟量
|
||
extern uint16_t adc_raw[INMAX]; ///< ADC原始值
|
||
extern __IO uint16_t ip_out; ///< DAC输出值
|
||
// 数字量
|
||
extern __IO float32 loop_current; ///< 输入电流mA
|
||
extern float32 actual_travel; ///< 实际阀门位置 % (1位小数,如 0~100%, 100% = 1000)
|
||
extern float32 target_travel; ///< 目标阀门位置 % (1位小数,如 0~100%, 100% = 1000)
|
||
extern float32 pid_target; ///< pid控制目标
|
||
extern float32 show_target; ///< lcd显示目标
|
||
extern float32 pid_actual; ///< pid控制实际
|
||
extern float32 show_actual; ///< lcd显示实际
|
||
extern float32 target_actual_diff; ///< 目标位置与实际位置的差值
|
||
extern uint8_t target_direction; ///< 目标方向,0:向下,1:向上
|
||
extern float32 temperature; ///< 温度
|
||
extern float32 pressure; ///< 气源压力
|
||
extern float32 pressureA; ///< A路压力
|
||
extern float32 pressureB; ///< B路压力
|
||
extern float32 range_percentage; ///< 量程百分比
|
||
|
||
extern driver_icon_enable_u driver_icon_enable; ///< 驱动使能图标
|
||
|
||
extern void h24_bluetooth_output_dbg(uint8_t *data, uint16_t len);
|
||
#endif // __ENTITY_H__
|