




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于C#的数字存储示波器控制软件设计与实现徐 宙 朱 震 程彦杰 刘连照 曹星江(中国洛阳电子试验装备中心,河南 洛阳 )摘要:基于C#语言,开发设计了数字存储示波器的控制软件,通过调用VISA函数和发送SCPI指令,实现了远程控制示波器采集数据、设置参数、显示波形等功能。利用双缓冲技术解决了波形显示时产生闪烁现象,利用GDI+动态绘图技术和“图层”技术实现波形的光标测量功能。控制软件易于更新和扩展,在电子测量系统中具有很好的应用前景。关键词:C#;数字存储示波器;仪器控制;VISA;GDI+Design and realization of control software for digital storage oscilloscope based on C#Abstract: A control software for digital storage oscilloscope (DSO) was designed and developed based on C#. By calling for VISA functions and sending SCPI commands, oscilloscopes remote control of acquiring data, setting parameters, displaying waveform and other functions were realized. Graphics flickering in waveform display disappeared by using double buffering. Cursors measure was realized by using GDI+ dynamic drawing technology and the “layer” technology. Its easily to rebuild and expand the control software, which has good outlook in electronic measuring system.Key words: C#; digital storage oscilloscope; instrument control; VISA; GDI+引言数字存储示波器(以下简称示波器)是一种通用测试仪器,广泛应用在电子测量的各个领域。随着技术的发展,示波器的性能指标显著提高,带宽达到几十GHz,采样率达到几十乃至上百GSa/s,存储深度也达到Gpts。示波器的分析能力却发展缓慢,只能对采集的波形进行有限的数学函数运算,如FFT、积分、微分等;示波器的存储能力虽大幅发展,但毕竟有限,当存储内容较多时,就需要借助外部设备来保存采集的数据。此外,强辐射、强电磁干扰环境下,手工操作示波器对测试人员是一个不小的挑战。开发示波器的控制软件,在远端对示波器进行控制,设置示波器的各种参数,进行数据采集,并将采集到的波形和数据保存到计算机中,借助计算机强大的存储和计算能力,利用一些高级分析工具和方法,例如小波分析、经验模态分析(EMD)等,对波形数据进行更深入的分析,能很好地解决上述问题。1 软件总体设计1.1 硬件接口总线及驱动硬件接口总线是影响仪器连接控制性能的重要因素1,决定了数据传输速率,传输距离和可连接的仪器数量。目前常用的仪器控制总线可分为两类:独立总线,例如GPIB、RS-232、以太网、USB、无线等;模块化总线,例如PXI、VXI等。其中,以太网具有传输速率高,配置灵活,传输距离和连接的仪器数量几乎不受限制的优点,特别适合于仪器的远程控制。虚拟仪器体系结构(Virtual Instrument Software Architecture,VISA) 2-4是美国NI公司提出的与各种总线通信的标准,适应于GPIB、USB、以太网等各种硬件接口总线,具有极高的通用性。可编程仪器标准命令(Standard Commands for Programmable Instruments,SCPI) 通过一系列的仪器控制命令来控制可编程仪器实现各种操作的功能,相同的SCPI命令可用于不同类型的可编程仪器,目前已经成为重要的程控仪器软件标准。本文采用基于VISA的SCPI控制方式,可使控制软件独立于仪器厂商、仪器型号和仪器总线,增加了控制软件的通用性和可扩展性。1.2 硬件组成控制软件的硬件组成如图1所示:计算机通过以太网与示波器相应的接口连接,并通过VISA向示波器发送SCPI指令,示波器接收到指令后采集天线或线缆接收的信号并将结果返回计算机进行存储和显示,以实现远程控制。图1 硬件组成1.3 开发平台选择C#是微软公司于2000年7月推出的一种专门用于.NET的面向对象,派生自C和C+的编程语言。C#具有Visual Basic的易用性,以及C+的高性能、低级内存访问;完全支持类和面向对象编程,包括接口和实现继承、虚函数和运算符重载;可自动清理动态分配的内存;可以用用户定义的属性来标记类和方法等优点5。控制软件选用Visual Studio 2008开发工具进行C#编程。1.4 软件功能设计控制软件需要实现的主要功能6如下:1)数据采集实现数据的采集控制,并且将采集的数据从示波器的存储器中读取到计算机的内存中,以便进行显示、分析、处理。2)示波器设置设置示波器的触发模式,触发通道,触发边沿,耦合模式,采集模式等操作,以便能采集到合适的波形数据。3)波形显示在波形显示区中将当前所采集的波形数据绘制成波形。4)数据保存以文件的方式将波形数据和相关参数保存起来以便后期进行分析。2 软件实现2.1示波器的连接连接示波器是实现计算机程控的第一步。硬件上的连接需要通过以太网将计算机和示波器连接起来,并设置IP地址。软件上连接示波器需要C#程序在项目中添加对VISA COM 3.0 Type Library 和VISA COM 488.2 Formatted I/O 1.0的引用7,并在using语句中添加语句“using Ivi.Visa.Interop”,从而实现对VISA库的调用。接下来就可以创建和使用VISA COM I/O对象了,在程序中新建两个公共类,Ivi.Visa.Interop.ResourceManagerClass类rm和Ivi.Visa.Interop.FormattedIO488Class类ioobj,来实现对示波器资源的管理和通信。连接代码如下:ioobj.IO = (Ivi.Visa.Interop.IMessage)rm.Open(TCPIP0:+str_ip+:inst0:INSTR, Ivi.Visa.Interop.AccessMode.NO_LOCK, 0, );代码中str_ip是指示波器的IP地址。可以发送SCPI指令“*IDN?”进行查询,返回仪器的生产商、型号、编号等信息。如果返回结果正确则说明连接成功,进行下一步操作;反之则需要检查连接状况,如示波器或计算机IP的设置情况。2.2示波器设置和波形数据采集连接建立之后,便可以对示波器进行设置和操作,获取波形数据。示波器的设置主要有触发设置、采集设置、水平设置、垂直设置等,可以分别查阅相应的SCPI指令。读取波形数据的关键代码如下:ioobj.WriteString(:RUN, true); /采集数据ioobj.WriteString(:WAV:FORM ASCii, true); /设置数据格式为ASCIIioobj.WriteString(:WAV:DATA?, true); /读取数据object wavedata /数据保存在对象数组wavedata中=(object)ioobj.ReadList(Ivi.Visa.Interop.IEEEASCIIType.ASCIIType_Any, ,); 某些型号的示波器返回的波形数据数组wavedata的第一个数据前面会有一段标识码,可以将第一个数据转换成string类型,用Substring的方法除去前面的标识码,再进行数据类型转换从而获得第一个波形数据。2.3波形显示和测量波形显示和测量是控制软件开发的难点和重点。波形显示可以在C#中使用GDI+绘图8,将数据点“画”在计算机的显示屏上,从而实现显示的效果。绘图过程首先画出示波器的坐标轴和显示范围,然后进行波形数据到坐标轴位置的转换,最后使用GDI+的画笔工具Pen绘制波形。波形数据到坐标轴位置的转换需要先发送SCPI指令查询当前通道的垂直刻度、垂直偏移量、数据点数等参数,然后根据这些参数计算波形数据在屏幕上的坐标值。如果计算出的某些点坐标超出显示范围,则需要对其进行截取,将超出的坐标点值直接置为坐标轴的最大值。波形显示在计算机屏幕上后还要对其进行刷新。在程序中添加一个timer控件,设置间隔时间为100ms,每隔100ms读取一次波形数据,清除原图像,绘制新波形,实现波形的刷新。波形刷新时会出现显示闪烁问题,这是因为绘制波形一般采用“描点法”即绘制相邻两点的直线来形成整个波形,而刷新时这些直线不是同时出现在屏幕上,绘制的时间是有差别的,当波形数据越多时闪烁现象就越严重。解决的办法是采用双缓存技术9,即在内存中开辟一块虚拟画布,将需要绘制的图形先画在这块虚拟画布上,再一次性将整块画布画到真正的屏幕上。C#中负责分配和管理图形缓冲区的类是 BufferedGraphicsContext 类,可以调用 Current检索对图形缓存区的引用。波形显示后要进行必要的测量,以确定采集的波形是否是需要的波形。常用的测量有频率测量和峰峰值测量,可以直接发送SCPI指令::MEASure:FREQuency? 和:MEASure:VPP 查询测量结果,是指当前需要测量的数据来源。在测量脉冲信号的脉宽、上升时间等参数时则需要添加光标进行测量,应用GDI+的动态绘图技术10,绘制、调整光标线,实现光标测量功能。实现动态绘图功能需要添加鼠标的按下( MouseDown) 、移动( MouseMove) 和松开( MouseUp) 事件。利用动态绘图实现光标测量的难点是当鼠标在绘制、调整光标线时如何只对当前光标线进行操作,而不产生新的光标线。为解决这个问题可以在MouseMove事件中加上一条清除语句,移动光标线时先清除原来的光标线,但是这样产生的问题是会擦除波形。解决这一难点的思路是引进“图层”技术。在此建立三个图层,分别是波形层、光标层和屏幕层。波形层存储动态绘图后的图形;光标层用来临时存储每次绘制、移动、清除光标的图形;屏幕层用来存储波形层和光标层“融合”后的图形,并显示在计算机屏幕上,最后把图形“传递”给波形层。各图层的关系如图2所示。图2 动态绘图图层图2的箭头表示图层中图像的来源。在C#中,各图层使用GDI+提供的Bitmap对象来实现。在绘图过程中,光标层和屏幕层的内容在MouseDown和MouseMove事件中完成,波形层的内容在MouseUp事件中完成。主要实现过程如下:1)给程序添加一个pictureBox控件,用来显示示波器的屏幕,属性中设置其宽度为w,高度为h。创建3个全局Bitmap对象,用于实现对应的图层,宽度和高度也均为w和h。public Bitmap screen = new Bitmap(w,h); /图形层public Bitmap cursor = new Bitmap(w,h); /光标层public Bitmap wave = new Bitmap(w,h); /波形层2)控制示波器采集波形数据,绘制波形图形,将其存入wave图层,并在屏幕上显示。Graphics g = Graphics.FromImage(wave);PaintWave(g,wavedata); /绘制波形函数,wavedata指波形数据pictureBox.Image = wave;3)在MouseDown和MouseMove事件中添加绘制光标代码,与波形层融合,形成screen图层,并在屏幕上显示。Graphics g = Graphics.FromImage(cursor);PaintCursor(g,X1,X1) ; /绘制光标函数,X1指光标类型,X1表示光标位置screen = BlendBitmap(wave, cursor); /图像融合函数pictureBox.Image = screen;4)在MouseUp事件中将融合后的图形存入波形图层中。wave=screen;2.4数据保存采集的波形数据需要保存的内容主要包括波形、波形点的数值和示波器的参数设置等内容。对波形的保存可以采用“硬拷贝”的方式,直接将示波器的屏幕图像读取并保存到计算机;对波形点数值和示波器参数的保存可以用saveFileDialog控件以txt文档、Excel表格的方式存到计算机中,也可以使用ADO.NET存入数据库。3 试验结果为了验证软件是否满足要求,需运行软件进行试验。用信号源发送一个频率为2MHz,脉冲宽度为250ns的脉冲信号,然后控制示波器进行采集和测量,以png格式硬拷贝波形图,并将数据和参数设置以txt的形式保存在计算机中。控制软件操作界面如图3所示:图3 操作界面从图3可以看出,用控制软件采集的信号频率为2MHz,脉冲宽度为248ns,测量结果与脉冲信号的参数基本一致。 4 结束语本文利基于C#语言利用Visual Studio 2008开发工具,开发设计了数字存储示波器的控制软件,通过调用VISA函数和发送SCPI指令,实现了远程控制示波器采集数据、设置参数、显示波形、存储数据等功能,并能对采集的数据自动保存,以便利用其它工具进行深入分析。利用双缓冲技术解决了波形显示时产生闪烁现象的问题,利用GDI+动态绘图技术和“图层”技术实现波形的光标测量功能。控制界面良好,操作简单;当接口是GPIB、USB等其它接口时,只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南通市中石化2025秋招笔试模拟题含答案行测综合英语
- 天津市中储粮2025秋招面试典型题目及答案
- 国家能源武汉市2025秋招化学工程类面试追问及参考回答
- 国家能源铜陵市2025秋招机械工程类面试追问及参考回答
- 安阳市中石化2025秋招笔试提升练习题含答案
- 丽江市中石化2025秋招笔试模拟题含答案新材料与新能源岗
- 株洲市中石化2025秋招面试半结构化模拟题及答案电气仪控技术岗
- 许昌市中储粮2025秋招购销统计岗高频笔试题库含答案
- 大唐电力鸡西市2025秋招半结构化面试模拟30问及答案
- 武威市中石油2025秋招心理测评常考题型与答题技巧
- 隧道施工应急预案方案
- 植物鉴赏课件
- 安徽省华师联盟2026届高三上学期9月开学质量检测物理试卷(含答案)
- 肿瘤热疗中国专家共识
- 2025年甘肃省药品检查员资格考试(药械化流通)历年参考题库含答案详解(5套)
- 2025年泸州职业技术学院招聘考试笔试试卷【附答案】
- 自来水企业内部管理规范
- 2025新热处理工程师考试试卷及答案
- 硬笔书法全册教案共20课时
- 工会兼职补助管理办法
- 纸箱不合格品管理制度
评论
0/150
提交评论