如何正确解析从GSM模块收到的响应数据?

时间:2013-11-20 09:58:02

标签: c# parsing gsm at-command .net-micro-framework

我正在寻找一些指导如何正确解析从GSM模块收到的响应数据。我正在使用uBlox SARA-G350。文档说明:

Information responses:
<CR><LF><text><CR><LF>

Result codes:
<CR><LF><verbose code><CR><LF>

If the command line is successfully performed, the string "OK" (<CR><LF>OK<CR><LF>)
is sent, otherwise "ERROR".

看起来一切都很简单。我们应该阅读从<CR><LF><CR><LF>的每个句子,但是......

  • 数据可能会变成块状
  • 回复可能包含加倍<CR><LF>OK<CR><LF>(请参阅下面的示例)

示例 - 发送到gsm模块的短信:

"Hi. Is IT
OK
"

CMGL模块响应后(这是返回数据的序列结束的样子):

Hi. Is IT<CR><LF>
OK<CR><LF>
<CR><LF>
OK<CR><LF>

正如您所看到的,我们已将<CR><LF>OK<CR><LF>加倍。

我怎么知道我有完整的句子,应该停止从模块读取数据并解析收到的数据?

AT解析器在这种情况下应该如何表现?

我可以在哪里找到一些指导如何正确解析来自gsm模块的传入响应数据?

2 个答案:

答案 0 :(得分:4)

我找到了。我的错误假设是sms消息可以包含CrLf。事实并非如此(至少对于uBlox SARA-G350而言)。从模块收到的某些文本中的所有CrLf都被替换为Lf。

由于我可以知道,当下一个组合之一到达时,句子的结尾将是:

  • <CR><LF>OK<CR><LF>
  • <CR><LF>ERROR<CR><LF>
  • <CR><LF> >

最后一个是短信发送命令的快速签名。

答案 1 :(得分:1)

你的问题很有意思,因为大的标准避免说如果返回的文本应该包含类似最终结果代码的内容会发生什么。 V.250仅在5.7.3 Information text formats for test commands中指明DCE不应在分解长行响应文本时产生误报,但不明确禁止产生误报...另请参阅this answer关于来自AT+CMGL的回复的相关讨论。

所以要回答你的问题,你必须假设这是实现定义的行为。