结束对AT命令的响应

时间:2012-11-08 09:24:34

标签: c string embedded gsm at-command

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

由于找到收到整个响应的时间,我需要一些代表每个案例的AT命令结束的字符或字符串。

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

5 个答案:

答案 0 :(得分:3)

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

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

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

有时您甚至可以获得未请求的回复,例如更改活动net login或SIM状态#QSS: 2\r\n

所以你需要知道你期望的答案,并等到你得到这个

答案 1 :(得分:1)

Referring the original Hayes command set Wikipedia is stating

  

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

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


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

因此,向S3写一个不同的字符值是否只会改变调制解调器响应结束时发送的最后一个字符,或者这是否会改变在发送期间发送的任何<CR>,这可能是一个有趣的实验。调制解调器的响应是存储在S3中的值。

答案 2 :(得分:1)

这是我在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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

取决于模式和命令 即。

<CR> or <CR><LF>

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