3

如何确定发送到 GSM 模块的 AT 命令的结尾是什么?

由于发现何时收到整个响应,我需要一些字符或字符串来表示每种情况下 AT 命令的结束。

我猜它有一些带有“\r\n”序列的东西,但是,这个序列可能在 AT 命令响应的开头?

4

5 回答 5

3

就像你想象的那样\r\n
这定义了一行的结尾。

只有处理完整的生产线才有意义。

有些命令只响应 ,有些命令响应OK\r\n一些数据。
因此,您应该首先构建一个解析器,它可以检测完整的行,以便可以使用处理响应的函数来处理它们。

有时您甚至可以获得您不要求net login的响应,例如更改事件或 sim status #QSS: 2\r\n

所以你需要知道你期望什么答案,然后等到你得到这个

于 2012-11-08T10:09:10.990 回答
2

这是我在 Python 中使用的。有用。可能还有其他更好的解决方案。

ser = serial.Serial(com, baudrate, timeout=5)
while True:
# a simple AT return result parser
    new_char = ser.read(1)
    byte_flow += new_char

    if len(byte_flow) >=4 and byte_flow[-4:] == b'\r\nOK':
        break
    elif len(byte_flow) >= 7 and byte_flow[-7:] == b'\r\nERROR':
        break
byte_flow += ser.read(2)  # the final '\r\n'

elif如果有任何其他模式,您可以添加更多。

于 2018-01-12T14:24:16.180 回答
1

参考原始的 Hayes 命令集 Wikipedia 说明

<CR>回车符,是命令行和结果代码终止符,其值在 0 到 255 之间的十进制 ASCII 中,在参数 S3 中指定。默认值为 13。

所以应该可以设置任何字符来指示响应的结束(以及发送到调制解调器的任何命令的结束)。


无论如何<CR>,许多调制解调器的响应不仅将 s 作为最后一个字符返回。

因此,写入不同的字符值S3是否只会更改调制解调器响应结束时发送的最后一个字符,或者这是否会将<CR>调制解调器响应期间发送的任何字符更改为存储在S3.

于 2012-11-08T09:55:47.310 回答
0

响应格式是特定于命令的。虽然有某些相似之处(“OK\r\n”),但最终您需要对每个相似之处进行显式处理。

于 2012-11-08T09:42:19.037 回答
0

取决于模式和命令即

<CR> or <CR><LF>

http://www.3gpp.org/ftp/Specs/html-info/27007.htm

于 2012-11-08T09:43:07.297 回答