/** * @file diagnosis.h * @author xxx * @date 2023-09-05 09:18:39 * @brief 定位器诊断模块 * @copyright Copyright (c) 2023 by xxx, All Rights Reserved. */ #ifndef __DIAGNOSIS_H__ #define __DIAGNOSIS_H__ #include "lib.h" #include "entity.h" // 诊断等级 typedef enum { DIAGNOSIS_CLASS_FAIL = 0, // 设备故障 DIAGNOSIS_CLASS_SPEC, // 超出规格 DIAGNOSIS_CLASS_CHECK, // 功能检查 DIAGNOSIS_CLASS_MAINT, // 请求维护 DIAGNOSIS_CLASS_OK, // 诊断正常 } diag_class_e; #define DIAG_FAULT_CLASS_NUM DIAGNOSIS_CLASS_OK // 设备故障诊断 typedef enum { DIAGNOSIS_VREF = 0, ///< 基准电压诊断 => 供电系统故障 DIAGNOSIS_INPUT_UPPER, ///< 输入电流上限诊断 => 驱动电流报警 DIAGNOSIS_INPUT_LOWER, ///< 输入电流下限诊断 DIAGNOSIS_IP_DRIVER, ///< I/P驱动诊断 DIAGNOSIS_EEPROM_M95_1, ///< 存储器诊断 M95_1 DIAGNOSIS_EEPROM_M95_2, ///< 存储器诊断 M95_1 DIAGNOSIS_EEPROM_FM24, ///< 存储器诊断 FM24 DIAGNOSIS_EEPROM_LC02, ///< 存储器诊断 LC02 DIAGNOSIS_RTC, ///< RTC诊断 DIAGNOSIS_MAGNET, ///< 磁条诊断 DIAGNOSIS_MICRO_LOOP, ///< 小回路诊断 DIAGNOSIS_PRESS_SENSOR_S, ///< 压力传感器S诊断 => 气源压力传感器故障 DIAGNOSIS_PRESS_SENSOR_A, ///< 压力传感器A诊断 => 阀口A压力传感器故障 DIAGNOSIS_PRESS_SENSOR_B, ///< 压力传感器B诊断 => 阀口B压力传感器故障 DIAGNOSIS_FAIL_MAX, } diag_fail_e; // 超出规格诊断 typedef enum { DIAGNOSIS_TEMPERATURE_UPPER = 0, ///< 温度上限诊断 DIAGNOSIS_TEMPERATURE_LOWER, ///< 温度下限诊断 DIAGNOSIS_SUPPLY_UPPER, ///< 气源压力上限诊断 DIAGNOSIS_SUPPLY_LOWER, ///< 气源压力下限诊断 DIAGNOSIS_SUPPLY_ERROR, ///< 气源压力偏差诊断 DIAGNOSIS_FRICTION_UPPER, ///< 摩擦力上限诊断 DIAGNOSIS_FRICTION_LOWER, ///< 摩擦力下限诊断 DIAGNOSIS_ELASTICITY_UPPER, ///< 弹簧力上限诊断 DIAGNOSIS_ELASTICITY_LOWER, ///< 弹簧力下限诊断 DIAGNOSIS_TRAVEL_UPPER, ///< 行程上限诊断 DIAGNOSIS_TRAVEL_LOWER, ///< 行程下限诊断 DIAGNOSIS_TRAVEL_ERROR, ///< 行程偏差诊断 DIAGNOSIS_SPEC_MAX, } diag_spec_e; // 功能检查诊断 typedef enum { DIAGNOSIS_DRIVER_SWO1 = 0, ///< SWO1诊断 DIAGNOSIS_DRIVER_SWO2, ///< SW O2诊断 DIAGNOSIS_DRIVER_OUTPUT, ///< 4~20ma输出诊断 DIAGNOSIS_CHECK_MAX, } diag_check_e; // 请求维护诊断 typedef enum { DIAGNOSIS_CPU_USAGE = 0, ///< CPU使用率诊断 DIAGNOSIS_MEM_USAGE, ///< 内存使用率诊断 DIAGNOSIS_TRAVEL_SUM, ///< 行程累计诊断 DIAGNOSIS_ACT_SUM, ///< 动作次数诊断 DIAGNOSIS_DEV_REALTIME, ///< 设备时间诊断 DIAGNOSIS_MAINT_MAX, } diag_maint_e; // 诊断信息 typedef struct { uint8_t diag_state; // 状态 uDateTime_TypeDef last_mark_time; // 故障产生时间 uDateTime_TypeDef last_clear_time; // 故障清除时间 } diag_msg_t; // 诊断记录 typedef struct { uint8_t fault_cnt; // 故障数量 diag_msg_t *fault_msg; // 故障信息 } diag_class_record_t; // 诊断结果统计 typedef struct { diag_class_e priority; // 故障最高等级 diag_class_record_t record[DIAG_FAULT_CLASS_NUM]; // 设备故障 alarm_handle_mode_e cmd; // 故障处理 } diag_result_t; // 诊断过程参数 typedef struct { uint8_t start_tag; // 诊断开始标志 uint32_t start_time; // 用于记录诊断起始时间 float32 start_target; // 用于记录诊断起始目标 float32 start_actual; // 用于记录诊断起始实际 } diag_process_t; extern diag_result_t diag_result; extern void diagnosis_init(void); ///< 诊断模块初始化 extern void power_on_diagnosis(void); ///< 开机自检 extern void diagnosis_inspection(void); ///< 过程诊断 extern void diagnosis_fault_deal(void); ///< 故障处理 extern void diagnosis_driver_swo1(float32 cmd); ///< SWO1测试 extern void diagnosis_driver_swo2(float32 cmd); ///< SWO2测试 extern void diagnosis_driver_output(float32 cmd); ///< PWM输出测试 extern void diagnosis_fault_set(diag_class_e class, uint8_t code, uint8_t state); ///< 设置故障状态 extern uint8_t get_diagnosis_fault_num(diag_class_e cls); ///< 获取故障数量 extern state_e get_diagnosis_fault_result(diag_class_e cls, uint8_t code); ///< 获取故障状态 #endif