127 lines
4.9 KiB
C
127 lines
4.9 KiB
C
/**
|
|
* @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
|