STM32从零到量产开发:四路继电器工业控制模块开发 - --- 上位机操作说明书
配套固件:P02_Relay_Controller_4Channels(STM32F103RCT6,4 路继电器 + 4 路数字量输入 DI)
通信方式:RS232(UART4,115200 8N1,行文本协议)
软件版本:P02HostPC v1.0(C# / .NET 8 / WinForms)
适用场景:产线调试、现场维护、演示展示
1. 软件获取与启动
1.1 环境要求
- Windows 10 / 11(WinForms 原生)
- Visual Studio 2022+(勾选".NET 桌面开发"工作负载)
1.2 界面总览
┌──────────────────────────────────────────────────────────────────────┐
│ 端口[COM3▾] 波特[115200▾] [连接/断开] │
├─────────────── 继电器控制 ───────────┬────────── 数字量输入 DI ──────┤
│ [CH1 OFF][CH2 OFF][CH3 OFF][CH4 OFF] │ [DI1][DI2][DI3][DI4] │
│ [全开][全断] 位掩码[ ] [发送] │ 状态:UPTIME 51s RESETS 3 │
├─────────────── 只读信息 ─────────────┼────────── 配置(写 Flash)─────┤
│ [INFO][PARAM][STATS][FS] │ ADDR[ ] BAUD[0(9600)▾] [应用] │
│ ┌─────────────────────────────────┐ │ FS_EN[0▾] FS_SEC[ ] │
│ │(只读信息显示区) │ │ [恢复出厂] [PING] │
│ └─────────────────────────────────┘ │ │
├─────────────── 日志终端 ─────────────────────────────────────────────┤
│ [TX> / RX< 收发与提示,带时间戳] │
├──────────────────────────────────────────────────────────────────────┤
│ 命令行[ ] [发送] 轮询[1▾] [✓自动] │
└──────────────────────────────────────────────────────────────────────┘
2. 第一次连接(必读)
- 用 USB 转 RS232 线连接 PC 与 P02 板的 UART4(PC10/PC11)。
- 上位机顶部"端口"下拉框选择正确串口号(台架通常为 COM3)。若列表为空,点端口框右侧刷新或重启软件。
- 务必先关闭其他串口助手(如 SSCOM、友善串口助手),否则 COM 被占用会连接失败或全静默。
- 点 连接 。成功日志显示
[*] 已连接 COM3 @ 115200,并自动发一次 STATUS。 - 点 PING 验证链路:日志出现
[OK] PING -> PONG (链路正常)即 OK。 - 默认勾选"自动",软件每 1 秒自动轮询一次 STATUS,继电器/DI/时长实时刷新。
3. 功能操作指南
3.1 继电器控制(4 路)
| 操作 | 方法 | 预期 |
|---|---|---|
| 单路翻转 | 点 CH1~CH4 按钮 |
发 RELAY n ON/OFF,日志 OK;按钮变绿=吸合、灰=释放;约 1s 内被轮询校正 |
| 全部吸合 | 点 全开 | 发 RELAY ALL 15 |
| 全部释放 | 点 全断 | 发 RELAY ALL 0 |
| 位掩码控制 | 在"位掩码"框输入 0-15 或 0x0-0xF,点 发送 |
如 5=CH1+CH3、0xF=全开、0x0=全断 |
位掩码规则:bit0=CH1,bit1=CH2,bit2=CH3,bit3=CH4。非法输入(如 16、0x10、字母)会弹窗提示,不发送。
单路 ON/OFF 命令成功后立即更新按钮颜色;全开/全断/位掩码依赖"自动轮询"在 1s 内回刷显示。
3.2 数字量输入 DI(只读)
- 4 个 DI 指示灯:绿色=高电平(1),灰色=低电平(0)。
- 受外部输入电平实时驱动,由 STATUS 轮询刷新。
- 也可点只读信息区下方命令行 输入
DI单独查询。
3.3 只读信息(点按钮查询,结果显示在信息框)
| 按钮 | 命令 | 显示内容 |
|---|---|---|
| INFO | INFO |
固件版本、MCU 型号、运行时长/复位、Modbus 帧数/CRC 错误、Flash 魔术字与 CRC |
| PARAM | PARAM |
Modbus 从站地址、RS485 波特索引(文本)、链路使能 |
| STATS | STATS |
诊断:帧数/CRC 错误/异常;各通道继电器动作累计次数;寿命告警掩码;运行秒/小时 |
| FS | FS |
故障安全:使能状态、超时秒、当前是否已进入安全态(active=1=通信超时) |
信息框为共用显示区,每次查询覆盖上次内容。
3.4 配置写 Flash(掉电保存,谨慎操作)
- 在"配置"区填好参数:
- ADDR :Modbus 从站地址
1-247 - BAUD :RS485 波特索引
0(9600) / 1(19200) / 2(38400) / 3(57600) / 4(115200) - FS_EN :故障安全使能
0/1 - FS_SEC :故障安全超时
1-254秒
- ADDR :Modbus 从站地址
- 点 应用 → 按填好的项分批发
ADDR/BAUD/FS EN/FS SEC写 Flash,日志逐条回显OK。- 空着的输入框会被跳过;非法范围会在日志提示(如
ADDR 范围 1-247)。
- 空着的输入框会被跳过;非法范围会在日志提示(如
- 恢复出厂 :二次确认弹窗(Yes/No),确认后发
FACTORY重置 Modbus 地址/波特/故障安全为出厂值(建议重启生效)。
3.5 PING 与命令行透传
- PING :心跳测试,回
PONG证明串口链路通。 - 命令行 :输入任意固件支持的命令(如
HELP、STATUS、LED、RELAY 2 ON...),点 发送 或按 回车 透传。所有收发记录在日志终端。
3.6 日志终端
- 实时记录所有 TX>(发出命令) 与 RX<(收到响应) ,带
HH:mm:ss时间戳。 - 自动滚到底部。可用于排查通信问题(如长时间无 RX 可能是串口占用或波特不对)。
4. 定时轮询
- "轮询"数值框:刷新间隔
1-10秒(默认 1)。 - "自动"复选框:勾选后连接期间持续自动发 STATUS 刷新面板;取消则停止自动刷新(手动点按钮查询)。
- 轮询仅读 STATUS,不触发任何写操作,安全可常开。
5. 故障排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 连接失败弹窗"无法打开 COMx" | 端口被占用 / 不存在 | 关串口助手;确认端口号;重插 USB |
| 连上后日志无 RX | 波特不对 / 线接错 / 板子未上电 | 确认 115200 8N1;查 UART4 接线;查板供电 |
| 继电器按钮点了没反应 | 未连接 / 自动轮询未开 | 确认已连接;勾选自动或手动点 STATUS |
状态栏一直 UPTIME --s |
解析未命中(固件版本不符) | 确认烧的是 P02 固件;看日志原始 RX 格式 |
| 写 ADDR/BAUD 报 ERR | 超出范围 | ADDR 1-247;BAUD 0-4;FS_SEC 1-254 |
| 界面卡死/无响应 | 串口线程异常 | 点断开再连接;必要时关软件重开 |
6. 命令速查(固件支持)
HELP 列出全部命令
STATUS 继电器/DI/运行时长/复位次数
DI 读取 4 路数字量输入
RELAY n ON|OFF 单路控制(n=1-4)
RELAY ALL <val> 批量(0-15 或 0x0-0xF)
PARAM 读 Modbus 参数
ADDR <1-247> 设从站地址(写 Flash)
BAUD <0-4> 设 RS485 波特索引(写 Flash)
FACTORY 恢复出厂
INFO 固件与统计
STATS 诊断统计
FS 查故障安全
FS EN 0|1 设故障安全使能
FS SEC <1-254> 设故障安全超时(秒)
PING 心跳回显 PONG
LED 4 路 LED 自检
上位机所有按钮本质就是向板子发送上述命令并解析响应,命令行可发送任意一条做调试。
7. 已实现功能验收(实测)
上位机全部功能已通过离线逻辑实测(每个按钮 = 构造命令 → 解析响应,共 90 项断言全 PASS):
- ✅ 连接/断开(COM3、115200)、自动轮询 STATUS
- ✅ 单路继电器 ON/OFF、全开、全断、位掩码(0-15 / 0x0-0xF,含非法拦截)
- ✅ DI 指示灯(兼容 STATUS 与 DI 命令两种空格格式)
- ✅ 只读信息 INFO / PARAM / STATS / FS(active=1 安全态正确解析)
- ✅ 配置写 Flash:ADDR / BAUD / FS_EN / FS_SEC / 恢复出厂(二次确认)
- ✅ PING 链路验证、命令行透传、日志终端
- ✅ 鲁棒性:脏数据/空响应不崩溃、值 ON/off 大小写容忍、回显与提示符包裹兼容
文档生成:2026-07-31 | 与 HostPC/src/Protocol.cs、SerialComm.cs、MainForm.cs 及固件 rs232_shell.c 对齐。
8. 上位机通信机制(指令+应答)
上位机与下位机采用 指令 + 应答(Command/Ack) 握手,界面只在收到板子真实响应后才刷新:
- 200ms 应答超时 :每条命令发出即启动 200ms 应答定时器(
ackTimeoutMs=200);200ms 内无首字节 = 无应答 → 自动重发(最多 2 次,共 3 次)。 - 仅有效应答刷新 UI :只有"操作成功帧"(如
OK/RELAYn: ON)或"条件不满足帧"(如ERR:...)才更新界面;超时/半包/纯回显行不刷新。 - 超时报错 :3 次尝试耗尽仍无应答 → 注入
ERR: 响应超时(已重发2次):命令无应答,按失败处理(不更新 UI、日志报错)。
界面状态永远由"板子真实回包经解析回调"驱动,绝不"发送成功即刷新"------与下位机故障安全(通信丢失即断输出)端到端一致。
闭环实测(2026-08-01,真板 RS232/COM3)
P02HostPC.exe --selftest COM3(P02 生产固件)→ PASS=7 FAIL=0:连接、STATUS/INFO/PING 握手填充、RELAY 写握手翻转并回读一致,均经板子真实响应刷新。