标题: 单片机串口数据解析方法 [打印本页]

作者: jindizhiwa    时间: 2020-4-22 22:17
标题: 单片机串口数据解析方法
接收字母开头(不分大小写)不定长度的字符串,然后解析做出反馈
字符串基本规格类型主要有3种:
单条命令格式 :ansq;                        ansq?
                       Ansq+参数
结束符号: \r\n

最终串口接收字符串是: 命令+结束符  ======》 CMD(X,Y,'ABCD字符不定长',W); \r\




在程序中怎么处理这些指令容易让人看懂,容易修改、维护?

作者: wulin    时间: 2020-4-23 06:57
解析串口数据串的前提是制定或了解已确定的通讯协议,空谈解析一段不定长度的字符串,只能是说者泛泛,听者茫茫,毫无实际意义。给你一个示例程序,不一定能解答你的所有疑问,但可以为你提供解决问题的一个思路。
串口发收数据串--甲醛检测.zip (429.56 KB, 下载次数: 84)



作者: jindizhiwa    时间: 2020-4-23 22:30
是我没说清,串口接收的指令以字母开头(不分大小写),指令长度不定,结束符号是 \r\n。单片机解析指令后做出反馈。
设置类的指令可以跟?进行查询。比如LIMIT指令:接收的是LIMIT+参数,或LIMIT?两条。

指令较多,在程序中怎么处理这些指令容易让人看懂,容易修改、维护?
指令示例:

3字节指令
void IDN()  //返回版本号等
{
          const char *ver="60V/2A,Ver1.0.0,SN2020-5-18";

}
4字节指令
void ARST()//功能:故障报警继电器复位
{
       
}
5字节指令
void FAULT()//查询运行故障状态
{
       
}
5或6字节
void LIMIT()//设置输出控制设置参数限制值
{
       
}
void OUTP(char *rev)//设置/查询电源启动/停止
{
   if(rev[4]==0)
                 
         else if(rev[4]==1)
                  //reboot(b_shutdown);
         else if(rev[4]=='?')
                  
}
8字节指令
void SHUTDOWN()
{
       
}
void STATE()
{
       
}




作者: 大漠落日    时间: 2024-3-3 17:28
这个太儿科了,有没有复杂的,象AT命令解析的例子




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1