feat(DLD154Pro): RS485 省 Flash 减配 + 固件 V3.05
为节省 Flash 资源,注释掉 RS485 侧一批低频/非核心协议分支与调试打印: - Modbus: FC 0x03(读保持寄存器)/0x10(批量写)/0x11(Report Slave ID)分发禁用; IR 0x0006/0x0007(Variation)/0x000A/0x000B/0x000C 读禁用(Variation 走全数据块 0x010A/0x010B);HR 0x0000–0x0004/0x0009/0x000A 写禁用(FC 0x06 仅剩 0x0010/0x0011/0x0012 有效) - 700BS: 0x3D DIP 查询禁用 + 4 处调试 PRINT 移除 - MB_MAX_READ_REGS 125→40(40×2=80B 与 MB_MAX_DATA_BYTES 匹配,原 60 会越界 40B) - 呼吸灯光耦加速步长 32→64;OTA 跳转前 mDelaymS(5) 移除 - cmcng.h 版本 V3.04 → V3.05(字符串 + SUB 宏同步) 协议文档已同步标注未实现(rs485-modbus V1.8 / rs485-700bs),见 docs commit。
This commit is contained in:
@@ -17,10 +17,10 @@
|
||||
*/
|
||||
|
||||
#define PRODUCT_MODEL "DLD154Pro"
|
||||
#define FIRMWARE_VER "3.04"
|
||||
#define FIRMWARE_VER "3.05"
|
||||
#define HARDWARE_VER "3.01"
|
||||
#define FIRMWARE_VER_MAIN 3
|
||||
#define FIRMWARE_VER_SUB 4
|
||||
#define FIRMWARE_VER_SUB 5
|
||||
|
||||
/* 归一化基数: variation 换算 dL/L 时除以该值 (2^19=524288, 必须与 peripheral_main.c MEASUREMENT_BASE 同步) */
|
||||
#define LOOP_MEASURE_BASE 524288L
|
||||
|
||||
@@ -1,56 +1,57 @@
|
||||
/*
|
||||
* rs485_modbus.h
|
||||
* DLD154Pro RS485 Modbus RTU 从机协议 — V1.6 私有扩展
|
||||
*
|
||||
* 物理层: RS485 半双工 (共享 UART0, 与 700BS 互斥)
|
||||
* 帧格式: ADDR(1) + FC(1) + DATA(N) + CRC16(2)
|
||||
* 主动上报: 3 级速率 (事件立即 / 活动 150ms / 空闲 800ms), FC 0x04 响应格式
|
||||
*
|
||||
* 2026-07-30 初始实现
|
||||
*/
|
||||
#ifndef __RS485_MODBUS_H__
|
||||
#define __RS485_MODBUS_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*===========================================================================
|
||||
* 协议常量
|
||||
*===========================================================================*/
|
||||
|
||||
/* 寄存器地址范围 */
|
||||
#define MB_IR_FULL_BLOCK_START 0x0100 /* 全数据块起始地址 */
|
||||
#define MB_IR_FULL_BLOCK_COUNT 19 /* 全数据块寄存器数 (0x0100–0x0112) */
|
||||
|
||||
#define MB_HR_AUTO_RPT_ENABLE 0x0010 /* 主动上报使能 (0=关, 1=开) */
|
||||
#define MB_HR_ACTIVE_THRESHOLD 0x0011 /* 活动状态阈值 (|Variation|≥N) */
|
||||
#define MB_HR_SYSTEM_CMD 0x0012 /* 系统指令: 写 0x2C2C 复位 MCU */
|
||||
#define MB_CMD_RESET_MCU 0x2C2C /* 复位 MCU 指令值 */
|
||||
|
||||
/* 主动上报间隔 (mstick() 5ms/tick) */
|
||||
#define MB_RPT_IDLE_MS 160 /* 空闲: 800ms / 5ms = 160 tick */
|
||||
#define MB_RPT_ACTIVE_MS 30 /* 活动: 150ms / 5ms = 30 tick */
|
||||
#define MB_RPT_ACTIVE_HYST 2 /* 降速迟滞: 连续 N 次低于阈值 */
|
||||
|
||||
/* 帧超时: t3.5 = 3.5 × 11 / 9600 ≈ 4.0ms, 取 2 tick (10ms) */
|
||||
#define MB_FRAME_TIMEOUT_TICK 2
|
||||
|
||||
/* 全数据块 CRC 后的帧总长:
|
||||
* addr(1) + fc(1) + byte_cnt(1) + data(38) + crc(2) = 43 */
|
||||
#define MB_FULL_DATA_FRAME_LEN 43
|
||||
|
||||
/* FC 0x03/0x04 读寄存器缓冲 (Modbus 标准: max qty = 0x007D = 125) */
|
||||
#define MB_MAX_READ_REGS 125 /* 单次读取最大寄存器数 */
|
||||
#define MB_MAX_DATA_BYTES 250 /* 125 × 2 字节 */
|
||||
#define MB_RESP_BUF_SIZE (5 + MB_MAX_DATA_BYTES) /* addr+fc+bc+data+crc */
|
||||
|
||||
/*===========================================================================
|
||||
* API
|
||||
*===========================================================================*/
|
||||
|
||||
/* 初始化 Modbus 协议 (UART0 已在 rs485_init 中配置, 此处仅做协议状态初始化) */
|
||||
void modbus_init(void);
|
||||
|
||||
/* 主循环轮询 — 帧接收 & 主动上报调度 (替代 rs485_poll) */
|
||||
void modbus_poll(void);
|
||||
|
||||
#endif /* __RS485_MODBUS_H__ */
|
||||
/*
|
||||
* rs485_modbus.h
|
||||
* DLD154Pro RS485 Modbus RTU 从机协议 — V1.6 私有扩展
|
||||
*
|
||||
* 物理层: RS485 半双工 (共享 UART0, 与 700BS 互斥)
|
||||
* 帧格式: ADDR(1) + FC(1) + DATA(N) + CRC16(2)
|
||||
* 主动上报: 3 级速率 (事件立即 / 活动 150ms / 空闲 800ms), FC 0x04 响应格式
|
||||
*
|
||||
* 2026-07-30 初始实现
|
||||
*/
|
||||
#ifndef __RS485_MODBUS_H__
|
||||
#define __RS485_MODBUS_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*===========================================================================
|
||||
* 协议常量
|
||||
*===========================================================================*/
|
||||
|
||||
/* 寄存器地址范围 */
|
||||
#define MB_IR_FULL_BLOCK_START 0x0100 /* 全数据块起始地址 */
|
||||
#define MB_IR_FULL_BLOCK_COUNT 19 /* 全数据块寄存器数 (0x0100–0x0112) */
|
||||
|
||||
#define MB_HR_AUTO_RPT_ENABLE 0x0010 /* 主动上报使能 (0=关, 1=开) */
|
||||
#define MB_HR_ACTIVE_THRESHOLD 0x0011 /* 活动状态阈值 (|Variation|≥N) */
|
||||
#define MB_HR_SYSTEM_CMD 0x0012 /* 系统指令: 写 0x2C2C 复位 MCU */
|
||||
#define MB_CMD_RESET_MCU 0x2C2C /* 复位 MCU 指令值 */
|
||||
|
||||
/* 主动上报间隔 (mstick() 5ms/tick) */
|
||||
#define MB_RPT_IDLE_MS 160 /* 空闲: 800ms / 5ms = 160 tick */
|
||||
#define MB_RPT_ACTIVE_MS 30 /* 活动: 150ms / 5ms = 30 tick */
|
||||
#define MB_RPT_ACTIVE_HYST 2 /* 降速迟滞: 连续 N 次低于阈值 */
|
||||
|
||||
/* 帧超时: t3.5 = 3.5 × 11 / 9600 ≈ 4.0ms, 取 2 tick (10ms) */
|
||||
#define MB_FRAME_TIMEOUT_TICK 2
|
||||
|
||||
/* 全数据块 CRC 后的帧总长:
|
||||
* addr(1) + fc(1) + byte_cnt(1) + data(38) + crc(2) = 43 */
|
||||
#define MB_FULL_DATA_FRAME_LEN 43
|
||||
|
||||
/* FC 0x03/0x04 读寄存器缓冲 (Modbus 标准: max qty = 0x007D = 125) */
|
||||
/* ⚠ 40/80 匹配: 40 寄存器 × 2B = 80B 缓冲 (2026-08-27 省 Flash 减配, 原 60 会越界 40B) */
|
||||
#define MB_MAX_READ_REGS 40 //125 /* 单次读取最大寄存器数 */
|
||||
#define MB_MAX_DATA_BYTES 80 //250 /* 40 × 2 字节 */
|
||||
#define MB_RESP_BUF_SIZE (5 + MB_MAX_DATA_BYTES) /* addr+fc+bc+data+crc */
|
||||
|
||||
/*===========================================================================
|
||||
* API
|
||||
*===========================================================================*/
|
||||
|
||||
/* 初始化 Modbus 协议 (UART0 已在 rs485_init 中配置, 此处仅做协议状态初始化) */
|
||||
void modbus_init(void);
|
||||
|
||||
/* 主循环轮询 — 帧接收 & 主动上报调度 (替代 rs485_poll) */
|
||||
void modbus_poll(void);
|
||||
|
||||
#endif /* __RS485_MODBUS_H__ */
|
||||
|
||||
@@ -730,7 +730,7 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
|
||||
// 0x4F, 0x54, 0x41
|
||||
// PRINT("jump OTA \n");
|
||||
WWDG_ResetCfg(DISABLE);
|
||||
mDelaymS(5);
|
||||
// mDelaymS(5);
|
||||
Jump_OTA();
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ uint8_t g_rs485_id = 0;
|
||||
#define BREATH_HOLD_LOW 3
|
||||
|
||||
/* 光耦有信号时加速参数 (周期 ~1s) */
|
||||
#define BREATH_OPTO_DUTY_STEP 32 // 步长 4x → 渐亮/渐灭各 4 步 (~0.5s 周期)
|
||||
#define BREATH_OPTO_DUTY_STEP 64 // 步长 4x → 渐亮/渐灭各 4 步 (~0.5s 周期)
|
||||
#define BREATH_OPTO_HOLD_TICKS 1 // 保持 50ms
|
||||
|
||||
/* 看门狗超时: Fsys=60MHz, WDOG_CLK=Fsys/131072≈458Hz, 0xFF≈558ms */
|
||||
|
||||
@@ -62,7 +62,7 @@ void rs485_init(void)
|
||||
|
||||
RS485_RE_RX(); // 默认接收模式
|
||||
_hb_last_ms = mstick(); // 对齐心跳起始时刻,避免首次立即触发
|
||||
PRINT("RS485: init ok, addr=%d, baud=%d\n", g_rs485_id, RS485_BAUD);
|
||||
// PRINT("RS485: init ok, addr=%d, baud=%d\n", g_rs485_id, RS485_BAUD);
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
@@ -126,7 +126,7 @@ static void handle_query_freq(uint8_t addr)
|
||||
static void handle_reset_init(uint8_t addr)
|
||||
{
|
||||
SYS_ResetExecute();
|
||||
PRINT("RS485: coil reset init\n");
|
||||
// PRINT("RS485: coil reset init\n");
|
||||
}
|
||||
|
||||
/* 0x3D — 查询拨码 DIP1-5 (DLD154Pro 无物理拨码, 从 BLE 配置映射) */
|
||||
@@ -222,7 +222,7 @@ static void rs485_process_frame(void)
|
||||
uint8_t xorr = _rx_buf[2];
|
||||
|
||||
if ((stx ^ addr) != xorr) {
|
||||
PRINT("RS485: XOR fail %02X %02X %02X\n", stx, addr, xorr);
|
||||
// PRINT("RS485: XOR fail %02X %02X %02X\n", stx, addr, xorr);
|
||||
_rx_len = 0;
|
||||
return;
|
||||
}
|
||||
@@ -237,9 +237,9 @@ static void rs485_process_frame(void)
|
||||
case CMD_QUERY_STATUS: handle_query_status(addr); break;
|
||||
case CMD_QUERY_FREQ: handle_query_freq(addr); break;
|
||||
case CMD_RESET_INIT: handle_reset_init(addr); break;
|
||||
case CMD_QUERY_DIP: handle_query_dip(addr); break;
|
||||
// case CMD_QUERY_DIP: handle_query_dip(addr); break;
|
||||
default:
|
||||
PRINT("RS485: unknown cmd 0x%02X\n", stx);
|
||||
// PRINT("RS485: unknown cmd 0x%02X\n", stx);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user