Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对AT命令的响应结束_C_String_Embedded_Gsm_At Command - Fatal编程技术网

C 对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 因此,应该可以设置任何字符来指示响应的结束(以及发送到

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

我需要一些字符或字符串来表示每个情况下AT命令的结尾,因为在接收到整个响应时查找


我猜它有“\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'