wangfq
|
2088cc267c
|
docs: Modbus 主动上报 MCU 资源占用分析
- ISR 层不受 TX 阻塞影响 (TMR0/TMR1 独立运行)
- @9600 活动态 TX 阻塞 45ms (30% CPU), 余量 55ms/150ms → 可行但临界
- @19200 TX 阻塞减半至 22ms (15% CPU) → 推荐
- RAM 增量 <170B, Flash 增量 ~8.5KB
- 优化建议: 提高波特率 / TX FIFO 成组填充 / 间隔参数可配
|
2026-07-30 17:34:17 +08:00 |
|
wangfq
|
98015d8c03
|
fix: setMaximumBlockCount → document().setMaximumBlockCount()
PySide6 6.11 不再提供 QTextEdit/QTextBrowser 上的直接方法,
改为通过 document() 代理访问。
|
2026-07-30 16:29:59 +08:00 |
|
wangfq
|
0638e98949
|
fix: QTextEdit → QTextBrowser (setMaximumBlockCount 兼容性)
QTextEdit 没有 setMaximumBlockCount 方法 (Windows 上报 AttributeError),
QTextBrowser 继承 QTextEdit 且支持该方法, 无其他副作用。
|
2026-07-30 16:25:45 +08:00 |
|
wangfq
|
e97388500b
|
feat: 集成 DLD154Tool — PySide6 桌面串口调试工具
7 文件 1331 行, 支持 DLD154Pro 双协议:
- 700BS: 状态/频率/拨码/复位查询 + 自动轮询
- Modbus RTU: FC 0x02/0x03/0x04/0x06/0x10/0x11
+ 全数据块(0x0100)美化解析 + 主动上报控制
- PySide6 GUI, 4 Tab, 后台串口线程
从独立仓库 wangfq/DLD154Tool 合并入 DLD154Pro monorepo
|
2026-07-30 16:06:58 +08:00 |
|
wangfq
|
df6e38f118
|
refactor: Modbus 缓冲大小用宏替换硬编码 250
- rs485_modbus.h: +MB_MAX_READ_REGS(125) / MB_MAX_DATA_BYTES(250) / MB_RESP_BUF_SIZE(255)
- rs485_modbus.c: data_buf[250]→data_buf[MB_MAX_DATA_BYTES]
buf[5+250] →buf[MB_RESP_BUF_SIZE]
quantity>125→quantity>MB_MAX_READ_REGS
|
2026-07-30 15:28:11 +08:00 |
|
wangfq
|
c7176b93f2
|
docs: devlog — Modbus RTU V1.6 编码实现条目
|
2026-07-30 13:55:09 +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
|
df0585162b
|
docs: Modbus V1.6 — 主动上报 + 全数据块私有协议扩展
新增:
- IR 0x0100-0x0112 全数据块(19 reg): 灵敏度/频率/融合模式/car_state/线圈/光耦/频率/CAPVD/Variation/断开计数/继电器计数/车间距-通过时间
- HR 0x0010 Auto Rpt Enable (0=关闭/1=使能)
- HR 0x0011 Active Thr (变化量阈值, 默认10)
主动上报:
- 3 级速率: 事件立即 / 活动150ms / 空闲800ms
- 帧格式复用 FC 0x04 响应(与轮询一致, 降低解析复杂度)
- 车间距(上升沿) / 通过时间(下降沿) 共用寄存器, Time Type 区分
- §6.7 完整设计说明 + 700BS 对照表更新
|
2026-07-30 11:47:56 +08:00 |
|
wangfq
|
ccd996d56e
|
refactor: 融合模式枚举重排,地感且光耦后移
0=或 1=混行 2=ETC 3=且 4=仅地感 5=仅光耦 6=复位
- storage.h: AND_RADAR 从位置 2 移至位置 4
- peripheral_main.c: 注释块 MODE 标签及内联模式号同步
- 全部 4 份文档表格/节号/版本号对齐
|
2026-07-30 09:01:12 +08:00 |
|
wangfq
|
8a01a5e769
|
refactor: 输出融合模式枚举重排,出厂默认模式0(地感或光耦)
枚举值重新分配:
旧: 0=复位 1=仅地感 2=仅光耦 3=或 4=且 5=混行 6=ETC
新: 0=或 1=且 2=混行 3=ETC 4=仅地感 5=仅光耦 6=复位
涉及:
- storage.h: 枚举顺序重排
- peripheral_main.c: 注释号同步; LED区间判断改用精确比较; 工厂默认direction_mode=0x00
- 三份文档: 融合模式表/示例/默认值全部同步
|
2026-07-29 18:46:35 +08:00 |
|
wangfq
|
c22d55236f
|
docs: Modbus协议 V1.2→V1.3 修正对齐实际硬件参数
- 灵敏度档位 3→4 (范围 0-3, 默认 1)
- MEASUREMENT_BASE 131072→524288 (CH591R@60MHz 无分频)
- Origin 窗口 100→500
- 融合模式 5/6 待定义→已实现+状态机
- 命令示例数值对齐实际值 (Freq/CAPVD/Origin/Variation)
- 700BS 标注为已完成
- 版本号 FW 3.00→3.01
|
2026-07-29 11:11:41 +08:00 |
|
wangfq
|
67de020351
|
docs: 发布 V3.01 技术规格书 + 产品说明书
- 新增 docs/technical-spec.md: 系统架构、电气参数、IO引脚、检测算法全链路、时序状态机、7种输出融合模式、通信协议、Flash存储布局
- 新增 docs/product-manual.md: 产品概述、技术参数、硬件接口、BLE配置项、灵敏度、融合模式(含人车混行防砸/ETC)、安装指南、故障排查、RS485集成速查
- 更新 docs/devlog.md: 置顶文档发布条目
- cmcng.h: 固件版本 3.00→3.01
|
2026-07-29 09:50:46 +08:00 |
|
wangfq
|
5c10f64183
|
docs: 开发日志 — LED 同步继电器状态
|
2026-07-28 16:54:11 +08:00 |
|
wangfq
|
507441876f
|
feat(led): 光耦参与模式(2-6)下绿色LED同步继电器状态
- TMR1 ISR 50ms 块末尾新增 LED 同步逻辑
- 仅 g_output_radar_mode >= 2 且正常运行(非断开/稳定期)时生效
- LEDA 跟随 g_loop_acs_info.relay1_state: 继电器吸合→亮, 释放→灭
- 断开/稳定期 LED 闪烁优先级不变(5ms 段优先处理)
|
2026-07-28 14:29:09 +08:00 |
|
wangfq
|
978cce4af8
|
feat(opt): 光耦输出模式完整实现 — 6种融合逻辑 + 人车混行/ETC 状态机
- 新增 g_opt_trigger 全局变量:opt_input_poll() 产出, TMR1 ISR 消费
- MODE 1/2/3/4: 纯地感/纯雷达/或/与 — g_opt_trigger 直出光耦信号
- MODE 5 (HUMAN_VD_MIX): 3态机 IDLE→ARMED→WINDOW, 3s防砸窗口
- MODE 6 (ETC): 3态机 IDLE→ARMED→DEBOUNCE, 500ms防抖释放
- TMR1 ISR case 0: 6模式融合判决 (coil || opt_trigger / coil && opt_trigger等)
- 光耦防抖: 3样本多数表决, ~30ms消抖
- MODE 0 复位逻辑不变
- docs: 更新开发日志 (状态机图 + 各模式对照表)
|
2026-07-28 09:34:18 +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
|
ffaa5cd733
|
docs: 光耦输入复位 + mstick() 时间单位修正
|
2026-07-24 18:09:39 +08:00 |
|
wangfq
|
e974fd7814
|
fix(rs485): 修正心跳周期 — mstick() 单位是 5ms/tick
RS485_HEARTBEAT_MS: 5000→1000 (5s / 5ms = 1000 tick)
RS485_FAULT_MS: 1000→200 (1s / 5ms = 200 tick)
|
2026-07-24 17:48:18 +08:00 |
|
wangfq
|
7af3631b8e
|
fix(opt): 修正光耦 500ms 阈值 — mstick() 单位是 5ms/tick
mstick() = TimingDelayInc (TMR1 ISR 每 5ms++)
500 → 2.5s, 应为 100 → 500ms
|
2026-07-24 17:47:11 +08:00 |
|
wangfq
|
af364cea65
|
fix(opt): 光耦复位改为上升沿触发 + 使能 PB10 数字输入
1. 逻辑改为上升沿触发:
干接点接通(PB10=0) ≥500ms → 断开(上升沿) → SYS_ResetExecute()
中途断开 <500ms → 计时清零, 不触发
2. 使能 PB10 数字输入:
R32_PIN_CONFIG2 &= ~(1UL<<26)
RB_PIN_PB10_15_DIS 默认置位关闭数字输入以省电,
DLD110SV4 未用 PB10 作输入因此未配置
|
2026-07-24 16:43:04 +08:00 |
|
wangfq
|
71366fe1a7
|
fix(opt): 光耦复位改为 SYS_ResetExecute() 芯片全复位
INIT_VD() 仅复位检测状态,SYS_ResetExecute() 全芯片复位
包括 MCU 外设、BLE 协议栈、RS485 全部重新初始化
|
2026-07-24 13:35:02 +08:00 |
|
wangfq
|
b98c931baa
|
feat: 光耦输入复位功能 (PB10 ≥500ms 低电平触发 INIT_VD)
opt_input_poll():
- g_fm_radar_input_disable=0: 雷达模式 (暂未实现)
- g_fm_radar_input_disable=1: 光耦复位模式
PB10 低电平 ≥500ms → INIT_VD() + rs485_reset_heartbeat()
<500ms 脉冲被消抖忽略 (上升沿清零计时)
|
2026-07-24 12:09:53 +08:00 |
|
wangfq
|
a1c617facb
|
docs: 开发日志合并到 docs/devlog.md
- 删除根目录 DEVELOPMENT_LOG.md
- 灵敏度分析更新为 4 档 (新增最高档 sens_in=14 sens_out=12)
- 追加 RS485 700BS 协议实现踩坑全记录
- 标记 RS485 待办为已完成
|
2026-07-24 12:02:00 +08:00 |
|
wangfq
|
5f70f59530
|
docs: 开发日志 — RS485 协议踩坑 + 四级灵敏度
|
2026-07-24 11:57:15 +08:00 |
|
wangfq
|
4964e0d019
|
feat: 支持四级灵敏度 (MAX_LOOP_SENS_AMOUNT 3→4)
- SensTable: 新增第四档 14 (原 108/54/28)
- SensTable1: 新增第四档 12 (原 81/32/16)
- set_factory_param(): total 由 MAX_LOOP_SENS_AMOUNT 宏决定
|
2026-07-24 11:10:44 +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 |
|
wangfq
|
08df2ea6d7
|
docs: 700BS 协议 Markdown + Modbus V1.2 700BS 兼容
- 新增 docs/rs485-700bs-protocol.md: 700BS V1.15 完整协议文档
- Modbus V1.2: DI +Freq Low/High Fault, +Init Flag; IR +DIP Virtual; HR +Device Reset(0x00FF), +Init Flag Clear(0x00FE)
- +§7 700BS 兼容对照表 (FA/1B/2C/3D/AA → Modbus 寄存器映射)
|
2026-07-22 18:58:01 +08:00 |
|
wangfq
|
32cd45323b
|
docs: Modbus 协议 V1.1 — 修正位宽+输出模式+融合模式
- CAPVD/Origin/Variation → 32-bit (各占2个寄存器)
- Output Mode 删除脉冲模式(单继电器仅存在输出)
- 新增 Fusion Mode (0x0001): direction_mode低4位, 0=仅地感 ~ 6=ETC
- direction_mode 字段重构: bit[7:4]=function_mode, bit[3:0]=fusion_mode
- Fusion Mode 仅在光耦配置为雷达输入时有效
|
2026-07-22 18:15:39 +08:00 |
|
wangfq
|
b13e8e4030
|
docs: RS485 Modbus RTU 协议 V1.0 草案
- 物理层: RS485 半双工, 9600-N-8-1 默认
- 寄存器映射: 离散输入(0x02)、输入寄存器(0x04)、保持寄存器(0x03/0x06/0x10)
- RS485 地址/波特率 只读 (BLE 带外修改,防止 Modbus 误改失联)
- 设计决策: 参数持久化、灵敏度ΔL/L对应、输出模式、半双工时序
|
2026-07-22 14:27:54 +08:00 |
|
wangfq
|
579e1b7dc8
|
docs: 记录 BLE RS485 配置读写 + 功能码细分 开发日志
|
2026-07-22 14:25:56 +08:00 |
|
wangfq
|
441a3e61cb
|
feat: BLE 新增 RS485 地址/波特率读写 + 空闲关蓝牙超时 + 功能码细分
- 新增 CMD_DBN_RW_UART_BAUD (0x31): 读写 RS485 波特率、485 地址、空闲关蓝牙超时
- storage.h: 新增 flash 地址 ADDR_BT_Close_TIMEOUT_Offset(0x10)、Addr_RS485_Baud_Offset(0x11,3B)、Addr_RS485_ID_Offset(0x14)
- 功能码细分: g_function_mode bit0→fm_700bs_disable(0=700BS/1=Modbus), bit1→fm_radar_input_disable(0=光耦/1=复位)
- factory_dev 出厂默认: RS485 ID=1, 波特率=9600, 蓝牙超时=0
- para_store_init 上电从 flash 恢复所有新增配置
|
2026-07-22 14:25:32 +08:00 |
|