示波器远程控制方法在瑞萨集成开发环境CubeSuite+中的应用
摘要:在瑞萨单片机集成开发环境CubeSuite+下,使用IronPython语言在Python Console平台中控制横河DL9000系列示波器的参数设置,并接收测试波形,从而简化单片机功能验证操作,为单片机功能验证的自动化实施提供了保证。
前言
在单片机功能验证过程中,需要利用示波器采集验证结果的波形,而示波器参数的设置一般是通过手动设置前端面板按键完成。功能验证的结果需要手动保存到U盘中,由工程师再拷贝到电脑上。图1为横河DL9000系列示波器的前面板示意图,从图中可以看出,示波器按键较多,每一个验证项目都需要设置通道、触发条件等,手动设置的步骤多,变换验证的功能项目时,需要重新对示波器进行设置。在大量的单片机功能验证工作中,这样的常规操作方法不仅效率低,操作复杂,而且误操作的发生率也比较高。
本文介绍的示波器远程控制方法是基于瑞萨单片机RL78族,在其集成开发环境CubeSuite+的Python Console平台上使用IronPython脚本语言编写程序代替人工手动操作,完成示波器的远程控制操作,实现了示波器的参数设置和波形保存的自动化,使得示波器的操作更加简化,自动化程度得到了显著提高。
1 系统构建
瑞萨单片机的集成开发环境CubeSuite+,为用户提供了高度友好的开发环境,极大地缩短了构建时间,并且具有多种图形调试功能。各种扩展功能和用户支持功能可以保证为所有用户提供可靠的环境[1]。
IronPython是流行的程序设计语言Python在.NET framework中的实现。IronPython已经很好地集成到.NET framework中,通过使用Python的导入手段,就能够访问.NET程序库和类。在使用.NET framework时,需要导入clr模块,该模块含有用来为程序集添加索引之类的函数。一旦为程序集添加了引用,就能够从该程序集的命名空间中导入类[2]。
CubeSuite+提供了Python Console平台,Python Console采用的是IronPython语言。除了可以使用IronPython语言支持的函数和控制语句之外,还可以使用CubeSuite+内置的Python函数来控制CubeSuite+。
数字示波器DL9000系列是横河电机推出的一代高性价比示波器,它是为满足高速信号的测量需求而研发设计的。DL9000系列数字示波器具有1.5GHz模拟带宽,最高10GS/s实时采样频率,可满足手机、液晶电视、数字家电、汽车电子等众多领域的研发和测试[3]。另外,DL9000系列示波器还为用户提供了丰富的DL系列函数库[4],包括基于.net的动态链接库接口函数,可对示波器进行与前端面板按键操作相同的设定,实现PC机对示波器的集中控制,可完成通道配置、触发条件、捕获波形命名保存等操作。
2 横河示波器的远程控制实现
横河示波器提供了3种与PC机通信的方式:USB接口方式、GPIB或以太网接口,如图4所示。三种接口方式均包含接收功能和发送功能。接收功能:可进行与前端面板按键操作相同的设定,接收被测和被处理数据的输出请求、设定面板参数及错误码;发送功能:输出被测和被处理的数据,输出面板设置参数和状态字节,输出发生的错误代码。
从通用性考虑,本应用选用了USB接口方式,使用一端为B型口的USB线与示波器相连。首先为PC机安装YOKOGAWA的TMC(Text and Measurement Class)驱动。
驱动下载网址http://www.yokogawa.com/tm/tm-softdownload.htm
然后在示波器上选择通信接口:
按SYSTEM键→按 Remote Control 键→按 USB 键;
• 在上述菜单中选择“TMC”,可实现通过USB端口,使用通信命令来远程控制DL9000;
• 重启DL9000以激活设置。关闭电源后至少等待10秒钟,然后打开电源;
IronPython调用横河示波器提供的动态链接库TmctlAPINet.dll,根据DL9000系列示波器通讯接口用户手册提供的各种命令函数进行通信。PC机与示波器之间通过消息来交换信息。PC机发送给示波器的消息称为编程消息,示波器返回给PC机的消息称为响应消息。如果编程消息包含一个需要响应的信息单元,那么示波器在接收到编程消息后返回响应消息。编程消息是由一个或多个编程消息单元组成的,每个单元对应一个命令,示波器顺序执行收到的命令。示波器通讯接口用户手册提供了丰富的命令函数,如初始化并打开与指定设备的连接的Initialize函数,向设备发送消息的Send函数,从设备接收响应消息的Receive函数等,使得对示波器的远程控制得以方便地实现[5]。
IronPython对示波器进行远程控制的流程如图5所示。 以下为IronPython远程控制横河示波器的程序示例:
#Add Class
import clr
clr.AddReferenceToFile("TmctlAPINet.dll")
from TmctlAPINet import *
#New Object
h=TMCTL()
ykosid =0
#Initializes and opens a connection to the specified devices:DL9040 serial number=91FC36537
ret=h.Initialize(h.TM_CTL_USBTMC,"91FC36537", ykosid)
#Sets the terminator for sending or receiving a message to LF
ret=h.SetTerm(ykosid,2,1)
#sets the timeout time for communications.
ret=h.SetTimeout(ykosid,100)
#Sets remote on
ret=h.Send(ykosid, "COMMUNICATE:REMOTE ON")
#Sets the display format
ret=h.Send(ykosid,"DISPLAY:FORMAT QUAD")
#Sets the graticule
ret=h.Send(ykosid, "DISPLAY:GRATICULE GRID")
#Turns on the cursor
ret=h.Send(ykosid,"CURSOR:DISPLAY 1")
#Turns on the display of the channel
ret=h.Send(ykosid," CHANNEL1: DISPLAY ON")
#Sets the vertical position of the channel
ret=h.Send(ykosid," CHANNEL4: POSITION -2")
#Turns ON the waveform label display of the channel
ret=h.Send(ykosid,"CHANNEL4:LABEL:MODE 1")
#Sets the waveform label of channel
ret=h.Send(ykosid,"CHANNEL4:LABEL:DEFINE 'TRDIOD0'")
#Sets the vertical sensitivity (V/div) of the channel
ret=h.Send(ykosid,"CHANNEL4:Vdiv 2")
#Sets the T/div value
ret=h.Send(ykosid,"TIMEBASE:Tdiv 1.000E-03")
#Sets the file output image format
ret=yktmc.Send(ykosid," HCOPY:FILE:FORMAT PNG")
# Queries the screen image data
ret=yktmc.Send(ykosid," IMAGe:SEND?")
# Receives the header portion of the Block Data sent from the device, and
# returns the number of bytes of the data after the header.
ret,c=yktmc.ReceiveBlockHeader(ykosid, 0)
temp=0
ImageName1='d:/'+ImageName+'.png'
output = open(ImageName1,'wb')
for i in range(c+1) :
# Receives the data portion of the Block Data sent from a device into an Short array.
ret,temp,rlen,rend=yktmc.ReceiveBlockData(ykosid,temp,1,0,0)
output.write(chr(temp))
output.close()
瑞萨 示波器 以太网 CubeSuite+ 单片机 201411 相关文章:
- 用数字荧光示波器对开关电源功率损耗进行精确分析(11-04)
- 数字荧光示波器结构融合模拟示波器和数字示波器的优势(03-03)
- 秘密武器助你从容应对噪声检测难题(03-29)
- 使用采样示波器对PCB进行串扰分析(11-06)
- 具有可调触发灵敏度的示波器可有效提高电路检测质量(01-11)
- 在手持式示波表上捕捉间歇性信号(01-25)