绿灯上电自检快闪: 原固定 128 样本(≈1.3s)即判稳, 与基准是否真稳无关;
stable_cnt 仅 init_vd_single 清零, 有限存在超时/安全复位(LC_Reset=1)
重学阶段残留计数 → 二次稳定期 1 样本瞬间判稳 (同 V4B 旧缺陷)。
修复 (四路 unit 独立):
- TaskLoop.h: +STABLE_ORIGIN_PPT 1 / STABLE_SETTLE_WINDOWS 2 /
STABLE_MAX_SAMPLES 500(≈5s兜底); Loop154_Unit +settle_cnt
- TaskLoop.c vd1_task_per_channel 稳定期: 每窗(100样本≈1s)完成比较
Origin 均值漂移 ≤0.1% → settle++, 否则清零; 判稳=最少128样本+
连续2窗稳定 或 500 样本兜底; 判稳退出清零
- init_vd_single / 有限存在超时 / 安全复位超时重学路径统一清零自检计数
- poll_green_led 条件不变: 绿灯闪至本路基准稳定才停 (四路独立)
验证: tests/test_stable_settle.c 5 项 PASS (常量200/首窗尖峰400/
持续漂移500兜底/重学复位200防呆/Origin=0守卫);
gcc -fsyntax-only TaskLoop.c 0 error
文档: vd960Loop/docs/devlog V1.03 置顶; DLD960_技术规格书/产品手册
V1.04 (上电稳定期/绿灯自检语义 + 修订记录)
cmcng.h: FIRMWARE_VER "1.02"→"1.03" (MAIN=1/SUB=3, SSUB=1保持)
待现场验证: 绿灯自检时长(干净≈2s/扰动3~4s/兜底5s)与四路独立闪烁
109 lines
3.8 KiB
C
109 lines
3.8 KiB
C
/**
|
||
**************************************************************************
|
||
* @file cmcng.h
|
||
* @version v1.0
|
||
* @date 2025-09-08
|
||
* @brief һЩ����
|
||
**************************************************************************
|
||
* Copyright notice & Disclaimer
|
||
* * Create 2025-09-08 by wangfq
|
||
* *
|
||
**************************************************************************
|
||
*/
|
||
#ifndef __CMCNG_H__
|
||
#define __CMCNG_H__
|
||
#include <stdio.h>
|
||
#include <stdint.h>
|
||
|
||
#define PRODUCT_MODEL "DLD960"
|
||
#define FIRMWARE_VER "1.03"
|
||
#define HARDWARE_VER "1.00"
|
||
#define FIRMWARE_VER_MAIN 1
|
||
#define FIRMWARE_VER_SUB 3
|
||
#define FIRMWARE_VER_SSUB 1
|
||
#define HARDWARE_VER_MAIN 1
|
||
#define HARDWARE_VER_SUB 0
|
||
#define HARDWARE_VER_SSUB 0
|
||
|
||
// LOOP_MEASURE_BASE: variation 归一化基数 (协议 0x64 响应尾部 3B LE 上报)
|
||
// ⚠ 必须与 TaskLoop.h 的 MEASUREMENT_BASE 同步 (AT32F421 @120MHz = 2^17 = 131072)
|
||
// 第三方评估换算: Δf/f ≈ variation/LOOP_MEASURE_BASE; ΔL/L ≈ -2×variation/LOOP_MEASURE_BASE
|
||
#define LOOP_MEASURE_BASE 131072L
|
||
|
||
|
||
#define FUNCTION_A 0x01 // 二次判断
|
||
#define FUNCTION_B 0x02 // 二次判断增强条件判断
|
||
#define FUNCTION_C 0x04 //
|
||
#define FUNCTION_D 0x08 //
|
||
|
||
|
||
#ifdef DEBUG
|
||
#define PRINT(X...) printf(X)
|
||
#else
|
||
#define PRINT(X...)
|
||
#endif
|
||
|
||
#define LOOP_CAPTURE_MAX 4 // 4 loop capture
|
||
|
||
#define CMD_DEV_Ver 0x4A // Version
|
||
|
||
#define CMD_DBN_SET_MCJQ_PARAM 0x63 // 设置 车检器多路参数
|
||
#define CMD_DBN_GET_MCJQ_PARAM 0x64 // 读取 车检器多路参数
|
||
|
||
#define CMD_DBN_DEV_RESET 0x6D
|
||
|
||
#define CMD_DBN_LOOP_SAMPLE_PARAM 0x87
|
||
#define CMD_DBN_LOOP_BALANCE_PARAM 0x88
|
||
#define CMD_DBN_LOOP_RELEASE_PLANB 0x89
|
||
#define CMD_DBN_LOOP_SENS_LIST 0x8A
|
||
#define CMD_DBN_SET_CJQ_FACTORY 0x92
|
||
|
||
#define CMD_SUB_SENS_REPORT 0xC0 //设备主动上报传感信息
|
||
// #define CMD_REQUIRE_DEV_MAC_ADDR 0xC1
|
||
// #define CMD_CHANGE_DEV_ADDR_BY_MAC 0xC2
|
||
// #define CMD_SET_LED 0xC3
|
||
// #define CMD_SET_RELAY 0xC4
|
||
#define CMD_SENS_ACS_ENABLE 0xC5 // 设备主动上报 使能
|
||
|
||
typedef enum
|
||
{
|
||
SENS_NONE = 0,
|
||
SENS_SUB_INFO = 1, // 传感器设备信息
|
||
SENS_OBJ_DYNAMIC = 2, // 动态目标类型
|
||
SENS_SOUTPUT_STATUS = 3, // 当前开关量输出的状态
|
||
SENS_DETAIL_CNG = 4, // 详细配置
|
||
SENS_LOOP_DYNAMIC = 5, // 线圈动态信息
|
||
SENS_OBJ_BackGround = 6, //
|
||
SENS_OBJ_INSIDE = 7, //
|
||
SENS_LOOP_TREND,
|
||
SENS_OBJ_DYNAMIC_SIMPLE,
|
||
SENS_OBJ_STATIC_XuJing, //10, 0x0A
|
||
SENS_DOBULE_LOOP_ESTIMATE, //0x0B, 线圈环境评估
|
||
SENS_MULTI_LOOP_DYNAMIC, // 0x0C, 多路线圈环境动态信息
|
||
} SUB_SENS_TYPE; // 传感数据类型
|
||
|
||
|
||
#define BUFF_STACK_SIZE 64
|
||
// USART1
|
||
#define USART1_RX_BUFFER_SIZE BUFF_STACK_SIZE
|
||
extern char usart1_rx_buffer[USART1_RX_BUFFER_SIZE];
|
||
|
||
typedef struct _PKG_UART_
|
||
{
|
||
uint8_t flag;
|
||
uint8_t offset;
|
||
uint8_t len;
|
||
uint8_t pkg[BUFF_STACK_SIZE];
|
||
uint32_t tick;
|
||
}Pkg_Uart;
|
||
extern Pkg_Uart g_pkg_uart_1;
|
||
extern Pkg_Uart g_pkg_uart_report;
|
||
|
||
extern uint8_t g_flag_output;
|
||
extern uint8_t g_flag_output2;
|
||
extern uint8_t g_input_div;
|
||
|
||
void uart_report_packet_loop_acs(uint8_t flag);
|
||
|
||
#endif
|