热度 33
2018-8-30 16:15
4109 次阅读|
0 个评论
带图完整文章:http://www.hongketest.com/portal.php?mod=view&aid=57 本文以Active Technologies公司(简称AT)的PG 1000系列脉冲发生器为例,讲述了在进行SCPI控制仪器前,如何使用NI MAX进行系统配置。 1. 概要 可以连接仪器至用户的网络中,实现打印、文件共享、互联网访问等其他功能。请联系贵公司的网络管理员,并使用标准 Windows 在用户的网络中配置仪器。 仪器是通过 VXI-11 (LAN) 协议 进行控制的,用户可以利用 SCPI 命令远程控制仪器,请参考《 Pulse Rider PG-1000 programmer manual 》 了解详细的 SCPI 命令语法、语句。 2. 工具 / 准备 2.1 PG-1000 系列 SDK 1. 用户在 www.activetechnologies.it 网站注册账户后,登录网站并“ Register ”仪器。 2. 点击“ Support ”—“ Client Area ”,访问“ Users Products ”界面。 3. 点击 AT-PG1072 或 AT-PG1074 链接,访问下载界面。点击 SDK-AT-PULSE-GENERATOR 安装包并下载。 SDK 内包括: AT Instrument Communicator 安装程序 (用途,参考下节“配置系统”的第 9 步) C++ 例程 C# 例程 LabVIEW 例程 2.2 NI VISA 在 Client-PC (即 Remote PC )中 下载 并安装 NI VISA 。 VI SA 为硬件 与开发环境(比如, Visual Studio .NET 、 LabVIEW 、 LabWindows/CVI 、 Measurement Studio for Microsoft Visual Studio 、 MatLab 等)提供编程接口。 NI VISA 是 National Instruments 公司提供的 VISA I/O 标准。 NI VISA 包括软件库、交互式工具(例如, NI I/O Trace 与 VISA 交互式控制)、配置程序等。 2.3 NI NAX ( Measurement & Automation Explorer ) 在 Client-PC (即 Remote PC )中 下载 并安装 NI MAX 软件。 2.4 PG-1000 系列软件 打开 PG-1000 系列仪器中自带的控制软件,找到“ Remote/Local ”界面中的 VXI-11 ( LAN 协议) Server 。默认情况下, VXI-11 Server 是开启的,意味着 PG1000 系列仪器可以接收来自 Client-PC 的 SCPI 命令。 当 PG-1000 系列仪器接收 SCPI 命令时, PG-1000 系列软件界面会根据 SCPI 命令做出相应的变化(例如,参数设置等)。 注意: 不能在本地 PC (即 PG-1000 系列仪器本身中的 PC 系统)中通过 SCPI 命令控制 PG-1000 系列仪器。 若 VXI-11 Server 被关闭, SCPI 命令通信将会失败。 3. 配置系统(使用 NI MAX ) 使用 NI MAX 进行如下配置: 1. 使用 LAN 线缆连接仪器与 Client-PC 。 2. 在 Client-PC 中安装 NI VISA 与 NI MAX 。 3. 打开 Client-PC 中的 NI MAX 。点击“ Add Network Device ”——“ VISA TCP/IP Resource… ”。 4. 选择“ Auto-detect of LAN Instrument ”,并点击“ Next ”。 5. 面板将会显示在 LAN 网络中搜索到的仪器,选择 PG-1000 系列仪器,并点击“ Next ”。 6. 输入“ Alias ”(此步非必须,可省略),并点击“ Next ”。 7. 点击“ Finish ”。 8. PG-1000 仪器资源将会在“ Network Devices ”列表中显示。 9. 现在,可以使用 NI Visa Test Panel 或 AT Instrument Communicator (软件的获取下载,参考“ PG-1000 系列 SDK ”小节的第 3 步;软件的使用,参考下节“使用 AT Instrument Communicator 调试系统”)发送 SCPI 命令至 PG-1000 。 4. 调试系统(使用 AT Instrument Communicator ) VXI-11 ( LAN 协议) Server 可以为在同一 LAN 网络下的 PG-1000 仪器与 Client-PC 提供软件接口。 AT Instrument Communicator 软件 需安装在 Client-PC 中,且 Client-PC 中需安装 NI VISA 。 通过以下步骤,操控 Client-PC 中 AT Instrument Communicator 软件实现对 PG-1000 仪器的控制: 1. 在 Client-PC 中安装 AT Instrument Communicator 软件。 2. 在“ Device ”列表中选择 PG-1000 系列仪器。 3. 点击“ Connect ”按钮。 4. 若连接成功, “ Command ” 复选框内的“ Write ”、“ Read ”等按钮将会可选(非灰色) 5. 在“ Command ”文本框内输入 *IDN? 并点击“ Write ”按钮。 6. 点击“ Query ”按钮。 7. 在“ Event Logger ”列表中, PG-1000 系列仪器会显示返回值,例如: ACTIVE TECHNOLOGIES, AT-PULSE-RIDER PG1072 00000001,SCPI 99.0, SV 1.0.0 where 00000001 is the serialnumber, SCPI 99.0 is the SCPI command version and SV 1.0.0 is the software version. 8. TXT 命令脚本 ( script )文件包括一系列 SCPI 命令(每行一条命令),用户可以发送 TXT 命令脚本文件。点击“ File ”—“ Open ”打开加载 TXT 命令脚本文件对话框。 9. 参考《 Pulse Rider PG-1000 programmer manual 》了解详细的 SCPI 命令语法、语句。 5. 例程 / 范例 PG-1000 系列 SDK 中包含由很多种语言编写的例程,例如 LabVIEW 、 Microsoft Visual C++ 与 Microsoft C# .NE 语言。 例程可以在安装了 NI VISA 并兼容 Microsoft Windows® 的 PC 上运行。 NI VISA 是 National Instruments 公司提供的 VISA I/O 标准。 NI VISA 包括软件库、交互式工具(例如, NI I/O Trace 与 VISA 交互式控制)、配置程序等。 在软件中使用 NI VISA 编写的仪器驱动,可以处理软件应用程序与硬件仪器之间的通信。 可 下载 并安装 NI VISA 。 例程假设 系统已经识别 PG-1000 系列仪器 的 资源名称( resource name ),即 IP 地址或主机名称,可参考前文“配置系统”小节了解资源名称( resource name )。 5.1 LabVI EW LabVIEW 例程要求最低使用 LabView 2013 64 bit 版本,可在 …\LabView 2013 Examples\AT-PULSE-RIDER-PG1000 Series 文件夹内找到 LabVIEW 工程。 LabVIEW 工程中包含一些 VI 用于控制仪器的基础特性,还包含有三个例程。 双击 GenerateSinglePulse.vi ,本例程可以连续模式生成单脉冲。在运行 VI 之前,需要选择“ VISA resource name ”。 用户可以更改脉宽、延时、高电平、低电平和其他输出参数。 运行 VI 开始生成输出脉冲,点击“ Stop ”按钮控件停止 PG-1000 系列脉冲发生器。 5.2 Microsoft C# 可以在 …\VS2015 Examples\PulseRiderCSharp 文件夹内找到 C++ 例程,需要安装 Microsoft Visual Studio 2015 打开例程。 用户需要编译并运行例程;在 Form 中需要输入“ Instrument Address ”并点击“ Connect ”按钮建立连接。 若成功连接,仪器会在“ Server Answer ”文本框内显示 *IDN ?命令的返回值。 点击“ Generate Pulse ”按钮发送 SCPI 命令至 PG-1000 系列仪器,仪器将会以连续模式生成输出单脉冲。 private void btnGeneratePulse_Click( object sender, EventArgs e) { // Reset to default tbAnswer.Text = vs.SendTo(sInstrumentAddress, "*RST" ); // Set the channel parameters tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:VOLT:HIGH 1.5" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:VOLT:LOW -1.5" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce2:VOLT:HIGH 2" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce2:VOLT:LOW -2" ); // Set the pulse parameters tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:PULSe1:WIDth 50 ns" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:PULSe1:DELay 0" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce2:PULSe1:WIDth 50 ns" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOUrce2:PULSe1:DELay 50 ns" ); // Set the pulse mode tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut1:PULSe:MODe SINgle" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut2:PULSe:MODe SINgle" ); // Turn On the channels tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut1 ON" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut2 ON" ); // Set the trigger mode and arm the instrument tbAnswer.Text = vs.SendTo(sInstrumentAddress, "TRIGger:MODE CONTinuous" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "PULSEGENControl:START" ); // Send the trigger tbAnswer.Text = vs.SendTo(sInstrumentAddress, "*TRG" ); } 点击“ Load Script… ”按钮可加载 SCPI 命令 TXT 脚本文件;在工程目录文件夹内有三个脚本文件: GenerateSinglePulse.txt 、 GenerateMultiplePulse.txt 、 GeneratePulseTriggerIN.txt 。 5.3 Microsoft C++ 可以在 …\ VS2015 Examples\PulseRiderMSVC\TCPIP 文件夹内找到 C++ 例程,例程是使用 Microsoft® Visual C++ 语言编写的。 /*********************************************************************/ /* This example demonstrates opening a simple TCPIP connection and */ /* implements a single pulse generation in Continuous Mode. */ /* */ /* The general flow of the code is */ /* Open Resource Manager */ /* Open a session to the TCP/IP site at NI */ /* Perform write/read, and check properties */ /* Close all VISA Sessions */ /*********************************************************************/ #include "visa.h" #include #include #include static char outputBuffer ; static ViSession defaultRM, instr; static ViStatus status; static ViUInt32 count; static char acBuffer = "" ; static unsigned int u32Timeout = 20000; //timeout value in milliseconds static const char acInstrument = 0; if 0) { printf( "The server response is:\n %s\n\n" ,outputBuffer); } return status; } int main() { int iIndex = 0; FILE* pFile = NULL; ViFindList objFindList; /* First we will need to open the default resource manager. */ status = viOpenDefaultRM (&defaultRM); if (status < VI_SUCCESS) { printf( "Could not open a session to the VISA Resource Manager!\n" ); exit (EXIT_FAILURE); } status = viFindRsrc (defaultRM, "?*INSTR" , &objFindList, &count, outputBuffer); if (status < VI_SUCCESS) { viStatusDesc(instr, status, outputBuffer); printf( "viFindRsrc failed with error code %x - %s\n" , status, outputBuffer); exit (EXIT_FAILURE); } printf( "viFindRsrc - %s\n" , outputBuffer); /* Now we will open a session via TCP/IP */ status = viOpen (defaultRM, (ViRsrc) acInstrument, VI_NULL, u32Timeout, &instr); if (status < VI_SUCCESS) { printf ( "An error occurred opening the session to %s\n" , acInstrument); viClose(defaultRM); exit (EXIT_FAILURE); } // Set the timeout attribute viSetAttribute (instr, VI_ATTR_TMO_VALUE, u32Timeout); //Identify and reset the instrument VisaWrite( "*IDN?" ); VisaWrite( "*RST" ); //Set the Channel Parameters VisaWrite( "SOURce1:PERiod 600 ns" ); VisaWrite( "SOURce2:PERiod 600 ns" ); VisaWrite( "SOURce1:VOLT:HIGH 1" ); VisaWrite( "SOURce1:VOLT:LOW -1" ); VisaWrite( "SOURce2:VOLT:HIGH 0.5" ); VisaWrite( "SOURce2:VOLT:LOW -0.5" ); // Set the Pulse Parameters VisaWrite( "SOURce1:PULSe1:WIDth 100 ns" ); VisaWrite( "SOURce2:PULSe1:WIDth 20 ns" ); // Turn On the Outputs VisaWrite( "OUTPut1 ON" ); VisaWrite( "OUTPut2 ON" ); // Set the Pulse Mode VisaWrite( "SOURce1:PULSe:MODE SINGLE" ); // Set the Trigger Mode VisaWrite( "TRIGger:MODE CONTinuous" ); // Arm the instrument VisaWrite( "PULSEGENControl:START" ); // Start the generation VisaWrite( "*TRG" ); status = viClose (instr); status = viClose (defaultRM); printf ( "\nHit enter to continue." ); fflush(stdin); getchar(); return 0; }