C#开发AT命令:如何判断AT命令结束

还不够格啊 2017-06-16 12:17:56
用.NET的SerialPort类开发AT命令,一般的AT命令会返回OK或ERROR字符串,可以检查这个OK或ERROR是否接收到以判断AT命令是否结束。
但有些命令,如AT+CGSN,只返回一个号码的字符串,没有OK或ERROR,该如何判断此AT命令已经结束?

我需要一个通用的方法,不能单独判断某个命令的返回。

是否可以通过判断串口的某些标志位状态?
...全文
677 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2017-06-16
  • 打赏
  • 举报
回复
这文档你看着应该没问题把 从这文档上看,就是。如果你没有收到size指令就当普通指令接收(2个换行),如果接收到size指令就按size的指令接收size大小的字节
wanghui0380 2017-06-16
  • 打赏
  • 举报
回复
额,我们表示 你既然用at指令就应该遵循at指令集协议 at指令(又叫贺氏指令,是一个已经被废弃很久的指令协议了,目前也就是一些古老的厂家和设备在使用,比如一些老牌modem厂家) AT指令协议最基本的规定就是 命令项 “1个回车“表示指令结束 响应项”2个回车换行“表示响应结束 如果是文本,他不仅包括2个回车换行,同时他的在文本区前后加”号 这个你在这里看标准at指令说明 https://wenku.baidu.com/view/420fead087c24028905fc371.html
还不够格啊 2017-06-16
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
你发送一个指令,设备就回答一个结果。。
可是我就是不知道这个结果什么时候结束啊。
还不够格啊 2017-06-16
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
你发送一个指令,设备就回答一个结果。你的程序应该先实现这个基本模式。然后再来在更高层次去纠结什么“是OK、是ERROR、是不是数字”等等解析问题。 先把程序设计逻辑分出这个逻辑层来,并且你的程序也确实让人看出是分层的。
不返回OK或ERROR的文本的AT命令,举例如下: AT1:马上返回一个字符串,然后结束。 我的代码读到了返回的字符串,但不知道还有没有后续数据返回,因此要等待。但没有特征字符串以判断结束,所以一直等待到超时。 AT2: 经过一秒钟才返回一个字符串,然后结束。 一秒钟之内,串口的读缓冲区内无数据。如果我的代码检测到没有数据就认为结束了,显然也不行。还是要等待,直到超时。 这不是单纯的编程问题,是AT命令机制的问题。 AT命令完成后,除了输出字符串等数据外,串口对象是否还有其他信息?比如控制字?状态位?
还不够格啊 2017-06-16
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
你发送一个指令(以\r\n结束),设备就回答一个解雇(以\r\n结束)。这是基本的模式。 跟OK、ERROR、一串数字无关。
一个AT命令的返回可能包含多行文本,即多个\r\n。 因此不能以判断接收到\r\n做为结束的标志。
zhujinqiang 2017-06-16
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
你发送一个指令,设备就回答一个结果。你的程序应该先实现这个基本模式。然后再来在更高层次去纠结什么“是OK、是ERROR、是不是数字”等等解析问题。 先把程序设计逻辑分出这个逻辑层来,并且你的程序也确实让人看出是分层的。
  • 打赏
  • 举报
回复
你发送一个指令(以\r\n结束),设备就回答一个解雇(以\r\n结束)。这是基本的模式。 跟OK、ERROR、一串数字无关。
xuggzu 2017-06-16
  • 打赏
  • 举报
回复
串口没有为某个命令特定引脚信号。就像楼主说的,可按返回字符串来判读。
至于代码怎么写,可以先发命令,sleep几百毫秒再接收。也可以用串口事件。用线程也可。如果要通用,写个单独模块(类)即可。
by_封爱 版主 2017-06-16
  • 打赏
  • 举报
回复
不可以...这种没有协议的东西 只能通过你人工判断...

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧