如何确定AT命令的结束发送到GSM模块?对AT命令的响应结束
我需要一些字符或字符串代表AT命令结束每个案件由于找到整个响应时收到。
我想它有一些“\ r \ n”序列,但是,这个序列可能在AT命令响应的开始?
如何确定AT命令的结束发送到GSM模块?对AT命令的响应结束
我需要一些字符或字符串代表AT命令结束每个案件由于找到整个响应时收到。
我想它有一些“\ r \ n”序列,但是,这个序列可能在AT命令响应的开始?
像你想的那样是\r\n
。
这定义了一条线的末端。
而且它只处理完整的行是有意义的。
某些命令仅响应OK\r\n
,其中一些命令带有一些数据。
所以你应该首先构建一个解析器,它可以检测完整的行,因此它们可以用一个处理响应的函数处理 。
有时您甚至可以得到您没有请求的回复,例如更改事件net login
或SIM卡状态#QSS: 2\r\n
。
所以,你需要知道你所期望的答案,等到你这个
是的,很好的建议。 AT命令响应应始终[逐行解析](https://stackoverflow.com/a/36899432/23118)。 – hlovdal
响应格式是命令特定的。尽管有一些相似之处(“OK \ r \ n”),但最后你需要对每个进行明确的处理。
Referring the original Hayes command set Wikipedia is stating:
<CR>
回车字符,是在命令行和结果代码 终止字符,该值,在0和255之间的十进制ASCII,指定 在参数S3内。默认值是13.
所以应该可以设置任何字符来表示响应的结束(以及发送到调制解调器的命令的结束)。
无论如何<CR>
s不仅作为最后一个字符被许多调制解调器的响应返回。
因此,它可能是一个有趣的实验是否写一个不同的字符值S3
只想改变在调制解调器的响应端发送的最后一个字符,或者这是否会改变调制解调器的应答期间发送的任何<CR>
是值存储在S3
。
有趣的想法,我一定会尝试,我会发布调查结果。 –
以下是我在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呢? http://en.wikipedia.org/wiki/Control-Z – rkosegi
所以你真实**而不是**寻找指示命令**结束的东西,但是**表示响应结束的东西(如果有的话) )? – alk
@alk是的,我试图指示AT命令的响应结束 –