C 对AT命令的响应结束
如何确定发送到GSM模块的AT命令的结尾是什么 我需要一些字符或字符串来表示每个情况下AT命令的结尾,因为在接收到整个响应时查找C 对AT命令的响应结束,c,string,embedded,gsm,at-command,C,String,Embedded,Gsm,At Command,如何确定发送到GSM模块的AT命令的结尾是什么 我需要一些字符或字符串来表示每个情况下AT命令的结尾,因为在接收到整个响应时查找 我猜它有“\r\n”序列,但是,这个序列可能在at命令响应的开头?响应格式是特定于命令的。虽然有某些相似之处(“确定”\r\n),但最终需要对每一个进行显式处理。取决于模式和命令 即 或 : 回车符,是命令行和结果代码 终止符字符,其值以十进制ASCII表示,介于0和255之间, 在参数S3中指定。默认值为13 因此,应该可以设置任何字符来指示响应的结束(以及发送到
我猜它有“\r\n”序列,但是,这个序列可能在at命令响应的开头?响应格式是特定于命令的。虽然有某些相似之处(“确定”\r\n),但最终需要对每一个进行显式处理。取决于模式和命令 即
或
:
回车符,是命令行和结果代码
终止符字符,其值以十进制ASCII表示,介于0和255之间,
在参数S3中指定。默认值为13
因此,应该可以设置任何字符来指示响应的结束(以及发送到调制解调器的任何命令的结束)
无论如何,
s不仅作为最后一个字符由许多调制解调器的响应返回
因此,将不同的字符值写入
S3
是否只会改变调制解调器响应末尾发送的最后一个字符,这可能是一个有趣的实验,或者,如果这会将调制解调器响应期间发送的任何
更改为存储在S3
中的值,就像您假设的\r\n
这定义了一行的结束 只有处理完整的生产线才有意义 有些命令只响应
OK\r\n
,有些命令响应某些数据。因此,您应该首先构建一个解析器,它可以检测完整的行,这样就可以 使用处理响应的函数进行处理 有时,您甚至可以得到未请求的响应,如更改事件
网络登录
或sim卡状态#QSS:2\r\n
所以您需要知道您期望的答案,并等待得到这个答案,这是我在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
。EOF/CTRL+Z呢?因此,您实际上不是在寻找指示命令结束的内容,而是寻找指示其响应结束的内容(如果有)?@alk Yes,我试图指出对AT命令的响应结束当我上次处理AT命令时,这是在90年代使用模拟调制解调器,它们至少使用OK
进行响应。有趣的想法,我一定会尝试,我会发布发现。是的,非常好的建议。AT命令响应应始终保持一致。
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'