一种实现快速解析基于scpi协议的通信指令的方法

文档序号:6521541阅读:3357来源:国知局
一种实现快速解析基于scpi协议的通信指令的方法
【专利摘要】本发明涉及可编程器件及设备、板级之间的通信技术,具体涉及一种C语言描述的实现快速解析基于SCPI协议的通信指令的方法。本方法将SCPI指令按照层次设置成二叉树的结构,然后采用迭代的方式解析出指令所代表的含义,即该指令的指令号,每个指令号代表一种对仪器设备的操作,首先对于新接收到的指令首先从根节点开始进行分析,然后对于接收到的指令的每一级节点进行解析,通过采用本方法,可以便捷地实现SCPI指令的解释,即让设备执行此指令相应的操作。SCPI有非常好的可读性,可维护性,可广泛的应用于设备,板级之间的通信。本方法可在诸如MCU,ARM,POWERPC,MIPS,FPGA等可编程器件上实现。
【专利说明】一种实现快速解析基于SCPI协议的通信指令的方法
【技术领域】
[0001]本发明涉及可编程器件及设备、板级之间的通信技术,具体涉及一种实现快速解析基于SCPI协议的通信指令的方法。
【背景技术】
[0002]随着通信及计算机技术的发展,现在的设备与设备之间,设备中各个子单元的通信指令变得更加复杂。SCPI (Standard Commands for Programmable Instrument)语言本身定义了一组基本的子系统关键字,同时允许用户增加或减少关键字,这些关键字通常是一些有意义的英文单词,以方便记忆,也称助记符。通过SCPI可以很方便的制定通信协议, 并且协议比较容易理解。

【发明内容】

[0003]本发明的目的是提供一种C语言描述的实现快速解析基于SCPI协议的通信指令的方法。该方法基于SCPI协议使用层次化结构一“树”形结构,每条“树”指令都是以根层次指令(也称“子系统”)开始,每个根层次指令下面又有许多层次指令。只有按照从树根到叶子的完整路径发送指令,仪器设备才能正确执行相应的操作指令。
[0004]本发明采取的技术方案是:.一种实现快速解析基于SCPI协议的通信指令的方法,其特征在于,将SCPI指令按照层次设置成二叉树的结构,然后采用迭代的方式解析出指令所代表的含义,即该指令的指令号,每个指令号代表一种对仪器设备的操作,其指令解析步骤如下:
步骤一:对于新接收到的指令首先从根节点开始进行分析;
步骤二:对于接收到的指令的每一级节点进行解析,每一级解析步骤如下:a.首先判断该节点的子节点是否为空;若不为空,则比较该节点的指令与指令树中该级指令字符是否匹配;若不匹配,则判断其兄弟节点是否为空;若兄弟节点不为空,则迭代解析其兄弟节点;若兄弟节点为空,返回错误,说明指令输入错误;b.若该级节点指令的字符与指令树中该级指令字符匹配,则入栈本节点的指令号,并迭代解析其子节点若判断该节点的子节点为空,则比较该节点的指令与指令树中该级指令字符是否匹配,若不匹配,判断其兄弟节点是否为空,若兄弟节点不为空,则迭代解析其兄弟节点,若兄弟节点为空,返回错误,说明指令输入错误;d:若该节点的指令与指令树中该级指令字符匹配,则入栈该节点的指令号,然后出栈全部指令号,并计算总指令号。
[0005]本发明所述的总指令号的计算方法为各级节点指令号Ni乘以Ki的代数和,其中 i表示第i级,i=l,2,?>'?', Ni表示第i级节点的指令号,Ki则是第i级的加权值,Ki的计算方法为第i级的最大指令号Nmax的(i_l)次方。
[0006]本发明所产生的有益效果是:通过采用本方法,可以便捷地实现SCPI指令的解释,即让设备执行此指令相应的操作。SCPI有非常好的可读性,可维护性,可广泛的应用于设备,板级之间的通信。本方法可在诸如MCU,ARM, POWERPC, MIPS, FPGA等可编程器件上实现。
【专利附图】

【附图说明】
[0007]图1是本发明解析SCPI指令的流程图。
【具体实施方式】
[0008]以下结合附图对本发明作进一步说明:设置整个指令树中的各个节点格式,用C 语言描述如下:
typedef struct TreeNode ^PtrToNode ; struct TreeNode
{
*节点的关键字符内容每: unsignedchar * str ;
*节点的指令号,指令号为ERR表示错误的指令号 unsigned char CommandNO ;
PtrToNode FirstChild ; * 节点的子节点 *.PtrToNode NextBrer ;*节点的下一个兄弟节点*
}
例如MEASure子系统中测量电压周期的指令:MEA_Sure =VOLTage =PERiod ?
[0009]SCPI指令一般是按照层次的树型结构,这样不便于操作,将树型结构转化成二叉树这种特殊的结构,同一层次的节点互为兄弟节点,每个节点有一个子节点和一个兄弟节点,如果没有,则就指向空节点null。
[0010采用动态接收指令的方式,将指令缓存到指令buffer,将指令中的参数缓存到参数buffer。接收到指令结束字节后,提取指令buffer中的指令进行指令解析,解析的方法如图1所示。
【权利要求】
1.一种实现快速解析基于SCPI协议的通信指令的方法,其特征在于,将SCPI指令按照层次设置成二叉树的结构,然后采用迭代的方式解析出指令所代表的含义,即该指令的指令号,每个指令号代表一种对仪器设备的操作,其指令解析步骤如下:步骤一:对于新接收到的指令首先从根节点开始进行分析;步骤二:对于接收到的指令的每一级节点进行解析,每一级解析步骤如下:a.首先判断该节点的子节点是否为空;若不为空,则比较该节点的指令与指令树中该级指令字符是否匹配;若不匹配,则判断其兄弟节点是否为空;若兄弟节点不为空,则迭代解析其兄弟节点;若兄弟节点为空,返回错误,说明指令输入错误;b.若该级节点指令的字符与指令树中该级指令字符匹配,则入栈本节点的指令号,并迭代解析其子节点若判断该节点的子节点为空,则比较该节点的指令与指令树中该级指令字符是否匹配,若不匹配,判断其兄弟节点是否为空,若兄弟节点不为空,则迭代解析其兄弟节点,若兄弟节点为空,返回错误,说明指令输入错误;d:若该节点的指令与指令树中该级指令字符匹配,则入栈该节点的指令号,然后出栈全部指令号,并计算总指令号。
2.根据权利要求1所述的一种实现快速解析基于SCPI协议的通信指令的方法,其特征在于,所述的总指令号的计算方法为各级节点指令号Ni乘以Ki的代数和,其中i表示第i 级,i=l,2,?>'?', Ni表示第i级节点的指令号,Ki则是第i级的加权值,Ki的计算方法为第 i级的最大指令号`Nmax的(i_l)次方。
【文档编号】G06F9/30GK103605496SQ201310630799
【公开日】2014年2月26日 申请日期:2013年12月2日 优先权日:2013年12月2日
【发明者】王东峰, 陈伟峰, 张睿, 王卫龙, 刘佳 申请人:天津光电通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1