基于VC++6.0的SCPI解释器设计
2012-09-27李海龙刘文文
李海龙,刘文文
(合肥工业大学 仪器仪表学院,安徽 合肥 230009)
基于VC++6.0的SCPI解释器设计
李海龙,刘文文
(合肥工业大学 仪器仪表学院,安徽 合肥 230009)
SCPI是现代可程控仪器的一种采用树状分层结构的标准命令集,被广泛的应用于各种智能仪器的控制和测试中。根据SCPI树形结构的特点,使用VC++中的ODBC技术,创建并查询SCPI命令集的数据库,使用VC++中的CTreeCtrl控件,生成SCPI的命令树,方便得到SCPI命令的完整路径,同时完成了SCPI命令集解释器的设计。
SCPI;树状分层结构;命令树;ODBC;CTreeCtrl控件;解释器
1990年4 月,由HP、Tek等9家知名的仪器制造商组成的联合体,一致同意发表了建立在IEE488.2基础上的可程控仪器的标准程控命令(Standard Commands for Programmable Instruments,SCPI),并在同年发布了它的第一标准文本SCPI Rev.1990.0[1-4]。
1 SCPI语法的介绍
1.1 SCPI简介
SCPI是建立在以IEEE488.1和IEEE488.2标准为基础,以ASCII字符组成的标准仪器命令语言,它采用的是树形分层结构的命令集,助记符的规则简单且易于记忆。该语言为所有仪器提供了相互兼容的编程和使用环境,通过采用标准化的编程信息、仪器相应和数据格式来保证编程环境的兼容性,提高了编程的效率,可以用于GPIB、USB等各种类型接口之间的通信。目前国内外的仪器都是根据这个标准进行设计和制造。
1.2 SCPI命令格式
对于整个SCPI命令可以分为两个部分:一部分是IEEE488.2公用命令,要求仪器必须执行,这部分与测量无关,只是用来控制重设、自我测试和状态的操作;另一部分是SCPI仪器特定控制命令,其又可进一步分为一组测量命令和23个命令子系统。
对于公用命令,一般都是以“*”开头且仅有一层,用来执行所有有标准IEEE488.2界面的仪器的共同功能。如*RST、*CLR等。
SCPI仪器特定控制命令分为命令和查询两种格式,用来从事测量、读取资料以及通过查询来获取仪器的设置或状态等功能。SCPI命令采用树形结构的指令系统,称为SCPI命令树,包括校准子系统、检测子系统和测试子系统等23个子系统,每个命令树系统由一个根命令和一个或者数个层次命令构成[4-5]。命令树形结构如图1所示。
图1 SCPI命令结构Fig.1 Structure of SCPI
仪器特定控制命令格式为:关键字<参数>:关键字<参数>:……<参数>,<参数>……
冒号(:)的使用方法:冒号位于命令关键字的第一个字符前面,表示接下来的命令是根命令;位于两个命令之间时表示当前层次向下移动一个层次。
分号(;)的使用方法:用来分离同一个命令字符串中的两个命令,但不改变目前指定的路径。
进入暖箱的新生儿需要全程监护,医护人员会定时查体、喂奶、换尿布、观察宝宝的皮肤颜色、原始反射和生命体征等,及时调节暖箱的温度和湿度,避免暖箱温度失控,影响宝宝的身体健康。
逗号(,)的使用方法:如果一个命令需要一个以上参数时,参数之间用逗号分开。
空格的使用方法:分隔关键字和参数。
“?”命令的使用方法:以问号结束的是查询命令,可以指定仪器发送反应信息,查询的传回值为测量值或仪器内部的设置值。
由于SCPI为树形结构,因此只有指定完整的路径才能执行较低层次的个别命令。根据图1的SCPI树形结构可以得到如下指定命令的完整路径:
:SENse:FREQuency:VOLTage:RANGe<参数值>
2 SCPI解释器的设计
对于早期的仪器并不支持SCPI命令集。因此需要设计一种命令解释器,能够根据用户输入的SCPI命令查询到程控仪器内置的与SCPI命令相对应且仪器可以识别的命令,从而完成SCPI命令的解释过程。
2.1 创建ODBC数据源
在ODBC体系下,要访问某种数据库,用户只需借助操作系统提供的ODBC管理工具软件,在应用程序的运行平台安装相应的ODBC数据库驱动程序,按照“开始-控制面板-数据源”,打开“ODBC数据源管理器”,建立一个ODBC数据源的对象,然后用户就可以通过该数据源来访问相应的数据库。
2.2 数据库的连接
要访问我们创建的数据库,第一步就是从应用程序连接到数据库。首先使用VC++6.0创建一个基于对话框的工程,在工程中添加一个新类CRecord,其基类是CRecordset,出现如下对话框,选择创建的SCPI数据源,这样就相当于把创建的数据库与应用程序连接在一起,之后就可以对数据库进行操作[6]。
2.3 数据库的操作
CRecordset类封装了对数据库进行各种操作的成员函数,可以满足我们的需求。使用派生类CRecord的对象record,对数据库进行动态查询,动态表示的信息有如下一些:
1)记录集中的字段数目 (即列的数目) short nFields=record.GetODBCFieldCount();//获取记录集的列值
2)创建命令树 VC++中树形控件常常用来显示和组织树、索引项等具有多层次关系的结构[5]。在BOOL CTestDlg::OnInitDialog()中调用 NewTree()函数,其作用是将数据库中查询到得SCPI每个节点按照其结构方式存放在m_tree控件上相应的项中 (m_tree是一个与CTreeCtrl控件相关联的变量),构成树形层次结构。
3)依次查询字段值 由于SCPI命令在数据库中的格式为字符串,因此给Edite控件关联一个CString变量m_cmd,用于存放输入的子命令。
4)遍历命令树 在确定输入的子命令查找成功之后,使用递归方法遍历树形结构,将存在的命令项的HTREEITEM(即句柄值)转化为DWORD形式存放在Item[N]数组中,实现了对SCPI中重复命令的查询[7]。
5)创建完整路径 由于得到的是子命令的句柄值,因此可以通过CTreeCtrl控件的GetParentItem () 函数和GetItemText(),依次得到子命令的父节点和父节点上字符串的内容,通过字符串的相加即可得到子命令的完整路径。
2.4 命令解释器
图2 命令查询Fig.2 Command query
图3 完全路径Fig.3 Full path
对于每个完整路径的SCPI子命令来说,都有与其相对应的程控仪器的控制命令,因此可以通过每个SCPI子命令唯一的ID值与程控仪器的控制命令相关联起来。同样通过上述方法,将程控仪器的控制命令集数据库添加至工程中,点击SCPI子命令即可得到其ID值,通过SCPI子命令的ID值查找到与其对应程控仪器可识别的控制命令,即完成了SCPI命令的解释过程。如图4所示。
图4 解释效果Fig.4 Effect of interpret
3 结束语
SCPI在现代测量控制领域[8]的应用十分广泛,为了加强对命令集的管理,对于SCPI命令集的存储结构和子命令的查询是十分重要的。本文设计并实现了对输入的SCPI命令的判断和查询,得到了输入的SCPI子命令的完整路径,并完成了对SCPI命令的解释,方便了命令的发送和对可程控仪器的操作。
[1]陈艳芬,杨景常,张吉涛.PC机远程控制仪器的SCPI解析模块设计[J].微计算机信息,2008(11):143-145.
CHEN Yan-fen,YANG Jing-chang,ZHANG Ji-tao.The design of SCPI parser module between PC and remote control instruments[J].Control&Automation,2008(11):143-145.
[2]奚全生.可编程仪器标准命令(SCPI)介绍[J].计算机自动测量与控制,1994(1):22-31.
XI Quan-sheng.Instroduction of SCPI[J].Computer Automated Measurement&Control,1994(1):22-31.
[3]朱兴邦,李兵.IEEE488与SCPI解释[J].仪器仪表标准化与计量,2007(1):15-16.
ZHU Xing-bang,LI Bing.The explanation of IEEE488 and SCPI[J].Instrument Standardization&Metrology,2007 (1):15-16.
[4]于红雨,李智,刘畅.函数/任意波形发生器SCPI解释器设计与实现[J].国外电子测量技术,2009(4):70-73.
YU Hong-yu,LI Zhi,LIU Chang.Research and implementation of SCPI interpreter for function/arbitrary waveform generator[J].Foreign Electronic Measurement Technology,2009(4):70-73.
[5]杜秀伟,王前程.SCPI语言解析器的设计与实现[J].电子质量,2008(8):23-25.
DU Xiu-wei,WANG Qian-cheng.Design and implementation of SCPI parser[J].Electron Quality,2008(8):23-25.
[6]徐华中,冯红梅.VC-MFC ODBC的数据库系统开发[J].武汉理工大学学报,2004(6):25-27.
XU Hua-zhong,FENG Hong-mei.Database system development of VC-MFC ODBC[J].Journal of WUT:Information&Management Engineering,2004(6):25-27.
[7]陈慧南.数据结构-C语言描述[M].西安:西安电子科技大学出版社,2009.
[8]李军浩,胡泉伟,吴磊,等.极化/去极化电流测试技术的仿真研究[J].陕西电力,2011(4):1-5.
LI Jun-hao,HU Quan-wei,WU Lei,et al.Simulation study of polarization and depolarization current measurements technology[J].Shaanxi Electric Power,2011(4):1-5.
Design of SCPI interpreter based on VC++6.0
LI Hai-long,LIU Wen-wen
(School of Instrument Science,Hefei University of Technology,Hefei230009,China)
SCPI is the new instrument command language for controlling instruments with tree structure,has been wildly used in controling and testing of intelligent instruments.Based on the structural characteristics of SCPI,used ODBC technology in VC++,create and query the database of SCPI,used CTreeCtrl control,build the command tree of SCPI and get the full path of SCPI easily,complete the design of SCPI interpreter.
SCPI; tree structure; command tree; ODBC; CTreeCtrl control; interpreter
TH89
A
1674-6236(2012)04-0094-03
2011-12-20 稿件编号:201112115
李海龙(1986—),男,陕西渭南人,硕士研究生。研究方向:精密测试技术及仪器。