一种多功能测量仪器程控命令处理方法与流程

文档序号:14120279阅读:402来源:国知局
一种多功能测量仪器程控命令处理方法与流程

本发明属于电子测试技术领域,具体涉及一种多功能测量仪器程控命令处理方法。



背景技术:

随着现代网络测试和系统集成技术的不断发展,远程控制测量的应用逐渐广泛,程控功能是所有通用测试仪器必不可少的重要接口功能模块,例如以信号源分析仪为例,它具备六大测量功能:频率功率测量、相位噪声测量、频谱监测、瞬态特性测量、基带噪声测量及调幅噪声测量,各个功能分别独立,多种测量功能就需要配套实现多套scpi命令集合,命令集合的增多就会带来如下问题:如何在成百上千条命令中区分程控命令所属测量功能类别;各测量功能命令集如何与不同的程控接口收发线程联动工作,实现命令解析;以及如何解决多种测量功能在用户界面、程控两方面重复维护菜单/命令参数和菜单/命令处理函数导致的大量代码冗余;

现有实现方案为:

传统处理方法:

传统的处理方法是传统程控系统结构采用单线程方式实现,程控消息的传输、解析、处理以及请求响应的回传都是单次执行的串行执行的。

(1)gpib传输单元传输程控消息字符串并存入gpib缓冲区(2)消息预处理器从gpib缓冲区中取出程控消息字符串(3)分离出n条命令后送至命令缓冲区(4)命令解析器逐条从命令缓冲区中取出命令,命令处理单元根据命令id索引到相应的命令处理函数对命令进行处理;若为查询命令,命令处理结果将以响应字符串的形式送gpib传输单元;

上述处理过程是以串行的方式依次执行,只是针对单种测量功能的程控命令进行解析和执行处理,传统设计中并没有考虑多种测量功能下程控的实现问题。因此对于多功能测量仪器的程控具有一定局限性。

程序串行的方式依次执行容易实现,并且交互起来比较简单,但是并没有发挥多线程多任务的优势,因此效率上比较低。另外,传统的方式对于程控的设计是一个封闭的系统,对于响应的程控命令需要单独设计程控的功能函数,执行程控的操作。

现有技术的缺点:

传统显示方式的缺点:

(1)传统的程控命令处理方式是针对单测量功能的设计,要求严格符合scpi规范规定,并没有考虑多测量功能需求的兼容性,对于多测量功能的语法将无法识别,因此对于后续的处理就无能为力了。

(2)对于整机软件和scpi命令,传统方式在实现上,一般的情况是为了保持各自的独立,代码之间的松耦合,通常是实现两套调用函数,这种方法实现简单,但是这种情况会造成代码冗余,而且在设置硬件状态时,容易出现状态设置不一致的情况,不易维护的副作用。

(3)传统的程控命令处理方式是以串行的方式依次执行容易实现,并且交互起来比较简单,但是并没有发挥多线程多任务的优势,因此效率上比较低。



技术实现要素:

针对现有技术中存在的上述技术问题,本发明提出了一种多功能测量仪器程控命令处理方法,设计合理,克服了现有技术的不足,具有良好的效果。

为了实现上述目的,本发明采用如下技术方案:

一种多功能测量仪器程控命令处理方法,具体包括如下步骤:

步骤1:在程控工作状态时,仪器端同时运行lan线程、usb线程、gpib线程、com线程,四个命令处理线程持续检测lan总线、usb总线、gpib总线、com服务器上是否存在命令数据;若存在命令数据,则将其放入各自的缓冲区,进行命令预分析;

步骤2:通过命令预分析从语法队列中按先进先出顺序提取每条命令后放入公共命令接收缓冲区;

步骤3:通过命令处理线程对语法队列中的每一条命令依次进行解析,将scpi命令分解为通用命令和子系统命令;

步骤4:通过通用命令直接执行命令功能;

步骤5:将子系统命令分为普通设置命令、查询命令和数据块存储命令,这三种子系统命令分解得到最终命令id和命令参数。

本发明所带来的有益技术效果:

(1)相较于传统方式的串行工作方式,本发明采用多线程加临界区保护的抢占公共命令缓冲区的方式,最大程度保证了命令解析速度,同时避免了多端口多命令缓冲区这种方式带来的仪器状态的不确定性;

(2)相较于传统方式的单一功能的测量命令解析而言,本发明基于标准scpi命令语法格式基础上,扩展定义了多测量功能命令格式,很好地解决了多套命令集之间命令如何区分的问题;

(3)相较于传统方式菜单功能和程控功能实现两套封闭的系统的设计而言,本发明基于菜单id和程控id映射的方式,实现程控命令的处理,解决了两种参数来源的功能处理。大大减少了代码编写量,精简了软件规模。

附图说明

图1为多测量功能程控解析方法流程图。

图2为命令映射的方式示意图。

具体实施方式

下面结合附图以及具体实施方式对本发明作进一步详细说明:

1、多测量功能scpi命令解析方法

多功能测量仪器的程控部分如何实现多测量功能命令接收和解析,从而实现与用户界面对等功能,设置用户整机状态,再经过进一步的参数调整,确定最终的整机测量状态。本发明采用下面的方案设计实现了多测量功能程控解析部分,如图1所示:

由附图得知,在程控工作状态时,仪器端同时运行lan线程、usb线程、gpib线程、com线程,四个线程持续检测lan总线、usb总线、gpib总线、com服务器上是否有命令数据传送,以中断的方式处理与控者的信息交互,若存在命令数据,则将其放入各自的缓冲区,进行命令预分析,命令预分析从语法队列中按先进先出顺序提取每条命令,经过解析后放入公共命令接受缓冲区,命令处理线程依次执行命令队列中的每一条命令进行命令解析,将scpi命令分解为通用命令、子系统命令,通用命令直接进行执行,子系统命令分为普通设置命令、查询命令、数据块存储命令,这三种子系统命令分解得到最终命令id和命令参数。

(1)命令预分析

命令预分析实现对测量仪器的程控筛选和scpi命令格式分离。正确解析在发送过程中可能会出现的发送错误(如:关键字错误、参数个数、参数数据类型不匹配、参数超界等)。如果测量仪器不能很好地解决这些问题,将无法实现指定功能,甚至可能会造成测量仪器的崩溃。因此,必须对通过通讯接口所接收到的数据和程控命令信息进行解析,判断其合法性,提取有效指令和相应的参数。另一方面,仪器远程控制使用的命令,通常都依据scpi规范设计。scpi规范规定命令是由关键字、特殊符号(冒号、分号、空白字符等)及命令属性组成。据此,每个scpi命令都可以按照特定的方式逐步分解,得到命令的所有信息。命令解析和处理模块以scpi规范为基础,采用特殊的数据结构,实现了命令的解析和处理。

(2)写公共命令接收缓冲区

命令预分析完成后将合法命令按照先进先出(fifo)的方式,依次存储到公共命令接受缓冲区,为了将来返回查询命令的查询信息,还要同时将发送命令的端口标识一并存储。增加临界区以确保对fifo资源的单独占用,否则当多个程序同时访问fifo时会产生不可预知的后果。本发明中,所有程控线程采用抢占的方式依次存储命令,这样做的好处是:实现了多个程控端口同时工作,最大程度保证了命令解析速度。这种多线程加临界区保护的抢占公共命令缓冲区的方式,最大程度保证了命令解析速度,同时避免了多端口多命令缓冲区这种方式带来的仪器状态的不确定性。

(3)命令解析

根据预解析部分获取的测量功能标识,找到对应的命令树,并根据语法规则,先区分命令属于通用命令(*开头),还是子系统命令(:开头),进入不同的分支,做进一步的处理,scpi规范要求既可以查询命令,也可以是数据块存储命令、也可以是普通设置命令。

通用命令:通用命令由ieee488.2定义,用来管理宏、状态寄存器、同步和数据存储。他们都由一个星号开始,因此很容易认出来。例如*idn?、*opc、*rst都是通用命令。通用命令不属于任何子系统,多功能测量仪器对于通用命令建立单独的命令树,如果为通用命令,则直接进行处理。

查询命令:转换输出命令id和和命令参数,并返回查询信息到相应的端口。

普通设置命令:普通设置命令属于子系统命令,根据多功能命令树进行解析,转换输出命令id和和命令参数,并根据id和命令参数进行映射,设置整机状态,根据其实现功能,又划分为两类:测量相关命令和测量无关命令。测量无关命令是指,不影响当前测量参数状态,不参与测量过程,不影响整机硬件状态。测量相关命令影响当前整机测量参数状态,一般接收到这种命令后,要按照当前命令设置的新的整机测量状态,重新启动新的测量过程。

数据块存储命令:数据块存储命令的数据很大,分解出大数据块命令的id和参数和进行单独处理。数据块命令包括数据块设置命令和数据块存储命令。需要根据命令解析的结果进行处理。另外一种特殊情况是多条数据块存储命令组合而成的关联命令。依据scpi规范,分号表示一条命令的结束,另外,两条命令之间也可以通过分号间隔,这两条命令称作关联命令。关联命令的处理是命令解析重点解决的问题,遇到分号时,需要更改命令的关联码,将当前命令写入缓冲区,根据解析的命令参数设置接收缓冲区的有效长度,然后继续读取其他命令;然后分解大数据块命令的id和参数,触发函数接口的执行。

2、多测量功能命令映射

根据前面章节的论述,得知程控接口部分的输入是scpi命令,输出是经过命令解析得到的命令id和命令参数,而通过前面板/键盘/鼠标,设置用户界面菜单,也是最终得到菜单id和菜单参数,这些信息都直接决定了用户整机状态。那么命令id和命令参数、菜单id和菜单参数,可通过不同的信息接收渠道,设置多功能测量仪器参数状态,最常用的就是通过程控接口接收标准scpi命令和通过用户界面设置菜单参数,往往一条命令就对应了一系列菜单操作得到的菜单参数,这也解释了为何程控接口和用户界面在用户接口软件模块中处于对等功能位置。简而言之,用户接口模块通过接收来自不同渠道的信息,输出命令/菜单id和命令/菜单参数设置用户整机状态,进而通过参数调整确定了新的整机测量状态,以开始新的测量任务。这样就实现了多功能测量仪器软件框架中从信息接收→状态调整→参数传递→实施测量,这一完整任务地衔接。

从具体编码来看,命令/菜单id对应了命令/菜单处理函数全局数组中的某个具体功能函数,通过获取的命令/菜单参数,开展从设置用户整机状态开始的后续一系列任务。往往在实际操作中,程控手册中的scpi命令集合中的命令实现的功能,基本都能通过操作界面菜单来完成,简言之,同样功能的命令/菜单处理函数的代码在实现上是一致的。如果在远控和本控各自维护一套自己的功能函数实现,这当然是最简单的解决方法,但这不是最行之有效,因为会带来一个问题:命令数目越大、菜单数目越多、层次越深,那么会产生大量的代码冗余,那么,多种测量功能的用户接口部分的程序代码量是可想而知的。为了解决这个问题,在多功能测量仪器中采用命令映射的方式解决这个问题,即只在用户界面部分维护一套菜单功能函数数组,通过映射算法,将命令id和命令参数映射到对应的菜单id和菜单参数,通过菜单id找到菜单功能函数数组中的某个具体的功能函数,实现命令处理,这样只需一次转换,就解决了两种参数来源的功能处理。实际测试取得了很好的效果,大大减少了代码编写量,精简了软件规模。命令映射的方式如图2所示:

3、多测量功能scpi命令扩展

多功能测量仪器中,除了ieee488.2标准规定的通用命令和各模式公用系统命令,为了区分不同测量功能的scpi命令,在子系统命令规范基础上扩展出测量功能标识字段,如下命令格式:

:子系统名称:测量功能[1—n]:命令字段1…:命令字段n[参数[列表]]

其中,“测量功能[1—n]”字段为扩展的测量功能标识字段,由测量功能名称的英文简写的大写格式和中括号部分的窗口标号组成,如相噪测量是“pn[1-1]”,这样,多功能测量仪器scpi命令语法格式不仅符合scpi命令规范要求,也很容易地实现了多种测量功能命令的区分解析。命令具体说明如表1所示:

表1多功能测量仪器scpi命令说明

举例说明::calculate:pn[1-1]:trace[1-1]:allmarker:active<numeric>。

该命令用于设置相噪测量的轨迹1的活动频标。其中,calculate是计算子系统、该类子系统命令主要用于完成:测量结果数据的计算、频标、光标设置/计算等;pn[1-1]代表相噪测量功能;trace[1-1]:allmarker:active是命令功能字段,表示选择轨迹1的活动频标;参数<numeric>范围:1~10,该值代表活动频标索引号。

当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1