11 Commits
Author SHA1 Message Date
wangfq d1fde88dd1 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。
2026-08-27 08:55:20 +08:00
wangfq 22511ba466 feat: Modbus 新增 0x0012 系统指令寄存器,写 0x2C2C 复位 MCU (对齐 700BS 0x2C) 2026-07-31 08:21:39 +08:00
wangfq 2142674c3e refactor: Modbus 默认波特率 115200 + 资源分析重评估
分析结论 (115200 vs 9600):
- TX 阻塞: 4.3ms (曾 44.8ms) → 活动态 CPU 仅 +2.9%
- 主循环延迟 < 半个测量窗, 不影响线圈检测/光耦/BLE
- 从"临界可用"变为"完全充裕"

固件修复:
- rs485_init: 硬编码 RS485_BAUD → 使用 g_storage_uart_baud (flash 可配)
- 协议文档: Modbus 默认 115200
- DLD154Tool: 串口默认 115200
2026-07-30 17:39:27 +08:00
wangfq e32f3892fe feat: Modbus RTU V1.6 私有协议编码实现
新增:
- rs485_modbus.h/c — 完整 Modbus RTU 从机实现 (516行)
  · FC 0x02 读离散输入 (9-bit 位图: car_state/线圈/光耦/继电器)
  · FC 0x03 读保持寄存器 (含 HR 0x0010/0x0011)
  · FC 0x04 读输入寄存器 (基础 IR + 全数据块 0x0100-0x0112)
  · FC 0x06/0x10 写寄存器 (含值域校验+只读拦截)
  · FC 0x11 Report Slave ID
  · CRC16 查表 (poly=0xA001)
  · 全数据块组装 (19 reg = 38B big-endian)
  · 主动上报 3 级速率调度 (事件立即/活动150ms/空闲800ms)
  · 车间距/通过时间测量 (mstick/2=10ms单位, relay边沿触发)
  · 光耦状态实时读取 (GPIOB_ReadPortPin)
  · Holding Register 写穿透: Fusion Mode 同步 direction_mode,
    Hold Time 同步 g_hold_time, Freq Level 同步 g_loop_cng_unit

改造:
- rs485_700bs.h/c: 暴露 rs485_send() + rx缓冲(_rx_buf/_rx_len/_rx_last_tick) 供Modbus共用
- peripheral_main.c: g_fm_700bs_disable 分派 700BS/Modbus; modbus_init() 随 rs485_init 调用
2026-07-30 12:02:24 +08:00
wangfq f5edab43c2 feat(opt): 光耦输出模式升级 — DLD_OUTPUT_MODE 枚举 + direction_mode 低四位取值
- 新增 DLD_OUTPUT_MODE 枚举: 7种模式(复位/纯地感/纯雷达/或/与/人车混行/ETC)
- g_fm_radar_input_disable → g_output_radar_mode: 从 function_mode bit1 改为 direction_mode & 0x0F
- 仅模式0(复位)已实现, 1~6 暂为 no-op
- BLE 回读字段改为 direction_mode 完整字节
- rs485_700bs.c: 注释块重排(无功能变更)
- docs: 更新开发日志
2026-07-28 09:26:09 +08:00
wangfq 2d7a5d7366 fix(rs485): 频率改用 loop1_CAPVD,绕过 flag_change 冻结
g_loop_acs_info.loop_capvd 被 flag_change 门控:
  INIT_VD() / 车辆进出事件 → flag_change=1 → loop_capvd 冻结
  flag_change 仅在 usart_packet_processing_acs_loop 清零
  BLE 断开时 flag_change 永远不清零 → loop_capvd 永远不更新

改用 loop1_CAPVD (vd1_task 每次实时更新,不受 flag_change 影响)
2026-07-24 10:04:02 +08:00
wangfq c8d1bfa4e8 fix(rs485): 频率从原始 capvd 直接计算,不再依赖 BLE 报告通道
rs485_get_freq(): 用 g_loop_acs_info.loop_capvd + loop1_LPCNT 直接算
freq = FREQ_SYS * LPCNT / capvd + 360

之前 g_loop_acs_info.frequent 只在 usart_packet_processing_acs_loop
里赋值,该路径被 g_dbn_ble_state_acs_enable.enable 门控,
BLE 断开时 freq 永远为 0
2026-07-24 09:46:02 +08:00
wangfq cd42b75f53 fix(rs485): 修复死循环导致地感不工作
根因:
1. rs485_send() 中 while(R8_UART0_TFC == 0) 逻辑反了
   TFC=0 表示 FIFO 空, ==0 时条件永真 → 死循环卡死主循环
   修复: ==0 → !=0 (等 FIFO 空再写下一字节)

2. rs485_init() 从未被调用
   gpio_uart_init() 仅写了注释, 未实际调用 → UART0/GPIO 未初始化
   修复: 替换注释为实际函数调用

3. 首次心跳立即触发
   _hb_last_ms 静态初始化为 0 → 首次 poll 立即发心跳
   修复: rs485_init() 末尾 _hb_last_ms = mstick()
2026-07-24 09:06:51 +08:00
wangfq db234bad1b fix(rs485): 修复 UART0 API 编译错误
- UART0_ResetRTXFIFO → UART0_CLR_RXFIFO/UART0_CLR_TXFIFO (SDK无此函数)
- UART0_Res_1Byte → UART_1BYTE_TRIG (正确枚举值)
- UART0_GetITFlag() 改为 switch 模式 (无参宏,非函数调用)
- 删除不存在的 UART0_ClearITFlag (读RBR自动清中断)
- ISR 增加 UART_II_LINE_STAT 处理防中断死锁
2026-07-24 08:28:10 +08:00
wangfq d50135c77b feat(rs485): 0x3D DIP查询从BLE配置实时映射灵敏度/输出/延时
- rs485_700bs.c: handle_query_dip() 从 g_loop_cng_unit 读取 sensitvity/output_mode/exist_mode/delay_time,映射为 DIP1-5 位
- rs485_700bs.h: 恢复 CMD_QUERY_DIP / RSP_DIP 常量
- docs: 添加 DLD-700BS V1.15 使用说明书 MD 版
- DLD154Pro 无物理拨码,所有配置通过 BLE 管理,0x3D 返回当前有效参数
2026-07-23 19:07:12 +08:00
wangfq ab469315bf feat(DLD154Pro): RS485 700BS 从机协议实现
新增 rs485_700bs.c/h:
  - UART0 9600 8N1 中断接收, PA13 方向控制
  - 命令处理: 0xFA(状态)/0x1B(频率)/0x2C(复位)/0x3D(拨码)
  - 心跳上报: 0xAA 空闲5s/故障1s/事件立即
  - XOR 校验, 地址匹配 (g_rs485_id)
  - 0x2C 复位: loop1_LC_Reset + INI_LOOP 完整初始化

集成 peripheral_main.c:
  - rs485_init() 替换 GPIO placeholder
  - rs485_poll() 加入主循环 (cjq_srv 之后)
2026-07-23 18:51:30 +08:00