发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的SCPI命令的解析方法及装置。
依据本发明的一方面,提供了一种SCPI命令的解析方法,包括:
读取已经创建的XML文件,所述XML文件中包含一种预置类型的多条SCPI命令及各SCPI命令对应的命令标号;
接收预置类型或其他类型的SCPI命令,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配,所述其他类型为与所述预置类型不同的类型;
获取匹配成功的SCPI命令对应的命令标号,根据获取的命令标号调用相应的底层函数,其中,所述命令标号与所述底层函数一一对应。
可选地,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配,包括:
判断接收到的SCPI命令格式与所述XML文件中的多条SCPI命令的格式是否完全相同,其中,所述XML文件中的SCPI命令格式包括大写格式或小写格式;
若否,将接收到的SCPI命令格式转换成与所述XML文件中SCPI命令完全相同的格式;
按照预置算法将格式转换后的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配。
可选地,所述方法还包括:基于SCPI命令集创建所述XML文件,其中,所述SCPI命令集中包含多条SCPI命令。
可选地,所述基于SCPI命令集创建所述XML文件,包括:
在新建XML文件中,按照树形分层结构依次创建根节点和i级子节点,其中,所述根节点标识SCPI命令的位置;
获取所述SCPI命令集,将SCPI命令集中的多条SCPI命令分别转换为同一格式、同一预置类型的SCPI命令;
从转换后的多条SCPI命令中解析出各SCPI命令对应的至少一级子命令;
基于所述至少一级子命令,按照DOM形式将各级子命令写入对应的子节点,其中,第i级子命令对应XML文件的第i级子节点,i≥1且i为正整数;
为写入的每条SCPI命令设置相应的命令标号,将设置的命令标号作为节点属性值添加到对应的SCPI命令的最后一级子节点中。
可选地,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配,包括:
若所述接收到的SCPI命令中具有N级子命令,从接收到的SCPI命令中解析出N级子命令,其中,N≥1且N为正整数;
将所述N级子命令中的第一级子命令依次与所述XML文件中第一级子节点中包含的各子节点进行匹配;
若匹配得到相应的子节点,判断匹配成功的子节点所在级数是否为所述XML文件的最后一级;若是,返回匹配成功的子节点对应的命令标号;
若否,判断该子节点的下一级子节点是否为缺省节点;若是,返回缺省节点对应的命令标号;若不是,继续将所述N级子命令中的下一级子命令与所述XML文件中下一级子节点中的各子节点进行匹配,直至第N级子命令匹配完成,返回最终匹配成功的子节点对应的命令标号;其中,缺省节点对应的SCPI命令的子命令为缺省命令。
可选地,若所述XML文件中的多条SCPI命令的预置类型为全写类型,接收到的SCPI命令类型包含缩写类型,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配,包括:
从缩写类型的SCPI命令中解析出各级缩写子命令;
获取各级缩写子命令的字符串长度C,以及所述XML文件中相应级数子节点的字符串长度X,并且规定缩写子命令对应的原全写子命令的第4个字符为元音,则该缩写子命令放弃该元音字符,C=3;若所述原全写子命令的第4个字符不是元音,C=4;其中,C和X均为正整数;
判断任一缩写子命令的字符串与所述XML文件中相应级数子节点的前C位字符串是否完全相同;
若是,并分析得知该缩写子命令的字符串长度C=4,所述相应级数子节点的字符串长度X大于4且其第4位字符不是元音字符,则匹配成功,或分析得知该缩写子命令的字符串长度C=3,所述相应级数子节点的字符串长度X大于4且其第4位字符是元音字符,则匹配成功。
可选地,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配,包括:
若接收到的SCPI命令为来自同一批次的多条SCPI命令,利用第一标识对接收到的各条SCPI命令进行区分,按照预置算法将区分后的SCPI命令同时与所述XML文件中一种预置类型的多条SCPI命令进行匹配;
若接收到的SCPI命令为来自不同批次的多条SCPI命令,利用第二标识对不同批次接收到的各条SCPI命令进行区分,以及利用第一标识对每一批次中的各条SCPI命令进行区分,按照预置算法将区分后的SCPI命令同时与所述XML文件中一种预置类型的多条SCPI命令进行匹配。
可选地,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配之后,还包括:
若判断接收到的SCPI命令中存在命令参数,对所述命令参数进行有效性验证;
依据验证通过的命令参数以及匹配成功的SCPI命令对应的命令标号,调用相应的底层函数。
可选地,对所述命令参数进行有效性验证,包括:
识别所述命令参数所属参数类别,其中,所述参数类别包括字符串类别和/或数值类别;
根据识别到的所述命令参数的参数类别,验证所述命令参数是否为其所属参数类别中的合法范围内的命令参数;若是,所述命令参数为有效参数。
依据本发明另一方面,还提供了一种SCPI命令的解析装置,包括:
读取模块,适于读取已经创建的XML文件,所述XML文件中包含一种预置类型的多条SCPI命令及各SCPI命令对应的命令标号;
匹配模块,适于接收预置类型或其他类型的SCPI命令,按照预置算法将接收到的SCPI命令与所述XML文件中一种预置类型的多条SCPI命令进行匹配,所述其他类型为与所述预置类型不同的类型;
调用模块,适于获取匹配成功的SCPI命令对应的命令标号,根据获取的命令标号调用相应的底层函数,其中,所述命令标号与所述底层函数一一对应。
在本发明实施例中,首先读取已经创建的XML文件,该XML文件中包含一种预置类型的多条SCPI命令及各SCPI命令对应的命令标号。然后接收预置类型或其他类型的SCPI命令,按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配,其他类型为与预置类型不同的类型。最后获取匹配成功的SCPI命令对应的命令标号,根据获取的命令标号调用相应的底层函数。本发明方案采用包含多条同一预置类型的SCPI命令的XML文件,以在接收到SCPI命令时,采用灵活的预置算法与XML文件中的SCPI命令进行匹配,使XML文件仅需描述一种类型的SCPI命令即可自动支持其他各种不同类型的SCPI命令。相比于现有的SCPI命令集解析技术存在结构复杂、复用困难、且一般仅支持固定类型的SCPI命令问题,本发明方案支持的SCPI命令更加全面且结构更加清晰。进一步地,本发明实施例还可以有效地支持多种SCPI命令的快速扩充与复用,当扩充SCPI命令时,仅需修改XML中的内容即可方便、快捷地实现SCPI命令的扩充。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种SCPI命令的解析方法。该方法可以应用于各种仪器仪表中,例如频谱仪、信号发生器等等仪器仪表中。图1示出了根据本发明一个实施例的SCPI命令的解析方法的流程示意图。参见图1,该方法至少包括步骤S102至步骤S106。
步骤S102,读取已经创建的XML(extensible markup language,可扩展标记语言)文件,XML文件中包含一种预置类型的多条SCPI命令及各SCPI命令对应的命令标号。
在该步骤中,预置类型可以是全写(长格式)类型,也可以是缩写(短格式)类型。并且,本发明实施例中的XML文件也可以称为XML文档。本发明实施例可以在启动仪器仪表时直接读取已经创建的XML文件。
步骤S104,接收预置类型或其他类型的SCPI命令,按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配,其他类型为与预置类型不同的类型。
在该步骤中,接收到的预置类型或其他类型的SCPI命令可以是用户通过点击设置在仪器仪表上的按键实现SCPI命令的输入,也可以是采用有线或无线的方式将仪器仪表与终端设备(如手机、电脑等)建立连接,由建立连接后的终端设备将其他类型的SCPI命令传输至仪器仪表。本发明实施例对其他类型的SCPI命令的接收方式不做具体限定。
其他类型的SCPI命令与XML文件中多条SCPI命令类型不同,即与预置类型不同,这里的不同可以指接收到的其他类型的所有SCPI命令与XML文件中SCPI命令类型完全不同,例如,接收到3条其他类型的SCPI命令,且这3条SCPI命令类型与XML文件中SCPI命令类型都不同。也可以指接收到的其他类型的部分SCPI命令与XML文件中SCPI命令类型不同,例如,接收到3条其他类型的SCPI命令,其中2条SCPI命令类型与XML文件中SCPI命令类型不同,另外一条类型相同。这里的命令条数仅仅是示意性的,本发明实施例不做具体限定。
步骤S106,获取匹配成功的SCPI命令对应的命令标号,根据获取的命令标号调用相应的底层函数,其中,命令标号与底层函数一一对应。
在该步骤中,通过将命令标号与相应底层函数建立一一对应的关系,从而可以根据命令标号方便的调用对应的底层函数,以便于快速实现仪表的功能。
本发明方案采用包含多条同一预置类型的SCPI命令的XML文件,以在接收到预置类型或其他类型的SCPI命令时,采用灵活的预置算法与XML文件中的SCPI命令进行匹配,使XML文件仅需描述一种类型的SCPI命令即可自动支持其他各种不同类型的SCPI命令。相比于现有的SCPI命令集解析技术存在结构复杂、复用困难、且一般仅支持固定类型的SCPI命令问题,本发明方案支持的SCPI命令更加全面且结构更加清晰。进一步地,本发明实施例还可以有效地支持多种SCPI命令的快速扩充与复用,当扩充SCPI命令时,仅需修改XML中的内容即可方便、快捷地实现SCPI命令的扩充。
参见上文步骤S102,在本发明实施例中,已经创建的XML文件可以基于SCPI命令集进行创建,其中,SCPI命令集中包含多条SCPI命令。参见图2,下面介绍XML文件的创建过程。
步骤S202、在新建XML文件中,按照树形分层结构依次创建根节点和i级子节点,其中,根节点标识SCPI命令的位置。
在该步骤之前,新建XML文件,并以读写方式打开新建的XML文件。例如,新建名称为scpi.xml的文件,该名称仅仅是示意性的,本发明不做具体限定。
该步骤中,“i”可以是1、3、4等等大于等于1的任意正整数。图3为已经创建好的XML文件,其中,“sdr1000_scp1”为根节点,根节点标识SCPI命令的位置。图3中的XML文件具有四级子节点。当i为4时,可以在新建的XML文件中,按照树形分层结构依次创建根节点、第一级子节点、第二级子节点、第三级节点及第四级子节点。
步骤S204、获取SCPI命令集,将SCPI命令集中的多条SCPI命令分别转换为同一格式、同一预置类型的SCPI命令。
例如,图3所示XML文件中的SCPI命令为大写格式且全写(长格式)类型的SCPI命令,即大写的长格式助记符形式SCPI命令。当然,SCPI命令还可以是小写格式,还可以是缩写(短格式)类型等等。
步骤S206、从转换后的多条SCPI命令中解析出各SCPI命令对应的至少一级子命令。
步骤S208、基于至少一级子命令,按照DOM形式将各级子命令写入对应的子节点,其中,第i级子命令对应XML文件的第i级子节点,i≥1且i为正整数。
例如,图3所示XML文件中,“SENSE”等子命令对应子节点为第一级子节点,“FREQUENCY”等子命令对应子节点为第二级子节点,“DEFAULT”、“AFC”、“PSCAN”等子命令对应子节点为第三级子节点,“CENTER”等子命令对应子节点为第四级子节点。
步骤S210、为写入的每条SCPI命令设置相应的命令标号,将设置的命令标号作为节点属性值添加到对应的SCPI命令的最后一级子节点中。
该步骤中的命令标号可以是二进制、十进制、十六进制等形式,也可以采用四位、八位等位数来表示。例如,图3中的第三级子节点“AFC”后的“234946560”为该子节点所属SCPI命令对应的命令标号。将命令标号写入XML文件之后保存XML文件,并在保存XML文件后关闭该XML文件。
由此可知,XML文件采用树形分层结构描述SCPI指令集,XML文件开头可以是文件说明语句,以表示文件版本号和编码方式,接下来是根节点,根节点之后是各级子节点,各级子节点分别对应SCPI命令的各级子命令,子节点后面可以设置节点属性值,表示子节点所属SCPI命令的对应编号。因此,采用XML文件构建SCPI命令树,可以有效地实现数据与程序的分离,修改SCPI命令或扩展SCPI命令时只需修改XML文件即可。
参见上文步骤S104,在本发明一实施例中,XML文件中的SCPI命令格式可以包括大写格式或小写格式,在进行SCPI命令匹配之前还可以先判断接收到的SCPI命令格式与XML文件中的多条SCPI命令的格式是否完全相同,若判断得知两者格式相同时可以直接进行匹配操作。若判断得知两者格式不同,还需将接收到的SCPI命令格式转换成与XML文件中SCPI命令完全相同的格式,进而按照预置算法将格式转换后的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配。其中,接收到的SCPI命令的格式可以是大写格式、小写格式或者大小写混合格式等。
在本发明另一实施例中,为了减少判断SCPI命令格式的步骤,当接收到SCPI命令时,无需判断SCPI命令的格式,直接将接收到的SCPI命令格式转换为与XML文件中SCPI命令完全相同的格式,即无论接收到的SCPI命令是什么样的格式,都会将其格式转换为与XML文件中SCPI命令完全相同的格式,进而将格式转换后的SCPI命令与XML文件中SCPI命令进行匹配。
继续参见上文步骤S104,现有技术中的SCPI命令集包括命令部分和参数部分,命令部分可能省去多个父节点命令(即缺省命令),但是传统仪器只能够支持固定的大写命令或小写命令,支持的SCPI命令集往往不够全面。而采用本发明实施例的SCPI命令的解析方法可以帮助仪器支持缺省SCPI命令。现介绍按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配的具体过程。
首先,若接收到的SCPI命令中具有N级子命令,从接收到的SCPI命令中解析出N级子命令,其中,N≥1且N为正整数。
然后,将N级子命令中的第一级子命令与XML文件中第一级子节点中包含的各个子节点进行匹配。
需要说明的是,同一级子节点中可能包含了多个子节点,例如,图3所示XML文件中,第三级子节点中包含了“DEFAULT”、“AFC”、“PSCAN”等子节点。在将第一级子命令与XML文件中第一级子节点中包含的各个子节点进行匹配时,可以按照子节点的顺序进行匹配,如第一级子节点中包含了3个子节点,第一级子命令先与第一级子节点中的第一个子节点匹配,若匹配成功,则不再对第一级子节点中的另外2个子节点进行匹配,若未匹配成功,则第一级子命令继续与第一级子节点中的第二个子节点进行匹配,依次类推。
进一步,若匹配得到相应的子节点,判断匹配成功的子节点所在级数是否为XML文件的最后一级。若是,返回匹配成功的子节点对应的命令标号。
若否,判断该子节点的下一级子节点是否为缺省节点;若是,返回缺省节点对应的命令标号;若不是,继续将N级子命令中的下一级子命令与XML文件中下一级子节点中的各子节点进行匹配,直至第N级子命令匹配完成,返回最终匹配成功的子节点对应的命令标号。其中,缺省节点对应的SCPI命令的子命令为缺省命令。图3所示的XML文件中采用“DEFAULT”表示其对应的节点为缺省节点。该实施例中,当所有子节点均未匹配成功,返回未匹配成功的标识,例如返回命令标号为0。
在本发明一实施例中,接收到的SCPI命令可以包含多条SCPI命令,本发明实施例采用如下方式可以同时支持对多条SCPI命令的实时解析,即支持解析多次连续发送的SCPI命令。
若接收到的SCPI命令为来自同一批次的多条SCPI命令,利用第一标识对接收到的各条SCPI命令进行区分,例如,第一标识采用“,”等符号表示。进而按照预置算法将区分后的SCPI命令同时与XML文件中一种预置类型的多条SCPI命令进行匹配。
若接收到的SCPI命令为来自不同批次的多条SCPI命令,利用第二标识对不同批次接收到的各条SCPI命令进行区分,以及利用第一标识对每一批次中的各条SCPI命令进行区分,例如,第二标识采用“\n”等符号表示。进而按照预置算法将区分后的SCPI命令同时与XML文件中一种预置类型的多条SCPI命令进行匹配。
并且,若SCPI命令中包含有命令参数,那么可以通过空格将命令和命令参数进行分隔。从每条SCPI命令中解析出各级子命令后,还可以将各级子命令之间采用“:”区分。这种分层划分方式可便于实现多条SCPI指令的实时解析。
为了更加清楚地体现本发明实施例的接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配的匹配过程。参见图4,现以一具体实施例对本发明进行介绍,该实施例中,XML文件的多条SCPI命令为大写格式的命令。
步骤S402,从接收到的SCPI命令中解析出N级子命令,其中,N≥1且N为正整数。
步骤S404,将N级子命令分别转换为大写格式,并设置i为子命令级数,i≤N。
步骤S406,获取解析出的第一级子命令,即i=1。
步骤S408,判断当前i是否小于等于N,若是,执行步骤S410;若否,结束匹配流程。
步骤S410,将xml_root指向XML文件中第i级子节点的第一个子节点,且采用xml_root遍历XML文件中第i级子节点中所有子节点。其中,xml_root为指针,在初始状态时,xml_root指向XML文件的根节点。
步骤S412,判断是否存在匹配成功的子节点,若是,执行步骤S414;若否,执行步骤S415,返回命令标号为0,并结束匹配流程,其中,命令标号为0表示匹配失败。
步骤S414,判断第i级子节点是否为XML文件的最后一级;若是,执行步骤S418,返回匹配成功的子节点对应的命令标号;若否,执行步骤S416。
步骤S416,判断下一级子节点是否为缺省节点,若是,执行步骤S418,返回匹配成功的子节点对应的命令标号。此时匹配成功的子节点即为缺省节点。若否,执行步骤S420。
步骤S420,i加1,即i=i+1,继续执行步骤S408。
上文实施例中已经介绍了XML文件中的一种预置类型的多条SCPI命令可以包含全写(长格式)类型的SCPI命令或者缩写(短格式)类型的SCPI命令,为了更加清楚的体现本发明实施例,现以XML文件中的多条SCPI命令的预置类型为全写类型,接收到的SCPI命令类型包含缩写类型为例,介绍本发明实施例的按照预置算法匹配接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令的过程。
首先,从缩写类型的SCPI命令中解析出各级缩写子命令。
然后,获取各级缩写子命令的字符串长度C,以及XML文件中相应级数子节点的字符串长度X。
规定若缩写子命令对应的原全写子命令长度大于4,且其第4个字符为元音,则该缩写子命令放弃该元音字符,C=3;若原全写子命令的第4个字符不是元音,C=4;其中,C和X均为正整数。
其中,全写(长格式)类型是指SCPI命令的各子命令关键字用完整的单词(长型助记符)表示。缩写(短格式)类型是指SCPI命令的各子命令关键字由长型助记符的前N个字符构成,其也可以称为短型助记符,其中,N为不小于1的正整数,且不超过全写(长格式)类型的SCPI命令的字符串长度数值。而原全写子命令即为缩写子命令对应的长型助记符,相应的缩写子命令可以称为短型助记符。由此,长型助记符和短型助记符之间的关系是,如果长型助记符的长度大于4,且第4个字符不是元音时,短型助记符为4个字符;如果长型助记符的长度大于4,且第4个字符是元音时,短型助记符将放弃这个元音而变成3个字符。另外,如果长型助记符的字符长度小于等于4时,长短型助记符相同。
进一步,判断任一缩写子命令的字符串与XML文件中相应级数子节点的前C位字符串是否完全相同。
若是,并分析得知该缩写子命令的字符串长度C=4,相应级数子节点的字符串长度X大于4且其第4位字符不是元音字符,则匹配成功,或分析得知该缩写子命令的字符串长度C=3,相应级数子节点的字符串长度X大于4且其第4位字符是元音字符,则匹配成功。
下面以一具体实施例对缩写类型的SCPI命令与XML文件中全写类型的多条SCPI命令的匹配过程进行介绍。该实施例中,缩写类型的SCPI命令关键字由长型助记符(即表示该命令完整的单词)的前4个字符构成,长型助记符的长度大于4,当第4个字符是元音时短型助记符将放弃这个元音而变成3个字符,当第4个字符不是元音时短型助记符为4个字符,另外,如果长型助记符的字符长度小于等于4时,长短型助记符相同。参见图5。
步骤S502,从缩写类型的SCPI命令中解析出各级缩写子命令。
步骤S504,获取各级缩写子命令字符串长度com_len和XML文档中相应级数子节点对应的字符串长度xml_len,其中,com_len≤xml_len。
步骤S505,判断任一缩写子命令的字符串与XML文件中相应级数子节点的前com_len位字符串是否相同。若否,执行步骤S506,匹配失败,返回Validity_flag=0,其中,Validity_flag=0表示匹配失败;若是,执行步骤S508。
步骤S508,判断该缩写子命令的com_len和相应级数子节点对应的字符串的xml_len是否相等,若是,执行步骤S510,匹配成功,返回Validity_flag=1,其中,Validity_flag=1表示匹配成功。若否,执行步骤S512。
步骤S512,判断相应级数子节点对应的字符串的xml_len是否大于4且其第4位字符不为元音字母,若是,执行步骤S514;若否,执行步骤S516。
步骤S514,判断该缩写子命令的com_len是否等于4,若是,执行步骤S510。若否,执行步骤S506。
步骤S516,判断相应级数子节点对应的字符串的xml_len是否大于4且其第4位字符为元音字母,若是,执行步骤S518;若否,执行步骤S506。
步骤S518,判断该缩写子命令的com_len是否等于3,若是,执行步骤S510;若否,执行步骤S506。
在本发明一实施例中,接收到的SCPI命令中可能还包含有命令参数,当包含命令参数时,还需要对该命令参数的合法性和有效性进行校验。
具体的,当按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配之后,还可以判断接收到的SCPI命令中是否存在命令参数,若是,则对命令参数进行有效性验证,并依据验证通过的命令参数以及匹配成功的SCPI命令对应的命令标号,调用相应的底层函数。
在该实施例中,对命令参数进行有效性验证的过程可以是,首先,识别命令参数所属参数类别,其中,参数类别包括字符串类别和/或数值类别,即命令参数可以是字符串形式、数值形式、字符串和数值混合形式等。然后,根据识别到的命令参数的参数类别,验证命令参数是否为其所属参数类别中的合法范围内的命令参数,若是,命令参数为有效参数。在本发明实施例中,当命令参数校验成功之后,还可以保存校验成功的相关参数标志,当命令参数校验失败之后,则可以提示用户参数错误。
为了更加清楚的体现本发明实施例的命令参数的校验过程,先以一具体实施例进行详细介绍,参见图6。
步骤S602,判断接收到的SCPI命令是否为无参数类别,若是,执行步骤S604;若否,执行步骤S606。
步骤S604,判断接收到的参数是否为空,若是,执行步骤S608,返回参数标志parameter_flag=2,并继续执行步骤S609,保存参数标志,其中,parameter_flag=2表示接收到的SCPI命令中不存在命令参数。若否,执行步骤S610,提示用户参数错误。
其中,参数标志可以用来标识SCPI命令中的参数类别,通过保存参数标志,如将参数标志进行缓存,当接收到的SCPI命令包含有多条时,可以方便的实现多条命令的实时解析。
步骤S606,判断接收到的SCPI命令的命令参数是否仅包含数值,若是,执行步骤S612;若否,执行步骤S614。
步骤S612,判断该数值参数是否为合法数值,若是,执行步骤S616,返回参数标志parameter_flag=0,并继续执行步骤S609,其中,parameter_flag=0表示接收到的SCPI命令的参数为合法的数值参数。若否,执行步骤S610。
步骤S614,判断接收到的SCPI命令的命令参数是否仅包含字符串,若是,执行步骤S618;若否,执行步骤S620。
步骤S618,判断该字符串参数是否为合法字符串,若是,执行步骤S622,返回参数标志parameter_flag=1,并继续执行步骤S609,其中,parameter_flag=1表示接收到的SCPI命令的参数为合法的字符串参数。若否,执行步骤S610。
步骤S620,判断接收到的SCPI命令的命令参数是否包含数值和字符串,若是,执行步骤S624;若否,执行步骤S610。
步骤S624,判断包含数值和字符串的命令参数中字符串参数是否为合法字符串,若是,执行步骤S622;若否,执行步骤S626。
步骤S626,判断包含数值和字符串的命令参数中数值参数是否为合法数值,若是,执行步骤S616;若否,执行步骤S610。
在本发明实施例中,判断数值参数为合法的数值参数的方式包含有多种,可以是判断数值参数是否在合法数值范围内。例如,某一SCPI命令,其合法数值参数范围应该是频率范围90MHz~120MHz,若接收到的该SCPI命令携带的频率数值参数为98MHz,则该数值为合法数值参数,若接收到的该SCPI命令携带的频率数值参数为80MHz,该数值为不合法数值参数。
此外,判断字符串参数是否为合法的字符串参数的方式也包含有多种,可以是判断字符串参数中是否携带了不合适的字符。例如,某一SCPI命令,其合法字符串参数应该为多个字母,若接收到的该SCPI命令中包含数字,则该数字字符串为不合法字符串参数。
通过上述实施例可知,本发明实施例不仅可以对SCPI命令的命令参数的合法性进行有效的验证,还可以对命令参数的类别进行快速地识别。
基于同一发明构思,本发明实施例还提供了一种SCPI命令的解析装置。图7示出了根据本发明一个实施例的SCPI命令的解析装置的结构示意图。参见图7,SCPI命令的解析装置700至少包括读取模块710、匹配模块720以及调用模块730。
现介绍本发明实施例的SCPI命令的解析装置700的各组成或器件的功能以及各部分间的连接关系:
读取模块710,适于读取已经创建的XML文件,XML文件中包含一种预置类型的多条SCPI命令及各SCPI命令对应的命令标号;
匹配模块720,与读取模块710耦合,适于接收预置类型或其他类型的SCPI命令,按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配,其他类型为与预置类型不同的类型;
调用模块730,与匹配模块720耦合,适于获取匹配成功的SCPI命令对应的命令标号,根据获取的命令标号调用相应的底层函数,其中,命令标号与底层函数一一对应。
在本发明一实施例中,匹配模块720还适于判断接收到的SCPI命令格式与XML文件中的多条SCPI命令的格式是否完全相同,其中,XML文件中的SCPI命令格式包括大写格式或小写格式。若否,将接收到的SCPI命令格式转换成与XML文件中SCPI命令完全相同的格式。按照预置算法将格式转换后的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配。
在本发明一实施例中,匹配模块720还适于若接收到的SCPI命令为来自同一批次的多条SCPI命令,利用第一标识对接收到的各条SCPI命令进行区分,按照预置算法将区分后的SCPI命令同时与XML文件中一种预置类型的多条SCPI命令进行匹配。若接收到的SCPI命令为来自不同批次的多条SCPI命令,利用第二标识对不同批次接收到的各条SCPI命令进行区分,以及利用第一标识对每一批次中的各条SCPI命令进行区分,按照预置算法将区分后的SCPI命令同时与XML文件中一种预置类型的多条SCPI命令进行匹配。
本发明实施例还提供了另一种SCPI命令的解析装置。SCPI命令的解析装置700除了包含上述各模块之外,还可以包括创建模块740和验证模块750。
创建模块740,与读取模块710耦合,适于基于SCPI命令集创建XML文件,其中,SCPI命令集中包含多条SCPI命令。
验证模块750,与匹配模块720和调用模块730分别耦合,适于在匹配模块720按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配之后,若判断接收到的SCPI命令中存在命令参数,对命令参数进行有效性验证。依据验证通过的命令参数以及匹配成功的SCPI命令对应的命令标号,调用相应的底层函数。
在本发明一实施例中,创建模块740还适于在新建XML文件中,按照树形分层结构依次创建根节点和i级子节点,其中,根节点标识SCPI命令的位置。获取SCPI命令集,将SCPI命令集中的多条SCPI命令分别转换为同一格式、同一预置类型的SCPI命令。从转换后的多条SCPI命令中解析出各SCPI命令对应的至少一级子命令。基于至少一级子命令,按照DOM形式将各级子命令写入对应的子节点,其中,第i级子命令对应XML文件的第i级子节点,i≥1且i为正整数。为写入的每条SCPI命令设置相应的命令标号,将设置的命令标号作为节点属性值添加到对应的SCPI命令的最后一级子节点中。
在本发明一实施例中,匹配模块720还适于,若接收到的SCPI命令中具有N级子命令,从接收到的SCPI命令中解析出N级子命令,其中,N≥1且N为正整数。将N级子命令中的第一级子命令依次与XML文件中第一级子节点中包含的各子节点进行匹配。若匹配得到相应的子节点,判断匹配成功的子节点所在级数是否为XML文件的最后一级;若是,返回匹配成功的子节点对应的命令标号。若否,判断该子节点的下一级子节点是否为缺省节点;若是,返回缺省节点对应的命令标号;若不是,继续将N级子命令中的下一级子命令与XML文件中下一级子节点中的各子节点进行匹配,直至第N级子命令匹配完成,返回最终匹配成功的子节点对应的命令标号;其中,缺省节点对应的SCPI命令的子命令为缺省命令。
在本发明一实施例中,若XML文件中的多条SCPI命令的预置类型为全写类型,接收到的SCPI命令类型包含缩写类型,匹配模块720还适于,从缩写类型的SCPI命令中解析出各级缩写子命令。获取各级缩写子命令的字符串长度C,以及XML文件中相应级数子节点的字符串长度X,并且规定缩写子命令对应的原全写子命令的第4个字符为元音,则该缩写子命令放弃该元音字符,C=3;若原全写子命令的第4个字符不是元音,C=4;其中,C和X均为正整数。判断任一缩写子命令的字符串与XML文件中相应级数子节点的前C位字符串是否完全相同。若是,并分析得知该缩写子命令的字符串长度C=4,相应级数子节点的字符串长度X大于4且其第4位字符不是元音字符,则匹配成功,或分析得知该缩写子命令的字符串长度C=3,相应级数子节点的字符串长度X大于4且其第4位字符是元音字符,则匹配成功。
在本发明一实施例中,验证模块750还适于识别命令参数所属参数类别,其中,参数类别包括字符串类别和/或数值类别。根据识别到的命令参数的参数类别,验证命令参数是否为其所属参数类别中的合法范围内的命令参数;若是,命令参数为有效参数。
根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
在本发明实施例中,首先读取已经创建的XML文件,该XML文件中包含一种预置类型的多条SCPI命令及各SCPI命令对应的命令标号。然后接收预置类型或其他类型的SCPI命令,按照预置算法将接收到的SCPI命令与XML文件中一种预置类型的多条SCPI命令进行匹配,其他类型为与预置类型不同的类型。最后获取匹配成功的SCPI命令对应的命令标号,根据获取的命令标号调用相应的底层函数。本发明方案采用包含多条同一预置类型的SCPI命令的XML文件,以在接收到SCPI命令时,采用灵活的预置算法与XML文件中的SCPI命令进行匹配,使XML文件仅需描述一种类型的SCPI命令即可自动支持其他各种不同类型的SCPI命令。相比于现有的SCPI命令集解析技术存在结构复杂、复用困难、且一般仅支持固定类型的SCPI命令问题,本发明方案支持的SCPI命令更加全面且结构更加清晰。进一步地,本发明实施例还可以有效地支持多种SCPI命令的快速扩充与复用,当扩充SCPI命令时,仅需修改XML中的内容即可方便、快捷地实现SCPI命令的扩充。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。