Robot Framework的Telnet库经串口服务器建连后读写关键字超时问题
问题根因
- Robot Framework Telnet库的
Write关键字默认执行逻辑为:写入指定内容+自动追加换行符后,会等待回显内容中匹配到写入的内容及换行符,以此确认写入成功。而你通过串口服务器连接后端设备的场景下,串口服务器/后端设备未开启输入回显,导致Telnet库始终无法匹配到预期的换行符,触发10秒超时报错。 - 代码中发送ASCII 29(对应
^])的操作属于Telnet协议本身的转义控制字符,该字符会被串口服务器的Telnet服务端直接拦截处理,不会转发到后端串口连接的设备,反而会干扰正常数据透传。 - Telnet库默认参数适配标准Telnet服务端交互逻辑,串口透传场景无标准Telnet提示符、回显规则,默认配置和场景不匹配。
解决方案
按以下步骤调整即可解决:
- 打开连接时显式配置适配串口场景的参数,包括指定后端设备兼容的换行符、关闭默认提示符匹配规则
- 替换
Write关键字为Write Bare,该关键字仅发送指定内容,不会触发自动回显匹配逻辑,也可按需自行控制是否追加换行 - 移除无效的Telnet转义字符发送操作,如后端设备确实需要接收ASCII 29再保留
- 读取数据时优先用
Read关键字读取所有已缓存数据,避免正则规则不符导致的读超时
调整后参考代码
_Open Telnet Connection By Serial Server [Arguments] ${serial_ip} ${user_name} ${password} ${port} ${timeout}=10s ${output}= Telnet.Open Connection ${serial_ip} port=${port} timeout=${timeout} newline=\r\n prompt= # 确认后端设备需接收ASCII 29再打开下方注释,普通透传场景无需发送 # Write Control Character 29 Telnet.Write Bare help\n ${output}= Telnet.Read timeout=${timeout} Log ${output} Telnet.Close Connection
补充排查点
如果调整后仍无法正常读写,可按以下方向排查:
- 确认串口服务器对应端口是否配置为透传模式,需关闭Telnet命令解析功能,避免串口服务器拦截控制字符不转发
- 先用本地Telnet客户端(PuTTY、系统自带telnet命令)连接对应IP端口,手动输入
help确认返回内容格式、换行符规则,再调整代码中newline参数和读取匹配规则
内容的提问来源于stack exchange,提问作者Grant-bobo
相关产品推荐
相关产品推荐

