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/entity.h

604 lines
20 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 __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 ///< 420mA采集校准参数
#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;
// 控制输出模式 1DAC 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__