【发布时间】:2013-11-20 09:58:01
【问题描述】:
我正在寻找一些指导方针,如何正确解析从 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 模块的传入响应数据?
【问题讨论】:
-
代码始终位于响应的末尾是否已修复?您可以使用正则表达式来解析响应。
-
是的,它已修复,我知道使用哪种技术,但问题在于接收整个数据。我不知道句子的结尾在哪里,什么时候应该停止阅读并进行接收到的数据解析。 (我编辑标签 - .net micro,没有正则表达式)
-
是同步的还是异步的?您是否收到不请自来的回复?
-
是的,我收到了不请自来的回复。我正在使用带有事件的 SerialPort c# 类进行读取(因此异步),但在良好的实践中是在每个 AT 命令发送后等待 OK/ERROR 响应,因此它将相当同步。它可以完全异步完成吗?
标签: c# parsing gsm at-command .net-micro-framework