自动应答
自动应答让一个连接扮演设备:你写好规则,连接收到的数据与某条规则匹配时,友善串口调试助手自动发送这条规则的回复。硬件还没到手、或者手上的设备进不了你要的状态时,它就派上用场:
- 模拟设备,给正在开发的上位机程序当对端:收到
AT+VER?回+VER:1.2.0,收到 Modbus 03 请求回一帧寄存器数据。 - 测试上位机的异常处理:故意回得慢、每三次才回一次、随机丢回复,或者干脆不回,看它的超时和重试是否符合预期。
每个连接有自己的一套规则。打开方式:
- 工具 → 自动应答… 编辑当前连接的规则;
- 在接收区右键,选择自动应答…;
- 或者点击接收区上方的 ↩ 自动应答 标记——连接有已启用的规则时它就会显示。
编写规则
点击添加…(或双击某条规则编辑)。一条规则分三部分。
当此连接收到
- 名称:可选,用于在规则表和接收区的记录里标识这条规则。
- 匹配方式与匹配内容:要找什么,有四种方式(见怎么匹配)。匹配内容下方会提示是否有效;文本方式还会显示它匹配的是哪些字节。
回复
- 格式与回复内容:文本或十六进制。回复按原样发送,不会加上发送框的行尾,上位机需要
\r\n就自己写上。文本里的\r\n\t\xHH以及发送框支持的其他转义始终有效,与发送框的转义序列开关无关。十六进制每字节两位,写错一个字符会报错,而不是发出00。回复内容留空则匹配后不回复(表格里显示「(不回复)」)。 - 追加校验:无、校验和-8(SUM)、异或(BCC)、CRC-8、CRC-16/MODBUS 或 CRC-32,按回复内容计算。选 CRC-16/MODBUS 时只需填不含 CRC 的帧,SPU 自动补上正确的校验。
- 延时:回复前等待多久,0 到 600000 毫秒。模拟一台慢设备、或者比上位机超时还慢的设备,改一个数就行。
回复内容下方实时显示将要发送的字节。匹配内容或回复内容无效时,「确定」按钮不可用。
模拟不稳定的设备——见下文。
回复是固定的,不能把请求里的某一段抄进回复。文本按连接的编码处理——匹配内容用接收编码,回复用发送编码——所以改了编码,规则仍然有效。
在规则表里,启用一列可以开关规则而不删除它;命中是规则上次修改以来的匹配次数;上移/下移调整顺序,两条规则同时匹配时由顺序决定。
怎么匹配
四种匹配方式与命令库「期望回复」步骤使用的相同:
| 匹配方式 | 匹配内容 | 例子 |
|---|---|---|
| 文本 | 精确文本;\r \n \t 和 \xHH 表示对应的字节 |
AT+VER? |
| 十六进制 | 十六进制字节;?? 匹配任意字节 |
01 03 00 00 00 02 ?? ?? |
| 通配符 | 文本中 * 匹配任意长度的字节,? 匹配一个字节;字面的 * 写作 \x2A |
AT+CFG=*\r |
| 正则表达式 | Perl 兼容的正则表达式,作用于收到的字节 | AT\+[A-Z]+\? |
文本方式下 ? 和 * 就是普通字符,所以 AT+VER? 只匹配它自己;换成通配符方式,同一个 ? 会匹配任意一个字节。上表的十六进制例子匹配从站 1 从地址 0 读两个寄存器的 Modbus 请求,不管 CRC 是什么。正则的例子匹配 AT+ID? 这类任意 AT 查询;正则区分大小写,开头加 (?i) 可以忽略大小写。
数据从线路到规则之间:
- 一条命令分几次到达也能匹配。 串口数据本来就是一段一段来的,SPU 保留最近几 KB 数据跨段匹配。空闲超过 1 秒的残片会被丢弃,半条命令不会在几分钟后凑出一次匹配。
- 匹配结束位置最早的规则生效;两条规则结束在同一个字节时,表格中靠上的生效。到这次匹配结束为止的字节被用掉,然后继续往下找,所以一次收到三条命令就按顺序回三次,同一个字节不会被回复两次。
- 每个对端分开匹配。 TCP 服务端的每个客户端各有自己的缓冲,回复只发给发出请求的那个客户端;UDP 回给发送方。串口和 TCP 客户端只有一个对端。
模拟不稳定的设备
上位机要能应付慢、不稳定或干脆没反应的设备。每条规则的「模拟不稳定的设备」一组,加上整个连接的一个开关,就是为此准备的:
- 回复频率:每 N 次匹配回复 1 次:前 N−1 次不回,第 N 次才回。设为 3 时,上位机前两次请求都没有回应,第三次才得到回复——正好测试它的重试。
- 随机丢弃回复:本该回复的匹配,按这个百分比被悄悄丢掉——模拟不稳定的线路。
- 匹配上限:匹配达到此次数后,该规则停止匹配,由它下面的规则接手。在正常回复的规则上方放一条回复
BUSY、匹配上限为 2 的规则,设备就会先「忙」两次再正常回答。 - 回复内容留空会吞掉这次匹配:什么都不发,下面的规则也看不到这些字节。把它放在一条更宽泛的规则上方,就能让某一条命令得不到回应。
- 对话框顶部的装死:照常匹配和计数,但不发送任何回复一次让整个连接沉默,不必逐条关闭规则。此时标记变成橙色并显示「装死中」,不会把沉默的 SPU 误当成坏掉的设备。
最简单的超时测试:把延时设得比上位机的超时还长。
不接设备先试规则
规则表下方的试一试框按对话框里当前的规则运行,不必先点「确定」。粘贴上位机会发送的内容——文本如 AT+VER?\r\n,或勾选十六进制后输入字节——点击测试。每次匹配都会列出结果:哪条规则回复、延时多少、回复哪些字节,或者为什么不回复(回复为空、正在装死、未到第 N 次匹配)。
测试不发送任何数据,也不占用 Free 的回复次数。每次测试都从零计数,所以要看「每 3 次匹配回复 1 次」的规则回复,把命令粘贴三遍。随机丢弃在测试里不会触发。
运行时
- 接收区上方的标记表明这个连接会自动回复——Free 下显示为「↩ 自动应答 · 2 条规则 · 本次运行已回复 3/10」——不会把 SPU 的回复当成设备的回复。点击它可以编辑规则。
- 在接收区记录每次匹配(默认开启)为每次匹配加一行记录,例如
自动应答 "版本查询":已发送 16 字节,或者说明为什么没有发送。接收区暂停时不添加记录,标记照常计数。开启「显示发送」时,回复本身也像你发送的数据一样显示出来。 - 回复不会打断文件传输。 XMODEM 或 YMODEM 传输占用连接期间,自动应答不发送任何数据;还在等待延时的回复会被丢弃,传输本身的字节也不会交给规则匹配。
- 关闭连接会丢弃等待中的回复和收了一半的命令,下次连接从头开始。
保存规则
保存的 .spu 工程包含每个连接的规则以及是否装死,打开工程即恢复。没有打开工程时,第一个连接的规则保存在本机,下次启动时恢复。
Free 与 SPU Pro
编写、编辑和测试规则在 Free 里完整可用。规则运行时:
- 每个连接最多启用 3 条规则。 勾选第 4 条会被拒绝,对话框会说明原因;超过 3 条后新添加的规则默认不启用。工程里启用的规则更多时,只运行从上往下的前 3 条,标记显示「3/5 条规则生效」。
- 每次运行软件回复 10 次,所有连接合计,重启后重新计数。用完后的下一次回复仍会发出——测试做到一半设备突然不回应,看起来像设备故障——同时 SPU 提示已达上限。此后不再回复,直到重启 SPU:标记变成橙色并显示「已暂停(免费版上限)」,匹配仍照常计数。
SPU Pro 没有这些限制。