批量任务
批量任务可以把一组 CAN、CAN FD 或 RS485 指令保存在开发板中,再由开发板按顺序执行。电脑断开后任务仍可运行,适合循环测试和固定动作流程。
批量任务功能较复杂,建议使用配套的线上工具 SANPO Studio,快速配置离线批量指令。
批量指令通过USB串口进行配置,接入开发板USB后,在Windows下显示2个管理串口 SANPO Studio Management Port,分别对应两个STM32 MCU,STM32(1) 控制CAN-1/2和RS485-1/2,STM32(2) 控制CAN-3/4和RS485-3/4。串口编号不保证与板上丝印顺序一致,首次使用时建议只连接一个设备确认对应关系。
基本规则
所有命令通过管理口发送,行尾使用
CRLF。批次编号为
1~99,名称为 1~16 个字符,只能包含字母、数字、_和-。条目编号必须从
1开始连续增加,不能跳号或重复。单条 payload 最多 80 字节;RS485 条目最多使用其中 68 字节。
固件内部允许较多条目,但为便于维护并减少存储压力,单个批次建议不超过 64 条。
Channel=0同时发送到当前 MCU 管理的两路同类接口;1/3选择第一路,2/4选择第二路。
创建并运行一个批次
下面的示例创建一个 CAN FD 扩展帧任务,并只执行一次:
AT+BATBEGIN=1,fd_test
AT+BATADD=1,1,5,1,10,000001230A01020304050607081112131415161718
AT+BATCOMMIT=1
AT+BATRUN=1,1,0,1
每条命令成功时返回:
OK
执行后可查询状态:
AT+BATSTAT?
典型返回:
BATSTAT:run=0,batch_id=1,mode=1,idx=2,count=1,repeat_cfg=1,repeat_done=0,last_err=0,tx_ok=1,tx_fail=0
重点检查 last_err=0、tx_ok 增加且 tx_fail=0。
条目格式
AT+BATADD=<id>,<idx>,<proto>,<ch>,<delay_ms>,<hex_payload>
字段 |
说明 |
|---|---|
|
批次编号, |
|
条目编号,从 |
|
总线和帧类型,见下表 |
|
目标通道; |
|
本条发送成功后,到下一条开始前的等待时间, |
|
不带空格的十六进制内容 |
proto 和 payload 的定义如下,CAN ID 使用高字节在前:
|
类型 |
|
|---|---|---|
|
经典 CAN 标准帧 |
|
|
经典 CAN 扩展帧 |
|
|
RS485 |
原始设备指令 |
|
CAN FD 标准帧 |
|
|
CAN FD 扩展帧 |
|
经典 CAN 的 Len 就是实际字节数。CAN FD 使用长度编码:
编码 |
字节数 |
编码 |
字节数 |
|---|---|---|---|
|
0 |
|
8 |
|
1 |
|
12 |
|
2 |
|
16 |
|
3 |
|
20 |
|
4 |
|
24 |
|
5 |
|
32 |
|
6 |
|
48 |
|
7 |
|
64 |
运行方式
AT+BATRUN=<id>,<mode>,<period_ms>,<repeat>
字段 |
说明 |
|---|---|
|
顺序执行一遍后停止 |
|
周期执行 |
|
周期模式下,两轮任务之间的等待时间, |
|
周期模式的执行轮数; |
例如,每 100 ms 执行一轮,共执行 10 轮:
AT+BATRUN=1,2,100,10
停止当前任务:
AT+BATSTOP
上电自动运行
确认批次已测试无误后,可设置上电自动运行:
AT+BATAUTOSET=<id>,<mode>,<period_ms>,<repeat>
查询或清除:
AT+BATAUTO?
AT+BATAUTOCLR
该设置会保存到 Flash。mode=1 时 period_ms 必须为 0。
查询和删除
命令 |
用途 |
|---|---|
|
列出已保存的批次 |
|
读取指定条目 |
|
查看运行状态和收发统计 |
|
删除指定批次 |
|
清空全部批次 |
AT+BATERASE 不会清除设备身份和通信参数,但已保存的批次无法恢复。
较长命令分片上传
如果串口工具不能稳定发送较长的 AT 命令,可分片上传同一个 payload:
AT+BATADDX=<id>,<idx>,<proto>,<ch>,<delay_ms>,<total_len>,<seq>,<off>,<hex_part>
AT+BATADDEND=<id>,<idx>,<crc16>
第一片从
seq=1、off=0开始。后续
seq连续增加,off等于之前已上传的总字节数。所有分片完成后,对完整 payload 计算 CRC16-CCITT,初始值为
0x0000,再发送AT+BATADDEND。一个条目完成后才能继续上传下一个编号。
错误返回
失败时返回 ERR,<code>:
code |
说明 |
常见处理 |
|---|---|---|
|
参数格式错误 |
检查字段数、十六进制内容和 payload 布局 |
|
当前状态不允许 |
检查是否已 |
|
参数超出范围 |
检查批次、通道、延时和长度 |
|
CRC 不一致 |
重新计算完整 payload 的 CRC16 |
|
存储空间不足 |
删除无用批次;通信配置写满时使用 |
|
批次不存在 |
先用 |
|
发送队列忙 |
降低任务频率或增大条目间隔 |
|
Flash 读写失败 |
重新上电后复测,仍失败则检查硬件 |
通信波特率、SPI 长度模式和 RS485 透传设置见通信参数配置。