自动化

自动应答

设备还没到手,先让规则替它回答。

本页内容

自动应答

自动应答让一个连接扮演设备:你写好规则,连接收到的数据与某条规则匹配时,友善串口调试助手自动发送这条规则的回复。硬件还没到手、或者手上的设备进不了你要的状态时,它就派上用场:

  • 模拟设备,给正在开发的上位机程序当对端:收到 AT+VER? 回 +VER:1.2.0,收到 Modbus 03 请求回一帧寄存器数据。
  • 测试上位机的异常处理:故意回得慢、每三次才回一次、随机丢回复,或者干脆不回,看它的超时和重试是否符合预期。

每个连接有自己的一套规则。打开方式:

  • 工具 → 自动应答… 编辑当前连接的规则;
  • 在接收区右键,选择自动应答…;
  • 或者点击接收区上方的 ↩ 自动应答 标记——连接有已启用的规则时它就会显示。
连接 1 的「自动应答」对话框:上方是「装死」和「在接收区记录每次匹配」两个复选框,下面的规则表里有三条已启用的规则——版本查询,文本匹配 AT+VER?,回复 +VER:1.2.0\r\nOK\r\n;读寄存器,十六进制匹配 01 03 00 00 00 02 ?? ??,20 毫秒后回复「十六进制:01 03 04 00 64 00 C8」;慢速复位,文本匹配 AT+RST,1500 毫秒后回复 OK\r\n——表格右侧是添加、编辑、复制、删除、上移、下移按钮,最下方「试一试」框里输入了 AT+VER?\r\n,结果行显示「版本查询」回复的字节
一个连接的规则,以及「试一试」框:用粘贴的输入跑一遍规则,不发送任何数据。

编写规则

点击添加…(或双击某条规则编辑)。一条规则分三部分。

当此连接收到

  • 名称:可选,用于在规则表和接收区的记录里标识这条规则。
  • 匹配方式与匹配内容:要找什么,有四种方式(见怎么匹配)。匹配内容下方会提示是否有效;文本方式还会显示它匹配的是哪些字节。

回复

  • 格式与回复内容:文本或十六进制。回复按原样发送,不会加上发送框的行尾,上位机需要 \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 没有这些限制。

这篇文档是否有帮助?