Oscilloscope Analysis and Connectivity Made Easy

Add to my manuals
346 Pages

advertisement

Oscilloscope Analysis and Connectivity Made Easy | Manualzz

OSCILLOSCOPE

ANALYSIS AND

CONNECTIVITY

MADE EASY

Adding Live Oscilloscope Data to Popular Analysis Software

Includes Excel , Visual Basic, M

ATLAB

and LabVIEW Examples

Copyright

 Tektronix Inc. All rights reserved. Licensed software products are owned by Tektronix or its suppliers and are protected by United States copyright laws and international treaty provisions. LabVIEW and

LabWindows™/CVI are trademarks of National Instruments Corporation.

Mathcad is a registered trademark of MathSoft, Inc. MATLAB is a registered trademark of The MathWorks, Inc. Microsoft and Excel are trademarks and

Windows is a registered trademark of Microsoft Corporation.

Tektronix, Inc., P.O. Box 500, Beaverton, OR 97077

Tektronix and Tek are registered trademarks of Tektronix, Inc.

Note:

Software on the CD is provided AS IS with no warranties of any kind, specifically excluding WARRANTIES OF MERCHANTABILITY

AND FITNESS FOR A PARTICULAR PURPOSE. Tektronix, Inc. assumes no liability of any kind for your use of this software.

Table of Contents

PREFACE........................................................................................................................................XI

What This Book is About.................................................................................................................. xi

Who Should Read This Book........................................................................................................... xi

How This Book is Organized............................................................................................................ xi

Document Conventions....................................................................................................................xii

CHAPTER 1: CONNECTIVITY BUILDING BLOCKS ..................................................................... 1

Connectivity Made Easier ................................................................................................................. 1

Built-in Connectivity Features ........................................................................................................... 1

New Connectivity Building Blocks..................................................................................................... 3

TekVISA

A Standard Way to Connect....................................................................................... 4

M

ATLAB

’s Instrument Control Toolbox.......................................................................................... 9

PART 1: EXCEL AND VISUAL BASIC .......................................................................................... 11

CHAPTER 2: THE TEKEXCEL TOOLBAR................................................................................... 13

Introduction ..................................................................................................................................... 13

Toolbar Prerequisites.................................................................................................................. 13

Toolbar Features......................................................................................................................... 14

Adding the TekExcel Toolbar to Excel ............................................................................................ 14

Connecting to Oscilloscopes........................................................................................................... 15

Saving and Restoring Scope Settings............................................................................................. 16

Save Settings from the Scope..................................................................................................... 17

Assign Stored Settings to the Scope........................................................................................... 20

Capturing and Graphing Waveforms............................................................................................... 21

Clearing the Active Sheet................................................................................................................ 24

Capturing and Graphing Measurements......................................................................................... 24

Capture Single Measurement(s) ................................................................................................. 24

Capture and Graph Repeated Measurement(s).......................................................................... 27

Capturing Triggered Waveforms..................................................................................................... 31

Getting Help with the TekExcel Toolbar.......................................................................................... 34

TekExcel Toolbar Source Code ...................................................................................................... 35

Chapter 2 Review ........................................................................................................................... 35

CHAPTER 3: UNDERSTANDING THE TEKVISA ACTIVEX CONTROL .................................... 37

Introduction ..................................................................................................................................... 37

Background Information.................................................................................................................. 37

Terminology .................................................................................................................................... 38

Automated Acquisition .................................................................................................................... 38

Native GPIB Commands and Queries ........................................................................................ 39 i

TekVISA ActiveX Control Methods, Properties, and Events .......................................................39

CHAPTER 4. A SIMPLE PROGRAM TO GET WAVEFORMS ......................................................41

Introduction .....................................................................................................................................41

GPIB Commands for Waveform Acquisition....................................................................................41

Waveform Data ...........................................................................................................................41

Waveform Preamble....................................................................................................................43

The TekVISA ActiveX Control and Waveform Acquisition...............................................................43

The GetWaveform Method..........................................................................................................43

Other Methods of Waveform Acquisition.....................................................................................43

Getting Started ................................................................................................................................44

What You Need to Get Started....................................................................................................44

What You Will Do ........................................................................................................................45

What You Will Learn....................................................................................................................47

The Get Waveform Example in Excel VBA .....................................................................................48

Building the Form ........................................................................................................................48

Getting Help ................................................................................................................................53

Changing Properties in the Properties Window...........................................................................54

Using the Object Browser (F2)....................................................................................................57

Coding the Event Procedures .....................................................................................................60

Running the GetWaveForm Program..........................................................................................69

Running the Program with the Jitter Example .................................................................................71

Using VB Instead of VBA ................................................................................................................74

Chapter 4 Review............................................................................................................................76

CHAPTER 5. A MORE COMPLEX FOUR-PART PROGRAM .......................................................77

Introduction .....................................................................................................................................77

What You Need to Get Started....................................................................................................77

What You Will Do ........................................................................................................................78

What You Will Learn....................................................................................................................80

The TekVISA Test Run Example in Excel VBA...............................................................................81

Building the Form ........................................................................................................................81

Changing Properties in the Properties Window...........................................................................81

The Current Devices List Box......................................................................................................83

The Measurement Commands Frame.........................................................................................84

The Waveform Data Frame.........................................................................................................87

The Send GPIB Commands Frame ............................................................................................93

Running the TekVISA Test Run Program....................................................................................95

Using VB Instead of VBA ................................................................................................................97

Chapter 5 Review............................................................................................................................98

CHAPTER 6: A MEASUREMENT CHARTING EXAMPLE...........................................................99

Introduction .....................................................................................................................................99

What You Need to Get Started....................................................................................................99

ii

What You Will Do...................................................................................................................... 100

What You Will Learn ................................................................................................................. 103

The Chart Measurements Example in Excel VBA......................................................................... 104

Building the Form...................................................................................................................... 104

Changing Properties in the Properties Window ........................................................................ 104

Initialization ............................................................................................................................... 107

Choosing Measurements .......................................................................................................... 109

Displaying Results .................................................................................................................... 116

Running the Chart Measurements Program ............................................................................. 120

Using VB Instead of VBA .............................................................................................................. 121

Chapter 6 Review ......................................................................................................................... 124

CHAPTER 7: A TRIGGERED WAVEFORM CAPTURE EXAMPLE........................................... 127

Introduction ................................................................................................................................... 127

Getting Started.............................................................................................................................. 127

What You Need to Get Started ................................................................................................. 127

What You Will Do...................................................................................................................... 128

What You Will Learn ................................................................................................................. 130

The Triggered Waveform Capture Example in VB........................................................................ 130

Building the Form...................................................................................................................... 130

Getting Help.............................................................................................................................. 141

Reviewing the Code.................................................................................................................. 143

Running the Triggered Waveform Capture Example ................................................................ 158

Using VBA Instead of VB .............................................................................................................. 162

Chapter 7 Review ......................................................................................................................... 163

PART 2: MATLAB AND LABWINDOWS/CVI AND LABVIEW................................................... 165

CHAPTER 8: LIVE UPDATES TO MATLAB USING ICT ........................................................... 167

Introduction ................................................................................................................................... 167

What You Need to Get Started ................................................................................................. 167

What You Will Do...................................................................................................................... 168

What You Will Learn ................................................................................................................. 168

The Instrument Control Toolbox.................................................................................................... 168

Configuring VISA Resources .................................................................................................... 169

Communicating with VISA-GPIB Objects.................................................................................. 169

Using the Instrument Control ASCII Communication Tool ........................................................ 170

Cleaning up Instrument Objects during Debugging .................................................................. 172

The Jitter Example with MATLAB ICT Functions .......................................................................... 173

Creating the jitter2 Function...................................................................................................... 174

Testing Automatic Waveform Acquisition.................................................................................. 182

Improved Jitter Example with a GUI Interface............................................................................... 184

Adding GUI Components to the Solution .................................................................................. 184

Performing an Interim Test........................................................................................................ 189 iii

Modifying Auto-Generated Functions........................................................................................189

Testing the Improved Solution...................................................................................................204

Chapter 8 Review..........................................................................................................................206

CHAPTER 9: LABWINDOWS/CVI AND LABVIEW ....................................................................207

Introduction ...................................................................................................................................207

Tektronix Plug-n-Play Drivers........................................................................................................207

Overview of LabWindows/CVI.......................................................................................................208

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI..........................................................209

Loading the Driver.....................................................................................................................209

Building the Interface.................................................................................................................213

Getting Help ..............................................................................................................................216

Modifying Auto-Generated Functions........................................................................................217

Running Your Program..............................................................................................................226

Overview of LabVIEW ...................................................................................................................227

Using Tektronix Plug-n-Play Drivers with LabVIEW......................................................................228

Loading the Driver.....................................................................................................................228

Viewing Driver Functions...........................................................................................................230

Getting Help ..............................................................................................................................231

Creating a Quick Demo Program ..............................................................................................234

Running Your Program..............................................................................................................243

Using VISA Operations with LabVIEW..........................................................................................244

Creating a Timed Measurement Program .................................................................................244

Running Your Program..............................................................................................................252

Chapter 9 Review..........................................................................................................................253

APPENDIX A: COMMAND AND CONTROL REFERENCE.........................................................255

Introduction ...................................................................................................................................255

Native GPIB Commands and Queries...........................................................................................255

TekVISA Active X Control Methods, Properties, and Events ........................................................263

MATLAB Instrument Control Toolbox Functions ...........................................................................281

PnP Driver Functions ....................................................................................................................287

VISA Operations............................................................................................................................288

APPENDIX B: FAST LAN ACCESS TO YOUR OSCILLOSCOPE..............................................291

Introduction ...................................................................................................................................291

VXI-11 and LAN Connectivity for Oscilloscopes............................................................................291

Benefits of LAN Access.................................................................................................................292

Deployment Considerations ..........................................................................................................293

VXI-11 LAN Server Installation and Configuration ........................................................................293

VXI-11 LAN Client Access Setup ..................................................................................................294

TekVISA Installation..................................................................................................................294

Application Examples....................................................................................................................299

Visual Basic Example................................................................................................................299

iv

M

ATLAB

Example...................................................................................................................... 299

LabWindows/CVI Example........................................................................................................ 299

LabVIEW Example.................................................................................................................... 300

C Program Example.................................................................................................................. 300

Programming Tips......................................................................................................................... 300

Timeout Settings....................................................................................................................... 300

Non-TekVISA VXI-11 Clients .................................................................................................... 301

VXI-11 Standard ........................................................................................................................... 301

APPENDIX C: OTHER VB EXAMPLES....................................................................................... 303

Introduction ................................................................................................................................... 303

Alternate Methods for Getting Waveform Data Using the TekVISA Control ................................. 303

Writing and Reading Binary/ASCII Waveform Example................................................................ 303

The User Interface .................................................................................................................... 305

How the Program Works........................................................................................................... 307

Code Listing.............................................................................................................................. 309

APPENDIX D: USING THE WAVEFORM GENERATOR ............................................................ 321

Introduction ................................................................................................................................... 321

To Generate a Live Waveform...................................................................................................... 321

Set up Your Display Mode ........................................................................................................ 321

Locate the Software and Examples for This Book .................................................................... 323

Connect the Cable .................................................................................................................... 323

Start Up the Waveform Generator ............................................................................................ 324

Set Up the Oscilloscope and Calibrate the Sound Card ........................................................... 325

Generate the Waveform............................................................................................................ 327

Copy and Paste the Waveform Data into Excel ........................................................................ 327

Export the Waveform into a File Appropriate for Excel ............................................................. 328

Import the Waveform into Excel................................................................................................ 328

INDEX........................................................................................................................................... 331

v

List of Figures

Figure 1: A Copy Setup box prepares waveform data for Excel ..... 2

Figure 2: TekVISA supports connectivity to programming environments ........................................................................... 5

Figure 3: Range of connections made possible by TekVISA components ............................................................................. 7

Figure 4: The path to LAN connectivity........................................... 8

Figure 5: Tektronix VXI Plug-n-Play Drivers integrate with popular test automation software such as LabVIEW ............... 9

Figure 6: The TekExcel Toolbar in Excel ...................................... 13

Figure 7: How TekVISA ActiveX Controls interface with

Excel VBA and VB................................................................. 43

Figure 8: The form you will design for the GetWaveform example ................................................................................. 44

Figure 9: The Get Waveform form at runtime ............................... 45

Figure 10: Excel Clock Jitter example........................................... 46

Figure 11: Get Waveform form before changing default properties............................................................................... 52

Figure 12: Using the VBA Help facility.......................................... 53

Figure 13: The redesigned form for Get Waveform ...................... 56

Figure 14: A object hierarchy from the Excel Object Model.......... 57

Figure 15: Using the Object Browser with Excel VBA................... 58

Figure 16: Related online help from the Object Browser .............. 59

Figure 17: The Clock Jitter example with the Get Waveform program added ...................................................................... 73

Figure 18: Visual Basic 6.0 version of Get Waveform program .... 74

Figure 19: The form you will design for the Test Run example..... 78

Figure 20: The Test Run form at runtime...................................... 79

Figure 21: TekVISA Test Run form before changing default captions and appearance of controls..................................... 81

Figure 22: The redesigned form for TekVISA Test Run................ 81

Figure 23: The Current Devices list box........................................ 82

Figure 24: The Measurement Commands frame .......................... 84

Figure 25: The Waveform Data frame .......................................... 88

Figure 26: The Send GPIB Commands frame .............................. 93

Figure 27: Visual Basic 6.0 version of the TekVISA Test Run program ................................................................................. 96

Figure 28: The form you will design for the Chart

Measurements example ...................................................... 100

Figure 29: The Chart Measurements form at runtime................. 101

Figure 30: Chart Measurements plotted results.......................... 102

Figure 31: Chart Measurements form before changing default captions and appearance of controls................................... 104

Figure 32: The redesigned form for Chart Measurements.......... 104 vi

Figure 33: How the Excel model incorporates charts ..................117

Figure 34: Visual Basic 6.0 version of Chart Measurement program................................................................................121

Figure 35: The form you will design for the Triggered

Waveform Capture example.................................................128

Figure 36: The Triggered Waveform Capture form at runtime.....129

Figure 37: The Settings tab at design time..................................133

Figure 38: The TDS7000 Series Measurements tab at design time.......................................................................................136

Figure 39: The TDS8000 Series Measurements tab at design time.......................................................................................137

Figure 40: The Data tab at design time .......................................139

Figure 41: Using the Object Browser with Visual Basic 6.0.........141

Figure 42: The form module and code module in separate

Code Windows of VB............................................................143

Figure 43: Triggered Waveform Capture example flow diagram .144

Figure 44: The VISA Configuration Utility....................................168

Figure 45: MATLAB’s Instrument Control Toolbox ASCII communication tool ..............................................................171

Figure 46: How commands and queries are funneled through

MATLAB functions................................................................173

Figure 47: The first screen of the jitter2 function in MATLAB ......181

Figure 48: The plotted graph solutions for jitter2 in the MATLAB

Figure Window .....................................................................182

Figure 49: Building a GUI using the MATLAB guide utility...........184

Figure 50: The MATLAB guide utility Property Inspector.............185

Figure 51: First page of completed jitter3 example in MATLAB...203

Figure 52: The plotted graph solutions for jitter3 in the MATLAB

Figure Window .....................................................................205

Figure 53: Plug-n-play Driver Help file for TDS/CSA8000 Series oscilloscopes........................................................................207

Figure 54: The Measurement Capture program interface at

LabWindows/CVI design time...............................................212

Figure 55: Adding controls to a LabWindows/CVI panel..............213

Figure 56: Dialog box for editing attributes of the Dial control in

LabWindows/CVI..................................................................213

Figure 57: Page from the LabWindows/CVI Help file ..................216

Figure 58: The LabWindows/CVI Code Window .........................218

Figure 59: The LabWindows/CVI program while executing.........226

Figure 60: Page from the LabVIEW Tutorial in the Help file ........232

Figure 61: Sample context help for a PnP Driver functon............233

Figure 62: The Front Panel for the LabVIEW example................246

Figure 63: The Block Diagram for the LabVIEW example ...........252

Figure 64: The LabVIEW program while executing .....................253

Figure 65: LAN connectivity from PC applications to Tektronix oscilloscope..........................................................................292

vii

Figure 66: VISA Configuration Window ...................................... 296

Figure 67: TekVISA Remote Host dialog box ............................. 298

Figure 68: Sample VISA program for LAN-based oscilloscope access ................................................................................. 300

Figure 69: Design-time form for the Writing and Reading

Binary/ASCII Waveform example ........................................ 305

Figure 70: Runtime form for the Writing and Reading

Binary/ASCII Waveform example ........................................ 307 viii

List of Tables

Table 1: Table of typographic conventions.................................... xii

Table 2: Quick review of exporting and importing oscilloscope data ..........................................................................................2

Table 3: Summary of TekExcel Toolbar buttons............................14

Table 4: Some command and control terminology ........................37

Table 5: Useful icons on the VBA Standard Toolbar .....................48

Table 6: Icons for VBA controls used in this book .........................50

Table 7: Changes to make in the Properties window to Get

Waveform...............................................................................54

Table 8: Property changes to make outside of frames in

TekVISA Test Run..................................................................82

Table 9: Property changes to make in the Measurement

Commands frame...................................................................83

Table 10: Measurements available in the Measurement

Commands frame...................................................................84

Table 11: Property changes to make in the Waveform Data frame ......................................................................................87

Table 12: Property changes to make in the Send GPIB

Commands frame...................................................................92

Table 13: Changes to make in the Properties window to Chart

Measurements......................................................................104

Table 14: Useful icons on the VB Standard Toolbar....................130

Table 15: Icons for VB controls used in this example..................132

Table 16: Changes to make in the Properties window to the

Settings tab ..........................................................................134

Table 17: Changes to make in the Properties window to the

TDS7000 Series Measurements tab ....................................137

Table 18: Changes to make in the Properties window to the

TDS8000 Series Measurements tab ....................................138

Table 19: Changes to make in the Properties window to the

Data tab................................................................................139

Table 20: List of Initialization routines..........................................144

Table 21: Routines involved in listing devices and displaying channels...............................................................................146

Table 22: Routines involved in listing measurements to capture.148

Table 23: Routines involving dialog box buttons .........................150

Table 24: Routines involved in setting registers ..........................152

Table 25: Routines involved in handling trigger events ...............155

Table 26: Routines involved in getting measurement and waveform data......................................................................155

Table 27: Routines involved in displaying results in the grid .......156

Table 28: Routines involved in saving data to disk......................156

Table 29: General purpose routines ............................................157

ix

Table 30: Icons for MATLAB guide toolbar controls used in this book..................................................................................... 184

Table 31: Changes to make in the Property Inspector to GUI controls ................................................................................ 187

Table 32: Relevant attributes of controls that appear on the

Measurement Capture panel in LabWindows/CVI............... 214

Table 33: Relevant attributes of controls that appear on the measuredemo.vi Front Panel in LabVIEW........................... 247

Table 34: TDS7000 Series native GPIB commands used in examples in this book .......................................................... 256

Table 35: TDS7000 Series native GPIB queries used in examples in this book .......................................................... 261

Table 36: Methods, properties and events of the TekVISA

ActiveX Control.................................................................... 263

Table 37: MATLAB Instrument Control Toolbox functions.......... 281

Table 38: TDS/CSA 8000 PnP driver functions used in

LabWindows/CVI and LabVIEW examples.......................... 287

Table 39: VISA operations used in LabVIEW and LAN Server examples ............................................................................. 288

Table 40: Changes to make in the Properties window to the

Writing and Reading Binary/ASCII Waveform example....... 306

Table 41: Summary of functions in the Reading Binary/ASCII

Files example....................................................................... 308 x

What This Book is About

Preface

What This Book is About

This book shows you how to use a variety of popular tools to build graphical user interfaces to Tektronix Windows-based oscilloscopes. By using these

“soft front panels,” you can quickly and easily connect your oscilloscope, whether locally or remotely, to the latest PC tools for analyzing waveform and measurement data. In addition, this book explores the functionality of the

TekExcel Toolbar Add-In for Excel, which requires no additional programming.

Who Should Read This Book

Whether you are a novice who has never built a graphical user interface before or an experienced programmer, you will find this book helpful if you are interested in increasing your productivity with Tektronix Windows-based oscilloscopes. The examples cover programming environments ranging from

Excel Visual Basic for Applications (VBA) and Visual Basic 6.0 to

MATLAB, LabWindows/CVI, and LABVIEW. Familiarity with any or all of these environments is helpful but not necessary in order to work most of the examples.

How This Book is Organized

This book is divided into two parts. Each part includes multiple chapters and is designed to impart new information in progressive steps.

• Part 1 covers the use of Excel with the TekExcel Toolbar and the TekVISA ActiveX control, and also includes Visual

Basic 6.0 examples with the TekVISA ActiveX control.

• Part 2 describes the use of MATLAB with the Instrument

Control Toolbox, and the use of LabWindows/CVI and

LabView with Tektronix Plug-n-Play drivers.

• The appendices summarize the syntax of commands and controls used in the book, discuss LAN connectivity, present more complex examples, and describe the use of an optional

Waveform Generator program to generate live waveforms for examples.

Oscilloscope Analysis and Connectivity Made Easy xi

Document Conventions

A CD-ROM accompanies this book. The CD-ROM includes the text of the book saved in PDF format, so you can use Adobe Acrobat Reader to access the book on-line. Also on the CD are the programming examples discussed in the book.

Document Conventions

This book makes use of certain notational conventions and typefaces in

distinctive ways, as summarized in Table 1.

Table 1: Table of typographic conventions

Typeface boldface

italics

Meaning

Used to emphasize important points and to denote exact characters to type or buttons to click in step-by-step procedures.

Used to introduce terms and to specify variables in syntax descriptions.

Example

Connect your monitor to the

video port.

1.

Click

OK

.

An industry-standard communications protocol called VXI-11

SampleName Used to designate the name of a function, statement, filename, or similar construct in regular body text.

Note:

Used to call attention to notes or tips in text.

Code

Used to designate blocks of code.

Menu >

Submenu

Used to designate a series of cascading menus.

The example here means: from the Tools menu, choose

Macro.

Attribute (type) = newvalue

You will employ a userdefined function called

Acquire_Instrument.

sCHCommands =

"DESE 1;*ESE 1;*SRE 32"

1.

Note:

Start here.

Choose

Tools > Macro

.

xii Oscilloscope Analysis and Connectivity Made Easy

Chapter 1:

Connectivity Building

Blocks

Connectivity Made Easier

The first connectivity book to accompany a Windows-based Tektronix oscilloscope was entitled Oscilloscope Connectivity Made Easy. Since that book was published, Tektronix has added a number of new building blocks to make connectivity even more seamless and broad-based. These connectivity building blocks provide a new layer of middleware for connecting your

Windows-based analysis programs to Tektronix embedded oscilloscope software.

The previous book showed you how to copy and paste or export and import data into three popular analysis programs: Excel, Mathcad, and MATLAB.

That book also showed you how to use a stand-alone application to feed waveform data repeatedly into Excel or Mathcad.

This Oscilloscope Analysis and Connectivity Made Easy book gives you even more routes to jump-start connectivity to your favorite analysis program. You will:

• explore new levels of connectivity to Excel and MATLAB

• learn how to use Visual Basic to interact with your oscilloscope in the Windows environment

• acquire the tools and expertise to interconnect with the

LabVIEW graphical programming environment

Built-in Connectivity Features

Because Excel and MATLAB are of special interest to our customers,

Tektronix has built simple point-and-click interfaces from its oscilloscopes to

these three programs. For example, Figure 1 shows the dialog box for

copying TDS5000/7000 Series Oscilloscope waveform data to be pasted into

Excel. The oscilloscope software also includes similar setup boxes for exporting data in a format suitable for MATLAB.

Oscilloscope Analysis and Connectivity Made Easy 1

Built-in Connectivity Features

Figure 1: A Copy Setup box prepares waveform data for Excel

Table 2 quickly reviews how to pass oscilloscope data to Excel and

MATLAB. As shown in the table, you can use copy-and-paste or export-andimport techniques to move information from your oscilloscope to these programs.

Table 2: Quick review of exporting and importing oscilloscope data

Using

Microsoft

Excel with

Clipboard

Edit > Copy

Setup

Menu Selections / Commands

Using

Microsoft

Excel .txt File

File > Export

Setup

Using

M

ATLAB

.dat File

File > Export

Setup

To Copy / Export

Data from

TDS5000 and

TDS7000 Series

Oscilloscopes

To Copy / Export

Data from

TDS/CSA8000 Series

Oscilloscopes

To Paste / Import

Data into

Excel / M

ATLAB

Edit > Copy

Waveform

Edit > Paste

File > Export

Waveform

Data > Get

External Data >

Import Text File

or

Right-click and select

Refresh Data

Reference data filename as argument of

M-file function call in Command

Window

2 Oscilloscope Analysis and Connectivity Made Easy

New Connectivity Building Blocks

New Connectivity Building Blocks

Now a number of new connectivity components have come on the scene.

These new connectivity tools support faster and more seamless transfer of continuous live data into Excel and MATLAB. New connectivity building blocks also support other popular programming environments: Visual Basic as well as LabVIEW and LabWindows/CVI, a Measurement Studio component.

Tektronix latest connectivity solutions incorporate:

TekExcel Toolbar, an add-in that supports easy data capture into Microsoft Excel without any programming

TekVISA ActiveX Control, a Visual Basic OCX control that

“wraps” and encapsulates the TekVISA library, enabling rapid application development in Visual Basic 6.0 or Visual

Basic for Applications (VBA)

Excel’s behind-the-scenes development environment

TekVISA API, a standard application programming interface

(API) and common I/O library for connecting to and controlling measurement devices such as oscilloscopes

Internal “virtual”GPIB, a software resource built into

TekVISA, that links the Windows processor to the embedded processor in Tektronix Windows-based oscilloscopes, permitting faster acquisitions than conventional GPIB hardware links

VXI Plug-n-Play Drivers, for Tektronix Windows-based oscilloscopes, capable of connecting with LabWindows/CVI and LabVIEW test automation software and other programming environments

• Seamless connectivity with MATLAB via the Instrument

Control Toolbox, available from The MathWorks, Inc.

• VXI-11.2 Client/Server, technology for LAN connectivity

Oscilloscope Analysis and Connectivity Made Easy

3

New Connectivity Building Blocks

TekVISA

TekVISA is the new Tektronix implementation of the industry-standard library of common I/O operations known as VISA. VISA (Virtual Instrument

Software Architecture) was the brainchild of the VXIplug&play Systems

Alliance ( http://www.vxipnp.org

), a group formed to standardize the building of instrumentation drivers. TekVISA’s set of operations, attributes, and events supports connectivity between application development environments

such as C++, Visual Basic, MATLAB, and LabVIEWand multiple kinds of resources including devices connected:

• via a local GPIB connection

• via a local Serial (RS-232) connection

• via the Tektronix internal software connection known as

virtual GPIB

• via a remote GPIB-LAN connection

• remotely via virtual GPIB, Tektronix VXI-11 client/server technology, and an Ethernet LAN connection

Figure 2 shows the broad range of connectivity brought together through

TekVISA technology.

4 Oscilloscope Analysis and Connectivity Made Easy

New Connectivity Building Blocks

Figure 2: TekVISA supports connectivity to programming environments

TekExcel Toolbar

The easiest way to get up and running with your Windows-based oscilloscope is by making connections using the TekExcel Toolbar. This addin to Microsoft Excel works just like any other toolbar in that application.

When you click an icon, a dialog box pops up that allows you to pass information back and forth between the Microsoft Excel application and your

Windows-based oscilloscope, without any programming modifications. If you need no special customization beyond the built-in toolbar functions, the

TekExcel Toolbar will serve you well and get you going quickly, whether you are transferring oscilloscope measurements or captured waveforms into

Excel. Chapter 2 introduces you to the use of this multi-purpose toolbar.

Oscilloscope Analysis and Connectivity Made Easy

5

New Connectivity Building Blocks

TekVISA ActiveX Control

The TekVISA ActiveX Control will make your job a lot easier if you are familiar with Visual Basic or Excel’s Visual Basic for Applications. This book explores some ways to use this powerful control to build fast connections from VB or VBA to the acquisitions side of your oscilloscope.

With this tool, you can spend time using the programs that help you do your job, instead of losing time building complicated specialized instrument drivers out of sheer necessity, as was often required in the past. You can simply drop this control onto a form and then quickly design an interface with buttons and boxes to suit your needs.

If you just know a little bit about VB, the TekVISA ActiveX Control and the sample programs that come with this book will arm you with enough hands-on information to customize the examples given. Or, you can write your own pop-up dialogs between your oscilloscope and Excel or Visual

Basic 6.0. Chapters 3 through 7, along with Table 36 in Appendix A, cover

programming at this level using the TekVISA Control. Chapters 3 through 6 focus on using VBA with Excel spreadsheets, while Chapter 7 and Appendix

C concentrate on using Visual Basic 6.0.

TekVISA API

If you are an accomplished VB or C++ programmer, you can write programs that call TekVISA operations directly, especially if you need more fine-grained control. The TekVISA API software now comes standard on

Tektronix Windows-based oscilloscopes. The online TekVISA Programming

Manual includes a lookup reference section and a tutorial section with programming examples. This subject matter is beyond the scope of this book.

Internal “Virtual” GPIB

TekVISA support for an internal resource called virtual GPIB means fast connectivity between Windows and the embedded software side of your oscilloscope. Virtual GPIB provides a software bridge to and from embedded oscilloscope software, permitting direct internal access to the oscilloscope for much faster and larger acquisitions than conventional GPIB ports. What is more, this feature facilitates remote connections with other PCs over a standard Ethernet LAN without the need for special GPIB-to-LAN hardware adapters.

TekVISA also includes Asynchronous Serial (ASRL) and GPIB resources that support more traditional connections to non-Windows-based instruments.

VXI-11.2 Client /Server Connected by Local Area Network (LAN)

Tektronix VXI-11.2 Client/Server technology adds another important piece to the connectivity picture. The VXI-11 Server-side component, combined with TekVISA’s virtual GPIB, provides a software passageway for connecting your Windows-based oscilloscope over an Ethernet LAN to remote PCs. On each remote PC, you would install another copy of TekVISA to make use of its built-in VXI-11 Client-side component.

6 Oscilloscope Analysis and Connectivity Made Easy

New Connectivity Building Blocks

You will need your own VXI-11 Client-side software if you want to connect

UNIX-based systems to your Windows-based oscilloscope.

Appendix B discusses the details of accessing the oscilloscope across a local area network (LAN) from the programming environments discussed in this

book. Figure 3 shows the range of connections made possible by the various

TekVISA building block components. Figure 4 focuses on the components

that make LAN connectivity possible.

Figure 3: Range of connections made possible by TekVISA components

Oscilloscope Analysis and Connectivity Made Easy

7

New Connectivity Building Blocks

8

Figure 4: The path to LAN connectivity

Tektronix Plug-n-Play Drivers with LabWindows/CVI and LabVIEW

Tektronix VXI Plug-n-Play drivers add another feature to the connectivity landscape, enabling easy linkage with popular test automation software such

as LabVIEW (Figure 5) and LabWindows/CVI. VXI Plug-n-Play drivers for

Tektronix Windows-based oscilloscopes add a layer of middleware so you can work in these graphical programming environments without spending a

lot of time getting data in or out of your test equipment. Chapter 9 and Table

38 in Appendix A focus on connectivity scenarios using these graphical tools.

Oscilloscope Analysis and Connectivity Made Easy

New Connectivity Building Blocks

Figure 5: Tektronix VXI Plug-n-Play Drivers integrate with popular test automation software such as LabVIEW

M

ATLAB

’s Instrument Control Toolbox

Anothr connectivity tool has emerged from The MathWorks, which now offers an Instrument Control Toolbox with MATLAB

.

This toolbox makes connectivity with Windows-based oscilloscopes such as the Tektronix TDS

Family possible without complicated programming. Chapter 8 shows you how to import live waveforms into MATLAB using this new toolbox.

Oscilloscope Analysis and Connectivity Made Easy

9

New Connectivity Building Blocks

10 Oscilloscope Analysis and Connectivity Made Easy

PART 1: EXCEL AND VISUAL BASIC

CHAPTER 2: THE TEKEXCEL TOOLBAR 13

CHAPTER 3: UNDERSTANDING THE TEKVISA ACTIVEX CONTROL 37

CHAPTER 4: A SIMPLE PROGRAM TO GET WAVEFORMS 41

CHAPTER 5: A MORE COMPLEX FOUR-PART PROGRAM 77

CHAPTER 6: A MEASUREMENT CHARTING EXAMPLE

99

CHAPTER 7: A TRIGGERED DATA CAPTURE EXAMPLE 127

11

PART 1: EXCEL AND VISUAL BASIC

12 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 2:

The TekExcel Toolbar

Using the TekExcel Toolbar with

Microsoft Excel

Introduction

This chapter introduces you to the TekExcel Toolbar

a multi-purpose toolbar that allows you to place data from your Windows-based oscilloscope directly into an Excel document simply by clicking a few buttons. Easy acquisition is the heart of the toolbar. You can make single or repeated captures of data on a triggered, periodic, or timed basis, with the option of

also graphing the data. Figure 6 shows the TekExcel Toolbar, which includes

six button icons.

Figure 6: The TekExcel Toolbar in Excel

No programming is required in order to use the TekExcel Toolbar; however, the Visual Basic source code for the toolbar is available on the companion

CD for experienced VB programmers who wish to modify toolbar features for their own use. In later chapters of this book, you will learn how to build less complicated VBA programs that implement some of the functions built into this toolbar.

Toolbar Prerequisites

You can use the TekExcel Toolbar with Microsoft Excel

1

running either on your Tektronix Windows-based oscilloscope or on a separate PC connected by a network to your oscilloscope. The oscilloscope and connected PC (if any) must each have TekVISA installed on it in order to establish a connection between Excel and your oscilloscope. See Appendix B for information about configuring access to networked oscilloscopes.

1

The toolbar runs as an Add-In to Microsoft Excel 2000 and XP.

Oscilloscope Analysis and Connectivity Made Easy 13

Adding the TekExcel Toolbar to Excel

Toolbar Features

The TekExcel Toolbar enables rapid capture of oscilloscope data from within

Microsoft Excel worksheets. Table 3 describes the six buttons on the toolbar

that work with the TDS5000, 6000, and 7000. Some other instruments do not offer all six buttons.

Table 3: Summary of TekExcel Toolbar buttons

Icon Button Name

Connect

Settings

Waveform

Measurement

Meaning

Chooses the TekVISA-enabled oscilloscope with which to connect.

Saves oscilloscope settings to a file or Excel workbook, and restores oscilloscope settings from a file or Excel workbook. Settings saved into a workbook are automatically loaded into the oscilloscope when the workbook is opened.

Captures waveform data into a worksheet and graphs it.

Captures and graphs single or periodic waveform measurements.

Trigger Capture

Captures waveform data from an oscilloscope-defined trigger, places it into a worksheet, and graphs it.

Note: The TDS5000, 6000, and 7000 support this toolbar button. Other instruments do not.

Help

Launches the online help file for the TekExcel Toolbar.

The toolbar is easy to use. Click a button and a dialog box appears. Within dialog boxes, you can select the type of data you want to capture and automatically paste into Excel, along with an optional line chart.

If you let your mouse linger over a button, a tool tip will appear indicating the button’s function. Clicking the

Help

button launches an online help file

for the TekExcel Toolbar (see page 34).

Adding the TekExcel Toolbar to Excel

The TekExcel Toolbar is an Excel Add-In. During toolbar installation, the toolbar file (

TekExcelToolbar.xla

) is normally placed in a subdirectory of the main TekVISA files.

2

2 Assuming you are installing on the

C:

drive on a Windows 98 system, the toolbar is placed in

C:\VXIpnp\Win95\TEKvisa\ExcelToolbar\TekExcelToolbar.xla. On a Windows NT system, the toolbar is placed in C:\VXIpnp\WinNT\TEKvisa\ExcelToolbar\TekExcelToolbar.xla.

14 Oscilloscope Analysis and Connectivity Made Easy

Connecting to Oscilloscopes

When you first install the TekExcel Toolbar, follow these steps to add it to

Excel:

Start up Excel and select

Tools > Add-Ins…

from the Excel menu bar.

The Add-Ins dialog box appears.

Select the check box next to

TekExcel Toolbar

in the list of choices. If the

TekExcel Toolbar does not appear in the list, click the

Browse…

button, navigate to the appropriate directory, and select the

TekExcelToolbar.xla

file.

Click

OK

.

The TekExcel Toolbar appears undocked in the Excel program.

Leave the toolbar undocked, or drag it up to the Excel Formatting Toolbar if you want it to remain docked in a fixed position.

Connecting to Oscilloscopes

The

Connect

button on the TekExcel Toolbar allows you to select a

TekVISA-enabled oscilloscope with which to establish a connection.

To connect to a Tektronix Windows-based oscilloscope from within Excel:

1.

Click the

Connect

button on the TekExcel Toolbar.

Oscilloscope Analysis and Connectivity Made Easy

15

Saving and Restoring Scope Settings

A dialog box similar to the following appears:

16

2.

By default, the first GPIB device encountered in the instrument list is selected.

3.

Leave the selection as is, or select another instrument with which to connect and click

OK

.

The connection with the selected instrument is made. You may only connect to one instrument at a time using the TekExcel Toolbar.

Note:

Click the

Refresh

button to display any changes to the list of connected devices since the last time you clicked the

Connect

button.

Click the

Identify

button to display the instrument model number at the bottom of the dialog box.

Saving and Restoring Scope Settings

The

Settings

button on the TekExcel Toolbar allows you to save oscilloscope settings to a file or to an active Excel workbook, and restore them later to the oscilloscope.

If you save settings to an active worksheet and then save and reopen the associated Excel .

xls

file, the settings are automatically assigned to the oscilloscope.

If you save settings to a file, you have the option of placing a descriptor in the settings file. The file can take one of two forms:

Oscilloscope Analysis and Connectivity Made Easy

Saving and Restoring Scope Settings

Files with a .set extension

are identical to settings saved from within the oscilloscope.

Files with an .stg extension

contain both the oscilloscope settings and a

descriptor

that you specify when saving the settings. Descriptors may be up to 256 characters in length and can serve as useful reminders when you are storing many different oscilloscope settings on disk. Descriptors also provide an alternative to long file names as a way of differentiating files.

Save Settings from the Scope

Display Current Settings from the Scope

To capture and display oscilloscope settings:

1.

Click the

Settings

button on the TekExcel Toolbar.

A dialog box labeled TekExcel Settings appears.

2.

Click the

Scope

button in the upper-left pane labeled

Get

Settings from

.

Settings from the oscilloscope appear in a scrollable list box on the lower-right pane.

Save Scope Settings to a Workbook

To save current oscilloscope settings to the Excel workbook:

1.

Click the

Workbook

button in the lower-left pane labeled

Send Settings to

.

Oscilloscope settings are saved into an invisible worksheet in the workbook named

ExcelVISASettings

. When you save your work under Excel, this worksheet is stored inside your

.xls

file.

Oscilloscope Analysis and Connectivity Made Easy

17

Saving and Restoring Scope Settings

18

Note:

To make the

TekExcelSettings

sheet visible:

• Press

Alt+F11

to open the Visual Basic for Applications editor.

• Press

Ctrl+G

to open the Immediate Window.

• Type the following line exactly as shown (the name is case-sensitive):

Activeworkbook.Worksheets("TekExcelSettings").Visible =

True

• Press

Enter

A tab for the worksheet now appears, with the oscilloscope

settings stored in a single cell of the sheet. The worksheet

remains visible until you type the following line in the

Immediate Window and press

Enter

:

Activeworkbook.Worksheets("TekExcelSettings").Visible =

False

Save Scope Settings to a File

To save the current oscilloscope settings to a file:

1.

If desired, type in a descriptor for the current oscilloscope settings in the edit box on the upper-right pane of the

TekExcel Settings window

2.

Click the

File

button in the lower-left pane labeled

Send

Settings to

.

A Save Scope Settings box appears, as shown below.

Oscilloscope Analysis and Connectivity Made Easy

Saving and Restoring Scope Settings

The default name of the file is a date/time representation in the format yymmdd_hhmmss (using two-digit representations of year/month/day_hour/minute/second). For instance, the file name

010412_183303 represents April 12, 2001 at 6:33:03 PM.

If the descriptor edit box:

• is empty, the default file type in the Save Scope

Settings box is

.set

.

• contains text, the default file type in the Save Scope

Settings box is

.stg

.

Regardless of the file type presented, you can still select a different scope settings file type from the Save as type field in the Save Scope

Settings box.

3.

Leave the file name and type as is, or change the name and/or type to your preferences.

4.

Click

Save

to save the file under the selected name and type.

A message appears at the bottom of the TekExcel Settings dialog box confirming the location of the saved file.

Oscilloscope Analysis and Connectivity Made Easy

19

Saving and Restoring Scope Settings

20

Assign Stored Settings to the Scope

Assign Settings from a Workbook

When you save your work under Excel, the

TekExcelSettings

worksheet is stored inside your

.xls

file. When you open the Excel file later, the settings saved in the workbook are automatically loaded into the oscilloscope by a stored Excel macro. If for some reason this macro fails to execute, you can assign settings stored in the workbook by taking the following steps:

1.

Click the

Settings

button on the TekExcel Toolbar.

A TekExcel Settings box appears.

2.

Click on the

Get Settings from Workbook

button.

3.

Click on the

Send Settings to Scope

button.

Assign Settings from a File

To assign settings to the oscilloscope from those stored in a file:

1.

Click the

Settings

button on the TekExcel Toolbar.

A TekExcel Settings box appears.

2.

Click on

Get Settings from File

button.

An Scope Settings files box appears showing (.set) and (.stg) files.

Oscilloscope Analysis and Connectivity Made Easy

Capturing and Graphing Waveforms

3.

Select the desired file and click

Open

.

Settings appear in the TekExcel Settings box. The settings are assigned to the oscilloscope. For settings stored in (.stg) files, the descriptor also appears above the list box as shown:

Capturing and Graphing Waveforms

The

Waveform

button on the TekExcel Toolbar allows you to capture the time and values of a single waveform sequence into the current worksheet, beginning at a chosen cell location. You select the type of waveform (such as

Sample

or

Average

—see page

42

) on the oscilloscope before the capture.

Waveform data from all selected channels is captured and placed into the active sheet. The waveform capture is limited to 65000 rows of data, the approximate number of rows in Excel spreadsheets.

You also have the option of charting the waveform data. You can have the chart inserted into the active sheet or a separate sheet.

Oscilloscope Analysis and Connectivity Made Easy

21

Capturing and Graphing Waveforms

Note:

If you want to capture triggered waveform data instead of a single untriggered sequence, see the

Trigger Capture

button on page

31.

For information about clearing the active sheet, see page 24.

To capture waveforms into an Excel spreadsheet and, optionally, graph it:

1.

Select the

Waveforms

button on the TekExcel Toolbar.

A dialog box similar to the following appears:

22

All active channels are displayed, along with the number of data points in the waveform sample, derived from oscilloscope settings.

Note:

You can click the

Refresh

button to display any oscilloscope changes to the number of active channels, the measurement source channel, or the number of data samples.

2.

Select the channel(s) from which you want to capture data.

(Hold down the

Ctrl

key while clicking if you want to make multiple selections.)

3.

Select the starting cell in which to begin inserting the waveform, or leave the default as is (

A1

).

You can specify the starting cell either by scrolling through the column and row values, or by directly entering the row and column

Oscilloscope Analysis and Connectivity Made Easy

Capturing and Graphing Waveforms values in the edit boxes under the Start Data Display heading.

Possible Excel starting cells range from A1 to AZ99. Starting cell designations must take the A1-style format rather than the R1C1-

style format (explained on page 68).

4.

If you want to generate an Excel graph on completion of the waveform capture, select the

Generate Excel graph

check box to enable the graph placement option buttons, and click

Active Sheet

or

New Sheet

, depending on where you want the chart inserted.

5.

Click

OK

to start the acquisition and display the data in the active sheet starting at the designated cell.

A single time column is displayed and the data values from all selected channels appear in successive columns (with a maximum of

65000 rows).

If you checked the box to graph the data, a stacked line graph appears after the capture, either in the active sheet (as shown here) or in a separate chart sheet. If necessary, you can modify this chart using Excel.

Oscilloscope Analysis and Connectivity Made Easy

23

Clearing the Active Sheet

Clearing the Active Sheet

The

Clear Active Sheet

button is available on the dialog box displayed when you click the

Waveform

,

Measurement

, or

Trigger Capture

buttons on the toolbar. Behavior is the same in all three cases.

To clear the active sheet (data and charts):

1.

Click the

Clear Active Sheet

button.

The following prompt message appears:

2.

Click

Yes

to clear all contents

data and charts.

This clears all data, all cell formulas, and all cell formatting from the active worksheet cells. It also removes any embedded charts inside the active worksheet.

3.

If the active sheet is a separate chart sheet, select the sheet labeled

TekChart1

, and click the

Clear Active Sheet

button.

The following prompt message appears:

24

4.

Click

OK

to clear the chart.

The

TekChart1

chart sheet is removed.

Capturing and Graphing Measurements

The

Measurement

button on the TekExcel Toolbar allows you to capture single or repeated timed measurement(s) and optionally graph them as well.

Capture Single Measurement(s)

To capture one or more single measurements:

1.

Select the

Measurement

button on the TekExcel Toolbar.

Oscilloscope Analysis and Connectivity Made Easy

Capturing and Graphing Measurements

A three-tabbed dialog box appears.

2.

Choose the

Selection

tab.

All active channels are displayed. The current measurement source channel is indicated by the appearance of the word

Measure

to the right of the measurement channel (screen appearance is slightly different for TDS/CSA8000 Series Oscilloscopes).

Note:

You can click the

Refresh

button to display any oscilloscope changes to the number of active channels or the measurement source channel.

3.

Select the

Single Capture

option button.

The Timing and Charting tab forms disappear and a Select All check box appears on the Selection tab.

4.

Click a measurement from the list box under the Select

Measurement(s) heading to select it. To select multiple measurements, hold down the

Ctrl

key while highlighting the measurements you want to select, or select the

Select all

check box as shown to select all measurements available in the list.

Oscilloscope Analysis and Connectivity Made Easy

25

Capturing and Graphing Measurements

5.

Select the starting cell in which to begin inserting the measurement(s), or leave the default as is (

A1

).

You can specify the starting cell either by scrolling through the column and row values, or by directly entering the row and column values in the edit boxes under the Start Data

Display heading. Possible Excel starting cells range from A1 to AZ99. Starting cell designations must take the A1-style format rather than the R1C1-style format (explained on page

68).

Click

Columns

or

Rows

, depending on how you want the data arranged.

Usually captured measurements are placed in columns, because there are over 65000 rows in an Excel worksheet, whereas data placed in rows is subject to a 256-column limit in Excel worksheets. If you choose the

Select All

check box, however, the

Rows

option button is selected by default because these measurement snapshots are best displayed vertically, with engineering units in a column to the right.

Click

Active Sheet

or

New Sheet

, depending on where you want the data inserted.

Note:

For information about clearing the active sheet, see page

24.

Click

Start

.

Measurement heading(s) and current values, along with their units of measure, are placed in the selected sheet starting at the designated cell.

26 Oscilloscope Analysis and Connectivity Made Easy

Capturing and Graphing Measurements

Capture and Graph Repeated Measurement(s)

To capture multiple timed measurement(s):

1.

Select the

Measurement

button on the TekExcel Toolbar.

A three-tabbed dialog box appears.

Oscilloscope Analysis and Connectivity Made Easy

27

Capturing and Graphing Measurements

2.

Choose options from the

Selection

tab (see Select

Measurement(s) on page 28), the

Timing

tab (see page 29),

and the

Charting

tab (see page 30).

3.

When you have made all your selections, click

Start

from any of the tabs.

Measurement heading(s) and current values, along with their units of measure, are placed in the selected sheet starting at the designated cell. An optional chart may also appear in the active sheet as shown here, or in a separate chart sheet:

28

Select Measurement(s)

To select the measurement(s) to capture:

1.

Choose the

Selection

tab.

All active channels are displayed.

Note:

You can click the

Refresh

button to display any oscilloscope changes to the number of active channels or the measurement source channel.

2.

Select the

Repeated timed captures

option button.

Oscilloscope Analysis and Connectivity Made Easy

Capturing and Graphing Measurements

3.

Click a measurement from the list box under the Select

Measurement(s) heading to select it. To select multiple measurements, hold down the

Ctrl

key while highlighting the measurements you want to select.

4.

Select the starting cell in which to begin inserting the waveform, or leave the default as is (

C1

).

You can specify the starting cell either by scrolling through the column and row values, or by directly entering the row and column values in the edit boxes under the Start Data Display heading.

Possible Excel starting cells range from A1 to AZ99. Starting cell designations must take the A1-style format rather than the R1C1-

style format (explained on page 68).

5.

Click

Columns

or

Rows

, depending on how you want the data arranged.

Usually captured measurements are placed in columns, because there are over 65000 rows in an Excel worksheet, whereas data placed in rows is subject to a 256-column limit in Excel worksheets.

6.

Click

Active Sheet

or

New Sheet

, depending on where you want the data inserted.

Note:

For information about clearing the active sheet, see page

24.

Specify Timing

To specify timing of the capture:

1.

Select the

Timing

tab.

2.

If you want the measurement capture to begin as soon as you click the

Start

button, choose the

Immediately

option button.

3.

If you want to delay measurement capture until a specified time:

a.

Choose the

Specified Time

option button.

b.

In the

Day

box, type or select the date to begin the measurement capture.

c.

In the

Time

box, type or select the hour and minute to begin the capture.

4.

In the

Interval

box, type or select a time value to specify the interval between captures. Notice that this value adjusts the

Record Length

value.

Oscilloscope Analysis and Connectivity Made Easy

29

Capturing and Graphing Measurements

5.

In the

Duration

box, type or select a time value to specify the duration of each capture. Notice that this value adjusts the

Record Length

value.

6.

If necessary, change the value in the

Record Length

text box to change the record length of each capture. Notice that this value adjusts the

Duration

value.

For example, suppose that a capture with a 2-second interval and a

1-minute duration displays a record length of 30. If you change the capture to a 3-second interval, the record length changes to 20. If instead, you keep the 2-second interval and change the record length to 60, the duration changes from 1-minute to 2-minute.

30

Choose Charting Options

To specify charting options for the capture:

1.

Select the

Charting

tab.

The

No Chart

option appears preselected as the default option.

2.

If you want charting to take place at periodic intervals, click the

Periodically

option button and choose

10

,

20

,

25

, or

50

as the percentage of completion interval for periodic chart updates.

3.

If you want charting to take place after all measurement capturing completes, click the

Upon Completion

option button.

Oscilloscope Analysis and Connectivity Made Easy

4.

Click

Active Sheet

or

New Sheet

, depending on where you want the chart inserted.

Note:

For information about clearing the active sheet, see page

24.

Capturing Triggered Waveforms

The

Trigger Capture

button on the TekExcel Toolbar allows you to capture the time and values of a triggered waveform and/or measurement(s) into the current worksheet, beginning at a chosen cell location. You select the type of trigger event (such as

Edge

or

Glitch

), the type of waveform (such as

Sample or

Average

—see page

42

), the active channels, and the measurement channel

on the oscilloscope before the capture. The toolbar dialog box allows you to select one or more active channels from which to capture a waveform, and one or more types of measurements to capture over the measurement channel.

If you select the Waveform check box, waveform data from all selected active channels is captured and placed into the active sheet when the trigger event occurs. The waveform capture is limited to 65000 rows of data, the approximate number of rows in Excel spreadsheets.

If you select the Measurement check box, measurement data from the measurement channel is captured and placed into the active sheet (in a column before any captured waveform data) when the triggered event occurs.

You have the option of performing a specified number of captures.

Note:

If you want to capture a single untriggered waveform sequence instead of triggered waveform data, see the

Waveform

button on page 21.

If you want to capture untriggered measurement data, see the

Measurement

button on page 24.

For information about clearing the active sheet, see page 24.

To capture triggered data into an Excel spreadsheet:

1.

Select the

Trigger Capture

button on the TekExcel Toolbar.

Oscilloscope Analysis and Connectivity Made Easy

31

Capturing Triggered Waveforms

A dialog box similar to the following appears:

32

All active channels are displayed, along with the number of data points in the waveform sample, derived from oscilloscope settings.

The current measurement source channel is indicated by the appearance of the word

Measure

to the right of the measurement channel.

Note:

You can click the

Refresh

button to display any oscilloscope changes to the number of active channels, the measurement source channel, or the number of data samples.

2.

If you want to capture triggered waveform data from the measurement source channel:

a.

Select the

Waveform

check box.

b.

Click to select one or more active channels in the list box from which to capture the data.

3.

If you want to capture triggered measurement data:

a.

Select the

Measurement

check box.

b.

Click to select one or more measurements in the list box to capture over the Measurement channel.

4.

Select the starting cell in which to begin inserting the data, or leave the default as is (

A1

).

Oscilloscope Analysis and Connectivity Made Easy

You can specify the starting cell either by scrolling through the column and row values, or by directly entering the row and column values in the edit boxes under the Start Data Display heading.

Possible Excel starting cells range from A1 to AZ99. Starting cell designations must take the A1-style format rather than the R1C1-

style format (explained on page 68).

5.

Specify the number of captures to perform or leave the default value of

1

.

6.

Click

OK

to start the acquisition and display the data in the active sheet starting at the designated cell.

For measurement data, a time stamp for the triggered event appears in the first row of a column, followed by the requested measurement(s), with engineering unit(s) added if that box was checked.

For waveform data, times for each data point appear in the first column. The first row of subsequent columns contains a time stamp for each capture of a triggered event. Below the time stamp, waveform data values appear in successive rows (with a maximum of 65000 rows). The number of columns of data varies depending on the number of captures.

Oscilloscope Analysis and Connectivity Made Easy

33

Getting Help with the TekExcel Toolbar

Getting Help with the TekExcel Toolbar

The

Help

button on the TekExcel Toolbar displays online help for the toolbar. When you click this button, the following Help screen appears:

You can navigate through the pages of this online help system using the usual buttons and links available in Windows-based Help files.

34 Oscilloscope Analysis and Connectivity Made Easy

TekExcel Toolbar Source Code

TekExcel Toolbar Source Code

Tektronix used the TekVISA ActiveX control to build the TekExcel Toolbar described in this chapter. The source code for this Add-In along with explanatory text is available on the companion CD that accompanies this book. You can also view the source code by loading the TekExcel Toolbar and going to the Excel Visual Basic Editor (select

Tools > Macro > Visual

Basic Editor

or press

Alt+F11

).

The source code is a good place to look if you wish to build your own specialized Excel Add-In or customize the TekExcel Toolbar. Before dealing with the extra complexity of building an Add-In, however, look over the rest of the chapters in the Excel part of this book. These chapters introduce you to the TekVISA ActiveX control, and take you step-by-step through procedures for using Excel VBA to build some simple dialog boxes for capturing oscilloscope data and communicating with your oscilloscope.

Chapter 2 Review

To review what you learned in this chapter:

• You learned that you

do not have to do any programming

to use the TekExcel Toolbar.

• You learned how to use the TekExcel Toolbar to

establish a connection

between Excel and your oscilloscope and

get or set scope settings

.

• You learned how to use the

TekExcel Toolbar to

acquire measurement and waveform data

from your oscilloscope and optionally chart it.

• You learned that the TekExcel Toolbar

source code is available

to you if you want to customize the functionality of the toolbar or learn how to build your own.

Oscilloscope Analysis and Connectivity Made Easy

35

Chapter 2 Review

36 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 3:

Understanding the TekVISA ActiveX

Control

Some background information about oscilloscope controls and commands

Introduction

Chapter 2 examined the functionality of a toolbar that enables point-and-click communication between your oscilloscope and Microsoft

Excel. If you want more detailed information on the workings of those functions or want to create your own connectivity functions, read this chapter.

Background Information

In this chapter, you will:

1.

Review some general terminology.

2.

Become familiar with the

TekVISA ActiveX Control

used to build the TekExcel Toolbar Add-In. You will learn about using this control to acquire and receive oscilloscope data and pass it to Excel VBA and Visual Basic 6.0 automation interfaces.

3.

Review information about

GPIB commands and queries

that are native to your oscilloscope.

4.

Learn how some

TekVISA ActiveX Control

methods can be used to send

native GPIB commands and queries

to the oscilloscope from Excel or Visual Basic programs and receive the results, if any.

Oscilloscope Analysis and Connectivity Made Easy

37

Terminology

Terminology

This chapter uses the same terminology as Chapter 1. In addition, you will

become familiar with a few new terms as shown in Table 4.

Table 4: Some command and control terminology

Term

Automated

Acquisition

Meaning

A set of application programming interfaces (APIs) to your oscilloscope that let you automate the same functions you would normally perform using the knobs and graphs on your oscilloscope. Includes elements discussed below.

A Visual Basic program, either stand-alone or used in conjunction with Excel, which uses the TekVISA Control and GPIB commands to implement a direct waveform connection.

Waveform

Acquisition program

TekVISA API

TekVISA ActiveX

Control

Native GPIB commands and queries

VXI Plug-n-Play driver commands

VXI-11 LAN Server

A set of resources, operations, attributes, and events that conform to the VISA standard for building drivers for test and measurement equipment.

A set of methods, properties, and events that encapsulate portions of the TekVISA API and provide an easy way to use VB or VBA to get waveforms or to send GPIB commands and queries to the oscilloscope and obtain query responses back from the oscilloscope.

A set of GPIB commands and queries native to specific Tektronix

Windows-based oscilloscopes, that can be passed by certain

TekVISA ActiveX Control methods.

A set of driver commands for controlling specific Tektronix

Windows-based oscilloscopes. These commands conform to

VXIPlug&Play standards, and enable connectivity with

LabWindows/CVI and LabVIEW.

A software component that supports LAN-based instrument communication using the VXI-11 communications protocol, a part of the TekVISA software.

Automated Acquisition

To perform automated acquisition, you will add two kinds of elements to your program:

Native GPIB commands and queries based on ANSI/IEEE standards that define the GPIB hardware interface, signals, and common commands

The TekVISA ActiveX Control based on the VISA standard for building test and measurement system drivers

38 Oscilloscope Analysis and Connectivity Made Easy

Native GPIB Commands and Queries

To use an analogy, native GPIB commands are like telephone numbers. You have to specify things like the country code, area code, exchange, and the extension. TekVISA ActiveX Control methods are more like speed dialing

they provide shortcut ways to send telephone numbers or, in this case, native GPIB commands.

In subsequent chapters, you will use some native GPIB commands and

queries to control waveform acquisition and measurement functions of your

instrument. These commands follow GPIB interface conventions. Table 34

and Table 35 in Appendix A explain the subset of native GPIB commands

and queries used in this book.

Commands modify instrument settings or tell the oscilloscope to perform a specific action.

Queries cause the oscilloscope to return data and information about its status.

To learn more about the full set of native GPIB commands, see the Online

Programmer Guide for your Tektronix Oscilloscope Series.

TekVISA ActiveX Control Methods, Properties, and Events

The TekVISA ActiveX Control includes a simple set of Visual Basic methods, properties, and events that overlay more detailed operations defined in the

TekVISA API.

Because these ActiveX Controls use in-process calls, they execute nearly as fast as if you had coded to the TekVISA API itself. As you saw from using the TekExcel Toolbar

which was written in Visual Basicthis can mean rapid application development without the usual loss of performance associated with a more simplified, higher level interface.

In upcoming chapters, you will become more familiar with the TekVISA

ActiveX Control that provides a portal into your oscilloscope. You will learn how to customize interfaces by accessing this control through its methods, properties, and events:

• Some methods, such as

Query, WriteString

, and

ReadString involve more detailed programming that directly accesses native GPIB commands.

• Other methods, such as

GetWaveform

, offer much higherlevel interfaces that consolidate multiple TekVISA operations and involve fewer lines of code.

Table 36 in Appendix A summarizes the methods, properties, and events of

the TekVISA ActiveX Control used with Excel VBA and Visual Basic 6.0 examples.

Oscilloscope Analysis and Connectivity Made Easy

39

Automated Acquisition

40 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 4. A Simple Program

To Get Waveforms

Using VBA to import real-time waveforms into

Excel

Introduction

You have looked at how to use the TekExcel Toolbar to import data quickly into Microsoft Excel, and learned about the TekVISA ActiveX Control. In this chapter, you will paste the TekVISA ActiveX Control onto a form and build a simple user interface to transfer acquisition data from the oscilloscope to your spreadsheet/worksheet. This will add a direct connection for waveforms to Excel

a connection that automatically gets waveform data out of the oscilloscope and inserts it into Excel.

If this application solves your waveform data acquisition needs as supplied, you can use it “as is” with Excel. In that case, you may wish to load it from the companion CD and immediately begin using it. However, if you think you might want to customize the application, read on

because you will explore the inner workings of the underlying VBA program in some detail.

GPIB Commands for Waveform Acquisition

Before writing the program, you will examine some relevant Native GPIB commands that involve waveform acquisition. Then you will look at the

GetWaveform

method exposed by the TekVISA ActiveX Control.

Waveform Data

Waveform data points are a collection of values that define a waveform. One data value usually represents one data point in the waveform record.

You can get waveform data from the oscilloscope by using the

CURVE?

query. Before you transfer waveform data, you must typically specify the data format, record length, and waveform source.

Oscilloscope Analysis and Connectivity Made Easy 41

GPIB Commands for Waveform Acquisition

Waveform Data Formats

Acquired waveform data uses eight or more bits to represent each data point.

The number of bits used depends on the acquisition mode specified when you acquired the data. For example, on Tektronix real-time Windows-based oscilloscopes (such as TDS5000 and TDS7000 Series oscilloscopes), data acquired in

SAMple

or

ENVelope

mode uses eight bits per waveform data point. Data acquired in

AVERage

mode uses up to 14 bits per point.

You specify the format with the

DATa:ENCdg

command. The instrument can transfer waveform data in either ASCII or binary format.

Binary data can be represented by integer or floating-point values. The range of the values depends on the number of bytes specified. When the byte number is one, signed integer data ranges from -128 to 127, and positive integer values range from 0 to 255. When the byte number is two, the values range from -32768 to 32767. When a MATH (or REF that came with a

MATH) is involved, 32-bit floating-point values are used that are four bytes in number.

The defined binary formats specify the order in which the bytes are transferred.

RIBinary

specifies signed integer data-point representation with the most significant byte transferred first.

SRIbinary

is the same as

RIBinary

except that the byte order is swapped so the least-significant byte is transferred first.

RPBinary

is positive integer data-point representation, with the most significant byte transferred first.

SFPbinary

is the same as

RPBinary

except that the byte order is swapped so the least-significant byte is transferred first.

FPBinary

is single-precision floating-point representation of data whose width is 4.

SFPbinary

is the same as

FPBinary except that the byte order is swapped so the least-significant byte is transferred first.

Waveform Record Length

You can transfer multiple points for each waveform record. You can also transfer a portion of the waveform or the entire record. When transferring data from the instrument, you can specify the first and last data points in the waveform record. Setting

DATa:STARt

to 1 and

DATa:STOP

to the record length will always return the entire waveform.

Waveform Source

The

DATa:SOUrce

command specifies the waveform source when transferring a waveform from the instrument. You can only transfer one waveform at a time.

42 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA ActiveX Control and Waveform Acquisition

Waveform Preamble

Each waveform that you transfer has an associated preamble that contains information such as the horizontal scale, the vertical scale, and other settings in effect when the waveform was created.

You can get preamble data from the oscilloscope by using the

WFMOutpre?

query.

The TekVISA ActiveX Control and Waveform Acquisition

TekVISA provides a way to get waveforms without having to issue all the

GPIB commands just summarized. If you only want to get waveform data at the current oscilloscope settings, without altering those settings programmatically, you can use the method discussed next.

The GetWaveform Method

The TekVISA ActiveX Control provides a way to combine the equivalent of dozens of native GPIB commands or multiple TekVISA API operations in a single method called

GetWaveform

. This method gets a waveform at the current oscilloscope settings, along with its sample interval and trigger position. You can specify the channel from which to retrieve the waveform and the desired screen resolution to use in displaying the waveform.

Note:

If the waveform setting is MIN/MAX, this method gets double the number of points and still displays the waveform correctly.

Other Methods of Waveform Acquisition

As shown in Figure 7, you can use ActiveX Control methods like

WriteString to send and receive native GPIB commands and queries (such as

ACQuire and

CURVE?) to your oscilloscope, and methods like

ReadString

to receive responses from the oscilloscope (such as waveform data in the form of an array named wave

in this example). Or, you could use the

GetWaveform method to do virtually the same thing.

Oscilloscope Analysis and Connectivity Made Easy

43

Getting Started

44

Figure 7: How TekVISA ActiveX Controls interface with Excel VBA and VB

Getting Started

What You Need to Get Started

You can work this example either on a separate PC or on your Windowsbased oscilloscope, using either the Excel Visual Basic for Applications

Editor or Visual Basic 6.0. To get started, you will need the following:

• A Windows-based Tektronix oscilloscope (an external monitor is recommended if you are working the example on your oscilloscope)

• Excel 2000 or XP (or Visual Basic 6.0) installed on your oscilloscope or on an attached external PC

• The TekVISA connectivity software described in Chapter 1

(see page 323 for the location of the completed example)

Oscilloscope Analysis and Connectivity Made Easy

What You Will Do

In this chapter, you will learn how to use VBA (or VB) to build a program with features similar to the one that runs when you click the

Waveform

icon on the TekExcel Toolbar. This sample program illustrates how to capture raw waveform data at the current oscilloscope settings and insert it into your spreadsheet.

Figure 8 shows the design-time interface that you will create. As you can see,

the user interface consists of a VBA UserForm with one Frame on the left and one unframed List Box on the right. A Label appears above the List Box.

The Frame groups these fields:

• three caption Labels

• three Labels being used to hold results

• two Command Buttons

Each caption Label appears to the left of each empty result Label.

Figure 8: The form you will design for the GetWaveform example

Oscilloscope Analysis and Connectivity Made Easy

45

Getting Started

This UserForm allows users to get the following information when they click the

Get Waveform

button:

• the currently active TekVISA resource

device

being used for the waveform transfer

• the current data point sample values of the

waveform

and associated times (relative to the trigger point), displayed in two columns in the spreadsheet

• the current

record length

of the waveform being retrieved

(calculated by subtracting the starting data point from the ending data point)

• the current

sample interval

of the waveform being retrieved

• the current

trigger position

of the waveform being retrieved

Figure 9 shows the same UserForm at runtime after fields have been

populated with results.

46

Figure 9: The Get Waveform form at runtime

Oscilloscope Analysis and Connectivity Made Easy

After sending waveforms to an empty spreadsheet as shown in Figure 9, you

will use the same program to send waveforms to the Excel clock jitter

example (Figure 10) from the Oscilloscope Connectivity Made Easy book.

This example has been provided in its completed form on the CD that accompanies this book. (The spreadsheet is set up to receive data in the format exported by TDS7000 Series Oscilloscopes.)

Figure 10: Excel Clock Jitter example

What You Will Learn

The purpose of this chapter is to illustrate some basic operations of the

TekVISA ActiveX Control and familiarize you with the interface. Once you have gone through this chapter, you will know how to:

• add the TekVISA ActiveX Control to the list of available controls in Excel, and use some of its properties and methods

• design and create a UserForm in Excel by dragging and dropping controls onto the form

• modify controls on the form by changing properties in the

Properties window

• expand the VBA code blocks created by inserting controls

• add a button to run the VBA program that you just created from your Excel spreadsheet

Oscilloscope Analysis and Connectivity Made Easy

47

The Get Waveform Example in Excel VBA

• insert and run the program in a blank spreadsheet

• insert and run the program with a spreadsheet that already contains data and formulas

• find out the changes you will need to make if you want the program to run in Visual Basic 6.0 instead of Excel VBA

The Get Waveform Example in Excel VBA

Building the Form

If you are already familiar with the Visual Basic for Applications design environment, the step-by-step instructions below may seem elementary. If so, you may wish to skip the instructions on how to build the UserForm and just

refer to Figure 8 on page 45 and Table 7 on page 55 for details on building

the user interface, then have a look at the code. Later chapters focus primarily on the VBA code and assume you are already familiar with VBA’s visual editing tools for constructing dialog interfaces.

Open VBA in Excel (Alt+F11)

To begin building the UserForm:

1.

Open Excel and save the spreadsheet under the name

Getwaveform.xls

.

2.

To access the Visual Basic for Applications design environment from within Excel, select

Tools > Macro >

Visual Basic Editor

or press

ALT+F11.

Note:

The keystroke combination

ALT+F11

switches you back and forth between the Excel spreadsheet and the Visual Basic

Editor.

48 Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

The Microsoft Visual Basic screen appears with the

Project Explorer

window on the top left, the

Properties

window on the bottom left, and space on the right for the

Code

window or

Object Browser

to display.

3.

If you do not see the Project Explorer or Properties window, display them by selecting icons from the standard toolbar

(see Table 5).

Table 5: Useful icons on the VBA Standard Toolbar

Icon Icon Name Select from

Insert UserForm Standard Toolbar

Object Browser Standard Toolbar

Project Explorer Standard Toolbar

Properties

Toolbox

Standard Toolbar

Standard Toolbar

Oscilloscope Analysis and Connectivity Made Easy

49

The Get Waveform Example in Excel VBA

Insert a UserForm

To begin building a UserForm:

1.

Click the

Insert UserForm

icon on VBA’s Standard Toolbar:

A UserForm appears with the name

UserForm1

preassigned along with the

Controls Toolbox

for adding controls to the form.

Table 6 shows icons on the Controls Toolbox that are relevant to this

book.

50 Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

Table 6: Icons for VBA controls used in this book

Icon Icon Name Select from

Checkbox Controls Toolbox

CommandButton Controls Toolbox

Frame Controls Toolbox

Label Controls Toolbox

Listbox Controls Toolbox

Spin Button Controls Toolbox

Textbox Controls Toolbox

Add the TekVISA ActiveX Control

To add the TekVISA ActiveX Control to the UserForm:

1.

Select

Tools > Additional Controls

.

The Additional Controls dialog box appears.

2.

Place an

X

in the box next to the TekVISA Control

(

TvcControl

) and click

OK

.

Oscilloscope Analysis and Connectivity Made Easy

51

The Get Waveform Example in Excel VBA

The TekVISA Control icon is added to the Controls Toolbox.

52

3.

Drag the

TekVISA Control icon

from the Controls Toolbox onto the lower right quadrant of

UserForm1

where it appears as an icon at design time, but is invisible at runtime.

By adding the Control to your Userform, you have made all its methods, properties, and events available to be called by your code.

Design the Form

To design the Get Waveform UserForm:

1.

Insert a

Frame

into

UserForm1

using one of the following techniques:

Note:

Frames are used to group and organize other controls.

a.

Click

the Frame in the Toolbox and then click in the

UserForm, or

b.

Drag

the Frame from the Toolbox to the UserForm, or

c.

Double-click

the Frame in the Toolbox, and then click in the UserForm once for each Frame you want to create.

The Frame appears in its default size. VBA automatically gives it the name

Frame1

.

2.

Note:

You can use similar techniques to insert other kinds of controls in a UserForm or to insert controls inside a Frame.

Position the frame on the left side of the UserForm and, if necessary, drag the sides or corners of the Frame to change its size.

3.

Drag a

List Box

onto the right side of

UserForm1

. VBA automatically names it

ListBox1

.

Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

4.

Add two

Command Buttons

to the bottom of

Frame1

, placing them side by side.

Note:

To place a control within a frame, you can use any of the techniques described in step 1. As an alternative, you can give the frame

focus

by clicking it, and then cut or copy a control elsewhere on the form and paste it into the frame.

5.

Similarly, add six

Labels

to

Frame1

and a seventh

Label

above

ListBox1

, making sure that each control is placed as

shown in Figure 11.

Figure 11: Get Waveform form before changing default properties

Getting Help

Labels are not just used for captions. Labels 4 through 6 will be used to hold results

specifically, additional waveform values (record length, sample interval, and trigger position) associated with the waveform data.

You can find out more about using Labels by taking a look at the

Help

facility:

1.

From the

Microsoft Visual Basic

menu bar, select

Help >

Contents and Index > Microsoft Forms Design Reference >

Label Control.

2.

Click

Example

and select

Zoom Event Example

to see usage of Labels in a coded example.

As shown in Figure 12, the text explains that you can use a Label to

display the current value. Examples like these can be very useful when you are writing VBA code.

Oscilloscope Analysis and Connectivity Made Easy

53

The Get Waveform Example in Excel VBA

Figure 12: Using the VBA Help facility

Changing Properties in the Properties Window

Table 7 summarizes all the changes to make in the Properties window to

modify the UserForm from its appearance in Figure 11 to its final appearance

in Figure 8.

54 Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

Table 7: Changes to make in the Properties window to Get Waveform

Control Property Change from Change to

UserForm1 tvc (TekVISA)

Frame1

Label1

Label2

Label3

Label4

Label5

Label6

Label7

Listbox1

CommandButton1

Caption

(Name)

Caption

Caption

Caption

Caption

(Name)

Caption

UserForm1

Tvc1

Frame1

Label1

Label2

Label3

Label4

Label4

BackColor Button Face

Special Effect Flat

(Name)

Caption

Label5

Label5

BackColor Button Face

Special Effect Flat

(Name)

Caption

Label6

Label6

Get Waveform

Tvc1 (no change needed)

Waveform Data

Record Length

Interval

Trigger

LblRL

(no Caption)

Button Light Shadow

Sunken

LblInterval

(no Caption)

Button Light Shadow

Sunken

LblTriggerPos

(no Caption)

BackColor Button Face

Special Effect Flat

Caption

(Name)

Label7

Listbox1

(Name)

Caption

Button Light Shadow

Sunken

Devices lstDevices

CommandButton1

cmdGetWaveform

CommandButton1

Get Waveform

CommandButton2

(Name)

Caption

CommandButton2

cmdClear

CommandButton2

Clear

To make the code more meaningful, you will also rename some of the controls that will correspond to variable names and subroutine names in the

VBA code logic you will write later. Changes to names are underlined in the table, to help distinguish them from captions. To support good coding practice, always name a control first before changing any of its other properties, if you think you might want to associate it with a code block later.

Note:

A control’s

name

corresponds to its subroutine name or variable name in the code. A control’s

caption

appears on the

UserForm and affects how the form looks, but has nothing to do with the code.

Oscilloscope Analysis and Connectivity Made Easy

55

The Get Waveform Example in Excel VBA

To use the Properties window to change the properties of controls:

1.

In the Properties window, change the

caption

(not the name) for

UserForm1

to

Get Waveform.

2.

Change the caption for

Frame1

to

Waveform Data

.

3.

Change the caption for

Label1

to

Record Length

.

56 and resize

Label1

by dragging the box handles if necessary.

Note:

If you want a label to appear on two lines, change its

Wrap

property to

True

.

4.

Change the caption for

Label2

to

Interval

and the caption for

Label3

to

Trigger

.

5.

For

Label4

through

Label6

, change the names to

lblRL

,

lblInterval

, and

lblTriggerPos

, respectively, and delete their captions so they do not appear on the form.

6.

For

Label4

through

Label6

, use drop-down lists in the

Properties window to change BackColor (the background color) from Button Face to

Button Light Shadow

, and

SpecialEffect from Flat to

Sunken

.

Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

Note:

The drop-down arrow may not be visible until you click inside the rows for the BackColor and SpecialEffect properties.

7.

Change the rest of the captions and sizes for controls as

shown in Table 7 so that the form looks like Figure 13.

Figure 13: The redesigned form for Get Waveform

Using the Object Browser (F2)

In addition to using the online help discussed on page 53, you can use the

Object Browser

to learn more about the classes and members of Excel’s built-in object model.

Oscilloscope Analysis and Connectivity Made Easy

57

The Get Waveform Example in Excel VBA

A Quick Overview of the Excel Object Model

Figure 14 shows a hierarchy of some relevant objects in the Excel Object

Model.

58

Figure 14: A object hierarchy from the Excel Object Model

The

Application

object is at the root of the hierarchy tree and has a number of

“active” properties such as

ActiveSheet

. Plural objects are collections that hold other objects. For example,

Workbooks

is a container for

Workbook objects, which in turn contain

Worksheet

collections of

Worksheet

objects, each of which contains

Range

objects.

Much of your code will focus on

Range

objects, which can reference a single cell, a row or column, or an entire sheet. You can use the Range

End property to select contiguous cells until an empty cell is encountered. The following examples demonstrate some ways you can reference ranges:

Application.Range(“A3”)

Application.Worksheets(“Sheet1”).Range(“A3”)

Application.ActiveSheet.Range(“A3”)

Range(“A3”)

Range(“A1:D10”)

Range(“A1”,”D10”)

Range(“A1:A10, D1:D10, G1:G10”)

Range(“MyRange”)

[A1:D10] (Evaluate Method)

Range(ActiveCell, ActiveCell.End(xlDown)).Select

You can use the

Cells

property to reference all cells within a worksheet or range, or limit the reference by using this R1C1 row/column syntax:

cells (rowindex, columnindex)

For example, the following code assigns a formula to cell C2:

ActiveSheet.Cells(2,3).Formula = “=SUM(D1:D10)”

By pressing

F2

or clicking the

Object Browser

icon on the Standard Toolbar, you can browse to find out which methods, properties, and events to use with such object components as

Application

,

Worksheet

,

UserForm

,

Range

, and

Cell

, so you can make the correct calls and references in your code.

Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

For example, to find out more about the

Cells

property:

1.

Press

F2

to bring up the Object Browser.

Select

Excel

from the upper drop-down list.

Type

Cells

in the lower drop-down list as the object to search for.

Press

Enter.

You will see the screen shown in Figure 15. You can then click on

various library entries in the Search Results to see how the

Cells property relates to other members of the object model.

Figure 15: Using the Object Browser with Excel VBA

F1 From the Object Browser Is Your Friend

From the Object Browser, you can jump to a context-sensitive online help topic.

For example:

1.

Select a related class such as

Range.

2.

Press

F1

(or right-click and select

Help

).

Figure 16 shows the resulting help screen.

Oscilloscope Analysis and Connectivity Made Easy

59

The Get Waveform Example in Excel VBA

60

Figure 16: Related online help from the Object Browser

Within this help screen, you can click items in the hierarchy diagram to jump to other related topics if necessary, or to see more of the hierarchy tree.

Coding the Event Procedures

Mostly by acting on events, you will be coding what should happen when the form is initialized and when the user clicks each button on the form.

As you type the code, you will notice some helpful features. For example, when you type a period after a COM object such as the TekVISA ActiveX

Control, the VBA Intellisense feature opens a list that prompts you with choices. Valid properties, methods, and events exposed by the COM object as public are preceded by a green icon, like the first choice in the following list:

Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

Similarly, after you type an opening parenthesis, the Intellisense feature prompts you with the syntax for arguments, and displays valid choices:

The Activate UserForm Routine

This is the main body of the code, because it executes immediately to assign initial variables and prepare a UserForm before it is displayed. This routine uses TekVISA calls to find all available device resources, then sets the active device to be virtual GPIB, which is always GPIB8.

1.

In the Project Explorer window, right-click the

frmGetWaveform icon

in the Forms folder and select

View

Code

or press

F7

to switch to the Code window for this project.

2.

Type the following in the Code window:

Option Explicit

This statement causes VBA to ensure that a variable is defined before you use it.

3.

In the Project Explorer window, do one of the following to switch to the UserForm:

a.

Double-click the

frmGetWaveform icon

in the Forms folder, or

b.

Right-click the

frmGetWaveform icon

in the Forms folder and select

View Object

, or

c.

Press

Shift+F7

.

4.

Double-click the right side of the UserForm, outside of the frame.

VBA inserts the following code fragment into the Code window. It is so named because

Click

is the default event for the

UserForm

object.

Private Sub UserForm_Click()

End Sub

Oscilloscope Analysis and Connectivity Made Easy

61

The Get Waveform Example in Excel VBA

5.

Delete this code block, since you want to write a routine that takes place when the form is activated, not when a user clicks it.

6.

Click the right drop-down menu to see a list of members

(methods, properties, and events) that are valid with

UserForm

, and select

Activate

. The

Activate

event allows you to initialize module-level variables before the UserForm is first displayed.

62

VBA inserts the following code block:

Private Sub UserForm_Activate()

End Sub

7.

Type the following code inside the

UserForm_Activate subroutine (TekVISA-related statements are highlighted in boldface):

Dim i As Integer

Dim dev As Variant

Tvc1.SearchCriterion = 0 'search all devices

' get detected VISA devices

dev = Tvc1.FindList

' populate devices listbox

If IsArray(dev) Then

For i = LBound(dev) To UBound(dev) lstDevices.AddItem dev(i)

Next

End If

When the UserForm is activated before it first displays, this code:

a.

Declares a counter variable and a list array of devices.

b.

Uses the

SearchCriterion

property of the TekVISA

ActiveX Control to set criteria to search for resource devices detected on this instrument.

Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

c.

Uses the

FindList

property of the TekVISA ActiveX

Control to get the results of the search and store them in a device list array.

d.

Uses

LBound

and

UBound

functions to refer to the lower and upper boundaries of the device list array while iterating through the list.

e.

Uses the Excel

AddItem

method to populate the lstDevices

list box with the Find list results, which will appear on the form as available devices.

8.

Type the following code next inside the

UserForm_Activate subroutine:

For i = 0 To lstDevices.ListCount - 1

If Left(lstDevices.List(i), 5) = "GPIB8" Then

' default to virtual GPIB device lstDevices.ListIndex = i

Tvc1.Descriptor = lstDevices.Text

Exit For

Next

End If

This code:

a.

Uses the Excel

ListCount

property to iterate through the items in the lstDevices

list box for an entry corresponding to a virtual GPIB device (GPIB8).

b.

Uses the Excel

ListIndex property to set the virtual GPIB device as the currently selected item in the lstDevices list box, so that it appears preselected on the form.

c.

Uses the

Descriptor

property of the TekVISA ActiveX

Control to set the value in the

Text

property of the lstDevices

list box

in this case, the virtual GPIB device string

as the active VISA resource.

The Clear Button Routine

Next you will initialize some variables. You know that the

Clear

command button will clear fields, so you will write that initialization code also.

1.

Type the following in the Code window, just below the

Option Explicit

statement:

Dim rngHold As Range ' reference to worksheet range for

' clearing

This statement declares a variable of data type

Range

to hold the worksheet range. Since this variable appears outside of any subroutine, its scope is modular and it can be referenced from any routine in the module. You will reference this range when you write

Oscilloscope Analysis and Connectivity Made Easy

63

The Get Waveform Example in Excel VBA the code associated with the

Clear

command button, which must clear the range between acquisitions.

2.

Select

cmdClear

from the left drop-down menu in the Code window.

64

The following code fragment for the cmdClear_Click

subroutine appears in the Code window.

Click

is the default event for command button controls.

Private Sub cmdClear_Click()

End Sub

In this case,

Click is the event you want to use in your code.

3.

Type the following code inside the cmdClear_Click subroutine:

If Not rngHold Is Nothing Then rngHold.Clear

rngHold.ClearContents

rngHold.ClearFormats

End If lblInterval.Caption = "" lblRL.Caption = "" lblTriggerPos.Caption = ""

When the

Clear

button is clicked, if waveform data is present, this code:

a.

uses

Clear

,

ClearContents

, and

ClearFormats

methods of an

Excel

Range

object to clear the spreadsheet columns where waveform data appears (including all values, formulas, and formatting)

b.

uses the

Caption

property of an Excel

Label

control to clear the captions of the result Labels (where additional waveform values appear on the form)

Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

The Get Waveform Button Routine

Next you will work on the logic that takes place when the user clicks the

Get

Waveform

button. This involves placing a call to the

GetWaveform

method of the TekVISA ActiveX Control, which takes five arguments. You will also learn to use the

ScreenUpdating, Cursor, and

ActiveSheet

properties of the

Excel

Application

object, which represents the entire Excel application. In the process, you will encounter some Excel fine points, such as xlWait

and xlDefault

, which are preassigned mouse-pointer constants that can be assigned to the

Cursor

property.

Note:

You can use Application object shortcuts (for example,

ActiveSheet.Range

) rather than fully-qualified references (for example,

Workbook.ActiveSheet.Range

) whenever doing so is unambiguous.

1.

Press

Shift+F7

to switch to the UserForm, and double-click the

Get Waveform

button.

VBA inserts the following code block:

Private Sub cmdGetWaveform_Click()

End Sub

2.

Type the following code inside the cmdGetWaveform_Click subroutine code block:

Dim arrWF As Variant, xinc As Double, trigpos As Long

' variables for GetWaveform method

Dim arrLength As Long, i As Long

Dim t As Double

Dim tracker As Long

Dim blnProceed As Boolean

Dim msg As String

Dim ans As Integer

Dim hUnits As String, vUnits As String

On Error GoTo cmdGetWaveFormErr

This code declares:

a.

Variables for three arguments passed by the

GetWaveform

method of the TekVISA ActiveX Control, including an array variable to hold the waveform values, and variables to hold the sample interval (x-axis increment) and trigger position.

b.

An array variable to hold the waveform record length and a variable for iteration through the array.

c.

An interim variable t

to hold the time value (relative to the trigger point) associated with each data point sample value.

d.

A variable to track the rows in cells of the active worksheet.

Oscilloscope Analysis and Connectivity Made Easy

65

The Get Waveform Example in Excel VBA

e.

A Boolean variable to determine whether to proceed in the case of large waveforms.

f.

Variables to hold MsgBox messages and user answers.

g.

Two variables for output parameters of the

GetWaveform

method.

If clicking the

GetWaveform

button causes an error, control passes to the cmdGetWaveformErr error routine.

3.

Type the following code inside the cmdGetWaveform_Click subroutine code block:

Call Tvc1.GetWaveform(CH1, arrWF, xinc, trigpos, vUnits, hUnits)

' test that an array has been returned

If IsArray(arrWF) Then

' get length of array arrLength = UBound(arrWF) - LBound(arrWF) + 1 lblRL.Caption = arrLength

End If

' show rest of waveform info lblInterval.Caption = xinc lblTriggerPos.Caption = trigpos

DoEvents

This code:

a.

Calls the TekVISA Control with the

GetWaveform method, which accepts one argument (the channel from which to get a waveform) and passes back five

arguments (see Table 36 in Appendix A for more

information about this method).

b.

Uses the

IsArray

function to test that a waveform array has been returned .

c.

Calculates the record length by subtracting the starting data point from the ending data point (+ 1) and stores it in the

Caption

property of the lblRL

Label control, so that it will appear on the form.

d.

Stores the returned sample interval and trigger position argument values in the

Caption

property of the lblInterval and lblTriggerPos

Label controls, respectively, so that they will appear on the form.

e.

Uses the

DoEvents

function to pass control to the operating system so it can repaint the screen, allowing the user to see the updated fields on the form. Control is returned after the operating system has finished processing the events in its queue.

66 Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

4.

Type the following code inside the cmdGetWaveform_Click subroutine code block:

' flag for large waveform sets blnProceed = True

If arrLength > 10000 Then msg = "Waveform includes " & arrLength & " values. " msg = msg & "Do you wish these values to be displayed ?" ans = MsgBox(msg, vbYesNo + vbDefaultButton2,

"Get Waveform")

If ans = vbNo Then blnProceed = False

End If

If blnProceed = False Then Exit Sub

This code:

a.

Sets a Boolean flag to true.

b.

If the record length exceeds 10,000, puts up a message box with Get Waveform displayed in the title bar, asking the user whether or not to display the values.

c.

Uses the vbyesno

and vbDefaultButton2

constants to set the message box style to include Yes and No buttons, with the second button (the No button) preselected as the default.

d.

Gets the user’s response and, if the user clicked the No button, sets the flag to false and exits the subroutine.

5.

Type the following code inside the cmdGetWaveform_Click subroutine code block:

' proceed to display the data

If (IsArray(arrWF) And blnProceed) Then

' set headers

ActiveSheet.Range("C1").Value = "Time"

ActiveSheet.Range("C1").Font.Bold = True

ActiveSheet.Range("D1").Value = "Value"

ActiveSheet.Range("D1").Font.Bold = True tracker = 2

' let user know we are filling cells

Application.Cursor = xlWait

' stop screen repaints while filling cells

Application.ScreenUpdating = False

If a waveform array is present and the Boolean flag is set to true, this code:

a.

Assigns Time and Value headers to cells in range C1:C1 and D1:D1 of the active Excel sheet (the

Range

property applies to single cells in this example).

Oscilloscope Analysis and Connectivity Made Easy

67

The Get Waveform Example in Excel VBA

b.

Sets the row-tracking variable to 2 so the program will start inserting values in the second row under the headers.

c.

Changes the mouse pointer cursor to an hourglass to let the user know that the program is busy filling cells.

d.

Turns off screen repainting to speed up execution while processing waveform data.

6.

Type the following code inside the cmdGetWaveform_Click subroutine code block:

For i = LBound(arrWF) To UBound(arrWF)

' calculate time t = (i - trigpos) * xinc

ActiveSheet.Cells(tracker, 3).Value = t

ActiveSheet.Cells(tracker, 4).Value = arrWF(i) tracker = tracker + 1

Next

' we are done reset cursor and screen painting

Application.Cursor = xlDefault

Application.ScreenUpdating = True

' set reference to range for the clear button

Set rngHold = ActiveSheet.Range("C1", Cells(tracker, 4))

Else

MsgBox "Error encountered acquiring Waveform", vbOKOnly,

"Get Waveform"

End If

Exit Sub

This code:

a.

Loops through the waveform array, calculating the time value (relative to the trigger point) for each waveform data point according to the formula

(data-point-index – trigger-position) * sample-interval

and assigning time and data point values to cells in columns C and D of the active sheet for as many rows as needed.

Note:

The

Cells

property uses R1C1-style references. For example, cell C5 would be “C5” in A1 notation, but “R5C3” in R1C1 notation.

b.

Changes the cursor back to the default mouse pointer arrow.

c.

Turns on screen repainting again so that the screen will refresh.

d.

Sets the range reference for the

Clear button to start with

C1 and end with the row in column D referenced by the tracker

variable.

68 Oscilloscope Analysis and Connectivity Made Easy

The Get Waveform Example in Excel VBA

e.

Adds an Else clause, in case waveform acquisition fails, that displays an error message in a message box with an

OK button and “Get Waveform” displayed in the title bar.

7.

Type the following code inside the cmdGetWaveform_Click subroutine code block: cmdGetWaveFormErr:

MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly,"Get Waveform"

Application.Cursor = xlDefault

Application.ScreenUpdating = True

If an error occurs when the

Get Waveform

button is clicked, this code:

a.

Displays an error message that includes the error number and its description, using a message box with an OK button and “Get Waveform” displayed in the title bar.

b.

Changes the cursor back to the default mouse pointer arrow.

c.

Turns on screen repainting again so that the screen will refresh.

Running the GetWaveForm Program

The Show Form Routine

Now that you have created the form, the next step is to create a short routine that displays it when the user clicks a button on the spreadsheet.

1.

Expand the

Modules

folder in the Project Explorer window and double-click

Module1

.

2.

An empty page in the Code window appears.

3.

Type the following:

Option Explicit

Sub btnShowForm() frmGetWaveform.Show vbModeless

End Sub

This code displays the

GetWaveform

form with the display style set to the constant vbModeless

, meaning that the form is not modal.

Since it is modeless, no applications are suspended when the form is displayed, so the user need not respond to the form before using any other part of the application.

Oscilloscope Analysis and Connectivity Made Easy

69

The Get Waveform Example in Excel VBA

To add a button to the spreadsheet so you can run the program you just created:

1.

Press

Alt+F11

to switch from VBA to the Excel spreadsheet.

2.

If the Excel

Forms

Toolbar is not visible, select

View >

Toolbar > Forms

to display it. You can dock the toolbar so that it displays horizontally below the menu bar, or let it float free as shown here:

As you can see, the Forms Toolbar on the Excel spreadsheet is similar in appearance to VBA’s Control Toolbox. Some of the control icons are identical, but these icons are meant to be associated with macros of recorded actions, or with preexisting code modules such as the

ShowForm module you just created.

3.

Double-click the

Button

icon and click in or near cell

A4

, the spot in the spreadsheet where you want to insert it.

The Assign Macro dialog box appears.

70

4.

Select the

ShowForm

module as the macro name and click

OK

.

Oscilloscope Analysis and Connectivity Made Easy

Running the Program with the Jitter Example

5.

Right-click the button, select

Edit Text

, and change the button caption from

Button1

to

Show Form

.

6.

Select

File > Save

to save the

GetWaveform.xls

spreadsheet, along with the VBA program you just created.

7.

Click away from the button if necessary to exit Design mode, and then click the

Show Form

button to run the program.

The GetWaveform dialog box appears.

Note:

Even if you do not have a waveform source connected to

Channel 1 of your oscilloscope, you will still be able to pick up enough noise to generate some data to see if your program works.

8.

Modify your oscilloscope settings to prepare for a waveform transfer. Be sure to set the record length as part of this step.

9.

Click the

Get Waveform

button.

You will see results similar to Figure 9 on page 46. If an error

occurs, switch to VBA and choose

Help > Contents and Index >

Visual Basic User Interface Help > Toolbars > Debug Toolbar

for a quick summary of the debugging features of VBA.

Running the Program with the Jitter Example

You have used the

Get Waveform

program to insert a waveform into an empty spreadsheet. Now you will use it to insert a waveform into a spreadsheet already filled with data and formulas.

You will use the jitter1.xls

spreadsheet, the Excel Jitter example from the

Oscilloscope Connectivity Made Easy book.

Note:

If you have the Oscilloscope Connectivity Made Easy book, refer to it for instructions on setting up the Waveform Generator and connecting a cable from your oscilloscope sound port to Channel 1.

These instructions also appear in Appendix D on page 321. If you do

not want to use the Waveform Generator, you will still be able to pick up enough random noise on Channel 1 to generate some data, enough to verify that your program is making connections.

1.

In the

GetWaveform.xls

spreadsheet, press

Alt+F11

to switch from the Excel spreadsheet to VBA.

2.

Select

frmGetWaveform

in the Project Explorer window.

Oscilloscope Analysis and Connectivity Made Easy

71

Running the Program with the Jitter Example

3.

Select

File > Export File

… and click

Save

to save the frmGetWaveForm

UserForm and VBA code.

Excel writes two files to disk, one with a

.frm

extension and one with a

.frx

extension.

4.

Select

Module1

in the Project Explorer window.

5.

Select

File > Export File

… and click

Save

to save the

ShowForm

VBA code.

Excel writes a file to disk with a

.bas

extension.

6.

Close the

GetWaveform.xls

spreadsheet and open the jitter1.xls spreadsheet in Excel.

7.

To disable automatic calculation, select

Tools > Options

and click

Manual

on the

Calculation

tab.

This will keep you from having to wait while Excel recalculates the entire spreadsheet numerous times while you are working.

8.

Press

Alt+F11

to switch from the Excel spreadsheet to VBA.

9.

Select

File > Import File

… , select

frmGetWaveForm.frm

and click

Open

to insert the frmGetWaveForm

UserForm and VBA code into the jitterfast.xls

spreadsheet.

10.

Select

File > Import File

… , select

Module1.bas

and click

Open

to insert the

Module1

VBA code (the

ShowForm

code) into the jitterfast.xls

spreadsheet.

11.

Double-click the

frmGetWaveform

icon in the Project

Explorer window and change these lines in the Code window:

ActiveSheet.Range("C1").Value = "Time"

ActiveSheet.Range("C1").Font.Bold = True

ActiveSheet.Range("D1").Value = "Value"

ActiveSheet.Range("D1").Font.Bold = True tracker = 2

ActiveSheet.Cells(tracker, 3).Value = t

ActiveSheet.Cells(tracker, 4).Value = arrWF(i)

' set reference to range for the clear button

Set rngHold = ActiveSheet.Range("C1", Cells(tracker, 4)) to these lines, so that the waveform data will be inserted in columns

H and I, starting at row 6:

ActiveSheet.Range("H1").Value = "Time"

ActiveSheet.Range("H1").Font.Bold = True

ActiveSheet.Range("I1").Value = "Value"

ActiveSheet.Range("I1").Font.Bold = True

72 Oscilloscope Analysis and Connectivity Made Easy

Running the Program with the Jitter Example tracker = 6

ActiveSheet.Cells(tracker, 8).Value = t

ActiveSheet.Cells(tracker, 9).Value = arrWF(i)

' set reference to range for the clear button

Set rngHold = ActiveSheet.Range("H1", Cells(tracker, 9))

12.

Press

Alt+F11

to switch from VBA to the Excel spreadsheet.

13.

Insert a

Show Form

button into the

Jitterfast.xls

spreadsheet and assign the button to the

ShowForm

code as you did earlier for the

GetWaveform.xls

spreadsheet.

Note:

Instead of adding a form button, you may want to add a custom menu item. Such menu items are typically added by coding the

Workbook

object’s

Open

and

BeforeClose

events:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim sMenuName As String smenuName =

"

&JitterExample

"

'

Delete the menu before closing

On Error Resume Next

MenuBars(xlWorksheet).Menus(sMenuName).Delete

End Sub

Private Sub Workbook_Open()

'

Creates a new menu and adds menu items

Dim sMenuName As String

Dim sCaption As String

Dim SMacro As String sMenuName = sCaption =

"

&JitterExample

"

"

Show Jitter Form

" sMacro =

"

LaunchForm

"

On Error Resume Next

'

Delete the menu if it already exists

MenuBars(xlWorksheet).Menus(sMenuName).Delete

'

Add the menu

MenuBars(xlWorksheet).Menus(sMenuName).MenuItems

.Add Caption:=sCaption, OnAction:=sMacro

End with

End Sub

14.

Save the spreadsheet, then click the

Show Form

button to display the Get Waveform dialog box.

15.

Click the

Get Waveform

button.

16.

Press

F9

to manually recalculate the spreadsheet.

The program inserts new waveform data into the form fields and new waveform time and data point values into columns H and I of the spreadsheet, starting at row 6.

Oscilloscope Analysis and Connectivity Made Easy

73

Using VB Instead of VBA

A screen similar to the one shown in Figure 17 displays.

74

Figure 17: The Clock Jitter example with the Get Waveform program added

Using VB Instead of VBA

If you want to work this exercise using Visual Basic 6.0, you will need to create the form using that tool instead of Excel VBA. Refer to Chapter 7 for an example of how to use Visual Basic 6.0 controls to design a form.

Figure 18 shows a VB 6.0 version of the

Get Waveform

example discussed in this chapter. This program was saved under the project name

p_Ch4VB.vbp

on the CD that accompanies this book. Notice that a list box has been used to display the waveform data points in this example, since there is no spreadsheet.

Oscilloscope Analysis and Connectivity Made Easy

Using VB Instead of VBA

Figure 18: Visual Basic 6.0 version of Get Waveform program

You will also have to make some changes to the code. Where you used the

VBA

UserForm

class with the

Activate

event, substitute the VB

Form

class with the

Load

event. Therefore, instead of creating a

UserForm_Activate()

subroutine, you will create a

Form_Load()

subroutine in VB 6.0 as shown here:

Private Sub Form_Load()

Instead of using a spreadsheet to store the waveform data points, you will use a list box named lstWF

in the form itself. The GetWaveform routine is shown here:

Private Sub cmdGetWaveForm_Click()

' declare variables

Dim arrWF As Variant 'array variable which will hold waveform values

Dim xinc As Double ' variable which will hold the x axis increment

Dim trigpos As Long ' variable which hold the timing trigger

' position

Dim i As Long ' counter variable

Dim hUnits As String, vUnits As String ' variables for returning

' unit types

On Error GoTo cmdGetWFMErr

'CH1 is the OCX built-in constant specifying Channel 1

Call Tvc1.GetWaveform(CH1, arrWF, xinc, trigpos, vUnits, hUnits)

If IsArray(arrWF) Then ' check to be sure returned value is an

Else

' array lblRecLength.Caption = UBound(arrWF) - LBound(arrWF) + 1

Exit Sub

End If lblInterval.Caption = xinc lblTrigPos.Caption = trigpos

If chkDisplayWF.Value = 1 Then ' if user wants values displayed,

' loop through the array

For i = LBound(arrWF) To UBound(arrWF) lstWF.AddItem arrWF(i)

Next

End If

Oscilloscope Analysis and Connectivity Made Easy

75

Chapter 4 Review

You cannot load VB 6.0 forms into Excel VBA (or load VBA user forms into

VB 6.0). If you try to load a VB 6.0 form into Excel VBA, you will get this message:

The form class contained in the specified file is not supported in Visual

Basic for Applications; the file can't be loaded.

However, you can cut and paste portions of the code between the two programs, and then edit it to correct for differences in syntax.

Unlike VBA, which is interpreted code that only runs inside Microsoft Office applications, Visual Basic 6.0 code can be compiled into a stand-alone executable.

Chapter 4 Review

Now to review what you learned in Chapter 4:

• You can use

Visual Basic for Applications (VBA)

, which is included in Excel, to design your own forms and build your own functions.

• You can add the

TekVISA Control

to VBA, and then drag it onto your form just like any other ActiveX control.

• The Excel

Help

facility contains many useful examples, and the

Object Browser

can help you understand the hierarchy of objects in the

Excel object model

. The Excel help system and the Object Browser are closely interwoven.

• The Excel

Intellisense

feature prompts you with valid arguments and other choices when you type code in the

Code window

• You can use the

Get Waveform

program described in this chapter to insert waveform data into an empty spreadsheet, or into a spreadsheet that already contains data and formulas.

76 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 5. A More Complex Four-Part

Program

Using VBA to get current resource, waveform, measurement, and other query results

Introduction

You have looked at how to use the TekVISA ActiveX Control to build a simple dialog box to get waveforms. Now you can go a step further and become more familiar with the TekVISA ActiveX control.

This chapter uses Excel VBA to build a more complicated multifunction dialog box than the previous chapter. As in Chapter 4, this four-part program allows you to get the currently active resource device and obtain waveform data. In addition, the program lets you send GPIB commands to capture oscilloscope measurements, or send other kinds of GPIB commands and queries and get back results.

The program you build in this chapter introduces more core properties and methods of the TekVISA ActiveX Control. In addition, you may find some practical applications for using this program, especially since you can customize it yourself.

What You Need to Get Started

You can work this example either on a separate PC or on your Windowsbased oscilloscope, using either Excel’s built-in VBA or Visual Basic 6.0. To get started, you will need the following:

• A Windows-based Tektronix oscilloscope (an external monitor is recommended if you are working the example on your oscilloscope)

• Excel 2000 or XP (or Visual Basic 6.0) installed on your oscilloscope or on an external PC

• The TekVISA connectivity software described in Chapter 1

(see page 323 for the location of the completed example)

Oscilloscope Analysis and Connectivity Made Easy 77

Introduction

What You Will Do

In this chapter, you will build a sample VBA program that

• issues native GPIB commands to capture immediate measurement data

• issues other native GPIB commands and queries to control the instrument

• captures raw waveform data

• finds resource devices recognized by TekVISA

Figure 19 shows the design-time interface that you will create. As you can

see, the user interface is divided into parts to accomplish these tasks. The

VBA form consists of three frames and one unframed list box. This user form allows you to interact with your oscilloscope in the following ways:

• the top left frame sends

measurement commands

and gets results

• the lower left frame sends

native GPIB commands and queries

and gets results, if any

• the top right frame gets

waveform data

at the current settings, along with the record length, sample interval, and trigger position

• the lower right list box shows

currently available devices

(GPIB and serial resources on your instrument) that are recognized by the TekVISA ActiveX Control

78 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Figure 19: The form you will design for the Test Run example

Figure 20 shows the same UserForm at runtime after fields have been

populated with results in all four quadrants of the form.

Oscilloscope Analysis and Connectivity Made Easy

79

Introduction

80

Figure 20: The Test Run form at runtime

What You Will Learn

The purpose of this chapter is to illustrate more operations of the TekVISA

ActiveX Control and familiarize you with more features of the OCX interface. In this chapter, you will:

• build a form with more expanded functionality than the previous example

including multiple frames, a text box, and multiple check boxes, list boxes, command buttons, and labels

• use TekVISA ActiveX Control operations to send native

GPIB measurement queries and other kinds of GPIB commands and queries to your oscilloscope and get back results

• review the TekVISA method used to get waveform data

• review the TekVISA properties used to find resource devices

• add a button to run this VBA program from your Excel spreadsheet

• find out the changes you will need to make if you want the program to run in Visual Basic 6.0 instead of Excel VBA

Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

The TekVISA Test Run Example in Excel VBA

Building the Form

This chapter focuses primarily on the VBA code and assumes you are already familiar with VBA visual editing tools for constructing dialog interfaces. For step-by-step instructions on designing a form for the VBA

design environment, refer to page 48.

To begin building the UserForm:

1.

Open Excel and save the spreadsheet under the name

TestRun.xls

.

2.

Press

ALT+F11

to access the Visual Basic for Applications design environment from within Excel.

3.

Insert a UserForm by clicking the

Insert UserForm

icon on the VBA Standard Toolbar.

4.

Rename the UserForm

TekVISA Test Run

.

5.

If necessary, follow the instructions on page 51 to add the

TekVISA ActiveX Control to the Controls Toolbox.

6.

Drag the TekVISA Control icon onto the lower right quadrant of the Userform where it appears as an icon at design time but is invisible at runtime.

7.

Using your chosen method, insert three frames into the

Userform from left to right. VBA automatically names them

Frame1

,

Frame2

, and

Frame3

.

8.

Drag a label and a list box into the lower right-hand corner of the Userform. VBA automatically names them

Label1

and

ListBox1

.

9.

Similarly, drag the rest of the needed controls onto the form,

making sure that each control is placed as shown in Figure

21.

Note:

It is not necessary to drag the controls onto the form in the exact order shown; however, doing so will help you verify that you have changed all the properties correctly.

Changing Properties in the Properties Window

Table 8, Table 9, Table 11, and Table 12 (which appear later in this chapter)

summarize all the changes to make in the Properties window to convert the

UserForm from its appearance in Figure 21 to its final appearance.

Oscilloscope Analysis and Connectivity Made Easy

81

The TekVISA Test Run Example in Excel VBA

Figure 21: TekVISA Test Run form before changing default captions and appearance of controls

After changing the name, captions, and other properties itemized in those

tables and resizing controls, the form will look like Figure 22.

82

Figure 22: The redesigned form for TekVISA Test Run

Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

The Current Devices List Box

The Current Devices List Box Design

Table 8 summarizes the changes to make to the UserForm in areas not

enclosed by frames.

Table 8: Property changes to make outside of frames in TekVISA Test Run

Control Property Change from Change to

UserForm1

Caption UserForm1

TekVISA Test Run

Label1

Listbox1

Caption

(Name)

Label1

Listbox1

Current Device: lstDevices

Figure 23 shows the portion of the form detailed in Table 8.

Figure 23: The Current Devices list box

The UserForm Initialize Routine

This code executes immediately before the UserForm is first displayed. It uses TekVISA calls to find all the available device resources automatically,

and is identical to the code explained in Chapter 4 beginning on page 61.

Refer back to that explanation for a line-by-line discussion. The ActiveX

Control properties used in this subroutine are

SearchCriterion, FindList

, and

Descriptor

.

1.

Press

F7

to switch to the Code window.

2.

Type the following statement so VBA will ensure that variables are defined before you use them:

Option Explicit

3.

Add the following code, or copy and paste it from the

Get

Waveform program:

Private Sub UserForm_Initialize()

Dim dev As Variant ' array that holds devices detected by

' the OCX control

Dim i As Integer lstRow.ListIndex = 0

Tvc1.SearchCriterion = 0 'search all devices

' get detected VISA devices

dev = Tvc1.FindList

' populate devices listbox

If IsArray(dev) Then

For i = LBound(dev) To UBound(dev)

Oscilloscope Analysis and Connectivity Made Easy

83

The TekVISA Test Run Example in Excel VBA lstDevices.AddItem dev(i)

Next

End If

For i = 0 To lstDevices.ListCount - 1

If Left(lstDevices.List(i), 5) = "GPIB8" Then

' default to virtual GPIB device lstDevices.ListIndex = i

Tvc1.Descriptor = lstDevices.Text

Exit For

Next

End If

End Sub

The Measurement Commands Frame

The Measurement Commands Frame Design

Table 9 shows the property changes to make in the Measurement Commands

frame.

Table 9: Property changes to make in the Measurement Commands frame

Control Property Change from Change to

Frame1

Label3

Label7

Measurement Commands frame (top left)

Caption Frame1

Measurement Commands

Caption

(Name)

Label3

Label7

Result lblDisplay

Caption

BackColor

Label7

Button Face

Special Effect Flat

(no Caption)

Button Light Shadow

Sunken

CommandButton1

Listbox2

(Name)

Caption

(Name)

CommandButton1

cmdMeasure

CommandButton1

Get IMM Measurement

Listbox2

lstMeasurement

Figure 24 shows the portion of the form detailed in Table 9.

84 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

Figure 24: The Measurement Commands frame

This frame groups the controls that allow the user to obtain any of the

immediate measurements summarized in Table 10.

Table 10: Measurements available in the Measurement Commands frame

AMPLITUDE HIGH PERIOD

AREA LOW PHASE

BURST MAXIMUM PK2PK

CAREA MINIMUM POVERSHOOT

CRMS NDUTY PWIDTH

FREQUENCY PDUTY PERIOD

Additions to the UserForm Initialize Routine

Next you will add the code that initializes the list box containing the

Measurement commands to choose from.

1.

Add the following code to the

UserForm_Initialize subroutine, just after the subroutine declaration:

' add GPIB immediate measurement commands to the list box

With lstMeasurement

.AddItem "AMPLITUDE"

.AddItem "AREA"

.AddItem "BURST"

.AddItem "CAREA"

.AddItem "CRMS"

.AddItem "DELAY"

.AddItem "FALL"

.AddItem "FREQUENCY"

.AddItem "HIGH"

.AddItem "LOW"

.AddItem "MAXIMUM"

.AddItem "MINIMUM"

.AddItem "NDUTY"

.AddItem "NOVERSHOOT"

.AddItem "NWIDTH"

.AddItem "PDUTY"

.AddItem "PERIOD"

.AddItem "PHASE"

.AddItem "PK2PK"

.AddItem "POVERSHOOT"

.AddItem "PWIDTH"

Oscilloscope Analysis and Connectivity Made Easy

85

The TekVISA Test Run Example in Excel VBA

.AddItem "RISE"

.AddItem "RMS"

.ListIndex = 0

End With

When the UserForm is initialized before it first displays, this code:

a.

Uses the Excel

AddItem

method to populate the lstMeasurement

list box with literal items to choose from.

Note: In this case, the items correspond to measurement commands that are valid with Tektronix TDS7000 Series oscilloscopes. Your Windows-based oscilloscope may use a slightly different command set.

b.

Uses the Excel

ListIndex property to set the first row in the list as the currently selected item in the list box, so that it appears preselected on the form.

The Get Immediate Measurement Button Routine

Next you will tackle the logic invoked when a user selects a measurement type from the list box, and then clicks the

Get IMM Measurement

button in the Measurement Commands frame.

1.

Press

Shift+F7

to switch to the UserForm, and double-click the

Get IMM Measurement

button.

VBA inserts the following code block:

Private Sub cmdMeasure_Click()

End Sub

2.

Type the following code inside the cmdMeasure_Click subroutine code block.

Dim strID As String

Dim s1 As String s1 = lstMeasurement.List(lstMeasurement.ListIndex) lblDisplay.Caption = "" ' clear the label which will

' display the result

' construct the GPIB command strID = "MEASUREMENT:IMMED:TYPE " & s1 & "; VAL?;:HEADER OFF"

' send the command

Tvc1.WriteString strID

' read the result and display it

lblDisplay.Caption = Tvc1.ReadString

86 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

When the

Get IMM Measurement

button is clicked, this code does the following:

a.

Declares a string variable to hold the GPIB measurement command.

b.

Uses the

Caption

property of an Excel

Label

control to clear the caption of the result Label, where the result of the measurement command will display.

c.

Builds a string containing compound native GPIB commands, with components separated by semicolons

(;).

1)

The

MEASUrement:IMMed:TYPE

command sets the measurement type. The runtime value returned by the lstMeasurement

list box’s

Text

property is concatenated with this command string.

2)

The

VAL? query requests the oscilloscope to return the value of the measurement specified by the

MEASUrement:IMMed:TYPe

command, over the currently selected channel.

3)

The

HEADER OFF command requests that query results be returned without the header.

d.

Uses the

WriteString

method of the TekVISA ActiveX

Control to send the measurement command string to the instrument.

e.

Uses the

ReadString

method of the TekVISA ActiveX

Control to read the result of the query sent with the

WriteString

method

f.

Assigns that result to the

Caption

property of the lblDisplay

Label control, so that it will appear on the form.

The Waveform Data Frame

The Waveform Data Frame Design

The Waveform Data frame allows immediate capture of waveform data at the current instrument settings. A check box gives users the option of displaying or omitting additional waveform values (record length, sample interval, and

trigger position). Table 11 summarizes the property changes to make to

controls in the Waveform Data frame.

Oscilloscope Analysis and Connectivity Made Easy

87

The TekVISA Test Run Example in Excel VBA

Table 11: Property changes to make in the Waveform Data frame

Control Property Change from Change to

Frame2

Label4

Label5

Label6

Label9

Label10

Label11

Label12

Label13

Listbox3

Listbox4

CommandButton2

CommandButton3

Checkbox2

Waveform Data frame (top right)

Caption Frame2

Waveform Data

Caption

Caption

Label4

Label5

Record Length

Interval

Caption

(Name)

Caption

BackColor

Label6

Label9

Label9

Button Face

Trigger Position lblRecLength

(no Caption)

Button Light Shadow

Special Effect Flat

(Name) Label10

Caption

BackColor

Label10

Button Face

Special Effect Flat

(Name) Label11

Caption

BackColor

Label11

Button Face

Sunken lblInterval

(no Caption)

Button Light Shadow

Sunken lblTrigPos

(no Caption)

Button Light Shadow

Special Effect

Caption

Caption

(Name)

(Name)

(Name)

Caption

Flat

Label12

Sunken

ActiveSheet Starting

Column

ActiveSheet Starting Row

Label13

Listbox3

Listbox4

lstColumn lstRow

CommandButton2

cmdClear

CommandButton2

Clear

(Name)

Caption

(Name)

Caption

CommandButton3

cmdGetWaveform

CommandButton3

Get Waveform

Checkbox1

Checkbox1

chkDisplayWF

Display Waveform Value

Value False

True

Figure 25 shows the portion of the form detailed in Table 11.

88 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

Figure 25: The Waveform Data frame

Additions to the UserForm

Initialize

Routine

Next you will add the code that initializes the column and row list boxes.

From these lists, the user chooses the starting column and row in which to display waveform data points and associated times.

Note:

You could also have implemented this feature with a spin box.

See the next chapter for an example that incorporates a spin box control.

1.

Add the following code to the

UserForm_Initialize subroutine:

' populate listboxes for Range specification of Waveform Data

For i = 1 To 52

If i <= 26 Then lstColumn.AddItem Chr$(i + 64)

Else lstColumn.AddItem "A" & Chr$(i + 38)

End If

Next lstColumn.ListIndex = 2

For i = 1 To 500 lstRow.AddItem (i)

Next

When the UserForm is initialized before it first displays, this code does the following:

a.

Uses the Excel

AddItem

method in a loop that fills in the lstColumn

list box with the letters A through Z and AA through AZ.

b.

Uses the Excel

ListIndex property to set column C as the currently selected item in the lstColumn list box, so that it appears preselected on the form.

c.

Uses the Excel

AddItem

method in a loop that fills in the lstRow

list box with the numbers 1 through 500.

Oscilloscope Analysis and Connectivity Made Easy

89

The TekVISA Test Run Example in Excel VBA

The Clear Button Routine

When the user clicks the

Clear

button in the Get Waveform frame, this code clears the range of cells where waveform data points and times appear, and clears the label captions where additional waveform values appear (if the check box is checked). This code is very similar to the code explained in the

last chapter beginning on page 63. Refer back to that explanation for a line-

by-line discussion.

1.

Just below the

Option Explicit

statement entered earlier, type the following to declare a module-scoped variable:

' module-scoped variable to hold reference to range specified

' by user

Dim HoldRange As Range

2.

Type the following cmdClear_Click

subroutine.

Private Sub cmdClear_Click()

' clear controls that display waveform data

If Not HoldRange Is Nothing Then

HoldRange.Clear

HoldRange.ClearContents

HoldRange.ClearFormats

End If lblRecLength.Caption = "" lblInterval.Caption = "" lblTrigPos.Caption = ""

End Sub

The Get Waveform Button Routine

Next you will work on the logic that executes when the user clicks the

Get

Waveform

button. This code is very similar to the code explained in Chapter

4 beginning on page 65. Refer to that explanation for a line-by-line

discussion.

The main addition here is some logic that allows the user to check a box if associated waveform fields (record length, interval, and trigger position) should be displayed. This example also illustrates some other Excel features, such as use of the

Cells

property and

NumberFormat

property of the

Range object.

1.

Type the following portion of the cmdGetWaveForm_Click subroutine, which initializes some variables, gets a waveform, and stores associated waveform fields:

Private Sub cmdGetWaveForm_Click()

' declare variables

Dim arrWF As Variant 'array variable which will hold

' waveform values

Dim xinc As Double ' variable which will hold the x axis

' increment

Dim trigpos As Long ' variable which hold the timing trigger

' position

Dim i As Long, tracker As Long ' counter variables

Dim arrLength As Long

Dim StartRow As Long, StartCol As Long, ValCol As Long

90 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

Dim HoldCol As String, hUnits As String, vUnits As String

Dim t As Double

Dim r As Range

On Error GoTo cmdGetWFMErr

'CH1 is the OCX built-in constant specifying Channel 1

Application.Cursor = xlWait

Call Tvc1.GetWaveform(CH1, arrWF, xinc, trigpos, vUnits, hUnits)

arrLength = UBound(arrWF) - LBound(arrWF) + 1

If IsArray(arrWF) Then ' check to be sure returned value is

Else

' an array lblRecLength.Caption = arrLength

Exit Sub

End If lblInterval.Caption = xinc lblTrigPos.Caption = trigpos

2.

Type the following logic that only executes if the user selected the check box:

If chkDisplayWF.Value = True Then ' if user wants values

' displayed, loop through

' the array

' Check to see if range values are specified.

If lstColumn.ListIndex <> -1 Then

StartCol = lstColumn.ListIndex + 1

ValCol = StartCol + 1

Else

GoTo SkipDisplay

End If

If lstRow.ListIndex <> -1 Then

StartRow = lstRow.ListIndex + 1

Else

StartRow = 1

End If

This code does the following:

a.

Checks the

Value

property of the chkDisplayWF

check box to see if the box was selected.

b.

Checks the runtime

ListIndex

property of the lstColumn and lstRow

list boxes to see if the user has selected items

(value not equal to -1).

c.

If the check box was selected and items were selected, this code:

1)

Adds 1 to the selected column location (since the list is 0-based) and saves it as

ValCol.

2)

Adds 1 to the selected row location (since the list is

0-based) and saves it as

StartRow.

Oscilloscope Analysis and Connectivity Made Easy

91

The TekVISA Test Run Example in Excel VBA

3.

Type the next part of the cmdGetWaveForm_Click subroutine:

' clear range reference

Set HoldRange = Nothing

' set up header info

ActiveSheet.Cells(StartRow, StartCol).Value = "Time"

ActiveSheet.Cells(StartRow, StartCol).Font.Bold = True

ActiveSheet.Cells(StartRow, ValCol).Value = "Value"

ActiveSheet.Cells(StartRow, ValCol).Font.Bold = True tracker = StartRow + 1

' set number format to show all the decimal points

Set r = ActiveSheet.Range(Cells(tracker, StartCol),

Cells(tracker + arrLength, StartCol)) r.NumberFormat = "#####.############"

Application.ScreenUpdating = False

For i = LBound(arrWF) To UBound(arrWF) t = (i - trigpos) * xinc

ActiveSheet.Cells(tracker, StartCol).Value = t

ActiveSheet.Cells(tracker, ValCol).Value = arrWF(i) tracker = tracker + 1

Next

Application.ScreenUpdating = True

Set HoldRange = ActiveSheet.Range(Cells(StartRow,

StartCol), Cells(tracker, ValCol))

End If

This code

a.

Initializes the range reference, then stores the headings in the spreadsheet, using the

Cells

property of the

ActiveSheet

object to access cell locations.

Note:

The

Cells

property uses R1C1-style (row/column) references. For example, cell C5 would be “C5” in A1 notation, but “R5C3” in R1C1 notation.

b.

Using the

Cells

property of the

Range

object, stores the single-column range of cells that will hold wavepoint data points in range variable r

, then sets the

NumberFormat

property of that Range object to display all the decimal points.

c.

Turns off screen updating, stores the waveform times and data points in the active sheet, then turns screen updating back on.

d.

Assigns the two-column range holding the waveform times and data points to range variable

HoldRange

, which is accessed and cleared by the cmdClear_Click subroutine.

92 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

4.

Type the last part of the cmdGetWaveForm_Click subroutine, which handles exception cases by changing the mouse pointer cursor from the hourglass back to the default arrow pointer, and re-enabling screen updating:

SkipDisplay:

Application.Cursor = xlDefault

Application.ScreenUpdating = True

Exit Sub

' rudimentary error trapping cmdGetWFMErr:

Application.Cursor = xlDefault

Application.ScreenUpdating = True

MsgBox "Error: " & Err.Number & ", " & Err.Description

End Sub

The Send GPIB Commands Frame

The Send GPIB Commands Frame Design

The Send GPIB Commands frame allows the user to send any valid GPIB command or query to the instrument. If the user types a GPIB query that

returns a value, the user must check a check box. Table 12 summarizes the

property changes to make to controls in the Send GPIB Commands frame.

Table 12: Property changes to make in the Send GPIB Commands frame

Control

Frame3

Textbox1

Label2

Label8

CommandButton4

CommandButton5

Checkbox1

Property Change from Change to

Send GPIB Commands frame (bottom left)

Caption Frame3

Send GPIB Commands

(Name)

Caption

Textbox1

Label2

txtGPIB

Result

(Name)

Caption

BackColor Button Face

Special Effect Flat

(Name)

Caption

Label8

Label8

lblManualResults

(no Caption)

Button Light Shadow

Sunken

CommandButton4

cmdSendCmd

CommandButton4

Send Command

(Name)

Caption

(Name)

Caption

CommandButton5

cmdClearMResults

CommandButton5

Clear

Checkbox1

Checkbox1

chkHasReturn

Has Return Value

Oscilloscope Analysis and Connectivity Made Easy

93

The TekVISA Test Run Example in Excel VBA

Figure 26 shows the portion of the form detailed in Table 12.

Figure 26: The Send GPIB Commands frame

The Clear Button Routine

When the user clicks the

Clear

button in the Send GPIB Commands frame, this routine clears the txtGPIB

text box where GPIB commands and queries are typed, and clears the lblManualResults

label caption where query results appear (if the check box is selected).

1.

Type the following cmdClearMResults_Click

subroutine:

Private Sub cmdClearMResults_Click()

' clear GPIB command controls txtGPIB.Text = "" lblManualResults.Caption = ""

End Sub

The Send Command Button Routine

Your next task is to address the logic invoked when the user types a GPIB command or query and then clicks the

Send Command

button.

1.

Type the following cmdSendCmd_Click

subroutine:

Private Sub cmdSendCmd_Click()

Dim strCmd As String, strResult As String

On Error GoTo cmdSendCmdErr

'send the user's GPIB command strCmd = txtGPIB.Text

Tvc1.WriteString strCmd

' check to see if the user expects a return value

If chkHasReturn.Value = True Then

strResult = Tvc1.ReadString

lblManualResults.Caption = strResult

Else lblManualResults.Caption = ""

End If

Exit Sub cmdSendCmdErr:

MsgBox "Error: " & Err.Number & ", " & Err.Description

End Sub

94 Oscilloscope Analysis and Connectivity Made Easy

The TekVISA Test Run Example in Excel VBA

When the user clicks the

Send Command

button, this code does the following:

a.

Declares a string variable to hold the GPIB command or query and another string variable to hold the query result, if any.

b.

Assigns the runtime value returned by the

Text

property of the txtGPIB

text box to the GPIB command string variable.

c.

Uses the

WriteString

method of the TekVISA ActiveX

Control to send the command string to the instrument.

d.

Checks the runtime

Value

property of the chkHasReturn check box to see if the user expects a result. If so, uses the

ReadString

method of the TekVISA ActiveX Control to read the result of the query sent with the

WriteString method.

f.

Assigns that result to the

Caption

property of the lblManualResults

Label control, so that it will appear on the form.

g.

If the check box wasn’t selected, stores a blank string in the Caption property of the lblManualResults

Label control.

h.

If clicking the

WriteString

button causes an error, control passes to the cmdSendCmdErr error routine, which prints an error message.

Running the TekVISA Test Run Program

The Show Form Routine

Now that you have created the form, the next step is to create a short routine that displays it when the user clicks a button on the spreadsheet.

1.

Expand the

Modules

folder in the Project Explorer window and double-click

Module1

.

2.

An empty page in the Code window appears.

3.

Type the following:

Option Explicit

Sub btnShowForm() frmTekVISATestRun.Show vbModeless

End Sub

Oscilloscope Analysis and Connectivity Made Easy

95

The TekVISA Test Run Example in Excel VBA

This code displays the

TekVISA Test Run

form with the display style set to the constant vbModeless

, meaning that the form is not modal.

Since it is modeless, no applications are suspended when the form is displayed, so the user need not respond to the form before using any other part of the application.

To add a button to the spreadsheet so you can run the program you just created:

1.

Press

Alt+F11

to switch from VBA to the Excel spreadsheet.

2.

If the Excel

Forms

Toolbar is not visible, select

View >

Toolbar > Forms

to display it.

3.

Double-click the

Button

icon and click in or near cell

A4

, the spot in the spreadsheet where you want to insert it.

The Assign Macro dialog box appears.

4.

Select the

ShowForm

module as the macro name and click

OK

.

5.

Right-click the button, select

Edit Text

, and change the button caption from

Button1

to

Show Form

.

6.

Select

File > Save

to save the

TekVISA Test Run.xls

spreadsheet, along with the VBA program you just created.

7.

Click away from the button if necessary to exit Design mode, and then click the

Show Form

button to run the program.

The TekVISA Test Run dialog box appears.

Note:

Even if you do not have a waveform source connected to

Channel 1 of your oscilloscope, you will still be able to pick up enough random noise to generate some data to verify that your program works.

8.

Modify your oscilloscope settings to prepare for a data transfer. Be sure to set the record length as part of this step.

9.

Click the buttons on the form.

You will see results similar to Figure 20. If an error occurs, switch to

VBA and debug the program.

96 Oscilloscope Analysis and Connectivity Made Easy

Using VB Instead of VBA

Using VB Instead of VBA

If you want to work this exercise using Visual Basic 6.0, you will need to create the form using that tool instead of Excel VBA. Refer to Chapter 8 for an example of how to use Visual Basic 6.0 controls to design a form.

Figure 27 shows a VB 6.0 version of the four-part

TekVISA Test Run

example discussed in this chapter. This program was saved under the project name

p_CH5VB.vbp

on the CD that accompanies this book. Notice that a list box has been used to display the waveform data points in this example, since there is no spreadsheet.

Figure 27: Visual Basic 6.0 version of the TekVISA Test Run program

You will also have to make some changes to the code. Where you used the

VBA

UserForm

class with the

Initialize

event, substitute the VB

Form

class with the

Load

event. Therefore, instead of creating a

UserForm_Initialize()

subroutine, you will create a

Form_Load()

subroutine in VB 6.0 as shown here:

Private Sub Form_Load()

Instead of using a spreadsheet to store the waveform data points, you will use a list box named lstWF

in the form. The GetWaveform routine is shown here:

Private Sub cmdGetWaveForm_Click()

' declare variables

Dim arrWF As Variant 'array variable which will hold waveform values

Dim xinc As Double ' variable which will hold the x axis increment

Dim trigpos As Long ' variable which hold the timing trigger

' position

Dim i As Long ' counter variable

Dim vUnits As String, hUnits As String

On Error GoTo cmdGetWFMErr

'CH1 is the OCX built-in constant specifying Channel 1

Oscilloscope Analysis and Connectivity Made Easy

97

Chapter 5 Review

Call Tvc1.GetWaveform(CH1, arrWF, xinc, trigpos, vUnits, hUnits)

If IsArray(arrWF) Then ' check to be sure returned value is an

' array

Else lblRecLength.Caption = UBound(arrWF) - LBound(arrWF) + 1

Exit Sub

End If lblInterval.Caption = xinc lblTrigPos.Caption = trigpos

If chkDisplayWF.Value = vbChecked Then ' if user wants values

' displayed, loop through the array

For i = LBound(arrWF) To UBound(arrWF) lstWF.AddItem arrWF(i)

Next

End If

Exit Sub cmdGetWFMErr:

MsgBox "Error: " & Err.Number & ", " & Err.Description

End Sub

Chapter 5 Review

To review what you learned in Chapter 5:

• The

TekVISA Control

includes methods and properties that allow you to find resources, get waveforms, send commands, and get results.

• The

Excel object model

includes objects and properties that allow you to access and insert values into cell ranges programmatically.

• You can check

Runtime properties

of VBA controls to determine user interaction with a VBA form

• You can use the

TekVISA Test Run

program designed in this chapter to send a variety of commands and display the results on a form, and to get waveforms and display them in your spreadsheet or on the form itself (in the case of the VB version).

98 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 6:

A Measurement Charting Example

Using VBA to write a program that plots measurement against time

Introduction

The purpose of this chapter is to demonstrate how to perform real-time capture and charting in an Excel VBA or VB 6.0 application. In this chapter, you will build a program that repeatedly gets measurements at specified intervals for a specified length of time, and then plots those results in a chart.

The program builds on information learned in previous chapters, and introduces some new controls and programming techniques. Most of the code has to do with setting up the chart and controlling the timer control. Unlike previous examples, the program includes several subroutines that are triggered by calls from other routines, rather than by user actions or system events.

Besides teaching you more about VBA programming, this example may prove useful in your daily work, since you can easily customize it.

What You Need to Get Started

You can work this example either on a separate PC or on your Windowsbased oscilloscope, using either Excel’s built-in VBA or Visual Basic 6.0. To get started, you will need the following:

• A Windows-based Tektronix oscilloscope (an external monitor is recommended if you are working the example on your oscilloscope)

• Excel 2000 or XP (or Visual Basic 6.0) installed on your oscilloscope or on an external PC

• The TekVISA connectivity software described in Chapter 1

(see page 323 for the location of the completed example)

Oscilloscope Analysis and Connectivity Made Easy 99

Introduction

What You Will Do

In this chapter, you will build a sample VBA program that

• issues native GPIB commands to capture immediate measurement data

• sets the time interval for repeatedly capturing data

• sets the length of time for the data capture

• plots the results in an Excel spreadsheet and chart.

Figure 28 shows the design-time interface that you will create. As you can

see, the user interface includes some list boxes, check boxes, labels, command buttons, and a frame that groups some new controls called

spin buttons

. This user form allows you to interact with your oscilloscope in the following ways:

• in the first list box, you can choose a

measurement command

to send

• in the second list box, you can choose the

time interval

(for example, every 30 seconds) for sending the measurement command

• in the third list box, you can choose the

duration

(for example, 2 seconds) for sending the measurement command

• in the labels next to the spin buttons, you can choose the spreadsheet row and column

location

to begin inserting the measurement data

• in the two check boxes, you can decide whether or not to

chart

the results and whether or not to display the chart results once after the duration of the measurement period has expired or continuously as each measurement is taken

• the command buttons allow you to

start

and

stop

sending the measurement command, and

close

the form

100 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Figure 28: The form you will design for the Chart Measurements example

Figure 29 shows the same UserForm at runtime after fields have been filled

in with results in all areas of the form.

Oscilloscope Analysis and Connectivity Made Easy

101

Introduction

Figure 29: The Chart Measurements form at runtime

Figure 30 shows the measurement data in the spreadsheet and the charted

results. The measurement data is plotted if the Chart Measurements check box is selected on the form. The display doesn’t take place until data capture has completed if the Display At Completion check box is selected.

102 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Figure 30: Chart Measurements plotted results

What You Will Learn

In this chapter, you will:

• build a form with more expanded functionality than the previous example

including the use of spin button controls and a Close button

• learn how to use the Excel ChartObject

• learn how to add timing considerations to your solutions

• learn how to hide or show a frame on a form

• learn how to close a form

• review the use TekVISA ActiveX Control operations to send native GPIB measurement commands and queries to your oscilloscope and get back results

Oscilloscope Analysis and Connectivity Made Easy

103

The Chart Measurements Example in Excel VBA

• add a button to run this VBA program from your Excel spreadsheet

• find out the changes you will need to make if you want the program to run in Visual Basic 6.0 instead of Excel

The Chart Measurements Example in Excel VBA

Building the Form

This chapter focuses primarily on the VBA code and assumes you are already familiar with VBA visual editing tools for constructing dialog interfaces. For step-by-step instructions on designing a form for the VBA

design environment, refer to page 48.

To begin building the UserForm:

1.

Open Excel and save the spreadsheet under the name

ChartMeasurement.xls

.

2.

Press

ALT+F11

to access the Visual Basic for Applications design environment from within Excel.

3.

Insert a UserForm by clicking the

Insert UserForm

icon on the VBA Standard Toolbar.

4.

Rename the UserForm

Measurement Demo

.

5.

If necessary, follow the instructions on page 51 to add the

TekVISA ActiveX Control to the Controls Toolbox.

6.

Drag the TekVISA Control icon onto the Userform.

7.

Add controls to design the Userform, making sure that each

control is placed as shown in Figure 31. Note the use of two

spin button controls inside

Frame1

.

Note:

It is not necessary to drag the controls onto the form in the exact order shown; however, doing so will help you verify that you have changed all the properties correctly.

Changing Properties in the Properties Window

Table 13 summarizes all the changes to make in the Properties window to convert the UserForm from its appearance in Figure 31 to its final

appearance.

104 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

Figure 31: Chart Measurements form before changing default captions and appearance of controls

After changing the name, captions, and other properties itemized in the table

and resizing controls, the form will look like Figure 32 (the TekVISA control

icon is hidden behind one of the list boxes).

Figure 32: The redesigned form for Chart Measurements

Table 13: Changes to make in the Properties window to Chart Measurements

Control

UserForm1 tvc (TekVISA)

Label1

Label2

Label3

Label4

Label10

Listbox1

Listbox2

Property Change from

Caption

(Name)

Caption

Caption

Caption

Caption

(Name)

Caption

Special Effect Flat

(Name) Listbox1

(Name) Listbox2

UserForm1

Tvc1

Label1

Label2

Label3

Label4

Label10

Label10

Change to

Measurement Demo

Tvc1 (no change needed)

Measurement

Second Intervals

Duration (min.)

Record Length lblRL

(no Caption)

Sunken lstM lstInterval

Oscilloscope Analysis and Connectivity Made Easy

105

The Chart Measurements Example in Excel VBA

Control

Listbox3

CommandButton1

CommandButton2

CommandButton3

Checkbox1

Checkbox2

Frame1

Label5

Label6

Label7

Label8

Label9

SpinButton1

SpinButton2

Property Change from Change to

(Name)

(Name)

Caption

(Name)

Caption

(Name)

Caption

Listbox3

lstDuration

CommandButton1

cmdStart

CommandButton1

Start Measurement

CommandButton2

cmdStop

CommandButton2

Stop Measurement

CommandButton3

cmdClose

CommandButton3

Close

(Name)

Caption

(Name)

Caption

Checkbox1

Checkbox1

Checkbox2

Checkbox2

chkPaintOnce

Display At Completion chkMakeChart

Chart Measurements

Starting Cell Selection frame

Caption Frame1

Caption

Caption

(Name)

Caption

Label5

Label6

Label7

Label7

Starting Cell Selection

Column

Row lblCol

Special Effect

(Name)

Flat

Label8

(no Caption)

Sunken lblRow

Caption Label8

Special Effect Flat

(Name)

Caption

Label9

Label9

Special Effect Flat

ForeColor Black

(Name)

Max

SpinButton1

100

Min

(Name)

Max

Min

0

SpinButton2

100

0

(no Caption)

Sunken lblCell

(no Caption)

Sunken

Blue (select from Palette) spnCol

52

1 spnRow

300

1

106 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

Initialization

Module Level Variable Declarations

First you will define some variables that can be accessed by all the subroutines in the code module:

1.

Press

F7

to switch to the Code window.

2.

Type the following statement so VBA will ensure that variables are defined before you use them:

Option Explicit

3.

Type the following variable declarations, whose purposes are well commented in the code:

Dim StopTimerCount As Long ' variable for holding when timer

' should stop

Dim tInterval As Double ' variable for holding user-specified

' capture interval

Dim strMeas As String ' variable for sending immediate

' measurement command to scope

Dim blnStopFlag As Boolean ' variable to flag whether the user

' wished to halt measurements

Dim RefChart As Chart ' reference variable for inserted chart

' Windows API function used to create a timed interval for

' measurement capture

Private Declare Function GetTickCount Lib "kernel32" () As Long

Since

GetTickCount

is a Windows API function, you need only declare it before you can use it.

The UserForm Initialize Routine

This code executes immediately before the UserForm is first displayed. It initializes spin controls, list boxes and result label captions.

1.

Type the following statements to set default spin control values and associated result label captions:

Private Sub UserForm_Initialize()

Dim i As Integer

' initialize the spin control values and default cell

' for measurement capture spnCol.Value = 3 lblCol.Caption = "C" spnRow.Value = 1 lblRow.Caption = "1" lblCell.Caption = "C1"

2.

Type the following code block to fill in the lstM

list box.

This code is similar to the code explained in the last chapter

beginning on page 85. Refer back to that explanation for a

detailed discussion.

' populate the list box with immediate measurement GPIB

' commands

With lstM

Oscilloscope Analysis and Connectivity Made Easy

107

The Chart Measurements Example in Excel VBA

.AddItem "AREA"

.AddItem "BURST"

.AddItem "CRMS"

.AddItem "DELAY"

.AddItem "FALL"

.AddItem "HIGH"

.AddItem "FREQUENCY"

.AddItem "MAXIMUM"

.AddItem "MINIMUM"

.AddItem "NDUTY"

.AddItem "NOVERSHOOT"

.AddItem "NWIDTH"

.AddItem "PDUTY"

.AddItem "PERIOD"

.AddItem "PK2PK"

.AddItem "POVERSHOOT"

.AddItem "PWIDTH"

.AddItem "RISE"

.AddItem "RMS"

.ListIndex = 0

End With

3.

Type the following code block to fill in the lstInterval

list box with values ranging from .25 to 100 minutes:

' populate the interval list box

With lstInterval

.AddItem ".25"

.AddItem ".50"

For i = 1 To 100

Next

.AddItem i lstInterval.ListIndex = 1

End With

4.

Type the following code block to fill in the lstDuration

list box with values ranging from 20 seconds to 120 seconds, in

5 second intervals. This code also preselects a duration of 3 minutes in the list box, and sets the default record length that appears in the lblRL

result label caption to 120 records.

' populate the duration list box

With lstDuration

.AddItem ".3333 (20 seconds)"

.AddItem ".5 (30 seconds)"

.AddItem ".75 (45 seconds)"

.AddItem "1"

For i = 5 To 120 Step 5

.AddItem i

Next

End With lstDuration.ListIndex = 3 lblRL.Caption = "120"

End Sub

108 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

Choosing Measurements

These routines respond to events triggered by user actions, such as selecting from a list box or clicking a command button.

Command Button Routines

First you will add the code that is invoked when the user clicks one of the command buttons on the form.

1.

Type the following code, which executes when the user clicks the

Start Measurement

button:

Private Sub cmdStart_Click() blnStopFlag = False

' build the GPIB command to send

strMeas = "MEASUREMENT:IMMED:TYPE " & lstM.List(lstM.ListIndex) &

";VAL?;:HEADER OFF"

Call CaptureMeasurements

End Sub

This code:

a.

Initializes the Boolean stop flag to

False.

b.

Builds the measurement command to send (see similar

code on page 86 for details). In this case, you

concatenate the command string with the runtime value returned by the list box’s

List

property. This concatenated value corresponds to the measurement

command (see Table 10) selected by the user from the

lstM

list box.

Note:

This code uses the

List

property rather than the

Text property because Text is not reliably assigned in Microsoft

Office MSForm library list boxes, even if

ListIndex

<> -1, indicating that a selection has been made.

c.

Calls the

CaptureMeasurements

subroutine (on page

110) to send the measurement command to the

oscilloscope and get the results.

2.

Type the following code that sets the stop flag to

True

when the user clicks the

Stop Measurement

button:

Private Sub cmdStop_Click() blnStopFlag = True

End Sub

Oscilloscope Analysis and Connectivity Made Easy

109

The Chart Measurements Example in Excel VBA

3.

Type the following code, which unloads the form (removes it from memory and reclaims all memory associated with the form) when the user clicks the

Close

button:

Private Sub cmdClose_Click()

Unload frmMeasurement

End Sub

Capture Measurements Routine

After the user clicks the

Start Measurement

button, this routine sends the measurement command selected by the user to the oscilloscope. It also uses a

Timer function to calculate the interval selected by the user.

1.

Type the following variable declarations, which are explained by program comments:

Private Sub CaptureMeasurements()

' This routine sends measurement commands and uses the

' GetTickCount Windows API function to calculate the interval

' by the user

Dim ret As Variant ' gets return value from TekVISA control

Dim r1 As Range, r2 As Range, r3 As Range ' Range variables

' variables used to hold return values from the GetTickCount

' function and to calculate whether user-specified interval

' has elapsed

Dim StartTime As Long

Dim EndTime As Long

Dim DiffTime As Long

'variable to hold interval in milliseconds

Dim interval As Long

'variable to track the number of captures

Dim tracker As Long

'variables for use in specifying ranges

Dim RefCol As Long

Dim RefRow As Long, StartRow As Long

' variable to hold user choice on drawing a chart

Dim blnDrawChart As Boolean

'variable to hold user choice on single or multiple painting

'of screen

Dim blnPaintOnce As Boolean

2.

Type the first logic of this routine, which disables screen updating and changes the cursor to an hourglass symbol if the user selected the

Display at Completion

check box:

' turn off screen updating if we are painting the active sheet

' only once

If chkPaintOnce.Value = True Then

Application.Cursor = xlWait

Application.ScreenUpdating = False blnPaintOnce = True

End If

3.

Type the next code segment, which saves the runtime value of the

Chart Measurements

check box. If that value is true and the

Display at Completion

check box is false, the program calls the

InsertChart

subroutine (on page 118) to

insert an empty chart into the active sheet.

110 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA blnDrawChart = chkMakeChart.Value

' determine whether to insert chart before we begin

' measurement captures

If blnDrawChart = True And blnPaintOnce = False Then

Call InsertChart

End If

4.

Type the next code segment:

'bind range to user specified starting cell

Set r1 = ActiveSheet.Range(lblCell.Caption)

' assign measurement selection to starting cell and make bold r1.Value = lstM.List(lstM.ListIndex) r1.Font.Bold = True

' get row and column values for use in loop below

StartRow = r1.Row

RefRow = r1.Row

RefCol = r1.Column

This code:

a.

Gets the runtime value of the

Caption

property of the lblCell

label, which contains the starting spreadsheet cell location selected by the user.

b.

Returns a

Range

object with the user-selected location as an absolute cell value in the active worksheet.

c.

Assigns that result to r1

, a variable of data type

Range.

d.

Sets the cell location in r1 to the runtime value selected in the lstM

list box (for example, if the user selected the

Period

” measurement command, that name is stored as a header).

e.

Sets the

Font

property to

Bold

for the cell location stored in r1.

f.

Assigns the number of the first row in the first area in

Range r1

to counter variables

StartRow

and

RefRow.

g.

Assigns the number of the first column in the first area in

Range r1

to a counter variable named

RefCol.

5.

Type the next code segment:

' The GetTickCount function returns the number of

' milliseconds elapsed since midnight. The second specified

' by user must be multiplied by 1000 for use below interval = tInterval * 1000

StartTime = GetTickCount() ' get out first startng time tracker = 0

Oscilloscope Analysis and Connectivity Made Easy

111

The Chart Measurements Example in Excel VBA

This code:

a.

Multiplies the user-specified capture interval (obtained from the

CalcRecordLength

routine on page 115) by

1000 since the

GetTickCount function deals in milliseconds, and stores the result in the interval variable.

b.

Saves the output from the

GetTickCount

function in the

StartTime

counter variable.

c.

Initializes the counter variable that tracks the number of data captures performed.

6.

Type the next code segment:

Do While tracker < StopTimerCount

If blnStopFlag Then GoTo StopFlag ' exit but leave form

' open if user flags a stop

EndTime = GetTickCount

DiffTime = EndTime - StartTime

If DiffTime >= interval Then ' time to get a measurement

' send command

Tvc1.WriteString strMeas

' get results and format them

ret = Tvc1.ReadString

ret = Format(ret, "#.#######")

' increment the row for assigning measurement value

RefRow = RefRow + 1

Set r2 = ActiveSheet.Cells(RefRow, RefCol) r2.Value = ret

If blnDrawChart = True And blnPaintOnce = False Then

' bind a new Range variable to all currently

' captured measurements

Set r3 = ActiveSheet.Range(Cells(StartRow, RefCol),

Cells(RefRow, RefCol))

Call DrawChart(r3) ' update the chart

End If

StartTime = EndTime ' assign the EndTime as the new

' StartTime for a new interval tracker = tracker + 1 ' increment the tracking

' variable

End If

' make sure Windows messages are processed so stop

' request by user (cmdStop_Click event) can be captured

DoEvents

Loop

' Build chart at end if requested by user

If blnDrawChart = True And blnPaintOnce = True Then

Call InsertChart

Set r3 = ActiveSheet.Range(Cells(StartRow, RefCol),

Cells(RefRow, RefCol))

Call DrawChart(r3)

End If

' make sure to set cursor and screen updating back

Application.Cursor = xlDefault

Application.ScreenUpdating = True

' ensure we draw everything

Unload frmMeasurement

StopFlag:

Exit Sub

112 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

While the counter that tracks the number of data captures is less than the value of

StopTimerCount

(set in the

CalcRecordLength routine

on page 115), this code executes a

DO

loop that:

a.

Jumps to the end of the

CaptureMeasurements

routine if the

Stop Measurement

button was clicked (which sets the stop flag to

True

).

b.

Gets the current time from the

GetTickCount

function, decrements the starting time from it and saves the difference.

c.

If the difference is greater than or equal to the value of interval

, the program.

1)

Sends the measurement command selected by the user, gets the query result, formats it with the correct number of decimal points, and stores it in the ret variable.

2)

Increments the row value by 1 and uses it to obtain an R1C1-style cell value, returned by the

Cells property of the active sheet.

3)

Converts the R1C1-style value to an A1-style value by storing it in intermediate

Range

variable r2.

4)

Assigns the query returned value in ret

to the cell in r2.

5)

If the

Chart Measurements

check box is selected and the

Display on Completion

check box is cleared:

a)

Gets the

Range

object containing data captured so far.

b)

Saves it in

Range

variable r3.

c)

Passes it to the

DrawChart

routine (on page 119)

to do an interim update of the chart display.

d.

Assigns the

EndTime

value returned by the

GetTickCount

function as the new starting time for a new interval.

e.

Increments the tracker counter that tracks the number of data captures.

f.

Uses the

DoEvents

function to pass control to the operating system, to make sure Windows messages are processed so the program can detect whether the user clicked the

Stop Measurements

button.

Oscilloscope Analysis and Connectivity Made Easy

113

The Chart Measurements Example in Excel VBA

g.

After the time interval has elapsed, if both check boxes were selected:

1)

Calls the

InsertChart

routine (on page 118) to insert

an empty chart into the active sheet.

2)

Gets the

Range

object containing all the data captured.

3)

Saves it in

Range

variable r3.

4)

Passes it to the

DrawChart

routine (on page 119) to

plot all the captured measurements.

h.

Sets the cursor back to the default mouse pointer arrow and re-enables screen updating to ensure that the chart appears on the screen.

i.

Unloads the form, which removes it from memory and reclaims all memory associated with the form.

7.

Type the last code segment, which provides a code block that is called by the VBA runtime for error handling when an error occurs:

CaptureMSErr:

MsgBox "Error " & Err.Number & ": " & Err.Description

Application.Cursor = xlDefault

Application.ScreenUpdating = True

End Sub

List Box Routines

Now you will add the code that is invoked when the user makes a selection from one of the list boxes on the form.

1.

Type the following code, which calls the

CalcRecordLength

function (on page 115) when the user selects a data capture

time duration from the lstDuration

list box:

Private Sub lstDuration_Click()

CalcRecordLength

End Sub

2.

Type the following code, which calls the

CalcRecordLength function when the user selects a time interval between data captures from the lstInterval

list box:

Private Sub lstInterval_Click()

CalcRecordLength

End Sub

114 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

3.

Type the following code, which calls the

CalcRecordLength function when the user selects a measurement command from the lstM

list box:

Private Sub lstM_Click()

CalcRecordLength

End Sub

Calculate Record Length Routine

Next you will look at the logic used to calculate the record length of the captured data, based on user selections from list boxes.

1.

Type the following code, which initializes variables and tests to see if the user has selected anything from the lstInterval or lstDuration

list boxes:

Private Sub CalcRecordLength()

Dim rLength As Long

Dim duration As Double

Dim strD As String

' routine which calculates the appropriate interval for the

' timer and calculates the number of times the timer will

' fire; called in control events which change the interval

' and duration of the measurements

' items not selected in list boxes

If lstInterval.ListIndex = -1 Then Exit Sub

If lstDuration.ListIndex = -1 Then Exit Sub

2.

Type the next code segment:

' code below uses the List property rather than the

' Text property because Text is not reliably assigned in

' MSForm listboxes even if ListIndex <> -1 tInterval = Val(lstInterval.List(lstInterval.ListIndex)) strD = lstDuration.Text

' calculate the record length; need to accommodate

' subminute durations

Select Case strD

Case ".3333 (20 seconds)" duration = 20

Case ".5 (30 seconds)" duration = 30

Case ".75 (45 seconds)" duration = 45

Case Else duration =

CLng(lstDuration.List(lstDuration.ListIndex)) * 60

End Select

This code:

a.

Assigns the numeric value of the currently selected entry in the lstInterval

list box to a variable named tInterval.

Oscilloscope Analysis and Connectivity Made Easy

115

The Chart Measurements Example in Excel VBA

b.

Assigns the text in the currently selected entry in the lstDuration

list box to a variable evaluated in subsequent

CASE

statements.

c.

Handles special cases where the duration is less than a minute.

d.

For all other cases, calculates the record length by converting and rounding up the currently selected entry in the lstDuration

list box to a long integer value, multiplying the value times 60 seconds, and storing the result in a variable named duration.

3.

Type the following: rLength = CLng(duration / tInterval)

StopTimerCount = rLength ' assign value to variable used

' by CaptureMeasurements routine lblRL.Caption = rLength ' display record length

End Sub

This code:

a.

Divides the duration by the time interval, converts and rounds up the result to a long integer, and stores the result as the record length.

b.

Uses the result as the upper limit that ends the

DO

loop in the

CaptureMeasurements

routine on page 110.

c.

Assigns the result to the

Caption

property of the lblRL

Label control, so that it will appear on the form.

Displaying Results

This set of routines handles the display of measurement results in spreadsheet cells and in an Excel chart.

Check Box Routine

This routine evaluates whether the user selected the Chart Measurements check box, and hides or shows the related frame on the form based on the result.

1.

Type the following code, which sets the

Visible

property of the fraCellSelection

frame, based on the value of the chkMakeGraph

check box:

Private Sub chkMakeGraph_Click()

If chkMakeGraph.Value = True Then fraCellSelection.Visible = True

Else fraCellSelection.Visible = False

End If

End Sub

116 Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

Spin Button Routines

The next few code blocks handle the spin buttons from which the user selects starting spreadsheet row and column values.

1.

Type the following:

Private Sub spnCol_SpinDown()

' user may choose columns from A to AZ

Dim i As Integer i = spnCol.Value

If i <= 26 Then lblCol.Caption = Chr$(i + 64)

Else lblCol.Caption = "A" & Chr$(i + 38)

End If

BuildCell

End Sub

When the user selects a column value from the spnCol

spin button by clicking the lower button, this code

a.

converts the selected column value to an alphabetic character between A and AZ

b.

assigns the result to the

Caption

property of the lblCol

label control, so that it appears on the form

c.

calls the

BuildCell

subroutine, which uses this column component to build a row/column cell value

2.

Type the following similar code, which executes when the user selects a column value by clicking the upper button of the spnCol

control:

Private Sub spnCol_SpinUp()

' user may choose columns from A to AZ

Dim i As Integer i = spnCol.Value

If i <= 26 Then lblCol.Caption = Chr$(i + 64)

Else lblCol.Caption = "A" & Chr$(i + 38)

End If

BuildCell

End Sub

3.

Type the following:

Private Sub spnRow_SpinDown()

' row values specified by the Min and Max range properties

' of the spnRow control lblRow.Caption = spnRow.Value

Call BuildCell

End Sub

Oscilloscope Analysis and Connectivity Made Easy

117

The Chart Measurements Example in Excel VBA

When the user selects a row value from the spnRow

spin button by clicking the lower button, this code

a.

assigns the selected row value to the

Caption

property of the lblRow

label control, so that it appears on the form

b.

calls the

BuildCell

subroutine, which uses this row component to build a row/column cell value

4.

Type the following similar code, which executes when the user selects a row value by clicking the upper button of the spnRow

control:

Private Sub spnRow_SpinUp()

' row values specified by the Min and Max range properties of

' the spnRow control lblRow.Caption = spnRow.Value

Call BuildCell

End Sub

5.

Type the following code, which concatenates the row and column captions to form the caption of the lblCell

label, where the starting cell value appears on the form:

Private Sub BuildCell()

'Concatenate label captions to specify starting cell lblCell.Caption = lblCol.Caption & lblRow.Caption

End Sub

Insert Chart Routine

This routine is called into play when the user decides to chart the captured measurement results.

Figure 33 shows how charts are incorporated in the Excel object model. A

chart can appear as its own sheet or on a worksheet. A

ChartObjects collection on a worksheet is made up of

ChartObject

objects, each of which represents an embedded chart on a specified sheet and acts as a container for a

Chart

object. You can use properties and methods for the

ChartObject object to control the appearance and size of an embedded chart on a sheet.

118

Figure 33: How the Excel model incorporates charts

Oscilloscope Analysis and Connectivity Made Easy

The Chart Measurements Example in Excel VBA

1.

Type the following:

Sub InsertChart()

' this code inserts a chart into the activesheet

Dim ws As Worksheet

Dim cos As ChartObjects

Dim co As ChartObject

Dim c As Chart

Set ws = ActiveSheet

Set cos = ws.ChartObjects

Set co = cos.Add(Left:=20, Top:=50, Width:=400,

Height:=250)

Set RefChart = co.Chart

RefChart.ChartType = xlLineStacked

End Sub

This code:

a.

Declares array variables that represent parts of the Excel object model, including a

Worksheet

object, a

ChartObjects

Chart

object.

collection, a

ChartObject

object, and a

b.

Assigns the active sheet in the active workbook to the

Worksheet

variable named

ws.

c.

Assigns the

ChartObjects

collection on the active worksheet to the variable named cos.

d.

Uses the

Add

method with the

ChartObjects

collection to return a

ChartObject named co

, which is an empty embedded chart whose location and size are specified in points and are relative to the A1 cell position (note the use of

named arguments

syntax with the assignment symbol :=).

e.

Uses the

Chart

property to return the

Chart

contained in the

ChartObject

named co

, and creates an object reference by assigning the returned

Chart

to the variable

RefChart.

f.

Sets the

ChartType

property of the referenced chart to the Excel constant xlLineStacked

, which makes it a stacked line chart.

Draw Chart Routine

This code draws the plotted measurements chart, either in its entirety or by updating it in stages, depending on whether the

Display at Completion

check box was selected.

Oscilloscope Analysis and Connectivity Made Easy

119

The Chart Measurements Example in Excel VBA

1.

Type the following:

Sub DrawChart(r As Range)

' Update the chart

RefChart.SetSourceData Source:=r, PlotBy:=xlColumns

End Sub

This code uses named argument syntax with the

SetSourceData method to:

a.

Set the source data range of the referenced chart to the range passed to the

DrawChart

routine, and

b.

Specify that the chart will be plotted by column.

Running the Chart Measurements Program

The Show Form Routine

Now that you have created the form, it is time to create a short routine that displays it when the user clicks a button on the spreadsheet.

1.

Expand the

Modules

folder in the Project Explorer window and double-click

Module1

.

2.

An empty page in the Code window appears.

3.

Type the following:

Option Explicit

Sub btnShowForm() frmMeasurement.Show vbModeless

End Sub

This code displays the

Measurement

form with the display style set to the constant vbModeless

, meaning that the form is not modal.

Since it is modeless, no applications are suspended when the form is displayed, so the user need not respond to the form before using any other part of the application.

To add a button to the spreadsheet to run this program:

1.

Press

Alt+F11

to switch from VBA to the Excel spreadsheet.

2.

If the Excel

Forms

Toolbar is not visible, select

View >

Toolbar > Forms

to display it.

3.

Double-click the

Button

icon and click in or near cell

A4

, the spot in the spreadsheet where you want to insert it.

The Assign Macro dialog box appears.

4.

Select the

ShowForm

module as the macro name and click

OK

.

120 Oscilloscope Analysis and Connectivity Made Easy

Using VB Instead of VBA

5.

Right-click the button, select

Edit Text

, and change the button caption from

Button1

to

Show Form

.

6.

Select

File > Save

to save the

Measurement.xls

spreadsheet, along with the VBA program you just created.

7.

Click away from the button if necessary to exit Design mode, and then click the

Show Form

button to run the program.

The Measurement Demo dialog box appears.

Note:

Even if you do not have a waveform source connected to

Channel 1 of your oscilloscope, you will still be able to pick up enough random noise to generate some data to verify that your program works.

8.

Click the buttons on the form.

You will see results similar to Figure 29 and Figure 30. If an error occurs,

switch to VBA and debug the program

Using VB Instead of VBA

If you want to work this exercise using Visual Basic 6.0, you will need to create the form using that tool instead of Excel VBA. Refer to Chapter 7 for an example of how to use Visual Basic 6.0 controls to design a form.

Figure 34 shows a VB 6.0 version of the

Chart Measurement

program discussed in this chapter. This program was saved under the project name

p_CH6VB.vbp

on the CD that accompanies this book.

Oscilloscope Analysis and Connectivity Made Easy

121

Using VB Instead of VBA

122

Figure 34: Visual Basic 6.0 version of Chart Measurement program

This version of the program differs from the VBA version in a number of ways:

• Where you used the VBA

UserForm

class with the

Initialize

event, substitute the VB

Form

class with the

Load

event.

Therefore, instead of creating a

UserForm_Initialize()

subroutine, you will create a

Form_Load()

subroutine in VB

6.0 as shown here:

Private Sub Form_Load()

• This version of the program uses combo boxes instead of list boxes to hold duration and interval information. In this example, the record length is recalculated if the user changes values inside the combo box by clicking or entering a new value:

Private Sub cboDuration_Click()

CalcRecordLength

End Sub

Private Sub cboDuration_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then CalcRecordLength

End Sub

Private Sub cboDuration_LostFocus()

CalcRecordLength

End Sub

Private Sub cboMeasurement_Click()

CalcRecordLength

End Sub

Private Sub cboTimerInterval_Click()

CalcRecordLength

End Sub

Oscilloscope Analysis and Connectivity Made Easy

Using VB Instead of VBA

Private Sub cboTimerInterval_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then CalcRecordLength

End Sub

Private Sub cboTimerInterval_LostFocus()

CalcRecordLength

End Sub

• Instead of using a spreadsheet to store the measurement data point results, this version uses a list box named lstResults

to display the data in the form itself:

Private Sub timMEAS_Timer()

Dim r

If NotifyCount >= StopTimerCount Then timMEAS.Enabled = False

DrawChart

Exit Sub

End If

Tvc1.WriteString strID r = Tvc1.ReadString

r = Format(r, "#.#######")

If chkShowData.Value = 1 Then lstResults.AddItem r

End If arr(NotifyCount, 0) = r

NotifyCount = NotifyCount + 1

Call DrawChart

DoEvents

End Sub

• The

Clear

button is used to clear this list (as well as the related chart):

Private Sub cmdClear_Click()

Call cmdStop_Click lstResults.Clear

ReDim arr(0, 0) arr(0, 0) = 0

DrawChart

End Sub

• The form also contains an MSChart control (included with

Visual Basic) for charting captured measurements:

Private Sub Form_Load()

Dim i As Long

Dim axisID As VtChAxisId timMEAS.Enabled = False axisID = VtChAxisIdX

With TVCChart

.chartType = VtChChartType2dLine

.Plot.Axis(axisID).AxisScale.Type = VtChScaleTypeLinear

.Plot.Axis(axisID).AxisScale.Hide = True

.Plot.Axis(axisID).AxisGrid.MajorPen.Style =

.Plot.Axis(axisID).AxisGrid.MinorPen.Style =

VtPenStyleNull

VtPenStyleNull

Oscilloscope Analysis and Connectivity Made Easy

123

Chapter 6 Review

End With

Private Sub DrawChart()

TVCChart.Repaint = False

TVCChart.ChartData = arr

TVCChart.Repaint = True

End Sub

• This chart control requires related code to handle a

2-dimensional array:

Option Explicit

Dim arr() ' array for holding measurement values that are

' charted, chart requires a two-dimensional array

Dim NotifyCount As Long ' counter variable for tracking

' measurements

Private Sub cmdMeasure_Click()

Dim arrnum As Long

If StopTimerCount = 0 Then

MsgBox "Please reenter interval and duration data", vbOKOnly, "TekVISA Demo"

Exit Sub

End If

NotifyCount = 0

arrnum = StopTimerCount

ReDim arr(arrnum, 0)

strID = "MEASUREMENT:IMMED:TYPE " & cboMeasurement.Text &

"; VAL?;:HEADER OFF" timMEAS.Enabled = True

End Sub

Chapter 6 Review

To review what you learned in Chapter 6:

• You can use the

Chart Measurement

program designed in this chapter to capture measurements at a desired frequency and plot those results in an Excel chart or on the form itself

(in the case of the VB version).

• You can make other VB programs available to your program by adding them as

Additional Controls

or

References

from the VBA

Tools

menu.

• You can

• make frames within a form

visible or invisible

depending on code logic

• close a form by unloading it when the user clicks a

Close

button

124 Oscilloscope Analysis and Connectivity Made Easy

• allow users to choose items from label controls associated with

spin buttons

In Chapter 7, you will find out how to build a program that logs on a triggered program event.

Oscilloscope Analysis and Connectivity Made Easy

125

Chapter 6 Review

126 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 7:

A Triggered Waveform Capture Example

Using VB to write a program that gets waveforms and measurements on a triggered event

Introduction

The extended example presented in this chapter shows how to capture waveform and measurement data from oscilloscopes when a trigger is defined and then executed. It includes code for use with Tektronix TDS7000 and TDS/CSA8000 and similar Windows-based oscilloscopes. In addition to capturing data, the program shows how to display the data on a grid and save it to a file on disk.

The example is written in Visual Basic 6.0 (included in Microsoft Visual

Studio) rather than Excel VBA, because VB can accommodate larger waveforms and because VB programs run independently as separately compiled executables rather than as interpreted add-ons to Excel. If you do not have VB 6.0 but do have Excel, refer to the source code for the

Trigger

Capture

button on the TekExcel Toolbar. That code presents many features that are similar to those discussed here.

Getting Started

What You Need to Get Started

You can work this example either on a separate PC or on your Windowsbased oscilloscope, using Visual Basic 6.0. To get started, you will need the following:

• A Windows-based Tektronix oscilloscope (an external monitor is recommended if you are working the example on your oscilloscope)

• Visual Basic 6.0 installed on your oscilloscope or on an external PC

• The TekVISA connectivity software described in Chapter 1

(see page 323 for the location of the completed example)

Oscilloscope Analysis and Connectivity Made Easy 127

Getting Started

What You Will Do

In this chapter, you will review how to use Visual Basic 6.0 controls and learn to build a program similar to the one that runs when you click the

Trigger Capture

icon on the TekExcel Toolbar. This sample program illustrates how to capture triggered waveform and measurement data at the current oscilloscope settings, display it on a grid, and save it to a file.

Figure 35 shows the design-time interface that you will create. The user

interface consists of a VB Form with four tabs. Depending on whether you are connecting to a TDS/CSA8000 or to a TDS7000 Series oscilloscope or similar model, either the second or the third tab displays measurement data at runtime.

• The

Settings tab

allows the user to specify the VISA device to connect to, indicate channel sources for waveform captures, set display and save options, and specify whether

measurement data should be included (see Figure 37)

• If the user elects to capture measurement data, a

Measurement tab

appears so the user can select measurement(s) to be captured. Either the second or the third tab displays measurement data at runtime, depending on the oscilloscope type. For most TDS Series real-time

oscilloscopes, a list of measurements appears (see Figure

38). For TDS/CSA8000 sampling oscilloscopes, a list of

eight possible measurements appears (see Figure 39).

• If the user chooses to display data, processing results appear on the

Data tab

(see Figure 40).

128 Oscilloscope Analysis and Connectivity Made Easy

Figure 35: The form you will design for the Triggered Waveform Capture example

This Form allows users to:

• view all connected local and remote TekVISA resource

devices

and assign one to be used for the triggered capture

• view

active channels

on the assigned device (and their different

timebases

on TDS/CSA8000 sampling oscilloscopes) and select one or more of them to be used for waveform captures

• identify the

measurement channel

for collecting measurements on TDS7000 real-time oscilloscopes

• display

active measurement types

and

active measurements

for TDS/CSA8000 sampling oscilloscopes and select one or more of them to be used for measurement capture

• view the

captured results

on a row/column grid

Oscilloscope Analysis and Connectivity Made Easy

129

The Triggered Waveform Capture Example in VB

Figure 36 shows the first tab of the Form at runtime after fields have been

populated with results from a TDS/CSA8000 Series oscilloscope.

130

Figure 36: The Triggered Waveform Capture form at runtime

See page 158 for more about running this program.

What You Will Learn

The purpose of this chapter is to illustrate some basic operations of the

TekVISA ActiveX Control with respect to triggered events. Once you have gone through this chapter, you will know how to:

• add the TekVISA ActiveX Control to the list of available

ActiveX controls in Visual Basic 6.0, and use some of its properties and methods

• design and create a Form in Visual Basic 6.0 by dragging and dropping controls

• modify controls on the Form by changing properties in the

Properties window

• understand the workings of the Triggered Waveform Capture program, so you can modify it if needed or use it as a template for other programs

The Triggered Waveform Capture Example in VB

Building the Form

This chapter focuses primarily on the VB code and assumes you are already familiar with visual editing tools for constructing dialog interfaces.

Table 5 shows some useful icons on VB’s Standard Toolbar.

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Table 14: Useful icons on the VB Standard Toolbar

Icon Icon Name Select from

Insert Form Standard Toolbar

Object Browser Standard Toolbar

Project Explorer Standard Toolbar

Properties Standard Toolbar

Toolbox

To begin building the Form:

Standard Toolbar

1.

Open a new

Standard EXE

project in Visual Basic 6.0.

The Microsoft Visual Basic screen appears with the Project Explorer window, the Properties window, and space for the Code window or

Object Browser to display. You will also see a blank form.

2.

If you do not see the Project Explorer or Properties window, display them by selecting icons from the Standard Toolbar

(see Table 5).

3.

If you do not see a blank form, insert one by clicking the

Insert Form

icon on the VB Standard Toolbar.

4.

Click

Save Project As

and save the form as

frmTC.frm

and the project as

p_Trig.vbp

.

5.

Rename the Form

Triggered Waveform Capture

.

6.

If necessary, add the TekVISA ActiveX Control to the

Toolbox. To do this:

a.

Select

Project > Components…

The Components dialog box appears.

b.

Place a in the box next to

TekVISA Control

and click

OK

.

Oscilloscope Analysis and Connectivity Made Easy

131

The Triggered Waveform Capture Example in VB

132

The TekVISA Control icon is added to the Toolbox.

7.

Drag the

TekVISA Control icon

from the Toolbox onto the

Form, where it appears as an icon at design time, but is invisible at runtime.

By adding this Control to the Form, you have made all its methods and properties available to be called by your code.

In addition to the TekVISA Control, this example employs several

Visual Basic custom controls:

• the Microsoft Tabbed Dialog control

• the Microsoft Common Dialog control

• the MSFlexGrid

• the TreeView control included in the Microsoft

Windows Common Controls

All of these custom controls are included with Visual Basic 6.0 and need to be checked as well.

8.

Repeat steps 6 and 7 for all of the Visual Basic custom controls that will be used in this example.

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Table 6 shows icons on the Toolbox for VB controls that are relevant to this

example.

Table 15: Icons for VB controls used in this example

Icon Icon Name Select from

Checkbox Toolbox

Combobox Toolbox

CommandButton Toolbox

CommonDialog Toolbox

Frame Toolbox

Label Toolbox

Listbox Toolbox

MSFlexGrid Toolbox

SSTab Toolbox

TekVISA Toolbox

TreeView Toolbox

The Settings Tab

Add controls to design the Settings tab of the form, making sure that each

control is placed as shown in Figure 37.

Note:

It is not necessary to drag the controls onto the form in the exact order shown; however, doing so will help you verify that you have changed all the properties correctly.

Oscilloscope Analysis and Connectivity Made Easy

133

The Triggered Waveform Capture Example in VB

134

Figure 37: The Settings tab at design time

Table 16 summarizes all the changes to make in the Properties window to

convert the Settings tab to its final appearance.

Note:

When working with the

SSTabTVC

tab, click the icon, draw a box the size of the set of tabs you want, then adjust the Tabs and

TabsPerRow properties to create 4 tabs. For each tab, the Caption and Tab properties vary. For example, Tab 0 is the Settings tab.

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Note:

When working with the properties of the lblRS

label the drop-down arrow ( ) for the BackColor property will not be visible until you click inside that row.

Changes to names are underlined in the table, to help distinguish them from captions. A control’s

name

corresponds to its subroutine name or variable name in the code. A control’s

caption

appears on the Form and affects how the form looks, but has nothing to do with the code.

Table 16: Changes to make in the Properties window to the Settings tab

Control Property Change to

Form tvc (TekVISA)

CommonDialog

Label

Label

Triggered Waveform Capture form

(Name)

Caption

(Name)

(Name)

Caption

(Name)

Caption

frmTC

Triggered Waveform

Capture

Tvc1 (no change needed) dlgTVC

Record Size: lblRS

(no Caption)

BackColor

BorderStyle

Button Light Shadow

Fixed Single

CommandButton

CommandButton

(Name)

Caption

(Name)

Caption

cmdOK

OK cmdCancel

Cancel

CommandButton

(Name)

Caption

cmdClose

Close

Oscilloscope Analysis and Connectivity Made Easy

135

The Triggered Waveform Capture Example in VB

Control

SSTab

Checkbox

Checkbox

Checkbox

Checkbox

Frame

CommandButton

CommandButton

Listbox

Frame

Label

Combobox

Frame

Label

TreeView

CommandButton

Property Change to

Settings Tab (First Tab)

(Name)

Caption

SSTabTVC

Settings

Tabs

4

TabsPerRow

4

(Name)

Caption

chkWFM

Waveform Data

Value

(Name)

Caption

(Name)

1 (checked) chkM

Measurement Data chkSave

Caption

(Name)

Save to File chkDisplay

Caption

Display in Grid

Devices Frame (Top Left)

(Name)

Caption

(Name)

Caption

fraDevice

Devices cmdRefreshDevices

Refresh Devices

(Name)

Caption

cmdAssignDevices

Assign Device

(Name)

lstDevices

Captures Frame

Caption

Caption

Captures

# of Captures

(Name)

cboNumCaptures

Channel Selection Frame

Caption

Caption

(Name)

(Name)

Caption

Channel Selection

Select from active channels

TV1 cmdRefreshChannels

Refresh Channels

136 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Control Property Change to

Label

Listbox

CommandButton

Caption

(Name)

(Name)

Caption

Selected Channels lstCH cmdClearCH

Clear

The Measurements Tabs

Depending on whether you are connecting to a TDS7000 Series oscilloscope or similar real-time model, or to a TDS/CSA8000 sampling oscilloscope, either the second or the third tab displays measurement data at runtime.

Therefore, two tabs must be created at design time to account for these differences.

Add controls to design the

TDS7000 Series Measurements tab

of the form,

making sure that each control is placed as shown in Figure 38.

Figure 38: The TDS7000 Series Measurements tab at design time

Table 17 summarizes all the changes to make in the Properties window to

convert the TDS7000 Series Measurements tab to its final appearance.

Oscilloscope Analysis and Connectivity Made Easy

137

The Triggered Waveform Capture Example in VB

Table 17: Changes to make in the Properties window to the TDS7000 Series

Measurements tab

Control Property Change to

SSTab

Label

Listbox1

Label

Measurements Tab (Second Tab - 7000 Version)

Caption

Measurements

Caption

(Name)

Caption

Select Measurements lstMeas

7000

Add controls to design the

TDS8000Series Measurements tab

of the form,

making sure that each control is placed as shown in Figure 39.

138

Figure 39: The TDS8000 Series Measurements tab at design time

Table 18 summarizes all the changes to make in the Properties window to

convert the TDS8000 Series Measurements tab to its final appearance.

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Table 18: Changes to make in the Properties window to the TDS8000 Series

Measurements tab

Control Property Change to

SSTab

Label

Label

Checkbox

Label

Measurements Tab (Third Tab - 8000 Version)

Caption

Measurements

Caption

Caption

(Name)

Caption

Caption

Caption

BackColor

BorderStyle

Select

TYPE: WFM SOURCE:

DISPLAY STATE chkMeas(0)

Measure 1 lblMDesc(0)

(no Caption)

Button Light Shadow

Fixed Single

CommandButton

(Name)

Caption

cmdShowMeas

Refresh Setup Info

The Data Tab

The

Data tab

holds an

MSFlexGrid

control. Add controls to design this tab of

the form, making sure that each control is placed as shown in Figure 40.

Oscilloscope Analysis and Connectivity Made Easy

139

The Triggered Waveform Capture Example in VB

140

Figure 40: The Data tab at design time

Table 19 summarizes all the changes to make in the Properties window to

convert the Data tab to its final appearance.

Table 19: Changes to make in the Properties window to the Data tab

Control

SSTab

MSFlexGrid

Label

CommandButton

Property Change to

Data Tab (Third Tab)

Caption

Data

(Name)

FixedCols

grdData

0

FixedRows

Rows

(Name)

Caption

1

2 lblStatus

(no Caption)

BackColor

BorderStyle

(Name)

Caption

Button Face

Fixed Single cmdClear

Clear Grid

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Getting Help

You can find out more about using various controls by taking a look at the

Help

facility. For example, to find out more about the Label control:

1.

From the

Microsoft Visual Basic

menu bar, select

Help >

Contents… > MSDN Library > Visual Studio 6.0

Documentation > Visual Basic Documentation > Reference

> Language Reference > Objects > L > Label Control.

2.

Other approaches might be to:

• select

Help > Index…

and scroll down alphabetically to find

Label Control

• select

Help > Search…

and type

Label Control

as the words to search for

Using the Object Browser (F2)

In addition to using online help, you can use the

Object Browser

to learn more about the classes and members of Visual Basic’s core and custom components.

By pressing

F2

or clicking the

Object Browser

icon on the Standard Toolbar, you can browse to find out which methods, properties, and events to use with object components, so you can make the correct calls and references in your code.

For example, to find out more about the

TekVISA TVC

control:

1.

Press

F2

to bring up the Object Browser.

Select

<All Libraries>

from the upper drop-down list.

Type

tvc

in the lower drop-down list as the object to search for.

Press

Enter.

You will see the screen shown in Figure 41. You can then click

various library entries in the Search Results to see how the

TVC control relates to other components of the project.

Oscilloscope Analysis and Connectivity Made Easy

141

The Triggered Waveform Capture Example in VB

142

Figure 41: Using the Object Browser with Visual Basic 6.0

From the Object Browser, you can immediately jump to a contextsensitive online help topic by pressing the

F1

function key (or rightclick and select

Help

).

The VB Intellisense Feature

As you type the code, you will notice some helpful features. For example, when you type a period after a COM object such as the TekVISA ActiveX

Control, VB’s Intellisense feature opens a list that prompts you with choices.

Valid properties, methods, and events exposed by the COM object as public are preceded by a green icon, like the top choice in the following list:

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Similarly, after you type an opening parenthesis, the Intellisense feature prompts you with the syntax for arguments, and displays valid choices:

Reviewing the Code

This example permits the user to specify which measurements to capture and which channel waveforms to capture when a trigger event occurs. It also allows the user to display the captured data in a grid.

Triggered data is typically captured by the TekVISA Control’s

ServiceRequest

event. First the oscilloscope’s status and event registers are cleared, then event and status bits are set to await a triggered event. Once a trigger occurs, the register bits are changed and a

ServiceRequest

event is raised in the TekVISA Control. This coding example illustrates the use of

TekVISA ActiveX Control calls and GPIB command strings to set up and capture these events.

Note:

Because of the length of this exercise, step-by-step instructions for entering code and detailed line-by-line explanations are not given here. Instead, this chapter summarizes routines in tables and focuses on core routines for controlling the oscilloscope. All source code, of course, is included on the companion CD that accompanies this book.

Code Organization

The code is contained in two modules:

• a form module

• a standard code module

The form module is named frmTC.frm

and the code module is named modTrig.bas

. Mostly by acting on events, the code on the form describes what should happen when the form is initialized and when the user clicks each button on the form.

Most code is held in the code module. Code on the form handles simple user events and calls procedures held in the code module.

Figure 42 shows the two modules in separate Code Windows in VB.

Oscilloscope Analysis and Connectivity Made Easy

143

The Triggered Waveform Capture Example in VB

Figure 42: The form module and code module in separate Code Windows of VB

The flow diagram in Figure 43 shows how key modules in the program

interact with one another and the oscilloscope. TekVISA ActiveX Control methods and events appear shaded in the diagram.

144 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Figure 43: Triggered Waveform Capture example flow diagram

Initialization Routines

These preliminary routines load the form, initialize the combo box for number of captures and the list box for TDS7000 measurements, and format

the tree view control for selecting channel(s). Table 20 summarizes

Initialization routines.

Table 20: List of Initialization routines

Main()

PopulateNumCaptures (c As

ComboBox)

Form_Load()

This starting routine loads the form and calls

PopulateNumCaptures to populate the number of captures choices.

Populates the number of captures choices in the combo box.

Executes when the Triggered Waveforms Capture form is initially loaded. Calls FormatTV and

PopulateMeasArray routines to initialize the tree view and list box.

Oscilloscope Analysis and Connectivity Made Easy

145

The Triggered Waveform Capture Example in VB

146

FormatTV (tv as TreeView)

PopulateMeasArray()

Type MeasureData

sDisplayName As String

sGPIB As String

Formats the tree view control.

Initializes array values for display name and GPIB commands (see MeasureData data type)

Populates the array for actual GPIB measurement commands.

Populates the array for units (V-volts;Sseconds;VS-voltseconds;P-percentage; HZ hertz)

Populates the lstMeas list box

Data type for holding GPIB measurements on the 7000 display name in frmTc.lstMeas

GPIB command measurement unit selection status

sUnit As String

blnSelected As Boolean

End Type

List Devices And Display Channels Routines

Before a triggered event can be captured, the user must specify a device. The interface provides three buttons on the

Settings tab

(the first tab) for working with devices and their active channels: cmdRefreshDevices

, cmdAssignDevices

, and cmdRefreshChannels

. In addition, the user can choose one or more active channels from the tree view control, and select the number of captures from the combo box.

• The cmdRefreshDevices_Click

event routine calls the

GetDevices

routine, which queries the

FindList

property of the TekVISA control and lists connected devices. These could be local devices or remote systems. The results are displayed in the lstDevices list box.

• The cmdAssignDevices_Click

event routine makes the currently selected device the active choice and displays all associated active channels in the

TV1

tree view.

• The cmdRefresh Channels_Click

event routine:

• Calls the

DisplayChannels

procedure; checks to see if this is a TDS/CSA8000 Series oscilloscope; if so, calls the

DisplayChannels8000

routine

• Uses the tree view control to display hierarchical data. A tree view control is comprised of nodes.

Nodes can have parent, child, and sibling relationships with other nodes. In the case of the

TDS7000, the control channel is indicated by a child node. In the case of the TDS/CSA8000, timebases

(Main, Mag1, Mag2) can be displayed for each channel.

Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

The TV1_NodeClick

event executes when the user chooses channel(s) to capture from the

TV1

tree view. It places chosen channel(s) in the lstCH

list box.

The cboNumCaptures_Click event executes when the user chooses the number of captures to perform from the cboNumCaptures

combo box.

Table 21 summarizes the routines involved in listing devices, displaying

channels, and selecting the number of captures.

Table 21: Routines involved in listing devices and displaying channels cmdRefreshDevices_Click()

Get Devices (t As

TVCLib.Tvc, lst As ListBox cmdAssignDevices_Click() cmdRefreshChannels_Click()

TV1_NodeClick (ByVal Node

As MSComctlLib.Node)

DisplayChannels (tv As

TreeView)

Executes when the Refresh Devices button is clicked on the Settings tab. Calls the GetDevices routine.

Queries the FindList property of the TVC control and lists connected devices. These could be local or remote devices.

Executes when the Assign Device button is clicked on the Settings tab. Calls GetScopeType and

DisplayChannels routines.

Executes when the Refresh Channels button is clicked on the Settings tab. Calls the DisplayChannels routine.

Executes when a tree view node is selected on the

Settings tab. Chooses channels for capture and places chosen channels in the lstCH list box.

Detects which channels are open and which channel is the active measurement channel. The SELECT? GPIB command on 7000 Series oscilloscopes returns a semicolon-separated string with 13 values: 4 channel,

4 math, 4 reference and 1 indicating the measurement channel at the end of the string. If the channel is active, a numeral "1" is returned. If it is inactive a numeral "0" is returned. This routine parses the semicolon-separated string and uses the values to build nodes that populate the tree view control. It also displays the waveform record length in the label caption at the bottom left part of the Settings tab.

A separate routine is called for TDS/CSA8000 Series oscilloscopes.

Oscilloscope Analysis and Connectivity Made Easy

147

The Triggered Waveform Capture Example in VB

DisplayChannels8000 (tv As

TreeView) cmdClearCH_Click() cboNumCaptures_Click()

Very similar to the DisplayChannels routine except it also tests for MAG1 and MAG2 timebase views in

TDS/CSA8000 Series oscilloscopes; these are added as child nodes to the active channels.

Executes when the Clear button is clicked on the

Settings tab. Clears the lstCH list box.

Executes when the # of Captures combo box is selected on the Settings tab. Stores the number of captures to perform.

List Measurements Routines

If the chkM

check box on the

Settings tab

is selected, one of two measurement tabs is chosen:

• The

second tab

lists possible measurements for the

TDS7000 and similar scopes. Information about these measurements ia held in an array of a user-defined type called

MeasureData,

which holds

• the

DisplayName

of the meaurement

• its GPIB command equivalent

• its unit value (such as seconds, volts, or percent)

• whether it is selected

The routine to populate this array and the list box is

PopulateMeasArray

, which is called when the form is loaded (see

Table 20).

• The

third tab

holds measurements for TDS/CSA8000 scopes. Eight measurements are possible. These are set up by the user on the oscilloscope. Unlike the TDS7000 and similar models, each timebase (Main, Mag1, Mag2) for each of eight channels can be identified as the source channel for measurement. In addition, 8 math measurements are possible. This means 32 sources are possible (3 timebases on

8 channels plus 8 math channels).

Information about these measurements appears in the chkMeas control array held by the third tab of the

SStab

control. This tab is initially populated with the beginning array elements (a single check box and a single label) just for positioning purposes. When the code queries the oscilloscope at runtime for the active measurements that have been set up, the code finishes populating the array on the form.

148 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

The

Refresh8000Meas

routine chooses which of two routines to call by reading the upperbound of the chkMeas

control array: It either calls the

Build8000Controls

routine to load the controls, or the cmdshowMeas_Click

event (for the command button labeled

Refresh

Setup Info

) to query the TDS/CSA8000 oscilloscope for information on which of the 8 possible measurements are set up.

Table 22 summarizes the routines involved in listing the measurements to

capture.

Table 22: Routines involved in listing measurements to capture chkM_Click()

Refresh8000Meas()

Build8000Controls() cmdShowMeas_Click()

Executes when the Measurement Data check box is selected on the Settings tab.

Loads the display on the 8000 measurement tab or requeries setup measurements on the oscilloscope.

Loads a control array for use with 8000 scopes

Executes when the Refresh Setup Info button is clicked on the Measurements tab (8000 version).

Wait for Trigger Routine

After all selections have been made on the

Settings tab

and

Measurements tab

, the user clicks the

OK

button. The cmdOK_Click routine clears status and event registers and, depending on the oscilloscope type, calls one of two routines:

GetAcquisition or

GetAcquisition8000.

Here are extracts from the relevant code:

Private Sub cmdOK_Click()

Dim i As Integer

Select Case nScopeType

Case Is < 8000

If blnMEAS Then

.

. (code omitted)

.

Next

End If

If blnSaveToFile Then

.

. (code omitted)

.

End If ntracker = 0

tvcRef.WriteString "DESE 0; *ESE 0; *SRE 0; *CLS"

Call GetAcquisition

If blnShowInGrid Then

.

. (code omitted)

.

End If

Oscilloscope Analysis and Connectivity Made Easy

149

The Triggered Waveform Capture Example in VB

Case Is >= 8000

If blnSaveToFile Then

.

. (code omitted)

.

End If ntracker = 0

tvcRef.WriteString

"DESE 0; *ESE 0; *SRE 0; *CLS"

Call GetAcquisition8000

If blnShowInGrid Then

.

. (code omitted)

.

End If

Call SRQHandler8000

End Select

End Sub

In this routine:

• Different blocks of code execute depending on whether the user chooses to

• capture measurement data ( blnMEAS = TRUE

)

• have the captured data displayed ( blnShowInGrid =

TRUE

)

• have the data saved to disk ( blnSaveToFile = TRUE

)

• The four native GPIB commands (

DESE, *ESE, *SRE, and

*CLS

) disable Service Requests to avoid getting irrelevant ones. The

*CLS

command clears the event registers.

• Depending on the type of oscilloscope, this routine calls either

GetAcquisition

or

GetAcquisition8000

(see page 151).

• If the oscilloscope is a TDS/CSA8000, this routine then calls the

SRQHandler8000

routine directly, rather than waiting for an oscilloscope trigger to fire the

ServiceRequest

event handler.

You can use this method of simulating a trigger event to test your code, then move the

SRQHandler8000 call to the

ServiceRequest handler when working with live data.

Table 23 summarizes the routines involved when the

OK

button and other dialog box buttons are clicked.

150 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Table 23: Routines involving dialog box buttons cmdOK_Click() cmdCancel_Click() cmdClose_Click()

Executes when the OK button is clicked on the

Triggered Waveform Capture form. Checks the oscilloscope type.

If it is a 7000 or similar model, reinitializes the selection status of entries in the listMeas list box, clears event registers to await a trigger event, and calls the GetAcquisition routine.

If it is an 8000, clears event registers to await a trigger event and calls the GetAcquisition8000 routine.

Based on items checked, other fields are reinitialized as well.

Executes when the Cancel button is clicked on the

Triggered Waveform Capture form. Cancels the acquisition or other activity in progress.

Executes when the Close button is clicked on the

Triggered Waveform Capture form. Closes the dialog box.

Set Registers Routines

The two routines that set up registers to await a trigger event are the

GetAcquisition

routine and the

GetAcquisition8000

routine.

After setting up registers, they await a trigger event. When an oscilloscope trigger fires a

ServiceRequest

event in the TekVISA control, the

ServiceRequest event handler calls one of two event handling routines:

SRQHandler

or

SRQHandler8000

.

Here is the

GetAcquisition code:

Sub GetAcquisition()

'This code sets the registers in preparation for a trigger which

' activates a ServiceRequest event in the TVC control. See the GPIB

' programmer's guide for the TDS series scopes.

Dim sCHCommands As String sCHCommands = "DESE 1;*ESE 1;*SRE 32"

If tvcRef Is Nothing Then Set tvcRef = frmTC.Tvc1

With tvcRef

.WriteString "TRIGGER:A:MODE NORMAL"

.WriteString "ACQUIRE:STATE OFF"

.WriteString "ACQUIRE:STOPAFTER SEQUENCE"

.WriteString sCHCommands

.WriteString "*CLS"

.WriteString "ACQUIRE:STATE RUN"

.WriteString "*OPC"

End With

End Sub

Oscilloscope Analysis and Connectivity Made Easy

151

The Triggered Waveform Capture Example in VB

The native GPIB commands in this routine do the following:

• The

TRIGGER:A:MODE NORMAL

command sets the trigger mode to normal rather than forcing a trigger.

• The

ACQUIRE:STATE OFF

command stops acquisitions and is equivalent to pressing the front-panel

STOP

button.

• The

ACQUIRE:STOPAFTER SEQUENCE

command tells the oscilloscope to stop acquisition after acquiring a single sequence.

• The

DESE

(Device Event Status Enable) and

*ESE

(Event

Status Enable) commands set registers to await an Operation

Complete (

OPC

) event (bit 1) in the event queue. This event is summarized in the Event Status Bit (

ESB

) of the Status

Byte Register.

Note:

Setting the

DESE register and the

ESE

register to the same values allows only those codes to be entered into the event queue and summarized on the ESB bit (bit 5) of the Status Byte

Register. (See the on-line help for your oscilloscope for a full description of registers.)

• The

*SRE

(Service Request Enable) command sets the Event

Status Bit (bit 5) to await a Service Request (

SRQ

).

• The

*CLS

command clears the event registers.

• The

ACQUIRE:STATE RUN

command starts acquisitions and is equivalent to pressing the front-panel

RUN

button, unless the

STOPAFTER

mode is set to

SEQUENCE

, in which case this command is equivalent to pressing the frontpanel

SINGLE

button.

• The

*OPC

command generates the Operation Complete message in the Standard Event Status Register (

SESR

) and generates a Service Request (

SRQ

) when all pending operations complete. This allows you to synchronize operation of the oscilloscope with your application program.

The TDS/CSA8000 Series is a sampling oscilloscope and uses slightly different native GPIB codes. For the 8000 Series, The

STOPAFTER

GPIB command set requires more definition. You must specify the stopafter mode, the stopafter condition, and the sample count before a stopafter condition is met, as shown in the following code:

Sub GetAcquisition8000()

Dim sCHCommands As String

Dim nCH As Integer

152 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB sCHCommands = "DESE 1;*ESE 1;*SRE 32"

If tvcRef Is Nothing Then Set tvcRef = frmTC.Tvc1

With tvcRef

.WriteString

"ACQUIRE:STATE OFF"

.WriteString

"ACQUIRE:STOPAFTER:CONDITION ACQWFS"

.WriteString

"ACQUIRE:STOPAFTER:COUNT 20"

.WriteString

"ACQUIRE:STOPAFTER:MODE CONDITION"

.WriteString

"ACQUIRE:DATA CLEAR"

.WriteString

sCHCommands

.WriteString

"*CLS"

.WriteString

"ACQUIRE:STATE RUN"

.WriteString

"*OPC"

End With

End Sub

Table 24 summarizes the routines involved in setting registers.

Table 24: Routines involved in setting registers

GetAcquisition ()

ParseQueryResults (s1 As

String, QType As String) As

String

GetAcquisition8000()

Sets the 7000 oscilloscope registers in preparation for a trigger, which activates a ServiceRequest event in the TVC control. See the GPIB programmer's guide for

TDS7000 Series oscilloscopes and similar models.

Reads different acquisition parameter data from the

TDS7000 oscilloscope, including the trigger source channel. The return value indicates PULSE, EDGE, or

LOGIC. Although this is not used in this example, it is included as sample code for applications that wish to control trigger parameters more closely.

Sets the TDS/CSA8000 oscilloscope registers in preparation for a trigger, which activates a

ServiceRequest event in the TVC control. See the

GPIB programmer's guide for TDS/CSA8000 oscilloscopes.

Trigger Event Handling Routines

The

SRQHandler

and

SRQHandler8000

event handlers are triggered by the event being raised by the TVC control after it recognizes a trigger from the oscilloscope. These handlers must contend with four major options. Did the user choose to:

• capture waveform data?

• capture measurement data?

• have the captured data displayed?

• have the data saved to disk?

Oscilloscope Analysis and Connectivity Made Easy

153

The Triggered Waveform Capture Example in VB

These choices are not mutually exclusive; any or all are possible. These four choices are held in global Boolean variables declared in the code module:

Public blnWFM As Boolean

Public blnMEAS As Boolean

Public blnShowInGrid As Boolean

Public blnSaveToFile As Boolean

The two event handler routines test whether measurement and waveform data are requested. Within these two major tests, other tests are made to find out whether to display captured data in the grid and/or store the data to disk.

Note:

The user sets up the acquisition mode on the oscilloscope. The

GetWaveform

or

GetWaveform8K

method of the TekVISA control sets the data format to the fastest format (

BINARY

), and also issues

HEADER OFF commands as needed, so only the argument itself is returned on query responses.

Here are extracts from the relevant code in

SRQHANDLER

:

Public Sub SRQHandler()

.

. (code omitted)

.

' stop other service requests

tvcRef.WriteString

"DESE 0; *ESE 0; *SRE 0; *CLS"

.

. (code omitted)

.

If blnMEAS Then ' build measurement data first

'call routine which builds the GPIB command for

'retrieving measurements

Call BuildCMDString

tvcRef.WriteString strCMD sRet = tvcRef.ReadString

If blnSaveToFile And sFileName = "" Then

.

. (code omitted)

.

.

. (code omitted)

.

If blnShowInGrid Then ' user wishes to display

' measurement data in grid frmTC.lblStatus = "Acquiring data..." frmTC.Refresh

DoEvents

If blnWFM Then ' get waveform data

.

. (code omitted)

.

'get the waveform for the first channel

Call tvcRef.GetWaveform(nCH, wfm, xinc, trigpos, vUnits, hUnits)

' get the record length reclength = 0

sQry = "HORIZONTAL:RECORDLENGTH?" tvcRef.WriteString sQry reclength = CLng(tvcRef.ReadString)

.

. (code omitted)

154 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

.

If blnShowInGrid Then

.

. (code omitted)

.

frmTC.lblStatus = "" frmTC.Refresh

DoEvents ntracker = ntracker + 1

' reset the registers for another trigger

Call GetAcquisition

.

. (code omitted)

.

End Sub

Note that:

• The handler routine first disables service requests on the oscilloscope.

• If the user chooses to retrieve measurement data, a GPIB query command is built, sent to the oscilloscope using the

TekVISA

WriteString

method, and the response is read using the TekVISA

ReadString

method.

• Depending on user selections, the response is displayed and/or saved to disk. You can examine the relevant code by opening the program included on the companion disk.

• If the user chooses to retrieve waveform data, the handler employs the TekVISA

GetWaveform

method and sends a

HORIZONTAL:RECORDLENGTH?

GPIB query to retrieve waveform data and the information to display it properly.

The

SRQHANDLER8000

routine is similar to the

SRQHANDLER

routine with a slightly different TekVISA control call to get a waveform: tvcRef.GetWaveform8K nCH, nTB, wfm, xinc, xoffset, vUnits, hUnits

The

GetWaveform8K

method includes an extra parameter to identify the channel timebase of the waveform you are interested in retrieving.

Table 25 summarizes the routines involved in handling trigger events.

Oscilloscope Analysis and Connectivity Made Easy

155

The Triggered Waveform Capture Example in VB

Table 25: Routines involved in handling trigger events

Tvc1_ServiceRequest()

SRQHandler()

SRQHandler8000()

Executes when a Service Request needs handling by the oscilloscope. This is the trigger event handler. It calls the SRQ Handler routines.

Handles a call from the TVC control's Service Request event on 7000 and similar scopes. Captures and displays waveforms from user-selected channels as well as user-specified measurements from the active measurement channel when a trigger occurs and service request bits are changed in the oscilloscope.

Handles a call from the TVC control's Service Request event on 8000 scopes. Captures and displays waveforms from user-selected channels as well as user-specified measurements from the active measurement channel when a trigger occurs and service request bits are changed in the oscilloscope.

Get Measurement and Waveform Data Routines

Most of these routines are called from the

SRQHandler

and

SRQHandler8000

routines to perform helper tasks. Table 26 summarizes the

routines involved in getting measurement and waveform data.

Table 26: Routines involved in getting measurement and waveform data chkWFM_Click()

BuildCMDString()

GetChannelInt (pass As

String) As Integer

BuildCMDString8000()

GetChannelInt8K (s1 As

String) As Integer

GetTimeBaseInt (s1 As

String) As Integer

Executes when the Waveform Data check box is selected on the Settings tab. Sets a boolean value.

Builds the command string for taking measurements from the 7000 oscilloscope. Concatenates user choices for measurements. Called by the SRQHandler routine.

Returns integer for the chosen channel for use in

TVC.GetWaveform method calls.

Builds the measurement command string for the 8000 oscilloscope by going through the control array. Called by the SRQHandler8000 routine.

Returns integer for the chosen channel for use in

TVC.GetWaveform8000 method calls.

Returns an integer value for timebase, which is required on the 8000 scopes.

156 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

Display Results in Grid Routines

The

Data tab

holds an

MSFlexGrid control for displaying processing results.

Table 27 summarizes the routines involved in displaying results on this grid.

Table 27: Routines involved in displaying results in the grid chkDisplay_Click()

DisplayMeasData (sRet As

String, nRow As Long, nCol

As Long, blnFirst As

Boolean, g As

MSFlexGridLib.MSFlexGrid)

As Integer

DisplayMeasData8000 (sRet

As String, nRow As Long, nCol As Long, blnFirst As

Boolean, g As

MSFlexGridLib.MSFlexGrid)

As Integer cmdClear_Click()

Executes when the Display in Grid check box is selected on the Settings tab. Sets a Boolean value.

Displays 7000 measurement data in the grid on the

Data tab. Called from SRQHandler routine if the check box was selected.

Displays 8000 measurement data in the grid on the

Data tab. Called from SRQHandler8000 routine if the check box was selected.

Executes when the Clear Grid button is clicked on the Data tab.

Save Data to Disk Routines

These routines perform helper tasks associated with saving data in a file.

Table 28 summarizes the routines involved in saving data to disk.

Table 28: Routines involved in saving data to disk chkSave_Click()

HandleSaveDialog()

ConcatInBuffer (ByRef As

String)

Executes when the Save in File check box is selected on the Settings tab. Sets a boolean value.

Uses the MS CommonDialog control to open a file

(using the timestamp as the default name) for saving captured data to disk. Called from the SRQHandler and

SRQHandler8000 routine if the check box was selected.

Note: For saving data directly to disk, you may use

the ReadToDisk method of the TekVISA ActiveX

control. See its use in Appendix C.

Uses CopyMemory (Alias for RtlMoveMemory) API call to speed up string concatenation when building a string to write to disk.

Oscilloscope Analysis and Connectivity Made Easy

157

The Triggered Waveform Capture Example in VB

Other General Purpose Routines

Table 29 summarizes other general purpose routines used in this example.

Table 29: General purpose routines

GetScopeType (t As

TVCLibTvc, sst As

TabDlg.SStab) As Boolean

CheckTabVisibility (chkM As

VB.CheckBox, ssTabTVC AS

TabDlg.SSTab)

RemoveLF (s1 As String) As

String

GetEUnit (s1 as String, u As

String) As String

Assigns values to the global variables specifying the type of oscilloscope to which the application is currently connected. Calls CheckTabVisibility routine to make the appropriate Measurement tab visible.

Makes the appropriate tabs visible based on the oscilloscope type.

Removes the linefeed character from returned GPIB commands.

Returns a semicolon-separated string. The string to the left of the semi colon represents the measurements numeric value. The string to the right of the semicolon represents the engineering unit.

Multiplies the numeric value by a factor of 1000 depending on the engineering unit detected (eg. milliseconds (ms), microsoeconds (us), nanoseconds(ns))

Running the Triggered Waveform Capture Example

To run the program:

1.

Select

File > Save

to save the VBA program you just created.

2.

If you have the necessary hardware, follow the steps in the

Oscilloscope Connectivity Made Easy book (and in

Appendix D on page 321 of this book) to connect the cable

and start the waveform generator. You can adjust the amplitude and frequency of the waveform generated by your sound card by moving the slider bars on the Jitter

Adjustment tab of the waveform generator program.

Note:

Even if you do not have a waveform source connected to

Channel 1 of your oscilloscope, you will still be able to pick up enough noise to generate some data to see if your program works. After clicking

OK

in this example, select one of the trigger setup options from the

Trig

menu of your TDS7000

Series oscilloscope, then select

Force Trigger

.

3.

Select

Run > Start

or press the

F5

function key to run the program.

158 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

The Triggered Waveform Capture dialog box appears, with a list of devices available for connection displayed in the top left frame on the

Settings tab

.

4.

If necessary, click

Refresh Devices

.

5.

Select a device to connect to and click

Assign Device

. The device can be:

a.

GPIB8

, which corresponds to the software virtual GPIB connection inside your oscilloscope, between your

Windows-based VB program and the embedded oscilloscope software.

b.

Another GPIB device corresponding to a remote oscilloscope networked to your system via the VXI-11

Server Control. If this server is loaded on the oscilloscope, the following icon will appear in the system tray in the lower right corner of the oscilloscope screen (or external monitor).

.

6.

On your oscilloscope interface, physically select

one or more source channels

and a

record size

for capturing waveform data, and a

measurement channel

(control channel) for capturing measurement data. Also select the

trigger type

and any other relevant trigger settings.

7.

If you are connected to a TDS/CSA8000 sampling oscilloscope, select one or more

timebases

(

Main, Mag1,

Mag2

) on your oscilloscope to make them active and available for use.

8.

If necessary click

Refresh Channels

to update the tree view display.

9.

In the tree view display, select the active channel(s) (and timebase(s) if any) that you want to use for this capture.

10.

Select the number of captures to perform or leave the default as is.

11.

Leave the checkmark beside

Waveform Data

and select the check boxes beside

Measurement Data

and

Save to File

and

Display in Grid

if you want all the options enabled; otherwise, clear any that you do not want enabled.

You have now made all necessary selections from the

Settings tab

.

Oscilloscope Analysis and Connectivity Made Easy

159

The Triggered Waveform Capture Example in VB

For example, suppose you are running VB on a TDS7000 with

CH1,

CH2

, and

CH3

activated;

CH1

selected as the measurement channel; and a record size of

5000

selected on your oscilloscope. If you choose

GPIB8

, select

1

as the # of captures, select the check boxes next to

Measurement Data

and

Save to File,

and select

CH2

and

CH3

for waveform captures, the example will look like this:

Similarly, suppose you are running VB on a system attached to a networked TDS/CSA8000 oscilloscope with all three times bases

(

Main

,

Mag

nification

1

and

Mag

nification

2

) activated for

CH1

and

CH2

, and a record size of

500

selected on your oscilloscope. If you choose

GPIB10

, select

2

as the # of captures, select the check boxes next to

Measurement Data

and

Display in Grid,

and select

Main

on

CH1

and

Mag1

on

CH2

for waveform capture, the example will look like this:

160 Oscilloscope Analysis and Connectivity Made Easy

The Triggered Waveform Capture Example in VB

12.

From the

Measurements tab

, select the measurements you want to capture and display. (Hold down the

Ctrl

key while clicking if you want to make multiple selections.)

For example, if you are running VB on a TDS7000 and want to capture and display the

AMPLITUDE, AREA, CYCLE AREA, CYCLE

MEAN, CYCLE RMS,

and

FALL TIME

of the signal on the measurement channel, the example will look like this:

If you are running VB on a system attached to a networked TDS8000 or CSA8000 instrument and want to capture and display the

MAXIMUM

and

FALL

time on

CH2 MAIN

and

CMEAN

on

CH1 MAIN

, the example will look like this:

Oscilloscope Analysis and Connectivity Made Easy

161

Using VBA Instead of VB

13.

Click

OK

to start the triggered data capture.

14.

If necessary, force the trigger (see page 158) or press a

trigger button if the trigger type was glitch.

You will see results similar to the following on the

Data tab

, with measurements displayed for each triggered capture (2 captures in this case), followed by time and data values for each triggered waveform capture:

162

If an error occurs, choose select

Help > Index…

and type the keywords

Debug Toolbar

to find a quick summary of the debugging features of VB available on the Debug Toolbar.

Using VBA Instead of VB

If you want to work this exercise using Excel VBA instead of Visual Basic

6.0, you will need to create a similar form using that tool instead of VB 6.0.

Refer to the discussion of the

Trigger Capture

button on the Excel TekExcel

Toolbar in Chapter 2 and see the corresponding Toolbar source code for an example of how to use Excel controls to design a triggered data capture form.

That example uses a spreadsheet rather than a grid to store the waveform data points and measurement data.

Note:

Unlike VB 6.0 code, which can be compiled into a stand-alone executable, VBA is interpreted code that only runs inside Microsoft

Office applications. Restrictions on spreadsheet size and speed of interpreted code will limit waveform data size and the execution speed of your program.

Oscilloscope Analysis and Connectivity Made Easy

Chapter 7 Review

To review what you learned in Chapter 7:

• You can use

Visual Basic 6.0,

which is part of the Microsoft

Visual Studio, to design your own forms and build your own functions.

• You can add the

TekVISA Control

to VB, and then drag it onto your form just like any other ActiveX control.

• The VB

Help

facility contains many useful examples, and the Object Browser can help you understand the hierarchy of objects in the

VB object model

. The VB help system and the

Object Browser are closely interwoven.

• The VB

Intellisense

feature prompts you with valid arguments and other choices when you type code in the

Code window.

• You can use the

Triggered Waveform Capture

program described in this chapter to capture waveform data and measurement data, display it on a grid, and save it to a file on disk.

Oscilloscope Analysis and Connectivity Made Easy

163

Chapter 7 Review

164 Oscilloscope Analysis and Connectivity Made Easy

PART 2: MATLAB AND

LABWINDOWS/CVI AND LABVIEW

CHAPTER 8: LIVE UPDATES TO MATLAB USING ICT

167

CHAPTER 9: LABWINDOWS/CVI AND LABVIEW 207

Oscilloscope Analysis and Connectivity Made Easy 165

PART 2: MATLAB AND

LABWINDOWS/CVI AND LABVIEW

166 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 8:

Live Updates to MATLAB using ICT

Introduction

In this chapter, you will learn how to control Tektronix Windows-based oscilloscopes from an existing MATLAB program by using

• the MATLAB Instrument Control Toolbox

• the VISA standard

• native GPIB instrument control commands and queries

What You Need to Get Started

You can work this example either on a separate PC or on your Windowsbased oscilloscope. To get started, you will need the following:

• A Windows-based Tektronix oscilloscope (an external monitor is recommended if you are working the example on your oscilloscope)

• TekVISA installed on the oscilloscope

• Release 12.1 of MATLAB (Version 6.1) and the Instrument

Control Toolbox (Version 1.1) installed on your oscilloscope or on an external PC. (This release includes MATLAB ICT support for Tektronix oscilloscopes)

If MATLAB is running on an external PC:

• TekVISA or another vendor’s implementation of

VISA must be installed on the same external PC as

MATLAB

• a GPIB interface card (ISA, PCI or USB) must be installed on your oscilloscope

• The Waveform Generator program from the companion CD

to this book (see page 323 for the locations of this program

and the completed examples)

• A signal generator cable

Oscilloscope Analysis and Connectivity Made Easy 167

The Instrument Control Toolbox

What You Will Do

In this chapter, you will get an NRZ waveform directly from the oscilloscope and use it in an existing MATLAB program. Unlike previous chapters, you will not be using Visual Basic. Instead, you will use GPIB commands and queries, the VISA standard, and the MATLAB Instrument Control Toolbox functions to:

• Obtain a waveform directly from your oscilloscope using

MATLAB’s VISA-GPIB interface

• Calculate jitter and plot it

What You Will Learn

Once you have gone through this chapter, you will know:

• How to use MATLAB Instrument Control Toolbox functions to connect to and control Tektronix Windows-based oscilloscopes

• How to route native GPIB commands and queries through

MATLAB Instrument Control Toolbox functions

• How to access VISA objects through MATLAB Instrument

Control Toolbox functions

• The main Instrument Control Toolbox functions to use for

Tektronix oscilloscope data connectivity

The Instrument Control Toolbox

The

Instrument Control Toolbox

is a collection of MATLAB M-file functions built on the MATLAB Technical Computing Environment. The

Instrument Control Toolbox includes adaptors for the GPIB interface

(IEEE-488) and the VISA standard. Using these adaptors, the toolbox provides a framework from MATLAB for communicating with instruments that support these standard interfaces, such as Tektronix Windows-based oscilloscopes.

Table 37 in Appendix A summarizes the MATLAB Instrument Control

Toolbox functions used in this chapter. To learn more about the full set of

MATLAB Instrument Control Toolbox functions, refer to the Instrument

Control Toolbox User’s Guide for Use with MATLAB

,

published by The

MathWorks, Inc. Their website is http://www.mathworks.com

.

Note:

To access help, type

help instrument

at the MATLAB command line. To view help for any function or property, type

instrhelp name

, substituting a name of an ICT function or property for

name

.

168 Oscilloscope Analysis and Connectivity Made Easy

The Instrument Control Toolbox

Configuring VISA Resources

As discussed in Chapter 1, virtual GPIB is an internal software path on some

Tektronix oscilloscopes between Windows-based software such as

MATLAB and the oscilloscope software. The jitter2.m function used in this example assigns the primary address of virtual GPIB (GPIB8) to the VISA-

GPIB object it creates. If you are running MATLAB on a connected PC rather than on the oscilloscope itself, you will need to change the GPIB descriptor and possibly the vendor code to something else.

To determine the correct primary address of the VISA-GPIB object to use,

run the VISA Configuration Utility shown in Figure 44.

Figure 44: The VISA Configuration Utility

Communicating with VISA-GPIB Objects

Before looking at a more complicated example, here are the basic steps for communicating with a

VISA-GPIB object

(MATLAB’s terminology for a

VISA resource) using the Instrument Control Toolbox:

Note:

In code examples in this chapter:

• Native GPIB commands are shown in boldface.

• Instrument Control Toolbox (ICT) functions are shown in

boldface italics.

1.

Create a VISA-GPIB instrument object to virtual GPIB

(assuming you are running TekVISA on your oscilloscope): g = visa(

'tek' , 'GPIB8::1::INSTR' );

2.

Configure some property values:

% Make sure the size of the InputBuffer - in bytes - is

% sufficient.

set(g, 'InputBufferSize' ,2000000);

Oscilloscope Analysis and Connectivity Made Easy

169

The Instrument Control Toolbox

3.

Connect to the instrument:

fopen(g);

4.

Write and read some data:

% Issue a GPIB query idn = query(g, ‘

*IDN?

’)

% Issue a GPIB command

fprintf(g, ‘

DATA:SOURCE ch1

’);

5.

Disconnect and clean up:

fclose(g); delete(g)

The usage of these Instrument Control Toolbox functions is explained more fully later in this chapter.

Using the Instrument Control ASCII Communication Tool

The Instrument Control Toolbox also has a special communication tool that you can use to communicate with instruments. To use this tool:

1.

Type

instrcomm

in the Command Window.

The following screen appears.

170

2.

Select

VISA-GPIB

and click

Next.

Oscilloscope Analysis and Connectivity Made Easy

The following screen appears.

The Instrument Control Toolbox

3.

Make the appropriate selections for your configuration and click

Next

.

The following screen appears.

4.

Select the desired check box and click

Create

.

The Instrument Control ASCII Communication Tool is created.

Figure 45 shows this tool, which provides a graphical user interface

for writing native GPIB instrument control commands and queries and reading responses.

Oscilloscope Analysis and Connectivity Made Easy

171

The Instrument Control Toolbox

Figure 45: MATLAB’s Instrument Control Toolbox ASCII communication tool

5.

Click

Connect

and then type a GPIB command or query and click the appropriate button.

A screen similar to the following appears.

172

Cleaning up Instrument Objects during Debugging

Once you have identified and opened a VISA-GPIB instrument, you can use the instrfind

Instrument Control Toolbox function to find out how many objects are in memory and which one’s status is currently open. (Only one can be open at a time.)

Oscilloscope Analysis and Connectivity Made Easy

The Jitter Example with MATLAB ICT Functions

For example, during debugging, you could create and save the following

MATLAB function as an M file:

% caution - closes, deletes and clears all instruments if

~isempty(instrfind) fclose(instrfind); delete(instrfind);

end

This function closes and deletes all instrument objects from memory.

As an alternative, you could use the instrreset

ICT function, which performs the equivalent of the preceding block of code. Type this function from the

Command Window to clean up the workspace whenever the function you are debugging includes an instrument object that has an abnormal closure or is interrupted without fully executing.

The Jitter Example with M

ATLAB

ICT Functions

The MATLAB example you will work with is an updated version of the

MATLAB Jitter example that appeared in the Oscilloscope Connectivity

Made Easy book. If you have that book, consult it to learn more about how the program works, or study the code comments in the example itself on the

CD that accompanies this book. You will add a direct waveform connection to this program so that it accepts live waveform data from your oscilloscope.

For the purposes of this exercise, the logic and details of the provided Jitter example are irrelevant. The important point is to change the program so that it accepts live data rather than reading data from a file.

In the modified example that you will create, native GPIB commands and queries are written to VISA instrument objects through the Instrument

Control Toolbox interface. Figure 46 shows how GPIB commands and

queries are funneled to and from a VISA-GPIB object using Instrument

Control Toolbox fprintf

and query

functions.

Oscilloscope Analysis and Connectivity Made Easy

173

The Jitter Example with MATLAB ICT Functions

174

Figure 46: How commands and queries are funneled through MATLAB functions

See Table 34 and Table 35 for more information about native GPIB

commands and queries, and Table 37 for more details about Instrument

Control Toolbox functions.

Creating the jitter2 Function

Next you will add a direct waveform connection to a clock jitter problem.

The new function will communicate directly with the oscilloscope.

The function automatically acquires a waveform by funneling native GPIB commands and queries (shown in

boldface

) through Instrument Control

Toolbox functions (shown in

boldface italics

) to the identified VISA resource device on the oscilloscope.

Oscilloscope Analysis and Connectivity Made Easy

The Jitter Example with MATLAB ICT Functions

To create the jitter2.m

function:

1.

Start up MATLAB 6.1.

2.

From the Current Directory Browser in the lower left pane, browse and select the path to the working folder where you have stored the clock jitter solution files.

3.

From the Command Window, select

File > New >

M-file

to start a new file in the MATLAB Editor/Debugger.

4.

Type the following (omit the comments if desired): function rmsJitter = jitter2(symbolRate,threshold,hysteresis)

% Modified version of jitter1 to acquire data directly from the

% scope

% calling syntax

% rmsjitter = jitter2(5000,0,0.1)

% or rmsjitter = jitter2

% in the latter case default parameter values are used.

% use default values if function is called without arguments if nargin < 1 symbolRate = 5000; threshold = 0; hysteresis = 0.1; end

% This function calculates the RMS jitter in a waveform.

% Jitter is the difference between the actual time an edge

% occurs and the time where it should have been based on the

% supplied sample rate.

strCh = 'ch1' ;

% change the value below to test for different record lengths recordLen = 400000;

% Use inside the scope with TekVISA(board 8, primary address 1) g = visa(

'tek' , 'GPIB8::1::INSTR' );

% if running MATLAB on a connected PC, change vendor code

% and/or GPIB descriptor as necessary e.g.

%g = visa('ni','GPIB0::1::INSTR');

%g = visa('agilent','GPIB0::1::INSTR');

% Make sure the size of the InputBuffer - in bytes - is

% sufficient.

set(g, 'InputBufferSize' ,recordLen*2);

This code:

a.

Sets default values for the three arguments to the function (symbol rate, threshold, and hysteresis), if these arguments were not entered at the command line.

b.

Sets channel 1 ( ch1

) as the data source from which to obtain and return a waveform and sampling rate.

c.

Sets the record length of the waveform to be acquired to

400,000 data points.

Oscilloscope Analysis and Connectivity Made Easy

175

The Jitter Example with MATLAB ICT Functions

d.

Uses the

VISA

Instrument Control Toolbox function to create a VISA-GPIB object corresponding to TekVISA virtual GPIB (board 8, primary address 1).

Note:

If you are running MATLAB on a connected PC rather than on the oscilloscope itself, you will need to change the

GPIB descriptor and possibly the vendor code to something

else (see page 169).

e.

Assigns that VISA-GPIB object to the variable g.

f.

Uses the ICT

Set function to set the ICT

InputBufferSize property to twice the size of the record length. This software input buffer is used later during an fscanf

read operation, which will terminate when the amount of data stored in the buffer equals this value.

5.

Type the following:

fopen(g);

The fopen

Instrument Control Toolbox function connects to the instrument by opening the TekVISA virtual GPIB resource device.

6.

Type the following: idn = query(g,

'*IDN?'

);

fprintf

(g,

'HEADER OFF'

);

fprintf

(g,[

'DATA:SOURCE '

strCh]);

fprintf

(g,

'DATA:ENCDG SRIBINARY'

);

fprintf

(g,

'DATA WIDTH 2

);

fprintf

(g,

'ACQUIRE:STATE OFF'

);

fprintf

(g,

'ACQUIRE:MODE NORMALSAMPLE'

);

fprintf

(g,

'ACQUIRE:STOPAFTER SEQUENCE'

);

fprintf

(g,

'ACQUIRE:STATE RUN'

);

The native GPIB

*IDN?

query is funneled through the ICT query function. This query returns the oscilloscope identification code.

The TDS7000 native GPIB commands in this set are funneled through the ICT fprintf

function and perform the following tasks:

a.

The

HEADER OFF command turns verbose mode off, causing the oscilloscope to omit headers on query responses, so that only the argument is returned.

b.

The

DATA:SOURCE

command sets the data source to channel 1.

c.

The

DATA ENCDG:SRIBINARY

command sets the data format to binary using signed integer data-point representation, with the least significant byte transferred first.

176 Oscilloscope Analysis and Connectivity Made Easy

The Jitter Example with MATLAB ICT Functions

d.

The

DATA:WIDTH

command sets the number of bytes to transfer to two bytes per data point.

e.

The

ACQUIRE:STATE OFF

command stops acquisitions and is equivalent to pressing the front-panel STOP button.

f.

The

ACQUIRE:MODE NORMALSAMPLE

command sets the acquisition mode to sample and is equivalent to selecting

Horizontal/Acquisition

from the

Horiz/Acq

menu and then choosing

Sample

from the Acquisition Mode group box.

g.

The

ACQUIRE:STOPAFTER SEQUENCE

command tells the oscilloscope to acquire a single sequence rather than continuous data.

h.

The

ACQUIRE:STATE RUN

command starts acquisitions and is equivalent to pressing the front-panel

RUN

button, unless the

STOPAFTER

mode is set to

SEQUENCE

, in which case this command is equivalent to pressing the front-panel

SINGLE button.

7.

Type the following: while

query

(g,

'BUSY?' , '%s'

,

'%e'

); end ; horizLen = query(g,

'HORIZONTAL:RECORD?' , '%s' , '%e'

);

The two native GPIB queries here (

BUSY?

and

HORIZONTAL:RECORD?

) are funneled through the ICT query function and behave as follows:

a.

The

WHILE

loop executes as long as the oscilloscope is busy processing

ACQUIRE:STATE RUN

, which helps synchronize the operation of the oscilloscope with this program.

b.

After the acquisition, the

HORIZONTAL:RECORD?

query returns the current horizontal record length, which is converted from a string to a floating-point number and stored in the variable horizLen

.

8.

Type the following:

fprintf

(g,

'DATA:START %d' ,

1);

fprintf

(g,

'DATA:STOP %d' ,

recordLen);

fprintf

(g,

'CURVE?'

);

These three native GPIB commands (

DATA:START

,

DATA:STOP

, and

CURVE?

) do the following:

a.

Set the start data point for waveform transfer to 1.

b.

Set the stop data point to the record length that you selected for this transfer.

Oscilloscope Analysis and Connectivity Made Easy

177

The Jitter Example with MATLAB ICT Functions

c.

Read a complete waveform from channel 1 into the input buffer of the specified VISA resource device using the

CURVE?

query.

In binary format, the waveform is formatted as:

#<a><bbb><data><newline> where:

a = the number of b bytes

bbb = the number of bytes to transfer

data = the waveform curve data

newline = a single-byte new-line character at the end

9.

Type the following:

dummy_string1 = fscanf(g, '%s' ,2) dummy_string2 = fscanf(g, '%s' ,str2num(dummy_string1(2)))

recordLen2Transfer = min(recordLen,horizLen);

[waveform_raw,count] = fread(g,recordLen2Transfer, 'int16' ); dummy_string3 = fscanf(g, '%s' ,1);

These statements use Instrument Control Toolbox functions to read data bytes from the input buffer and store them as follows:

a.

The first fscanf

ICT function reads the first two bytes of the waveform (#, a and bbb above), converts them to a string and stores them in dummy_string1

.

b.

The second fscanf

ICT function reads the number of values specified in the second byte of dummy_string1.

Since this number (converted from a string) corresponds to a, the function reads the correct number of bytes to transfer, which corresponds to bbb, converts it to a string, and stores it in dummy_string2

.

c.

The next statement determines the lesser of the requested record length and the length of the record actually acquired, and stores the result in

RecordLen2Transfer

.

d.

The fread

ICT function reads the number of bytes of binary waveform data specified in

RecordLen2Transfer

. Using

Int16 precision, the function reads 16 bits for each value and interprets each value as an integer. The waveform data values are stored in waveform_raw

.

e.

The next fscanf

ICT function reads the 8-bit terminator character and stores it in dummy_string3

.

10.

Type the following:

% get the sampling interval sampleInterval = query(g,

'WFMOUTPRE:XINCR?' , '%s'

,

'%e'

);

178 Oscilloscope Analysis and Connectivity Made Easy

The Jitter Example with MATLAB ICT Functions

This code funnels a native GPIB query (

WFMOUTPRE:XINCR?

) through the ICT query

function. This query:

a.

Gets the horizontal point spacing (

XINCR

also known as the X increment or sampling interval) for the waveform from the active device.

b.

Converts it from a string to a number and stores it in samplingInterval

.

11.

Type the following:

% Scale the data yunit = query(g,

'WFMOUTPRE:YUNIT?'

); ymult = query(g,

'WFMOUTPRE:YMULT?' , '%s'

,

'%e'

); yoff = query(g,

'WFMOUTPRE:YOFF?' , '%s'

,

'%e'

); yzero = query(g,

'WFMOUTPRE:YZERO?' , '%s'

,

'%e'

);

This code funnels four native GPIB queries (

WFMOUTPRE:YUNIT?

,

WFMOUTPRE:MULT?

,

WFMOUTPRE:YOFF?

, and

WFMOUTPRE:YZERO?

) through the ICT

query

function: These queries:

a.

Return the vertical unit of measurement (

YUNIT

) (also called the Y unit), which is stored in yunit

, to be used for labeling the waveform plot.

b.

Return the vertical scale factor (

YMULT

) per digitizing level (also called the Y multiple), which is converted from a string to a floating-point number and stored in ymult

.

c.

Return the vertical offset (

YOFF

) in digitized levels (also called the Y offset), which is converted from a string to a floating-point number and stored in yoff

.

d.

Return the vertical offset (

YZERO

) in units of Y (also called Y zero), which is converted from a string to a floating-point number and stored in yzero

.

12.

Type the following:

% scale the data to the correct values waveform = ymult*(waveform_raw - yoff) - yzero;

This calculation uses matrix multiplication to scale the waveform data to the correct values by subtracting the

vertical offset in units of

Y

from each element in the

raw waveform data array

less the

Y offset

, and multiplying the result by the

vertical scale factor

. The resulting array is stored in waveform

.

Oscilloscope Analysis and Connectivity Made Easy

179

The Jitter Example with MATLAB ICT Functions

13.

Type the following:

% find the edges in the supplied waveform measuredTime = measureEdgeTiming2(waveform,threshold,hysteresis, sampleInterval);

% preallocate space for the clocks array clocks=zeros(1,length(measuredTime));

% derive the clocks based on the supplied symbol rate for index = 2:length(measuredTime); clocks(index) = (round(symbolRate * (measuredTime(index) measuredTime(index - 1)))) + clocks(index-1); end

% fit the derived clocks and the measured time to a straight

% line coef = polyfit(clocks, measuredTime, 1);

% coef(2) is the intercept (a) in the form y = a + bx

% coef(1) is the slope (b) in the form y = a + bx a = coef(2); b = coef(1); measuredAverageSymbolRate = 1/b; measuredSymbolRateError = (measuredAverageSymbolRate symbolRate)/symbolRate; subplot(2,1,1); plot(waveform); title = ([ 'symbol rate error: ' , num2str(measuredSymbolRateError * 100), '%' ]); xlabel( 'samples' );

% provide the label in units acquired from the scope

% strtok is needed to remove double quotes ylabel([ 'waveform amplitude, ' strtok(yunit, '"' )]);

This code:

a.

Calls the supplied measureEdgeTiming2

function

(which must be located in the same directory as the jitter2 function).

b.

Calculates remaining steps of the clock jitter algorithm.

c.

Plots the waveform. Notice that the strtok

MATLAB function strips the double quotes from the string value in yunit

, so that measurement unit values will display correctly on the plot.

14.

Type these lines, which calculate and plot the jitter: reconstructedTime = a + (clocks .* b);

% jitter is the difference between the measured time and the

% reconstructed time.

jitter = reconstructedTime - measuredTime;

% see the MATLAB function reference for 'norm' rmsJitter = norm(jitter)/sqrt(length(jitter)); subplot(2,1,2); plot(reconstructedTime,jitter);

180 Oscilloscope Analysis and Connectivity Made Easy

The Jitter Example with MATLAB ICT Functions title = ([ 'RMS jitter: ' , num2str(rmsJitter*1e6, ' \mus' ]); xlabel( 'time in seconds' ); ylabel( 'jitter in \mus' );

% force the x-axis limits to be tight so that both plots line

% up set(gca,'XLim',[0 count*sampleInterval])

15.

Type the following lines at the very end of the jitter2 function to disconnect from the instrument:

% close the instrument object

fclose(g);

delete(g);

These Instrument Control Toolbox functions do the following:

a.

The fclose

ICT function closes the connection to the active VISA resource device and sets the

Status

property to closed.

b.

The delete

ICT function removes the VISA-GPIB object from memory.

16.

Click the

Save to Disk

icon from the toolbar, type

jitter2.m

and click

OK

.

Figure 47 shows the first page of the completed

jitter2

function.

Oscilloscope Analysis and Connectivity Made Easy

181

The Jitter Example with MATLAB ICT Functions

182

Figure 47: The first screen of the jitter2 function in MATLAB

Testing Automatic Waveform Acquisition

If you have the necessary hardware, follow the steps in the Oscilloscope

Connectivity Made Easy book (and in Appendix D on page 321 of this book)

to connect the cable and start the waveform generator. Change the amplitude and frequency of the waveform generated by your sound card by moving the slider bars to the

maximum amount

on the Jitter Adjustment tab of the waveform generator program.

Note:

Even if you do not have a waveform source connected to

Channel 1 of your oscilloscope, you will still be able to pick up enough random noise to generate some data to verify that your program has connectivity. Even though the jitter calculation and plot will not work correctly, you will be able to produce a waveform plot in such a case.

Oscilloscope Analysis and Connectivity Made Easy

The Jitter Example with MATLAB ICT Functions

Next you will automatically acquire waveform data from your oscilloscope into MATLAB by calling the

jitter2 function:

1.

In the Command Window, type

rmsjitter = jitter2 (5000, 0, .1)

or simply

rmsjitter = jitter2

MATLAB runs the jitter2

function, assigns the returned result as the value of rmsjitter, and displays the answer in the Command Window

(since the line does not end with a semi-colon (;)).

MATLAB also displays two plotted graph solutions in the Figure

Window. The first plot is the acquired waveform and the second is the clock jitter. The acquired waveform should resemble the one shown on your oscilloscope.

Figure 48: The plotted graph solutions for jitter2 in the MATLAB Figure Window

Oscilloscope Analysis and Connectivity Made Easy

183

Improved Jitter Example with a GUI Interface

Improved Jitter Example with a GUI Interface

In this section, to make the previous solution more interactive, you will modify the jitter2

example to use the MATLAB Graphical User Interface

(GUI). This GUI allows interactive execution of MATLAB scripts, change of parameters and communication with instruments while providing powerful numerical computation and visualization.

For more information about using this GUI, consult the MATLAB User’s

Guide, the MATLAB online manual, and MATLAB

’s

Creating Graphical

User Interfaces books.

Adding GUI Components to the Solution

By adding these components to your solution, you will enable users to type input parameters into a form and click buttons to activate portions of the code. Follow these steps to build a GUI:

From the Command Window, select

File > New > GUI

or type

guide

to run

MATLAB’s GUI utility.

A file opens in the Figure Window with a canvas (grid) where you can place graphical user interface objects and axes objects.

A toolbar with GUI objects appears on the left side of the window.

Table 30 shows icons on the MATLAB guide toolbar that are

relevant to this example.

Select the

Static Text

tool from the toolbar and place labels for various GUI components (

Symbol Rate

,

Record Length

,

Threshold

, and

Hysteresis

) on the

right side of the canvas, as shown in Figure 49.

184 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

Table 30: Icons for MATLAB guide toolbar controls used in this book

Icon Icon Name

Static Text

Edit Text

Push Button

Popup Menu

Checkbox

Axes

Select from

guide toolbar guide toolbar guide toolbar guide toolbar guide toolbar guide toolbar

Figure 49: Building a GUI using the MATLAB guide utility

Oscilloscope Analysis and Connectivity Made Easy

185

Improved Jitter Example with a GUI Interface

Figure 50: The MATLAB guide utility Property Inspector

To change the default label for each of these controls, double-click the label or right-click and select

Property Inspector

(see Figure 50) from the context menu

of the label, then change the

String

property from the default text to the desired text.

The labels will now read

Symbol Rate

,

Record Length

,

Threshold

, and

Hysteresis

.

Select the

Edit Text

control from the toolbar and place the edit boxes under the four labels created in the previous steps.

Using the Property Inspector, change the

Tag

property for each of these edit boxes to the code names shown in

Table 31. These are the names that will be used to refer to these edit boxes in

automatically generated code.

Using the Property Inspector, change the

String

property for each of these edit

boxes to the initial values shown Figure 49 and Table 31.

Select the

PopUp Menu

control from the toolbar and create a popup menu as

shown in Figure 49.

Using the Property Inspector, click the little box next to the

String

property for the popup menu control: and type the following on separate lines:

TekVISA - Scope

NI VISA - PC

Agilent VISA - PC

186 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

Using the Property Inspector, change the

Value property for the pop-up menu control to

[1.0]

.

This makes the first selection,

TekVISA - Scope,

the default selection in the menu.

Select the

Push Button

control from the toolbar and create six buttons, sized and

positioned as shown in Figure 49.

Select the

Checkbox

control from the toolbar and create a check box as shown in

Figure 49.

Using the Property Inspector, change the

Tag

property for each of these controls

to the code names shown in Table 31. These are the names that will be used to

refer to these controls in automatically generated code.

Using the Property Inspector, change the

String

property for each of these

controls to the initial values shown in Figure 49 and Table 31. These are the

labels that will appear on these controls in the GUI.

Select the

Axes

control and place two Axes objects on the left side of the canvas

as shown in Figure 49. Leave their properties unchanged.

Double-click the canvas or right-click it and select

Property Inspector

from the context menu, then change the

Tag

property for the whole figure to the value

shown in Table 31. This is the name that will be used to refer to the whole figure

in automatically generated code.

Note:

Tag

properties are shown underlined in Table 31 to help

distinguish them from

String

properties.

Oscilloscope Analysis and Connectivity Made Easy

187

Improved Jitter Example with a GUI Interface

GUI Control

StaticText

StaticText

StaticText

StaticText

EditText

EditText

EditText

EditText

PopupMenu

PushButton

PushButton

Checkbox

PushButton

PushButton

PushButton

PushButton

Axes

Axes

Figure

Table 31: Changes to make in the Property Inspector to GUI controls

Tag

String

Tag

String

Tag

String

Tag

String

Value

Tag

String

Tag

String

Tag

String

String

String

Tag

Property Change to

Tag

String

Tag

String

Tag

String

String

String

String

String

Tag

String

Tag

String

Symbol Rate

Record Length

Threshold

Hysteresis editSymbolRate

5000 editRecordLength

200000 editThreshold

0 editHysteresis

0.1 popupmenuSelector

TekVISA - Scope

NI VISA - PC

Agilent - PC

no change from default [1.0]

pushbuttonCONNECT

CONNECT pushbuttonExportInstrument

ExportInstrument checkboxWaveformExport

Waveform Export pushbuttonStart

Start pushbuttonStop

Stop pushbuttonSINGLE

SINGLE pushbuttonClose

Close

no change no change

figJitter3

188 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

Save the GUI under the name

jitter3.

This creates the

jitter3.fig

and

jitter3.m

files. The FIG-file contains the GUI layout and graphical data that implements the graphical view. The M-file provides the functionality that implements the application model.

Note:

Instead of adhering to the sequential programming model used in jitter2

, the jitter3

example conforms to the event-based paradigm common to GUI-based applications, where user actions trigger event-driven callback functions.

Notice that appropriate

Callback

property values for the various GUI controls are automatically generated and displayed in the Property Inspector window.

Note also that the

jitter3.m

file automatically opens in the MATLAB

Editor/Debugger with initialization code and partial callback code stubs already generated.

Performing an Interim Test

To see the finished user interface and test it:

1.

Select

Tools > Activate Figure

from the Guide menu.

The interface does not respond to buttons yet, but you will be able to change input parameters.

2.

Experiment with changing the values of parameters in the edit boxes.

Modifying Auto-Generated Functions

Now you are ready to edit the generated code and callback functions that implement initialization and respond to user events (such as clicking on buttons).

The jitter3 Function

The jitter3 function handles both initialization of the GUI and its callback functions. This function is called whenever you type

jitter3

in the Command

Window.

• If the call has no arguments, the jitter3.fig

file is opened for user input, and all handles are stored with the application figure.

• If jitter3

is called with arguments, the function dispatches the appropriate callback function. (You can scroll down the jitter3.m

file to see the default implementation of callback functions.)

Oscilloscope Analysis and Connectivity Made Easy

189

Improved Jitter Example with a GUI Interface

From the GUI you created, MATLAB automatically generates the following commented code, which accepts a variable number of arguments. Note the use of the MATLAB

NARGIN

and

NARGOUT

functions to get the number of arguments. function varargout = jitter3(varargin)

% jitter3 Application M-file for jitter3.fig

% FIG = jitter3 launch jitter3 GUI.

% jitter3('callback_name', ...) invoke the named callback.

% Last Modified by GUIDE v2.0 24-Apr-2001 16:59:06 if nargin == 0 % LAUNCH GUI fig = openfig(mfilename, 'reuse' );

% Use system color scheme for figure: set(fig, 'Color' ,get(0, 'defaultUicontrolBackgroundColor' )); it.

% Generate a structure of handles to pass to callbacks, and store handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try

[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard catch disp(lasterr); end end

%| ABOUT CALLBACKS:

%| GUIDE automatically appends subfunction prototypes to this file, and

%| sets objects' callback properties to call them through the FEVAL

%| switchyard above. This comment describes that mechanism.

%|

%| Each callback subfunction declaration has the following form:

%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)

%|

%| The subfunction name is composed using the object's Tag and the

%| callback type separated by '_', e.g. 'slider2_Callback',

%| 'figJitter3_CloseRequestFcn', 'axis1_ButtondownFcn'.

%|

%| H is the callback object's handle (obtained using GCBO).

%|

%| EVENTDATA is empty, but reserved for future use.

%|

%| HANDLES is a structure containing handles of components in GUI using

%| tags as fieldnames, e.g. handles.figJitter3, handles.slider2. This

%| structure is created at GUI startup using GUIHANDLES and stored in

%| the figure's application data using GUIDATA. A copy of the structure

%| is passed to each callback. You can store additional information in

%| this structure at GUI startup, and you can change the structure

%| during callbacks. Call guidata(h, handles) after changing your

%| copy to replace the stored original so that subsequent callbacks see

%| the updates. Type "help guihandles" and "help guidata" for more

%| information.

%|

190 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

%| VARARGIN contains any extra arguments you have passed to the

%| callback. Specify the extra arguments by editing the callback

%| property in the inspector. By default, GUIDE sets the property to:

%| <MFILENAME>('<SUBFUNCTION_NAME>', gcbo, [], guidata(gcbo))

%| Add any extra arguments after the last argument, before the final

%| closing parenthesis.

% --------------------------------------------------------------------

As described in the code comments:

• fig

references the FIG-file created for jitter3

.

• handles

is a locally defined variable that references the structure of GUI controls in jitter3

. These handle components use

Tag names as field modifiers, such as handles.editThreshold

and handles.pushbuttonStart

.

You do not need to make any changes to this automatically generated code block.

The Parameter Edit Text Box Functions

From the GUI you created, MATLAB automatically generates the following code stubs for the

Edit Text

boxes:

% -------------------------------------------------------------------function varargout = editSymbolRate_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.editSymbolRate.

% -------------------------------------------------------------------function varargout = editRecordLength_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.editRecordLength.

% -------------------------------------------------------------------function varargout = editThreshold_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.editThreshold.

% -------------------------------------------------------------------function varargout = editHysteresis_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.editHysteresis.

This code is called when the user enters text in one of the

Edit Text

boxes on the user interface. You need to update these callback functions so that application parameters are updated when the user changes values on the user interface. To do this, you will use two new predefined functions:

• The setappdata

MATLAB function sets the name and value for application-defined data associated with the handles structure. Once this function stores the application data, other callbacks can access it.

Oscilloscope Analysis and Connectivity Made Easy

191

Improved Jitter Example with a GUI Interface

• The get

MATLAB function returns object properties and their values. In this case, it returns the

String

property of elements identified by handle h

, which are qualified by their tag names.

Complete the callback functions as follows:

1.

Insert the following line after the code stub for the

Symbol

Rate

Edit Text box: setappdata(handles.figJitter3, 'SymbolRate' , ...

str2num(get(h, 'String' )));

This code sets the

SymbolRate variable to the numeric equivalent of a

String

property value obtained from the

Symbol Rate

Edit Text box identified by handle h

.

2.

Insert the following line after the code stub for the

Record

Length

Edit Text box: setappdata(handles.figJitter3, 'RecordLength' , ...

str2num(get(h, 'String' )));

This code sets the

RecordLength variable to the numeric equivalent of a

String

property value obtained from the

Record Length

Edit

Text box identified by handle h

.

3.

Insert the following line after the code stub for the

Threshold

Edit Text box: setappdata(handles.figJitter3, 'Threshold' , ...

str2num(get(h, 'String' )));

This code sets the

Threshold variable to the numeric equivalent of a

String

property value obtained from the

Threshold

Edit Text box identified by handle h

.

4.

Insert the following line after the code stub for the

Hysteresis

Edit Text box: setappdata(handles.figJitter3, 'Hysteresis' , ...

str2num(get(h, 'String' )));

This code sets the

Hysteresis variable to the numeric equivalent of a

String

property value obtained from the

Hysteresis

Edit Text box identified by handle h

.

The VISA Selector Popup Menu Function

The jitter3.m

function does not automatically connect to the oscilloscope. The user must first select the VISA vendor (Tek, NI, or Agilent) from a popup menu and then click the

CONNECT

button.

192 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

From the GUI you created, MATLAB automatically generates the following code stub for the popup menu used to select a VISA vendor:

% -------------------------------------------------------------------function varargout = popupmenuSelector_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.popupmenuSelector.

Complete this callback function as follows:

1.

Insert the following lines after the code stub: setappdata(handles.figJitter3, 'Connection' ,get(h, 'Value' ));

This code sets the

Connection variable to the

Value

property value obtained from the popup menu identified by handle h

, where:

1 = TekVISA - Scope

2 = NI VISA - PC

3 = Agilent - PC

The CONNECT Button Function

From the GUI you created, MATLAB automatically generates the following code stub for the

CONNECT

button:

% -------------------------------------------------------------------function varargout = pushbuttonCONNECT_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.pushbuttonCONNECT.

This code is called when a user clicks the

CONNECT

button on the user interface. Complete the callback function as follows:

1.

Insert the following lines after the code stub:

% Read the parameters from edit boxes (String property) on the

% user interface and set the application data associated with

% the figure window so that it is accessible from any callback

% function symbolRate = str2num(get(handles.editSymbolRate, 'String' )); setappdata(handles.figJitter3, 'SymbolRate' ,symbolRate); recordLen = str2num(get(handles.editRecordLength, 'String' )); setappdata(handles.figJitter3, 'RecordLength' ,recordLen); threshold = str2num(get(handles.editThreshold, 'String' )); setappdata(handles.figJitter3, 'Threshold' ,threshold); hysteresis = str2num(get(handles.editHysteresis, 'String' )); setappdata(handles.figJitter3, 'Hysteresis' ,hysteresis); conn = get(handles.popupmenuSelector, 'Value' ); setappdata(handles.figJitter3, 'Connection' ,conn); strCh = 'ch1' ; g = open_instrument(conn,strCh,symbolRate,recordLen, ...

threshold,hysteresis)

% store the instrument object as application data so that other

% callbacks can access it setappdata(handles.figJitter3, 'instr' ,g)

% Turn the CONNECT button enable property off so that it can't

% be pressed again set(h, 'Enable' , 'off' ); set(handles.editRecordLength, 'Enable' , 'off' ); set(handles.popupmenuSelector, 'Enable' , 'off' );

Oscilloscope Analysis and Connectivity Made Easy

193

Improved Jitter Example with a GUI Interface

This function:

a.

Reads parameters from the

Edit Text

box objects and popup menu object in the GUI using the

Get

MATLAB function, instead of getting the parameters from a function call or local assignment (as was done in the jitter2.m example).

b.

Converts the parameters to numbers, since they are stored as string data.

c.

Passes the parameters to the open_instrument function

(on page 194) to open a VISA object and set up the

instrument, and returns the resulting VISA object as g

.

d.

Uses the setappdata

MATLAB function to store the parameter information with the application Figure

Window. The same is done for the VISA object g

.

Otherwise, this data would not be accessible from other callbacks, such as those for the

SINGLE

and

Close

buttons.

e.

Uses the set

MATLAB function to turn the

Enable property off for the

CONNECT

button, the

Record

Length

Edit Text box, and the VISA selection pop-up menu. Disabling these controls prevents the user from accessing them while connected.

The Open Instrument Function

Next you will write the open_instrument

function. Rather than coding this function inline, you will call it separately to improve readability and facilitate code reuse and modification.

1.

Type the following lines at the end of the jitter3.m

file after the code stubs for callback functions:

% function to open the instrument and set up the measurement function g = open_instrument(conn,strCh,symbolRate, ...

recordLen,threshold,hysteresis)

% Use inside the scope with Tek VISA (conn=1),

% externally with NI visa (conn=2)

% or Agilent VISA (conn=3) switch conn case 1, g = visa(

'tek' , 'GPIB8::1::INSTR' );

disp( 'g = visa(''tek'',''GPIB8::1::INSTR'');' ) case 2, g = visa(

'ni' , 'GPIB0::1::INSTR' );

disp( 'g = visa(''ni'',''GPIB0::1::INSTR'');' ) case 3, g = visa(

'agilent' , 'GPIB0::1::INSTR' );

disp( 'g = visa(''agilent'',''GPIB0::1::INSTR'');' ) end disp( 'Instrument object is created' )

194 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

% set the instrument object properties set(g, 'InputBufferSize' ,recordLen*2);

% open the instrument object for reading and writing

fopen(g);

% send commands to set up the instrument

fprintf

(g,

'HEADER OFF'

);

fprintf

(g,[

'DATA:SOURCE '

strCh]);

fprintf

(g,

'DATA:ENCDG SRIBINARY;WIDTH 2'

);

fprintf

(g,

'ACQUIRE:STATE OFF'

);

fprintf

(g,

'ACQUIRE:MODE NORMALSAMPLE'

);

fprintf

(g,

'ACQUIRE:STOPAFTER SEQUENCE'

);

% end of open_instrument

Notice that some of this code is borrowed directly from the jitter2.m

script. This function:

a.

Creates and opens a VISA object based on the vendor value selected in the VISA selector pop-up menu.

b.

Uses the disp

MATLAB function to display instrument object summary information.

c.

Sets up the instrument, but does not acquire any data yet.

The Close Button Function

From the GUI you created, MATLAB automatically generates the following code stub for the

Close

button:

% -------------------------------------------------------------------function varargout = pushbuttonClose_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.pushbuttonClose.

This code is called when a user clicks the

Close

button on the user interface.

Complete the callback function as follows:

1.

Insert the following lines after the code stub:

% get the instrument object and delete it unless it is empty

% (CONNECT button was never pressed) g = getappdata(handles.figJitter3, 'instr' ); if isempty(g) else disp( 'No instrument object' )

fclose(g) delete(g)

disp( 'Instrument object is closed and deleted' ) end close(handles.figJitter3)

This code:

a.

Uses the getappdata

MATLAB function to access the instrument object made available by the setappdata function.

b.

Checks to see whether instrument object g

is empty and quits without errors if the connection was never made

Oscilloscope Analysis and Connectivity Made Easy

195

Improved Jitter Example with a GUI Interface

c.

Uses fclose

and delete

ICT functions to close and deallocate memory for the instrument object.

d.

Uses the disp

MATLAB function to immediately display information about the instrument object.

e.

Uses the close

MATLAB function to close the Figure

Window.

2.

To test execution, activate the user interface by selecting

Tools > Activate Figure

from the Guide menu.

3.

Click the

Close

button in the Figure Window to ensure that no error messages are generated.

The

Close

button should close the GUI without errors.

4.

Type

instrfind

in the Command Window to ensure that no instrument objects are left in the workspace.

The function should return an empty matrix.

The SINGLE Button Function

From the GUI you created, MATLAB automatically generates the following code stub for the

SINGLE

button:

% -------------------------------------------------------------------function varargout = pushbuttonSINGLE_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.pushbuttonSINGLE.

This code is called when a user clicks the

SINGLE

button on the user interface. Complete the callback function as follows:

1.

Insert the following lines after the code stub:

% disable the button while processing the acquisition set(h, 'Enable' , 'off' );

% store application data with the main figure object

% it is updated by edit box callbacks g = getappdata(handles.figJitter3, 'instr' ); recordLen = getappdata(handles.figJitter3, 'RecordLength' ); symbolRate = getappdata(handles.figJitter3, 'SymbolRate' ); threshold = getappdata(handles.figJitter3, 'Threshold' ); hysteresis = getappdata(handles.figJitter3, 'Hysteresis' ); exportWaveform = getappdata(handles.figJitter3, ...

'ExportWaveform' );

% call the function that communicates with the instrument acquire_instrument(handles,g,symbolRate,recordLen, ...

threshold,hysteresis,exportWaveform)

% enable the button set(h, 'Enable' , 'on' );

196 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

This code:

a.

Uses the set

MATLAB function to turn the

Enable property off for the

SINGLE

button. Disabling this button prevents the user from clicking it during the acquisition.

b.

Uses the getappdata

MATLAB function to access the instrument object, record length, symbol rate, threshold, hysteresis, and waveform export check box status. These parameters were made available by the setappdata

MATLAB function in the open_instrument

function (on

page 194).

c.

Passes these parameters to the acquire_instrument function

(on page 199) to acquire a single waveform

sequence.

d.

Re-enables the

SINGLE

button after the acquisition.

The Start Button Function

From the GUI you created, MATLAB automatically generates the following code stub for the

Start

button:

% -------------------------------------------------------------------function varargout = pushbuttonStart_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.pushbuttonStart.

This code is called when a user clicks the

Start

button on the user interface.

Complete the callback function as follows:

1.

Insert the following lines after the code stub:

% set the application data interrupted to 0

% it will be changed only by pressing STOP button.

% this variable will be checked inside the while loop in acquire instrument interrupted = 0; setappdata(handles.figJitter3, 'interrupted' ,interrupted); set(h, 'Enable' , 'off' ); g = getappdata(handles.figJitter3, 'instr' ); recordLen = getappdata(handles.figJitter3, 'RecordLength' ); symbolRate = getappdata(handles.figJitter3, 'SymbolRate' ); threshold = getappdata(handles.figJitter3, 'Threshold' ); hysteresis = getappdata(handles.figJitter3, 'Hysteresis' ); exportWaveform = getappdata(handles.figJitter3, ...

'ExportWaveform' );

% Change the scope to perform continuous measurements

fprintf

(g,

'ACQUIRE:STOPAFTER RUNSTOP'

);

% call the acquisition function acquire_instrument(handles,g,symbolRate,recordLen, ...

threshold,hysteresis,exportWaveform)

Oscilloscope Analysis and Connectivity Made Easy

197

Improved Jitter Example with a GUI Interface

% Enable the button when finished (STOP button pressed and

% acquire_instrument finished) set(h, 'Enable' , 'on' );

This code:

a.

Zeroes an interrupted

state variable that is used to determine whether a continuous RUN acquisition has been interrupted by a user clicking the

Stop

button.

b.

Uses the setappdata

MATLAB function to set the name and value for the interrupted

state variable and associate it with the figure object, so that other callbacks can access it.

c.

Uses the set

ICT function to turn the

Enable

property off for the

Start

button. Disabling this button prevents the user from clicking it during the acquisition.

d.

Uses the fprintf function to send an

ACQUIRE:STOPAFTER RUNSTOP

native GPIB command, which tells the oscilloscope to acquire continuous data rather than a single sequence

(

ACQUIRE:STOPAFTER SEQUENCE)

.

e.

Uses the getappdata

MATLAB function to access the instrument object, record length, symbol rate, threshold, hysteresis, and waveform export check box status. These parameters were made available by the setappdata

MATLAB function in the open_instrument

function (on

page 194).

f.

Passes these parameters to the acquire_instrument function

(on page 199) to acquire a continuous

waveform sequence until the

Stop

button is clicked.

g.

Re-enables the

Start

button after the acquisition is stopped by a user clicking the

Stop

button.

The Stop Button Function

From the GUI you created, MATLAB automatically generates the following code stub for the

Stop

button:

% -------------------------------------------------------------------function varargout = pushbuttonStop_Callback(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.pushbuttonStop.

198 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

This code is called when the

Stop

button is clicked on the user interface.

Complete the callback function as follows:

1.

Insert the following lines after the code stub: setappdata(handles.figJitter3, 'interrupted' , 1);

This code uses the setappdata

MATLAB function to set the value for the interrupted

state variable to 1, signifying that a continuous

RUN acquisition has been interrupted by a user clicking the

Stop

button.

The Acquire Instrument Function

Next you will write the acquire_instrument

function and add it to the end of the jitter3.m

function. Rather than coding this function inline, you will create and call it separately to improve readability and facilitate code reuse and modification.

1.

Type the following lines at the end of the jitter3.m

file after the open_instrument

function. Cut and paste from the jitter2.m

file where possible to avoid retyping duplicate code:

% -----------------------------------function acquire_instrument(handles,g,symbolRate,recordLen, ...

threshold,hysteresis,exportWaveform)

% function to perform a measurement and read the waveform data

fprintf

(g,

'ACQUIRE:STATE RUN'

);

% set this variable to 0 despite what value is stored as an

% application data. This enables both SINGLE and STOP/RUN

% functionality interrupted = 0;

% perform the main loop while (~interrupted) while

query

(g,

'BUSY?' , '%s'

,

'%e'

); end ; horizLen = query(g,

'HORIZONTAL:RECORD?' , '%s'

,

'%e'

);

fprintf

(g,[

'DATA:START '

num2str(1)]);

fprintf

(g,[

'DATA:STOP '

num2str(recordLen)]);

fprintf

(g,

'CURVE?

' ); dummy_string1 = fscanf(g,

'%s' ,2);

dummy_string2 = fscanf(g,

'%s' ,str2num(dummy_string1(2)));

recordLen2Transfer = min(recordLen,horizLen);

[waveform_raw count] = fread(g,recordLen2Transfer,

'int16' );

% read the termination character dummy_string3 = fscanf(g,

'%s' ,1);

% get the sampling interval sampleInterval = query(g,

'WFMOUTPRE:XINCR?' , '%s'

,

'%e'

);

% Scale the data yunit = query(g,

'WFMOUTPRE:YUNIT?'

); ymult = query(g,

'WFMOUTPRE:YMULT?' , '%s'

,

'%e'

); yoff = query(g,

'WFMOUTPRE:YOFF?' , '%s'

,

'%e'

); yzero = query(g,

'WFMOUTPRE:YZERO?' , '%s'

,

'%e'

);

% check that all parameters were read from the device if ~(isempty(waveform_raw) | isempty(ymult) | ...

isempty(yoff) | isempty(yzero))

% scale the data to the correct values waveform = ymult*(waveform_raw - yoff) - yzero;

Oscilloscope Analysis and Connectivity Made Easy

199

Improved Jitter Example with a GUI Interface

200

% determine whether waveform contains any edges

% otherwise skip the jitter analysis if max(waveform) > threshold + hysteresis & ...

min(waveform) < threshold - hysteresis

% find the edges in the supplied waveform measuredTime = measureEdgeTiming2(waveform, ...

threshold,hysteresis,sampleInterval);

% preallocate space for the clocks array clocks=zeros(1,length(measuredTime));

% derive the clocks based on the supplied symbol

% rate for index = 2:length(measuredTime); clocks(index) = (round(symbolRate * ...

(measuredTime(index) ...

measuredTime(index - 1)))) ...

+ clocks(index-1); end

% fit the derived clocks and the measured time to a

% straight line coef = polyfit(clocks, measuredTime, 1);

% coef(2) is the intercept (a) in the form

% y = a + bx

% coef(1) is the slope (b) in the form y = a + bx a = coef(2); b = coef(1); measuredAverageSymbolRate = 1/b; measuredSymbolRateError = ...

(measuredAverageSymbolRate - symbolRate) ...

/symbolRate; reconstructedTime = a + (clocks .* b);

% jitter is the difference between the measured

% time and the reconstructed time.

jitter = reconstructedTime - measuredTime;

% see the MATLAB function reference for 'norm' rmsJitter = norm(jitter)/sqrt(length(jitter)); set(handles.figJitter3, 'HandleVisibility' , 'on' ); axes(handles.axes1) plot(waveform) title = ([ 'symbol rate error: ' , ...

num2str(measuredSymbolRateError * 100, ...

'%' ]); xlabel( 'samples' ); ylabel([ 'waveform amplitude, ' strtok(yunit, '"' )]); set(handles.axes1,'XLim',[0 count]) axes(handles.axes2) plot(reconstructedTime,jitter); title = ([ 'RMS jitter: ' , ...

num2str(rmsJitter*1e6), ' \mus' ]); xlabel( 'time in seconds' ); ylabel( 'jitter in \mus' );

% set axis manually, otherwise the autoscaling

% overrides the setting set(handles.axes2, 'XLim' ,[0 count*sampleInterval])

% calculate and plot jitter histogram

[hs,y]=hist(jitter,30); hold on

% scale the histogram hg_hist = ...

barh(y,hs*reconstructedTime(end)/max(hs)*0.3,1);

Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface hold off set(hg_hist, 'FaceAlpha' ,0.4) set(hg_hist, 'EdgeAlpha' ,0) set(handles.figJitter3, 'HandleVisibility' , 'off' ); else set(handles.figJitter3, 'HandleVisibility' , 'on' ); axes(handles.axes1) plot(waveform) xlabel( 'samples' ); ylabel([ 'waveform amplitude, ' strtok(yunit, '"' )]); axes(handles.axes2) title( 'RMS jitter not calculated - no edges ...

detected.' ); set(handles.figJitter3, 'HandleVisibility' , 'off' ); end

% export waveforms to MATLAB workspace if exportWaveform assignin( 'base' , 'waveform' ,waveform); assignin( 'base' , 'measuredTime' ,measuredTime); assignin( 'base' , 'reconstructedTime' , ...

reconstructedTime); assignin( 'base' , 'jitter' ,jitter); assignin( 'base' , 'clocks' ,clocks); assignin( 'base' , 'a' ,a); assignin( 'base' , 'b' ,b); assignin( 'base' , 'measuredAverageSymbolRate' , ...

measuredAverageSymbolRate); assignin( 'base' , 'sampleInterval' ,sampleInterval); end drawnow;

% check whether the user has pressed on Stop button interrupted = getappdata(handles.figJitter3, ...

'interrupted' ); else set(handles.figJitter3, 'HandleVisibility' , 'on' ); axes(handles.axes1) title( 'Data incorrectly received from the scope' ) set(handles.figJitter3, 'HandleVisibility' , 'off' ); end end % while interrupted

% end of acquire_instrument

Again, much of this code is borrowed from jitter2.m

. However, this function implements more features and checks for error conditions so it fails more gracefully. In particular, this code:

a.

Sets up a loop (based on the variable interrupted

) that adds the capability to get either a SINGLE acquisition

(when the user clicks the

SINGLE

button), or a continuous RUN acquisition (when the user clicks the

Start

button).

b.

Uses the isempty

MATLAB function to make sure all the parameters were read from the device before scaling the data. If not, uses the set

MATLAB function to turn the

HandleVisibility

property on for handles on the Figure

Window to help prevent overplotting of the previous plot, so that the message “Data incorrectly received

from the scope” can be displayed in the title instead of plotting the waveform. Then the property is turned back off.

Oscilloscope Analysis and Connectivity Made Easy

201

Improved Jitter Example with a GUI Interface

c.

Uses the min

and max

MATLAB functions to determine whether to skip the jitter analysis if no edges were found in the waveform (which would be the case if you are not using the Waveform Generator program or another connected source to generate the signal). If none were found, displays the message “RMS jitter not calculated -

no edges detected.”

d.

Activates axes in a different way before plotting.

Because axes already exist, instead of using the subplot function as in the jitter2.m

example, this function calls the axes

MATLAB function with axis handle arguments

( handles.axes1 and handles.axes2

), after which regular plotting commands are used.

e.

Gets the count

of the number of values read when performing the fread

of the waveform, and uses this count to help calculate and manually set the

XLim property that appears on the Jitter plot’s x axis.

f.

Calculates and plots a histogram of the jitter using hist and barh

MATLAB functions, since this form of graph is frequently used to determine the cause of jitter. It is plotted on the vertical axis and uses a new feature introduced in MATLAB 6.0 that enables transparently overlayed waveforms.

g.

Checks the value of the exportWaveform

variable to see if the

Waveform Export

check box (on page 202) was

selected. If so, uses the assignin

MATLAB function to export all the waveform variables to the MATLAB workspace (which is referred to as the base)

.

h.

Uses the drawnow

MATLAB function to update the plot.

i.

Checks the current state of the application data

’interrupted’

associated with handles.figJitter3

to see if the user has clicked the

Stop

button yet, in which case control returns to the

Start

button function (on page

197). Otherwise, acquisition and processing continues.

The Waveform Export Check Box Function

The

Jitter3.m

program allows users to export waveforms and many other parameters to MATLAB workspace for further analysis and visualization.

From the GUI you created, MATLAB automatically generates the following code stub for the

Waveform Export

check box:

% -------------------------------------------------------------------function varargout = checkboxWaveformExport(h, eventdata, ...

handles, varargin)

% Stub for Callback of the uicontrol handles.checkboxWaveformExport.

202 Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

This code is called when the user selects the

Waveform Export

check box on the user interface. Complete the callback function as follows:

1.

Insert the following lines after the code stub: setappdata(handles.figJitter3, 'ExportWaveform' ,get(h, 'Value' ));

This function sets the

ExportWaveform variable to the

Value

property value obtained from the check box identified by handle h

.

The Export Instrument Button Function

The

Jitter3.m

program also includes an

Export Instrument

button. This feature exports the instrument object, which enables users to have interactive access from the MATLAB prompt to the current connection to the oscilloscope instrument, while the jitter3.m

program remains open.

From the GUI you created, MATLAB automatically generates the following code stub for the

Export Instrument

button:

% -------------------------------------------------------------------function varargout = pushbuttonExportInstrument_Callback(h, ...

eventdata, handles, varargin)

% Stub for Callback of the uicontrol

% handles.pushbuttonExportInstrument.

This code is called when the

Export Instrument

button is clicked on the user interface. Complete the callback function as follows:

1.

Insert the following lines after the code stub: g = getappdata(handles.figJitter3, 'instr' ); assignin( 'base' , 'instr' ,g); disp( 'Instrument object exported to workspace as instr' )

This code:

a.

Uses the getappdata

MATLAB function to access the instrument object made available by the setappdata function.

b.

Uses the assignin

MATLAB function to export the instrument object to the MATLAB workspace.

c.

Uses the disp

function to display the message

Instrument object exported to workspace as instr.” in the MATLAB command window. Users can access the object on the MATLAB command line by typing the variable name

instr

with any ICT function.

2.

Click the

Save to Disk

icon from the toolbar, type

jitter3.m

and click

OK

.

Figure 51 shows the first page of the completed

jitter3

function.

Oscilloscope Analysis and Connectivity Made Easy

203

Improved Jitter Example with a GUI Interface

204

Figure 51: First page of completed jitter3 example in MATLAB

Testing the Improved Solution

To test the completed GUI:

1.

Close all Figure Windows before running the jitter3 application.

2.

In the Command Window, type

jitter3

The jitter3.fig

file is opened for user input.

3.

Select

TekVISA - Scope

from the pop-up menu in the Figure

Window.

4.

Click the

CONNECT

button in the Figure Window.

Oscilloscope Analysis and Connectivity Made Easy

Improved Jitter Example with a GUI Interface

5.

Click the

SINGLE

button in the Figure Window to acquire waveform data using the default input values.

MATLAB gets a waveform and updates both plotted graph solutions along with the information displayed in their titles in the Figure

Window, as shown in Figure 52.

6.

Select the

Waveform Export

check box.

7.

Change the values in the edit boxes for

Symbol Rate

,

Record Length

,

Threshold

, and

Hysteresis

.

8.

Click the

Start

button in the Figure Window to acquire waveform data using the new values.

MATLAB gets a waveform of the specified length continuously, and updates both plotted graph solutions at regular intervals, along with the information displayed in their titles in the Figure Window.

9.

Click the

Stop

button in the Figure Window to stop data acquisition.

Data acquisition stops, and the waveform and associated parameters are exported since the check box was selected.

10.

In the Command Window, type

whos

to verify that the following variables are accessible from the MATLAB workspace:

waveform measuredtime jitter clocks a b measuredAverageSymbolRate sampleInterval

11.

Click the

Export Instrument

button in the Figure Window to export the instrument object to the MATLAB workspace.

The message “Instrument object exported to workspace as instr” appears on the MATLAB command line.

12.

In the Command Window, type the following to verify that the instrument object is accessible from the MATLAB workspace:

instr

MATLAB displays the instrument properties.

Oscilloscope Analysis and Connectivity Made Easy

205

Chapter 8 Review

206

Figure 52: The plotted graph solutions for jitter3 in the MATLAB Figure Window

Chapter 8 Review

To review what you learned in Chapter 9:

• You can use the

Instrument Control Toolbox

included in

MATLAB 6.1 to communicate between Tektronix

Windows-based oscilloscopes and MATLAB programs.

• You can use the

guide

utility

,

which is included in

MATLAB 6.1, to design your own graphical user interfaces and add them to MATLAB functions.

• You can use the

jitter2

and

jitter3

programs described in this chapter as templates for inserting waveform data into other

MATLAB programs, with or without a GUI interface.

• You can use the

jitter3

program as a useful and timesaving way to

open an instrument and export it

to the MATLAB workspace, regardless of the type of analysis being performed.

Oscilloscope Analysis and Connectivity Made Easy

Introduction

Chapter 9:

LabWindows/CVI and

LabVIEW

Using Tektronix Plug-n-Play Drivers with

LabWindows/CVI and LabVIEW

Introduction

New Plug-n-Play drivers from Tektronix enable communication between your Windows-based oscilloscope and popular programming environments.

Now you can easily incorporate these Plug-n-Play driver functions into programs that you build using LabWindows/CVI and LabVIEW, two popular test-automation packages from National Instruments.

Although this chapter focuses on oscilloscope connectivity in the

LabWindows/CVI and LabVIEW environments, you can also use these PnP drivers in other environments such as Visual Basic 6.0, Visual C++ 6.0, and

HP-VEE.

Caution

: Tektronix recommends that you use LabVIEW and

LabWindows/CVI on an external PC to control your Tektronix

Windows-based oscilloscopes. However, if you want to run

LabVIEW and LabWindows/CVI directly on your oscilloscope, first call a Tektronix Technical Support Representative for assistance.

Tektronix Plug-n-Play Drivers

Tektronix VXI Plug-n-Play compatible drivers can be used on a PC to control your oscilloscope. The driver for controlling each type of oscilloscope includes a function panel (.fp), header (.h), source (.c), Dynamic

Link Library (DLL), and help (.hlp) file.

Each driver consists of a number of functions that mirror the knobs and controls on your oscilloscope and the menu selections on your oscilloscope software. These software functions can set up, communicate with, acquire data from, and otherwise control features of your oscilloscope. You can call the run-time functions from the test programs you write.

Use the Installation program on your product software CD to install the Plugn-Play driver files on your PC. To find out more about using the Plug-n-Play

Oscilloscope Analysis and Connectivity Made Easy 207

Overview of LabWindows/CVI driver functions, consult the online Plug-n-Play driver

Function Reference

Help file

for your oscilloscope Series. Figure 53 shows a sample page from

the Function Reference Help file for the TDS/CSA 8000 Series

Oscilloscope.You can invoke this Windows online help or a PDF version of it from the Start menu by selecting

Start > Programs >VXIpnp

and choosing the desired version.

3

Figure 53: Plug-n-play Driver Help file for TDS/CSA8000 Series oscilloscopes

Overview of LabWindows/CVI

LabWindows/CVI is an interactive ANSI C environment developed by

National Instruments. The LabWindows/CVI/CVI environment allows you to create virtual instruments on personal computers that communicate with real instruments via communications interfaces. Widely used for developing data acquisition and instrument control software, LabWindows/CVI comes with a complete set of I/O and instrumentation libraries, user interface tools, and mathematical analysis libraries.

3 Assuming you are installing on the

C:

drive on a Windows 98 system, the tktds8k.hlp file is located in

C:\VXIpnp\Win95\Tktds8k\. On a Windows NT system, the tktds8k.hlp file is located in

C:\VXIpnp\WinNT\Tktds8k\. You can invoke the help file from that directory.

208 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

This simple example demonstrates how to use the Tektronix tktds8k

Plug-n-

Play driver functions within LabWindows/CVI to control the TDS/CSA8000 sampling oscilloscope from a PC running LabWindows/CVI 5.5 and connected by a GPIB cable to the GPIB slot on the back of the

TDS/CSA8000 oscilloscope. The concepts described here apply to drivers for any Tektronix Windows-based oscilloscope.

This section assumes you are already familiar with the LabWindows/CVI

C coding environment and have worked with instrument drivers before.

Table 38 summarizes the TDS/CSA 8000 PnP driver functions used in this

book.

To work this example, you will first need to load the PnP driver for your oscilloscope.

Loading the Driver

To install the Plug-n-Play driver, you must unzip the

tktds8k PnP driver

and run the

setup.exe

program. This program places a folder named

VXIpnp

in your root directory.

After installing the driver, there are two ways to incorporate a Tektronix

Plug-n-Play driver into your LabWindows/CVI program.

Note:

It is not necessary to install TekVISA on your PC to work this example, since LabWindows/CVI comes with its own NI-VISA implementation already installed. Installing TekVISA will overwrite your NI-VISA implementation. The Plug-n-Play drivers are layered to work with either VISA implementation.

Load from the Instrument Menu

One way to load a Tektronix plug-n-play driver into LabWindows/CVI is from the

Instrument

menu:

1.

Inside the LabWindows/CVI environment, choose

Instrument > Load…

2.

Browse to the disk location where plug-n-play drivers have been installed, and select the instrument driver file (with an

.fp

extension) for the oscilloscope you are working on. For the TDS/CSA 8000 oscilloscope, this file is

tktds8k.fp

.

4

4 Assuming you are installing on the

C:

drive on a Windows 98 system, the driver is placed in

C:\VXIpnp\Win95\Tktds8k\. On a Windows NT system, the driver is placed in

C:\VXIpnp\WinNT\Tktds8k\. The VXIpnp folder is created only if it does not already exist.

Oscilloscope Analysis and Connectivity Made Easy

209

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

LabWindows/CVI compiles the driver source code and makes the driver library and its functions available under the

Instrument

menu.

3.

To view the driver library functions, select the driver library from the

Instrument

menu (in this case, you would select

TDS 8000 Series Oscilloscope…)

As you can see, a large number of Plug-n-Play functions are available for you to select and incorporate into your

LabWindows/CVI program.

To see how to select a function, choose the

init

function and click

Select

.

210 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

A graphical screen similar to the following appears, prompting you for fields to complete the syntax:

Right-click the graphical screen to get help with the syntax of the function.

A Function help screen appears similar to the following:

Click on one of the controls in the graphical screen and press

F1

to get help with an individual field.

Oscilloscope Analysis and Connectivity Made Easy

211

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

A Control help screen appears similar to the following:

Open from the File Menu

Another way to incorporate a Tektronix Plug-n-Play driver into your

LabWindows/CVI program is to open it from the

File

menu:

1.

Inside the LabWindows/CVI environment, choose

File >

Open > Function Tree (*.fp)…

212

2.

Browse to the disk location where plug-n-play drivers have been installed, select the instrument driver file (with an

.fp

extension) for the oscilloscope you are working on, and add it to your LabWindows/CVI project. For the TDS/CSA 8000 oscilloscope, this file is

tktds8k.fp

.

LabWindows/CVI compiles the driver source code and automatically adds the driver into the LabWindows/CVI design environment.

Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

Note:

If you wish, open the driver

source

and

include

files and add them to your project, so you can view driver function parameters more easily while developing. In the case of the

TDS/CSA8000 oscilloscope, these source files are

tktds8k.c

(located in the same subdirectory as the help file) and

tktds8k.h

(located in the

\include subdirectory)

.

Building the Interface

This Measurement Capture example uses a timer control to periodically capture a specified measurement and place the value in a list box. The timer interval may be adjusted by a dial control. Because the target oscilloscope in this example is a TDS/CSA8000 oscilloscope, the example lists its eight possible measurements in the left-hand list box (

Meas1

to

Meas8

). The values of the measurement selected in the left-hand list box are placed in the right-hand list box at the interval specified in the dial control. Measurements are made until the user clicks the

Stop

button or until 1000 measurements

have been taken. Figure 54 shows the Measurement Capture interface at

design time.

Figure 54: The Measurement Capture program interface at LabWindows/CVI design time

To design this interface:

1.

Select

File > New > User Interface

to create a new user interface file with a blank panel.

2.

Insert controls onto the panel by making selections from the

Create

menu, as shown in Figure 55.

Oscilloscope Analysis and Connectivity Made Easy

213

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

Figure 55: Adding controls to a LabWindows/CVI panel

3.

Double-click each control to access the edit attributes dialog menu for that control.

A dialog box appears for editing its attributes, as shown in Figure 56.

214

Figure 56: Dialog box for editing attributes of the Dial control in LabWindows/CVI

Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

Table 32 shows the relevant attributes of controls that appear on the

Measurement Capture panel in LabWindows/CVI.

Constant names

are underlined in the table to help distinguish them from

labels

, which appear on the panel and affect how the panel looks, but are not typically referenced in the code. Most of the attributes shown in the table are ones you must change from their default values.

Table 32: Relevant attributes of controls that appear on the Measurement Capture panel in LabWindows/CVI

Control

Panel

Numeric Dial

Timer

Button

Button

Callback

Function

Constant

Name

Interval

Enabled

Label

Callback

Function

Constant

Name

Label

Callback

Function

Constant

Name

Attribute

Panel Title

Callback

Function

Constant

Name

Label

Callback

Function

Constant

Name

Range Values

Minimum

Maximum

Increment

Label

Change to

Measurement Capture

HandlePanel

PNLMEAS

Second Intervals

TimerInterval

TINTERVAL

.50

5

.25

Untitled Control

(no change)

ProcessTimer

TIMER

.50

False (Unchecked)

_Start cmdStart

CMDSTART

_Stop cmdStop

CMDSTOP

Oscilloscope Analysis and Connectivity Made Easy

215

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

Control

Button

List Box

List Box

String

Attribute Change to

Label

Callback

Function

Constant

Name

Label

_Exit cmdExit

CMDEXIT

Measurements

Constant

Name

LSTMEAS

Control Mode

Normal

Visible Lines

8

Label

Measurement Values

Constant

Name

LSTVALUES

Control Mode

Normal

Visible Lines

8

Label

Status:

Constant

Name

LBLSTATUS

Control Mode

Normal

Getting Help

To find out more about designing and coding programs in LabWindows/CVI, consult the Help file. The section on the User Interface Library is particularly

useful, as shown in Figure 57.

216 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

Figure 57: Page from the LabWindows/CVI Help file

The LabWindows/CVI manual also includes a helpful tutorial entitled

Getting Started with LabWindows/CVI.

Modifying Auto-Generated Functions

Most programmers choose to automatically generate the callback functions in the LabWindows/CVI user interface design environment. To auto-generate skeleton code for your interface:

1.

Select

Code > Generate > All Code…

Oscilloscope Analysis and Connectivity Made Easy

217

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

218

2.

From the pop-up dialog box, select the function that will close the user interface (the

cmdExit

function in this case) and click

OK

.

The LabWindows/CVI UIR Code Generator generates a main function, a panel callback function, and callback functions for each of the hot controls with assigned callback function names.

Now you are ready to edit the generated functions that implement initialization and respond to user events (such as clicking on buttons).

3.

Add the definitions shown in boldface to the auto-generated include statements and declarations:

#include "Tktds8k.h"

#include <formatio.h>

#include <ansi_c.h>

#include <cvirte.h>

#include <userint.h>

#include "Demo1.h"

#define TRUE 1

#define FALSE 0

static int pnlmeas;

double rTimerInterval; int ret, counter = 0;

ViStatus status;

ViSession ID; int StartFlag = FALSE;

Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

The first page of the program in the Code Window appears as shown

in Figure 58.

Figure 58: The LabWindows/CVI Code Window

The Main Function

From the GUI you created, LabWindows/CVI automatically generates the following commented code, which accepts a variable number of arguments:

} int main (int argc, char *argv[])

{ // standard code generated by LabWindows if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((pnlmeas = LoadPanel (0, "Demo1.uir", PNLMEAS)) < 0) return -1;

DisplayPanel (pnlmeas);

RunUserInterface ();

DiscardPanel (pnlmeas); return 0;

Oscilloscope Analysis and Connectivity Made Easy

219

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

The main

function calls the LabWindows/CVI routines to

• Load the

Panel

and bind it to the constant name

PNLMEAS

• Display the

Panel

• Launch the process for running the user interface

• Discard the

Panel

after the user closes it.

You do not need to make any changes to this automatically generated code block.

The Panel Handler Function

The

HandlePanel

callback function executes when the

Panel

user interface gets focus. Complete the automatically generated skeleton code for the

Panel

user interface by adding the lines shown in boldface: int CVICALLBACK HandlePanel (int panel, int event, void *callbackData, int eventData1, int eventData2)

{

char buf[128]; char hold[30]; char *item = "Meas "; int i;

switch (event)

{ case EVENT_GOT_FOCUS:

// clear measurement panel ret = ClearListCtrl (pnlmeas, PNLMEAS_LSTMEAS);

// populate list box with measurements for TDS/CSA8000 for(i = 1; i <= 8; i++){

Fmt(hold,"%s<%i", i); buf[0] = '\0'; strcat(buf, item); strcat(buf, hold); ret = InsertListItem (pnlmeas, PNLMEAS_LSTMEAS,

-1, buf, counter);

}

// set index value to Meas1 ret = SetCtrlIndex(pnlmeas,PNLMEAS_LSTMEAS, 0);

break; case EVENT_LOST_FOCUS: break; case EVENT_CLOSE: break;

} return 0;

}

The

HandlePanel

event function:

• Executes when the

Panel

gets focus

• Clears the

LSTMEAS

list box

• Populates the

LSTMEAS

list box and sets the index to point to the first measurement

220 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

The Start Button Function

The cmdSTART

code is called when a user clicks the

Start

button on the user interface. Complete the automatically generated skeleton code for the

Start

button by adding the lines shown in boldface: int CVICALLBACK cmdSTART (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{ char InstDesc[128];

char buf[256];

char *intro = "Connected to: ";

int n;

switch

{

EVENT_COMMIT:

//

=

// indicate to user we are connecting to scope ret = SetCtrlVal(pnlmeas, PNLMEAS_LBLSTATUS,

"Connecting

// clear measurement values list box ret = ClearListCtrl(pnlmeas, PNLMEAS_LSTVALUES);

//

status

(status VI_SUCCESS)

{

// display instrument description to user once connected

buf[0]='\0';

strcat(buf,

strcat(buf,InstDesc); ret = SetCtrlVal(pnlmeas, PNLMEAS_LBLSTATUS, buf);

ret

StartFlag

ATTR_ENABLED,TRUE);

TRUE;

} else

{

MessagePopup("Tektronix",

"Could

ret

}

SetCtrlVal(pnlmeas,

"Not

break;

}

return

}

The cmdSTART

function

• Resets the counter variable

Oscilloscope Analysis and Connectivity Made Easy

221

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

• Uses the autoConnectToFirst

function in the TDS/CSA8000 plug-n-play driver library to automatically connect to the first GPIB device encountered (the next section describes how to insert a driver function into your code)

• Uses the

GetInstrDesc

function in the TDS/CSA8000 plugn-play driver library to retrieve the instrument description for display in the

LBLSTATUS

status label

• Sets the

StartFlag

to

TRUE

• Changes the

Enabled

attribute of the

Timer

control to

TRUE

.

Inserting a PnP Driver Function into LabWindows/CVI Code

To insert a TDS/CSA8000 plug-n-play driver function into the

LabWindows/CVI source code:

1.

Position the cursor in the code where you want to insert the function.

2.

From the

Instrument

menu, select

TDS 8000 Series

Oscilloscope…

3.

From the Select Function Panel dialog, select the driver function you want to insert and click

Select

.

4.

From your code window, select

Code > Insert Function Call

.

222 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

The driver function is inserted into your code at the current cursor position.

The Dial Control Function

The

TimerInterval

code is called when a user makes a selection from the

Dial

control on the user interface. Complete the automatically generated skeleton code for the

Dial

control by adding the lines shown in boldface: int CVICALLBACK TimerInterval (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{ switch (event)

{ case EVENT_COMMIT:

// read interval from dial control and assign to timer

// control ret = GetCtrlVal(pnlmeas, PNLMEAS_TINTERVAL,

&rTimerInterval); ret = SetCtrlAttribute(pnlmeas,PNLMEAS_TIMER,

ATTR_INTERVAL,rTimerInterval);

break;

} return 0;

}

Oscilloscope Analysis and Connectivity Made Easy

223

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

The

TimerInterval

event function uses LabWindows/CVI User Interface

Library functions to:

• Retrieve the interval value from the

Dial

control

• Assign that value to the

Timer

control.

The Timer Control Function

From the GUI you created, LabWindows/CVI automatically generates the following skeleton code for the

Timer

control: int CVICALLBACK ProcessTimer (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{ switch (event)

{ case EVENT_COMMIT:

} return 0; break;

}

The

ProcessTimer

code is called whenever a

Timer

control event takes place

(after the time interval counts down and the timer “ticks”). Complete the callback function by changing and expanding the code block as follows: int CVICALLBACK ProcessTimer (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{ ViChar buf[128];

ViInt32 gMeasType;

VidReal64 dMeasValue; char hold[30]; int index; if ((StartFlag == TRUE) && (event == EVENT_TIMER_TICK)){

// get index of currently selected item ret = GetCtrlIndex(pnlmeas,PNLMEAS_LSTMEAS, &index); switch(index){ case 0:

// get measurement value

tktds8k_GetMeasValue (ID, tktds8k_MEAS_1, &dMeasValue);

break; case 1:

tktds8k_GetMeasValue (ID, tktds8k_MEAS_2, &dMeasValue);

break; case 2 :

tktds8k_GetMeasValue (ID, tktds8k_MEAS_3, &dMeasValue);

break; case 3 :

tktds8k_GetMeasValue (ID, tktds8k_MEAS_4, &dMeasValue);

break; case 4 :

tktds8k_GetMeasValue (ID, tktds8k_MEAS_5, &dMeasValue);

break; case 5 :

tktds8k_GetMeasValue (ID, tktds8k_MEAS_6, &dMeasValue);

break; case 6 :

tktds8k_GetMeasValue (ID, tktds8k_MEAS_7, &dMeasValue);

break;

224 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI case 7 :

tktds8k_GetMeasValue (ID, tktds8k_MEAS_8, &dMeasValue);

break; default: break;

}

// format floating point value to 12 levels of precision

Fmt(hold,"%s<%f[p12]", dMeasValue);

//clear string buffer buf[0] = '\0'; strcpy(buf, hold);

// insert into list box ret = InsertListItem (pnlmeas, PNLMEAS_LSTVALUES,

-1, buf, index); counter++;

// turn off after 1000 acquisitions if(counter >= 1000){

StartFlag = FALSE; ret = SetCtrlAttribute(pnlmeas,PNLMEAS_TIMER,

ATTR_ENABLED,FALSE);

}

} else { StartFlag = FALSE;

} return 0;

}

The

ProcessTimer

event function:

• Retrieves the current index of the

LSTMEAS

list box

• Uses it to make sure the appropriate constant is used in calling the

GetMeasValue

function in the TDS/CSA8000 plug-n-play driver library.

• Formats and adds returned values to the

LSTVALUES list box.

The Stop Button Function

The cmdStop

code is called when a user clicks the

Stop

button on the user interface. Complete the automatically generated skeleton code for the

Stop

button by adding the lines shown in boldface:

} int CVICALLBACK cmdStop (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{ switch (event)

{ case EVENT_COMMIT:

// disable timer ret = SetCtrlAttribute(pnlmeas,PNLMEAS_TIMER,

ATTR_ENABLED,FALSE);

StartFlag = FALSE;

break;

} return 0;

Oscilloscope Analysis and Connectivity Made Easy

225

Using Tektronix Plug-n-Play Drivers with LabWindows/CVI

The cmdSTOP

function:

• Sets the

Enabled

attribute of the

Timer

control to

FALSE

• Changes the

StartFlag

to

FALSE

.

The Exit Button Function

From the GUI you created, LabWindows/CVI automatically generates the following code block for the

Exit

button: int CVICALLBACK cmdExit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{

switch

{

EVENT_COMMIT:

(ID);

QuitUserInterface

break;

}

return

}

The cmdExit

code is called when a user clicks the

Exit

button on the user interface. This event function exits the program by calling the

LabWindows/CVI

QuitUserInterface

function. You do not need to make any changes to this automatically generated code block.

Running Your Program

To build and run the completed program:

1.

Select

Build > Create Debuggable Executable

or press

Ctrl+M

to build an executable program.

2.

Select

Run > Execute Demo1_dbg.exe

or press

Ctrl+F5

to run your program.

The

Measurement Capture

panel is opened for user input, with the left list box already populated with the measurement types selected on your oscilloscope.

3.

Click the

Start

button.

The message Connecting to first scope found... appears in the Status box. LabWindows/CVI connects to the first TDS/CSA 8000 oscilloscope encountered and displays the connection descriptor in the Status box.

4.

Select one of the eight measurements from the

Measurements

list box.

226 Oscilloscope Analysis and Connectivity Made Easy

Overview of LabVIEW

The program retrieves the corresponding measurement set up on your oscilloscope and displays values in the

Measurement Values

list box at half-second (.5) intervals, as shown in Figure 59.

5.

Click the

Stop

button.

6.

Experiment with changing the

Dial

control and the

Measurements

list box to other settings, and then click the

Start

and

Stop

button again for each experiment.

Even if you do not click

Stop

, the program will stop capturing and displaying measurements after 1000 captures.

7.

When you are finished testing, click the

Exit

button to close the panel.

Figure 59: The LabWindows/CVI program while executing

Overview of LabVIEW

LabVIEW (Laboratory Virtual Instrument Engineering Workbench) is an engineering development environment based on graphical programming.

LabVIEW uses graphical symbols rather than textual language to describe programming actions.

LabVIEW is designed to build a

Virtual Instrument (vi)

. A Virtual Instrument is a virtual test and measurement instrument executing on a PC via

LabVIEW software. The program is integrated for communication with hardware such as GPIB and serial devices, and also has built-in libraries for using software standards such as VISA.

When building a LabVIEW virtual instrument, you work in two main areas:

• The

Front Panel

window (form designer)

• The

Block Diagram

window (data and logic flow designer)

Oscilloscope Analysis and Connectivity Made Easy

227

Using Tektronix Plug-n-Play Drivers with LabVIEW

The Front Panel contains the user interface of your Virtual Instrument. The

Block Diagram contains the graphical code for your Virtual Instrument.

Action in one area affects the other. Changing an attribute on a Front Panel control such as a list box, for instance, affects the properties displayed in the

Block Diagram. Similarly, a control can be added to the Block Diagram and it will appear on the Front Panel. The usual sequence is to add visible control elements to the Front Panel and then work on the I/O and logic flow in the

Block Diagram.

Using Tektronix Plug-n-Play Drivers with LabVIEW

This section demonstrates how to use the Tektronix tktds8k

Plug-n-Play driver to control the TDS/CSA8000 sampling oscilloscope from a PC running LabVIEW, equipped with a GPIB card, and connected by a GPIB cable to the GPIB slot on the back of the TDS/CSA8000 oscilloscope.

Table 38 summarizes the TDS/CSA 8000 PnP driver functions used in this

book.

Loading the Driver

To incorporate a Tektronix Plug-n-Play driver into your LabVIEW program:

Note:

It is not necessary to install TekVISA on your PC to work this example, since LabVIEW comes with its own NI-VISA implementation already installed. Installing TekVISA will overwrite your NI-VISA implementation. The Plug-n-Play drivers are layered to work with either VISA implementation.

Though this information uses the TDS8000 driver as an example, you can follow similar steps for the TDS5000, TDS6000, and TDS7000 instruments.

Do not perform steps 1 through 7 involved in loading the driver into

LabView if you have the versions of the Tektronix Scope Application listed below. You can check the version number from the Help -> About TekScope menu item. The Plug-n-Play drivers shipped with these versions already include customized LabVIEW wrappers and importing the driver will overwrite these wrappers.

TDS5000 – Greater than version 1.0.7,

TDS6000 – Version 2.2.0 or greater,

TDS7000 – Version 2.2.0 or greater,

TDS/CSA8000 – Version 1.4.2 or greater.

1.

Unzip the

tktds8k PnP driver

and run the

setup.exe

program.

This program places a folder named

VXIpnp

in your root directory.

228 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

Launch the LabView application and create a

new vi

.

Choose

Tools > Instrumentation > Import CVI Instrument Driver…

After a short pause the Select a CVI Function Panel dialog appears asking to locate tktds8k.fp

.

2.

Browse to the disk location where the Plug-n-Play driver was installed and select the instrument driver file (with an

.fp

extension) for the oscilloscope you are working on.

5

S elect the

tktds8k.fp

file and click

Open

.

The CVI Function Panel Converter dialog opens.

Leave the Destination Directory as is and click

Select All

followed by

OK

.

5 Assuming you are installing on the

C:

drive on a Windows 98 system, the driver is placed in

C:\VXIpnp\Win95\Tktds8k\. On a Windows NT system, the driver is placed in

C:\VXIpnp\WinNT\Tktds8k\.

Oscilloscope Analysis and Connectivity Made Easy

229

Using Tektronix Plug-n-Play Drivers with LabVIEW

The Select A Library dialog asks to locate the tktds8k_32.DLL file.

Browse to find the

tktds8k_32.DLL file located in

C:VXIpnp\Winnt\Bin\

, select the file and click

Open

.

LabVIEW begins converting the driver files. This takes about 5 minutes, after which you are returned to the Front Panel of the open vi. LabVIEW makes the driver library and its functions available in the

Instrument I/O

subpalette on the

Functions

palette.

Viewing Driver Functions

You are now ready to explore the

Tktds8k

driver files.

1.

Go to the Block Diagram view of your “Untitled” vi.

Show the

Functions

palette and open the

Instrument I/O

subpalette.

Open the

Instrument Library

subpalette.

230

2.

Open the

tktds8k

subpalette.

Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

Inside is a list of folders containing individual vi’s that can be dropped onto your Block Diagram to configure and control the

TDS/CSA8000 oscilloscope.

A large number of Plug-n-Play functions, grouped by category, are available for you to select and incorporate into your LabVIEW program.

3.

To select one of the vi’s, simply double-click it.

The pointer tool turns into a hand to indicate that a selection has been made.

4.

Click on the Block Diagram to “drop” the vi.

Getting Help

To find out more about designing and coding programs in LabVIEW, consult the Help file. The tutorial section of the Help file is particularly useful, as

shown in the sample page in Figure 60.

Oscilloscope Analysis and Connectivity Made Easy

231

Using Tektronix Plug-n-Play Drivers with LabVIEW

232

Figure 60: Page from the LabVIEW Tutorial in the Help file

Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

You can right-click any icon in a Block Diagram and select

Help

to get more information:

To get the name of a particular function on a Block Diagram, press

Ctrl-H

to bring up context help, and hover the mouse over the function in question. For example, you can obtain context help for each vi in the PnP driver, as shown

in Figure 61.

Figure 61: Sample context help for a PnP Driver functon

Oscilloscope Analysis and Connectivity Made Easy

233

Using Tektronix Plug-n-Play Drivers with LabVIEW

Creating a Quick Demo Program

In this section, you will create a simple vi that causes the TDS/CSA8000 oscilloscope to

• perform a Default Setup

• select a channel

• take a measurement

• display a measurement value

Add the Initialize vi

To begin:

1.

Open a

new vi

and save it as

Tktds8k Plug & Play Demo

.

(You can use the vi from the previous section if it is still open.)

Go to the Block Diagram view of this vi.

Show the

Functions

palette and navigate through the

Instrument I/O

subpalettes to the

Tktds8k

subpalette.

Find

tktds8k Initialize.vi

, double-click it and drop it onto the Block Diagram (you may have already performed this step from the previous section).

Select

Tools > Options

, select the check box next to

Show subVI names when dropped

, and click

OK

.

From the

Tools

palette, select

Connect Wires

(the wiring tool).

Right-click the

resource name

terminal of the

Initialize vi and create a control

(by selecting

create > control)

.

Right-click the

ID Query

terminal and create a Boolean constant set to

True

.

Right-click the

Reset Device

terminal and create a Boolean constant set to

True

.

Right-click the

Instrument Handle Out

terminal and create an indicator.

Right-click the

Error Out

terminal and create an indicator.

234 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

At this point, your Block Diagram will look like this: and your Front Panel will look like this:

2.

In the resource name

control on the Front Panel, make sure the GPIB resource name reads

GPIB8::1::INSTR

.

3.

Click the vi

Run

button (or select

Operate > Run

or press

Ctrl-R

) as a test to see if communications with the

TDS/CSA8000 oscilloscope are working properly.

Oscilloscope Analysis and Connectivity Made Easy

235

Using Tektronix Plug-n-Play Drivers with LabVIEW

You should see the TDS/CSA8000 perform a reset, the Front Panel instrument handle out

indicator should display a response as shown here, and the error cluster should not be indicating an error:

Note:

If you receive an error at this point, launch the debugger by selection

Tools > Measurement & Automation Explorer

and follow the instructions for debugging GPIB issues. Do not proceed with the demo until you successfully receive the appropriate instrument handle out

response and a code 0 in the error cluster.

Place More Driver vi’s and Wire Them

If the vi is communicating with the oscilloscope properly, continue with these steps:

1.

Configure the TDS/CSA8000 oscilloscope for data acquisition:

a.

Connect a signal source to either an optical or electrical module on the oscilloscope.

b.

Connect a trigger source to the Trigger Direct Input on the front of the oscilloscope.

c.

Perform a test acquisition to ensure that the oscilloscope is properly set up.

Disconnect the

error cluster

from the

Initialize vi and move it to the right. You will use it again in a later step.

Your Block Diagram will look similar to the following:

236 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

2.

Follow the steps on page 230 to navigate through

Instrument

I/O subpalettes of the

Functions

palette to the list of

tktds8k

functions:

3.

Navigate through subpalettes as necessary:

Oscilloscope Analysis and Connectivity Made Easy

237

Using Tektronix Plug-n-Play Drivers with LabVIEW to place the following driver vi’s onto the Block Diagram:

tktds8k Set Channel Displayed.vi tktds8k Set Vertical Parameters.vi tktds8k Start or Stop Acquisitions.vi tktds8k Set Measurement Source1 Wfm.vi tktds8k Set Measurement Type.vi tktds8k Set Measurement Displayed.vi tktds8k Get Measurement Value.vi tktds8k Close.vi

4.

Duplicate the

Start or Stop acquisitions

vi, as this vi will be used twice.

238 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

5.

Arrange the vi’s in columnar format in the following sequence:

Oscilloscope Analysis and Connectivity Made Easy

239

Using Tektronix Plug-n-Play Drivers with LabVIEW

6.

Using the

Connect Wire

tool on the

Tools

palette, thread wires between each vi on the Block Diagram pertaining to

instrument handle out

input and output terminals and

error in/out

input and output terminals as shown:

Configure vi’s from the Block Diagram

In the next steps, you will configure vi’s by wiring numeric values, controls, and Booleans to various vi terminals:

1.

Right-click the

channel

terminal of the

Set Channel Display

vi and create a control.

2.

Right-click the

display

terminal of the

Set Channel

Displayed

vi and create a constant. Set this value to

ON

.

Wire the

Channel

control from the

Channel Displayed

vi to the

channel

terminal of the

Set Vertical Parameters

vi.

240 Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

Right click the

scale

terminal of the

Set Vertical Parameters

vi and create a constant. Change the value of this constant to

0.10

. After you have completed the vi, you may need to adjust this value to achieve the scale you prefer.

Right-click the

acquisition state

terminal of the

Start or Stop Acquisitions

vi and create a Boolean constant. Set this value to

True

.

Right-click the measurement number terminal of the

Set Measurement Source1

Wfm

vi and create a constant. Set this value to

meas 1

.

Use the wiring tool to connect the

WFM

terminal to the

Channel

control created in Step 1.

Right-click the

measurement number

terminal of the

Set Measurement Type

vi and create a constant. Set this value to

meas 1

.

Right-click the

measurement type

terminal of the

Set Measurement Type

vi and create a control.

Right-click the

measurement number

terminal of the

Set Measurement

Displayed

vi and create a constant. Set this value to

meas 1

.

Right-click the

display

terminal of the

Set Measurement Displayed

vi and create a constant. Set this value to

1 ON

.

Right-click the

acquisition state

terminal of the

Start or Stop Acquisitions

vi and create a Boolean constant. Set this value to

False

.

Right-click the

measurement number

terminal of the

Get Measurement Value

vi and create a constant. Set this value to

meas 1

.

3.

Right-click the

value

terminal of the

Get Measurement

Value

vi and create an indicator.

Oscilloscope Analysis and Connectivity Made Easy

241

Using Tektronix Plug-n-Play Drivers with LabVIEW

The

Run

button of the

Tktds8k Plug & Play.Demo

vi should change to a non-broken arrow, indicating the you now have a working program. If it does not, compare your Block Diagram to the following one to search for errors (or select

Windows > Show Error

List

):

242

Configure vi’s from the Front Panel

Next you will switch to the Front Panel view and make final changes.

1.

On the Front Panel, right-click the

Value

indicator, access the

Format & Precision

dialog, and set digits of precision to

3

.

Oscilloscope Analysis and Connectivity Made Easy

Using Tektronix Plug-n-Play Drivers with LabVIEW

The Front Panel will look like this:

Running Your Program

To run your demo program:

1.

Select the

Operate Value

tool, click the

Channel

control, and select a channel.

Possible values are 0 through 7, where:

0 = ch.1

.

.

.

1 = ch.2

2 = ch.3

7 = ch.8

2.

Click the

Measurement Type

control and select a measurement type.

3.

Click the

Run

button on the Front Panel menu bar (or select

Operate > Run

or press

Ctrl-R

).

The TDS/CSA8000 executes a Default Setup command, selects the channel indicated in the

Channel Select

control, sets the chosen measurement type, and then activates acquisition. The oscilloscope takes a measurement and sends it to the Front Panel.

Since the program will only execute once, it will allow only one measurement to be taken at a time.

Oscilloscope Analysis and Connectivity Made Easy

243

Using VISA Operations with LabVIEW

Using VISA Operations with LabVIEW

This simple example demonstrates how to use LabVIEW’s built-in VISA communications interface to make timed measurements from a PC connected by GPIB cable to a TDS7000 oscilloscope. The concepts described here apply to drivers for any Tektronix Windows-based oscilloscope.

This section assumes you have some familiarity with the LabVIEW environment and have perhaps worked with instrument drivers before.

A brief description of VISA operations used in this example appears in Table

39 in Appendix A

Note:

It is not necessary to install TekVISA on your PC to work this example, since LabVIEW comes with its own NI-VISA implementation already installed. Installing TekVISA will overwrite your NI-VISA implementation.

Creating a Timed Measurement Program

This simple Timed Measurement program targets the TDS7000 oscilloscope.

The user identifies one of eight possible measurements in a list box. At a time interval (in seconds) specified by the user with a

Dial

control, the program takes measurements (preset by the user on the oscilloscope) from the device connected through the

Instrument Resource Name

control and places them on a

strip chart

(Waveform Graph). A

Stop

button controls the running of the Virtual Instrument. The chart updates with each new measurement until the

Stop

button is clicked.

The Front Panel

To build the Front Panel for this program, place controls and indicators from the

Controls

palette as follows, navigating to subpalettes as necessary to make selections:

1.

Construct a panel comprised of a list box with a label captioned

Measurement to Take:

244

2.

Using the

Edit Text

tool on the

Tools

palette, add the following items to the list box:

Meas1, Meas2,…Meas8

.

3.

Set the

Selection Mode

of the list box to

1

.

4.

Add a

Dial

control to the panel by selecting it from the

Numeric

Palette.

Oscilloscope Analysis and Connectivity Made Easy

Using VISA Operations with LabVIEW

5.

Using the

Edit Text

tool, specify the range of the dial as

0.5

to

5

.

6.

Add a

Waveform Graph

to the panel.

7.

Set the Update Mode to

StripChart

.

8.

Add a

VISA Resource Name

control to the panel choices

(under the

I/O

palette).

Oscilloscope Analysis and Connectivity Made Easy

245

Using VISA Operations with LabVIEW

9.

Select the

Allow Undefined Names

attribute.

10.

Add a Boolean

Stop

button to the panel, and set its

Mechanical Action

to

Latch When Released

.

The interface will look similar to Figure 62.

246

Figure 62: The Front Panel for the LabVIEW example

Oscilloscope Analysis and Connectivity Made Easy

Using VISA Operations with LabVIEW

Table 33 summarizes the relevant controls and their attributes.

Table 33: Relevant attributes of controls that appear on the measuredemo.vi Front

Panel in LabVIEW

Control

List Box

Dial

Waveform Chart

Instrument

Resource Name

Boolean Button

Attribute Change to

Label

Selection

Mode

Items

Measurement to Take:

1

Label

Range Values

Minimum

Maximum

Label

Meas1

Meas2

Meas3

Meas4

Meas5

Meas6

Meas7

Meas8

Time Between

Measurements (s)

0.5

5

Measurement History:

Update Mode

StripChart

Label

Instrument Resource

Name

Enabled

Allow

Undefined

Names

Label

Mechanical

Action

Stop

Latch When Released

The Block Diagram

When you place a control or indicator on the Front Panel, a corresponding rectangular

terminal

is placed on the Block Diagram. You will already see double-rectangle terminals on the Block Diagram for the

Instrument Resource Name

control

• List box labeled

Measurement to Take:

• Dial control labeled

Time Between Measurements (s)

• Waveform chart named

Measurement History:

• Boolean button named

Stop

Oscilloscope Analysis and Connectivity Made Easy

247

Using VISA Operations with LabVIEW

To build the rest of the Block Diagram for this program, place

nodes

(structures, functions and vi’s) from the

Functions

palette as follows, navigating to subpalettes as necessary to make selections:

1.

Place a

While-Loop

structure in the diagram so that it encloses other nodes inside a black lined box as shown.

2.

From the

Instrument I/O > VISA

subpalette of the

Functions

palette, select and place

VISA Write

and

VISA Read

functions inside the

While-Loop

structure and a

VISA Write

function to the left of the

While-Loop

structure.

248

3.

From the

Instrument I/O > VISA > VISA Advanced

subpalette of the

Functions

palette, select and place

VISA

Open

and

VISA Close

functions to the left and right of the

While-Loop

structure as shown.

Oscilloscope Analysis and Connectivity Made Easy

Using VISA Operations with LabVIEW

4.

Using the

Connect Wire

tool from the

Tools

palette, wire the

VISA Open

function to the

Instrument Resource Name

control on the left side and to the

While-Loop

structure, which is then wired to the

VISA Close

function on the right side as shown on the diagram.

This opens the VISA session outside the

While

loop and closes it after exiting the loop.

Oscilloscope Analysis and Connectivity Made Easy

249

Using VISA Operations with LabVIEW

5.

Build the rest of the diagram to conform to this logic:

a.

Increment the

Measurement to Take:

value because List

Box counting starts at 0 and oscilloscope measurements start at 1.

b.

Multiply the

Time between Measurements (s)

value by

1000 to convert to milliseconds.

c.

Feed the time into a

Wait

vi in the

While loop (selected from the

Time & Dialog

palette), which sets the minimum time for each loop iteration.

d.

Wire a string constant containing

HEADER OFF

into the

VISA Write

function outside the

While loop. This is a native GPIB command to turn off headers, so query responses return only data.

e.

Use the

Format Into String

function (selected from the

String

palette) to insert the measurement number into the format string

MEASU:MEAS%d:VALUE?

This native

GPIB query, which asks for the measurement value, will be wired to the

VISA Write

function in the

While

loop.

250 Oscilloscope Analysis and Connectivity Made Easy

Using VISA Operations with LabVIEW

f.

Write the query to the instrument using the

VISA Write

function.

g.

The response will be read by the

VISA Read

function. To make sure it reads the whole response, create a constant at the

Byte Count

terminal of the

VISA Read

function and set the maximum number of characters (bytes) to read as

100

.

h.

Convert the response from a string into a double using the

Fract/Exp String To Number

function selected from the

String > String/Number Conversion

palette.

i.

Feed the value into the Waveform Chart indicator named

Measurement History:

.

j.

Wire the

Stop

button to the conditional terminal of the

While

loop.

k.

Add a

Simple Error Handler

(selected from the

Time &

Dialog

palette) to the right of the

VISA Close

function and wire the sequence of

Error In

and

Error Out

terminals of the VISA functions to deal with any errors that occur.

Oscilloscope Analysis and Connectivity Made Easy

251

Using VISA Operations with LabVIEW

The interface will look similar to Figure 63.

252

Figure 63: The Block Diagram for the LabVIEW example

Running Your Program

To run the completed program from within LabVIEW:

1.

From the Front Panel of the measureDemo.vi

program, select a measurement value from the

Measurement to Take:

list box (the range of values is

Meas1

through

Meas8

).

2.

Click the

Run

button on the Front Panel menu bar (or select

Operate > Run

or press

Ctrl-R

).

LabVIEW connects to your TDS/CSA 7000 oscilloscope, which activates acquisition. The program retrieves the corresponding measurement set up on your oscilloscope and charts values in the

Measurement Values

strip chart at half-second (.5) intervals, as

shown in Figure 64.

3.

Click the

Stop

button.

4.

Experiment with changing the

Dial

control and the

Measurement to Take:

list box to other settings, and then click the

Run

and

Stop

buttons again for each experiment.

To clear the data from the chart, right-click on it and select

Data Operations > Clear Chart

.

Oscilloscope Analysis and Connectivity Made Easy

Figure 64: The LabVIEW program while executing

Chapter 9 Review

To review what you learned in Chapter 9:

• You discovered that you can use a

Tektronix VXI-compatible

Plug-n-Play driver

to access and control your oscilloscope via popular programming environments such as

LabWindows/CVI and LabVIEW.

• You learned how to incorporate:

Plug-n-Play driver functions

into a

LabWindows/CVI

program.

Plug-n-Play driver functions

into a

LabVIEW

program.

VISA commands

into a

LabVIEW

program.

Oscilloscope Analysis and Connectivity Made Easy

253

Chapter 9 Review

254 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Appendix A: Command and Control

Reference

Introduction

This appendix is not exhaustive and covers only those GPIB commands and interfaces relevant to the chapters in this book.

Native GPIB Commands and Queries

Table 34 and Table 35 explain the subset of TDS7000 Series native GPIB

commands and queries used in examples in this book:

Commands modify instrument settings or tell the oscilloscope to perform a specific action.

Queries cause the oscilloscope to return data and information about its status.

You can abbreviate commands and queries by including only the command portions shown in capital letters (for example,

ACQ:MOD

). To learn more about the full set of native GPIB commands, see the Online Programmer

Guide for your Series of Tektronix Windows-based oscilloscopes.

Oscilloscope Analysis and Connectivity Made Easy 255

Native GPIB Commands and Queries

Table 34: TDS7000 Series native GPIB commands used in examples in this book

Command

ACQuire:MODe

ACQuire:STATE

ACQuire:STOPAfter

Meaning

Sets the acquisition mode of the oscilloscope. This determines how the final value of the acquisition interval is generated from the many data samples, and affects all live waveforms. This command is equivalent to selecting Horizontal/Acquisition from the Horiz/Acq menu and then choosing the desired mode from the Acquisition Mode group box.

ACQuire:MODe{SAMple|PEAKdetect|HIRes|AVErage|

ENVelope} where

SAMple (the default mode) means that the displayed data point value is simply the first sampled value taken during the acquisition interval. In this mode, all waveform data has 8 bits of precision.

PEAKdetect means that the displayed waveform shows the high-low range of the samples taken from a single waveform acquisition.

HIRes means that the displayed waveform is the average of all the samples taken from a single waveform acquisition.

AVErage mode means that the displayed waveform is the average of the specified number of waveform acquisitions, where the number is specified using the ACQuire:NUMAVg command.

ENVelope mode means that the displayed waveform is an envelope of many individual waveform acquisitions, where the number of acquisitions is set or queried using the

ACQuire:NUMENv command.

Starts acquisitions (ON or RUN or non-zero) or stops acquisitions (OFF or STOP or 0). Sending this command is equivalent to pressing the front-panel RUN/STOP button, unless the STOPAFTER mode is set to SEQUENCE, in which case this command is equivalent to pressing SINGLE from the front panel.

ACQuire:STATE{OFF|ON|RUN|STOP|<integer>}

Sets whether the oscilloscope performs continuous acquisitions (RUNSTop) or acquires a single sequence

(SEQuence).

ACQuire:STOPAfter {RUNSTop|SEQuence}

256 Oscilloscope Analysis and Connectivity Made Easy

Native GPIB Commands and Queries

Command

DATa:ENCdg

DATa:SOUrce

Meaning

Sets the data format included in the preamble of outgoing waveform data. Causes corresponding WFMOutpre values to be updated and vice versa.

DATa:ENCdg

{ASCIi|FAStest|RIBinary|RPBinary|FPBinary|SRIbinary|

SRPbinary|SFPbinary} where

ASCIi = ASCII representation of signed integer data point, positive integer data point, or single-precision binary floatingpoint representation. Default is positive integer.

FAStest = requests that the data be sent in the fastest accurate manner with respect to the first waveform specified in the DATA:SOUrce list.

RIBinary (the default argument) = signed integer data-point representation with the most-significant byte transferred first.

The range is from -128 through 127. Center screen is 0.

RPBinary = positive integer data-point representation, with the most-significant byte transferred first. The range is from 0 through 255. Center screen is 127.

FPBinary = single-precision floating-point representation of data whose width is 4. The range is from -3.4 x 1038 to 3.4 x

1038. Center screen is 0.

SRIbinary = same as RIBinary except that the byte order is swapped so the least-significant byte is transferred first.

SRPbinary = same as RPBinary except that the byte order is swapped so the least-significant byte is transferred first.

SFPbinary = same as FPbinary except that the byte order is swapped so the least-significant byte is transferred first.

Sets the location of the waveform data transferred from the oscilloscope by the CURVe? query. The source data is always transferred in the following predefined order regardless of the order specified: CH1 through CH4, MATH1 through MATH3, then REF1 through REF4.

DATa:SOUrce <wfm>[<,><wfm>]… where

wfm = the location of the waveform data to be transferred from the oscilloscope

Example:

DATA:SOURCE REF2, CH2, MATH1, CH1 means that four waveforms will be transferred in the next

CURVe? query in the following order:

CH1, CH2, MATH1 and then REF2.

Oscilloscope Analysis and Connectivity Made Easy

257

Native GPIB Commands and Queries

Command

DATA:STARt

DATa:STOP

DESE

Meaning

Sets the starting data point for waveform transfer when using the CURVe? query.

DATa:STARt <integer> where

integer = the first data point that will be transferred, ranging from 1 to the record length. Data will be transferred from

integer to DATa:STOP or the record length, whichever is less.

Example:

DATA:START 10 means that the waveform transfer will begin with data point 10.

Sets the ending data point for waveform transfer when using the CURVe? query. If you always want to transfer complete waveforms, set DATa:STARt to 1 and DATa:STOP to the maximum record length.

DATa:STOP <integer> where

integer = the last data point that will be transferred, ranging from 1 to the record length.

Example:

DATA:STOP 15000 specifies that the waveform transfer will stop at data point

15000.

Sets bits in the Device Event Status Enable Register

(DESER), a mask that determines whether events are reported to the Standard Event Status Register (SESR) and entered into the event queue.

DESE <integer> where

integer = a value ranging from 1 through 255. Bit 1 represents the Operation Complete (OPC) event.

Example:

DESE 1 sets the DESER to binary 00000001, which enables the OPC bit.

258 Oscilloscope Analysis and Connectivity Made Easy

Native GPIB Commands and Queries

*ESE

Command

HEADer

MEASUrement:

IMMed:TYPE

*OPC

Meaning

Sets bits in the Event Status Enable Register (ESER), which prevents events from being reported to the Status Byte

Register (STB).

*ESE <integer> where

integer = a value ranging from 0 through 255.

Example:

*ESE 1 sets the ESER to binary 00000001, which enables the OPC bit.

Note: Setting the DESER and the ESER to the same values allows only those codes to be entered into the event queue and summarized on the ESB bit (bit 5) of the Status Byte

Register.

This command causes the oscilloscope to either include headers (ON or non-zero) or omit headers (OFF or 0) on query responses. If omitted, only the argument is returned.

HEADer {OFF|ON|<integer>}

Example:

Query BUSY?

Response with HEADER OFF 1

Response with HEADER ON :BUSY 1

This command sets the immediate measurement type.

MEASUrement:IMMed:TYPE <type> where <type> is one of the following:

{AMPlitude|AREa|BURst|CARea|CRMs|DELay|FALL|

FREQuency|HIGH|LOW|MAXimum|MINImum|NDUty|

NOVershoot|NWIdth|PDUty|PERIod|PHAse|PK2Pk|

POVershoot|PWIdth|RISe|RMS}

Example:

MEASUREMENT:IMMED:TYPE FREQ defines the immediate measurement to be a frequency measurement.

Generates the operation complete message in the Standard

Event Status Register (SESR) on completion of all pending operations. This allows you to synchronize the operation of the oscilloscope with your application program.

*OPC

Oscilloscope Analysis and Connectivity Made Easy

259

Native GPIB Commands and Queries

Command

TRIGger:A:MODe

*SRE

WFMOutpre:

BYT_Nr

WFMOutpre:

BYT_Or

Meaning

Sets the A trigger mode.

TRIGger:A:MODe {AUTO|NORMAL} where:

AUTO = generates a trigger if one is not detected within a specified time period.

NORMAL = waits for a valid trigger event.

Example:

TRIG:A:MOD NORM means that a valid trigger event must occur before a trigger is generated on the A trigger.

Sets the bits in the Service Request Enable Register (SRER).

This controls which bits in the Status Byte Register (SBR) enable a Service Request.

*SRE <integer> where

integer = a value ranging from 0 through 255. Bit 1 represents the Operation Complete (OPC) event.

Example:

*SRE 32 sets the SRER to binary 00100000, turning on the Event

Status Bit (ESB).

This command sets the number of bytes of binary integer data to transfer in the outgoing waveform. If set to 1, all bytes are single data points. If set to 2, there are two bytes per data point.

WFMOutpre:BYT_Nr <integer> where

integer = the number of bytes per data point. Can be 1, 2, 4 or

8. A value of 1 or 2 indicates channel data; 4 indicates math data; 8 indicates pixel map (DPO) data.

This command sets which outgoing byte of binary waveform data is transmitted first during a waveform data transfer.

WFMOutpre:BYT_Or {LSB|MSB} where:

LSB = least significant byte first (compatible with Intel CPUs)

MSB= most significant byte first

Example:

WFMOUTPRE:BYT_OR LSB sets the byte order to least significant byte first.

260 Oscilloscope Analysis and Connectivity Made Easy

Native GPIB Commands and Queries

Table 35: TDS7000 Series native GPIB queries used in examples in this book

Query

BUSY?

CURve?

HORizontal:

RECOrdlength?

*IDN?

Meaning

Returns the status of the oscilloscope. This query allows you to synchronize the operation of the oscilloscope with your application, where:

0 means that the oscilloscope is not busy processing a command whose execution time is extensive.

1 means that the oscilloscope is busy processing one of these commands:

ACQuire:STATE ON

ACQuire:STATE RUN

HARDCopy STARt

Example:

This query might return 1, indicating that the oscilloscope is currently busy.

Transfers waveform data from the instrument specified by the

DATa:SOUrce command. The DATa:STARt and DATa:STOP commands specify the first and last data points. The oscilloscope will stop reading when there is no more data or the specified record length is reached. Under these circumstances, the DATa:STOP command is ignored.

In binary format, the waveform is formatted as:

#<a><bbb><data><newline>, where

a = the number of b bytes. For example, if bbb =500, then a =3.

bbb = the number of bytes to transfer. If data width is 1, all bytes on the bus are single data points. If data width is 2, all bytes on the bus are 2-byte pairs.

data = the curve data

newline = a single-byte new-line character at the end of the data

Returns the current horizontal record length. This is equivalent to selecting Position/Scale from the Horiz/Acq menu and then returning the Rec Length field.

Example:

This query might return 5000, indicating that the horizontal record length is 5000 data points.

Returns the oscilloscope identification code.

Example:

This query might return :TEKTRONIX,TDS7104,0,CF:91.1CT

FV:01.00.912, indicating the oscilloscope model number, configured number, and firmware version number.

Oscilloscope Analysis and Connectivity Made Easy

261

Native GPIB Commands and Queries

Query

MEASUrement:

IMMed:VAL?

MEASU:MEAS<x>:

VALUE?

WFMOutpre:

PT OFF?

WFMOutpre:

XINCR?

WFMOutpre:

YMULT?

Meaning

Returns the value of the measurement specified by the

MEASUrement:IMMed:TYPe command.

Example:

This query might return 9.9000E+37 as the value of a command of type FREQUENCY.

Returns the value calculated for the measurement specified by

<x>, which ranges from 1 through 8. This command is equivalent to selecting Display Statistics from the Measure menu and then choosing Value from the drop-down list to display all measurement values on-screen.

Example:

MEASUrement:MEAS1:VALue?

This query might return :MEASUREMENT:MEAS1:VALue

2.8740E-06.

Returns the trigger point relative to DATa:STARt for the waveform specified by the DATa:SOUrce command. This value is the point immediately following the actual trigger.

Example:

This query might return 251, specifying that the trigger actually occurred between points 250 and 251.

Returns the horizontal point spacing in units of

WFMOutpre:XUNit for the waveform specified by the

DATa:SOUrce command. This value typically corresponds to the sampling interval.

Example:

This query might return 10.00E-6, indicating that the horizontal sampling interval was 10 ms/point (500 ms/div)

Returns the vertical scale factor per digitizing level in units of

WFMOutpre:YUNit for the waveform specified by the

DATa:SOUrce command. This scale factor must take the location of the binary point implied by the number of bytes per data point into consideration.

For instance, if the binary field DATA WIDTH for the first ordered waveform is 1, a curve data point was 10, and the scale factor was 0.02, that data point would be sent as 2560.

However, if the DATA WIDTH were set to 2, the scale factor would be sent as 0.02/256 = 781.25E-3.

Example:

This query might return 4.000E-3, indicating that the vertical scale for the corresponding waveform was 100 mV/div.

262 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Query

WFMOutpre:

YOFF?

WFMOutpre:

YZERO?

Meaning

Returns the vertical offset in digitized levels for the waveform specified by the DATa:SOUrce command.

Example:

This query might return -50.000E+0, indicating that the position indicator for the waveform was 50 digitizing levels (2 divisions) below center screen.

Returns the vertical offset in units of WFMOutpre:YUNit for the waveform specified by the DATa:SOUrce command.

Example:

This query might return -100.0E-3, indicating that vertical offset was set to -100 mV.

TekVISA Active X Control Methods, Properties, and Events

Table 36 shows methods, properties, and events of the

TekVISA ActiveX

Control

, some of which are used in Excel VBA and Visual Basic 6.0 examples in this book. For context-sensitive help, select the object and press

F1

in VBA or Visual Basic.

Table 36: Methods, properties and events of the TekVISA ActiveX Control

Method

AboutBox

Attribute

(attribute_name)

Attribute

(attribute_name) =

newvalue

Definition

Returns version and copyright information about the TekVISA

ActiveX Control.

Parameters: none

Example:

Tvc1.AboutBox

Gets or sets the specified native TekVISA API parameter (see following table), which corresponds to a state of an attribute for the specified resource (session, event, or find list). For more information about TekVISA attributes, see the online TekVISA

Programmer Manual.

Input parameters:

attribute_name is a constant expression identifying the attribute for which the state is to be retrieved or set

newvalue as long; the new state value to set the attribute to

Returns: a variant that contains the resulting value.

Examples:

Value = Tvc1.Attribute (VI_ATTR_TMO_VALUE)

Tvc1.Attribute(VI_ATTR_TMO_VALUE) = 5000

Oscilloscope Analysis and Connectivity Made Easy

263

TekVISA Active X Control Methods, Properties, and Events

Method

Native TekVISA Attribute Name

VI_ATTR_ASRL_AVAIL_NUM

VI_ATTR_ASRL_BAUD

VI_ATTR_ASRL_CTS_STATE

VI_ATTR_ASRL_DATA_BITS

VI_ATTR_ASRL_DCD_STATE

VI_ATTR_ASRL_DSR_STATE

VI_ATTR_ASRL_DTR_STATE

VI_ATTR_ASRL_END_IN

VI_ATTR_ASRL_END_OUT

VI_ATTR_ASRL_FLOW_CNTRL

VI_ATTR_ASRL_PARITY

VI_ATTR_ASRL_REPLACE_CHAR

VI_ATTR_ASRL_RI_STATE

VI_ATTR_ASRL_RTS_STATE

VI_ATTR_ASRL_STOP_BITS

VI_ATTR_ASRL_XOFF_CHAR

VI_ATTR_ASRL_XON_CHAR

VI_ATTR_BUFFER

VI_ATTR_EVENT_TYPE

VI_ATTR_FILE_APPEND_EN

VI_ATTR_GPIB_PRIMARY_ADDR

VI_ATTR_GPIB_READDR_EN

VI_ATTR_GPIB_SECONDARY_ADDR Integer

VI_ATTR_GPIB_UNADDR_EN Boolean

VI_ATTR_INTF_INST_NAME

VI_ATTR_INTF_NUM

String

Integer

VI_ATTR_INTF_TYPE

VI_ATTR_IO_PROT

VI_ATTR_JOB_ID

VI_ATTR_MAX_QUEUE_LENGTH

Integer

Integer

Long

Long

VI_ATTR_OPER_NAME

VI_ATTR_RD_BUF_OPER_MODE

VI_ATTR_RET_COUNT

Integer

Char

Char

String

Long

Boolean

Integer

Boolean

String

Integer

Long

Integer

Integer

Integer

Integer

Integer

Char

Integer

Integer

Data Type

Long

Long

Integer

Integer

Integer

Integer

Definition

Read/Write

Property

RO

RW

RO

RW

RO

RW

RO

RO

RW

RO

RO

RO

RW

RO

RW

RW

RW

RW

RO

RW

RW

RO

RW

RW

RW

RW

RW

RO

RW

RO

RW

RO

RO

Supported

Descriptors

All

All INSTR

GPIB

GPIB

GPIB

GPIB

All

All

All

All INSTR

All INSTR

All INSTR

All INSTR

All INSTR

All INSTR

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

All INSTR

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

ASRL

264 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Method

Native TekVISA Attribute Name

VI_ATTR_RM_SESSION

VI_ATTR_RSRC_IMPL_VERSION

VI_ATTR_RSRC_LOCK_STATE

VI_ATTR_RSRC_MANF_ID

VI_ATTR_RSRC_MANF_NAME

VI_ATTR_RSRC_NAME

VI_ATTR_RSRC_SPEC_VERSION

VI_ATTR_SEND_END_EN

VI_ATTR_STATUS

VI_ATTR_SUPPRESS_END_EN

VI_ATTR_TCPIP_ADDR

VI_ATTR_TCPIP_HOSTNAME

VI_ATTR_TERMCHAR

VI_ATTR_TERMCHAR_EN

VI_ATTR_TMO_VALUE

VI_ATTR_USER_DATA

VI_ATTR_WR_BUF_OPER_MODE

Long

Boolean

Long

Boolean

String

String

Char

Boolean

Data Type

Long

Long

Long

Integer

String

String

Long

Long

Integer

Definition

Read/Write

Property

RO

RO

RW

RW

RW

RW

RW

RO

RW

RO

RW

RO

RO

RO

RO

RO

RO

Supported

Descriptors

All INSTR

All

All

All

All

All

All

All INSTR

All

All INSTR

TCPIP

TCPIP

All INSTR

All INSTR

All INSTR

All

All INSTR

Oscilloscope Analysis and Connectivity Made Easy

265

TekVISA Active X Control Methods, Properties, and Events

Method

DeviceClear

GetWaveform

(channel, wfm, xincr,

trigPos, vUnits,

hUnits)

Definition

Sends a device clear command to the instrument which performs an IEEE 488.1–style clear of the device.

Parameters: none

Example:

Tvc1.DeviceClear

Obtains the current waveform at the current settings, along with its sample interval, trigger position, and vertical and horizontal engineering units, from the specified channel.

This query uses 1-byte binary encoding and places returned data into a structure array readable by the TekVISA ActiveX

Control. For more granular control of GPIB queries, see the

ReadIEEEBlock and ReadList methods.

Input parameters:

channel asChannel; the channel from which to get a waveform

(CH1, CH2, CH3, CH4, MATH1, MATH2, MATH3, MATH4)

Output parameters:

wfm as Variant; the variable to receive the waveform as an array of variants. Array is returned with Y-axis values calculated in floating point format

xincr as Double; the variable to receive the sample time interval (X-increment between Y-axis values)

trigPos as long; the variable to receive the waveform trigger position

vUnits as String; the variable to receive the vertical engineering units, for example, “V”.

hUnits as String; the variable to receive the horizontal units, for example, “s”.

Example:

Dim arrWF

Dim n as Long, trigpos as Long

Dim xinc as Double

Dim vUnits as String, hUnits as String

Dim t as Double

Call Tvc1.GetWaveform (CH1, arrWF, xinc, trigpos, vUnits,

hUnits)

For n = LBound(arrWF) To UBound(arrWF)

‘ calculate time value

t = (n – trigpos) * xinc

Debug.Print t & “, “ & arrWF(n)

Next

266 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Method

GetWaveform8K

(channel, timebase,

wfm, xincr, xoffset,

vUnits, hUnits)

Definition

Obtains the current waveform at the current settings on a

TDS/CSA8000 Series oscilloscope, along with its sample interval, horizontal offset, and vertical and horizontal engineering units from the specified channel and timebase.

The time value for each sample point can be calculated using the following function:

Time[index] = (index-xoffset)*xincr

Input parameters:

channel as CHANNEL_8K; the channel from which to get a waveform (CH1_8K, CH2_8K, CH3_8K, CH4_8K, CH5_8K,

CH6_8K, CH7_8K, MATH1, MATH2, MATH3, MATH4,

MATH5, MATH6, MATH7, MATH8).

timebase as TIMEBASE_8K; the timebase from which to get a waveform (MAIN, MAG1, or MAG2).

Output parameters:

wfm as Variant; the variable to receive the waveform. Array is returned with Y-axis values calculated in floating point format.

xincr as Double; the variable to receive the sample interval

(X-increment between Y-axis values)

xoffset as Double; the variable to receive the X-offset (the horizontal offset in digitized levels)

vUnits as String; the variable to receive the vertical units (for example, “V”)

hUnits as String; the variable to receive the horizontal units (for example, “ns”)

Example:

Dim arrWF

Dim n as Long

Dim xinc as Double, xoff as Double

Dim vUnits as String, hUnits as String

Dim t as Double

Call Tvc1.GetWaveform8K (CH1_8K, MAIN. arrWF, xinc, xoff,

vUnits, hUnits)

For n = LBound(arrWF) To UBound(arrWF)

‘ calculate time value

t = n * xinc

Debug.Print t & “, “ & arrWF(n)

Next

Oscilloscope Analysis and Connectivity Made Easy

267

TekVISA Active X Control Methods, Properties, and Events

Lock

Method

result = Query

(native-query)

array =

ReadByteArray

(maxElements)

Definition

Places a lock on the selected instrument resource, which prevents other sessions from acquiring an exclusive lock. If no lock has been taken, this method will take the lock and return.

If another TVC instance or VISA session owns the lock, then this method will block until that lock is released. Locks can be nested and released by calls to the Unlock() method.

Parameters: none

Example:

‘ Locking ensures atomic operations won’t be interrupted

Tvc1.Lock

Tvc1.WriteString “*idn?”

Output = Tvc1.ReadString

Tvc1.Unlock

Sends a native query command to the oscilloscope and reads the results.

Input parameters:

native-query as String; the GPIB native query to send

Returns: result as String; the query result from the oscilloscope

Example: lblDisplay.Caption = Tvc1.Query(“*IDN?”)

Returns a byte array of data from a GPIB native query command.

Input parameters:

maxElements as long; the maximum number of elements to read in the byte array

Returns: a Variant that contains the array being read

Example:

TVC1.WriteString CURVE?

Arr = Tvc1.ReadByteArray (max)

268 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Method

block =

ReadIEEEBlock

(DataType,

ByteOrder,

maxElements)

Definition

Reads the instrument buffer in a specified IEEE format. This method is typically used in Curve queries with binary encoding.

The elements of the returned Variant array have the type specified in the DataType argument, unless the

YModelEnabled property is set to True, in which case, each element in the array is a floating-point value whose value is determined by the following equation:

Variant[I] = (Element[I] – YOffset)*YMult + YZero

where YOffset, YMult, and YZero are all floating-point properties. The intent is to allow you to calculate the vertical data in a single operation, simply by setting the

YModelEnabled, YOffset, YMult, and YZero properties appropriately before reading the binary block.

Input parameters:

DataType as IEEEBinaryType; the data type of the block being read. The legal values are:

BinaryType_I2 – Two-Byte Integer

BinaryType_I4 – Four-Byte Integer

BinaryType_R4 – Four-Byte Float

BinaryType_R8 – Eight-Byte Float

BinaryType_UI1 – Unsigned char

BinaryType_I1 – Signed char

byteOrder as ByteOrderingType; the byte order of the block being read. Values are ByteOrderingType_Normal and

ByteOrderingType_Reversed.

maxElements as Long; the maximum number of elements in the block being read

Returns: a Variant that contains the data block being read

Example:

Private Sub ReadIEEEBlock_Click()

Dim wfm As Variant

Dim str As String

Tvc1.WriteString "*rst"

Tvc1.WriteString "autoset exe"

Tvc1.WriteString "header off"

Tvc1.YModelEnabled = True

Tvc1.YMult = Tvc1.Query("WFMOutpre:YMULT?")

Tvc1.YOffset = Tvc1.Query("WFMOUTPRE:YOFF?")

Tvc1.YZero = Tvc1.Query("WFMOUTPRE:YZERO?")

Tvc1.WriteString "WFMOUTPRE:ENCDG BIN"

Tvc1.WriteString "WFMOUTPRE:BN_FMT RI"

Tvc1.WriteString "DATA:ENCDG RIBINARY;WIDTH 1"

Tvc1.WriteString "Data:Start 1"

Tvc1.WriteString "Data:Stop 500"

Tvc1.WriteString "Curve?"

Oscilloscope Analysis and Connectivity Made Easy

269

TekVISA Active X Control Methods, Properties, and Events

Method

list = ReadList

(dataType,

listSeparator)

Definition

‘ Read #3500 that is prepended to the data

str = Tvc1.ReadPartialString(5)

wfm = Tvc1.ReadIEEEBlock(BinaryType_UI1,

ByteOrderingType_Normal, 500)

End Sub

Returns an array of variants in ASCII format. Typically used in

GPIB queries that return multiple values such as concatenated queries or CURVE? queries. The elements of the returned

Variant array have the type specified in the DataType argument, unless the YModelEnabled property is set to True, in which case, each element in the array is a floating-point value whose value is determined by the following equation:

Variant[I] = (Element[I] – YOffset)*YMult + YZero

where YOffset, YMult, and YZero are all floating-point properties. The intent is to allow you to calculate the vertical data in a single operation, simply by setting the

YModelEnabled, YOffset, YMult, and YZero properties appropriately before reading the data.

Input parameters:

dataType as IEEEASCIIType; the data type of the list being read. Legal values are

ASCIIType_BSTR

ASCIIType_I1

ASCIIType_I2

ASCIIType_I4

ASCIIType_R4

ASCIIType_R8

ASCIIType_UI1

listSeparator as String; the character used to separate elements in the list. For GPIB commands, the separator is a semicolon. For CURVE? queries, it is a comma.

Returns: a variant that contains the data list being read

Example:

Private Sub Command1_Click()

‘ example with concatenated query

Dim cmd As String

Dim arr

cmd = "HEADER OFF;:MEASU:MEAS1:VALUE?;

:MEASU:MEAS2:VALUE?;:MEASU:MEAS3:VALUE?"

Tvc1.WriteString cmd arr = Tvc1.ReadList(ASCIIType_BSTR, ";")

If IsArray(arr) Then

Print arr(1)

Print arr(2)

Print arr(3)

End If

End Sub

See also example on page 314.

270 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Method

string =

ReadPartialString

(length)

result = ReadString

Definition

Reads the specified number of characters from the current instrument’s buffer. Often used when reading a byte stream returned from a CURVE? query. The format of the stream header is #[n][bytenumbers]. For instance, reading the first six characters returned from a CURVE? query might read”#45000.

The number 4 indicates the number of characters to read to get the numbers of bytes being returned. In this instance, it is

5000. This function eases the parsing of such byte streams.

Input parameters:

length as Long; the length of the partial string to read

Returns: a string that contains the partial data being read.

Example:

Private Sub ReadIEEEBlock_Click()

Dim wfm As Variant

Dim str As String

Tvc1.WriteString "*rst"

Tvc1.WriteString "autoset exe"

Tvc1.WriteString "header off"

Tvc1.YModelEnabled = True

Tvc1.YMult = Tvc1.Query("WFMOutpre:YMULT?")

Tvc1.YOffset = Tvc1.Query("WFMOUTPRE:YOFF?")

Tvc1.YZero = Tvc1.Query("WFMOUTPRE:YZERO?")

Tvc1.WriteString "WFMOUTPRE:ENCDG BIN"

Tvc1.WriteString "WFMOUTPRE:BN_FMT RI"

Tvc1.WriteString "DATA:ENCDG RIBINARY;WIDTH 1"

Tvc1.WriteString "Data:Start 1"

Tvc1.WriteString "Data:Stop 500"

Tvc1.WriteString "Curve?"

‘ Read #3500 that is prepended to the data

str = Tvc1.ReadPartialString(5)

wfm = Tvc1.ReadIEEEBlock(BinaryType_UI1,

ByteOrderingType_Normal, 500)

End Sub

Reads the entire string that is pending in the current instrument. Typically used to read the results of a query sent with the WriteString method.

Input parameters: none

Returns: result as String; the query result from the oscilloscope

Example:

Tvc1.WriteString(“*IDN?”) lblDisplay.Caption = Tvc1.ReadString

Oscilloscope Analysis and Connectivity Made Easy

271

TekVISA Active X Control Methods, Properties, and Events

Method

ReadtoFile (filename,

length, refcount)

StatusDescriptor

(status)

Unlock

Definition

Reads data and stores the result in the specified file. If the

FileAppendEnabled property is set to True, the data is appended to the specified file (if it exists); otherwise, the file is created and written.

Input parameters:

filename as String; the full path name of the file to which to write the data

length as Long; the maximum number of characters to read

Output parameters:

refcount as Long; the number of bytes written to the file

Example:

Dim sFileName As String

Dim flen as Long

SFileName = “C:\MyData.dat”

TVC1.WriteString "CURVE?"

TVC1.FileAppendEnabled = True

Do

.ReadToFile sFileName, 1024, flen

Loop While flen = 1024

TVC1.FileAppendEnabled = False

Returns a string with a description of the error specified by the

status argument.

Input parameters:

status as Long; the error argument for which a readable description is desired

Example:

Private Sub Command1_Click()

On Error GoTo Err

Tvc1.WriteString "*idn?"

output = Tvc1.ReadString

Err:

MsgBox Tvc1.StatusDescriptor(Tvc1.Status), vbOKOnly

End Sub

Removes a lock on the resource specified in the TVC instance.

Parameters: none

Example:

‘ Locking ensures atomic operations won’t be interrupted

Tvc1.Lock

Tvc1.WriteString “*idn?”

Output = Tvc1.ReadString

Tvc1.Unlock

272 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Method

WriteByteArray

(buffer)

WriteFromFile

(filename, length,

refcount)

WriteString (cmd)

Definition

Similar to the WriteString method but sends a Variant array buffer rather than a String to the specified device.

Input parameters:

buffer as Variant; the byte array holding the Character data

(typically a GPIB command or query) to send to the oscilloscope

Example:

Tvc1.WriteByteArray (buff)

Reads data from the specified file and writes it to the current device.

Input parameters:

filename as String; the full path name of the file to read

length as Long; the maximum number of characters to write to the device

Output parameters:

refcount as Long, the number of bytes written to the device

Examples:

Dim sFileName as String

Dim flen as Long

Dim refcount as Long sFileName = “C:\Mysettings.set” flen = FileLen(sFileName)

Tvc1.WriteFromFile sFileName, flen, refcount)

‘ Read Previous *LRN to restore instrument state

Dim RetCnt As Long

Tvc1.WriteFromFile “C:\Restor01.txt”, 1000000, RetCnt

Sends a string (typically a GPIB command or query) to the currently open oscilloscope.

Input parameters:

cmd as String; the command or query to send

Example:

Tvc1.WriteString(“*IDN?”) lblDisplay.Caption = Tvc1.ReadString

Oscilloscope Analysis and Connectivity Made Easy

273

TekVISA Active X Control Methods, Properties, and Events

Property

Address*

Attribute

BaudRate

BytesAvailable

ClearToSendState

ComponentVersion

DataBits

DataCarrierDetectState

DataSetReadyState

DataTerminalReadyState

Descriptor*

DeviceName

EnableExceptions*

EndIn

EndOut

FileAppendEnabled*

FindList*

FlowControl

HardwareInterfaceName

HardwareInterfaceNumber

HardwareInterfaceType

Hostname*

Index*

InstrumentManufacturer*

InstrumentModel*

LockState

MaximumQueueLength

Name*

Parent*

Parity

PrimaryAddress

RENState

RepeatedAddressingEnabled

ReplacementCharacter

RequestToSendState

ResourceName

RingIndicatorState

SearchCriterion*

SecondaryAddress

SendEndEnabled

SessionType

SoftwareManufacturerID

SpecVersion

Status*

StopBits

Tag*

TerminationCharacter

TerminationCharacterEnabled

Timeout

UnaddressingEnabled

XOFFCharacter

XONCharacter

YModelEnabled*

YMult*

YOffset*

YZero*

Definition

Most of these properties map one-to-one with

TekVISA attributes. For example, the Tmeout property encapsulates the VI_ATTR_TMO_VALUE attribute. For context-sensitive help with these properties, select the property and press F1 in

Visual Basic or VBA. For more information about

TekVISA attributes, see the online TekVISA

Programmer Manual.

Details about properties that do not map to TekVISA attributes (marked with an asterisk) appear next in this table in alphabetical order.

274 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Address

Property

Descriptor

Descriptor = address

EnableExceptions

EnableExceptions = state

FileAppendEnabled

FileAppendEnabled = state

Definition

Read Only. Encapsulates the

VI_ATTR_TCPIP_ADDR attribute. Reads the

TCP/IP address of the active instrument. This string is formatted in dot notation (for example,

10.0.0.1).

Example:

Print Tvc1.Address

Read/write. Gets or sets the VISA descriptor whose type is string.

Property value:

address as string; the new instrument address value to set the descriptor to

Example: instr = Tvc1.Descriptor

Tvc1.Descriptor = “GPIB8::1::INSTR ”

Read/Write. Gets or sets the EnableExceptions property, which enables or disables exceptions in the TekVISA ActiveX Control. This property is enabled by default. If it is disabled, no exceptions wll be generated on errors; however, the Status property will still contain the status of the previous command.

Property values:

state as Boolean; the state of the EnableExceptions property (True or False), which whether exceptions will be generated on errors in the TekVISA ActiveX

Control.

Example:

Tvc1.EnableExceptions = False

Read/Write. Encapsulates the

VI_ATTR_FILE_APPEND_EN attribute. Gets or sets the property that specifies whether the ReadToFile method will append or overwrite (truncate) when opening a file.

Property values:

state as Boolean; the state of the

FileAppendEnabled property (True or False), which determines how the ReadToFile method executes.

Example:

‘ Write Instrument ID to logfile

Dim RetCnt As Long

Tvc1.FileAppendEnabled = True

Tvc1.WriteString “*idn?”

Tvc1.ReadToFile “C:\logfile.txt”, 10000, RetCnt

Oscilloscope Analysis and Connectivity Made Easy

275

TekVISA Active X Control Methods, Properties, and Events

FindList

Property

Hostname

Index

Index = number

InstrumentManufacturer

InstrumentModel

Definition

Read only. Gets the results of a search to detect

VISA devices, based on the SearchCriterion property. Returns an array of strings listing detectable instrument descriptors on the network.

The array’s lower bound index is 1.

Example:

Tvc1.SearchCriterion = 0 dev = Tvc1.FindList

For I = LBound(dev) To UBound(dev)

Desc = dev(i)

Next I

Read Only. Encapsulates the

VI_ATTR_TCPIP_HOSTNAME attribute. Gets the

TCP/IP host name of the device (for example, myhost). If no host name is available, this property returns an empty string.

Example:

.

.

Tvc1.Descriptor =“TCPIP0::128.181.242.26::INSTR”

.

HostName = Tvc1.Hostname

Read/Write. Gets or sets the number (integer) identifying a control in a control array.

Property value:

number as integer; number corresponding to a control in a control array

Examples: indx = Tvc1.Index

Tvc1.Index = 1

Read Only. Returns the manufacturer of the instrument.

Example:

Print Tvc1.InstrumentManufacturer

Example Output: “TEKTRONIX”

Read Only. Returns model description of the instrument.

Example:

Print Tvc1.InstrumentModel

Example Output: “TDS7104”

276 Oscilloscope Analysis and Connectivity Made Easy

TekVISA Active X Control Methods, Properties, and Events

Name

Parent

Status

Property

SearchCriterion

SearchCriterion = instrtype

Definition

Read Only. Returns the name (string) of the

TekVISA ActiveX Control as it was set in design time

Example:

TVCName = Tvc1.Name

Read only. Returns an object reference to the container on which the TekVISA ActiveX Control is located.

Example:

Dim ref as Object

Set ref = Tvc1.Parent

Print ref.Name

Example Output: “Form1”

Read/write. Gets or sets the type of instruments to search for on the network. The SearchCriterion property affects the values returned by the FindList property.

Property values:

instrtype as integer; the new instrument type value to set the search criterion to where:

0 - All Instr Devices

1 – ASRL Instr Devices

2 – GPIB Instr Devices

3 – VXI Instr Devices

Example:

Tvc1.SearchCriterion = 0 dev = Tvc1.FindList

Read Only. Returns the ViStatus value associated with the last VISA command.

Example:

Private Sub Command1_Click()

On Error GoTo Err

Tvc1.WriteString “*idn?”

output = Tvc1.ReadString

Err:

MsgBox Tvc1StatusDescriptor(Tvc1.Status),

vbOKOnly

End Sub

Oscilloscope Analysis and Connectivity Made Easy

277

TekVISA Active X Control Methods, Properties, and Events

Property

Tag

Tag = string

YModelEnabled

YModelEnabled = state

Definition

Read/Write. Gets or stores extra data needed by your program.

Example:

Tvc1.Tag = tagString

Read/Write. Gets or sets the YModelEnabled property, which enables or disables the automatic calculation of the Tektronix scope vertical mode1 for subsequent ReadIEEEBlock or ReadList methods. If the YModelEnabled property is True, the returned array elements from either of those methods will be floating-point values calculated based on the following equation:

Variant[I] = (Element[I] – YOffset)*YMult + YZero

where YOffset, YMult, and YZero are all floatingpoint properties. The intent is to allow you to calculate the vertical data in a single operation, simply by setting the YModelEnabled, YOffset,

YMult, and YZero properties appropriately before reading the data.

Property values:

state as Boolean; the state of the YModelEnabled property (True or False), which determines how the

ReadIEEEBlock or ReadList method executes.

Examples:

Tvc1.YModelEnabled = True

See ReadIEEEBlock method example on page 269.

278 Oscilloscope Analysis and Connectivity Made Easy

Property

YMult

YMult = ymultiple

YOffset

YOffset = yoffset

TekVISA Active X Control Methods, Properties, and Events

Definition

This property sets the YMult property. If the

YModelEnabled property is True, the YMult property is used for automatic calculation of the Tektronix scope vertical mode1 for subsequent

ReadIEEEBlock or ReadList methods.

When the YModelEnabled property is True, the returned array elements from either of those methods will be floating-point values calculated based on the following equation:

Variant[I] = (Element[I] – YOffset)*YMult + YZero

where YOffset, YMult, and YZero are all floatingpoint properties. By setting the YModelEnabled,

YOffset, YMult, and YZero properties before the read, you enable data to be read and converted to a usable form in a single operation.

Property value:

ymultiple as Double; the vertical scale factor per digitizing level (also called the Y multiple)

Examples:

Tvc1.YMult = Tvc1.Query("WFMOutpre:YMULT?")

See ReadIEEEBlock method example on page 269.

This property sets the YOffset property. If the

YModelEnabled property is True, the YOffset property is used for automatic calculation of the

Tektronix scope vertical mode1 for subsequent

ReadIEEEBlock or ReadList methods.

When the YModelEnabled property is True, the returned array elements from either of those methods will be floating-point values calculated based on the following equation:

Variant[I] = (Element[I] – YOffset)*YMult + YZero

where YOffset, YMult, and YZero are all floatingpoint properties. By setting the YModelEnabled,

YOffset, YMult, and YZero properties before the read, you enable data to be read and converted to a usable form in a single operation.

Property value:

yoffset as Double; the vertical offset in digitized levels (also called the Y offset)

Examples:

Tvc1.YOffset = Tvc1.Query("WFMOutpre:YOFF?")

See ReadIEEEBlock method example on page 269.

Oscilloscope Analysis and Connectivity Made Easy

279

TekVISA Active X Control Methods, Properties, and Events

Property

YZero

YZero = yzero

Definition

This property sets the YZero property. If the

YModelEnabled property is True, the YZero property is used for automatic calculation of the Tektronix scope vertical mode1 for subsequent

ReadIEEEBlock or ReadList methods.

When the YModelEnabled property is True, the returned array elements from either of those methods will be floating-point values calculated based on the following equation:

Variant[I] = (Element[I] – YOffset)*YMult + YZero

where YOffset, YMult, and YZero are all floatingpoint properties. By setting the YModelEnabled,

YOffset, YMult, and YZero properties before the read, you enable data to be read and converted to a usable form in a single operation.

Property value:

yzero as Double; vertical offset in units of Y (also called Y zero)

Examples:

Tvc1.YZero = Tvc1.Query("WFMOutpre:YZERO?")

See ReadIEEEBlock method example on page 269.

Event

ServiceRequest()

Definition

Sent as notification that a service request was received from the device. This event is called whenever an SRQ occurs on a GPIB device. SRQs are enabled by default on GPIB devices.

Example:

Private Sub Tvc1_ServiceRequest()

Your code goes here

End Sub

280 Oscilloscope Analysis and Connectivity Made Easy

MATLAB Instrument Control Toolbox Functions

M

ATLAB

Instrument Control Toolbox Functions

Table 37 shows the subset of functions of the

MATLAB Instrument Control

Toolbox

used in Chapter 9 of this book. Optional syntax fields appear enclosed in angle brackets <like this>.

Table 37: MATLAB Instrument Control Toolbox functions

Function delete (obj)

obj

disp (obj) fclose (obj) fopen (obj)

Definition

Removes instrument objects from memory.

Input parameters:

obj is an instrument object or array of instrument objects

Example: delete (g)

Displays instrument object summary information.

Input parameters:

obj is an instrument object or array of instrument objects

Examples: g disp (g) g = visa (‘tek’, ‘GPIB8::1::INSTR’)

Does the following:

Disconnects an instrument object obj from the instrument

Sets the Status property to closed

Sets the RecordStatus property to off

Input parameters:

obj is an instrument object or array of instrument objects

Example: fclose (g)

Does the following:

Connects an instrument object obj to the instrument

Flushes any data in the input or output buffer and makes them read-only

Sets the Status property to open

Zeros out the BytesAvailable, ValuesReceived, ValuesSent, and BytesToOutput properties

Input parameters:

obj is an instrument object or array of instrument objects

Example: fopen (g)

Oscilloscope Analysis and Connectivity Made Easy

281

MATLAB Instrument Control Toolbox Functions

Function fprintf (obj, ‘cmd’) fprintf

(obj, <‘format’,>

‘cmd’ <,‘mode’>)

data = fread

(obj, size

<,‘precision’>)

[data <,count>

<,msg>] = fread

(obj, size

<,‘precision’>)

Definition

Writes text to the instrument. The write is terminated when the specified text (and any terminator) is written, a timeout occurs, or the output buffer is filled.

Input parameters:

obj is an instrument object or array of instrument objects

format is an optional string specifying a C language conversion specification; if omitted, the default format is %s\n

cmd is the string written to the instrument

mode optiionally specifies whether data is written synchronously(the default) or asynchronously; valid values = sync and async.

Examples: fprintf (g, ‘HEADER OFF’) fprintf (g, ‘%s’, ‘*IDN?’) fprintf (g, ‘ACQUIRE:STATE OFF’, ‘async’) fprintf (g, ‘%s’, ‘ACQUIRE:STATE RUN’, ‘async’)

Reads binary data from the instrument.

Input parameters:

obj is an instrument object or array of instrument objects

size specifies the number of values to read

precision is an optional string specifying the number of bits read for each value, and the interpretation of the bits as character, integer, or floating-point values. If omitted, the default precision is

‘uchar’ (8-bit unsigned character).

Returns:

The binary data read from the instrument and, optionally, the number of values read and a warning message if unsuccessful

Return parameters:

data is the binary data read from the instrument

count is the optional number of values read

msg is an optional warning message if the read was unsuccessful

Examples: data = fread (g, recordSize) data = fread (g, length, ‘float32’)

[waveform, cnt] = fread (g, recordLen, ‘int16’)

[terminator, cnt, warnmsg] = fread (g, 1, ‘char’)

282 Oscilloscope Analysis and Connectivity Made Easy

MATLAB Instrument Control Toolbox Functions

Function

data = fscanf

(obj <,‘format’>

<,size>)

[data <,count>

<,msg>] = fscanf

(obj <,‘format’>

<,size>) get (obj)

out = get (obj

<,‘PropertyName’>)

Definition

Reads response data from the instrument connected to obj and formats it as text (by default).

Input parameters:

obj is an instrument object or array of instrument objects

format is an optional string specifying a C language conversion specification; if omitted, data is converted to text using the %c format

size is an optional field specifying the number of values to read; otherwise the read is terminated when a terminator is read, a timeout occurs, or the input buffer is filled.

Returns:

The data read from the instrument and, optionally, the number of values read and a warning message if unsuccessful

Return parameters:

data is the data read from the instrument

count is the optional number of values read

msg is an optional warning message if the read was unsuccessful

Examples: idn = fscanf (g) measure = fscanf (g, ‘%e’) data = fscanf (g, ‘%e’, 6)

[waveform, cnt] = fscanf (g)

[data, cnt, warnmsg] = fscanf (g)

Displays or returns all instrument object properties or, optionally, only the current value of a specified PropertyName.

Input parameters:

obj is an instrument object or array of instrument objects

PropertyName is a string for an optionally-specified property name of the instrument

Returns:

All base and object-specific property names and their current values for instrument obj , or the current property value for a specified PropertyName

Return parameters:

out is a structure of property names and values, a cell array of property values, or a single property value

Examples: get (g) props = get (g) visatype = get (g, ‘Type’)

Oscilloscope Analysis and Connectivity Made Easy

283

MATLAB Instrument Control Toolbox Functions

Function instrhelp name instrreset

data = query

(obj, ‘cmd’

<,‘wformat’>

<,‘rformat’>)

[data <,count>

<,msg>] = query

(obj, ‘cmd’

<,‘wformat’>

<,‘rformat’>)

Definition

Displays help for the named Instrument Control Toolbox function or property on the M

ATLAB

command line.

Examples: instrhelp fread instrhelp visa

Disconnects and deletes all instrument objects.

Example: instrreset

Writes text to the instrument and reads data from the instrument.

Input parameters:

obj is an instrument object

cmd is the string written to the instrument

wformat is an optional string specifying a C language conversion specification; if omitted, the default format for written data is %s\n

rformat is an optional string specifying a C language conversion specification; if omitted, data read from the instrument is converted to text using the %c format

Returns:

The data read from the instrument and, optionally, the number of values read and a warning message if unsuccessful

Return parameters:

data is the data read from the instrument

count is the optional number of values read

msg is an optional warning message if the read was unsuccessful

Examples: while query(g,'BUSY?','%s','%e'); end; horizLen = query(g,'HORIZONTAL:RECORD?','%s','%e');

284 Oscilloscope Analysis and Connectivity Made Easy

MATLAB Instrument Control Toolbox Functions

Function set (obj) set (obj,

‘PropertyName’)

props = set (obj)

props = set (obj,

‘PropertyName’) set (obj

<,‘PropertyName’,

PropertyValue,…>) set (obj, PN, PV) set (obj, S)

Definition

Does one of the following:

Displays all configurable instrument object properties

Displays all possible values of a specified PropertyName

Returns all configurable instrument properties to props

Returns all possible values of a specified PropertyName to

props

Configures one or more properties of obj to specified value(s) in a single command

Input parameters:

obj is an instrument object or array of instrument objects

PropertyName is a string for an optionally-specified property name of the instrument

PropertyValue is a property value supported by the optional property name

PN is a cell array of property names

PV is a cell array of property values

S is a structure with property names and property values.

Returns:

All configurable properties for instrument obj , or all possible values for a specified PropertyName

Return parameters:

props is a structure array of property names for obj, or a cell array of possible values for PropertyName

Examples: set (g) properties = set (g) modevalues = set (g, ‘EOSMode’) set (g, ‘InputBufferSize’, recordLen*2)

Oscilloscope Analysis and Connectivity Made Easy

285

MATLAB Instrument Control Toolbox Functions

Function Definition

obj = visa

(‘vendor’,

‘rsrcname’

<,‘PropertyName’,

PropertyValue,…>)

Creates a VISA object, optionally with specified property name(s) and value(s).

Input parameters:

vendor is a string for a VISA vendor where tek = Tektronix Corporation VISA ni = National Instruments VISA agilent = Agilent VISA

rsrcname is a string for a VISA instrument resource name. visa-gpib instruments use this syntax:

GPIB<board>::primary_address<::secondary_address>::INSTR visa-serial instruments use this syntax:

ASRL<port>::INSTR

PropertyName is a string for an optional property name of the

VISA object

PropertyValue is a property value supported by the optional property name

Return parameters:

obj is the VISA object created

Examples: g = visa (‘tek’, ‘GPIB8::1::INSTR’) h = visa (‘tek’, ‘ASRL1::INSTR’)

286 Oscilloscope Analysis and Connectivity Made Easy

PnP Driver Functions

Table 38 summarizes the TDS/CSA 8000 PnP driver functions used in this

book.

Table 38: TDS/CSA 8000 PnP driver functions used in LabWindows/CVI and

LabVIEW examples

Command tktds8k_autoConnectToFirst(

instrument) tktds8k_getInstrDesc

(instrument, descriptor) tktds8k_getMeasValue

(instrument, measurement#,

measurementValue)

Meaning

Connects to first tktds8k instrument found.

Output parameter:

Address of VISA instrument handle used to access instrument specific data. Initialized by this routine.

Example: status = tktds8k_autoConnectToFirst (&ID);

Gets instrument descriptor string of the instrument.

Input parameters:

instrument is an instrument handle used to access the descriptor

Output parameters:

description is the returned instrument descriptor string

Example: ret = tktds8k_GetInstrDesc (ID, InstDesc);

Gets a measurement value from the instrument.

Input parameters:

instrument is an instrument handle used to access the instrument

measurement# is the measurement number from which to get a measurement value

Output parameters:

measurementValue is the address of the value for the type of measurement set up in measurement#

Example: tktds8k_GetMeasValue (ID, tktds8k_MEAS_1,

&dMeasValue);

Oscilloscope Analysis and Connectivity Made Easy

287

VISA Operations

VISA Operations

Table 39 summarizes the VISA operations used in this book. For more

information about the Tektronix implementation of the VISA standard (the

TekVISA API), consult the online TekVISA Programmer Manual.

Table 39: VISA operations used in LabVIEW and LAN Server examples

Operations viClose (vI) viOpen

(sesn, rsrcName,

accessMode,

timeout, vi) viOpenDefaultRM

(sesn)

Meaning

Closes the session to this virtual instrument (and the Default

Resource Manager).

Input parameter:

vi is a unique logical identifier to a session, event, or find list.

Example: viClose(vi);

Opens a session to the specified resource.

Input parameter:

sesn is the Resource Manager session (should always be the

Default Resource Manager for VISA returned from viOpenDefaultRM()).

rsrcName is a unique symbolic name of a resource.

accessMode Specifies the mode(s) by which the resource is to be accessed: VI_EXCLUSIVE_LOCK and/or

VI_LOAD_CONFIG. If the latter value is not used, the session uses the default values provided by VISA.

Output parameter:

timeout specifies the absolute time period (in milliseconds) that the resource waits to get unlocked (If the accessMode requests a lock) before this operation returns an error; otherwise, this parameter is ignored.

vi is a unique logical identifier reference to a session.

Example: viOpen(rm, "GPIB9::1::INSTR", VI_EXCLUSIVE_LOCK,

10000, &vi);

Returns a session to the Default Resource Manager.

Output parameter:

sesn is a Unique logical identifier to a Default Resource

Manager session.

Example: viOpenDefaultRM(&rm);

288 Oscilloscope Analysis and Connectivity Made Easy

Operations viRead (vi, buf,

count, retCount) viWrite(vi, buf,

count, retCount)

Meaning

Reads data synchronously from a device into the specified buffer.

Input parameter:

vi is a unique logical identifier to a session.

count is the number of bytes to be read.

Output parameter:

buf represents the location of a buffer to receive data from device.

retCount represents the location of an integer that will be set to the number of bytes actually transferred.

Example: viRead(vi, buffer, 256, &retCnt); buffer[retCnt] = ‘\0’; // ensures null terminator in string

Writes data synchronously to a device from the specified buffer.

Input parameter:

vi is a unique logical identifier to a session.

count is the number of bytes to be written.

Output parameter:

buf represents the location of a data block to be sent to the device.

retCount represents the location of an integer that will be set to the number of bytes actually transferred

.

Example: viWrite(vi, "*idn?", 5, &retCnt);

Oscilloscope Analysis and Connectivity Made Easy

289

VISA Operations

290 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Appendix B: Fast LAN Access to Your

Oscilloscope

Introduction

Other parts of this book have introduced ways to access your Tektronix oscilloscope through end-user and programming applications running directly on the oscilloscope PC. This appendix discusses how to access the oscilloscope across a local area network (LAN) through all of these same applications and programming environments.

VXI-11 and LAN Connectivity for Oscilloscopes

LAN connectivity to your oscilloscope is supported through an industrystandard communications protocol called VXI-11. Developed by the VXIbus

Consortium, the VXI-11 standard specifies an instrument protocol for

TCP/IP computer networks. It supports writing and reading data to and from instruments in a manner similar to the VISA API standard, only across a network and with a smaller set of functions. VXI-11 function calls are issued over client-server connections using the Open Network Computing Remote

Procedure Call (ONC RPC) protocol.

TekVISA provides

virtually transparent network access

to your oscilloscope by including VXI-11 client and server software components.

The VXI-11 LAN Server is installed on your Tektronix oscilloscope as part of the TekVISA software installation. The VXI-11 LAN Client is included as just another VISA instrument resource type on any client PC with TekVISA software installed on it. Any existing VISA-based application may use

TekVISA to access a remote oscilloscope running the LAN Server.

Your VISA-based applications can issue GPIB commands across the LAN link in the same way that they issue commands locally on the oscilloscope

PC. This is possible because the LAN Server uses the same virtual GPIB interface to access the embedded oscilloscope software as is used locally.

The diagram in Figure 65 shows how the above software components fit

together to provide LAN-based oscilloscope connectivity.

Oscilloscope Analysis and Connectivity Made Easy 291

Benefits of LAN Access

292

Figure 65: LAN connectivity from PC applications to Tektronix oscilloscope

Benefits of LAN Access

There are several benefits to LAN-based access to your oscilloscope:

Long-distance Connectivity

: Your oscilloscope can be accessed from any point on the network, whether it is across a room or in another building.

High-speed Access

: The built-in 10/100-BaseT Ethernet port in a

Tektronix oscilloscope enables you to achieve data transfer speeds up to 3 times that of conventional GPIB connections when used in conjunction with the LAN Server (approximately 3.5 megabytes per second over a typical 100-BaseT network).

Oscilloscope Analysis and Connectivity Made Easy

Deployment

Improved Cost/Convenience

: Inexpensive Ethernet cabling more easily connects oscilloscopes to your organization's existing network infrastructure than does limited, single point-to-point connections with bulky GPIB bus cables.

Deployment Considerations

To realize the full benefits of LAN-based oscilloscope access, keep in mind the following considerations:

Network Performance

: Actual oscilloscope data transfer performance across a LAN will depend on your network’s physical type and composition of hubs, switches, and routers. It may be necessary to upgrade network components in order to achieve optimal LAN access speeds.

Network Security

: As with any other computing resource attached to a network, take security precautions as appropriate to protect your

LAN-enabled oscilloscope against unauthorized use.

Caution:

If your organization's LAN is connected to external networks such as the Internet, use of a properly configured network firewall is strongly recommended. The VXI-11 protocol and VXI-11 LAN Server

do not

include any security mechanisms.

The vast majority of businesses and other organizations with Internet access already have network firewalls established. However, you may want to contact network security personnel to verify that your firewall

blocks external access to the RPC port mapper service

(TCP/IP port 111)

. VXI-11 clients use this network software service to connect to the VXI-11 LAN Server.

VXI-11 LAN Server Installation and Configuration

Installation of the VXI-11 LAN Server is beyond the scope of this appendix.

Documentation for this may be found with your TekVISA software on the product software CD for your Tektronix oscilloscope. The LAN Server may only be configured on the oscilloscope PC.

Once installed, the LAN Server must either be manually activated or configured for automatic startup after system power-up on the oscilloscope

PC. The VXI-11 Server Control program, however, runs automatically after system power-up. If not running, it may be started manually via the

Start > Programs > TekVISA > VXI-11 Server Control

menu item.

Oscilloscope Analysis and Connectivity Made Easy

293

VXI-11 LAN Client Access Setup

When the Server Control program is running, the following icon will appear in the system tray in the lower right corner of the screen on the oscilloscope

PC:

To change the LAN Server's activation status or other properties, right-click the Server Control icon to bring up the pop-up menu below:

If the LAN Server is already running, the

Start VXI-11 Server

menu item will be disabled; otherwise, this menu item will be enabled, and

the Stop VXI-11

Server

menu item will be disabled. Select

Start VXI-11 Server

to activate the server if necessary.

If you would like the LAN Server to start automatically at system boot, you can configure it to do so by selecting the

Server Properties

item on the popup menu. This following dialog box will appear:

294

After installation of the TekVISA software, the LAN Server

will not

be configured for automatic startup (as a security precaution). To configure automatic startup, select the check box labeled “Start server automatically at system powerup” so that it is enabled. Clear this check box if you would like to disable automatic startup.

Information on other features of the VXI-11 Server Control program can be found in documentation included with the TekVISA installation software.

VXI-11 LAN Client Access Setup

TekVISA Installation

VISA applications that communicate with Tektronix instrumentation should use TekVISA, the Tektronix version of VISA. You should install and

Oscilloscope Analysis and Connectivity Made Easy

VXI-11 LAN Client Access Setup configure TekVISA on each PC that communicates with Tektronix instrumentation using the VISA standard.

The software installation includes a utility to help you configure TekVISA resources. The VISA configuration utility allows you to detect GPIB and serial (ASRL) resource assignments, and to add or remove remote hosts

(such as VXI-11 LAN Servers connected by Ethernet LAN or an AD007

GPIB-LAN adapter and associated GPIB hardware).

To install TekVISA software on a PC connected to your Windows-based oscilloscope, follow these steps:

Note.

If you have already installed TekVISA from an earlier version of the Tektronix Software Solutions CD, please reinstall TekVISA from the most recent CD.

1.

Insert the product software CD for your Series of Tektronix oscilloscope into the CD-ROM drive. Select

Start > Run

, browse the CD to the

TekVISA

folder, and run

setup.exe

.

2.

Follow the instructions in the installation wizard.

Included with the TekVISA installation is the VISA configuration utility, which lets you find resource assignments and add or remove network hosts

(instruments). Once an instrument is added to the TekVISA configuration, you can communicate with it by using a TekVISA-compliant instrument driver.

To run the VISA configuration utility, select

Start > Programs > TekVISA >

TekVISA Configuration

. Windows opens the VISA Configuration window,

shown in Figure 66. The configuration program then searches the network

for installed resources. This may take a few minutes depending on the number of resources loaded and the network load.

Oscilloscope Analysis and Connectivity Made Easy

295

VXI-11 LAN Client Access Setup

Figure 66: VISA Configuration Window

The VISA Configuration window has the following features:

TekVISA Resources List Box

. Lists all resources that VISA can currently find.

Find Button

. Rescans the VISA resources and is useful for verifying the presence of new instruments.

Preferences Button

. Brings up the TekVISA Resource Manager

Preferences dialog box. This dialog box defines the actions that occur when the find button is pressed and can define other conditions when a find may occur.

296 Oscilloscope Analysis and Connectivity Made Easy

VXI-11 LAN Client Access Setup

Call Monitor Button

. The call monitor button brings up the call monitor dialog. This dialog displays the TekVISA or TVC calls as they are performed.

Oscilloscope Analysis and Connectivity Made Easy

297

VXI-11 LAN Client Access Setup

Remote Hosts List Box

. Lists the current name or IP address (such as

10.0.0.1

) or range of IP addresses of possible remote hosts (that is, the oscilloscope you wish to control remotely).

Add Button

. Displays the Add Remote Host Dialog for adding a remote interface.

Remove Button

. Removes the host selected in the Remote Hosts list box and displays a dialog box before removing the host.

Status

. The status box displays helpful information about the last operation performed. The Busy / Ready indicator next to it shows when the utility is busy.

To search for new instruments, click

Find

. The VISA configuration utility rescans the VISA resources to find any new instruments.

To add a remote host (configure a VXI-11 client), follow these steps:

1.

Click

Add

. The Add Remote Host dialog appears

(Figure 67).

Figure 67: TekVISA Remote Host dialog box

Hostname

. Is a host name, an IP address or regular expression defining a range of IP addresses.

In the Add Remote Host dialog, enter the correct host name (or IP address or range of IP addresses) of the new interface. These names and addresses will be searched for corresponding VXI-11 servers and devices.

To delete a remote host item, perform these steps:

1.

Select the host name to remove in the Remote Hosts list box.

Click

Remove

. The host name disappears from the Remote Hosts box and the

TekVISA Resources List Box.

298 Oscilloscope Analysis and Connectivity Made Easy

Application Examples

Visual Basic Example

As described earlier, Visual Basic programs use the TekVISA ActiveX

Control (

TVC

) to access the oscilloscope locally. You can access the oscilloscope remotely as well with this same control component by setting the VISA instrument descriptor appropriately.

Assume that, the VISA Configuration utility has already found several VXI-

11 devices. These devices are denoted with TCPIP VISA descriptors. After creating an instance of the TVC control called

Tvc1

, you would then set the

VISA instrument descriptor as follows:

Tvc1.Descriptor = “TCPIP::128.181.244.67::INSTR”

All other details of using the TVC control to access the oscilloscope in

Visual Basic are the same as discussed earlier.

M

ATLAB

Example

Let us continue to use the previous example of a remote oscilloscope. You may have noticed that the descriptor “TCPIP::128.181.244.67::INSTR” has an alias of “GPIB0::1::INSTR”. Currently MATLAB doesn’t accept TCPIP descriptors directly. However, it will recognize and open TCPIP descriptors that are aliased as GPIB descriptors. Within MATLAB, you would create a

VISA-GPIB instrument object to access the oscilloscope as follows: g = visa(

'tek' , 'GPIB0::1::INSTR' );

As you can see, this is not much different from examples of local oscilloscope access presented earlier in this book. All other details of working with the oscilloscope in MATLAB remain the same.

LabWindows/CVI Example

In the Chapter 9 description of using LabWindows/CVI with the VXI Plug-n-

Play drivers, a code example is presented using the tktds8k_autoConnectToFirst

function call from the VXI Plug-n-Play API.

This works fine if the program is run directly on the oscilloscope PC.

However, if the program is to be used remotely over the LAN, another function call must be used instead to reliably specify the correct remote oscilloscope.

ViStatus status;

ViSession ID;

status = tktds8k_init("TCPIP::128.181.244.67::INSTR", VI_TRUE, VI_TRUE,

&ID);

The preceding code shows a call example for the tktds8k_init

function. This function call should replace any call to tktds8k_autoConnectToFirst

. The oscilloscope is identified in this case with the

"

TCPIP::128.181.244.67::INSTR

"

character string. Modify this identifier as

Oscilloscope Analysis and Connectivity Made Easy

299

Programming Tips needed to reflect the correct configuration on your PC for the remote oscilloscope as shown by the VISA Configuration utility.

LabVIEW Example

In the Chapter 9, description of using LabVIEW with the VXI Plug-n-Play drivers, the tktds8k Plug & Play Demo.vi

example shows how to access the oscilloscope locally. The figure on page 235 shows the Front Panel for this application and includes the oscilloscope resource name.

Running this demo program on a remote PC is straightforward. Simply change the

"

TCPIP::128.181.244.67::INSTR

"

resource name to whatever resource name has been assigned to your remote oscilloscope via the VISA

Configuration utility.

C Program Example

For oscilloscope users with knowledge of C or C++ programming, a simple

C program using VISA function calls is presented in Figure 68. This example

uses a remote oscilloscope configured for access on the local PC as

GPIB9

.

#include <visa.h>

#include <stdio.h> int main (int argc, char* argv[])

{

ViSession rm, vi;

ViChar

ViUInt32 buffer[256]; retCnt; viOpenDefaultRM(&rm); if (viOpen(rm, "TCPIP::128.181.244.67::INSTR", VI_EXCLUSIVE_LOCK,

10000, &vi)

== VI_SUCCESS)

{ viWrite(vi, "*idn?", 5, &retCnt); viRead(vi, buffer, 256, &retCnt); printf("device: %s\n", buffer); viClose(vi);

} viClose(rm);

}

Figure 68: Sample VISA program for LAN-based oscilloscope access

The online TekVISA Programming Manual presents more detailed information on writing VISA-based programs in C or C++. A brief

description of VISA operations used in this example appears in Table 39 in

Appendix A.

Programming Tips

Timeout Settings

When creating VISA programs to access the oscilloscope remotely, you need to take into consideration the effects of network delays. Since using the

300 Oscilloscope Analysis and Connectivity Made Easy

network may decrease bandwidth and increase latency, you need to use larger timeout settings in VISA function calls than you would for programs running locally.

Non-TekVISA VXI-11 Clients

You can use another vendor's VISA software to connect to your oscilloscope via the Tektronix VXI-11 LAN Server, provided that the vendor has implemented VXI-11 support. National Instruments, for example, supports

VXI-11 client-side access with recent releases of NI-VISA (version 2.5 and later). In such cases, you would not use Tektronix's VisaConfig utility to configure the client PC.

With NI-VISA, you would also use the

TCPIP

resource type in a program to remotely access the oscilloscope. The previous C example and LabView example would also work with NI-VISA.

VXI-11 Standard

The VXIbus Consortium, Inc. developed the VXI-11 standard. The standard’s full name is VXI-11, TCP/IP Instrument Protocol Specification.

You can obtain copies of the specification document from the VXIbus

Consortium at the following website: http://www.vxi.org/specifications.htm.

Although this book section has focused on accessing Tektronix oscilloscopes from remote Windows-based workstations, you can access the oscilloscope across a LAN from computers running another operating system (OS) such as UNIX or Linux. You can use any OS that supports the TCP/IP and ONC

RPC protocols to run or create VXI-11 client programs to access the LAN

Server.

You need some familiarity with RPC programming to create custom VXI-11 client applications. You also need C programming language knowledge to use most RPC software tools and libraries. The specification document mentioned above describes additional details specific to the VXI-11 protocol.

Oscilloscope Analysis and Connectivity Made Easy

301

VXI-11 Standard

302 Oscilloscope Analysis and Connectivity Made Easy

photo of cover goes on this page Introduction

Appendix C: Other VB Examples

Introduction

This appendix presents another Visual Basic programming example that may prove useful to you as a utility or template to insert into your own programs.

This and other examples are available on the CD that accompanies this book.

Alternate Methods for Getting Waveform Data Using the TekVISA Control

The TekVISA ActiveX control exposes a number of methods for capturing waveform data from TekVISA enabled oscilloscopes. The easiest methods to use are

GetWaveform

and

GetWaveform8K

. These methods were employed in the examples in Part 1. For applications requiring more granular control of capturing waveform data, the TekVISA ActiveX exposes other methods including

ReadList

,

ReadPartialString

, and

ReadToFile

. The following example deals with two of these alternate methods.

Writing and Reading Binary/ASCII Waveform Example

This example illustrates how to

• Use the TekVisa ActiveX control’s

ReadList

or

ReadToFile method to read the results of a GPIB

CURVE?

query in either ASCII or binary format, and then write the waveform data to disk

• Read the waveform data from disk and reconstruct X-axis and Y-axis values

The example only captures data from Channel 1 and only targets the

TDS7000 oscilloscope, but it is conceptually useful for other types of data and for scopes such as the TDS/CSA8000 with a somewhat different GPIB command set.

The GPIB command set for the TDS7000 oscilloscope allows you to specify the :

• encoding format of the data (ASCII or binary)

• sample size returned

• byte width of the waveform data.

Oscilloscope Analysis and Connectivity Made Easy 303

Writing and Reading Binary/ASCII Waveform Example

If binary data is returned, you can designate more waveform attributes including the

• byte format (signed integers, unsigned integers, or floating point)

• byte ordering (least significant bit or most significant bit)

The general file format used with both ASCII and binary files is to insert

• header information at the beginning of the file in a semicolon-separated string

• a linefeed character

• the data returned by a GPIB

CURVE?

query

In the case of ASCII data, the values returned from the

CURVE?

query depend on the method used (either

ReadList

or

ReadToFile)

:

• The

ReadList

method of the TekVISA ActiveX control places separated values (such as semicolon-separated and comma-separated values) into a Variant array. This array can then be “walked” to retrieve values. Return values are semicolon-separated if used with a concatenated GPIB command such as

HEADER:OFF;WFMOUTPRE:YOFF?;YMULT?;YZERO?

Return values from a

CURVE?

GPIB query are commaseparated.

When reading data returned from a

CURVE?

query with the

ReadList

command, you can use several associated properties of the

TekVISA ActiveX control so that Y-axis values are calculated.

These properties are

YModelEnabled, YMult, YOffset

, and

YZero

. If you set

YmodelEnabled

to

True

and then assign values to the

YMult,YOffset

, and

YZero

properties, the TVC control will perform the calculations for you. You can then save the calculated Y-axis values to disk. You only need to reconstruct timing values when reading the file from disk.

The header format for an ASCII file using the

ReadList

method with

YModelEnabled

is in the format:

[record length];[trigger position];[x increment]

• As an alternative, you may use the

ReadToFile

method to write data to disk. In this case, you must place more values into the header command so Y values can be calculated when the data is read from disk. (See the code for how this is accomplished.)

The header format for files using the

ReadToFile

method is :

304 Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

[record length];[trigger position];[x increment];[yoffset];[ymult];[yzero]

The User Interface

Figure 69 shows the Visual Basic form created for this example, and Table

40 lists the changes made in the Properties window. Figure 70 shows the

form as it looks at runtime.

• When the user clicks the

Write ASCII

button, a query for an

ASCII-formatted waveform is sent to the oscilloscope.

Depending on which option button is selected, one of two methods (

ReadList

or

ReadToFile

) is used to read the response and write it to disk.

• When the user clicks the

Write Binary

button, a query for a binary-formatted waveform is sent to the oscilloscope. The response is read using the

ReadToFile

method and written to disk.

• When the user clicks the

Read ASCII

button, an ASCII waveform is read from disk and displayed in the list box.

This routine limits display to waveforms of 50000 records or fewer.

• When the user clicks the

Read Binary

button, a binary waveform is read from disk. Depending on which option button is selected, the data is either converted to ASCII and displayed in the list box or written to disk in ASCII format.

Figure 69: Design-time form for the Writing and Reading Binary/ASCII Waveform example

Oscilloscope Analysis and Connectivity Made Easy

305

Writing and Reading Binary/ASCII Waveform Example

Table 40: Changes to make in the Properties window to the Writing and Reading

Binary/ASCII Waveform example

Control

Form tvc (TekVISA)

CommonDialog

Listbox

CommandButton

CommandButton

Label

Frame

OptionButton

OptionButton

CommandButton

Frame

CommandButton

CommandButton

OptionButton

Property Change to

(Name)

(Name)

(Name)

(Name)

Caption

(Name)

(Name)

Caption

BackColor

(Name)

Caption

frmTest

Test Writing and Reading

Binary/Ascii Waveform

Files

Tvc1 (no change needed) dlgTVC lstD cmdWriteBinary

Write Binary cmdClear lblStatus

(no Caption)

Button Face

ForeColor

BorderStyle

Button Text (Palette blue)

Fixed Single

Write Ascii Data Frame

(Name)

fraWrite

Caption

(Name)

Caption

Value

Write Ascii Data optReadList

Use ReadList method

True (Selected)

(Name)

Caption

(Name)

Caption

optReadToFile

Use ReadToFile method cmdWriteAscii

Write Ascii

Read Data Frame

(Name)

Caption

fraRead

Read Data

(Name)

Caption

(Name)

Caption

(Name)

Caption

cmdReadAscii

Read Ascii cmdReadBinary

Read Binary optListBox

Display in Listbox

306 Oscilloscope Analysis and Connectivity Made Easy

Control

OptionButton

Writing and Reading Binary/ASCII Waveform Example

Property

Value

(Name)

Caption

Change to

True (Selected) optWriteBtoA

Write Binary to Ascii File

Figure 70: Runtime form for the Writing and Reading Binary/ASCII Waveform example

How the Program Works

Table 41 summarizes the routines used to implement this example.

Writing ASCII Data

This example uses either the

ReadList

or

ReadToFile

method for writing

ASCII data to disk. The relevant routines to examine for writing ASCII waveform data are cmdWriteAscii_Click()

event (page 314) and the

HandleSaveDialog

(page 319) and

ConcatInBuffer

(page 319) procedures.

These routines illustrate the different header information required when using

ReadList

and

ReadToFile

. Files with the extra header information required by the

ReadToFile

method have an “AF” prefix. Files with only X-Axis information have an “A” prefix.

Reading ASCII Data

Routines illustrating how to read the two different types of header files in

ASCII files and use them to construct waveform data are the cmdReadAscii_Click()

event (page 312), and the

GetAsciiData

(page 309) and

HandleOpenDialog

(page 318) functions.

Writing Binary Data

The

ReadToFile

method is used to write binary data to a file. The relevant routines for writing binary data are the cmdWriteBinary_Click

event (page

316) and the

HandleSaveDialog

(page 319) routine.

Oscilloscope Analysis and Connectivity Made Easy

307

Writing and Reading Binary/ASCII Waveform Example

Reading Binary Data

The relevant routines for reading binary data from disk are the cmdReadBinary_Click()

event (page 313) and the

GetBinaryData

(page 311)

and

HandleOpenDialog

(page 318) functions.

Table 41: Summary of functions in the Reading Binary/ASCII Files example cmdWriteAscii_Click()

ConcatInBuffer(ByRef s1 As

String) cmdReadAscii_Click()

GetAsciiData() cmdWriteBinary_Click() cmdReadBinary_Click()

GetBinaryData()

HandleSaveDialog(ftype As

Executes when the Write ASCII button is clicked.

Depending on the option button selected, this routine uses either the ReadList or ReadToFile method of the TekVISA

Control to handle values returned from a CURVE? query.

Setting the YModelEnabled Property to True when using the ReadList method means that X-axis information needs to be stored in a file header. Using the ReadToFile method requires both X-Axis and Y-Axis data to be saved in the file header. Values are stored in up to 12 orders of precision.

Standard string concatenation in Visual Basic is slow. This routine increases string concatenation speed dramatically by using the CopyMemory (Alias for RtlMoveMemory)

Windows API function. Used when walking through the array returned by the ReadList method of the TekVISA

ActiveX control.

Executes when the Read ASCII button is clicked. Calls the GetAsciiData routine which returns a two-dimensional array containing time and value measurements. Walks through the array and displays results in the list box.

Calls the HandleDialogOpen function, which returns the contents of the file in a single string. The routine parses the string. If the filename has an “AF” prefix, the routine assumes that both X-Axis and Y-Axis data needs to be constructed. It parses the file header accordingly. If the file has an “A” prefix, it assumes that only the X-Axis data needs to be constructed. It builds a two-dimensional array and returns it to cmdReadAscii_Click(), the calling procedure.

Executes when the Write Binary button is clicked.

Stores X-Axis and Y-Axis values in the header file, executes a CURVE? query, and uses the ReadToFile method to handle returned values.

Executes when the Read Binary button is clicked. Calls the GetBinary Data routine, which returns a twodimensional array holding time and value measurements.

Depending on the option button selected, either displays returned data in a list box or writes the data to an ASCII file for examination by a text reader.

Calls the HandleDialogOpen routine, which returns the entire file in a byte array. The header portion of the array is parsed and used to reconstruct X-axis and Y-Axis values.

These values are placed in a two-dimensional array and returned to cmdReadBinary_Click(), the calling procedure.

Uses the MS Common dialog control to open a file

308 Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

String)

HandleOpenDialog(ftype As

String)

Form_Load()

RemoveLF(s1 As String) As

String cmdClear_Click()

(timestamp default) for saving captured data to disk. The ftype parameter is used to add an appropriate prefix to the file (“A” for ASCII file needing only X-axis reconstruction,

“AF” for an ASCII file needing both X- and Y-axis reconstruction, and “B” for a binary file).

Uses the MS Common dialog control to open a file

(timestamp default) for reading stored waveform data from disk. The ftype parameter may have a value of either “A” or “B” indicating whether it is an ASCII or binary file.

Executes when the Form is loaded. Code positions the form on the screen.

Called to remove trailing linefeed character on data returned from the oscilloscope.

Executes when the Clear button is clicked. Clears the list box and status label at the bottom of the form.

Code Listing

Declarations

Option Explicit

Dim sFileName As String

Dim sAsciiFile As String

Dim bArr() As Byte

Dim tracker As Long

Dim CancelFlag As Boolean

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"

(Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function GetTickCount Lib "kernel32" () As Long

Clear Button Routine

Private Sub cmdClear_Click() lstD.Clear

lblStatus.Caption = ""

End Sub

Public Function RemoveLF(s1 As String) As String

If Right(s1, 1) = vbLf Then

Else

RemoveLF = Left(s1, Len(s1) - 1)

RemoveLF = s1

End If

End Function

Get ASCII Data Routine

Private Function GetAsciiData()

Dim sRet As String

Dim arrHoldHeader() As String, arrHoldData() As String

Dim arrRet()

Dim i As Long

Dim nLFPos As Long

Dim sHeader As String, sData As String

Dim sLength As String, sTrigPos As String, sXINCR As String

Dim nLength As Long, nTrigPos As Long

Dim rXINCR As Double, t As Double, rHoldV As Double

Dim yoffset As Double, ymult As Double, yzero As Double

Dim msg1 As String, msg2 As String

Dim sHoldM As String

On Error GoTo GetAsciiDataErr msg1 = "Error in application file format."

Oscilloscope Analysis and Connectivity Made Easy

309

Writing and Reading Binary/ASCII Waveform Example

310

CancelFlag = False sRet = HandleOpenDialog("A")

If CancelFlag Then Exit Function nLFPos = InStr(sRet, vbLf)

If nLFPos <> 0 Then

' get the header and data sHeader = Left(sRet, nLFPos - 1) sData = Right(sRet, Len(sRet) - nLFPos)

' place header and data into arrays arrHoldHeader = Split(sHeader, ";") arrHoldData = Split(sData, ",")

If Left(sAsciiFile, 2) = "AF" Then

For i = LBound(arrHoldHeader) To UBound(arrHoldHeader) sHoldM = arrHoldHeader(i)

If Not sHoldM = "" Then

Select Case i

Case 0 nLength = CLng(arrHoldHeader(i))

Case 1 nTrigPos = CLng(arrHoldHeader(i))

Case 2 rXINCR = CDbl(arrHoldHeader(i))

Case 3 yoffset = CDbl(arrHoldHeader(i))

Case 4 ymult = CDbl(arrHoldHeader(i))

Case 5 yzero = CDbl(arrHoldHeader(i))

End Select

End If

Next

' dimension a two dimensional array and return

ReDim arrRet(0 To nLength - 1, 1 To 2)

For i = LBound(arrHoldData) To UBound(arrHoldData) t = (i - nTrigPos) * rXINCR arrRet(i, 1) = Format(t, "#.############")

'calculate y value rHoldV = yzero + ((arrHoldData(i) - yoffset) * ymult) arrRet(i, 2) = Format(CDbl(rHoldV), "#.############")

Next

GetAsciiData = arrRet

Exit Function

Else

' get the header info sLength = arrHoldHeader(0)

If IsNumeric(sLength) Then nLength = CLng(sLength)

End If sTrigPos = arrHoldHeader(1)

If IsNumeric(sTrigPos) Then nTrigPos = CLng(sTrigPos)

End If sXINCR = arrHoldHeader(2)

If IsNumeric(sXINCR) Then rXINCR = CDbl(sXINCR)

End If

' dimension a two dimensional array and return

ReDim arrRet(0 To nLength - 1, 1 To 2)

For i = LBound(arrHoldData) To UBound(arrHoldData) t = (i - nTrigPos) * rXINCR arrRet(i, 1) = Format(t, "#.############")

Next arrRet(i, 2) = Format(CDbl(arrHoldData(i)),

"#.############")

Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

GetAsciiData = arrRet

Exit Function

End If

Else

MsgBox msg1, vbOKOnly

GetAsciiData = ""

Exit Function

End If

Exit Function

GetAsciiDataErr:

MsgBox "Error " & Err.Number & ": " & Err.Description

GetAsciiData = ""

End Function

Get Binary Data Routine

Private Function GetBinaryData()

'**********************************************************************

' This routine parses the binary file (returned as a byte array),

' calculates x and y axis values

' It returns a two-dimensional array of x,y pairs

' the file format it parses is:

'[record length];[trigger position];

'[x increment];[yoffset];[ymult];[yzero]

'carriage return character

'values in 2 byte increments

'**********************************************************************

Dim arr() As Byte

Dim hold1() As Byte, hold2() As Byte

Dim nCRpos As Long

Dim i As Long, nStart As Long

Dim arrPass() As Double

Dim sMData As String, arrM() As String, sHoldM As String, nHoldV As Long

Dim reclength As Long, trigpos As Long, xinc As Double, yoffset As Double, ymult As Double, yzero As Double

Dim nTracki As Long

Dim sRecbytes As String, nRecBytes As Integer

Dim sBytes As String, nBytes As Long

Dim msg As String, temp As String

On Error GoTo GetBinaryDataErr

CancelFlag = False arr = HandleOpenDialog("B")

If CancelFlag = True Then Exit Function

' locate the linefeed character separating the header from the data

For i = LBound(arr) To UBound(arr)

If arr(i) = 13 Then nCRpos = i

Exit For

End If

Next

If nCRpos = 0 Then

MsgBox "Error in file format"

Exit Function

End If

'place the semicolon-separated header information in a byte array hold1 = LeftB(arr, nCRpos - 1)

'use the Split function to place the byte array into a string array sMData = StrConv(hold1, vbUnicode)

' assign array elements to variables arrM = Split(sMData, ";")

Oscilloscope Analysis and Connectivity Made Easy

311

Writing and Reading Binary/ASCII Waveform Example

312

For i = LBound(arrM) To UBound(arrM) sHoldM = arrM(i)

If Not sHoldM = "" Then

Select Case i

Case 0 reclength = CLng(arrM(i))

Case 1 trigpos = CLng(arrM(i))

Case 2 xinc = CDbl(arrM(i))

Case 3 yoffset = CDbl(arrM(i))

Case 4 ymult = CDbl(arrM(i))

Case 5

End If

Next yzero = CDbl(arrM(i))

End Select

' place the binary yvalue data into a byte array hold2 = RightB(arr, UBound(arr) - nCRpos)

' get number of bytes in waveform prefix(#[numx]xxx..) sRecbytes = MidB(hold2, 2, 1)

' convert to string temp = StrConv(sRecbytes, vbUnicode)

' convert to integer nRecBytes = CInt(temp)

' locate start of data; used as starting point in for loop below nStart = 3 + nRecBytes

' retrieve number of bytes sBytes = MidB(hold2, 3, nRecBytes)

' convert to string temp = StrConv(sBytes, vbUnicode) nBytes = CLng(temp) ' hold reported length in header

' dimension the array

ReDim arrPass(1 To 2, 1 To nBytes) As Double nTracki = 1

For i = nStart To UBound(hold2)

If nTracki > nBytes Then Exit For

If hold2(i) = 10 Then Exit For

If hold2(i) > 127 Then nHoldV = hold2(i) - 256

Else nHoldV = hold2(i)

End If arrPass(1, nTracki) = ((nTracki - 1) - trigpos) * xinc arrPass(2, nTracki) = yzero + ((nHoldV - yoffset) * ymult) nTracki = nTracki + 1

Next

GetBinaryData = arrPass

Exit Function

GetBinaryDataErr: msg = "Error " & Err.Number & ": " & Err.Description

MsgBox msg

End Function

Read ASCII Button Routine

Private Sub cmdReadAscii_Click()

Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

Dim sRet

Dim i As Long

Dim msg1 As String

On Error GoTo cmdReadAsciiErr

If optListBox.Value = True Then lstD.Clear

sRet = GetAsciiData

If CancelFlag Then Exit Sub

If Not IsArray(sRet) Then Exit Sub

For i = LBound(sRet, 1) To UBound(sRet, 1)

Next lstD.AddItem sRet(i, 1) & "," & sRet(i, 2)

Else msg1 = "This option not available for reading ASCII files"

MsgBox msg1, vbOKOnly

Exit Sub

End If

Exit Sub cmdReadAsciiErr:

MsgBox "Error " & Err.Number & ": " & Err.Description

End Sub

Read Binary Button Routine

Private Sub cmdReadBinary_Click()

Dim arr

Dim i As Long

Dim nLength As Long

Dim fnum As Integer

Dim shold As String

Dim msg as String msg = "Record length limited to 50000 or less for list box display"

On Error GoTo cmdReadBinaryErr arr = GetBinaryData

If CancelFlag Then Exit Sub

If Not IsArray(arr) Then

MsgBox "Error in reading data."

Exit Sub

End If nLength = UBound(arr, 2)

If optListBox.Value = True Then

If nLength > 50000 Then

MsgBox msg

Exit Sub

End If

' display array in list box

For i = LBound(arr, 2) To nLength lstD.AddItem arr(1, i) & "," & arr(2, i)

Next

Else ' we are writing the binary data to an ASCII file

Call HandleSaveDialog("BtoA") fnum = FreeFile

Open sFileName For Append As #fnum

For i = LBound(arr, 2) To nLength

Oscilloscope Analysis and Connectivity Made Easy

313

Writing and Reading Binary/ASCII Waveform Example

314

Next shold = arr(1, i) & "," & arr(2, i)

Print #fnum, shold

Close #fnum

End If

Exit Sub cmdReadBinaryErr:

MsgBox "Error " & Err.Number & ": " & Err.Description

Close

End Sub

Write ASCII Button Routine

Private Sub cmdWriteAscii_Click()

Dim shold As String, sXData As String, sWrite As String

Dim nsize As Long, fnum As Integer

Dim i As Long

Dim wfm, mData

Dim rl As Long, buflength As Long

Dim lb As Long, ub As Long

Dim start As Long, finish As Long, diff As Long

Dim flen As Long

Const sep = ","

'This routine writes ASCII data with two different header formats,

'depending upon the

'method used to write data to disk; if using ReadList with

' YModelEnabled only the XAxis

'information is stored in the header. This file format is:

'[record length];[trigger position];[x increment]

'linefeed character

'calculated value, calculated value, ...nRecordLength

'If using the ReadToFile method, both YAxis and XAxis information

' must be stored in the

' header file. This header format is:

' the file format is:

'[record length];[trigger position];[x increment];[yoffset];[ymult];

'[yzero]

'linefeed character

'calculated value, calculated value, ...nRecordLength

On Error GoTo cmdWriteASCIIErr

Const HOFF As String = "HEADER OFF;:"

With Tvc1

.DeviceClear

.Lock

.WriteString "DATA:SOURCE CH1"

' set the data encoding

.WriteString "WFMOUTPRE:ENCDG ASC"

.WriteString "WFMOUTPRE:BYT_NR 2"

'get the Yaxis properties for floating point conversion

.WriteString HOFF & "WFMOUTPRE:YOFF?;YMULT?;YZERO?" mData = .ReadList(ASCIIType_BSTR, ";")

If Not IsArray(mData) Then

MsgBox "Error in creating array.", vbOKOnly

Exit Sub

End If

' set starting and end points point

.WriteString "DATA:START 0"

' get recordlength

.WriteString HOFF & "HORIZONTAL:RECORDLENGTH?"

rl = CLng(.ReadString)

Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

' set data stop

.WriteString "DATA:STOP " & rl

' retrieve trigger position and x increment values

.WriteString "WFMOUTPRE:PT_OFF?;XINCR?"

' different header requirements; ReadList calculates Y axis

' values for you

' using ReadToFile method requires that you store Y axis

' information and perform

' calculations in code when reading the file from disk (see

' GetAsciiData routine)

If optReadList.Value = True Then

sXData = RemoveLF(.ReadString)

sXData = rl & ";" & sXData & vbLf

CancelFlag = False

Call HandleSaveDialog("A")

If CancelFlag Then Exit Sub

ElseIf optReadToFile = True Then

'[record length];[trigger position];[x increment];

' [yoffset];[ymult];[yzero]

sXData = RemoveLF(.ReadString)

sXData = rl & ";" & sXData & ";" & mData(1) & ";" & mData(2) & ";" & RemoveLF(Str$(mData(3))) & vbLf

CancelFlag = False

Call HandleSaveDialog("AF")

If CancelFlag Then Exit Sub

End If

.Timeout = 20000 start = GetTickCount lblStatus.Caption = "Saving data...."

DoEvents fnum = FreeFile

Open sFileName For Append As #fnum

' write the data header line

Print #fnum, sXData

If optReadList.Value = True Then

.YModelEnabled = True

.yoffset = mData(1)

.ymult = mData(2)

.yzero = mData(3)

.WriteString HOFF & "CURVE?" wfm = .ReadList(ASCIIType_I2, ",")

'Allocate an oversized buffer in memory; 12 possible

'characters w/ 2 byte Unicode

'characters equals 24 possible bytes per value; we assume

'that we will have enough

' to accomodate the comma separators.

buflength = rl * 24

ReDim bArr(buflength) tracker = 0 lb = LBound(wfm) ub = UBound(wfm)

For i = lb To ub

If i < ub Then shold = wfm(i) & sep

Else

' remove last comma shold = wfm(i)

End If

Call ConcatInBuffer(shold)

Next

Oscilloscope Analysis and Connectivity Made Easy

315

Writing and Reading Binary/ASCII Waveform Example

' assign the array to a string sWrite = bArr

' find the null character and take everything to the left

' of it sWrite = Left(sWrite, InStr(sWrite, Chr$(0)) - 1)

' write it to disk

Print #fnum, sWrite

' display time and filesize calculations finish = GetTickCount diff = finish - start flen = LOF(fnum)

Close #fnum lblStatus.Caption =

"Seconds: " & (diff / 1000) & " Reclength: " & rl & _

" FileLength: " & CInt(flen / 1024) & "KB"

.YModelEnabled = False

ElseIf optReadToFile = True Then

'close the file w/ the header information and append to

'it using ReadToFile method of the TekVIDSA control

Close #fnum

.WriteString HOFF & "CURVE?"

.FileAppendEnabled = True

Do

.ReadToFile sFileName, 1024, flen

Loop While flen = 1024

.FileAppendEnabled = False finish = GetTickCount diff = finish - start lblStatus.Caption =

"Seconds: " & (diff / 1000) & " Reclength: " & rl & _

" FileLength: " & CInt(FileLen(sFileName) / 1024) & "KB"

End If

.Unlock

End With

Exit Sub cmdWriteASCIIErr:

Dim msg As String

Screen.MousePointer = vbDefault lblStatus.Caption = "" msg = "Error " & Err.Number & ": " & Err.Description

MsgBox msg

Close

End Sub

Write Binary Button Routine

Private Sub cmdWriteBinary_Click()

Dim shold As String, sHeader As String, sXData As String

Dim i As Long

Dim mData

Dim rl As Long, rlOut As Long

Dim nCRpos As Long

Dim fnum As Integer

Dim start As Long, finish As Long, diff As Long

Dim flen As Long

Const HOFF As String = "HEADER OFF;:"

' This routine stores xaxis and yaxis values in the header file.

' It is separated from the

' data portion by a line feed character. The header values are

' separated by a semicolon

' the file format is:

'[record length];[trigger position];[x increment];

'[yoffset];[ymult];[yzero]

'linefeed character

'values in 1 byte increments

316 Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

On Error GoTo cmdTestBinaryErr

With Tvc1

.DeviceClear

.Lock

.WriteString "DATA:SOURCE CH1"

' set the data encoding, byte ordering, binary format,

' and byte width

.WriteString "WFMOUTPRE:ENCDG BIN"

.WriteString "WFMOUTPRE:BYT_OR LSB"

.WriteString "WFMOUTPRE:BN_FMT RI"

.WriteString "WFMOUTPRE:BYT_NR 1"

' set starting point

.WriteString "DATA:START 1"

' make sure we get the entire waveform

.WriteString HOFF & "HORIZONTAL:RECORDLENGTH?" shold = .ReadString

shold = RemoveLF(shold) rl = CLng(shold)

.WriteString "DATA:STOP " & rl

'retrieve the Yaxis properties for floating point conversion

.WriteString HOFF & "WFMOUTPRE:YOFF?;YMULT?;YZERO?"

'add to header string

sHeader = RemoveLF(.ReadString)

' retrieve trigger position and x increment values

.WriteString "WFMOUTPRE:PT_OFF?;XINCR?"

' continue building the header string

sXData = RemoveLF(.ReadString)

sXData = rl & ";" & sXData sHeader = sXData & ";" & sHeader & vbCr

' write the header to the file

CancelFlag = False

Call HandleSaveDialog("B")

If CancelFlag Then Exit Sub fnum = FreeFile

Open sFileName For Binary As #fnum

Put #fnum, , sHeader

Close #fnum

.Timeout = 20000 start = GetTickCount

.WriteString HOFF & "CURVE?"

lblStatus.Caption = "Saving data...."

DoEvents

.FileAppendEnabled = True

Do

Call .ReadToFile(sFileName, 1024, rlOut)

Loop While rlOut = 1024

.FileAppendEnabled = False

' display time and filesize calculations finish = GetTickCount diff = finish - start flen = FileLen(sFileName)

Close #fnum lblStatus.Caption =

"Seconds: " & (diff / 1000) & " Reclength: " & _ rl & " FileLength: " & CInt(flen / 1024) & "KB"

.Unlock

Oscilloscope Analysis and Connectivity Made Easy

317

Writing and Reading Binary/ASCII Waveform Example

End With

Exit Sub cmdTestBinaryErr:

Dim msg As String

Screen.MousePointer = vbDefault lblStatus.Caption = "" msg = "Error " & Err.Number & ": " & Err.Description

MsgBox msg

Close

End Sub

Form Load Routine

Private Sub Form_Load()

Me.Left = Screen.Width / 10

Me.Top = Screen.Height / 25

End Sub

Handle Open Dialog Routine

Public Function HandleOpenDialog(ftype As String)

Dim msg As String

Dim bArr() As Byte

Dim sRet As String

Dim sFName As String

Dim fnum As Integer

Dim nLength As Long

On Error GoTo HandleOpenDlgErr

With dlgTVC

.Flags = cdlOFNHideReadOnly + cdlOFNPathMustExist + cdlOFNExplorer

.DialogTitle = "Retrieving Scope Data"

.Filter = "Data files(*.dat)|*.dat|All files(*.*)|*.*"

.FilterIndex = 1

.ShowOpen

sFName = .FileName

sAsciiFile = .FileTitle

fnum = FreeFile nLength = FileLen(sFName)

' open and close to create file and erase any prior

' contents if it exists

If ftype = "A" Then

Open sFName For Input As #fnum

Else

Open sFName For Binary As #fnum

End If

If ftype = "B" Then

ReDim bArr(nLength) As Byte

Get #fnum, , bArr

HandleOpenDialog = bArr

ElseIf ftype = "A" Then sRet = Input(nLength, #fnum)

HandleOpenDialog = sRet

End If

Close #fnum

End With

Exit Function

HandleOpenDlgErr: msg = "Error " & Err.Number & ": " & Err.Description

Select Case Err.Number

Case mscomdlg.cdlCancel

sFileName = ""

318 Oscilloscope Analysis and Connectivity Made Easy

Writing and Reading Binary/ASCII Waveform Example

CancelFlag = True

Close

Err.Clear

Exit Function

Case Else

MsgBox msg, vbOKOnly

Close

End Select

End Function

Handle Save Dialog Routine

Public Sub HandleSaveDialog(ftype As String)

' this routine uses the MS Comon dialog control to open a file

(timestamp default) for saving

' captured data to disk; called from SRQHandler routines

Dim msg As String

Dim sFileDefault As String

Dim d As Date

Dim fnum As Integer

On Error GoTo HandleSaveDlgErr

' create a default timestamp file name d = Now sFileDefault = Format(d, "yy") & Format(d, "mm") & Format(d, "dd") _

& "_" & Format(d, "hh") & Format(d, "nn") & Format(d, "ss") sFileDefault = ftype & sFileDefault

With dlgTVC

.Flags = cdlOFNHideReadOnly + cdlOFNPathMustExist + cdlOFNExplorer

+ cdlOFNOverwritePrompt

.DialogTitle = "Save Scope Data"

.Filter = "Data files(*.dat)|*.dat|All files(*.*)|*.*" sFileDefault = sFileDefault & ".dat"

.FileName = sFileDefault

.FilterIndex = 1

.ShowSave

sFileName = .FileName

fnum = FreeFile

' open and close to create file and erase any prior contents if it

' exists

If ftype = "A" Or ftype = "BtoA" Or ftype = "AF" Then

Open sFileName For Output As #fnum

ElseIf ftype = "B" Then

Open sFileName For Binary As #fnum

End If

Close #fnum

End With

Exit Sub

HandleSaveDlgErr: msg = "Error " & Err.Number & ": " & Err.Description

Select Case Err.Number

Case mscomdlg.cdlCancel

sFileName = ""

CancelFlag = True

Exit Sub

Case Else

MsgBox msg, vbOKOnly

End Select

End Sub

Concatenate String in Buffer Routine

Public Sub ConcatInBuffer(ByRef s1 As String)

Oscilloscope Analysis and Connectivity Made Easy

319

Writing and Reading Binary/ASCII Waveform Example

' this routine uses CopyMemory (Alias for RtlMoveMemory) API call

' to speed up

' string concatenation in VB; enormous difference in performance

Static Len_s1 As Long

' Get Byte length of passed text.

Len_s1 = LenB(s1)

If Len_s1 > 0 Then

' Copy passed string into preallocated buffer.

Call CopyMemory(bArr(tracker), ByVal StrPtr(s1), Len_s1)

' increment byte tracking variable by byte length of passed string tracker = tracker + Len_s1

End If

End Sub

320 Oscilloscope Analysis and Connectivity Made Easy

Introduction

Appendix D: Using the Waveform

Generator

Introduction

This appendix describes how to use the

Waveform Generator program

, provided with this book, to generate a live waveform for use with examples.

To Generate a Live Waveform

The Waveform Generator program generates a signal from the sound circuit on your oscilloscope. You will need a

cable

that can connect the sound circuit output on the back of the oscilloscope to the Channel 1 input on the

front (see page 323 for details).

Set up Your Display Mode

You can work the examples either on your oscilloscope or on a connected desktop PC. If you decide to work on the

oscilloscope

, you may find it convenient to attach a second monitor as shown:

To attach a second monitor:

1.

Connect any standard VGA monitor to the second monitor

video port

on the back of your oscilloscope.

Note:

If you accidentally use the wrong video port, you will see a duplicate of what is on the oscilloscope screen on the second monitor, rather than an extension of that space.

Oscilloscope Analysis and Connectivity Made Easy

321

To Generate a Live Waveform

2.

Start up your oscilloscope.

The following message will display on the second monitor:

If you can read this message, Windows has successfully initialized this display adapter.

3.

After Windows finishes booting up, right-click anywhere on the desktop and select

Properties

.

The Display Properties dialog box appears.

4.

Select the

Settings

tab.

You will see a graphic display of two monitors labeled 2 and 1.

5.

Drag the monitor icons and align them to match the physical arrangement of your monitors. This makes the movement of the cursor between monitors more natural.

322

6.

Select the monitor labeled

2

, select the check box labeled

Extend my Windows Desktop onto this monitor

, set the desired screen resolution (or leave it as is), and click

OK

.

For more information about setting up dual monitors, see the Microsoft

Windows 98 Resource Kit.

Oscilloscope Analysis and Connectivity Made Easy

To Generate a Live Waveform

Locate the Software and Examples for This Book

The TekVISA API, TekVISA ActiveX Control and TekExcel Toolbar software are located on the product software CD for your Series of oscilloscope and may already be preinstalled on your oscilloscope.

To locate the examples needed for this book:

1.

Insert the CD that accompanies your hardcopy of this book either into the drive on the back of your oscilloscope or into the drive on your desktop PC, depending on where you intend to work the examples. (The examples can also be downloaded from the Tektronix website at http://www.tektronix.com

).

2.

Using Windows Explorer, browse to locate the examples for this book, which are organized by chapter.

The folder structure will look similar to this:

The Waveform Generator program is stored in the

Appendix_D folder.

Connect the Cable

To generate a waveform, you will need a cable that can connect the sound circuit output (a 1/8 inch phone plug) on the back of the oscilloscope to the

Channel 1 BNC input on the front.

Note:

You can purchase ready-made cables and connectors from your local electronics parts dealer. For example, Radio Shack offers a Phono-to-BNC Adapter (part number 278-254) and a 6-ft. Y-

Adapter Audio Cable (part number 42-2481).

Oscilloscope Analysis and Connectivity Made Easy

323

To Generate a Live Waveform

To connect the cable to your oscilloscope:

1.

Attach one end of your signal generator cable to the

line out

port on the back of your oscilloscope.

2.

Attach the other end of your signal generator cable to

Channel 1

on the front of your oscilloscope (or, for

TDS/CSA8000 Series Oscilloscopes, to any BNC connector on an electrical module).

Start Up the Waveform Generator

To start up the waveform generator program:

1.

Using Windows Explorer, locate the

WFG.exe

file on your

CD in the

\Appendix_D

folder:

2.

Copy

and

Paste

the

WFG.exe

file to the c: drive on your oscilloscope, and double-click the

WFG.exe

file on your c: drive to start up the program.

The following warning message appears.

324

3.

Disconnect any headphones or speakers attached to your oscilloscope, then click

OK

.

The Waveform Generator program appears on your screen with several tabs to choose from.

Oscilloscope Analysis and Connectivity Made Easy

To Generate a Live Waveform

Set Up the Oscilloscope and Calibrate the Sound Card

To set up the oscilloscope and calibrate the sound card:

1.

From the Waveform Generator, click the

Calibration

tab.

2.

Start your oscilloscope program.

3.

To choose the proper oscilloscope settings for calibration, perform these steps:

a.

Start with the default configuration.

b.

Set the record length to

5000

.

c.

Set the horizontal resolution to

20

µµµµs

.

d.

Set the vertical scale to

500 mV

per division or any other appropriate setting that gives a strong signal.

4.

On the Waveform Generator, click the

Start

button on the

Calibration tab to start generating the calibration waveform.

Caution: To avoid uncomfortably loud noise or damage to equipment, make sure you disconnect any headphones or speakers attached to your oscilloscope before clicking Start.

Oscilloscope Analysis and Connectivity Made Easy

325

To Generate a Live Waveform

Your waveform may look something like this:

The waveform needs to be squared off like this:

5.

Move the slider bar on the Calibration tab to the

left or right of 0

as needed to square off the tops and sides of the square waveform that appears on your oscilloscope.

This adjustment compensates for individual characteristics of your sound circuit card.

6.

Click

Apply

when you are satisfied with the waveform appearance.

326

You only have to calibrate your sound card once. Now you are ready to export and save the waveform signal so you can use it with examples in this book.

Oscilloscope Analysis and Connectivity Made Easy

To Generate a Live Waveform

Generate the Waveform

To generate the Jitter waveform:

1.

From the Waveform Generator program, click the

Jitter

Adjustment

tab.

2.

Leave the Amplitude and Frequency slider bars at the

minimum amount

for minimum jitter and click

Start

to start generating the Jitter waveform.

Caution: To avoid uncomfortably loud noise or damage to equipment, make sure you disconnect any headphones or speakers attached to your oscilloscope before clicking Start.

Copy and Paste the Waveform Data into Excel

Note:

If you want to save your data in a file so you can transfer it to another PC or another program, follow the procedure to export and

import as described on page 328 through page 328, instead of

copying to the Clipboard.

To

copy

the waveform to the Clipboard:

1.

Follow the recommended procedure to copy waveform data into Excel for your oscilloscope.

The waveform data is saved in the Clipboard in a format that Excel understands.

To

paste

the waveform data from the Clipboard into Excel:

1.

Start up Excel and open a new, empty spreadsheet.

2.

Select the cell where you want to begin pasting the waveform.

Oscilloscope Analysis and Connectivity Made Easy

327

To Generate a Live Waveform

3.

Select

Edit > Paste

from the Excel menu bar or type

Ctrl-V

to paste the waveform data

.

Export the Waveform into a File Appropriate for Excel

If you cannot use the cut-and-paste technique, you can export and import the waveform data.

To export the waveform into an Excel-compatible file:

1.

Follow the recommended procedure to export waveform data into an Excel-compatible file for your oscilloscope.

The waveform data is saved under the filename that you assign it, in tab-delimited format (.

TXT

), which is a format that Excel understands.

Note:

TDS5000 and 7000 Series Oscilloscopes offer two export choices for spreadsheets:

CSV

format works best if you plan on loading the data using

Excel 2000’s

File > Open

menu selection. When you use

File >

Open

with a

.CSV

file, you get a new sheet started with none of your formulas. You must then copy the data to a sheet with your formulas or copy your formulas to the new data.

TXT

format works best if you plan on using Excel 2000’s

Data >

Get External Data > Import Text File

wizard. The advantage of the

Import Text File

approach is that you can easily refresh the data (by right-clicking and selecting

Refresh Data

) without losing the formulas.

Import the Waveform into Excel

To import the waveform data from your oscilloscope into Excel:

1.

If necessary, move the waveform files to a folder on the computer where you are running Excel.

2.

Start up Excel, name the blank worksheet, and save it.

3.

Click the cell location where you want to begin loading the waveform data.

4.

From the Excel menu bar, select

Data > Get External Data >

Import Text File.

5.

Browse to the folder where the data is located, select the name of your file, and click

Import

.

The Step 1 of 3 dialog box appears.

328 Oscilloscope Analysis and Connectivity Made Easy

To Generate a Live Waveform

6.

Click the

Delimited

button and click

Next

.

The Step 2 of 3 dialog box appears.

7.

Select the check box next to

Tab

and click

Next

.

The Step 3 of 3 dialog box appears.

8.

Click

Finish

.

A dialog box appears, asking if you want to import data into the existing worksheet at the currently selected cell location.

9.

Click

OK

.

Oscilloscope Analysis and Connectivity Made Easy

329

To Generate a Live Waveform

330 Oscilloscope Analysis and Connectivity Made Easy

Index

Index

CD

to install TekVISA software on a PC using Tektronix Plug-n-Play drivers with 228

295 with examples for this book xii, 323 with TekVISA software

command and control terminology connectivity

323

38

using VISA operations with

LabVIEW and Tektronix Plug-n-Play drivers

configuring vi’s from the Block

244

Diagram 240 building blocks built-in Tektronix features for made easier

1

1

1 configuring vi’s from the Front Panel

242 creating an example getting help

234

231

3 243 new building blocks for

display setup

how to attach a second monitor

Excel

321 running the example

LabVIEW and VISA

creating an example creating the Block Diagram

244

247 how to copy and paste waveform data into 327 how to export waveform data into a file for 328 how to import waveform data into 328

Excel Chart Measurements example

creating the Front Panel running the example

LabWindows/CVI

overview of

244

252 using Tektronix Plug-n-Play drivers

208 building the form changing properties coding the

104

104

107 with 209

LabWindows/CVI and LabVIEW

review of using PnP drivers and VISA commands with 253 getting started review of running the using VB instead of VBA

Excel Get Waveform example

building the form changing properties coding the getting help getting started review of running the running with Jitter example using VB instead of VBA

Excel Object Model

quick overview of

99

124

120

121

41

48

54

60

53

44

76

69

71

74

58

118 using Tektronix Plug-n-Play drivers with 207

LabWindows/CVI and Tektronix Plug-n-Play drivers

building the interface coding the example getting help running the example

LAN connectivity for oscilloscopes live waveform

213

217

216

226

291

working with charts

Excel Test Run example

building the form changing properties how to calibrate the sound card for 325 how to connect the cable for how to generate

323

321 how to set up the oscilloscope for 325

MATLAB Instrument Control Toolbox 3, 9, 167

adding GUI components to the improved Jitter example 184 cleaning up instrument objects during debugging 172 coding the improved Jitter example 189 coding the getting started review of running the using VB instead of VBA

jitter waveform

how to generate

LabVIEW

overview of

81

81

83

77

98

95

97

327

227 communicating with VISA-GPIB objects 169 configuring VISA resources creating the Jitter example functions 281 improving the Jitter example

Jitter example with native GPIB commands and queries

169

174 with 173 review of

184

173

206

Oscilloscope Analysis and Connectivity Made Easy

331

Index testing the improved Jitter example 204 testing the Jitter example 182 getting help getting started using the Instrument Control ASCII

Communication Tool

Object Browser

170

Native GPIB commands and queries 39, 255

using in Excel using with VB

VB Intellisense feature

VBA Intellisense feature

Easy

57

141

142

60

Oscilloscope Analysis and Connectivity Made

review of reviewing the code running the using VBA instead of VB

VB Writing and Reading Binary/ASCII

Waveform example

code listing how the program works document conventions how this book is organized what this book is about who should read this book

Tektronix Plug-n-Play drivers

xii xi xi xi

3, 8, 207

user interface using alternate methods for getting waveform data

Virtual GPIB

VISA operations

VXI-11 LAN Client

functions 287 loading in LabVIEW 228 access setup

VXI-11 LAN Client/Server

benefits of LAN access

141

127

163

143

158

162

303

309

307

305

303

3, 6

288

loading in LabWindows/CVI 209 viewing driver functions in LabVIEW

C program example deployment considerations

230

TekVISA

introduction to

LabVIEW example overview 4

TekVISA ActiveX Control

background information

3, 6

37 methods, properties, and events 39, 263

MATLAB example

Non-TekVISA VXI-11 Clients programming tip

294

3, 6

292

300

293

291

300

299

299

301

300 waveform acquisition commands

TekVISA API

TekVISA Toolbar

adding to Excel

Clear Activesheet button

Connect button

43

3, 6

3, 5, 13

14

24

15

TekVISA installation timeout settings

VB example

VXI-11 Standard

VXI-11 LAN Server

installation and configuration features 14

Help button

Measurement button

34

24

294

300

299

301

293 preamble 43 record length 42 prerequisites 13 review of

Settings button source code

35

16

35 source 42

waveform acquisition

GPIB commands for

waveform data

41

41

TriggerCapture button

Waveform button

VB Triggered Waveform Capture example

building the form

31

21

130 formats 42

Waveform Generator

how to start up using the

324

321

332 Oscilloscope Analysis and Connectivity Made Easy

advertisement

Was this manual useful for you? Yes No
Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Related manuals

Download PDF

advertisement

Table of contents