Learning with LabVIEW 2009 9780132141314, 0132141310

Learning With LabVIEW 2009introduces students to the basics of LabVIEW programming and relates those concepts to real ap

1,692 182 24MB

English Pages xxvii, 716 pages: illustrations; 24 cm [747] Year 2009;2010

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Learning with LabVIEW 2009
 9780132141314, 0132141310

Table of contents :
Cover......Page 1
Contents......Page 8
Preface......Page 18
1 LabVIEW Basics......Page 32
1.2 Installing the LabVIEW Student Edition......Page 33
1.3 The LabVIEW Environment......Page 34
1.4 The Getting Started Screen......Page 36
1.5 Panel and Diagram Windows......Page 39
1.5.1 Front Panel Toolbar......Page 41
1.5.2 Block Diagram Toolbar......Page 43
1.6 Shortcut Menus......Page 45
1.7.2 Edit Menu......Page 47
1.7.3 View Menu......Page 48
1.7.5 Operate Menu......Page 50
1.7.6 Tools Menu......Page 51
1.7.8 Help Menu......Page 53
1.8.1 Tools Palette......Page 54
1.8.2 Controls Palette......Page 55
1.8.3 Functions Palette......Page 57
1.8.4 Searching the Palettes and Quick Drop......Page 58
1.9 Opening, Loading, and Saving VIs......Page 61
1.10.1 Context Help Window......Page 64
1.10.2 LabVIEW Help......Page 65
1.11 Building Blocks: Pulse Width Modulation......Page 66
1.12 Relaxed Reading: Controlling the World's Largest Particle Accelerator......Page 68
1.13 Summary......Page 70
Exercises......Page 72
Problems......Page 76
Design Problems......Page 79
2 Virtual Instruments......Page 83
2.1 What Are Virtual Instruments?......Page 84
2.2 Several Worked Examples......Page 86
2.3.1 Numeric Controls and Indicators......Page 93
2.3.2 Boolean Controls and Indicators......Page 95
2.4 The Block Diagram......Page 99
2.4.1 VIs and Express VIs......Page 100
2.4.2 Nodes......Page 101
2.4.3 Terminals......Page 102
2.4.4 Wiring......Page 105
2.5 Building Your First VI......Page 108
2.6 Data Flow Programming......Page 113
2.7 Building a VI Using Express VIs......Page 115
2.8 Building Blocks: Pulse Width Modulation......Page 122
2.9 Relaxed Reading: Autonomous Driving in the DARPA Urban Challenge......Page 124
2.10 Summary......Page 127
Exercises......Page 128
Problems......Page 133
Design Problems......Page 137
3 Editing and Debugging Virtual Instruments......Page 142
3.1.1 Creating Controls and Indicators on the Block Diagram......Page 143
3.1.2 Selecting Objects......Page 145
3.1.3 Moving Objects......Page 147
3.1.5 Resizing Objects......Page 148
3.1.6 Labeling Objects......Page 150
3.1.7 Changing Font, Style, and Size of Text......Page 151
3.1.8 Selecting and Deleting Wires......Page 153
3.1.9 Wire Stretching and Broken Wires......Page 154
3.1.10 Aligning, Distributing, and Resizing Objects......Page 159
3.1.11 Coloring Objects......Page 161
3.1.12 Cleaning Up the Block Diagram......Page 168
3.1.13 Routing Wires......Page 170
3.1.14 Reusing Snippets of Code......Page 171
3.2 Debugging Techniques......Page 172
3.2.1 Finding Errors......Page 173
3.2.2 Highlight Execution......Page 175
3.2.3 Single-Stepping Through a VI and Its SubVIs......Page 177
3.2.4 Breakpoints and Probes......Page 178
3.2.5 Navigation Window......Page 183
3.3 Property Nodes......Page 184
3.4 A Few Shortcuts......Page 186
3.5 Building Blocks: Pulse Width Modulation......Page 187
3.6 Relaxed Reading: Using Graphical System Design for Tumor Treatments......Page 189
3.7 Summary......Page 191
Exercises......Page 193
Problems......Page 195
Design Problems......Page 199
4 SubVIs......Page 203
4.1 What Is a SubVI?......Page 204
4.2 Review of the Basics......Page 205
4.3.1 Icons......Page 208
4.3.2 Connectors......Page 211
4.3.3 Selecting and Modifying Terminal Patterns......Page 213
4.3.4 Assigning Terminals to Controls and Indicators......Page 214
4.4 The Help Window......Page 215
4.5 Using a VI as a SubVI......Page 219
4.6 Creating a SubVI from a Selection......Page 222
4.7.1 Automatic Error Handling......Page 224
4.7.3 Error Clusters......Page 225
4.8 Saving Your SubVI......Page 226
4.9 The VI Hierarchy Window......Page 227
4.10 Building Blocks: Pulse Width Modulation......Page 229
4.11 Relaxed Reading: Embedded Graphical System Design Empowers Life-Saving Spider Robots......Page 232
4.12 Summary......Page 234
Exercises......Page 235
Problems......Page 238
Design Problems......Page 241
5 Structures......Page 244
5.1 The For Loop......Page 245
5.1.1 Numeric Conversion......Page 247
5.1.2 For Loops with Conditional Terminals......Page 251
5.2 The While Loop......Page 252
5.3.1 Shift Registers......Page 258
5.3.2 Using Shift Registers to Remember Data Values from Previous Loop Iterations......Page 260
5.3.3 Initializing Shift Registers......Page 262
5.3.4 Feedback Nodes......Page 264
5.4 Case Structures......Page 267
5.4.1 Adding and Deleting Cases......Page 270
5.4.2 Wiring Inputs and Outputs......Page 272
5.5 Flat Sequence Structures......Page 278
5.5.1 Evaluate and Control Timing in a Sequence Structure......Page 279
5.6 The Formula Node......Page 281
5.6.2 Formula Statements......Page 282
5.7 Diagram Disable Structures......Page 285
5.8.1 Creating Local Variables......Page 286
5.8.3 Initializing Local Variables......Page 288
5.9.1 Sequential Programming......Page 289
5.9.2 State Programming and State Machines......Page 291
5.9.3 Parallelism......Page 295
5.10.1 Failing to Wire a Tunnel in All Cases of a Case Structure......Page 296
5.10.3 Wiring Underneath Rather Than through a Structure......Page 297
5.11 Building Blocks: Pulse Width Modulation......Page 298
5.12 Relaxed Reading: Refining the Process of Steel Recycling......Page 302
5.13 Summary......Page 303
Exercises......Page 306
Problems......Page 310
Design Problems......Page 315
6 Arrays and Clusters......Page 319
6.1 Arrays......Page 320
6.1.1 Creating Array Controls and Indicators......Page 321
6.1.2 Multidimensional Arrays......Page 323
6.2 Creating Arrays with Loops......Page 324
6.2.1 Creating Two-Dimensional Arrays......Page 327
6.3.1 Array Size......Page 328
6.3.2 Initialize Array......Page 329
6.3.3 Build Array......Page 331
6.3.4 Array Subset......Page 332
6.3.5 Index Array......Page 333
6.4 Polymorphism......Page 341
6.5 Clusters......Page 344
6.6 Creating Cluster Controls and Indicators......Page 345
6.6.1 Cluster Order......Page 347
6.6.2 Using Clusters to Pass Data to and from SubVIs......Page 349
6.7.1 The Bundle Function......Page 350
6.7.3 Creating Cluster Constants on the Block Diagram......Page 354
6.7.4 Using Polymorphism with Clusters......Page 356
6.8.1 Creating Matrix Controls, Indicators, and Constants......Page 357
6.8.2 Matrix Functions......Page 359
6.9 VI Memory Usage......Page 361
6.10 Building Blocks: Pulse Width Modulation......Page 362
6.11 Relaxed Reading: User Friendly and Intelligent Acupuncture......Page 365
6.12 Summary......Page 367
Exercises......Page 369
Problems......Page 372
Design Problems......Page 375
7 Charts and Graphs......Page 379
7.1 Waveform Charts......Page 380
7.2 Waveform Graphs......Page 388
7.3 XY Graphs......Page 396
7.4.1 Axes Scaling......Page 399
7.4.2 The Plot Legend......Page 403
7.4.3 The Graph Palette and Scale Legend......Page 405
7.4.4 Special Chart Customization Features......Page 407
7.4.5 Special Graph Customization Features: Cursor Legend......Page 408
7.4.6 Using Graph Annotations......Page 411
7.4.8 Using Context Help......Page 412
7.5.1 2D Graphs......Page 413
7.5.2 3D Graphs......Page 417
7.6 Building Blocks: Pulse Width Modulation......Page 421
7.7 Relaxed Reading: Environmental Monitoring in the Costa Rican Rain Forest......Page 422
7.8 Summary......Page 425
Exercises......Page 427
Problems......Page 428
Design Problems......Page 430
8 Data Acquisition......Page 433
8.1 Components of a DAQ System......Page 434
8.2 Types of Signals......Page 435
8.2.1 Digital Signals......Page 437
8.2.2 Analog DC Signals......Page 438
8.2.3 Analog AC Signals......Page 439
8.2.4 Analog Frequency-Domain Signals......Page 440
8.2.5 One Signal—Five Measurement Perspectives......Page 442
8.3 Common Transducers and Signal Conditioning......Page 443
8.4.1 Signal Source Reference Configuration......Page 447
8.4.2 Measurement System......Page 448
8.5 Analog to Digital Conversion Considerations......Page 453
8.6 DAQ VI Organization......Page 458
8.7 Choosing Your Data Acquisition Device......Page 459
8.7.3 Simulated Data Acquisition......Page 460
8.7.4 Macintosh, Linux, Palm OS, Windows Mobile for Pocket PC, and Select Windows CE OS Devices......Page 461
8.8.1 Windows......Page 462
8.8.2 Channels and Tasks......Page 470
8.9 Using the DAQ Assistant......Page 472
8.9.1 DAQmx Task Name Constant......Page 476
8.10.1 Task Timing......Page 479
8.10.2 Task Triggering......Page 480
8.11 Analog Output......Page 484
8.11.1 Task Timing......Page 485
8.11.2 Task Triggering......Page 486
8.12 Digital Input and Output......Page 491
8.13 Building Blocks: Pulse Width Modulation......Page 497
8.13.1 Generating Pulse Width Modulated Signals with Hardware Counters......Page 498
8.13.2 Applications of Pulse Width Modulation......Page 499
8.14 Relaxed Reading: Structural Health Monitoring of the Olympic Venues......Page 500
8.15 Summary......Page 502
Exercises......Page 505
Problems......Page 506
Design Problems......Page 507
9 Strings and File I/O......Page 509
9.1 Strings......Page 510
9.1.1 Converting Numeric Values to Strings with Build Text Express VI......Page 517
9.2 File I/O......Page 518
9.2.1 Writing Data to a File......Page 522
9.2.2 Reading Data from a File......Page 525
9.2.3 Manipulating Spreadsheet Files......Page 526
9.2.4 File I/O Express VIs......Page 529
9.2.5 Obtaining the Path to the System Directories......Page 534
9.3 Building Blocks: Pulse Width Modulation......Page 535
9.4 Relaxed Reading: Optimizing Professional Cyclist Performance......Page 537
9.5 Summary......Page 539
Exercises......Page 540
Problems......Page 542
Design Problems......Page 543
10 MathScript RT Module......Page 547
10.1 What Is MathScript RT Module?......Page 548
10.2 Accessing the MathScript Interactive Window......Page 549
10.2.1 The Command History and Output Windows......Page 551
10.2.2 Viewing Data in a Variety of Formats......Page 552
10.3 MathScript Help......Page 555
10.4 Syntax......Page 557
10.4.1 Key MathScript Functions......Page 566
10.5 Defining Functions and Creating Scripts......Page 567
10.5.1 User-Defined Functions......Page 568
10.5.2 Scripts......Page 571
10.6.1 Saving and Loading Data Files......Page 574
10.6.2 Exporting Data......Page 577
10.7 MathScript Nodes......Page 578
10.7.1 Accessing the MathScript Node......Page 579
10.7.3 Input and Output Variables......Page 581
10.7.4 Script Highlighting......Page 585
10.7.5 Debugging Scripts......Page 587
10.7.6 Saving Scripts from within the MathScript Node......Page 592
10.8.1 Instrument Your Algorithms......Page 594
10.8.2 Graphical Signal Processing, Analysis, and Mathematics......Page 595
10.8.3 Integrating Measurement Hardware......Page 596
10.9 Building Blocks: Pulse Width Modulation......Page 597
10.10 Relaxed Reading: Acquiring and Analyzing the Bioacoustic Communication of Killer Whales......Page 599
10.11 Summary......Page 601
Exercises......Page 603
Problems......Page 604
Design Problems......Page 605
11 Analysis......Page 607
11.1.1 Review of Matrices......Page 608
11.1.2 Systems of Algebraic Equations......Page 612
11.1.3 Linear System VIs......Page 615
11.2.1 Curve Fits Based on Least Squares Methods......Page 618
11.2.2 Fitting a Curve to Data with Normal Distributions......Page 622
11.2.3 The Curve Fitting Express VI......Page 624
11.3 Differential Equations......Page 628
11.4 Finding Zeroes of Functions......Page 637
11.5 Integration and Differentiation......Page 640
11.6.1 Normalized Frequency......Page 642
11.6.2 Wave, Pattern, and Noise VIs......Page 646
11.6.3 The Simulate Signal Express VI......Page 649
11.7.1 The Fourier Transform......Page 651
11.7.2 Smoothing Windows......Page 655
11.7.3 The Spectral Measurements Express VI......Page 660
11.7.4 Filtering......Page 663
11.7.5 The Filter Express VI......Page 672
11.8 Building Blocks: Pulse Width Modulation......Page 675
11.9 Relaxed Reading: Controlling the World's Largest Telescope in Real Time......Page 677
11.10 Summary......Page 679
Exercises......Page 681
Design Problems......Page 682
A: Instrument Control......Page 684
A.1.1 What Is GPIB?......Page 685
A.1.2 GPIB Messages......Page 686
A.1.3 GPIB Devices and Configurations......Page 688
A.1.4 Serial Port Communication......Page 690
A.1.5 Other Bus Technologies......Page 692
A.2.2 Macintosh OS X......Page 693
A.3 Using the Instrument I/O Assistant......Page 696
A.4 Instrument Drivers......Page 703
A.4.1 Developing Your Own Instrument Driver......Page 710
A.5 Future of Instrument Drivers and Instrument Control......Page 711
A.6 Summary......Page 712
B: LabVIEW Developer Certification......Page 715
B.2 Logistics of the CLAD Examination......Page 716
B.3 Benefits of CLAD......Page 717
B.4 Sample CLAD Examination......Page 718
B.5 Detailed Sample CLAD Test Solutions......Page 729
B.7 Summary......Page 736
B......Page 738
C......Page 739
E......Page 740
F......Page 741
M......Page 742
O......Page 743
R......Page 744
S......Page 745
W......Page 746
Z......Page 747

Citation preview

Learning with LabVIEW 2009 TM

This page intentionally left blank

Learning with LabVIEW 2009 TM

Robert H. Bishop The University of Texas at Austin

Upper Saddle River Boston Columbus San Francisco New York Indianapolis London Toronto Sydney Singapore Tokyo Montreal Dubai Madrid Hong Kong Mexico City Munich Paris Amsterdam Cape Town

Vice President and Editorial Director, ECS: Marcia J. Horton Senior Editor: Tacy Quinn Editorial Assistant: Coleen McDonald Vice President, Production: Vince O’Brien Senior Managing Editor: Scott Disanno Production Editor: Jane Bonnell Senior Operations Supervisor: Alan Fischer Senior Marketing Manager: Tim Galligan Marketing Assistant: Mack Patterson Art Director, Cover: Jayne Conte Cover Design: National Instruments Art Editor: Greg Dulles Media Editor: Daniel Sandin Media Project Manager: Danielle Leone Composition: Integra

LabVIEW is a trademark of National Instruments. Company and product names mentioned herein are the trademarks or registered trademarks of their respective owners.

c 2010 by Pearson Education, Inc., Upper Saddle River, New Jersey 07458. All rights Copyright  reserved. Manufactured in the United States of America. This publication is protected by Copyright and permissions should be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise. To obtain permission(s) to use materials from this work, please submit a written request to Pearson Higher Education, Permissions Department, 1 Lake Street, Upper Saddle River, NJ 07458. The author and publisher of this book have used their best efforts in preparing this book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The author and publisher make no warranty of any kind, expressed or implied, with regard to these programs or the documentation contained in this book. The author and publisher shall not be liable in any event for incidental or consequential damages in connection with, or arising out of, the furnishing, performance, or use of these programs. Library of Congress Cataloging-in-Publication Data on File.

10 9 8 7 6 5 4 3 2 1 ISBN-13: 978-0-13-214131-4 ISBN-10: 0-13-214131-0

To my parents, W. Robert Bishop and Anna Maria DiPietro Bishop

This page intentionally left blank

CONTENTS

Preface xvii 1

LabVIEW Basics 1.1 1.2 1.3 1.4 1.5

1.6 1.7

1.8

1.9

System Configuration Requirements 2 Installing the LabVIEW Student Edition 2 The LabVIEW Environment 3 The Getting Started Screen 5 Panel and Diagram Windows 8 1.5.1 Front Panel Toolbar 10 1.5.2 Block Diagram Toolbar 12 Shortcut Menus 14 Pull-Down Menus 16 1.7.1 File Menu 16 1.7.2 Edit Menu 16 1.7.3 View Menu 17 1.7.4 Project Menu 19 1.7.5 Operate Menu 19 1.7.6 Tools Menu 20 1.7.7 Window Menu 22 1.7.8 Help Menu 22 Palettes 23 1.8.1 Tools Palette 23 1.8.2 Controls Palette 24 1.8.3 Functions Palette 26 1.8.4 Searching the Palettes and Quick Drop Opening, Loading, and Saving VIs 30

1

27

vii

viii

Contents

1.10

LabVIEW Help Options

33

1.10.1 Context Help Window 1.10.2 LabVIEW Help

Building Blocks: Pulse Width Modulation 35 Relaxed Reading: Controlling the World’s Largest Particle Accelerator 37

1.13

Summary

39

48

Virtual Instruments 2.1

52

What Are Virtual Instruments?

2.2

Several Worked Examples

2.3

The Front Panel

2.4

53

55

62

2.3.1

Numeric Controls and Indicators

62

2.3.2

Boolean Controls and Indicators

64

2.3.3

Configuring Controls and Indicators

The Block Diagram

68

68

2.4.1

VIs and Express VIs

2.4.2

Nodes

2.4.3

Terminals

2.4.4

Wiring 74

69

70 71

2.5

Building Your First VI

2.6

Data Flow Programming

2.7

Building a VI Using Express VIs 84

2.8 2.9

Building Blocks: Pulse Width Modulation 91 Relaxed Reading: Autonomous Driving in the DARPA Urban Challenge 93

2.10

Summary

77 82

96

Exercises 97 Problems 102 Design Problems

3

34

1.11 1.12

Exercises 41 Problems 45 Design Problems

2

33

106

Editing and Debugging Virtual Instruments 111 3.1

Editing Techniques 112 3.1.1 Creating Controls and Indicators on the Block Diagram 112 3.1.2

Selecting Objects

114

ix

Contents

3.2

3.3 3.4 3.5 3.6 3.7

3.1.3 Moving Objects 116 3.1.4 Deleting and Duplicating Objects 117 3.1.5 Resizing Objects 117 3.1.6 Labeling Objects 119 3.1.7 Changing Font, Style, and Size of Text 120 3.1.8 Selecting and Deleting Wires 122 3.1.9 Wire Stretching and Broken Wires 123 3.1.10 Aligning, Distributing, and Resizing Objects 128 3.1.11 Coloring Objects 130 3.1.12 Cleaning Up the Block Diagram 137 3.1.13 Routing Wires 139 3.1.14 Reusing Snippets of Code 140 Debugging Techniques 141 3.2.1 Finding Errors 142 3.2.2 Highlight Execution 144 3.2.3 Single-Stepping Through a VI and Its SubVIs 146 3.2.4 Breakpoints and Probes 147 3.2.5 Navigation Window 152 Property Nodes 153 A Few Shortcuts 155 Building Blocks: Pulse Width Modulation 156 Relaxed Reading: Using Graphical System Design for Tumor Treatments 158 Summary 160

Exercises 162 Problems 164 Design Problems

4

168

SubVIs 4.1 4.2 4.3

4.4 4.5 4.6

What Is a SubVI? 173 Review of the Basics 174 Editing the Icon and Connector 177 4.3.1 Icons 177 4.3.2 Connectors 180 4.3.3 Selecting and Modifying Terminal Patterns 182 4.3.4 Assigning Terminals to Controls and Indicators 183 The Help Window 184 Using a VI as a SubVI 188 Creating a SubVI from a Selection 191

172

x

Contents

4.7

Error Checking and Error Handling 4.7.1

Automatic Error Handling

4.7.2

Manual Error Handling

4.7.3

Error Clusters

193

194

194

4.8

Saving Your SubVI

4.9

The VI Hierarchy Window

4.10 4.11

Building Blocks: Pulse Width Modulation 198 Relaxed Reading: Embedded Graphical System Design Empowers Life-Saving Spider Robots 201

4.12

Summary

203

Exercises

204

Problems

207

Design Problems

5

193

195 196

210

Structures 5.1

The For Loop

213 214

5.1.1

Numeric Conversion

216

5.1.2

For Loops with Conditional Terminals

5.2

The While Loop

5.3

Shift Registers and Feedback Nodes 5.3.1 5.3.2

5.4

5.5

5.6

5.7 5.8

220

221 227

Shift Registers 227 Using Shift Registers to Remember Data Values from Previous Loop Iterations 229

5.3.3

Initializing Shift Registers

5.3.4

Feedback Nodes

Case Structures

231

233

236

5.4.1

Adding and Deleting Cases

5.4.2

Wiring Inputs and Outputs

239 241

Flat Sequence Structures 247 5.5.1

Evaluate and Control Timing in a Sequence Structure 248

5.5.2

Avoid the Overuse of Sequence Structures 250

The Formula Node

250

5.6.1

Formula Node Input and Output Variables

5.6.2

Formula Statements

Diagram Disable Structures Local Variables

251 254

255

5.8.1

Creating Local Variables

255

5.8.2

Use Local Variables with Care

257

251

xi

Contents

5.9

5.10

5.11 5.12 5.13

5.8.3 Initializing Local Variables 257 5.8.4 Memory and Execution-Speed Considerations 258 Common Programming Techniques 258 5.9.1 Sequential Programming 258 5.9.2 State Programming and State Machines 260 5.9.3 Parallelism 264 Some Common Problems in Wiring Structures 265 5.10.1 Failing to Wire a Tunnel in All Cases of a Case Structure 265 5.10.2 Overlapping Tunnels 266 5.10.3 Wiring Underneath Rather Than through a Structure 266 Building Blocks: Pulse Width Modulation 267 Relaxed Reading: Refining the Process of Steel Recycling 271 Summary 272

Exercises 275 Problems 279 Design Problems

6

284

Arrays and Clusters 6.1

6.2 6.3

6.4 6.5 6.6

6.7

Arrays 289 6.1.1 Creating Array Controls and Indicators 290 6.1.2 Multidimensional Arrays 292 Creating Arrays with Loops 293 6.2.1 Creating Two-Dimensional Arrays 296 Array Functions 297 6.3.1 Array Size 297 6.3.2 Initialize Array 298 6.3.3 Build Array 300 6.3.4 Array Subset 301 6.3.5 Index Array 302 Polymorphism 310 Clusters 313 Creating Cluster Controls and Indicators 314 6.6.1 Cluster Order 316 6.6.2 Using Clusters to Pass Data to and from SubVIs Cluster Functions 319 6.7.1 The Bundle Function 319 6.7.2 The Unbundle Function 323

288

318

xii

Contents

6.8

6.7.3

Creating Cluster Constants on the Block Diagram

6.7.4

Using Polymorphism with Clusters

Matrix Data Type and Matrix Functions

325 326

6.8.1

Creating Matrix Controls, Indicators, and Constants

6.8.2

Matrix Functions

VI Memory Usage

6.10 6.11

Building Blocks: Pulse Width Modulation 331 Relaxed Reading: User Friendly and Intelligent Acupuncture 334

6.12

Summary

336

Exercises

338

Problems

341

330

344

Charts and Graphs

348

7.1

Waveform Charts 349

7.2

Waveform Graphs

7.3

XY Graphs

7.4

Customizing Charts and Graphs

7.5

326

328

6.9

Design Problems

7

323

357

365 368

7.4.1

Axes Scaling

368

7.4.2

The Plot Legend

7.4.3

The Graph Palette and Scale Legend

7.4.4 7.4.5

Special Chart Customization Features 376 Special Graph Customization Features: Cursor Legend 377

7.4.6

Using Graph Annotations

7.4.7

Exporting Images of Graphs, Charts, and Tables

7.4.8

Using Context Help

372

380

2D Graphs

382

7.5.2

3D Graphs

386

381

381

Using Math Plots for 2D and 3D Graphs 7.5.1

374

382

7.6 7.7

Building Blocks: Pulse Width Modulation 390 Relaxed Reading: Environmental Monitoring in the Costa Rican Rain Forest 391

7.8

Summary

394

Exercises

396

Problems

397

Design Problems

399

xiii

Contents

8

Data Acquisition

402

8.1

Components of a DAQ System

8.2

Types of Signals

403

404

8.2.1

Digital Signals

406

8.2.2

Analog DC Signals

407

8.2.3

Analog AC Signals

408

8.2.4

Analog Frequency-Domain Signals

8.2.5

One Signal—Five Measurement Perspectives

409

8.3

Common Transducers and Signal Conditioning

8.4

Signal Grounding and Measurements

411

412

416

8.4.1

Signal Source Reference Configuration

8.4.2

Measurement System

416

417

8.5

Analog to Digital Conversion Considerations

8.6

DAQ VI Organization

8.7

Choosing Your Data Acquisition Device

428

8.7.1

M Series Data Acquisition Devices

429

8.7.2

Low Cost Data Acquisition for Students

8.7.3 8.7.4

Simulated Data Acquisition 429 Macintosh, Linux, Palm OS, Windows Mobile for Pocket PC, and Select Windows CE OS Devices 430

8.8

427

DAQ Hardware Configuration 8.8.1

Windows

8.8.2

Channels and Tasks

Using the DAQ Assistant

8.10

Analog Input

431

439 441

DAQmx Task Name Constant 448

8.10.2 Task Triggering Analog Output

445

448

8.10.1 Task Timing 8.11

429

431

8.9

8.9.1

422

449

453

8.11.1 Task Timing

454

8.11.2 Task Triggering

455

8.12

Digital Input and Output

8.13

Building Blocks: Pulse Width Modulation 466 8.13.1 Generating Pulse Width Modulated Signals with Hardware Counters 467

8.14

460

8.13.2 Applications of Pulse Width Modulation 468 Relaxed Reading: Structural Health Monitoring of the Olympic Venues 469

xiv

Contents

8.15

Summary

471

Exercises

474

Problems

475

Design Problems

9

476

Strings and File I/O 9.1

9.2

478

Strings 479 9.1.1 Converting Numeric Values to Strings with Build Text Express VI 486 File I/O 487 9.2.1

Writing Data to a File 491

9.2.2

Reading Data from a File 494

9.2.3

Manipulating Spreadsheet Files

9.2.4

File I/O Express VIs

9.2.5

Obtaining the Path to the System Directories 503

495

498

9.3 9.4

Building Blocks: Pulse Width Modulation 504 Relaxed Reading: Optimizing Professional Cyclist Performance 506

9.5

Summary

508

Exercises

509

Problems

511

Design Problems

512

10 MathScript RT Module

516

10.1

What Is MathScript RT Module?

517

10.2

Accessing the MathScript Interactive Window 10.2.1 The Command History and Output Windows 520 10.2.2 Viewing Data in a Variety of Formats

10.3

MathScript Help

10.4

Syntax

521

524

526

10.4.1 Key MathScript Functions 10.5

518

535

Defining Functions and Creating Scripts 10.5.1 User-Defined Functions

536

537

10.5.2 Scripts 540 10.6

Saving, Loading, and Exporting Data Files 10.6.1 Saving and Loading Data Files 10.6.2 Exporting Data 546

543

543

xv

Contents

10.7

MathScript Nodes 547 10.7.1 Accessing the MathScript Node 548 10.7.2 Entering Scripts into the MathScript Node 550 10.7.3 Input and Output Variables 550 10.7.4 Script Highlighting 554 10.7.5 Debugging Scripts 556 10.7.6 Saving Scripts from within the MathScript Node 561 10.8 Applications of MathScript RT Module 563 10.8.1 Instrument Your Algorithms 563 10.8.2 Graphical Signal Processing, Analysis, and Mathematics 564 10.8.3 Integrating Measurement Hardware 565 10.9 Building Blocks: Pulse Width Modulation 566 10.10 Relaxed Reading: Acquiring and Analyzing the Bioacoustic Communication of Killer Whales 568 10.11 Summary 570

Exercises 572 Problems 573 Design Problems

11 Analysis 11.1

11.2

11.3 11.4 11.5 11.6

11.7

574

576

Linear Algebra 577 11.1.1 Review of Matrices 577 11.1.2 Systems of Algebraic Equations 581 11.1.3 Linear System VIs 584 Statistics and Curve Fitting 587 11.2.1 Curve Fits Based on Least Squares Methods 587 11.2.2 Fitting a Curve to Data with Normal Distributions 591 11.2.3 The Curve Fitting Express VI 593 Differential Equations 597 Finding Zeroes of Functions 606 Integration and Differentiation 609 Signal Generation 611 11.6.1 Normalized Frequency 611 11.6.2 Wave, Pattern, and Noise VIs 615 11.6.3 The Simulate Signal Express VI 618 Signal Processing 620 11.7.1 The Fourier Transform 620 11.7.2 Smoothing Windows 624

xvi

Contents

11.7.3 The Spectral Measurements Express VI 11.7.4 Filtering 632 11.8 11.9

629

11.7.5 The Filter Express VI 641 Building Blocks: Pulse Width Modulation 644 Relaxed Reading: Controlling the World’s Largest Telescope in Real Time 646

11.10 Summary

648

Exercises 650 Problems 651 Design Problems

651

A Instrument Control A.1

A.2

A.3

653

Components of an Instrument Control System A.1.1 A.1.2

What Is GPIB? 654 GPIB Messages 655

A.1.3 A.1.4

GPIB Devices and Configurations Serial Port Communication 659

657

A.1.5 Other Bus Technologies 661 Detecting and Configuring Instruments A.2.1 Windows 662 A.2.2 Macintosh OS X 662 Using the Instrument I/O Assistant

654

662

665

A.4

Instrument Drivers 672 A.4.1 Developing Your Own Instrument Driver

A.5 A.6

Future of Instrument Drivers and Instrument Control Summary 681

679 680

B LabVIEW Developer Certification B.1

Overview of the NI LabVIEW Certification Structure 685

B.2 B.3 B.4

Logistics of the CLAD Examination Benefits of CLAD 686 Sample CLAD Examination 687

B.5 B.6

Detailed Sample CLAD Test Solutions Additional Study Resources 705

B.7

Summary

Index 707

705

685

698

684

PREFACE

Learning with LabVIEW TM is the textbook that accompanies the LabVIEW Student Edition from National Instruments, Inc. This textbook, as well as the LabVIEW software, has undergone a significant revision from the previous edition. Learning with LabVIEW teaches basic programming concepts in a graphical environment and relates them to real-world applications in academia and industry. Understanding and using the intuitive and powerful LabVIEW software is easier than ever before. As you read through the book and work through the examples, we hope you will agree that this book is more of a personal tour guide than a software manual. The LabVIEW graphical development environment was built specifically for applications in engineering and science, with built-in functionality designed to reduce development time for design and simulation in signal processing, control, communcations, electronics and more. The LabVIEW Student Edition delivers all the capabilities of the full version of LabVIEW, widely considered the industry standard for design, test, measurement, automation, and control applications. With LabVIEW, students can design graphical programming solutions to their homework problems and laboratory experiments—an ideal tool for science and engineering applications—that is also fun to use! The LabVIEW Student Edition affords students the opportunity for self-paced learning and independent project development. The goal of this book is to help students learn to use LabVIEW on their own. With that goal in mind, this book is very art-intensive with over 400 figures in all. That means that there are numerous screen captures in each section taken from a typical LabVIEW session. The figures contain additional labels and pointers added to the LabVIEW screen captures to help students understand what they are seeing on their computer screens as they follow along in the book. The most effective way to use Learning with LabVIEW is to have a concurrent LabVIEW session in progress on your computer and to follow along with the steps in the book. A directory of virtual instruments has been developed by the author exclusively for use by students using Learning with LabVIEW and is available on www.pearsonhighered.com/bishop. These virtual instruments

xvii

xviii

Preface

complement the material in the book. In most situations, the students are asked to develop the virtual instrument themselves following instructions given in the book, and then compare their solutions with the solutions provided by the author to obtain immediate feedback. In other cases, students are asked to run a specified virtual instrument as a way to demonstrate an important LabVIEW concept.

GAINING PRACTICAL EXPERIENCE AND SOLVING REAL-WORLD PROBLEMS With higher education emphasizing hands-on laboratory experience, many educational institutions have improved their laboratory facilities in order to increase student exposure to practical problems. College graduates are gaining vital experience in acquiring and analyzing data, constructing computer-based simulations of physical systems, and multipurpose computer programming. LabVIEW offers a powerful, efficient, and easy-to-use development environment, allowing educators to teach their students a wide range of topics with just one open, industry-standard tool. It can also transform the way engineers, scientists, and students around the world design, prototype, and deploy cutting-edge technology. Customers and students at more than 25,000 companies and schools are using LabVIEW and modular hardware from National Instruments to simplify technology development and increase productivity. From testing next-generation gaming systems to creating breakthrough medical devices, the resulting innovative technologies are impacting millions of people worldwide. The cover of this edition of Learning with LabVIEW shows thirteen interesting application areas that use LabVIEW in the solution process. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

Killer Whales Airliners Advanced Fighter Jets Wind Power RF Communications Mobile Instrumentation Medical Devices DARwIn Rion-Antirion Olympic Stadium Video Games Robotics Education Motorcycles

Gaining Practical Experience and Solving Real-World Problems

xix

1. Killer Whales LabVIEW was used to develop a reliable data acquisition system that can collect and analyze ultrasonic signals produced by killer whales to perform live audio monitoring and movement tracking. See page 568 for more details. 2. Airliners LabVIEW was used to develop an intelligent fire monitoring and suppression control system for FedEx Express freighter aircrafts. This program will prevent catastrophic fires within the aircraft and will keep pilots, packages, and planes safe from fires that may start in shipping containers. 3. Advanced Fighter Jets Engineers developed a real-time data acquisition and control system for jet and rocket engine hot-fire testing. The system needed to preserve the facility while testing article safety, data-recording reliability, accuracy, configuration flexibility and efficiency. Using LabVIEW allowed the implementation of a high-performance system that can be operated and maintained by a minimum set of technicians at costs two to three times lower than competitors’ systems. 4. Wind Power Aeroponics is a method for growing plants using air or mist without soil. Energy is not invested in extending and growing the plants’ roots. Instead, it is used to increase the quality of the cultivation, as size, flavors, and nutritive properties improve. An intelligent greenhouse prototype was built offering flexibility and ease of use that suit it to places such as restaurants or domestic settings in cities. This system is powered by a 400-W wind turbine and a single 60-W photovoltaic cell that, even under poor environmental conditions, feeds the system with 3.3 kWh per day. 5. RF Communications The Oscillator Development Instrument (ODIN), powered by LabVIEW, is a compact, fully integrated instrument that makes phase noise analysis simple and cost effective, vastly expands the range of applications, and improves the quality and throughput of components and signal-transmission systems. 6. Mobile Instrumentation The lack of developed health care facilities and electrical distribution to rural areas presents challenges in the Republic of Malawi in southeast Africa. The remote health clinic in Makata is designed as a basic workspace with counter surfaces, an examination and treatment bed, a sink, cupboards, and a refrigerator/freezer. The facility has been in operation for more than a year. Based on data obtained using LabVIEW, DAQ, and a laptop, a very clear concept of how it functions and uses energy under all types of weather conditions was analyzed to identify key areas of energy waste.

xx

Preface

7. Medical Devices A device that will profoundly benefit people with amyotrophic lateral sclerosis (ALS, commonly known as Lou Gehrig’s disease), cerebral palsy, spinal cord injury, and other neurological disorders was developed by Michael Callahan while studying entrepreneurial engineering at the University of Illinois at Urbana-Champaign. The device, dubbed “The Audeo,” acquires and translates neurological signals so subjects who cannot speak or move can communicate. 8. DARwIn Using LabVIEW, the Dynamic Anthropomorphic Robot with Intelligence (DARwIn) was programmed to perform high-level functions, such as competing in RoboCup, the international soccer tournament for autonomous robots. 9. Rion-Antirion The longest cable-stayed bridge in the world, the Rion-Antirion in Greece, is being monitored by LabVIEW. The structural monitoring system measures and defines the behavior of the bridge during normal operation, strong winds, and earthquakes. 10. Olympic Stadium LabVIEW was used to develop a state-of-the-art solution, employing contemporary computing, sensor, and communication technology, to monitor structural health characteristics of the 2008 Summer Olympic venues in Beijing, including stability and reliability, in real time. See page 469 for more details. 11. Video Games When developing the controllers for the Xbox 360, Microsoft had to create a new series of tests. With the use of LabVIEW graphical development environment more than 100 tests were created and implemented to ensure a high-quality user experience. 12. Robotics Education National Instruments and LEGO, sharing a vision of inspiring creativity R and innovation, have partnered to develop LEGO MINDSTORMS programmable robots that are smarter, stronger, and more intuitive than ever. Today’s efforts will help ensure a strong network of technically proficient talent for addressing tomorrow’s problems through scientific and technological innovation. 13. Motorcycles Engine control requires deterministic loop times on the order of milliseconds and precise fuel and spark timing on the order of microseconds. In addition, the target engine revs to 15,500 RPM. At this speed, the crankshaft rotates in less than 4 ms, and the system must precisely control fuel and spark events in the angle domain to less than 1 degree. Precision is key and

What’s New with the LabVIEW Student Edition?

xxi

there is no room for error, which is why LabVIEW was used to build this high-performance motorcycle engine. To learn more about these amazing engineering accomplishments, visit www.ni.com/labviewse and click on the LabVIEW Student Edition link.

THE LABVIEW STUDENT EDITION SOFTWARE The LabVIEW Student Edition software package is a powerful and flexible instrumentation, analysis, and control software platform for PCs running Microsoft Windows or Apple Macintosh OS X. The student edition is designed to give students early exposure to the many uses of graphical programming. LabVIEW not only helps reinforce basic scientific, mathematical, and engineering principles, but it encourages students to explore advanced topics as well. Students can run LabVIEW programs designed to teach a specific topic, or they can use their skills to develop their own applications. LabVIEW provides a real-world, hands-on experience that complements the entire learning process.

WHAT’S NEW WITH THE LABVIEW STUDENT EDITION? The demand for LabVIEW in colleges and universities has led to the development of LabVIEW Student Edition based on the industry version of LabVIEW. This is a new and significant software revision that delivers all of the graphical programming capabilities of the full edition. With the student edition, students can design graphical programming solutions for their classroom problems and laboratory experiments on their personal computers. The LabVIEW Student Edition features include the following: Express VIs that bring interactive, configuration-based application design for acquiring, analyzing, and presenting data. Interactive measurement assistants to make creating data acquisition and instrument control applications easier than ever. Full LabVIEW advanced analysis capability. Full compatibility with all National Instruments data acquisition and instrument control hardware. Support for all data types used in the LabVIEW Full Development System. New LabVIEW software features introduced in this new edition of Learning with LabVIEW include: Using VI Snippets to store, share, and reuse small portions of LabVIEW code. Quickly finding and placing LabVIEW palette objects with Quick Drop.

xxii

Preface

Simplified debugging by managing all LabVIEW probes in one window. A Block Diagram Cleanup Tool to automatically arrange portions of code. An enhanced set of editing tools for creating icons in the Icon Editor dialog box. Many new math plots for 2D and 3D graphs, including 2D compass plots, error plots, and feather plots, and 3D bar plots, comet plots, contour, stem, waterfall, and others. This latest edition of Learning with LabVIEW also features: Updated exercises and design problems that reinforce the main topics of the chapter. New relaxed readings that illustrate how students, engineers, and scientists are using LabVIEW to solve real-world problems. Information on how to become a certified LabVIEW user for career advancement and employment opportunities.

ORGANIZATION OF LEARNING WITH LABVIEW This textbook serves as a LabVIEW resource for students. The pace of instruction is intended for both undergraduate and graduate students. The book is comprised of 11 chapters and should be read sequentially when first learning LabVIEW. For more experienced students, the book can be used as a reference book by using the index to find the desired topics. The 11 chapters are as follows: CHAPTER 1: LabVIEW Basics—This chapter introduces the LabVIEW environment and helps orient students when they open a virtual instrument. Concepts such as windows, toolbars, menus, and palettes are discussed. CHAPTER 2: Virtual Instruments—The components of a virtual instrument are introduced in this chapter: front panel, block diagram, and icon/ connector pair. This chapter also introduces the concept of controls (inputs) and indicators (outputs) and how to wire objects together in the block diagram. Express VIs are introduced in the chapter. CHAPTER 3: Editing and Debugging Virtual Instruments—Resizing, coloring, and labeling objects are just some of the editing techniques introduced in this chapter. Students can find errors using execution highlighting, probes, single-stepping, and breakpoints, just to name a few of the available debugging tools. CHAPTER 4: SubVIs—This chapter emphasizes the importance of reusing code and illustrates how to create a VI icon/connector. It also shows parallels between LabVIEW and text-based programming languages.

Organization of Learning with LabVIEW

xxiii

CHAPTER 5: Structures—This chapter presents loops, case structures, and flat sequence structures that govern the execution flow in a VI. The Formula Node is introduced as a way to implement complex mathematical equations. CHAPTER 6: Arrays and Clusters—This chapter shows how data can be grouped, either with elements of the same type (arrays) or elements of a different type (clusters). This chapter also illustrates how to create and manipulate arrays and clusters. CHAPTER 7: Charts and Graphs—This chapter shows how to display and customize the appearance of single and multiple charts and graphs. CHAPTER 8: Data Acquisition—The basic characteristics of analog and digital signals are discussed in this chapter, as well as the factors students need to consider when acquiring and generating these signals. This chapter introduces students to the Measurement and Automation Explorer (MAX) and the DAQ Assistant. CHAPTER 9: Strings and File I/O—This chapter shows how to create and manipulate strings on the front panel and block diagram. This chapter also explains how to write data to and read data from files. CHAPTER 10: MathScript RT Module —This chapter introduces the interactive MathScript environment, which combines a mathematics-oriented text-based language with the intuitive graphical dataflow programming of LabVIEW. Both the interactive MathScript environment for command line computation and the MathScript Node for integrating textual scripts within the LabVIEW block diagram are discussed. CHAPTER 11: Analysis—LabVIEW can be used in a variety of ways to support analysis of signals and systems. Several important analysis topics are discussed in this chapter, including how to use LabVIEW for signal generation, signal processing, linear algebra, curve fitting, formula display on the front panel, differential equations, finding roots (zero finder), and integration and differentiation. APPENDIX A: Instrument Control—The components of an instrument control system using a GPIB or serial interface are presented in this appendix. Students are introduced to the notion of instrument drivers and of using the Measurement and Automation Explorer (MAX) to detect and install instrument drivers. The Instrument I/O Assistant is introduced. APPENDIX B: LabVIEW Developer Certification—Discusses the certification process to validate your expertise, beginning with the Certified LabVIEW Associate Developer (CLAD), continuing with the Certified LabVIEW Developer (CLD), and culminating with the Certified LabVIEW Architect (CLA). It includes a CLAD introductory-level certification practice

xxiv

Preface

test with complete answers, along with information on additional resources to help you prepare for the examination. The important pedagogical elements in each chapter include the following: 1. A brief table of contents and a short preview of what to expect in the chapter. 2. A list of chapter goals to help focus the chapter discussions. 3. Margin icons that focus attention on a helpful hint or on a cautionary note.

!

4. An end-of-chapter summary and list of key terms.

KEY TERMS

5. Sections entitled Building Blocks near the end of each chapter present the continuous development and modification of a virtual instrument for calculating and generating a pulse-width modulated signal. The student is expected to construct the VIs based on the instructions given in the sections. The same VI is used as the starting point and then improved in each subsequent chapter as a means for the student to practice with the newly introduced chapter concepts.

BUILDING BLOCK

6. Many worked examples are included in each chapter including several new examples introduced in this edition. In most cases, students construct the VIs discussed in the examples by following a series of instructions given in the text. In the early chapters, the instructions for building the VIs are quite specific, but in the later chapters, students are expected to construct the VIs without precise step-by-step instructions. Of course, in all chapters, working

Operating Systems and Additional Software

xxv

versions of the VIs are provided for all examples in the Learning directory included as part of the LabVIEW Student Edition. Here is a sample of the worked examples: Temperature system demonstration. Solving a set of linear differential equations. Building your first virtual instrument. Computing area, diameter, and radius of a circle. Computing and graphing the time value of money. Studying chaos using the logistic difference equation. Acquiring data. Writing ASCII data to a file. 7. A section entitled Relaxed Reading that describes how LabVIEW is being utilized to solve interesting real-world problems. The material is intended to give students a break from the technical aspects of learning LabVIEW and to stimulate thinking about how LabVIEW can be used in various other situations. 8. End-of-chapter exercises, problems, and design problems reinforce the main topics of the chapter and provide practice with LabVIEW.

ORIGINAL SOURCE MATERIALS Learning with LabVIEW was developed with the aid of important references provided by National Instruments. The main reference was the manual LabVIEW 2009 Help with edition date of June 2009 and Part Number: 371361F-01. This excellent resource can be found at the website www.ni.com/manuals. It provides information on LabVIEW programming concepts, step-by-step instructions for using LabVIEW, and reference information about LabVIEW VIs, functions, palettes, menus, and tools. You can access this same material in LabVIEW by selecting HelpSearch the LabVIEW Help (see Chapter 1 of this book for more details on accessing the LabVIEW help). By design, there is a strong correlation between some of the material contained in the LabVIEW 2009 Help manual and the material presented in this book. Our goal here has been to refine the information content and make it more accessible to students learning LabVIEW on their own.

OPERATING SYSTEMS AND ADDITIONAL SOFTWARE It is assumed that the reader has a working knowledge of either the Windows or the Mac OS X operating system. If your computer experience is limited, you

xxvi

Preface

may first want to spend some time familiarizing yourself with your computer in order to understand the operation of your Mac or PC. You should know how to access pull-down menus, open and save files, install software from a DVD, and use a mouse. You will find previous computer programming experience helpful—but not necessary. A set of virtual instruments has been developed by the author for this book. You will need to obtain the Learning directory from the companion website to this book at Prentice Hall: http://www.pearsonhighered.com/bishop For more information, you may also want to visit the NI Student Edition website at http://www.ni.com/labviewse All of the VI examples in this book were tested by the author on a Dell PC running Windows Vista. Obviously, it is not possible to verify each VI on all the available Windows and Macintosh platforms that are compatible with LabVIEW so if you encounter platform-specific difficulties, please let us know. If you would like information on upgrading to the LabVIEW Professional Version, please write to National Instruments att.: Academic Sales 11500 North Mopac Expressway Austin, TX 78759 or visit the National Instruments website: http://www.ni.com

LIMITED WARRANTY The software and the documentation are provided “as is,” without warranty of any kind, and no other warranties, either expressed or implied, are made with respect to the software. National Instruments does not warrant, guarantee, or make any representations regarding the use, or the results of the use, of the software or the documentation in terms of correctness, accuracy, reliability, or otherwise and does not warrant that the operation of the software will be uninterrupted or error-free. This software is not designed with components and testing for a level of reliability suitable for use in the diagnosis and treatment of humans or as critical components in any life-support systems whose failure to perform can reasonably be expected to cause significant injury to a human. National Instruments expressly disclaims any warranties not stated herein. Neither National Instruments nor Pearson Education shall be liable for any direct or indirect damages. The entire liability of National Instruments and its dealers, distributors, agents, or employees are set forth above. To the maximum extent permitted by

Keep In Touch!

xxvii

applicable law, in no event shall National Instruments or its suppliers be liable for any damages, including any special, direct, indirect, incidental, exemplary, or consequential damages, expenses, lost profits, lost savings, business interruption, lost business information, or any other damages arising out of the use, or inability to use, the software or the documentation even if National Instruments has been advised of the possibility of such damages.

ACKNOWLEDGMENTS Thanks to all the folks at National Instruments for their assistance and input during the development of Learning with LabVIEW. A very special thanks to Erik Luther and Stephanie Orci of NI for providing day-to-day support during the final months of the project. Thanks to Stephanie Orci and Chris Tsai for reviewing the manuscript and providing a student perspective to help guide my updates to the new edition. Thanks also go to the following reviewers: Austin B. Asgill, Southern Polytechnic State University; Jeff Doughty, Northeastern University; Buford Furman, San Jose State University; R. Glynn Holt, Boston University; Thomas Koon, Binghamton University; Milivoje Kostic, Northern Illinois University; Jay Porter, Texas A&M University; and Yi Wu, Penn State University. Finally, I wish to express my appreciation to Lynda Bishop for assisting me with the manuscript preparation, for providing valuable comments on the text, and for handling my personal day-to-day activities associated with the entire production.

KEEP IN TOUCH! The author and the staff at Pearson Prentice Hall and at National Instruments would like to establish an open line of communication with the users of the LabVIEW Student Edition. We encourage students to e-mail the author with comments and suggestions for this and future editions. Keep in touch! ROBERT H. B ISHOP [email protected] E RIK L UTHER National Instruments Academic Resources Manager [email protected]

This page intentionally left blank

Learning with LabVIEW 2009 TM

This page intentionally left blank

CHAPTER 1

LabVIEW Basics 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12

System Configuration Requirements 2 Installing the LabVIEW Student Edition 2 The LabVIEW Environment 3 The Getting Started Screen 5 Panel and Diagram Windows 8 Shortcut Menus 14 Pull-Down Menus 16 Palettes 23 Opening, Loading, and Saving VIs 30 LabVIEW Help Options 33 Building Blocks: Pulse Width Modulation 35 Relaxed Reading: Controlling The World’s Largest Particle Accelerator 37 1.13 Summary 39

Welcome to the LabVIEW Student Edition! LabVIEW is a powerful and complex programming environment. Once you have mastered the various concepts introduced in this book you will have the ability to develop applications in a graphical programming language and to develop virtual instruments for design, control, and test engineering. This introductory chapter provides a basic overview of LabVIEW and its components.

G OA L S

1. Installation of the LabVIEW Student Edition. 2. Familiarization with the basic components of LabVIEW. 3. Introduction to front panels and block diagrams, shortcut and pull-down menus, palettes, VI libraries, and online help.

1

2

CHAPTER 1

LabVIEW Basics

1.1 SYSTEM CONFIGURATION REQUIREMENTS The LabVIEW 2009 Student Edition textbook bundle includes the LabVIEW 2009 Student Edition software for Windows Vista/XP and Mac OS X on DVD. This textbook without software is available under the name Learning with LabVIEW 2009. Windows Vista/XP Processor:

Pentium III/Celeron 866 MHz or equivalent minimum Pentium 4/M or equivalent recommended

RAM:

256 MB minimum; 1 GB recommended

Screen Resolution:

1024 × 768 pixels

Operating System:

Windows Vista/XP

Disk Space:

1.6 GB

Macintosh OS X 10.3 or later Processor: Intel RAM:

256 MB minimum; 1 GB recommended

Screen Resolution:

1024 × 768 pixels

Operating System:

Mac OS X (10.4.0 or later)

Disk Space:

1.2 GB

1.2 INSTALLING THE LABVIEW STUDENT EDITION

!

Disable any automatic virus detection programs before you install. Some virus detection programs interfere with the installation program.

Windows 1. Log on as an administrator or as a user with administrator privileges. 2. Insert the LabVIEW installation DVD and follow the instructions that appear on the screen. 3. After installation, check your hard disk for viruses and enable any virus detection programs you disabled. 4. To use the LabVIEW Help, the Measurement & Automation Explorer (MAX) interactive help system, and the NI Example Finder, you must have Microsoft Internet Explorer 5.0 or later.

Section 1.3 The LabVIEW Environment

3

LabVIEW relies on a licensing activation process to obtain an activation code. The Activation Wizard is a part of the NI License Manager that takes you through the steps of enabling software to run on a machine. If you have questions regarding activation, visit the NI website at http://www.ni.com/labviewse/.

!

The LabVIEW Student Edition software kit includes only DVDs. If you cannot use DVDs, refer to the National Instruments website at ni.com/info and enter the info code lvcd and follow the links to download the LabVIEW Platform DVDs.

Macintosh 1. Insert the LabVIEW installation DVD. 2. Run the appropriate installation program. The following types of installations of LabVIEW are available: Easy Installation—Installs all LabVIEW files, including LabVIEW, NI-488.2 drivers, and NI-VISA drivers. This is the default installation for LabVIEW. Custom Installation—If you select this option, you select the files to install. To select a custom installation, select Customize from the Installation Type page. You must select the LabVIEW Component to install the core set of LabVIEW files necessary for running LabVIEW. 3. Follow the instructions that appear on the screen. 4. After installation, check your hard disk for viruses and enable any virus detection programs you disabled. 5. To view the LabVIEW Help it is recommended that you use Firefox 1.0.2 or later or Safari 1.3.2 or later. The LabVIEW installation folder might contain the following items: cintools—Tools for calling C object code from LabVIEW AppLibs—(LabVIEW Professional Development System). Contains stub for stand-alone applications. Refer to LabVIEW Help for a complete list of the folders installed in LabVIEW directory structure.

1.3

THE LABVIEW ENVIRONMENT LabVIEW is short for Laboratory Virtual Instrument Engineering Workbench. It is a powerful and flexible graphical development environment created by the folks at National Instruments—a company that creates hardware and software

4

CHAPTER 1

LabVIEW Basics

products that leverage computer technology to help engineers and scientists take measurements, control processes, and analyze and store data. National Instruments was founded over thirty years ago in Austin, Texas by James Truchard (known as Dr. T), Jeffrey Kodosky, and William Nowlin. At the time, all three men were working on sonar applications for the U.S. Navy at the Applied Research Laboratories at The University of Texas at Austin. Searching for a way to connect test equipment to DEC PDP-11 computers, Dr. T decided to develop an interface bus. He recruited Jeff and Bill to join him in his endeavor, and together they successfully developed LabVIEW and the notion of a “virtual instrument.” In the process they managed to infuse their new company— National Instruments—with an entrepreneurial spirit that still pervades the company today. Engineers and scientists in research, development, production, test, and service industries as diverse as automotive, semiconductor, aerospace, electronics, chemical, telecommunications, and pharmaceutical have used and continue to use LabVIEW to support their work. LabVIEW is a major player in the area of testing and measurements, industrial automation, and data analysis. For example, NASA is using LabVIEW to test the microshutter array on the James Webb Space Telescope. In the great tradition of the Hubble Space Telescope, James Webb will be the next large telescope to observe thousands of distant galaxies using the microshutter array to simultaneously target multiple faint objects. This book is intended to help you learn to use LabVIEW as a programming tool and to serve as an introduction to the power of graphical programming and the myriad applications to which it can be applied. LabVIEW programs are called Virtual Instruments, or VIs for short. LabVIEW is different from text-based programming languages (such as Fortran and C) in that LabVIEW uses a graphical programming language, known as the G programming language, to create programs relying on graphic symbols to describe programming actions. LabVIEW uses a terminology familiar to scientists and engineers, and the graphical icons used to construct programs in G are easily identified by visual inspection. You can learn LabVIEW even if you have little programming experience, but you will find knowledge of programming fundamentals helpful. If you have never programmed before (or maybe you have programming experience but have forgotten a few things) you may want to review the basic concepts of programming before diving into the G programming language. LabVIEW provides an extensive library of virtual instruments and functions to help you in your programming. In LabVIEW 8.0 the MathScript environment was introduced. The MathScript environment is discussed in detail in Chapter 10. MathScript provides a text-based command line environment complementing the LabVIEW graphical programming environment. Users have the capability to make quick calculations or computations at a LabVIEW command line prompt. MathScript also enables users to integrate their scripts with

Section 1.4 The Getting Started Screen

5

LabVIEW block diagrams, easily mixing graphical programming and powerful user interfaces with text-based scripts. LabVIEW also contains applicationspecific libraries for data acquisition (discussed in Chapter 8), file input/output (discussed in Chapter 9), and data analysis (discussed in Chapter 11). It includes conventional program debugging tools with which you can set breakpoints, single-step through the program, and animate the execution so you can observe the flow of data. Editing and debugging VIs is the topic of Chapter 3. LabVIEW has a set of VIs for data presentation on various types of charts and graphs. Chapter 7 discusses the process of presenting data on charts and graphs. The LabVIEW system consists of LabVIEW application executable files and many associated files and folders. LabVIEW uses files and directories to store information necessary to create your VIs. Some of the more important files and directories are: 1. The LabVIEW executable. Use this to launch LabVIEW. 2. The vi.lib directory. This directory contains libraries of VIs such as data acquisition, instrument control, and analysis VIs; it must be in the same directory as the LabVIEW executable. Do not change the name of the vi.lib directory, because LabVIEW looks for this directory when it launches. If you change the name, you cannot use many of the controls and library functions. 3. The examples directory. This directory contains many sample VIs that demonstrate the functionality of LabVIEW. 4. The user.lib directory. This directory is where you can save VIs you have created, and they will appear in the LabVIEW Functions palette. 5. The instr.lib directory. This directory is where your instrument driver libraries are placed if you want them to appear in the Functions palette. 6. The Learning directory. This file contains a library of VIs that you will use with the Learning with LabVIEW book. The files in the Learning directory must be downloaded from the site http://www.pearsonhighered.com/bishop—the Learning directory VIs are not found on the installation DVD! You can access the Pearson Higher Education website through the Internet using any standard Web browser.

1.4

THE GETTING STARTED SCREEN When you launch LabVIEW by double-clicking on its icon, the Getting Started screen appears as in Figure 1.1. The Getting Started screen contains a navigation

6

CHAPTER 1

LabVIEW Basics

Open a new VI

Find and open an existing VI

Access Internet resources

Access LabVIEW help Launch an online tutorial

Recent VIs will appear here

Search LabVIEW examples

FIGURE 1.1

The Getting Started screen.

dialog box that includes introductory material and common commands. The dialog box includes a menu that allows users to quickly create new VIs, select among the most recently opened LabVIEW files, find examples, and search the LabVIEW Help. On the left-hand side of the Getting Started screen are file functions, such as creating a new VI or for opening an existing VI. On the right-hand side are resource functions. Information and resources are reachable from the Getting Started screen to help you learn about LabVIEW using online manuals and tutorials, with convenient access to Internet links. The Latest from ni.com section provides news, technical content, example programs, and training information from the National Instruments website. These categories are dynamically populated with a list of articles relating to LabVIEW. On the left-hand side of the Getting Started screen you can: Click on New to open the New dialog box to create a blank VI or one based on a VI template. For quick access, it is also possible to select a new VI or a VI from a template directly on the Getting Started screen. Click on Open to open an existing VI by browsing to find the desired file, or select a VI from the list of recently used VIs. On the right-hand side of the screen you can: Access manuals and helpful information about LabVIEW, if desired, by making a selection in the Online Support or Help list. For example, selecting Getting Started with LabVIEW will open a pdf document published by National Instruments, Inc. of the same name. Click Latest from ni.com to connect to the Internet assets, such as the discussion groups, and to see what courses are available for LabVIEW training.

7

Section 1.4 The Getting Started Screen

Select Examples or Find Examples to begin a tour of the plethora of example VIs through the NI Example Finder dialog box. At the bottom of the right-hand side is the access point for LabVIEW examples.

! Searching the LabVIEW Examples

Throughout this book, use the left mouse button (if you have one) unless we specifically tell you to use the right one.

In this exercise you will search through the list of example VIs and demonstrations that are included with the LabVIEW Student Edition. Open the LabVIEW application and get to the Getting Started screen. The search begins at the LabVIEW Getting Started screen by clicking on Find Examples, as shown in Figure 1.2. The NI Example Finder screen displays the numerous examples available with LabVIEW, as illustrated in Figure 1.3. The examples can be browsed by Task or by Directory Structure. In Figure 1.3, the examples are sorted by Task. To reach the desired example—in this case, we are searching for the Function Waveform Generation—select Analyzing and Processing Signals, as shown in Figure 1.3. Selecting Signal and Noise Generation and Function Waveform Generation opens up the associated virtual instrument (VI) (more on VIs in Chapter 2). Just for fun, you can start the VI running and see what happens. Start the VI by clicking on the Run button, as shown in Figure 1.4. Stop the VI by clicking on the Stop button. Try it!

Select Find Examples

FIGURE 1.2

LabVIEW examples.

8

CHAPTER 1

LabVIEW Basics Browse examples by Task or Directory Structure

Select Analyzing and Processing Signals Select Function Waveform Generation

Select Signal and Noise Generation

FIGURE 1.3

The NI Example Finder. Run button Abort Execution button

FIGURE 1.4

The Function Waveform Generation front panel.

1.5 PANEL AND DIAGRAM WINDOWS An untitled front panel window appears when you select Blank VI from the Getting Started screen. The front panel window is the interface to your VI code and is one of the two LabVIEW windows that comprise a virtual instrument. The

9

Section 1.5 Panel and Diagram Windows

other window—the block diagram window—contains program code that exists in a graphical form (such as icons, wires, etc.). Front panels and block diagrams consist of graphical objects that are the G programming elements. Front panels contain various types of controls and indicators (that is, inputs and outputs, respectively). Block diagrams contain terminals corresponding to front panel controls and indicators, as well as constants, functions, subVIs, structures, and wires that carry data from one object to another. Structures are program control elements (such as For Loops and While Loops). Figure 1.5 shows a front panel and its associated block diagram. You can find the virtual instrument First VI.vi shown in Figure 1.5 in the Chapter 1 folder within the directory Learning. That VI can be located by choosing Open on the Getting Started screen and navigating to the Chapter1 folder in the Learning directory and then selecting First VI.vi. Once you have the VI front panel open, find the Run button on the panel toolbar and click on it. Your VI is FRONT PANEL

Panel palette

Icon pane

Free label

Graph legend

Owned label Knob control

Graph Numeric control Round LED

Horizontal slider

Push button

BLOCK DIAGRAM Numeric constant Knob control terminal

Graph terminal

Horizontal slider terminal

For Loop structure While Loop structure

Wire data path

SubVI

FIGURE 1.5

A front panel and the associated block diagram.

10

CHAPTER 1

LabVIEW Basics

now running. You can turn the knob and vary the different inputs and watch the output changes reflected in the graph. Give it a try! If you have difficulty getting things to work, then just press ahead with the material in the next sections and come back to this VI when you are ready. 1.5.1

Front Panel Toolbar A toolbar of command buttons and status indicators that you use for controlling VIs is located on both the front panel and block diagram windows. The front panel toolbar and the block diagram toolbar are different, although they do each contain some of the same buttons and indicators. The toolbar that appears at the top of the front panel window is shown in Figure 1.6. While the VI is executing, the Abort Execution button appears. Although clicking on the abort button terminates the execution of the VI, as a general rule you should avoid terminating the program execution this way and either let the VI execute to completion or incorporate a programmatic execution control (that is, an on-off switch or button) to terminate the VI from the front panel. The Broken Run button replaces the Run button when the VI cannot compile and run due to coding errors. If you encounter a problem running your VI, just click on the Broken Run button, and a window will automatically appear on the desktop that lists all the detected program errors. And then, if you doubleclick on one of the specific errors in the list, you will be taken automatically to the location in the block diagram (that is, to the place in the code) where the error exists. This is a great debugging feature! More discussion on the issue of debugging VIs can be found in Chapter 3. Clicking on the Run Continuously button leads to a continuous execution of the VI. Clicking on this button again disables the continuous execution—the VI stops when it completes normally. The behavior of the VI and the state of the If the VI has compilation errors If one of the VI callers is running at the top level

If the VI is a top level VI

Reorder Objects

Changes to

Run

Abort Pause Execution Run Continuously

FIGURE 1.6

The front panel toolbar.

Text Settings

Distribute Objects Align Resize Objects Objects

Context Help

11

Section 1.5 Panel and Diagram Windows

Text Settings Pull-down menu Click here to open pull-down menu List of available fonts

FIGURE 1.7

The Text Settings pull-down menu.

toolbar during continuous run is the same as during a single run started with the Run button. The Pause/Continue button pauses VI execution. To continue program execution after pausing, press the button again, and the VI resumes execution. The Text Settings pull-down menu, shown in Figure 1.7, sets font options— font type, size, style, and color. The Align Objects pull-down menu sets the preferred alignment of the various objects on either the front panel or the block diagram. After selecting the desired objects for alignment, you can set the preferred alignment for two or more objects. For example, you can align objects by their left edges or by their top edges. The various alignment options are illustrated in the Align Objects pull-down menu shown in Figure 1.8. Aligning objects is very useful in organizing the VI front panel (and the block diagram, for that matter). On the surface, it may appear that aligning the front panel objects, while making things “neat and pretty,” does not contribute to the goal of a functioning VI. As you gain experience with constructing VIs, you will find that they are easier to debug and verify if the interface (front panel) and the code (block diagram) are organized to allow for easy visual inspection.

Align Objects

Pull-down menu

Vertical Centers

Top Edges

Bottom Edges

Left Edges

Right Edges

Horizontal Centers

FIGURE 1.8

The Align Objects pull-down menu.

12

CHAPTER 1

LabVIEW Basics

Distribute Objects

Pull-down menu

Bottom Edges Vertical Centers Vertical Gap

Top Edges

Vertical Compress

Left Edges

Horizontal Compress

Horizontal Gap Horizontal Centers Right Edges

FIGURE 1.9

The Distribute Objects pull-down menu.

Resize Objects

Pull-down menu

Maximum Maximum Width Width and Height Maximum Height

Minimum Width and Height

Minimum Width Set Width and Height Minimum Height

FIGURE 1.10

The Resize Objects pull-down menu.

The Distribute Objects options pull-down menu, shown in Figure 1.9, sets the preferred distribution for two or more objects. For example, you can evenly space selected objects, or you can remove all the space between the objects. The Resize Objects objects pull-down menu, shown in Figure 1.10, is used to resize multiple front panel to the same size. For example, this feature allows you to select multiple objects and resize them all to the same height as the object within the selected group with the maximum height. Clicking on the Context Help button displays the Context Help window. When activated, this feature shows information about LabVIEW objects, such as functions, VIs, constants, structures, and palettes, as you move the cursor over the object. 1.5.2

Block Diagram Toolbar The block diagram toolbar contains many of the same buttons as the front panel toolbar. Five additional program debugging features are available on the block diagram toolbar and are enabled via the buttons, as shown in Figure 1.11.

Section 1.5 Panel and Diagram Windows

13

Clean Up Diagram Changes to Debugging features

Highlight Execution

Step Into

Retain Wire Values

Step Out Step Over

FIGURE 1.11

The block diagram toolbar.

Clicking on the Highlight Execution button enables execution highlighting. As the program executes, you will be able to see the data flow through the code on the block diagram. This is extremely helpful for debugging and verifying proper execution. In the execution highlighting mode, the button changes to a brightly lit light bulb. Clicking on the Retain Wire Values button allows you to create probes after the VI runs. In other words, after the VI executes successfully, you can place a probe on the block diagram and the most recent value of the data that flowed through the wire at that location will be displayed in the probe. You may find this capability useful when debugging complex block diagrams. LabVIEW debugging capabilities allow you to single-step through the VI node to node. A node is an execution element, such as a For Loop or subVI. You will learn more about the different types of nodes as you proceed through the book, but for the time being you can think of a node as a section of the computer code that you want to observe executing. Each node blinks to show it is ready to execute. The Step Into button allows you to step into a node. Once you have stepped into the node, you can single-step through the node. The Step Over button steps over a node. You are in effect executing the node without single-stepping through the node. The Step Out button allows you to step out of a node. By stepping out of a node, you can complete the single-stepping through the node and go to the next node. The Warning indicator only appears when there is a potential problem with your block diagram. The appearance of the warning does not prevent you from executing the VI. You can enable the Warning indicator on the Options. . . Debugging menu in the Tools pull-down menu. The Clean Up Diagram button is used to automatically clean up the block diagram by rerouting all existing wires and reordering objects. For example, you can configure LabVIEW to automatically move certain objects to desired

14

CHAPTER 1

LabVIEW Basics

locations on the block diagram, place a given number of pixels between block diagram objects, and compact the block diagram layout. Chapter 3 discusses further the editing of the block diagram.

1.6 SHORTCUT MENUS LabVIEW has two types of menus—pull-down menus and shortcut menus. We will focus on shortcut menus in this section and on pull-down menus in the next section. Our discussions here in Chapter 1 are top-level; we reserve the detailed discussions on each menu item for later chapters as they are used. To access a shortcut menu, position the cursor on the desired object on the front panel or block diagram and click the right mouse button on a PCcompatible or hold down the key and then click the mouse button on the Mac. In most cases, a shortcut menu will appear since most LabVIEW objects have shortcut menus with options and commands. You will also find that you can right-click on the empty front panel and block diagram space, giving you access to the Controls and Functions palettes and other important palettes. The options presented to you on shortcut menus depend on the selected object—right-clicking on a numeric control will open a different shortcut menu than right-clicking on a For Loop. When you construct a program, you will use shortcut menus extensively! Many shortcut and pull-down menus contain submenus, as shown in Figures 1.12 and 1.13. On a PC-compatible, right-click on the object to open a shortcut menu. On a Mac, press and simultaneously click on the object.

Click here to access the menu

Hierarchical menu

Ellipses denote a dialog box will appear upon selection FIGURE 1.12

An example of a pull-down menu expanding into a submenu.

15

Section 1.6 Shortcut Menus

Hierarchical menu

Right-click on the numeric control to access the menu

Command

Ellipses denote a dialog box will appear upon selection FIGURE 1.13

An example of a shortcut menu.

Menu items that expand into submenus are called hierarchical menus and are denoted by a right arrowhead on the menu. Hierarchical menus will present you with different types of options and commands. One typical option is the so-called mutually exclusive option. This means that if you select the option (by clicking on it), a check mark will appear next, indicating the option is selected; otherwise the option is not selected. Right-clicking on different areas of an object may lead to different shortcut menus. If you right-click and do not see the anticipated menu selection, then right-click somewhere else on the object. Another type of menu item opens dialog boxes containing options for you to use to modify and configure your program elements. Menu items leading to dialog boxes are denoted by ellipses (. . .). Menu items without right arrowheads or ellipses are generally commands that execute immediately upon selection. Create Constant is an example of a command that appears in many shortcut menus. In some instances, commands are replaced in the menu by their inverse commands when selected. For example, after you choose Change to Indicator, the menu selection is replaced by Change to Control.

16

CHAPTER 1

LabVIEW Basics

1.7 PULL-DOWN MENUS The menu bar at the top of the LabVIEW screen, shown in Figure 1.14, contains the important pull-down menus. In this section we will introduce the pull-down menus: File, Edit, View, Project, Operate, Tools, Window, and Help.

Display LabVIEW environment windows Communicate with instruments and data acquisition boards and Modify front panel and enable the Web server block diagram objects

Open, close, save, and print VIs

Get help and Basic Execute the VI information project operations Locate opened VI windows and open windows of subVIs

FIGURE 1.14

The menu bar.

! 1.7.1

Some menu items are unavailable while a VI is in Run mode.

File Menu The File pull-down menu, shown in Figure 1.15, contains commands associated with file manipulations. For example, you can create new VIs or open existing ones from the File menu. You use options in the File menu primarily to open, close, save, and print VIs. As you observe each pull-down menu, notice that selected commands and options have shortcuts listed beside them. These shortcuts are keystroke sequences that can be used to choose the desired option without pulling down the menu. For example, you can open a new VI by pressing on the keyboard, or you can access the File pull-down menu and select Open.

1.7.2

Edit Menu The Edit menu, shown in Figure 1.16, is used to modify front panel and block diagram objects of a VI. The Undo and Redo options are very useful when you are editing because they allow you to undo an action after it is performed, and once you undo an action you can redo it. By default, the maximum number of undo steps per VI is thirty—you can increase or decrease this number if desired.

17

Section 1.7 Pull-Down Menus

Create a new VI Open a dialog box to select a file type to create Open an existing VI Close the active window Close all windows Save the curent VI Save the current VI under a new name Save a copy of the VI under a new name Options for custom saving Reverts the VI to the last saved version Create a new project Navigate to and open a project file Save the current project Close the current project Edit printer setup Options for printing VI components Prints frontmost panel Access the VI Properties dialog box Open the most recently opened project files Quickly open the most recently opened files Quit LabVIEW FIGURE 1.15

Pull-down menus—File.

1.7.3

View Menu The View menu, shown in Figure 1.17, contains items that display LabVIEW environment information. For example, you can easily access the Getting Started screen and display the Tools, Controls, and Functions palettes. If you want to show the palettes on the desktop, you can use the View menu to select either palette (or both) (more on palettes in the next section).

!

Some menu items are available only on specific operating systems and with specific LabVIEW development systems. For example, the Navigation window is available only in the LabVIEW Full and Professional Development Systems. Selecting Error List, VI Hierarchy, and LabVIEW Class Hierarchy opens display windows that list the errors in the current VI and let the user view the subVIs and other nodes that make up the VIs in memory, view the hierarchy of LabVIEW classes in memory, and search the LabVIEW class hierarchy, respectively. Browse Relationships contains items for viewing aspects of the current VI and its hierarchy. These functions are helpful when developing and debugging complex VIs. Selecting the Probe Watch Window opens a dialog box to

18

CHAPTER 1

LabVIEW Basics

Undo an action immediately after it is performed Redo an action after an undo Remove the selected object and place it on the clipboard Copy the selected object and place it on the clipboard Place a copy of the active clipboard comments into the active window Delete the selected object Select all objects in the active window Set current values as defaults Set all controls and indicators to default values Modify the currently selected front panel control object Import a graphic file into the LabVIEW clipboard Set the order of front panel objects Delete all faulty wiring connections Reroute wires and rearrange objects to generate a cleaner layout Remove breakpoints from VI hierarchy Save snippets of code from the block diagram to reuse later Convert selected block diagram objects to subVIs Enable/disable alignment grid Align selected objects in active window Distribute active objects in active window Document changes to the current VI Create custom run-time menus for the current VI Search for VIs, other objects, or text Show the search result and access each result in the list FIGURE 1.16

Pull-down menus—Edit.

Display the Controls palette Display the Functions palette Display the Tools palette Display the Quick Drop dialog box Enable, disable, and clear breakpoints in the VI hierarchy Display the Probe Watch Window dialog box Display the errors in the current VI Display the Load and Save Warning List dialog box Display the VI Hierarchy window to view the VIs in memory View the hierarchy of LabVIEW classes in memory View aspects of the current VI and its hierarchy Display the Project Explorer window with the current VI selected Select available object libraries and view classes View and set properties of an ActiveX control or document Display the Getting Started window Display the Navigation window Show or hide the Project Explorer window toolbars FIGURE 1.17

Pull-down menus—View.

Section 1.7 Pull-Down Menus

19

Create a new project Display a standard file dialog box to open a project file Save the current project Close the current project and all associated files View options for items you can add to a project Show or hide the Dependencies and Build Specification nodes Display the Paths column in the Project Explorer window Display the Project File Information dialog box Display the Resolve Project Conflicts dialog box Display the Project Properties dialog box FIGURE 1.18

Pull-down menus—Project.

manage probes. Probes are used to check intermediate values on a wire as a VI runs and are very helpful if you have a complicated block diagram with a series of operations that might return incorrect data. Chapter 3 gives more information on the use of probes. Class Browser, ActiveX Property Browser, and Toolbars are helpful for advanced users of LabVIEW, and not discussed in detail in this book. 1.7.4

Project Menu The Project menu, shown in Figure 1.18, contains items used for basic LabVIEW project operations, such as opening, closing, and saving projects; building specifications; and editing deployments. Projects are used to group together LabVIEW (and non-LabVIEW) files and to deploy or download files to targets, such as real-time (RT) or FPGA targets. The use of projects is most likely to be of interest to advanced students and users of LabVIEW. This book does not present topics associated with projects in any detail. A target is any device that can run a VI.

1.7.5

Operate Menu The Operate menu, shown in Figure 1.19, can be used to run or stop your VI execution, change the default values of your VI, and switch between the run mode and edit mode.

20

CHAPTER 1

LabVIEW Basics

Execute the VI Stops execution of the VI Open a node and pause Execute a node and pause at the next node Finish executing the current node and pause Pause execution when VI is called Print the VI front panel Log front panel data to a file Display data logging options Toggle between run and edit modes Connect to a front panel running remotely Select the stand-alone application or shared library to debug FIGURE 1.19

Pull-down menus—Operate.

1.7.6

Tools Menu The Tools menu, shown in Figure 1.20, is used to communicate with instruments and data acquisition boards, compare VIs, build applications, enable the Web server, and access other options of LabVIEW. The appearance and behavior of LabVIEW applications can be customized in the ToolsOptions dialog box, which is organized to enhance usability. The Options dialog box is shown in Figure 1.21. Select New and Changed in the menu on the left-hand side of the box to discover the latest enhancements. For example, if you deselect the Use numbers in icons of new VIs (1 through 9), you will disable the automatic placement of numbers on the icons of the first nine VIs you create after you launch LabVIEW (more on this in Chapter 2). Some of the options you may want to modify include Colors, Fonts, and Debugging on the Environment page. On that page, for example, you can set the number of steps for the Maximum undo steps per VI option (the default number is 30). One key option for the Block Diagram is Use transparent name labels, which, if selected, allows you to create free labels without a border or background color (more on this in Chapter 3). An important link is to the main National Instruments website, where you can obtain general information about the company and its products. If you use LabVIEW to control external instruments, you will be interested in the Instrument Driver Network link which connects you to thousands of LabVIEWready instrument drivers. This can be found in the ToolsInstrumentation hierarchical menu. Refer to Appendix A for more information on instrument drivers.

Section 1.7 Pull-Down Menus

Access the Measurement & Automation Explorer to configure instruments and DAQ Access the Instrument Driver Network Access the MathScript interactive window Access the comparison functions (e.g., Show Differences) Access the merge functions such as Merge VIs and Merge LLBs Access the profiling functions (e.g., Performance and Memory) Access the security functions (e.g., Change Password) Display a User Login dialog box to set or change your username Build a stand-alone application from a LabVIEW project Convert a build script from a previous version of LabVIEW Access the source code control functions (e.g., Get Latest Version) Copy, rename, and delete files in VI libraries Access functions to manipulate .NET and ActiveX objects Access shared variable functions Edit, create, and monitor shared variables outside of the project enviroment Display a dialog box to search for VIs Prepare example VIs you create to appear in the NI Example Finder Monitor all client traffic on the server Access the Web Publishing Tool VI Access the Mass Compile, VI Metrics, and other features Customize the appearance and behavior of LabVIEW applications FIGURE 1.20

Pull-down menus—Tools.

Select New and Changed to see what’s new Set miscellaneous options

for the LabVIEW environment

FIGURE 1.21

The Options dialog box is accessed under ToolsOptions.

21

22

CHAPTER 1

LabVIEW Basics

Toggle between panel and diagram windows Display the Project Explorer for the project with the current VI Display front panel and block diagram side-by-side Display front panel and block diagram one above the other Resize the active window to fit the entire screen List all open front panel and block diagram windows

FIGURE 1.22

Pull-down menus—Windows.

1.7.7

Window Menu The Window menu, shown in Figure 1.22, is used for a variety of activities. You can toggle between the front panel and block diagram, and you can “tile” both windows so you can see them at the same time (one above the other or side-byside). All the open VIs are listed in the menu (at the bottom), and you can switch between the open VIs.

1.7.8

Help Menu The Help menu, shown in Figure 1.23, provides access to the extensive LabVIEW online help facilities. You can view information about front panel or block diagram objects, activate the online reference utilities, and view information about your LabVIEW version number and computer memory. The direct pathways to the internet are provided by Web Resources and Student Edition Web Resources, which connect you directly to the main source of information

Display the Context Help window to provide basic reference information Lock the current contents of the Context Help window Display the LabVIEW help Access the complete reference information for any current errors in your VI Access VI reference information from the electronic documentation Access the Search Examples section of the LabVIEW help electronic documentation Display the Instrumentation Driver Finder Access internet links to online National Instruments resources Access the MAX Configuration VI Reference documentation Displays the NI Activation Wizard to activate a LabVIEW license Access patent information about LabVIEW Show your LabVIEW version and memory information FIGURE 1.23

Pull-down menus—Help.

23

Section 1.8 Palettes

concerning the LabVIEW Student Edition available on the web. You should make a point to surf this website—this is where the latest and greatest information, news, and updates on both the software LabVIEW Student Edition and the book Learning with LabVIEW will be posted.

1.8

PALETTES Palettes are graphical panels that contain various tools and objects used to create and operate VIs. You can move the palettes anywhere on the desktop that you want—preferably off to one side so that they do not block objects on either the front panel or block diagram. It is sometimes said that the palettes float. The three main palettes are the Tools, Controls, and Functions palettes. 1.8.1

Tools Palette A tool is a special operating mode of the mouse cursor. You use tools to perform specific editing functions, similar to how you would use them in a standard paint program. You can create, modify, and debug VIs using the tools located in the floating Tools palette, shown in Figure 1.24. If the Tools palette is not visible, select Tools Palette from the View pull-down menu to display the palette. After you select a tool from this palette, the mouse cursor changes to the appropriate shape. When the Automatic Tool Selection button (located at the top center of the Tools palette, as shown in Figure 1.24) is enabled, LabVIEW automatically selects the corresponding tool from the Tools palette as you move the cursor over objects on either the front panel or the block diagram. If necessary, you can disable the automatic tool selection feature by clicking on the Automatic Tool Selection button to toggle the state. The green light on the button will turn off to indicate that the automatic tool selection is off. You also can manually

Object shortcut menu tool Operating tool Wiring tool Breakpoint tool Probe tool FIGURE 1.24

The Tools palette.

Automatic Tool Selection Positioning tool Labeling tool Scrolling tool Color Copy tool Coloring tool

24

CHAPTER 1

LabVIEW Basics

select a tool on the Tools palette to disable the automatic tool selection feature. This allows you to select a tool manually by clicking the tool you want on the Tools palette. One way to access the online help is to place any tool found in the Tools palette over the object of interest in the block diagram window. If online help exists for that object, it will appear in a separate Help window. This process requires that you first select Show Context Help from the Help pull-down menu. On a Windows platform, a shortcut to accessing the Tools palette is to press the and the right mouse button on the front panel or the block diagram. On a Macintosh platform, you can access the Tools palette by pressing and the mouse button on the front panel or block diagram. 1.8.2

Controls Palette The Controls palette, shown in Figure 1.25, consists of top-level icons representing subpalettes that contain a full range of available objects that you can use to create front panels. Controls simulate input devices and provide a pipeline to move data to the block diagram. Examples of controls include knobs, push buttons, and dials. The controls are located on subpalettes based on the types of controls and the desired appearance. The palette in Figure 1.25 shows the Express and User Controls. Clicking on the double arrows at the bottom of the palette displays all the hidden categories, including Modern, System, Classic, Express, and others. You can also click on View at the top of the palette as shown in Figure 1.26 and select Change Visible Categories to open a dialog box to select the desired categories. In Figure 1.26, Modern is selected so that the Controls palette will display the Express, Modern, and User Controls as the default. The Modern and Classic views present the same controls but with different appearances, with the Classic appearance dating back several versions of LabVIEW. The Express palette presents the more commonly utilized controls in a more compact viewing pane. Front panel objects generally have a high-color appearance, thus, most likely the Modern view will provide the most appealing appearance. It is suggested to use the controls on the Classic palette to create VIs for 256-color and 16-color monitor settings. The System controls are designed for use in dialog boxes and will not be utilized a great deal by new users of LabVIEW. The palette view can be altered in the ToolsAdvancedEdit Palette Set dialog box. You can access the subpalettes by clicking on the desired top-level icon. As illustrated in Figure 1.25, the subpalette Numeric, when opened, will reveal

25

Section 1.8 Palettes

Navigation buttons

Express palette view Select Numeric controls Click here to display hidden categories

Numeric controls User controls Text indicators

Buttons and Switches Text controls LEDs Numeric indicators Graph indicators

FIGURE 1.25

The Controls palette.

the various numeric controls (by control we mean “input”) and indicators (by indicator we mean “output”) that you will utilize on your front panel as a way to move data into and out of the program code (on the block diagram). The topic of numeric controls and indicators is covered in Chapter 2. Each item on the Controls palette is discussed in more detail in the chapter in which it is first utilized. If the Controls palette is not visible, you can open the palette by selecting Controls Palette from the View pull-down menu. You can also access the Controls palette by right-clicking on an open area in the front panel window.

!

The Controls palette is available only when the front panel window is active.

26

CHAPTER 1

LabVIEW Basics

FIGURE 1.26

Changing the visible categories on the Controls palette.

1.8.3

Functions Palette The Functions palette, shown in Figure 1.27, works in the same general way as the Controls palette. It consists of top-level icons representing subpalettes, which contain a full range of available objects that you can use in creating the block diagram. The Functions palette contains functions (the vital elements of VIs), as well as many VIs that ship with LabVIEW. The Express palette presents key express VIs, such as signal simulation. You access the subpalettes by clicking on the desired top-level icon. Many of the program elements are accessed through the Functions palette. For example, the subpalette Execution Control (see Figure 1.27) contains Case Structures, While Loops, and Time Delays—all of which are common elements of VIs. As with the Controls palette, clicking on the double arrows at the bottom of the palette displays all the hidden categories, including Programming, Mathematics, Measurement I/O, and Instrument I/O. You can also click on View at the top of the palette and select Change Visible Categories to open a dialog box to select the desired categories.

27

Section 1.8 Palettes Navigation buttons

Express palette view Select Execution Control

Click here to display hidden categories Case Structure While Loop Time Delay

Input Signal Manipulation

VIs to Perform signal generation, filtering, windowing, and analysis Signal Analysis

Output Arithmetic & Computation Execution Control

Select a VI

FIGURE 1.27

The Functions palette.

If the Functions palette is not visible, you can open the palette by selecting Functions Palette from the View pull-down menu. You can also access the Functions palette by right-clicking on an open area in the block diagram window.

!

1.8.4

The Functions palette is available only when the block diagram window is active.

Searching the Palettes and Quick Drop If you are not sure on which palette a desired object is found, you can click the Search button on the palette toolbar (see Figures 1.25 and 1.27) to perform

28

CHAPTER 1

LabVIEW Basics

text-based searches for any VI, control, or function. Clicking the Search button on the Controls or Functions palette toolbar will display the Search Palettes dialog box, as shown in Figure 1.28. Clicking the Search button on the Controls palette will display the Controls tab by default. Similarly, clicking the Search button on the Functions palette displays the Functions tab. You can toggle between tabs as desired by selecting the desired tab with the cursor.

Select Search to begin the process

Type “random” to initiate search

Double-click the desired function to see the containing subpalette

Two instances of Random Number (0-1)

Random Number (0-1) function contained on the Express>>Arithmetic & Comparison>>Express Numeric subpalette

FIGURE 1.28

Searching the Controls and Functions palettes.

Section 1.8 Palettes

29

When the Search Palette dialog box appears, you can type in the text box the name of the object you want to search. The search will start as you begin to type, and any matches will be displayed. In Figure 1.28, we are searching for a function to generate a random number. We type “random” in the text box, and the function Random Number (0-1) appears. If two or more search results have the same name and are located on different subpalettes, the name of the palette that contains the object is shown in brackets to the right of the object name. For example, in Figure 1.28, the function Random Number (0-1) is found on two palettes. Once the search results are available, you can click on the desired object and drag it to the front panel window or block diagram window (more on front panels and block diagrams in Chapter 2). You can also click on the object in the list to select it, and if you have Context Help (see Section 1.10), selected information about the object appears in the Context Help Window. Finally, double-clicking the desired object in the list will highlight its location on the palette where it exists. In Figure 1.28 we see that the Random Number (0-1) function can be found on the ExpressArithmetic & ComparisonExpress Numeric palette. To exit the Search Palette dialog box and return to the palette, click the Return button. The next time you click the Search button, the text box contains the last string you entered in the text box, which is useful if you double-click a search result and you want to return to the search results. Another way to search for specific functions or controls is to use the Quick Drop dialog box to specify a palette object by name, as shown in Figure 1.29. Once the desired object is located, you can place it on the block diagram or front panel by double-clicking on the object. You can access the Quick Drop dialog box under the View pull-down menu (see Figure 1.17) or you can use the shortcut . If you access the Quick Drop dialog box from the front panel window, you will be able to search for objects for the front panel (such as the Waveform Chart). Similarly, if you access the Quick Drop dialog box from the block diagram window, you will be able to search for objects for the block diagram (such as the Random Number (0-1) function). A helpful feature of the Quick Drop dialog box is the Shortcuts button at the bottom (see Figure 1.29), which lets you create your own shortcuts. On the Quick Drop dialog box click Shortcuts to access the Quick Drop Shortcuts dialog box. Type the shortcut name of your choice into the text box, select the front panel or block diagram object to which you want to assign the shortcut, and select Add to add the object to the table. For example, in Figure 1.29 the shortcut “rndm” is configured for the function Random Number (0-1). Each time you access the Quick Drop dialog box afterward, you can type in “rndm” into the text box to quickly access the Random Number (0-1) function.

30

CHAPTER 1

LabVIEW Basics

Select Shortcuts to begin the process Click Add to place shortcut in the table

Type “rndm” as the shortcut name for Random Number (0-1)

Typing “rndm” in the text box will locate the Random Number (0-1) function

Click here when done Double-click here to move the object to the block diagram (or front panel depending on the object type)

FIGURE 1.29

Configuring shortcuts for the Quick Drop dialog box (shortcut to access Quick Drop: in Windows and in Mac OS).

1.9 OPENING, LOADING, AND SAVING VIS When you click the New link on the LabVIEW Getting Started screen (see Figure 1.1), the New dialog box appears, as shown in Figure 1.30. Selecting the Blank VI from the Create New list opens a blank VI front panel and block diagram.

31

Section 1.9 Opening, Loading, and Saving VIs

Choose Blank VI to start from scratch

VI template preview

Template descriptions

Select VI template

Click here when done

FIGURE 1.30

New dialog box.

Remember that from the VI pull-down menu, you can select FileNew to display the New dialog box (refer to Section 1.7.1). You can then open a blank by selecting Blank VI. The New dialog box can be employed to help you create LabVIEW applications by utilizing VI templates. If you prefer not to start with a blank VI to build your VI from scratch, you can start with a VI template. This may simplify your programming task. When you select a template in the Create New list, previews of the VI and a description of the template appear in the Description section. Figure 1.30 shows the Generate and Display VI template. Making a selection from the VI from Template opens a front panel and block diagram with components you need to build different types of VIs. For example, the DAQ VI template opens a front panel and a block diagram with the components you need to measure or generate signals using the DAQ Assistant Express VI and NI-DAQmx. The Instrument I/O VI template opens a front panel and block diagram with the components you need to communicate with an external instrument attached to the computer through a port, such as a serial

32

CHAPTER 1

LabVIEW Basics

The Learning folder

Folders containing various VIs Type in desired VI file name Click here after selsction is made

FIGURE 1.31

Locating the desired VI.

or GPIB-enabled device. The Browse for Template button displays the Browse dialog box so you can navigate to a VI or VI template. You load a VI into memory by choosing the Open option from the File menu. When you choose that option, a dialog box similar to the one in Figure 1.31 appears. VI directories and VI libraries appear in the dialog box next to a representative symbol. VI libraries contain multiple VIs in a compressed format. You can open a VI library or directory by clicking on its icon and then on Open, or by double-clicking on the icon. The dialog box opens VI libraries as if they were directories. Once the directory or library is opened, you can locate your VI and load it into memory by clicking on it and then on OK, or by doubleclicking on the VI icon. If LabVIEW cannot immediately locate a subVI (think of this as a subroutine) called by the VI, it begins searching through all directories specified by the VI Search Path (ToolsOptionsPaths). A status dialog box will appear (sometimes the status box disappears so fast that you cannot see it was even there!) as the VI loads. The Searching field in the status box lists directories or VIs as LabVIEW searches through them. The Loading field lists the subVIs of your VI as they are loaded into memory. If a subVI cannot be found, you can have LabVIEW ignore the subVI by clicking on Ignore SubVI in the status box, or you can click on Browse to search for the missing subVI. You can save your VI to a regular directory or VI library by selecting Save, Save As, or Save All from the File menu. You also can transfer VIs from one platform to another (for example, from LabVIEW for Macintosh to LabVIEW for Windows). LabVIEW automatically translates and recompiles the VIs on

33

Section 1.10 LabVIEW Help Options

the new platform. Because VIs are files, you can use any file transfer method or utility to move your VIs between platforms.

1.10

LABVIEW HELP OPTIONS The two common help options that you will use as you learn about LabVIEW programming are the Context Help and the LabVIEW Help. Both help options can be accessed in the Help pull-down menu. 1.10.1

Context Help Window To display the help window, choose Show Context Help from the Help pulldown menu. If you have already placed objects on the front panel or block diagram, you can find out more about those objects by placing the cursor on the front panel or block diagram. This process causes the Context Help Window to appear showing the icon associated with the selected object and displaying the wires attached to each terminal. As you will discover, some icon terminals must be wired and others are optional. To help you locate terminals that require wiring, in the help window required terminals are labeled in bold, recommended connections in plain text, and optional connections are gray. The example in Figure 1.32 displays a help window in the so-called Simple Context Help mode.

Click here to access online reference detailed descriptions

More help Lock context help Detailed context help FIGURE 1.32

A simple Context Help window.

34

CHAPTER 1

LabVIEW Basics

Detailed context help displays all terminals

More help Lock context help Simple context help FIGURE 1.33

A detailed Context Help window.

On the lower left-hand side of the help window is a button to switch between the simple and detailed context help modes. The simple context emphasizes the important terminal connections—de-emphasized terminals are shown by wire stubs. The detailed help displays all terminals, as illustrated in Figure 1.33. On the lower left-hand side of the help window is a lock icon that locks the current contents of the help window, so that moving the tool over another function or icon does not change the display. To unlock the window, click again on the lock icon at the bottom of the help window. The More Help icon is the question mark located in the lower left-hand portion of the context help window. This provides a link to the description of the object in the online reference documentation, which features detailed descriptions of most block diagram objects. 1.10.2

LabVIEW Help The LabVIEW online reference contains detailed descriptions of most block diagram objects. This information is accessible either by clicking on the More

Section 1.11 Building Blocks: Pulse Width Modulation

35

Help icon in the Context Help window, choosing Contents and Index from the Help menu, or clicking on the sentence Click here for more help in the Context Help window.

BUILDING BLOCK

1.11

BUILDING BLOCKS: PULSE WIDTH MODULATION At the end of each chapter in this book, you will find a Building Blocks section. The purpose of this section is to give you the opportunity to apply the main principles and techniques learned in the chapter. You will apply the knowledge gained in the chapter to improve a VI of your design that has continuously evolved from chapter to chapter. This notion of a continuous design project employs the interesting application of pulse width modulation. Pulse width modulation (PWM) is a method used to digitally encode an analog signal level through modulation of the duty cycle. PWM is used in a variety of situations, from controlling the intensity of a light bulb with a dimmer switch to transmitting data across a fiber optic line. Through the use of this technique, analog circuits can be controlled digitally, thus reducing system costs and power consumption. Figure 1.34(a) depicts a signal with a 50% duty cycle. The duty cycle of a signal is defined to be the ratio of pulse width to total cycle time. As illustrated in Fig. 1.34(a), the output is “on” for 50% of each cycle. The duty cycle is increased to 80% in Figure 1.34(b). The length of the cycle remains the same, but the longer pulse length, or “on” time results in an increased duty cycle. The signal in Figure 1.34(c) is always “on,” so the duty cycle is 100%. In a dimmer switch, the length of the “on” time determines how intense the light coming from the light bulb will be. A 50% duty cycle on a dimmer switch causes the light to be only at half brightness, while 100% causes the light to be at maximum. In this first building block, you will open and run a VI that embodies the characteristics of a VI that you will develop in the subsequent chapters. The VI you should open is called PWM with Square Wave VI.vi and is included in the Building Blocks folder of the Learning directory. The VI is shown in Fig. 1.35. Run the VI and observe the change resulting from varying the period and the duty cycle. Keep the period constant and adjust the duty cycle. Observe that the pulse length, or amount of time that the signal is asserted, changes, but the signal still toggles at the same rate. Now keep the duty cycle constant and adjust the period. You should see that the ratio of on time to off time remains the same, but the overall signal frequency changes. Open the Context Help window and hold your cursor over the VI icon, located in the upper right hand corner on the front panel, to see a description of the VI and a diagram showing all of its inputs and outputs.

36

CHAPTER 1

LabVIEW Basics

Signal on

(a) 50% Duty Cycle

1.00 0.75 0.50 0.25 0.00 0.0

1.0

Time Signal off

Signal on

(b) 80% Duty Cycle

1.00 0.75 0.50 0.25 0.00 0.0

1.0

Time Signal off

Signal on

(c) 100% Duty Cycle

1.00 0.75 0.50 0.25 0.00 0.0

Time

FIGURE 1.34

Signal duty cycle: (a) 50%, (b) 80%, and (c) 100%.

1.0

37

Section 1.12 Relaxed Reading

Click here for Context Help

Click here to run Click here to stop

FIGURE 1.35

The PWM with Square Wave front panel and block diagram.

1.12

RELAXED READING: CONTROLLING THE WORLD’S LARGEST PARTICLE ACCELERATOR In this reading we consider the problem of highly reliable and accurate real-time control of the world’s most powerful particle accelerator at CERN in Switzerland. Particle accelerators crash beams of ions or protons either into one another or into other targets, releasing enough energy to recreate the high-energy conditions that existed during the formation of the universe. Founded in 1954 and located on the border between France and Switzerland, the European Organization for Nuclear Research, more commonly known as CERN, is the world’s largest particle physics laboratory. CERN serves as a research organization where scientists study the building blocks of matter and the forces that hold them together.

38

CHAPTER 1

(a)

LabVIEW Basics

(b)

FIGURE 1.36

(a) Detectors at the Large Hadron Collider (27 km in circumference and buried up to 150 m underground) will collect the data from collisions between particle beams traveling at nearly the speed of light. (b) Superconducting magnets are used to control the trajectory of the beams. (Courtesy of National Instruments.)

CERN relies on machines called particle accelerators to crash beams of ions or protons either into one another or into other targets. These collisions release enough energy to recreate the high-energy conditions that existed during the formation of the universe. The data resulting from the particle collisions in the Large Hadron Collider (LHC) and collected from detectors like those shown in Figure 1.36(a) is intended to help answer fundamental questions of physics such as how our universe came to be, why particles have mass, and how dark matter originated. The LHC shown is capable of producing collisions between particle beams traveling at nearly the speed of light. To produce these collisions, two beams of protons or other positively charged heavy ions are propelled around the circular tunnel in opposite directions. Superconducting magnets [Figure 1.36(b)] operate in a superfluid helium bath at just 1.9 K (−271 ◦ C or −456 ◦ F) to control the trajectory of LHC beams. The total energy in each beam at full power is 350 MJ, approximately the energy in a 400-ton train traveling at 150 km/h. This is enough energy to melt 500 kg of copper. Reliability is critical, since a beam that veers off course can cause catastrophic damage to the collider. To prevent particles from straying, more than 100 collimators have been installed. A collimator uses blocks of graphite or other heavy materials to absorb energetic particles out of the nominal beam

Section 1.13 Summary

39

core. Each collimator is controlled with NI reconfigurable Input/Output (I/O) modules mounted in separate NI PXI chassis for redundancy for a total of 120 PXI systems. PXI is a rugged PC-based platform integrating mechanical, electrical, and software features to create a complete system for test and measurement, data acquisition, and manufacturing applications. In the standard configuration, one PXI chassis controls up to 15 stepper motors mounted on three different collimators through a 20-minute motion profile to accurately and synchronously align the graphite blocks. The second chassis checks the real-time positioning of the same collimators. To meet strict timing, accuracy, and reliability requirements, a motion control and feedback system based on reconfigurable I/O and LabVIEW FPGA was selected. In a given collimator, both PXI chassis run LabVIEW Real-Time on the controller for reliability and LabVIEW FPGA on the reconfigurable I/O devices in the peripheral slots to perform the collimator control. The SoftMotion Development Module and reconfigurable modules from National Instruments are used to quickly create a custom motion controller for approximately 600 stepper motors with millisecond synchronization over the 27 km of the LHC. The LHC began operation in 2008, when a beam of accelerated protons entered the LHC’s 17-mile underground tunnel and successfully completed a full lap in less than an hour, passing through each of the particle detectors spaced along the tunnel. For further information, please visit the CERN website and the NI website at http://public.web.cern.ch/public/ and http://sine.ni.com/ cs/app/doc/p/id/cs-10795, respectively.

1.13

SUMMARY LabVIEW is a powerful and flexible development tool designed specifically for the needs of scientists and engineers. It uses the graphical programming language to create programs called virtual instruments (VIs) in a flowchart-like form called a block diagram. The user interacts with the program through the front panel. LabVIEW has many built-in functions to facilitate the programming process. The next chapters will teach you how to make the most of LabVIEW’s many features.

KEY TERMS

Block diagram: Pictorial representation of a program or algorithm. The block diagram, which consists of executable icons called nodes and wires that carry data between the nodes, is the source code for the VI.

40

CHAPTER 1

LabVIEW Basics

Context Help window: Special window that displays the names and locations of the terminals for a function or subVI, the description of controls and indicators, the values of universal constants, and descriptions and data types of control attributes. The window also accesses the LabVIEW Help. Controls palette: Palette containing front panel controls and indicators. Front panel: The interactive interface of a VI. Modeled from the front panel of physical instruments, it is composed of switches, slides, meters, graphs, charts, gauges, LEDs, and other controls and indicators. Functions palette: Palette containing block diagram structures, constants, and VIs. Hierarchical menus: Menu items that expand into submenus. LabVIEW: Laboratory Virtual Instrument Engineering Workbench. It is a powerful and flexible instrumentation and analysis software development application. Nodes: Execution elements of a block diagram consisting of functions, structures, and subVIs. Palette: Menu of pictures that represent possible options. Pull-down menu: Menu accessed from a menu bar. Pull-down menu options are usually general in nature. Right-click: To call up a special menu by clicking an object with the right mouse button (on Windows platforms) or with the command key and the mouse button (on Macintosh platforms). Shortcut menu: Menu accessed by right-clicking, usually on an object. Menu options pertain to that object specifically. Tool: A special operating mode of the mouse cursor. Tools palette: Palette containing tools you can use to edit and debug front panel and block diagram objects. Toolbar: Bar containing command buttons to run and debug VIs.

41

Exercises

Virtual instrument (VI): Program in LabVIEW; so-called because it models the appearance and function of a physical instrument.

EXERCISES

E1.1

On the Getting Started screen, select Open. In the LabVIEW directory, navigate to the examples folder. Within the examples folder, navigate to the apps subfolder. Select the file demos.llb and upon opening, select Vibration Analysis.vi. The front panel should look like the one shown in Figure E1.1. (a) Run the VI by clicking on the Run button. (b) Vary the Acquisition Rate on the vertical pointer slide control. (c) Vary the desired velocity on the Set Velocity [km/hr] dial and verify that the actual velocity, as indicated on the Actual Velocity [km/hr] gauge, matches the desired velocity.

Run

Change velocity

Change Acquisition Rate

Stop execution

FIGURE E1.1

The Vibration Analysis.vi front panel. E1.2

Referring to Vibration Analysis.vi from E1.1, we can inspect the block diagram and watch it execute using Highlight Execution. Under the Window pull-down menu, select Show Block Diagram. The panel should switch to the block diagram shown in Figure E1.2.

42

CHAPTER 1

LabVIEW Basics

(a) Click on the Highlight Execution button. (b) Run the VI by clicking on the Run button. (c) Watch as the data flows through the code.

Select Execution Highlighting

FIGURE E1.2

The Vibration Analysis.vi block diagram.

E1.3

In this exercise, we want to open and run an existing VI. In LabVIEW, go to the Getting Started screen and select Find Examples. Click the Search tab and type “filter.” Select filter to display the example VIs that include filter in the title. Find the VI titled Express Filter.vi and open it. The VI front panel is shown in Figure E1.3. (a) Run the VI by clicking on the Run button. (b) Vary the Simulated frequency and watch the values change. (c) Vary Simulated amplitude and Simulated noise amplitude and verify that the value on the indicator matches the graph.

E1.4

Referring to Express Filter.vi from E1.3, we can inspect the block diagram and watch it execute using Highlight Execution. Under the Window pull-down menu, select Show Block Diagram. The panel should switch to the block diagram shown in Figure E1.4.

43

Exercises

Three inputs to vary

Click here to stop simulation FIGURE E1.3

The Express Filter.vi front panel.

Run

Execution Highlighting

FIGURE E1.4

The Express Filter.vi block diagram.

44

CHAPTER 1

LabVIEW Basics

(a) Click on the Highlight Execution button. (b) Run the VI by clicking on the Run button. (c) Watch as the data flows through the code and the Express VIs. (d) Stop the VI and return to the block diagram. (e) Double click on the Simulate Signal Express VI. Change the signal type from Sine to Square. Click OK and return to the front panel. Run the VI again. Notice it is now plotting a square wave instead of a sine wave. E1.5

Open up a new blank VI. Navigate to the Help pull-down menu and select Find Examples and view the examples available in other categories. Look at some of the examples in BrowseAnalyzing and Processing Signals. The NI Example Finder is shown in Figure E1.5. Run several other VIs.

Select Browse

Select Analyzing and Processing Signals

FIGURE E1.5

Select Analyzing and Processing Signals.

E1.6

On the LabVIEW Getting Started screen, select New. On this screen, we have the option to open a blank VI or a VI from a template. With a template, you will not have to start building your application from scratch. Browse through the available templates and then open From TemplateTutorial (Getting Started) Generate, Analyze, and Display. Look at the front panel and

Problems

45

block diagram of this VI and then run the VI. What signal is displayed in the Waveform Graph? Change the signal type to a sawtooth and run the VI. E1.7

On the Getting Started Screen select the Training Courses link under the Latest from ni.com section. Read about the benefits of becoming a certified LabVIEW Associate Developer (CLAD). Where are the closest testing centers for you? The testing center list can be found at www.pearsonvue.com/ni. Click on Locate a Test Center on the menu on the right hand side page and fill in your location to find the nearest test center.

E1.8

Suppose you need to create a random number from 1 to 100. The random number VI in LabVIEW creates numbers in the range of [0,1], so how would you convert the random number in the [0,1] range so that each number in the [0,100] range is equally likely? Whenever you are not sure how to do something a good place to start is the Discussion Forums on the NI website where LabVIEW users post problems and other users post solutions. Go to www.ni.com/support and click on the discussion forums. Click on the LabVIEW message board and search for “Random Modification”. Did that help you solve your answer? Was the answer what you would have expected? It is a good idea to remember how to generate random numbers as you will be using this technique in other problems in this book. The random number generator can be found on the FunctionsProgrammingNumeric palette.

E1.9

Reconsider the problem of creating a random number from 1 to 100 discussed in E1.8. Go to www.ni.com/support and click on Knowledge Base and then LabVIEW Development System. Can you find how to Generate Random Numbers outside of the 0-1 range. Was this help different than when you used the discussion forums? When would you use each method?

PROBLEMS P1.1

In this problem, you will open and run an existing VI. On the Getting Started screen, click Find Examples at the bottom right. In the Example Finder, open the Waveform Min Max example.vi, located in FundamentalsWaveforms. (a) Run the VI by clicking on the Run button. (b) Vary the amplitude and frequency by typing in new values and pressing Enter, or by clicking the arrows on the left side of the controls. Observe how the outputs change for the new input values.

46

CHAPTER 1

LabVIEW Basics

(c) Under the Window pull-down menu, select Show Block Diagram. Open the Context Help window and hold the cursor over the objects on the block diagram to see terminal connections and a brief description of the functionality of various block diagram objects.

Run

Vary amplitude and frequency

Select Context Help

FIGURE P1.1

The front panel for the Waveform Min Max example VI. P1.2

! P1.3

In this problem we want to open an existing VI from the Learning directory. You can open the VI by either selecting Open from the Getting Started screen, or if you are already in LabVIEW, you can use the File pull-down menu (see Figure 1.15) and select Open. In both cases, you must navigate through your local file structure to find the desired VI. Find, open, and run Running Dog.vi located in the Learning directory. Navigate to the Instructional VIs folder and open controlmix.llb. This VI is only available on the Windows platform. If you are on a Macintosh platform, locate, open, and run Control Mixer Process.vi located in the library controlmix.llb found in the subfolder apps within the examples folder. You can construct games using LabVIEW. In this problem, you will download the LabVIEW game of chess from LabVIEW Zone. Go to the LabVIEW games by visiting the website http://www.ni.com/devzone/lvzone/games.htm. At this

Problems

47

location, you can select the Two-Player Chess game to download. Once you have the chess game open in LabVIEW, investigate the block diagram to see the code. Using LabVIEW Context Help (found in the Help menu) locate the While Loop by scanning over the block diagram with the Positioning tool. What function does the While Loop perform? P1.4

Find the following objects. Write down the palette on which each can be found. (a) Round LED (b) Add function (c) Or function (d) String control

P1.5

Open a new VI. On the front panel place a Thermometer, a Horizontal Toggle button, and a Waveform Chart. Right click on each of the icons to determine the number of associated hierarchical menus: (a) Thermometer on the front panel (b) Thermometer on the block diagram (c) Boolean Horizontal Toggle button on the block diagram (d) Waveform Chart on the front panel You can locate the Thermometer on the ModernNumeric subpalette, the Horizontal Toggle on the ModernBoolean subpalette, and the Waveform Chart on the ModernGraph subpalette.

P1.6

On which pull-down menus can you find the following: (a) Mathscript Window (b) Explain Error (c) Find Examples (d) Tools Palette (e) Breakpoint Manager (f) Options (g) Tile Left and Right

P1.7

Open a new VI. Right click on the front panel to see the Controls palette. Click on the thumbtack in the upper left corner of the palette. To change the way your palette looks, click on the View (see Figure 1.24) and select View This Palette As. Experiment with the various options. Choose the option that you like the best. Repeat this for the Function palette on the block diagram as well.

P1.8

Open Temperature System Demo.vi, located in the tempsys.llb found in the subfolder apps within the examples folder in the LabVIEW application

48

CHAPTER 1

LabVIEW Basics

directory. The front panel and block diagram are shown in Figure P1.8. Using the Context Help (Ctrl-H), determine the inputs and outputs of the Temperature Status subVI. Sketch the subVI icon and connector showing the inputs and outputs.

Temperature Status subVI

FIGURE P1.8

The Temperature System Demo VI. DESIGN PROBLEMS D1.1

On the Getting Started screen, select Find Examples to open the NI Example Finder. Locate Express Comparison.vi found in the subfolder Mathematics within the Analyzing and Processing Signals folder. The front panel should resemble the front panel in Figure D1.1. (a) Run the VI by selecting Run on the Operate menu, or by clicking the Run button. (b) Move the slides on the controls on the front panel and observe how the corresponding values on the chart change. (c) Verify that the signal Greater is high (that is, it takes a value of 1) when Value A is greater than Value B. (d) Open the block diagram and double-click the Express Comparison VI, which is currently configured to perform the Greater Than function. Change the

49

Design Problems

settings in the configuration window so that the Express VI will instead perform the Less Than function. Note that the name on the chart of the result of the Express Comparison VI automatically changes from Greater to Less. (e) Run the VI again and verify that the signal Less is high when Value A is less than Value B. Save the VI as Less Than Comparison.vi in the Users Stuff folder in the Learning directory.

Move slides to vary input values

Value A Greater Value B

FIGURE D1.1

The front panel for the Express Comparison VI.

D1.2

In this design problem, you will take the first step to construct your own VI. On the Getting Started screen, select New and open a Blank VI. Go to the block diagram and place a Compound Arithmetic function, found in the Programming Numeric subpalette. By default, this function returns the sum of two inputs. (a) Using LabVIEW Context Help, find out how to configure the function to compute other operations besides addition. (b) Using what you learned in Step (a), configure the function to multiply two inputs and display the result on a Numeric Indicator. (c) Using LabVIEW Context Help, find out how to change the Compound Arithmetic function to compute operations on more than two inputs. (d) Using what you learned in Step (c), configure the function to multiply three inputs together.

50

CHAPTER 1

LabVIEW Basics

Place Probe tool here

Replace this Dial with a Knob

Fix this label

FIGURE D1.3

Using the Tools palette to edit a VI.

D1.3

Consider the VI shown in Figure D1.3. Using only the Tool palette options, perform the following actions: (a) Use the Positioning tool to align all three controls and move the Frequency label off of the Knob (the knob in the middle). (b) Using the Object Shortcut Menu tool to replace the Dial with a Knob. (c) To make the Frequency knob the exact same color as the others, use the Get Color tool and click on the Amplitude knob. Notice the colors changed in the Set Color toolbox. Click on the Set Color tool now and change the color of the knobs. (d) Change the value of the Amplitude to be 2 using the Operate Value tool. (e) Switch to the block diagram. Notice that the labels are mislabeled. Change the labels by using the Edit Text tool. (f) Place a probe on the Frequency wire using the Probe Data tool. (g) Run the VI and watch the probe. (h) Use the Operate Value tool to change the value of the knobs and investigate the effect on the sine wave. You can locate the VI in Figure D1.3 in the Learning directory in Chapter 1 of the folder Exercises&Problems. The VI is named Tools Palette.vi.

51

Design Problems D1.4

Consider the VI shown in Figure D1.4. You can locate the Pythagorean Theorem VI in the Learning directory in Chapter 1 of the folder Exercises&Problems. The VI is named Pythagorean-Messy.vi. Open the VI and switch to the block diagram. Can you follow the code and readily explain what function this VI performs? Click on the Block Diagram Clean Up icon and re-consider the code again. Describe the visual differences in the block diagram. It should be easier to explain the code once it is cleaned up. Clean Up Diagram

FIGURE D1.4

Cleaning up a messy block diagram.

Switch to the front panel and arrange the controls and indicators to a logical arrangement with the controls on the left side and the indicators on the right side. Using the Edit Text tool, enter inputs in the controls A, B & C and click the Run button on the VI. Change the values of the controls and experiment with the VI. Click the Run Continuously button and experiment with changing the inputs as the VI runs. (Hint: Try A=3, B=4, and C=5).

CHAPTER 2

Virtual Instruments 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10

What Are Virtual Instruments? 53 Several Worked Examples 55 The Front Panel 62 The Block Diagram 68 Building Your First VI 77 Data Flow Programming 82 Building a VI Using Express VIs 84 Building Blocks: Pulse Width Modulation 91 Relaxed Reading: Autonomous Driving in the DARPA Urban Challenge 93 Summary 96

Virtual instruments (VI) are the building blocks of LabVIEW programming. We will see in this chapter that VIs have three main components: the front panel, the block diagram, and the icon and connector pair. We will revisit the front panel and block diagram concepts first introduced in Chapter 1. An introduction to wiring the elements together on the block diagram is presented, although many of the debugging issues associated with wires are left to Chapter 3. The important notion of data flow programming is also discussed in this chapter. Finally—you will have the opportunity to build your first VI!

G OA L S

1. 2. 3. 4. 5.

52

Gain experience by running more worked examples. Understand the three basic components of a virtual instrument. Begin the study of programming in LabVIEW. Understand the notion of data flow programming. Build your first virtual instrument.

Section 2.1 What Are Virtual Instruments?

2.1

53

WHAT ARE VIRTUAL INSTRUMENTS? LabVIEW programs are called virtual instruments (VIs) because they often have the look and feel of physical systems or instruments. The illustration in Figure 2.1 shows an example of a front panel. A VI and its components are analogous to main programs and subroutines from text programming languages like C and Fortran. VIs have both an interactive user interface—known as the front panel—and the source code—represented in graphical form on the block diagram. LabVIEW provides mechanisms that allow data to pass easily between the front panel and the block diagram. The block diagram is a pictorial representation of the program code. The block diagram associated with the front panel in Figure 2.1 is shown in Figure 2.2. The block diagram consists of executable icons (called nodes) connected (or wired) together. We will discuss wiring later in this chapter. The important concept to remember is that in LabVIEW the block diagram is the source code. The art of successful programming in LabVIEW is an exercise in modular programming. After dividing a given task into a series of simpler subtasks (these subtasks are called subVIs and are analogous to subroutines), you then construct a virtual instrument to accomplish each subtask. Chapter 4 focuses on building subVIs. The resulting subtasks (remember, these are called subVIs)

FIGURE 2.1

A virtual instrument front panel.

54

CHAPTER 2

This is a formula node

Virtual Instruments

This is a subVI called Demo Tek FG 5010.vi

FIGURE 2.2

The virtual instrument block diagram associated with the front panel in Figure 2.1.

are then assembled on a top-level block diagram to form the complete program. Modularity means that you can execute each subVI independently, thus making debugging and verification easier. Furthermore, if your subVIs are general purpose programs, you can use them in other programs. VIs (and subVIs) have three main parts: the front panel, the block diagram, and the icon/connector. The front panel is the interactive user interface of a VI— a window through which the user interacts with the code. When you run a VI, you must have the front panel open so you can pass inputs to the executing program and receive outputs (such as data for graphical display). The front panel is indispensable for viewing the program outputs. It is possible, as we will discuss in Chapter 9, to write data out to a file for subsequent analysis, but generally you will use the front panel to view the program outputs. The front panel contains knobs, push buttons, graphs, and many other controls (the term controls is interchangeable with inputs) and indicators (the term indicators is interchangeable with outputs). The block diagram is the source code for the VI made up of graphical icons, wires, and such, rather than traditional “lines of code.” The block diagram is actually the executable code. The icons of a block diagram represent lowerlevel VIs, built-in functions, and program control structures. These icons are wired together to allow the data flow. As you will learn later in this chapter, the execution of a VI is governed by the data flow and not by a linear execution of lines of code. This concept is known as data flow programming.

55

Section 2.2 Several Worked Examples

(a) icon

(b) connector

FIGURE 2.3

The icon and connector of the Demo Tek FG 5010.vi subVI shown in Figure 2.2.

The icons and connectors specify the pathways for data to flow into and out of VIs. The icon is the graphical representation of the VI in the block diagram and the connector defines the inputs and outputs. All VIs have an icon and a connector. As previously mentioned, VIs are hierarchical and modular. You can use them as top-level (or calling) programs or as subprograms (or subVIs) within other programs. The icon and connector are shown in Figure 2.3 for the subVI Demo Tek FG 5010.vi. This subVI can be found in the center of the Frequency Response.vi diagram in Figure 2.2. It simulates a Textronix FG 5010 function generator.

2.2

SEVERAL WORKED EXAMPLES Before you construct your own VI, we will open several existing LabVIEW programs and run them to see how LabVIEW works. The first VI example— Moonlanding.vi—can be found in the suite of examples provided as part of LabVIEW. The second VI example—ODE Example.vi—illustrates how LabVIEW can be used to simulate linear systems. In this example, the motion of a mass-spring-cart system is simulated, and you can observe the effects of changing any of the system parameters on the resulting motion of the cart.

Moonlanding Demo

In this example, you will open and run the virtual instrument called Moonlanding.vi. At the Getting Started window, select Find Examples and when the NI Example Finder appears, select the Browse according to: Directory Structure button on the upper left-hand side. Click on the express folder and upon opening find Moonlanding.vi and double click on the VI. The front panel window appears and should resemble the one shown in Figure 2.4. The front panel contains a tank, a slide control, a dial, a chart, and several numeric indicators. Run the VI by clicking on the Run button. The front panel toolbar changes as the VI switches from edit mode to run mode. For example, once the VI begins executing, the Stop button will change appearance on the front panel toolbar

56

CHAPTER 2

Virtual Instruments

Run button

Adjust the power to control the descent

Watch the fuel level!

FIGURE 2.4

Moonlanding front panel.

(it changes from a shaded symbol to a red stop sign). Also, the Run button changes appearance to indicate that the VI is running. In this VI, you get to practice landing on the Moon. Initially the altitude is 10,000 meters. For a successful landing you need to have a velocity of 5 m/s or less when the altitude is zero (that is, when you have landed). You control the engine power by adjusting the Power setting in the slide control. While the VI is running use the Operating tool to change the power setting in the vertical slide control. The amount of fuel remaining is displayed in the fuel tank indicator, as well as in the numeric indicator. The speed of the lander is displayed in the indicator dial and in a numeric indicator. This illustrates two methods for displaying data to the user. From 10,000 m to 1000 m you are in the Normal Flight regime. Once you reach 1000 m you enter the Final Approach. The dial indicators for the Final Approach begin operation once 1000 m is reached. The flight path is updated in the Altitude Chart. Switch to the block diagram by choosing Show Block Diagram from the Window pull-down menu. The block diagram shown in Figure 2.5 is the underlying code for the VI. At this point in the learning process, you may not understand all of the block diagram elements depicted in Figure 2.5—but you will eventually! Note that this VI employs Express VIs as key elements of the code. When you are finished experimenting with the Moonlanding.vi, close the VI and subVI by selecting Close from the File pull-down menu on each open front panel. Remember—do not save any changes!

Section 2.2 Several Worked Examples

57

Express VIs

FIGURE 2.5

Moonlanding demonstration block diagram—the code.

!

A Linear System of Equations Example

Selecting Close from the File pull-down menu of a block diagram closes the block diagram window only. Selecting Close on a front panel window closes both the front panel and the block diagram.

In this example we use LabVIEW to solve a set of linear, constant coefficient, ordinary differential equations. Many physical systems can be modeled mathematically as a set of linear, constant coefficient differential equations of the form x˙ = Ax with initial conditions x(0) = xo , where the matrix A is a constant matrix. Suppose we want to model the motion of a mass-spring-damper system, as shown in Figure 2.6. Let m represent the mass of the cart, k represent the spring constant, and b the damping coefficient. The position of the cart is denoted by y, and the velocity is the time derivative of the position, that is, the velocity is y˙ . Equating the sum of forces to the mass times acceleration (using Newton’s Second Law) we obtain the equation of motion: m y¨ (t) + b y˙ (t) + ky(t) = 0,

58

CHAPTER 2

Virtual Instruments

y k m b

FIGURE 2.6

A simple mass-spring-damper system.

with the initial conditions y(0) = yo and y˙ (0) = y˙o . The motion of the cart is described by the solution of the second-order linear differential equation above. For this simple system we can obtain the solution analytically. For more complex systems it is usually necessary to obtain the solution numerically using the computer. In this exercise we seek to obtain the solution numerically using LabVIEW. It is sometimes convenient for obtaining the numerical solution to rewrite the second-order linear differential equation as two first-order differential equations. We first define the state vector of the system as ⎛ ⎞ ⎛ ⎞ x1 (t) y(t) ⎠=⎝ ⎠, x(t) = ⎝ y˙ (t) x2 (t) where the components of the state vector are given by x1 (t) = y(t)

and

x2 (t) = y˙ (t).

Using the definitions of the state vector and the equation of motion, we obtain x˙1 (t) = x2 (t) k b x˙2 (t) = − x1 (t) − x2 (t). m m Writing in matrix notation yields x˙ (t) = Ax(t), where ⎤

⎡ A=⎣

0

1

−k/m −b/m

⎦.

59

Section 2.2 Several Worked Examples

In this example, let k =2 m

and

b = 4. m

and

x2 (0) = 0.

Choose the initial conditions as x1 (0) = 10

Now we are ready to compute the solution of the system of ordinary differential equations numerically with LabVIEW. Select Open VI from the Getting Started screen or use the File menu to open the VI. Open the ODE Example.vi located in the folder Chapter 2 in the directory Learning. The front panel depicted in Figure 2.7 will appear. Verify that the initial conditions xo are set correctly to x1 (0) = 10 and x2 (0) = 0. Run the VI by clicking on the Run button. About how long does it take for the cart position to come to rest? Change the initial position to x1 (0) = 20. Now how long does it take for the cart to come to rest? What is the maximum value of the cart velocity?

System A matrix

X1

Initial conditions X2

FIGURE 2.7

Linear system of equations front panel.

60

CHAPTER 2

!

Virtual Instruments

LabVIEW does not accept values in numeric displays until you press the Enter button on the toolbar or click the mouse in an open area of the window. Open and examine the block diagram by choosing Show Block Diagram from the Window menu. The code is shown in Figure 2.8. If you need to solve a set of linear ordinary differential equations, you can start with this VI and modify it as necessary. The idea of starting with a VI that solves a related problem is a good approach in the early stages of learning LabVIEW. Access the Help pull-down menu and select Show Context Help. Move the cursor over various objects on the block diagram and read what the online help has to say. Most VIs are hierarchical and modular. After creating a VI, you can (with a little work configuring the icon and connector) use the VI as a subVI (similar to a subroutine) in the block diagram of another VI. By creating subVIs, you can construct modular block diagrams that make your VIs easier to debug. The ODE Example.vi uses a subVI named ODE Linear System Numeric.vi. Open the subVI by double-clicking on the appropriate subVI icon (see Figure 2.8). The icon for the subVI is labeled. The front panel shown in Figure 2.9 should appear. The icon and connector provide the graphical representation and parameter definitions required to use a VI as a subVI in the block diagrams of other VIs. The icon and connector are located in the upper right corner of the VI front panel (see Figure 2.9). The icon is a graphical representation of the VI when used as a component in a LabVIEW program, that is, when used in the block diagram

FIGURE 2.8

Linear system of equations block diagram.

61

Section 2.2 Several Worked Examples

Icon

SubVI outputs SubVI inputs

FIGURE 2.9

ODE Linear System Numeric subVI.

of other VIs. An icon can be a pictorial representation or a textual description of the VI, or a combination of both. The icon for the ODE Linear System Numeric subVI includes both text and graphics. Every VI (and subVI) has a connector. The connector is a set of terminals that correspond to its controls and indicators. When you show the connector for the first time, LabVIEW will suggest a connector pattern that has one terminal for each control or indicator on the front panel—you can choose a different pattern. In Chapter 4, you will learn how to associate front panel controls and indicators with connector terminals. The connector terminals determine where you must wire the inputs and outputs on the icon. These terminals are analogous to parameters of a subroutine. You might wonder where the icon is located relative to the connector. It is at the same location—the icon sits on top of the connector pattern. The icon and connector of the ODE Linear System Numeric subVI are shown in Figure 2.10.

(a) icon FIGURE 2.10

The icon and connector of the ODE Linear System Numeric subVI.

(b) connector

62

CHAPTER 2

Virtual Instruments

Default icon FIGURE 2.11

The default icon.

Every VI has a default icon, which is displayed in the icon panel in the upper right corner of the front panel and block diagram windows as shown in Figure 2.11. You will learn how to edit the VI icon in Chapter 4. You may want to personalize VI icons so that they transmit information by visual inspection about the contents of the underlying VI. When you are finished experimenting, close the VI by selecting Close from the File menu.

2.3 THE FRONT PANEL The front panel of a VI is a combination of controls and indicators. Controls simulate the types of input devices you might find on a conventional instrument, such as knobs and switches, and provide a mechanism to move input from the front panel to the underlying block diagram. On the other hand, indicators provide a mechanism to display data originating in the block diagram back on the front panel. Indicators include various kinds of graphs and charts (more on this topic in Chapter 7), as well as numeric, Boolean, and string indicators. Thus, when we use the term controls we mean “inputs,” and when we say indicators we mean “outputs.” You place controls and indicators on the front panel by selecting and “dropping” them from the Controls palette. Once you select a control (or indicator) from the palette and release the mouse button, the cursor will change to a “hand” icon, which you then use to carry the object to the desired location on the front panel and “drop” it by clicking on the mouse button again. Once an object is on the front panel, you can easily adjust its size, shape, and position (see Chapter 3). If the Controls palette is not visible, right-click on an open area of the front panel window to display the Controls palette. 2.3.1

Numeric Controls and Indicators You can access the numeric controls and indicators from the Numeric subpalette located under the Modern subpalette of the Controls palette, as shown in Figure 2.12. As the figure shows, there are quite a large number of available numeric controls and indicators. The two most commonly used numeric objects are the numeric control and the numeric indicator. When you construct your first

63

Section 2.3 The Front Panel

Tree structure Right-click on Num Ctrls Permits quick access to common numeric controls

Buttons for navigating the palette Click here to tack the palette down to the screen

(a) Commonly used numeric controls Numeric indicator Time stamp control Time stamp indicator Vertical pointer slide Vertical progress bar Vertical graduated bar

Numeric control Vertical fill slide Horizontal fill slide Horizontal pointer slide Knob

Horizontal graduated bar Horizontal progress bar Gauge Meter Vertical scrollbar

Dial Framed color box Tank Thermometer

Horizontal scrollbar

(b) All numeric controls FIGURE 2.12

Numeric controls and indicators.

VI later in this chapter, you will get the chance to practice dropping numeric controls and indicators on the front panel. Once a numeric control is on the front panel, you click on the increment buttons (that is, the up and down arrows on the left-hand side of the control) with the Operating tool to enter or change the displayed numerical values. Alternatively, you can double-click on the current

64

CHAPTER 2

Virtual Instruments

Search: Change the palette to search mode View: Provides options for selecting a format for current palette FIGURE 2.13

Navigating the Functions and Controls palettes.

value of the numeric control with the Auto tool, which will highlight the value, and you can then enter a different value. You can tack down the Numeric palette (and most other palettes) to the screen so they are visible at all times by clicking on the thumbtack on the top left corner of the palette. You can use the tree structure (see Figure 2.12) on the Controls and Functions palettes to navigate and search for controls, VIs, and functions. When you move the cursor over a subpalette icon, the palette expands to display the subpalette you selected and the Controls (or Functions) palette remains in view. An example of a subpalette icon on the Controls palette is the Numeric subpalette. The Controls and Functions palettes contain two navigation buttons (as illustrated in Figure 2.13): Search—Changes the palette to search mode. In search mode, you can perform text-based searches to locate controls, VIs, or functions in the palettes. View—Allows you to configure the appearance of the palettes. Suppose you need to search for a function that provides a random number between 0 and 1. On the Functions palette, select the Search button and in the dialog box that appears, enter the word “random,” as illustrated in Figure 2.14. In the results list of the search, select Random Number (0-1). The Express Numeric palette will appear and the Random Num function is indeed located, as shown in Figure 2.14. See Section 1.8.4 for more detailed information on searching the palettes. 2.3.2

Boolean Controls and Indicators You can access the Boolean controls and indicators from the Boolean subpalette located under the Modern subpalette of the Controls palette, as shown in Figure 2.15. As with the numeric controls and indicators, there are quite a large number of available Boolean controls and indicators. Boolean controls and

Section 2.3 The Front Panel

Click Search

65

Select Random Number

Random Number (0-1) function is found.

FIGURE 2.14

Searching the Functions palette for a Random Number VI.

indicators simulate switches, buttons, and LEDs and are used for entering and displaying Boolean (True-False) values. For example, you might use a Boolean LED in a temperature monitoring system as a warning signal that a measured temperature has exceeded some predetermined safety limit. The measured temperature is too high, so an LED indicator on the front panel turns from green to red! Before continuing, take a few moments to familiarize yourself with the types of available numeric and Boolean controls and indicators shown in Figures 2.12 and 2.15, so that when you begin to construct your own VIs, you will have a feel for what is available on the palettes. Mechanical actions associated with Booleans represent their behavior when pressed or released. The two types of mechanical action are switching and latching. Switching returns the Boolean to its default state when directed by the user. Latching returns the Boolean to its default state when directed by the user or when LabVIEW has read its value. The Boolean switching mechanical actions are of three kinds: Switch when pressed—Changes the control value each time you click it with the Operating tool. Switch when released—Changes the control value only after you release the mouse button during a mouse click within the graphical boundary of the control.

66

CHAPTER 2

Virtual Instruments

Right-click on Buttons Permits quick access to common Boolean controls

(a) Commonly used Boolean controls Push button Rocker Vertical rocker Horizontal toggle switch Vertical toggle switch Vertical slide switch Slide switch Stop button

Round LED Square LED OK button Radio button

Cancel button

(b) All Boolean controls FIGURE 2.15

Boolean controls and indicators.

Switch until released—Changes the control value when you click it and retains the new value until you release the mouse button. At this time, the control reverts to its default value. (This behavior is like that of a door buzzer.) The frequency with which the VI reads the control does not affect the switching mechanical action behavior. The Boolean latching mechanical actions also are of three kinds: Latch when pressed—Changes the control value when you click it and retains the new value until the VI reads it once. The control then reverts to its default value, even if you keep pressing the mouse button. (This behavior is similar to that of a circuit breaker.)

67

Section 2.3 The Front Panel

Right click on boolean

Select Mechanical Action

Switch when pressed Switch when released

Switch until released Latch until released

Latch when pressed

Latch when released

FIGURE 2.16

Selecting the mechanical action of Booleans.

Latch when released—Changes the control value only after you release the mouse button within the graphical boundary of the control. When the VI reads it once, the control reverts to its default value. (This behavior is like that of dialog box buttons and system buttons.) Latch until released—Changes the control value when you click it and retains the value until the VI reads it once or you release the mouse button, whichever occurs last.

!

You cannot select the Switch until released or any of the three latching mechanical actions for radio buttons control. (See Figure 2.15 for the location of the radio button on the Boolean subpalette.) To select the mechanical action, right-click on the Boolean object on the front panel to access the pull-down menu and select Mechanical Action, as shown in Figure 2.16. You can choose the desired mechanical action from the list of six possibilities.

68

CHAPTER 2

Virtual Instruments

To learn more about mechanical action for Boolean controls, experiment with the Mechanical Action of Booleans VI. In the NI Example Finder, select the Search tab, type “boolean” as the keyword in the text window, and click Search. 2.3.3

Configuring Controls and Indicators Right-clicking on a numeric control displays the shortcut menu, as shown in Figure 2.17. You can change the defaults for controls and indicators using options from the shortcut menus. For example, under the submenu Representation you will find that you can choose from 14 representations of the numeric control or indicator, including 32-bit single precision, 64-bit double precision, signed integer 8-bit, and more. The representation indicates how much memory is used to represent a number. This choice is important if you are displaying large amounts of data and you want to conserve computer memory. Another useful item on the shortcut menu is the capability to switch from control and indicator using Change to Indicator and vice versa. We will discuss each item in the shortcut menu on an as-needed basis.

Right-click on the numeric control to display the shortcut menu

This is the shortcut menu!

FIGURE 2.17

Configuring a numeric control using the shortcut menu.

2.4 THE BLOCK DIAGRAM The graphical objects comprising the block diagram together make up what is usually called the source code. The block diagram (visually resembling a computer program flowchart) corresponds to the lines of text found in text-based

69

Section 2.4 The Block Diagram

Front panel

Block diagram

Control terminals

Indicator terminals

Wires Nodes FIGURE 2.18

A typical VI illustrating nodes, terminals, and wires.

programming languages. In fact, the block diagram is the actual executable code that is compiled while you are programming, allowing instant feeedback when you make mistakes such as wiring incompatible data types. The block diagram is built by wiring together objects that perform specific functions. The components of a block diagram (a VI is depicted in Figure 2.18) belong to one of three classes of objects: Nodes: Program execution elements. Terminals: Ports through which data passes between the block diagram and the front panel and between nodes of the block diagram. Wires: Data paths between terminals. 2.4.1

VIs and Express VIs An important element of LabVIEW is the Express VI. These VIs are provided to allow for quick construction of VIs designed to accomplish common tasks, such as acquisition, analysis, file reading, and writing. Express VIs are nodes (see Section 2.4.2 for more information on nodes) that require minimal wiring because they are configured with dialog boxes. The positive implications of minimizing the required wiring will become more evident as we proceed through the forthcoming chapters.

70

CHAPTER 2

Virtual Instruments

LabVIEW views a VI placed on the block diagram to be a subVI (more on subVIs in Chapter 4). A subVI is itself a VI that can be used as an element on a block diagram. In general, a block diagram can have VIs and Express VIs as elements. One difference in their use is that when you double-click a subVI, its front panel and block diagram appear. When you double-click an Express VI a dialog box appears in which you can configure the VI to meet your needs. The idea is that the Express VI allows you to quickly configure a VI by interacting with a dialog box rather than reconfiguring the code in a subVI block diagram. When an Express VI is available for the task you need, it will be better, in general, to consider the use of the Express VI. VIs and Express VIs are distinguishable on the block diagram through the use of colored icons. By default, icons for Express VIs appear on the block diagram as expandable nodes (see Section 2.4.2) with icons surrounded by a blue field, while icons for VIs have white backgrounds. The other common element on the block diagram is the function (or primitive), and you can easily identify functions since their icons have pale yellow backgrounds, meaning you cannot open the code behind the function. 2.4.2

Nodes Nodes are analogous to statements, functions, and subroutines in text-based programming languages. There are three node types—functions, subVI nodes, and structures. Functions are the built-in nodes for performing elementary operations such as adding numbers, file I/O, or string formatting. Functions are the fundamental operating element of a block diagram. The Add and Multiply functions in Figure 2.18 represent one type of node. SubVI nodes are VIs that you design and later call from the diagram of another VI. You can also create subVIs from Express VIs. Structures—such as For Loops and While Loops—control the program flow. Express VIs and subVIs can be displayed as either icons or as expandable nodes. By default, most subVIs appear as icons that are not expandable. On the other hand, most Express VIs appear as expandable icons. Figure 2.19 depicts the various possibilities for displaying subVIs and Express VIs. Expandable nodes appear as icons surrounded by a colored field. SubVIs appear with a yellow field, and Express VIs appear with a blue field. By default, subVIs appear as icons on the block diagram, and Express VIs appear as expandable nodes. To display a subVI or Express VI as an expandable node, right-click the subVI or Express VI and select View As Icon from the shortcut menu. You can resize the expandable node to make wiring even easier. When you place the Positioning tool over an expandable node, resizing handles will appear at the top and bottom of the node. Placing the cursor over a resizing handle will transform the cursor to the resizing cursor, which can be used to drag the lower border of the node down to display input and output terminals. In Figure 2.19,

71

Section 2.4 The Block Diagram

Express VIs subVIs

Expandable Express VIs Yellow field

subVI viewed as an icon (default view)

Blue field

Express VI viewed as an icon

Expandable view (default view)

Resized expandable Express VI

FIGURE 2.19

Expandable Icons versus Icons.

the Simulate Signal Express VI is resized to display the inputs “error in (no error)” and outputs “error out” and “Sine.” For Express VIs with several inputs and outputs, the inputs and order in which they appear can be selected by clicking on the input and selecting the input or output you want in that position. Resizing the expandable node takes a larger amount of space on the block diagram which can then clutter a complex program, but it does aid in the readability of your code. Therefore, use icons if you want to conserve space on the block diagram and use expandable nodes to make wiring easier and to aid in documenting block diagrams. 2.4.3

Terminals Terminals are analogous to parameters and constants in text-based programming languages. There are different types of terminals—control and indicator terminals, node terminals, constants, and specialized terminals that you will find on various structures. In plain words, a terminal is any point to which you can attach a wire to pass data. For example, in the case of control and indicator terminals, numeric data entered into a numeric control passes to the block diagram via the control terminals when the VI executes. When the VI finishes executing, the numeric output data passes from the block diagram to the front panel through the indicator terminals. Data flows in only one direction—from a “source” terminal to one or more “destination” terminals. In particular, controls are source terminals and indicators are destination terminals. The data flow direction is from the control terminal to the indicator terminal, and not vice versa. Clearly, controls and indicators are not interchangeable.

72

CHAPTER 2

Virtual Instruments

Control and indicator terminals belong to front panel controls and indicators and are automatically created or deleted when you create or delete the corresponding front panel control or indicator. The block diagram of the VI in Figure 2.18 shows terminals belonging to five front panel controls and indicators. The Add and Multiply functions shown in the figure also have node terminals through which the input and output data flow into and out of the functions. You can configure front panel controls or indicators to appear as icon terminals or data type terminals on the block diagram. The terminals shown in Figure 2.19 are all icon terminals. The data type terminals were the standard representation of terminals through LabVIEW 6.1, but with LabVIEW 7.0 and higher, by default, front panel objects appear as icon terminals. To display a terminal as a data type on the block diagram, right-click the terminal and select View As Icon from the shortcut menu to remove the checkmark.

!

Control terminals have thick borders and indicator terminals have thin borders. It is important to distinguish between thick and thin borders since they are not functionally equivalent. Additionally, small arrows point out of (to the right) controls and into (from the left) indicators to depict data flow. Data types indicate what objects, inputs, and outputs you can wire together. You cannot wire together objects with incompatible data types. For example, a switch has a green border (Boolean data type) so you can wire a switch to any input with a green label on an Express VI. Similarly, a knob has an orange border (Numerical data type) so you can wire a knob to any input with an orange label. However, you cannot wire an orange knob (Numeric) to an input with a green label (Boolean).

Wires are the same color as the terminal.

Associated with the Express VI is the dynamic data type. The dynamic data type stores information generated or acquired by an Express VI and appears on the block diagram as a dark blue terminal. You can wire the dynamic data type to any indicator or input that accepts numeric, waveform, or Boolean data. The objective is to wire the dynamic data type to an indicator (graph, chart, or numeric) that can best present the data. Most subVIs and functions do not accept the dynamic data type directly. To use a subVI or function to process the dynamic data type data, you must convert the dynamic data type using the Convert from Dynamic Data Express VI to change the dynamic data type to numeric, Boolean, waveform, or array data types. As illustrated in Figure 2.20, the Convert to Dynamic Data Express VI and

73

Section 2.4 The Block Diagram

Select Signal Manipulation

Convert to Dynamic Data VI

Double

Dynamic data type

Convert from Dynamic Data VI

Array of Waveform

FIGURE 2.20

The Dynamic data type.

the Convert from Dynamic Data Express VI are found on the Signal Manipulation palette. When you place the Convert from Dynamic Data Express VI on the block diagram, a dialog box appears and displays options that let you specify how you want to format the data that the Convert from Dynamic Data Express VI returns. In Figure 2.20 the Convert from Dynamic Data Express VI is configured to transfer double numeric data from a knob to the dynamic data type used by the Simulate Signal Express VI.

74

CHAPTER 2

Virtual Instruments

When you wire a dynamic data type to an array indicator, LabVIEW automatically places the Convert from Dynamic Data Express VI on the block diagram. Double-click the Convert from Dynamic Data Express VI to open the dialog box to control how the data appears in the array. Transforming data for use in Express VIs occurs in a similar fashion. You use the Convert to Dynamic Data Express VI to convert numeric, Boolean, waveform, and array data types to the dynamic data type for use with Express VIs. When you place the Convert to Dynamic Data Express VI on the block diagram, a dialog box appears that allows you to select the kind of data to convert to the dynamic data type. TABLE 2.1 Common wire types

Scalar

1D array

2D array

Color

Numeric

Orange (floating point) & Blue (integer)

Boolean

Green

String

Pink

2.4.4

Wiring Wires are data paths between terminals and are analogous to variables in conventional languages. How then can we represent different data types on the block diagram? Since the block diagram consists of graphical objects, it seems appropriate to utilize different wire patterns (shape, line style, color, etc.) to represent different data types. In fact, each wire possesses a unique pattern depending on the type of data (numeric, Boolean, string, etc.) that flows through the wire. Each data type appears in a different color for emphasis. To determine the data types on a given wire, match up the colors and styles with the wire types as shown in Table 2.1. The hot spot of the Wiring tool is the tip of the unwound wiring segment as seen in Figure 2.21. To wire from one terminal to another, click the hot spot of the Wiring tool on the first terminal (you can start wiring at either terminal),

Hot spot FIGURE 2.21

The hot spot on the Wiring tool.

75

Section 2.4 The Block Diagram

Connect wire from input control to output indicator

Click hot spot of Wiring tool here and drag wire to the output indicator

Automatic Tool Selection

Select Wiring tool from the tools palette or select Automatic Tool Selection FIGURE 2.22

Wiring terminals.

move the tool to the second terminal, and click on the second terminal. There is no need to hold down the mouse button while moving the Wiring tool from one terminal to the other. The wiring process is illustrated in Figure 2.22. When you wire two terminals, notice that moving the Wiring tool over one of the terminals causes that terminal to blink. This is an indication that clicking the mouse button will make the wire connection. The VI shown in Figure 2.22 is easy to construct. It consists of one numeric control and one numeric indicator wired together. Open a new VI and try to build the VI! A working version can be found in the Chapter 2 folder in the Learning directory—it is called Wiring Demo.vi. The function of the VI is to set a value for Input control on the front panel and to display the same input at the numeric indicator Output indicator. To delete a wire as you are wiring: Windows—Click the right mouse button or click on the origination terminal. Macintosh—Hold down and click, or click on the origination terminal. When wiring two terminals together, you may want to bend the wire to avoid running the wire under other objects. This is accomplished during the wiring process by clicking the mouse button to tack the wire down at the desired

76

CHAPTER 2

Virtual Instruments

location of the bend, and moving the mouse in a perpendicular direction to continue the wiring to the terminal. Another way to change the direction of a wire while wiring is to press the space bar while moving the Wiring tool. Automatic wiring is also available. Instead of tacking down the wire, simply connect the two terminals and LabVIEW will choose the best path. If you have an existing wire that you would like to fix, right-click on the wire and choose Clean Up Wire on the pull-down menu.

!

Windows: All wiring is performed using the left mouse button.

Tip strips make it easier to identify function and node terminals for wiring. When you move the Wiring tool over a terminal, a tip strip appears, as illustrated in Figure 2.23. Tip strips are small text banners that display the name of each terminal. When you place the Wiring tool over a node, each input and output will show as a wire stub—a dot at the end of the wire stub indicates an input. Tip strips should help you wire the terminals correctly.

Tip strip FIGURE 2.23

Tip strip.

It is possible to have objects wired automatically. A feature of LabVIEW is the capability to automatically wire objects when you first drop them on the diagram. After you select a node from the Functions palette, move that node close to another node to which you want to wire the first node. Terminals containing similar datatypes with similar names will automatically connect. You can disable the automatic wiring feature by pressing the space bar. You can adjust the auto wiring settings from the ToolsOptionsBlock Diagram window. Since it is important to correctly wire the terminals on functions, LabVIEW provides an easy way to show the icon connector to make the wiring task easier. This is accomplished by right-clicking on the function and choosing Visible ItemsTerminals from the shortcut menu, as illustrated in Figure 2.24. To return to the icon, right-click on the function and deselect Visible Items Terminals.

Section 2.5 Building Your First VI

77

Right-click on terminal +

FIGURE 2.24

Showing terminals.

2.5

BUILDING YOUR FIRST VI In this section you will create your first virtual instrument to perform the following functions: Add two input numbers and display the result. Multiply the same two input numbers and display the result. Compare the two input numbers and turn on an LED if the numbers are equal. Begin by considering the front panel shown in Figure 2.25. It has two numeric control inputs for the numbers A and B, two numeric indicator outputs to display the results A + B and A × B, respectively, and a round LED that will turn on when the input numbers A and B are identical. As with the development of most sophisticated computer programs, constructing VIs is an art, and you will develop your own style as you gain experience with programming in LabVIEW. With that in mind, you should consider the following steps as only one possible path to building a working VI that carries out the desired calculations and displays the results. 1. Open a new front panel by choosing New VI from the File menu. 2. Create the numeric controls and indicators. The two front panel controls are used to enter the numbers, and the two indicators are used to display the results of the addition and multiplication of the input numbers. (a) Select Numeric Controls from the ControlsExpress palette. If the Controls palette is not visible, right-click in an open area of the front panel to gain access to the palette.

78

CHAPTER 2

Virtual Instruments

Front panel Owned labels

Numeric indicators

Numeric controls

Tools palette

LED indicator

FIGURE 2.25

The front panel for your first VI.

(b) Drop the control on the front panel, as illustrated in Figure 2.26. Drag the control to the desired location and then click the mouse button to complete the drop. (c) Type the letter A inside the label box (which appears above the control) and press the Enter button on the front panel toolbar. If you do not type

Move numeric control onto front panel

Change label

FIGURE 2.26

Placing the controls and indicators on the front panel.

Section 2.5 Building Your First VI

79

Click here on Enter after typing in the label text "A" Change label to A

FIGURE 2.27

Labeling the numeric control and indicators on the front panel.

the control label before starting other programming actions (such as dropping the other control on the front panel), the label box will remain labeled with the default label Numeric. If the control or indicator does not have a label, you can right-click on the control and select Label from the Visible Items menu. The label box appears, and you can then edit the text using the Labeling tool (see Figure 2.27). (d) Repeat the above process to create the second numeric control and the two numeric indicators. You can arrange the controls and indicators in any manner that you choose—although a neat and orderly arrangement is preferable. Add the labels to each control and indicator using Figure 2.25 as a guide. 3. Create the Boolean LED. This indicator will turn on if the two input numbers are identical, or remain off if they do not match. (a) Select Round LED from the ModernBoolean subpalette of the Controls palette. Place the indicator on the front panel, drag it to the desired location, and then click the mouse button to complete the process. (b) Type Equal? inside the label box and click anywhere outside the label when finished, or click on the Enter button. Each time you create a new control or indicator, LabVIEW automatically creates the corresponding terminal in the block diagram. When viewed as icons, the terminals are graphical representations of the controls or indicators. The Block Diagram 1. Switch your center of activity to the block diagram by selecting Show Block Diagram from the Window pull-down menu. The completed block diagram is shown in Figure 2.28. It may be helpful to display the front panel and block diagram simultaneously using either the Tile Left and Right or the Tile Up and Down options found in the Window pull-down menu. For this

80

CHAPTER 2

Virtual Instruments

example, the up and down option works better in the sense that all the block diagram and front panel objects can be displayed on the screen without having to use the scrollbars. 2. Now we want to place the addition and multiplication functions on the block diagram. Select the Add function from the ProgrammingNumeric subpalette of the Functions palette. If the Functions palette is not visible, rightclick on an open area of the block diagram to gain access to the palette. Drop the Add function on the block diagram in approximately the same position as shown in Figure 2.28. The label for the Add function can be displayed using the shortcut menu and selecting Visible ItemsLabel. This is illustrated in Figure 2.29. Following the same procedure, place the Multiply function on the block diagram and display the label.

Block diagram

Numeric indicators

Numeric controls

LED indicator FIGURE 2.28

The block diagram window for your first VI.

3. Select the Equal? function from the ExpressArithemetic & ComparisonExpress Comparison subpalette of the Functions palette and place it on the block diagram, as shown in Figure 2.30. The Equal? function compares two numbers and returns True if they are equal or False if they are not. To get more information on this function, you can activate the online help by choosing Show Context Help from the Help menu. Then placing the cursor over the Equal? function (or any of the other functions on the block diagram) leads to the display of the online help information. 4. Using the Wiring tool, wire the terminals as shown in Figure 2.28. As seen in Figure 2.31, to wire from one terminal to another, click the Wiring tool on the first terminal, move the tool to the second terminal, and click on the second terminal. Remember that it does not matter on which terminal you initiate the wiring. To aid in wiring, right-click on the three functions and

81

Section 2.5 Building Your First VI

Function label

• Right-click on Add function • Select Visible Items • Select Label FIGURE 2.29

Right-click to select the Visible ItemsLabel option.

Indicator terminals have thin borders Control terminals have thick borders

Select the Equal? function and move it onto the block diagram FIGURE 2.30

Adding the Equal? function to the VI.

choose Visible ItemsTerminals. Having the terminals shown explicitly helps to wire more quickly and accurately. Once the wiring is finished for a given function, it is best to return to the icon by right-clicking on the function and choosing Visible Items, and deselecting Terminals.

82

CHAPTER 2

Virtual Instruments

Show Terminals: Here we have two inputs and one output

Using the Wiring tool, wire each element as shown

FIGURE 2.31

Wiring from one terminal to another.

5. Switch back to the front panel window by clicking anywhere on it or by choosing Show Front Panel from the Window menu. 6. Save the VI as Simple Math.vi. Select Save from the File menu and make sure to save the VI in the Users Stuff folder within the Learning directory. In case you cannot get your VI to run properly, a working version of the VI (called Simple Math.vi) is located in the Chapter 2 folder within the Learning directory. 7. Enter input data. Enter numbers in the numeric controls utilizing the Auto tool by double-clicking in the numeric control box and typing in a number. The default values for A and B are 0 and 0, respectively. You can run the VI using these default values as a first try! When you use the default values, the LED should light up since A = B. 8. Run the VI by clicking on the Run button. 9. Experiment with different input numbers—make A and B identical and verify that the LED does indeed turn on. 10. When you are finished experimenting, close the VI by selecting Close from the File menu.

2.6 DATA FLOW PROGRAMMING The principle that governs VI execution is known as data flow. Unlike most sequential programming languages, the executable elements of a VI execute

Section 2.6 Data Flow Programming

When ready, click here to begin execution

83

Click here to begin execution highlighting

FIGURE 2.32

Block diagram that adds two numbers and then computes the sine of the result.

only when they have received all required input data—in other words, data flows out of the executable element only after the code is finished executing. The notion of data flow contrasts with the control flow method of executing a conventional program, in which instructions execute sequentially in the order specified by the programmer. Another way to say the same thing is that the flow of traditional sequential code is instruction driven, while the data flow of a VI is data driven. Consider the VI block diagram, shown in Figure 2.32, that adds two numbers and then computes the sine of the result. In this case, the block diagram executes from left to right, not because the objects are placed in that order, but because one of the inputs of the Sine & Cosine function is not valid until the Add function has added the numbers together and passed the data to the Sine & Cosine function. Remember that a node (in this case, the Sine function) executes only when data is available at all of its input terminals, and it supplies data to its output terminals only when it finishes execution. Open DataFlowA.vi located in the Chapter 2 folder of the Learning directory, click on execution highlighting, and then run the VI. Consider the example in Figure 2.33. Which code segment would execute first—the one on the left or the one on the right? You cannot determine the answer just by looking at the segments. The one on the left does not necessarily execute first. In a situation where one code segment must execute before another, and there is no type of dependency between the functions, you must use

84

CHAPTER 2

Virtual Instruments

When ready, click here to begin execution

Click here to begin execution highlighting

FIGURE 2.33

Which code executes first?

a Sequence structure to force the order of execution. To observe the data flow on the code in Figure 2.33, open DataFlowB.vi located in the folder Chapter 2 in the Learning directory. Before running the VI, click on the Highlight Execution button and then watch the flow of the execution.

2.7 BUILDING A VI USING EXPRESS VIS In this section, you will create your first VI using Express VIs. The objective is to construct a VI that generates a sawtooth signal at an amplitude that we prescribe on the front panel and displays the sawtooth signal graphically on the front panel. LabVIEW provides a VI template containing information that will help you in building this VI. At the LabVIEW Getting Started screen (see Figure 1.1), select VI from Template under the New menu to display the New dialog box. Select Generate and Display from the Simulated folder in the Create New list (see Section 1.9 and Figure 1.30). This template VI generates and displays a signal. 1. Click the OK button to open the template. You also can double-click the name of the template VI in the Create New list to open the template. 2. Examine the front panel of the VI, as shown in Figure 2.34. The front panel appears with a waveform graph and a stop button. The title bar of the front

85

Section 2.7 Building a VI Using Express VIs

panel indicates that this window is the front panel for the Generate and Display [GenerateDisplay1.vi] VI. If the front panel is not visible, you can display the front panel by selecting WindowShow Front Panel. Press the keys to switch from the front panel to the block diagram or from the block diagram to the front panel. 3. Examine the block diagram of the VI shown in Figure 2.34. The block diagram appears with the Simulate Signal Express VI, a waveform graph icon, a stop button icon, and a While Loop (more on loops in Chapter 5). The title bar of the block diagram indicates that this window is the block diagram for the Generate and Display [GenerateDisplay1.vi] VI.

Expandable Express VI

Title bar

Waveform graph icon

While Loop (see Chapter 5)

Stop button icon Waveform graph Stop button FIGURE 2.34

Building a VI using the Simulate Signal Express VI.

86

CHAPTER 2

Virtual Instruments

If the block diagram is not visible, you can display the block diagram by selecting WindowShow Block Diagram.

4. On the front panel toolbar, click the Run button and verify that a sine wave appears on the graph. 5. Stop the VI by clicking the Stop button located at the bottom right-hand side of the front panel. Although the Abort Execution button may seem, at first glance, to operate like a stop button, the Abort Execution button does not always properly close the VI. It is recommended to always stop your VIs using the Stop button on the front panel. Use the Abort Execution button only when errors prevent you from terminating the application using the Stop button. We can now add other elements to the VI template to begin the process of constructing the VI. First, we will add a control to the front panel to use to vary the sawtooth signal amplitude. In our VI, the control will supply the sawtooth amplitude data to the block diagram. 6. On the front panel, right-click in an open area to display the Controls palette. 7. Move the cursor over the icons on the Controls palette to locate the Numeric subpalette under the Modern palette (it should be located in the leftmost area of the first row as shown in Figure 1.25). Notice that when you move the cursor over icons on the Controls palette, the subpalette appears with the name in the gray space above all the icons on the palette. When you idle the cursor over any icon on any palette, the full name of the control or indicator appears in the blue space above the icons. 8. Click the Numeric icon to access the Numeric palette. 9. Since many physical instruments have knobs to vary the operational parameters of the instrument, we will select the Knob control on the Numeric palette and place it on the front panel to the left of the waveform graph, as shown in Figure 2.35. This knob will provide control over the amplitude of the sawtooth signal once it is properly wired. 10. Select FileSave As and save this VI as Acquiring a Signal.vi in the Users Stuff folder in the Learning directory. Notice that the VI name appears in the closed brackets in the title bar (see Figure 2.35). Save the VIs you edit or create using this book, in the Users Stuff folder in the Learning directory.

Section 2.7 Building a VI Using Express VIs

87

Name of the VI is Acquiring a Signal.vi

Knob

FIGURE 2.35

Adding a Knob to the Generate and Display template.

Examine the block diagram of the VI as it currently is configured. Notice that the block diagram has a blue icon labeled Simulate Signal. This icon represents the Simulate Signal Express VI, which simulates a sine wave by default. To meet our objectives, we must reconfigure the Express VI to simulate a sawtooth signal. 11. Display the block diagram by selecting WindowShow Block Diagram. The Simulate Signal Express VI depicted in Figure 2.36 simulates a signal based on the configuration that you specify. We must interact with the Express VI dialog box to output a sawtooth signal, since the default is a sine wave signal. 12. Right-click the Simulate Signal Express VI and select Properties from the shortcut menu to display the Configure Simulate Signal dialog box, as shown in Figure 2.36. You can also double-click the Express VI to access the dialog box. 13. Select Sawtooth from the Signal Type pull-down menu. Notice that the waveform on the graph in the Result Preview section changes to a sawtooth wave. 14. Click the OK button to apply the current configuration and close the Configure Simulate Signal dialog box. 15. Now we want to expand the Simulate Signal Express VI to show the inputs and outputs to make the wiring easier. Move the cursor over the down arrow at the bottom of the Simulate Signal Express VI as illustrated in Figure 2.37.

88

CHAPTER 2

Virtual Instruments

Select Sawtooth

Sawtooth signal depicted in the Result Preview pane

Signal Type pull-down menu

Click here when done FIGURE 2.36

The Configure Simulate Signal dialog box.

16. When a double-headed arrow appears, click and drag the border of the Express VI down to show one additional input. By default, error out appears. Click on error out and select Amplitude from the pull-down menu. Because the Amplitude input appears on the block diagram, you can configure the amplitude of the sawtooth wave on the block diagram. When inputs, appear on the block diagram and in the configuration dialog box, you can configure the inputs in either location. Now we can complete the VI by finishing up the wiring. To use the Knob control to change the amplitude of the signal, the Knob must be wired to the Amplitude input on the Simulate Signal Express VI. 17. Move the cursor over the Knob terminal until the Positioning tool appears (see Figure 1.24 for review of tools). The Positioning tool, represented by an arrow, is used to select, position, and resize objects. 18. Click the Knob terminal to select it, then drag the terminal to the left of the Simulate Signal Express VI. Make sure the Knob terminal is inside

89

Section 2.7 Building a VI Using Express VIs

Express VI

Right-click to expand menu

Double-headed arrow

Pull down to desired size and release

Amplitude input

FIGURE 2.37

Input and Output of the Simulate Signal Express VI.

the While Loop. Deselect the Knob terminal by clicking a blank space on the block diagram. The cursor does not switch to another tool while an object is selected.

19. Move the cursor over the arrow on the right-hand side of the Knob terminal. This will result in the cursor becoming the Wiring tool. Now we can use the Wiring tool to wire the Knob to the Express VI. 20. When the Wiring tool appears, click the arrow and then click the Amplitude input of the Simulate Signal Express VI to wire the two objects together. When the wire appears and connects the two objects, then data can flow along the wire from the Knob to the Express VI. The final block diagram is shown in Figure 2.38. 21. Select FileSave to save this VI. Now that the VI is ready for execution, we can see if we have successfully achieved the goal of generating a signal and displaying it graphically on the front panel.

90

CHAPTER 2

Virtual Instruments

Knob is wired to the Express VI at the Amplitude input FIGURE 2.38

The block diagram of the completed VI to generate and display a signal.

22. Return to the front panel by selecting WindowShow Front Panel and click the Run button. 23. Move the cursor over the knob control. Notice how the cursor becomes the Operating tool. The Operating tool can be used to change the value of the sawtooth amplitude. 24. Using the Operating tool, turn the knob to adjust the amplitude of the sawtooth wave. Notice how the amplitude of the sawtooth wave changes as you turn the knob. Also notice that the y-axis on the graph autoscales to account for the change in amplitude. To indicate that the VI is running, the Run button changes to a darkened arrow. You cannot edit the front panel or block diagram while the VI runs. 25. Click the Stop button to stop the VI when you are finished experimenting. Your VI development is now finished. The utility of using the provided VI templates is evident in this example. We were able to start from a point much

Section 2.8 Building Blocks: Pulse Width Modulation

91

closer to the desired final VI using the Generate and Display VI than starting with a blank VI. Also, the utility of the Express VIs is demonstrated with the Simulate Signal VI. This VI was easily configured to simulate a sawtooth signal and provided a quick and easy solution to our problem. Clearly, it would have taken more effort to construct the VI from scratch.

BUILDING BLOCK

2.8

BUILDING BLOCKS: PULSE WIDTH MODULATION As we progress through the building blocks in each chapter, we will create a pulse width modulation VI to output a periodic pulse whose length and magnitude are prescribed by controls on the front panel. Recall from your experimentation with the VI in the Chapter 1 Building Block section that an adjustment to either the period or the duty cycle impacts the pulse length or on time. Increasing the period will increase the total on time as well as the total off time. Increasing the duty cycle will increase the on time and decrease the off time such that the total cycle time remains constant. In this Building Block, we will construct a VI to detect the Falling Edge of the signal, which will determine whether the output should toggle to low or remain high on the next cycle. This VI will be used in subsequent Building Block VIs. In Chapter 4 you will learn how to modify this VI to be used within another VI as a subVI. Open a new VI and save it as Falling Edge.vi. Define the output of the VI as a Boolean indicator called Falling Edge. This indicator will be True when a “falling edge” is to occur upon the next clock cycle. The inputs to this VI are Clock, Period, and Duty Cycle. The input Clock is an integer value denoting the current value of the clock. The time units of the clock are not relevant at this time. The input Period is an integer value greater than or equal to 100 specifying the desired cycle duration. The input Duty Cycle is a value between 0 and 1 describing the ratio of on time to total cycle time. The resolution of the clock limits the precision with which we can specify Period and Duty Cycle. In this VI, we will limit the Period to a minimum value of 100 so that duty cycle can be expressed to the nearest hundredth. For example, if we set Duty Cycle = 0.25 and set Period = 100, the clock will increment 25 times before the signal toggles. If we had instead specified Duty Cycle as 0.333, then the clock would need to increment 33.3 times before the output would need to change. Since this is not an integer value, this is not a feasible set of inputs. A similar problem would be encountered for any period of less than 100. Assume for now that the user will always provide valid inputs for Duty Cycle and Period.

92

Numeric controls

CHAPTER 2

Virtual Instruments

Boolean indicator Round To Nearest found on the Programming>>Numeric palette

Found on the Programming>>Numeric palette Equal? found on the Programming>>Comparison palette FIGURE 2.39

The Falling Edge VI.

Figure 2.39 shows a completed version of Falling Edge.vi. The output of the VI should be True whenever the percentage of the period specified by Duty Cycle has elapsed. In order to determine whether this event has occurred, subtract the pulse length (determined by the multiplication of the duty cycle and the period) from the current value of the clock and check to see if this value is evenly divisible by the period length. If this division produces an integer, then Falling Edge is True and the output should go low on the next clock cycle. To check if the result of the division is an even multiple of the period, we use the Round To Nearest function and the Comparison function as shown in Figure 2.39. Experiment with different inputs to the VI and verify that it produces the expected outputs. Try running the VI in Highlight Execution with Duty Cycle = 0.5 and Period = 100. Set the Clock to 0. What happens? The Falling Edge should not be detected. Now try the input Clock = 50. Leaving Highlight Execution on, what happens this time? You should see that the Falling Edge is detected.

Section 2.9 Relaxed Reading

93

When you are done experimenting with your new VI, save it as Falling Edge.vi in the Users Stuff folder in the Learning directory. You will use this VI as a Building Block in later chapters—so make sure to save your work! A working version of Falling Edge.vi can be found in the Building Blocks folder of the Learning directory. Next we need to design a way to detect the Rising Edge. This task is fully defined in design problem D2.1.

2.9

RELAXED READING: AUTONOMOUS DRIVING IN THE DARPA URBAN CHALLENGE

In this reading we learn about Odin, an autonomous vehicle that competed in the Defense Advanced Research Projects Agency (DARPA) Urban Challenge. The VictorTango team at Virginia Tech, using the NI LabVIEW graphical programming environment and National Instruments hardware to enable rapid development, testing, and prototyping, created Odin and placed third overall—just minutes behind the leaders. The DARPA Urban Challenge required competitors to autonomously navigate ground vehicles through an urban environment. The fully autonomous vehicle had to traverse sixty miles in less than six hours while navigating traffic, intersections, and parking lots on the way to specified checkpoints on the road network. In choosing roads to reach the checkpoints as fast as possible, the vehicle had to consider speed limits, possible road blockages, and traffic conditions, while obeying the rules of the road and properly interacting with other traffic. The Urban Challenge rules also required that the vehicle remain in its lane and react safely to other vehicles by matching speed or passing. Additionally, while driving safely and defensively, the vehicle had to heed right-of-way rules at intersections and avoid both static and dynamic obstacles at speeds of up to 30 mph. Team VictorTango was comprised of Virginia Tech undergraduates, graduate students, faculty and TORC Technologies (a spin-off company). The team created the vehicle named Odin, shown in Figure 2.40 on the road at the Urban Challenge. Look closely and notice that there is no human driver. Having only twelve months to develop Odin, the team divided the challenge into four areas: base platform, perception, planning, and communications. Each area took advantage of the capabilities of National Instruments hardware and software. NI hardware was instrumental in interfacing with the existing systems

94

CHAPTER 2

Virtual Instruments

FIGURE 2.40

Odin drives autonomously in the DARPA Urban Challenge under the control of software based on LabVIEW. (Photo courtesy of Team VictorTango, Virginia Polytechnic Institute and State University and TORC technologies.)

in the vehicle and providing interfaces for a human operator. The LabVIEW graphical programming environment was used to develop software, including the communications architecture, the sensor-processing and object-recognition algorithms, the laser range finder and vision-based road detection, the higherlevel driving behaviors, and the low-level vehicle interface. The block diagram shown in Figure 2.41 highlights the uses of NI hardware and LabVIEW in the software architecture. Odin is a 2005 Ford Escape Hybrid modified for autonomous operations. An NI CompactRIO system interfaces with the Ford systems to enable driveby-wire control of the throttle, steering, shifting, and braking. The team used LabVIEW and the LabVIEW Control Design and Simulation Module to develop path curvature and speed control systems deployed to the CompactRIO using the LabVIEW Real-Time and LabVIEW FPGA modules, thereby creating a standalone platform. The LabVIEW Touch Panel Module was used to create a user interface for the touch panel computer installed in the dashboard. Odin needed to determine its position, detect the surrounding road coverage and legal travel lanes, perceive all obstacles in its path, and appropriately classify obstacles as vehicles. Multiple sensors (laser range finders, computer vision cameras, and a high-accuracy Novatel GPS/IMU system) were used. The NI Vision Development Module was used to combine camera and laser range-finder data to determine a road coverage map and the position of each lane. The entire

95

Section 2.9 Relaxed Reading LabVIEW software & NI hardware LabVIEW software Sensors interfaced with LabVIEW

Laser range finders

Dynamic obstacle predictor

PLANNING Obstacles

Object classification

Cameras

GPS/IMU

User interface

PERCEPTION

Road detection

Route planner

Roads

Driving behaviors

Position

Motion planner

Localization

LabVIEW software & NI hardware

C++ software & LabVIEW communications

LabVIEW software

C++ software & LabVIEW communications

Vehicle interface

FIGURE 2.41

Block diagram depicting the uses of NI hardware and LabVIEW in the VictorTango software architecture.

communications framework employed LabVIEW. The Society of Automotive Engineers AS-4 Technical Committee on Unmanned Systems developed the Joint Architecture for Unmanned Systems protocol that was implemented by the design team, enabling automated dynamic configuration. This enhanced the future reusability and commercialization potential of the software. The VictorTango team was composed mostly of mechanical engineers. Appropriately, LabVIEW enabled the development of advanced, high-level perception and planning algorithms by programmers without computer science backgrounds. Furthermore, easy interaction between LabVIEW and the hardware enhanced the ability to implement the time-critical processing crucial for sensor processing and vehicle control. LabVIEW provided an intuitive and easyto-use debugging environment to allow execution and monitoring of the source code in real time for easy hardware-in-the-loop debugging. The LabVIEW environment enabled the team to maximize testing time and promoted rapid prototyping and a greater number of design cycles. Given the very short timeline and the unique nature of the problem, these abilities played a critical role in the overall success, enabling the team to place third overall—just minutes behind the leaders. For more information, please visit the NI website: http://sine.ni.com/cs/ app/doc/p/id/cs-11323.

96

CHAPTER 2

Virtual Instruments

2.10 SUMMARY Virtual instruments (VIs) are the building blocks of LabVIEW. The graphical programming language is known as the G programming language. VIs have three main components: the front panel, the block diagram, and the icon and connector pair. VIs follow a data flow programming convention in which each executable node of the program executes only after all the necessary inputs have been received. Correspondingly, output from each executable node is produced only when the node has finished executing.

KEY TERMS

Boolean controls and indicators: Front panel objects used to manipulate and display or input and output Boolean (True or False) data. Connector: Part of the VI or function node that contains its input and output terminals, through which data passes to and from the node. Connector pane: Region in the upper right corner of the front panel that displays the VI terminal pattern. It underlies the icon pane. Data flow programming: Programming system consisting of executable nodes in which nodes execute only when they have received all required input data and produce output automatically when they have executed. G programming language: Graphical programming language used in LabVIEW. Icon: Graphical representation of a node on a block diagram. Icon pane: Region in the upper right corner of the front panel and block diagram that displays the VI icon. Input terminals: Terminals that emit data. Sometimes called source terminals. Modular programming: Programming that uses interchangeable computer routines. Numeric controls and indicators: Front panel objects used to manipulate and display numeric data.

Exercises

97

Output terminals: Terminals that absorb data. Sometimes called destination terminals. String controls and indicators: Front panel objects used to manipulate and display or input and output text. Terminals: Objects or regions on a node through which data passes. Tip strips: Small yellow text banners that identify the terminal name and make it easier to identify function and node terminals for wiring. Wire: Data path between nodes. Wiring tool: Tool used to define data paths between source and sink terminals.

EXERCISES

E2.1

In this first exercise you get to play a drawing game. Open Drawing.vi located in Chapter 2 in the Exercises & Problems folder of the Learning directory. The front panel should look like the one shown in Figure E2.1. To play the drawing game, run the VI and experiment by varying the controls. After clicking on the Run button to start the VI execution, click on the Begin drawing push button on the front panel. Once the drawing starts, the Stop drawing label appears in the push button. The drawing is halted by clicking on the Stop drawing button. Clicking on the Stop button halts execution of the VI.

E2.2

Construct a VI that uses a round push-button control to turn on a square light indicator whenever the push button is depressed. The front panel is very simple and should look something like the one shown in Figure E2.2.

E2.3

Open Temperature System Demo.vi, located in the tempsys.llb found in the subfolder apps within the examples folder in the LabVIEW directory. The front panel and block diagram are shown in Figure E2.3. Using the Context Help (Ctrl-H), determine the inputs and outputs of the Temperature Status subVI. Sketch the subVI icon and connector showing the inputs and outputs.

E2.4

Open the VI you created in Section 2.5 called Simple Math.vi. (a) Locate all of the controls in this VI, specifying their label and type (numeric, Boolean, or string).

98

CHAPTER 2

Virtual Instruments

FIGURE E2.1

The Drawing.vi front panel.

FIGURE E2.2

A front panel using a round push-button control and a square light indicator.

(b) Locate all of the indicators in this VI, specifying their label and type (numeric, Boolean, or string). (c) Locate and identify all of the nodes in this VI. (d) Locate and identify all of the terminals in this VI.

Exercises

99

Temperature Status subVI

FIGURE E2.3

The Temperature System Demo VI.

(e) Replace the two numeric controls labeled A and B with dials by rightclicking on each of the two dials, and on the shortcut menu under Visible Items select Digital Display. (f) Run the program continuously and experiment changing values in both the dials and the digital displays. E2.5

Create a VI which compares the inputs on two numeric controls and turns on an LED if these values are equal. Use the Select function on the Comparison palette. The front panel should resemble Figure E2.5.

E2.6

Design a VI which determines whether a number input on a floating point numeric control is an integer. Place an LED on the front panel that lights whenever the input is an integer. One method of accomplishing this goal is seen in the Building Blocks exercise for this chapter. However, there are multiple solutions.

E2.7

On which palettes are the following controls located? What is the purpose of these controls? (a) OK Button (b) Square Push Button

100

CHAPTER 2

Virtual Instruments

FIGURE E2.5

The Compare Numbers VI front panel.

(c) String (d) Intensity Graph (e) RealMatrix Use the Search button on the Controls palette as described in Section 2.3.1 to locate the controls.

E2.8

On which palettes are the following functions located? What is the purpose of these functions? (a) Mathscript Node (b) Derivative x(t) (c) Sine Wave (d) Select (e) Wait (ms) Use the Search button on the Functions palette as described in Section 2.3.1 to locate the finctions.

E2.9

Consider the block diagram in Figure E2.9. Using the concept of data flow, answer the following questions: (i) Which function executes first? (a) Add (b) Multiply

Exercises

(c) Subtract (d) Unknown (ii) Which function executes first? (a) Add (b) Divide (c) Random Number (d) Unknown (iii) Which function executes last? (a) X squared (b) Multiply (c) Compound Arithmetic (d) Unknown

FIGURE E2.9

Investigations into data flow.

101

102

CHAPTER 2 E2.10

Virtual Instruments

Consider the block diagram in Figure E2.10. Using the concept of data flow, list the functions in the order that they execute. Some of the functions may execute at the same time; if so, list them in a single group.

FIGURE E2.10

Investigations into data flow.

PROBLEMS P2.1

Open the VI created in Section 2.7, Acquiring a Signal.vi. Modify this VI so that it meets the following specifications: Two sine waves are generated using the Simulate Signal Express VI and displayed on corresponding graphs on the front panel. The amplitude of each sine wave can be adjusted to any value using numeric controls on the front panel.

Problems

103

Using the Comparison express VI on the Comparison palette, compare the two signals and light an LED if the two signals are equal. Save the VI as Compare Signals.vi in the Users Stuff folder in the Learning directory. The front panel should resemble the front panel seen in Figure P2.1.

FIGURE P2.1

The front panel for the Compare Signals VI.

P2.2

Construct a VI that performs the following tasks: Takes two floating-point numbers as inputs on the front panel: X and Y. Subtracts Y from X and displays the result on the front panel. Divides X by Y and displays the result on the front panel. If the input Y = 0, a front panel LED lights up to indicate division by zero. Name the VI Subtract and Divide.vi and save it in the Users Stuff folder in the Learning directory.

P2.3

Construct a VI that uses a vertical slide control for input and a meter indicator for output display. A front panel and block diagram that can be used as a guide are shown in Figure P2.3. Referring to the block diagram, you see a pair of dice, which is the icon for a Random Number function. You will find the Random Number function on the ProgrammingNumeric palette. Using the Labeling tool, change the maximum value of the range of the Slide control and the

104

CHAPTER 2

Virtual Instruments

Meter indicator. Set the maximum value to 100 by selecting the default value and typing in “100” in the text box on both the Slide and Meter. When running the VI, any input you provide via the vertical slide will be reflected on the meter indicator. The Random Number function adds “noise” to the input so that the meter output will not be exactly the same as the input. Run the VI in Run Continuously mode and vary the slide input.

FIGURE P2.3

Using a vertical slide control and a meter indicator.

P2.4

Create a VI that has a numeric control to input a number x and uses the Add and Multiply functions to calculate 3x 2 + 2x + 5.0. Display the output using a numeric indicator.

P2.5

Use a VI template and modify Express VIs to create a program that generates a Triangle Wave with a frequency of 125 Hz and added noise.

P2.6

Construct a VI that accepts an input in feet and converts this value to its equivalent in both meters and miles, displaying each on an indicator on the front panel. Recall that 1 mile = 5,280 feet and 1 meter = 3.281 feet.

Problems

105

Using the VI, confirm that 10,000 feet is equivalent to 1.89 miles and 3047.85 meters. Save the VI as Convert.vi in the Users Stuff folder in the Learning directory. P2.7

Design a VI that computes both the sum and the difference of two numeric inputs, labeled x and y. It should then light one of three LEDs, depending on whether or not the sum is greater than, equal to, or less than the difference between the two inputs. The front panel should resemble the front panel seen in Figure P2.7.

FIGURE P2.7

The front panel for the Comparison VI.

Using the VI, test the following three conditions: 1. x = 4 and y = 1 2. x = 3 and y = 0 3. x = 2 and y = −3 Save the VI as Comparison.vi in the Users Stuff folder in the Learning directory. P2.8

Create a VI that will calculate your age in a future year. The VI should have three numeric controls labeled Current Year, Current Age, and Future Year and one numeric indicator labeled Age in Future Year.

106

CHAPTER 2

Virtual Instruments

Use the VI to solve the following: If the year is 2010 and you are 24 years old, how old will you be in 2052? Save the VI as Age in Future.vi in the Users Stuff folder in the Learning directory. P2.9

Create a VI that will convert seconds into a display consisting of hours, minutes, and seconds. The VI should have one numeric control labeled seconds and three numeric indicators labeled hours, minutes, and seconds. Use the VI to solve the following: How many hours, minutes, and seconds are there in 86400 seconds? Save the VI as Converting Time.vi in the Users Stuff folder in the Learning directory.

DESIGN PROBLEMS D2.1

In the Building Blocks section at the end of this chapter, you created a VI called Falling Edge.vi to be used in determining where falling edges should occur on the output of the pulse width modulation VI. Now create a VI called Rising Edge.vi that returns a value of True on its Boolean output, Rising Edge, whenever a full output cycle has completed and a rising edge is to occur on the next clock cycle. Unlike the Falling Edge VI, this VI will only have two inputs: Period and Clock. The input Duty Cycle is not necessary in this VI since a change in the duty cycle of a signal changes only the location of the falling edge and not the location of the rising edge. Save the VI as Rising Edge.vi in the Building Blocks folder in the Learning directory. The front panel should resemble the front panel seen in Figure D2.1.

D2.2

In this design problem you will create a VI that simulates a vending machine. The vending machine sells three items: 1. Candy bars for $0.80 each, 2. Potato chips for $0.60 a bag, and 3. Chewing gum for $0.40. The vending machine accepts only five dollar bills, one dollar bills, quarters, dimes, and nickels. Inputs on the front panel should include a numeric control for the user to enter the amount of money inserted into the vending machine and three more integer numeric controls that designate how many of each item the user wishes to purchase from the vending machine. Your VI should check to see if the amount of money input is greater than or equal to the total cost of the selected purchase. If there is not enough money, display a message notifying the customer that more money is needed to meet the total, using the Display Message to User Express VI. Then light an LED indicator on the front panel and display the amount needed on a numeric indicator. If enough money is inserted into the vending machine based on the user selection, output the change the user will

Design Problems

107

FIGURE D2.1

The front panel for the Rising Edge VI.

receive, showing the quantity of dollar bills, quarters, dimes, and nickels to be dispensed by the vending machine. D2.3

Construct a VI in which the user guesses an integer between 1 and 5 using a numeric control. Generate a random integer in this range, display it with a numeric indicator, and compare it to the input. If the numbers are equal, light an LED and display a message using the One Button Dialog function to announce that the user guessed correctly. If the numbers are not equal, display a message notifying the user that the guess was not correct. Save the VI as Guessing Game.vi in the Users Stuff folder in the Learning directory. The front panel should resemble the front panel seen in Figure D2.3.

D2.4

Suppose that you are holding US currency (denoted by USD) and are planning a trip to visit either Brazil or Bolivia. To assist in computing the currency conversions, create a VI that uses the currency exchange rate for the Brazilian Real (denoted by BRL) and the Bolivian Boliviano (denoted by BOB). The VI should convert the currencies to/from USD to BRL/BOB. It should have a Boolean switch to select the desired country and another Boolean switch to specify whether you are converting to or from US dollars. You will always exchange from USD to BRL/BOB or from BRL/BOB to USD.

108

CHAPTER 2

Virtual Instruments

FIGURE D2.3

The front panel for the Guessing Game VI.

Assume that the current exchange rate is 1 USD = 1.96 BRL and 1 USD = 7.02 BOB. Use the front panel in Figure D2.4 as a guide. Save the VI as Currency Exchange.vi in the Users Stuff folder in the Learning directory. Use the Select function on the ProgrammingComparison palette.

D2.5

Develop a VI to find the roots of the quadratic equation ax 2 + bx + c = 0 where the constants a, b, and c are real numbers and a > 0. The two roots of the equation can be either real or complex numbers. The VI should have three numeric controls and two numeric indicators. Save the VI as Quadratic Formula.vi in the Users Stuff folder in the Learning directory. Hint: After you place the numeric indicators on the front panel, right click on each indicator and in the shortcut menu select RepresentationComplex Single. This will allow you to display the roots as complex numbers (as well as real numbers).

109

Design Problems

FIGURE D2.4

Currency converter front panel.

D2.6

Develop a VI that computes the surface area and volume of a sphere. The only input is the sphere diameter, denoted by d. The VI should have one numeric control and two numeric indicators. The volume of a sphere is 4 V = πr 3 3 where r = d/2 is the radius of the sphere. The surface area is given by S = 4πr 2 Save the VI as Sphere.vi in the Users Stuff folder in the Learning directory. Hint: To compute r 3 in the formula for the volume, it might be useful to use the Power Of X function.

D2.7

Develop a VI that computes f = 5x 2 + 9y − z where the inputs x, y, and z are real numbers. Provide two solution methods. For the first solution use only arithmetic functions (such as Square, Add,

110

CHAPTER 2

Virtual Instruments

Multiply, and Subtract). For the second solution use the Formula Express VI. Which solution is easier to program? Which solution provides a quicker way to change the formula? Which solution executes faster? You can find the Formula Express VI on the ExpressArithmetic & Comparison palette.

CHAPTER 3

Editing and Debugging Virtual Instruments 3.1 3.2 3.3 3.4 3.5 3.6

Editing Techniques 112 Debugging Techniques 141 Property Nodes 153 A Few Shortcuts 155 Building Blocks: Pulse Width Modulation 156 Relaxed Reading: Using Graphical System Design for Tumor Treatments 158 3.7 Summary 160

Like text-based computer programs, virtual instruments are dynamic. VIs change as their applications evolve (usually increasing in complexity). For instance, a VI that initially only performs addition may at a later time be updated to add a multiplication capability. You need debugging and editing tools to verify and test VI coding changes. Since programming in LabVIEW is graphical in nature, editing and debugging are also graphical, with options available in pull-down and shortcut menus and various palettes. We learn how to programmatically read and write the properties of objects using the Property Node. The important topics of cleaning up the block diagram, routing wires, and reusing snippets of code are also presented. Debugging subjects covered include execution highlighting (you can watch the code run!), single-stepping through code, and inserting probes to view data as the VI executes.

G OA L S

1. Learn to access and practice with VI editing tools. 2. Learn to access and practice with VI debugging tools.

111

112

CHAPTER 3

Editing and Debugging Virtual Instruments

3.1 EDITING TECHNIQUES 3.1.1

Creating Controls and Indicators on the Block Diagram As discussed in previous chapters, when building a VI you can create controls and indicators on the front panel and know that their terminals will automatically appear on the block diagram. Switching to the block diagram, you can begin wiring the terminals to functions (such as addition or multiplication functions), subVIs, or other objects. In this section we present an alternative method to create and wire controls and indicators in one step on the block diagram. For the following discussions, you should open a new VI and follow along by repeating the steps as presented. 1. Open a new VI and switch to the block diagram. 2. Place the Square Root function located in the ProgrammingNumeric subpalette of the Functions palette on the block diagram, as shown in Figure 3.1.

FIGURE 3.1

Add the Square Root function to the block diagram.

113

Section 3.1 Editing Techniques

Right-click on the square root input terminal Control is created and wired to Square Root function

Select Create Control

FIGURE 3.2

Front panel control created for the Square Root function.

3. Now we want to add (and wire) a control terminal to the Square Root function. As shown in Figure 3.2, you right-click on the left side of the square root function and select Control from the Create menu. The result is that a control terminal is created and automatically wired to the Square Root function. Switch to the front panel and notice that a numeric control has appeared! To change a control to an indicator (or vice versa), right-click on the terminal (on the block diagram) or on the object (on the front panel) and select Change to Indicator (or Change to Control). 4. In fact, you can wire indicators and constants by right-clicking on the node terminal and choosing the desired selection. For example, right-clicking on the right side of the Square Root function and selecting Indicator from the Create menu creates and automatically wires a front panel indicator, as illustrated in Figure 3.3. In many situations, you may wish to create and automatically wire a constant to a terminal, and you accomplish this by right-clicking and choosing Constant from the Create menu. To change a control or indicator (for example, from a knob to a dial), right-click on the object on the front panel and select Replace. The Controls palette will appear, and you can navigate to the desired new object. 5. The resulting control and indicator for the Square Root function are shown in Figure 3.4.

114

CHAPTER 3

Editing and Debugging Virtual Instruments

Right-click on the square root output terminal

Indicator is created and wired to the Square Root function

Select Create Indicator

FIGURE 3.3

Front panel indicator created for the Square Root function.

Numeric control

Front panel Block diagram

Numeric indicator

Square Root function FIGURE 3.4

Front panel and block diagram for the Square Root function.

3.1.2

Selecting Objects The Positioning tool selects objects in the front panel and block diagram windows. In addition to selecting objects, you use the Positioning tool to move and resize objects (more on these topics in the next several sections). To select an object, click the left mouse button while the Positioning tool is over the object. When the object is selected, a surrounding dashed outline appears, as shown

115

Section 3.1 Editing Techniques

in Figure 3.5. To select more than one object, shift-click (that is, hold down and simultaneously click) on each additional object you want to select. You also can select multiple objects by clicking in a nearby open area and dragging the cursor until all the desired objects lie within the selection rectangle that appears (see Figure 3.6).

Use the Positioning tool A moving dashed outline appears

Select the numeric control

FIGURE 3.5

Selecting an object using the Positioning tool.

Place cursor here and click-and-drag dashed box to surround the desired object

Objects to be selected

Selected objects FIGURE 3.6

Selecting a group of objects.

Cursor

116

CHAPTER 3

Editing and Debugging Virtual Instruments

Sometimes after selecting several objects, you may want to deselect just one of the objects (while leaving the others selected). This is accomplished by shift-clicking on the object you want to deselect—the other objects will remain selected, as desired.

3.1.3

Moving Objects You can move an object by clicking on it with the Positioning tool and dragging it to a desired location. The objects of Figure 3.6 are selected and moved as shown in Figure 3.7. Selected objects can also be moved using the up/down and right/left arrow keys. Pressing the arrow key once moves the object one pixel; holding down the arrow key repeats the action. Holding down the key while using the arrow keys moves the object several pixels at a time. In this manner, you can move and locate your objects very precisely.

Select and move

FIGURE 3.7

Selecting and moving a group of objects.

The direction of movement of an object can be restricted to being either horizontal or vertical by holding down the key when you move the object. The direction you initially move decides whether the object is limited to horizontal or vertical motion. If you change your mind about moving an object while you are in the midst of dragging it to another location, continue to drag until the cursor is outside all open windows and the dashed line surrounding the selected object disappears—then release the mouse button. This will cancel the move operation and the object will not move. Alternatively, if the object is dragged and dropped to an undesirable location, you can select Undo Move from the Edit menu to undo the move operation.

Section 3.1 Editing Techniques

3.1.4

117

Deleting and Duplicating Objects You can delete objects by selecting the object(s) and choosing Delete from the Edit menu or pressing or (Windows) or (Macintosh). Most objects can be deleted; however you cannot delete certain components of a control or indicator, such as the label or digital display. You must hide these components by right-clicking and deselecting Visible Items Label or Visible ItemsDigital Display from the shortcut menu. Most objects can be duplicated, and there are three ways to duplicate an object—by copying and pasting, by cloning, and by dragging and dropping. In all three cases, a complete new copy of the object is created, including, for example, the terminal belonging to a front panel control and the control itself. You can copy text and pictures from other applications and paste them into LabVIEW. To clone an object, click the Positioning tool over the object while pressing for Windows (or on the Mac) and drag the object to its new location. After you drag the selection to a new location and release the mouse button, a copy of the object appears in the new location, and the original object remains in the original location. When you clone or copy objects, the copies are labeled by the same name as the original with an incrementing number at the end of each label (copy2, copy3, and so forth). You also can duplicate objects using EditCopy and then EditPaste from the Edit menu. First, select the desired object using the Positioning tool and choose EditCopy. Then click at the location where you want the duplicate object to appear and choose EditPaste from the Edit menu. You can use this process to copy and paste objects within a VI or even copy and paste objects between VIs. The third way to duplicate objects is to use the drag-and-drop capability. In this way, you can copy objects, pictures, or text between VIs and from other applications. To drag and drop an object, select the object, picture, or text file with the Positioning tool and drag it to the front panel or block diagram of the target VI. You can also drag VIs from the file system (in Windows and on the Mac) to the active block diagram to create subVIs (we will discuss subVIs in Chapter 4).

3.1.5

Resizing Objects You can easily resize most objects. Resizing handles appear when you move the Positioning tool over a resizable object, as illustrated in Figure 3.8. On rectangular objects the resizing handles appear at the corners of the object; resizing

118

CHAPTER 3

Editing and Debugging Virtual Instruments Click and drag to desired size

Resizing handles Circular object

Resized objects

Rectangular object Resizing handles

Click and drag to desired size

FIGURE 3.8

Resizing rectangular and circular objects.

circles appear on circular objects. Passing the Positioning tool over a resizing handle transforms the tool into a resizing cursor. To enlarge or reduce the size of an object, place the Positioning tool over the resizing handle and click and drag the resizing cursor until the object is the desired size. When you release the mouse button, the object reappears at its new size. The resizing process is illustrated in Figure 3.8. To cancel a resizing operation, continue dragging the frame corner outside the active window until the dotted frame disappears—then release the mouse button and the object will maintain its original size. Alternately, if the object has already been resized and you want to undo the resizing, you can use the Undo Resize command found in the Edit pull-down menu. Some objects only change size horizontally or vertically, or keep the same proportions when you resize them (e.g., a knob). In these cases, the resizing cursor appears the same, but the dotted resize outline moves in only one direction. To restrict the resizing of any object in the vertical or horizontal direction (or to maintain the current proportions of the object) hold down the key as you click and drag the object. You may want to resize multiple objects to have similar dimensions, either horizontally, vertically, or both. To do this, use the Resize Objects menu on the LabVIEW toolbar as will be described in Section 3.1.10.

Section 3.1 Editing Techniques

3.1.6

119

Labeling Objects Labels are blocks of text that annotate components of front panels and block diagrams. There are two kinds of labels—free labels and owned labels. Owned labels belong to and move with a particular object and describe that object only. You can hide these labels but you cannot copy or delete them independently of their owners. Free labels are not attached to any object, and you can create, move, or dispose of them independently. Use them to annotate your front panels and block diagrams. Free labels are one way to provide accessible documentation for your VIs. You use the Labeling tool to create free labels or to edit either type of label. To create a free label, double-click anywhere in an open area and type the desired text in the bordered box that appears. An example of creating a free label is shown in Figure 3.9.

Select Labeling tool by double-clicking on the block diagram

Enter Text button Type in desired text and click on Enter Text button when finished

FIGURE 3.9

Creating a free label.

120

CHAPTER 3

Editing and Debugging Virtual Instruments

When finished entering the text, click on the Enter Text button on the toolbar, which appears on the toolbar to remind you to end your text entry. You can also end your text entry by pressing the key on the numeric keypad (if you have a numeric keypad). If you do not type any text in the label, the label disappears as soon as you click somewhere else. When you add a control or an indicator to the front panel, an owned label automatically appears. The label box is ready for you to enter the desired text. If you do not enter text immediately, the default label remains. To create an owned label for an existing object, right-click on the object and select Visible ItemsLabel from the shortcut menu (see Figure 1.13). You can then enter your text in the bordered box that appears. If you do not enter the text immediately, the label disappears. You can copy the text of a label by double-clicking on the text with the Labeling tool or dragging the Labeling tool across the text to highlight the desired text. When the desired text is selected, choose EditCopy to copy the text onto the clipboard. You can then highlight the text of a second label and use EditPaste to replace the highlighted text in the second label with the text from the clipboard. To create a new label with the text from the clipboard, double-click on the screen where you want the new label positioned and then select EditPaste. The resizing technique described in the previous section also works for labels. You can resize labels as you do other objects by using the resizing cursor. Labels normally autosize; that is, the label box automatically resizes to contain the text you enter. If for some reason you do not want the labels to automatically resize to the entered text, right-click on the label and select Size to Text to toggle autosizing off. The text in a label remains on one line unless you enter a carriage return to resize the label box. By default, the (or ) key is set to add a new line. This can be changed in ToolsOptionsEnvironment so that the text input is terminated with the (or ) key. 3.1.7

Changing Font, Style, and Size of Text Using the Text Settings in the toolbar, you can change the font, style, size, and alignment of any text displayed in a label or on the display of controls and indicators. Certain controls and indicators display text in multiple locations— for example, on graphs (a type of indicator), the graph axes scale markers are made up of many numbers, one for each axes tick. You have the flexibility to modify each text display independently. Text settings were discussed in Chapter 1 and are shown in Figure 1.7. Notice the word Application showing in the Text Settings pull-down menu, which also contains the System, Dialog, and Current options. The last option

121

Section 3.1 Editing Techniques

in the list—the Current Font—refers to the last font style selected. The predefined fonts are used for specific portions of the various interfaces: The Application font is the default font. It is used for the Controls and Functions palettes. The System font is the font used for menus. The Dialog font is the font used for text in dialog boxes. These fonts are predefined so that they map “best” when porting your VIs to other platforms. Text Settings has size, style, justify, and color options. Selections made from any of these submenus (that is, size, style, etc.) apply to all selected objects. For example, if you select a new font while you have a knob selected, the labels, scales, and digital displays all change to the new font. Figure 3.10 illustrates the situation of changing the style of all the text associated with a knob from plain text to bold text. If you select any objects or text and make a selection from the Text Settings pull-down menu, the changes apply to everything selected. The process of selecting just the text of an owned label of a knob is illustrated in Figure 3.11. Once the desired text is selected (in this case, click on the label once to select it), you can make any changes you wish by selecting the proper pull-down submenu from Text Settings. If no text is selected, the font changes apply to the default font, so that labels created from that point on will reflect the new default font, while not affecting the font of existing labels. When working with objects that have multiple pieces of text (e.g. slides and knobs), remember that text settings selections affect the objects or text currently

Bold text

Plain text

Select the knob by clicking on it

Pull down menu from the Text Settings Choose bold

FIGURE 3.10

Changing the font style on a knob control.

122

CHAPTER 3

Editing and Debugging Virtual Instruments

Highlight the text display by clicking on it and use the options from Text Settings

FIGURE 3.11

Selecting text for modification of style, font, size, and color.

selected. For example, if you select the entire knob while selecting bold text, the scale, digital display, and label all change to a bold font, as shown in Figure 3.10. As shown in Figure 3.12(a), when you select the knob label, followed by selecting bold text from the Style submenu of the Text Settings pull-down menu, only the knob label changes to bold. Similarly, when you select text from a scale marker while choosing bold text, all the markers change to bold, as shown in Figure 3.12(b). If you select Font Dialog in the Text Settings while a front panel is active, the dialog box shown in Figure 3.13 appears. If a block diagram is active instead, the Diagram default option at the bottom of the dialog box is checked. With either the Panel default or Diagram default checkboxes selected, the other selections made in this dialog box will be used with new labels on the front panel or block diagram. In other words, if you click the Panel default and/or Diagram default checkboxes, the selected font becomes the current font for the front panel, the block diagram, or both. The current font is used on new labels. The checkboxes allow you to set different fonts for the front panel and block diagram. For example, you could have a small font on the block diagram and a large one on the front panel. 3.1.8

Selecting and Deleting Wires A single horizontal or vertical piece of wire is known as a wire segment. The point where three or four wire segments join is called a junction. A wire branch contains all the wire segments from one junction to another, from a terminal to the next junction, or from one terminal to another if there are no junctions in between. You select a wire segment by clicking on it with the Positioning tool. Clicking twice selects a branch, and clicking three times selects the entire wire. See Figure 3.14 for an example of selecting a branch, segment, or an entire wire.

123

Section 3.1 Editing Techniques

Select bold style from the Text Settings»Style pull-down menu

Select label text by clicking on it

Label changes from plain to bold style

(a)

Select scale marker text by clicking on any number All scale markers change from plain to bold style

(b)

FIGURE 3.12

Changing text attributes on a knob.

3.1.9

Wire Stretching and Broken Wires Wired objects can be moved individually or in groups by dragging the selected objects to a new location with the Positioning tool. The wires connecting the objects will stretch automatically. If you want to move objects from one diagram to another, the connecting wires will not move with the selected objects,

124

CHAPTER 3

Editing and Debugging Virtual Instruments

Select, System, Dialog, or Application

Select Panel or Diagram

FIGURE 3.13

Using the Font Dialog box to change font, size, alignment, color, and style.

Segment

Segment

Junction Bend

Click twice to select a branch

Click once to select a segment

Click three times to select an entire wire

FIGURE 3.14

Selecting a segment, branch, or an entire wire.

125

Section 3.1 Editing Techniques

Select wired object and drag it to the new desired location

FIGURE 3.15

Moving wired objects.

unless you select the wires as well. After selecting the desired objects and the connecting wires, you can cut and paste the objects as a unit to another VI. An example of stretching a wire is shown in Figure 3.15. In the illustration, the object (in this case, a numeric indicator) is selected with the Positioning tool and stretched to the desired new location. Wire stretching occasionally leaves behind loose ends. Loose ends are wire branches that do not connect to a terminal. Your VI will not execute until you remove all loose ends. An example of a loose end is shown in Figure 3.16. Loose ends can be easily removed using the EditRemove Broken Wires command.

Loose end FIGURE 3.16

Loose ends.

When you make a wiring mistake, a broken wire (indicated by a dashed line with a red X) appears. Figure 3.17 shows a dashed line that represents a broken

Broken wire (black dashed line with red x)

Good wire (solid orange line)

(a) Broken wiring

(b) Good wiring

FIGURE 3.17

Locating broken wires.

126

CHAPTER 3

Editing and Debugging Virtual Instruments

wire. It is inevitable that broken wires will occur in the course of programming in LabVIEW. One common mistake is to attempt to connect two control terminals together or to connect a control terminal to an indicator terminal when the data types do not match (for example, connecting a Boolean to a numeric). If you have a broken wire, you can remove it by selecting it with the Positioning tool and eliminate it by pressing the key. If you want to remove all broken wires on a block diagram at one time, choose Remove Broken Wires from the Edit menu. There are many different conditions leading to the occurrence of broken wires. Some examples are: Wire type, dimension, unit, or element conflicts—A wire type conflict occurs when you wire two objects of different data types together, such as a numeric and a Boolean, as shown in Figure 3.18(a). Multiple wire sources—You can wire a control to multiple output destinations (or indicators), but you cannot wire multiple data sources to a single destination. In the example shown in Figure 3.18(b), we have attempted to wire two data sources (that is, the random number and the constant ln 2) to one indicator. This produces a broken wire and must be fixed by disconnecting the random number (represented by the dice) or disconnecting the ln 2 constant. Another example of a common multiple sources error occurs during front panel construction when you inadvertently place a numeric control on the front panel when you meant to place a numeric indicator. If you do this and then try to wire an output value to the terminal of the front panel control, you will get a multiple sources error. To fix this error, just right-click on the terminal and select Change To Indicator.

(a) Wire type conflict

(b) Multiple wire sources

(c) No wire source

(d) Wire cycles

FIGURE 3.18

Typical wiring errors leading to broken wire indications.

Section 3.1 Editing Techniques

127

No wire source—An example of a wire with no source is shown in Figure 3.18(c). This problem is addressed by providing a control. Another example of a situation leading to a no-source error is if you attempt to wire two front panel indicators together when one should have been a control. To fix this error, just right-click on a terminal and select Change to Control. Wire cycles—In most cases, wires must not form closed loops of icons or structures, as shown in Figure 3.18(d). These closed loops are known as cycles. LabVIEW will not execute cycles because each node waits on the other to supply it data before it executes (remember data flow!). Feedback nodes (discussed in Chapter 5) provide the proper mechanism to feed back data in a repetitive calculation or loop. LabVIEW has a Simulation Module (available as an add-on feature) that permits users to integrate continuoustime and discrete-time simulations including general feedback loops within their LabVIEW block diagrams. Sometimes you have a faulty wiring connection that is not visible because the broken wire segment is very small or is hidden behind an object. If the Broken Run button appears in the toolbar, but you cannot see any problems in the block diagram, select EditRemove Broken Wires—this will remove all broken wires in case there are hidden, broken wire segments. If the Run button returns, you have corrected the problem. If the wiring errors have not all been corrected after selecting EditRemove Broken Wires, click on the Broken Run button to see a list of errors. Click on one of the errors listed in the Error List dialog box, and you will automatically be taken to the location of the erroneous wire in the block diagram. You can then inspect the wire, detect the error, and fix the wiring problem. LabVIEW automatically finds a wire route around existing objects on the block diagram when you are wiring components. The natural inclination of the automatic routing is to decrease the number of bends in the wire. When possible, automatically routed wires from control terminals exit the right side of the terminal, and automatically routed wires to indicator terminals enter the left side of the terminal. If you find that you have a messy wiring situation on your block diagram you can easily fix it. You can right-click any wire and select Clean Up Wire from the shortcut menu to automatically route an existing wire. This may help in debugging your VI since it will be easier to see the wire routes on the block diagram. You can also clean up wires on the entire block diagram by selecting the Clean Up Diagram button on the toolbar (see Figure 1.11). If for some reason you want to temporarily disable automatic wire routing and route a wire manually, first use the Wiring tool to click a terminal and release the mouse. Then press the key to temporarily disable automatic wire routing for the current wire. Click another terminal to complete the wiring. Once the wiring is complete, the automatic wire routing is resumed. You also can

128

CHAPTER 3

Editing and Debugging Virtual Instruments

temporarily disable automatic routing after you click to start wiring by holding down the mouse button while you wire to another terminal and then releasing the mouse button. After you release the mouse button, automatic wire routing resumes. 3.1.10

Aligning, Distributing, and Resizing Objects To align a group of objects, first select the desired objects. Then choose the axis along which you want to align them from the Align Objects pull-down menu in the toolbar. You can align objects along the vertical axis using left, center, or right edge. You also can align objects along a horizontal axis using top, center, or bottom edge. Open a new VI and place three objects (such as, three numeric controls) on the front panel and experiment with different aligning options. Figure 3.19 illustrates the process of aligning three objects by their left edges.

Choose Left Edges

Left-click Align Objects

Select three objects for alignment

Three objects are aligned by their left edges! FIGURE 3.19

Aligning objects.

129

Section 3.1 Editing Techniques

In a similar fashion, you can distribute a group of objects by selecting the objects and then choosing the axis along which you want to distribute the selected objects from the Distribute Objects pull-down menu in the toolbar (see Figure 1.9). In addition to distributing selected objects by making their edges or centers equidistant, four menu items at the right side of the ring let you distribute the gaps between the objects, horizontally or vertically. For example, the three objects shown in Figure 3.20 are distributed at different distances from each other. If we want them to be equally spaced by their top edges, we can use the Distribute Objects pull-down menu, as shown in Figure 3.20, to rearrange the elements at equal spacing. You can use the Resize Objects pull-down menu to resize multiple front panel objects to the same size. For example, in Figure 3.21, three objects of different widths are selected. Then using the Resize Objects pull-down menu, the Maximum Width icon is selected resulting in the three objects taking the width of the String, which originally had the largest width.

Select Top Edge Left-click Distribute Objects Select three objects for distributing

Equally spaced by top edges

FIGURE 3.20

Distributing objects.

130

CHAPTER 3

Editing and Debugging Virtual Instruments

Select Maximum Width Left–click Resizing Objects Select three objects for resizing

All three objects now at width of String FIGURE 3.21

Resizing objects.

3.1.11

Coloring Objects You can customize the color of many LabVIEW objects. However, the coloring of objects that convey information via their color is unalterable. For example, block diagram terminals of front panel objects and wires use color codes for the type and representation of data they carry, so you cannot change their color. To change the color of an object (or the background of a window), rightclick on the object of interest with the Coloring tool from the Tools palette, as seen in Figure 3.22. Choose the desired color from the selection palette that appears. If you keep the mouse button pressed as you move through the color selection palette, the object or background you are coloring redraws with the color the cursor currently is touching. This gives you a “real-time” preview of the object in the new color. If you release the mouse button on a color, the

Section 3.1 Editing Techniques

131

Coloring tool Foreground color Background color

Right-click the object

Select T to make object or label transparent Choose foreground color Choose background color

Right-click color display

Selected color is displayed here

Access dialog box to customize colors

FIGURE 3.22

Customizing the color of objects.

selected object retains the chosen color. To cancel the coloring operation, move the cursor out of the color selection palette before releasing the mouse button, or use the EditUndo Color Change command after the undesired color change has been made. If you select the box with a T in it, the object is rendered transparent. One use of the T (transparent) option is to create numeric controls without the standard three-dimensional border. Transparency affects the appearance but not the function of the object. Some objects have both a foreground and a background color that you can set separately. The foreground color of a knob, for example, is the main dial area, and the background color is the base color of the raised edge. On the Coloring tool, you select the foreground or background, as illustrated in Figure 3.22. Clicking the upper left box on the Coloring tool and then clicking on an object on the front panel will color the object’s foreground. Similarly, clicking the lower right box on the Coloring tool and then clicking on an object on the front panel will color the object’s background.

132

CHAPTER 3

Editing and Debugging Virtual Instruments

Click on the color palette to select desired color

Range of 0-255

FIGURE 3.23

The Color dialog box.

Selecting the button on the lower right-hand side in the palette (see Figure 3.23) accesses a dialog box with which you can customize the colors. Each of the three color components, red, green, and blue, describes eight bits of a 24-bit color (in the lower right-hand side of the Color dialog box). Therefore, each component has a range of 0 to 255. The last color you select from the palette becomes the current color. Clicking on an object with the Color tool sets that object to the current color. Using the Color Copy tool, you can copy the color of one object and transfer it to a second object without using the Color palette. To accomplish this, click with the Color Copy tool on the object whose color you want to transfer to another object. Then, select the Color tool and click on another object to change its color. Practice with Editing

In this exercise you will edit and modify an existing VI to look like the panel shown in Figure 3.24. After editing the VI, you will wire the objects in the block diagram and run the program. 1. Open the Editing VI by choosing Open from the File menu (or using the Open button on the Getting Started screen) and searching in the Chapter 3 folder in the Learning directory. The front panel of the Editing VI contains a number of objects depicted in Figure 3.25. The objective of this exercise is to make the front panel of the Editing VI look like the one shown in Figure 3.24. If you have a color monitor, you can see the final VI in color by opening the Editing Done VI located in the Chapter 3 folder in the Learning directory. 2. Add an owned label to the numeric control using the Positioning tool by right-clicking on the numeric control and selecting Visible ItemsLabel from the menu. Type the text Temperature offset inside the bordered box

133

Section 3.1 Editing Techniques

Red knob

Add bold label

Change background to blue

Change background color to gold

Add bold label Change color of the thermometer bulb to green Move numeric indicator to the base of the thermometer

Move label from top to bottom of waveform graph

FIGURE 3.24

The front panel for the Editing VI.

Thermometer

Alignment ring

Waveform graph

Waveform graph legend

Numeric control Knob

Stop Thermometer button bulb

Waveform graph palette

FIGURE 3.25

The Editing VI with various objects: knob, waveform chart, thermometer, and numeric control.

134

CHAPTER 3

Editing and Debugging Virtual Instruments

and click the mouse outside the label or click the Enter Text button on the left-hand side of the toolbar. 3. Reposition the waveform graph and numeric control. Click on the waveform graph and drag it to the lower center of the front panel (see Figure 3.24 for the approximate location). Then click on the numeric control and drag it to the upper right of the front panel (see Figure 3.24 for approximate location). Notice that as you move the numeric control, the owned label moves with the control. If the control is currently selected, click on a blank space on the front panel to deselect the control and then click on the label and drag it to another location. Notice that in this case the control does not follow the move. You can position an owned label anywhere relative to the control. If you move the owned label to an undesirable location, you can move it back by selecting EditUndo Move to place the label back above the numeric control. 4. Reposition the stop button, the knob, and the thermometer to the approximate locations shown in Figure 3.24. 5. Add labels to the knob and to the thermometer. To accomplish this task, right-click on the object and choose Visible ItemsLabel. When the label box appears, type in the desired text. In this case, we want to label the knob Temperature variation and the thermometer Average Temperature. 6. Move the numeric indicator associated with the thermometer to a location near the bottom of the thermometer. Then reposition the thermometer label so that it is better centered above the thermometer (see Figure 3.24). 7. In this next step, we will reformat the waveform graph. (a) To remove the waveform graph legend, right-click on the waveform graph and select Properties. On the Appearance menu, deselect the check mark next to Show Plot Legend. (b) To remove the waveform graph palette, deselect Show Graph Palette from the Appearance menu. (c) Remove the waveform x-axis scale by selecting the Scales menu. On the Scales menu, be sure to select the x-axis from the drop-down box. Deselect the Show Scale option. (d) Add a label to the wavefrom graph—label the object Temperature data history. Select the owned label and move it to the bottom of the waveform graph, as illustrated in Figure 3.24. Note that this can also be done on the Properties screen. 8. Align the stop button and the thermometer. (a) Select both the stop button and the thermometer using the Positioning tool. Pick a point somewhere to the upper left of the stop button and drag the dashed box down until it encloses both the stop button and the

Section 3.1 Editing Techniques

135

thermometer. Upon release of the mouse button, both objects will be surrounded by moving dashed lines. (b) Click on Align Objects and choose Left Edges. The stop button and the thermometer will then align to the left edges. If the objects appear not to move at all, this indicates that they were essentially aligned to the left edges already. 9. Align the stop button, the knob, and the numeric control horizontally by choosing the Vertical Centers axis from the Align Objects pull-down menu in the toolbar. Remember to select all three objects beforehand. 10. Space the stop button, the knob, and the numeric control evenly by choosing the Horizontal Centers axis from the Distribute Objects pull-down menu in the toolbar. Again, remember to select all three objects beforehand. 11. Change the color of the stop button. (a) Using the Coloring tool, right-click on the stop button to display the color palette. (b) Choose a color from the palette. The object will assume the last color you selected. In the Editing Done VI you will see that a dark blue color was selected—you can choose a color that you like. 12. Change the color of the knob. Using the Coloring tool, right-click on the knob to display the color palette and then choose the desired color from the color palette. In the Editing Done VI you will find that a red/pink color was selected—you can choose a color that suits you. 13. Change the color of the waveform graph. In the Editing Done VI you will see that a gold color was selected. 14. Change the color of the thermometer bulb. Using the Coloring tool, rightclick on the thermometer bulb (at the bottom of the thermometer) to display the color palette and then choose the desired color. In the Editing Done VI you will find that a green color was selected. 15. Change the font style of the owned labels. Use the cursor to select each of the labels and then select StyleBold from Text Settings. See if you can do this for all three of the owned labels at once: thermometer, knob, and numeric control. At this point, the front panel of the Editing VI should look very similar to the front panel shown in Figure 3.24. The block diagram for the Editing VI is shown in Figure 3.26 after the editing of the front panel is finished—but before wiring the block diagram. We can now wire together the various objects to obtain a working VI. Notice that several additional objects are on the block diagram: a uniform white noise subVI, a mean subVI that computes the mean (or average) of a signal, a While Loop, and an Add function. In later chapters, you will learn to use While Loops

136

CHAPTER 3

Editing and Debugging Virtual Instruments

Waveform graph Digital thermometer indicator

Knob

Right-click and select Stop if True

Numeric control

FIGURE 3.26

The block diagram for the Editing VI—before wiring.

and learn how to use preexisting subVIs packaged with LabVIEW. For instance, the Uniform White Noise.vi is located on the Functions palette under the Signal ProcessingSignal Generation subpalette. Go ahead and wire the Editing VI block diagram so that it looks like the block diagram shown in Figure 3.27. If you run into difficulties, you can open

Waveform graph Knob Numeric control

FIGURE 3.27

The block diagram for the Editing Done VI—after wiring.

Numeric thermometer indicator

Section 3.1 Editing Techniques

137

and examine the block diagram for the Editing Done VI (which can be found in Chapter 3 of the Learning directory). A few wiring tips: 1. To wire the objects together with the Wiring tool, click and release on the source terminal and drag the Wiring tool to the destination terminal. When the destination terminal is blinking, click and release the left mouse button. 2. To identify terminals on the Add function, right-click on the icon and select Visible ItemsTerminal to see the connector. When the wiring is finished, right-click again on the function and choose Visible ItemsTerminal to show the icon once again. 3. To bend the wires as you connect two objects, click with the left mouse button on the bend location with the Wiring tool. After you have finished wiring the objects together, switch to the front panel by selecting Show Front Panel from the Window menu. Use the Operating tool to change the value of the front panel controls. Run the VI by clicking on the Run button on the toolbar. The Average Temperature indicator should be approximately the value that you select as the Temperature offset. The amount of variation in the temperature history, as shown on the Temperature data history waveform graph, should be about the same as the setting on the Temperature variation knob. When you are finished editing and experimenting with your VI, save it by selecting Save As from the File menu. Remember to save all your work in the Users Stuff folder in the Learning directory. Close the VI by selecting Close from the File menu. 3.1.12

Cleaning Up the Block Diagram It is very important that the block diagram be logically arranged so that the code is readable, making it easier to understand and easier to debug (see Section 3.2 for more discussion on debugging a VI). It is possible to clean up the entire block diagram by rerouting all wires and reordering all objects in a single action. It is also possible to clean up only selected selections of the block diagram. You can reroute all existing wires and reorder all objects on the block diagram in a single action by the following steps: 1. First you can configure the cleanup options. Select ToolsOptions to display the Options dialog box and select Block Diagram from the Category list. On the Block Diagram page, you can set the configuration to automatically move controls to the left side of the block diagram and indicators to the right side, place a given number of pixels between block diagram objects and wires, and compact the block diagram layout.

138

CHAPTER 3

Editing and Debugging Virtual Instruments

2. It is also an option to exclude from the cleanup process the reorganizing of contents of selected structures (see Chapter 5 for more information on structures such as the Case Structure). To accomplish this, right-click on the structure and select Exclude from Diagram Cleanup. The structure may move as part of the cleanup process, but its contents will not be reorganized. 3. Once the desired cleanup options are chosen and all structures to be excluded from the process are appropriately accommodated, you can clean up the block diagram in a single action by selecting Clean Up Diagram from the Edit pull-down menu. You also can click the Clean Up Diagram button on the block diagram toolbar or press the keys in Windows or the keys in Mac OS. The process is illustrated in Figure 3.28. The block diagram in Figure 3.28(b) is more logically configured for readability than the same block diagram shown in Figure 3.28(a). Notice that the objects inside the Case Structure are not reorganized, even though the Case Structure has moved. (a) Select Clean Up Diagram Right click on Case Structure to access shortcut menu Block diagram is cleaned up and logically organized (b)

Select Exclude from Diagram Cleanup

Objects inside Case Structure remain in original placement though structure itself has moved FIGURE 3.28

Using the Clean Up Diagram feature.

Section 3.1 Editing Techniques

139

Rerouting only selected wires and reordering only selected objects on the block diagram is accomplished as follows: 1. First, if you want to exclude reorganizing the contents of certain structures, right-click the desired structure and select Exclude from Diagram Cleanup as discussed above. 2. Click and drag a selection rectangle around the items you want to clean up. If you want to add additional objects to the cleanup process, press the key and click and drag a selection rectangle around the additional objects to create multiple selections. You also can press the key while you click objects you want to deselect.

!

The block diagram is not cleaned up if you do not select any structures and none of the objects you select overlap each other or if the selection contains only wires without corresponding inputs and outputs. 3. Select Clean Up Selection from the Edit pull-down menu. The process is illustrated in Figure 3.29. Notice that the objects inside the Case Structure are not reorganized, even though the Case Structure has moved. Once you have selected the desired objects to clean up, the Clean Up Diagram button on the block diagram toolbar will automatically change modes to Clean Up Selection, and you can use this to clean up the selection as well as Clean Up Selection from the Edit pull-down menu.

3.1.13

Routing Wires As you wire objects on the block diagram, LabVIEW will automatically find a route for the wire around existing objects. The automatic wire routing also seeks to find a path such that the number of bends in the wire is minimized, wires from control terminals exit the right side of the terminal, and wires to indicator terminals enter the left side of the terminal. Even so, the wires on the block diagram may still require some cleaning up. As discussed in Section 3.1.12, you can reroute existing wires and rearrange existing objects on the block diagram automatically using EditClean Up Diagram or EditClean Up Selection. However, you can reroute only specific wires using the Clean Up Wire feature. To reroute an existing wire automatically, right-click the wire and select Clean Up Wire from the shortcut menu, as illustrated in Figure 3.30. In this case, only the selected wire is rerouted. If the automatic wire routing and various clean-up processes do not lead (in your opinion) to a satisfactory block diagram arrangement, such that the code is readable and easy to debug, you can always use the Positioning tool and manually rearrange the wires and objects.

140

CHAPTER 3

Editing and Debugging Virtual Instruments

Select Clean Up Selection

Select the desired section of the block diagram to clean up

Block diagram section is cleaned up and logically organized

FIGURE 3.29

Using the Clean Up Selection feature.

3.1.14

Reusing Snippets of Code You can save snippets of code from the block diagram to reuse later or to share with other LabVIEW users. Snippets of code can be opened in the version of LabVIEW in which they were created and newer versions. LabVIEW embeds the code into a .png image file. The image file actually contains the code so that when you drop the image file onto a block diagram the code will emerge. To save a snippet of code as a .png image file, first select the code section of interest, as illustrated in Figure 3.31. Then select EditCreate VI Snippet from Selection to open a dialog box to navigate to the desired folder and enter the file name of your choice. In Figure 3.31, the file name entered is Temperature and the destination folder is VI Snippets. After you save the VI snippet as a .png file, you can drag the file from the directory where you saved it and drop the file onto a block diagram as illustrated in Figure 3.32. The code emerges from the image file and is fully functional.

141

Section 3.2 Debugging Techniques

Messy wire

Rerouted wire

Right-click on wire to access shortcut menu

Select Clean Up Wire

FIGURE 3.30

Using the Clean Up Wire feature.

Here are three suggestions for creating VI snippets: Stick to simple VIs that only include LabVIEW native SubVIs. Remove data from arrays, graphs, or charts when possible to minimize the file size of your code snippet. Be wary of programs that might remove or corrupt the VI encoded in the image, such as photo editing tools. When using VI snippets from the web, they can be dragged to the block diagram from Internet Explorer. Other web browsers may require the saving of the image that can then be dragged and dropped on your block diagram.

3.2

DEBUGGING TECHNIQUES In this section we discuss LabVIEW’s basic debugging elements, which provide an effective programming debugging environment. Most features commonly associated with good interactive debugging environments are provided—and

142

CHAPTER 3

Editing and Debugging Virtual Instruments

Select snippet of code to save a .png file

Select Create VI Snippet from Selection

Navigate to the desired folder and save the VI snippet as a .png file

FIGURE 3.31

Creating snippets of code as a .png file.

in keeping with the spirit of graphical programming, the debugging features are accessible graphically. Execution highlighting, single-stepping, breakpoints, and probes help debug your VIs easily by tracing the flow of data through the VI. You can actually watch your program code as it executes! 3.2.1

Finding Errors When your VI cannot compile or run due to a programming error, a Broken Run button appears on the toolbar. Programming errors typically appear during VI development and editing stages and remain until you properly wire all the objects in the block diagram. You can list all your program errors by clicking on the Broken Run button. An information box called Error List appears listing all the errors. This box is shown in Figure 3.33 for the Editing Done VI with a broken wire.

143

Section 3.2 Debugging Techniques

Select code snippet saved as a .png file The .png file shows the code image

Drag the .png file onto the block diagram

Code snippet emerges on block diagram

FIGURE 3.32

Dropping the code snippet saved as a .png file onto the block diagram.

Warnings make you aware of potential problems when you run a VI, but they do not inhibit program execution. If you want to be notified of any warnings, click the Show Warnings checkbox in the Error List dialog box. A warning button then appears on the toolbar whenever a warning condition occurs. If your program has any errors that prevent proper execution, you can search for the source of a specific error by selecting the error in the Error List (by clicking on it) and then clicking on Show Error (lower right-hand corner of the Error List dialog box). This process will highlight the object on the block diagram that reported the error, as illustrated in Figure 3.33. Double-clicking on an error in the error list will also highlight the object reporting the error. Some of the most common reasons for a VI being broken during editing are: 1. A function terminal requiring an input is unwired. For example, an error will be reported if you do not wire all inputs to arithmetic functions. 2. The block diagram contains a broken wire because of a mismatch of data types or a loose, unconnected end. 3. A subVI is broken.

144

CHAPTER 3

Editing and Debugging Virtual Instruments

Click Broken Run button to see list of program errors Warning button

Bad wire Make sure Show Warnings is selected if you want the Warning button to appear List of program errors Select an error from the list and then click on Show Error to locate the object reporting the error FIGURE 3.33

Locating program errors.

3.2.2

Highlight Execution You can animate the VI block diagram execution by clicking on the Highlight Execution button located in the block diagram toolbar, shown in Figure 3.34. For debugging purposes, it is helpful to see an animation of the VI execution in the block diagram, as illustrated in Figure 3.35. When you click on the Highlight Execution button, it changes to a bright light to indicate that the data flow will be animated for your visual observation when the program executes.

145

Section 3.2 Debugging Techniques

Pause

Choose one to proceed to the next step in the program

Highlight Retain Wire Execution Values

Step Into Step Out Step Over

FIGURE 3.34

The Highlight Execution and step buttons located on the toolbar.

Data flows (a)

(b)

Data flows

Movement of data indicated by "bubble"

(d)

(c) Data flows

FIGURE 3.35

Using the highlight execution mode to watch the data flow through a VI.

Click on the Highlight Execution button at any time to return to normal running mode. Execution highlighting is commonly used with single-step mode (more on single stepping in the next section) to trace the data flow in a block diagram in an effort to gain an understanding of how data flows through the block diagram. Keep in mind that when you utilize the highlight execution debugging feature, it greatly reduces the performance of your VI—the execution time increases

146

CHAPTER 3

Editing and Debugging Virtual Instruments

significantly. The data flow animation shows the movement of data from one node to another using “bubbles” to indicate data motion along the wires. This process is illustrated in Figure 3.35. In Figure 3.35(a) we see the data as it flows out of the three controls labeled Numeric, Numeric 2, and Numeric 3. The movement of the data is indicated by the “bubbles.” The data from the controls Numeric and Numeric 2 enters the first Add function and the data from the Numeric 3 control waits at the second Add function, as shown in Figure 3.35(b). The data then flows out the first Add function and heads toward the second, where data from Numeric 3 awaits, as shown in Figure 3.35(c). The final summation then occurs in Figure 3.35(d), and the result flows to the indicator labeled Numeric 4. Additionally, in single-step mode, the next node to be executed blinks until you click on the next step button.

3.2.3

Single-Stepping Through a VI and Its SubVIs For debugging purposes, you may want to execute a block diagram node by node. This is known as single-stepping. To run a VI in single-step mode, press any of the debugging step buttons on the toolbar to proceed to the next step. The step buttons are shown on the toolbar in Figure 3.34. The step button you press determines where the next step executes. You click on either the Step Into or Step Over button to execute the current node and proceed to the next node. If the node is a structure (such as a While Loop) or a subVI, you can select the Step Over button to execute the node, but not single-step through the node. For example, if the node is a subVI and you click on the Step Over button, you execute the subVI and proceed to the next node, but cannot see how the subVI node executed internally. To single-step through the subVI you would select the Step Into button. Click on the Step Out button to finish execution of the block diagram nodes or finish up the single-step debugging session. When you press any of the step buttons, the Pause button is pressed as well. You can return to normal execution at any time by releasing the Pause button. If you place your cursor over any of the step buttons, a tip strip will appear with a description of what the next step will be if you press that button. You might want to use highlight execution as you single-step through a VI, so that you can follow data as it flows through the nodes. In single-step mode and highlight execution mode, when a subVI executes, the subVI appears on the main VI diagram with either a green or red arrow in its icon, as illustrated in Figure 3.36. The diagram window of the subVI is displayed on top of the main VI diagram. You then single-step through the subVI or let it complete executing.

Section 3.2 Debugging Techniques

Execution highlighting is on

147

Green arrow indicates that the subVI is executing

The subVI block diagram appears to show the single-stepping inside the subVI FIGURE 3.36

Single stepping into a subVI with execution highlighting selected.

!

By default, debugging has been disabled on LabVIEW analysis functions. For this reason, you cannot step into the Uniform White Noise.vi in Figure 3.36. However, the Mean VI is not a LabVIEW analysis function, so debugging is enabled. You can save a VI without single-stepping or highlight execution capabilities. This compiling method typically reduces memory requirements and increases performance by 1–2%. To do this, right-click in the icon pane (upper right corner of the front panel window) and select VI Properties. As in Figure 3.37, from the Execution menu, deselect the Allow Debugging option to hide the Highlight Execution and Single Step buttons.

3.2.4

Breakpoints and Probes You may want to halt execution (set breakpoints) at certain locations of your VI (for example, subVIs, nodes, or tool, wires). Using the Breakpoint click on any item in the block diagram where you want to set or clear a breakpoint. Breakpoints are depicted as red frames for nodes and red dots for wires.

148

CHAPTER 3

Editing and Debugging Virtual Instruments

Deselect Allow debugging to increase program speed and reduce memory usage FIGURE 3.37

Turning off the debugging options using the VI Setup menu.

You use the Probe tool to view data as it flows through a block diagram wire. To place a probe in the block diagram, click on any wire in the block diagram where you want to place the probe. Probes are depicted as numbered yellow boxes. You can place probes all around the block diagram to assist in the debugging process. The Probe Watch Window is a unified tool to view and manage all probes. There are three ways to access the Probe Watch Window. You can either select ViewWatch Window, right-click the wire that contains the data you want to check and select Probe from the shortcut menu or use the Probe too. If you use the Probe tool to place probe on the block diagram the Probe Watch Window will automatically appear on the desktop. The Probe Watch Window shown in Figure 3.38 lists each VI and its corresponding probe(s) in the Probe(s) column. The Value column displays the last known value to pass through the probed wire. The Last Update column displays the timestamp of the last time data passed through the probe. The Probe Display on the right side of the Probe Watch Window displays the data that last passed through the selected probe. In the Probe Watch Window shown in Figure 3.38 there are two VIs (Editing Done.vi and Debug.vi) each containing two probes. The probes in the Editing Done VI report the data in Temperature offset (probe #1) and Average (probe #2). The probes in the Debug VI report the data in Temperature bias (probe #3) and Thermometer (probe #4). The last data to pass through the Temperature offset wire and indicated by probe #1 is 3.67 as seen in the Probe Display on the right side of the Probe Watch Window. Conditional probes allow you to set conditional breakpoints for common cases of each data type. For example, creating a conditional probe on a numeric

Section 3.2 Debugging Techniques

Editing Done.vi

149

Probes #1 and #2

Last data to pass through probe #1

Probe Watch Window shows the Editing Done.vi and Debug.vi probes FIGURE 3.38

The Probe Watch Window.

allows you to set a pause condition using Equal to, Greater than, or Less than. This gives you flexibility in your debugging. A feature of LabVIEW is the ability to retain wire values. This feature can be enabled and disabled with the Retain Wire Values button on the toolbar of the block diagram, as shown in Figure 3.34. Once enabled, if you create a probe on the block diagram after executing your VI, the probe displays the data that flowed through the wire during the last VI execution. The VI must run sucessfully at least once before you can collect data from any wires using probes. Retaining wire values is a handy feature when you need to debug a VI with a complex block diagram. Practicing with Debugging

A nonexecutable VI—named Debug.vi—has been developed for you to debug and to fix. You will get to practice using the single-step and execution highlighting modes to step through the VI and inserting breakpoints and probes to regulate the program execution and to view the data values. 1. Open the Debug VI in Chapter 3 of the Learning directory by choosing Open from the File menu. Notice the Broken Run button in the toolbar indicating the VI is not executable.

150

CHAPTER 3

Editing and Debugging Virtual Instruments

Broken Run indicates the VI is not executable

FIGURE 3.39

Block diagram showing the debugging exercise.

2. Switch to the block diagram by choosing Show Block Diagram from the Window pull-down menu. You should see the block diagram shown in Figure 3.39. (a) The Random Number (0-1) function (represented by the two die) can be found in the FunctionsProgramming Numeric subpalette and returns a random number between zero and one. (b) The Add function (which can also be found in the Functions Programming Numeric subpalette) adds the random number to a bias number represented by the variable Temperature bias, which accepts input by the user on the front panel. (c) The subVI Simulated Temperature (deg F).vi found in the Activity folder in the LabVIEW directory simulates acquiring temperature data. As you single step through the code, you will see the program execution inside the subVI. (d) The second Add function adds the simulated temperature data point to the random number plus the bias number to create a variable named Actual Temperature. 3. Investigate the source of the programming error by clicking on the Broken Run button to obtain a list of the programming errors. You should find one error—Add: contains unwired or bad terminal. 4. Highlight the error in the Error List and then click on Show Error to locate the source of the error within the block diagram. You should find that the

Section 3.2 Debugging Techniques

5.

6.

7. 8.

9.

10.

11. 12. 13.

14.

15.

151

second Add function (the one on the right side) is shown to be the source of the programming error. Fix the error by properly wiring the two Add functions together. Once this step is successfully completed, the Broken Run button should reappear as the Run button. Select Highlight Execution and then run the VI by pressing the Run Continuously button. You can watch the data flow through the code. Returning to the front panel, you will see the waveform chart update as the new temperature is calculated and plotted. Notice that the simulation runs very slowly in highlight execution mode. Click the Highlight Execution button off to see everything move much faster. Terminate the program execution by clicking on the Abort Execution button. Enable single-stepping by clicking on one of the step buttons. You can enable Highlight Execution if you want to see the data values as they are computed at each node. Use the step buttons to single-step through the program as it executes. Remember that you can let the cursor idle over the step buttons and a tip strip will appear with a description of what the next step will be if you press that button. Press the Pause button at any time to return to normal execution mode. Enable the probe by right-clicking on the wire connecting the two Add functions and selecting Probe. Continue to single-step through the VI and watch how the probe displays the data carried by the wire. Alternatively, you could have used the Probe tool to place the probe on the wire. Try placing a probe on the block diagram (say between the Simulated Temperature subVI and the Add function) using the Probe tool. Place a few more probes around the VI and repeat the single-stepping process to see how the probes display the data. When you are finished experimenting with the probes, close all open probe windows. Set a breakpoint by selecting the Breakpoint tool from the Tools palette and clicking on the wire between the two Add functions. You will notice that a red ball appears on the wire indicating that a breakpoint has been set at that location. Run the VI by clicking on the Run Continuously button. The VI will pause each time at the breakpoint. To continue VI execution, click on the Pause button. It helps to use highlight execution when experimenting with breakpoints; otherwise the program executes too fast to easily observe the data flow. Terminate the program execution by pressing the Abort Execution button. Remove the breakpoint by clicking on the breakpoint (that is, on the red ball) with the Breakpoint tool.

152

CHAPTER 3

Editing and Debugging Virtual Instruments

16. Save the working VI by selecting Save from the File menu. Remember to save the working VI in the folder Users Stuff within the Learning directory. Close the VI and all open windows by selecting Close from the File menu. 3.2.5

Navigation Window When working with complicated VIs, the block diagrams and front panels may be too unwieldy to easily navigate. LabVIEW provides the feature of the Navigation window as a tool to display an overview of the active front panel in edit mode or the active block diagram. To activate the Navigation window, select ViewNavigation Window. Once the Navigation window is open, you click an area of the image in the Navigation window to display that area in the front panel or block diagram window. Consider the Train Wheel PtByPt VI depicted in Figure 3.40 with the Navigation window in view. The portion of the block diagram in the center of the Navigation window has been selected and the associated block diagram code appears in the block diagram window. You can also click and drag the image in

Select portion of VI to use

Portion of block diagram not in view is dimmed Navigation window FIGURE 3.40

Using the Navigation window.

Section 3.3 Property Nodes

153

the Navigation window to scroll through the front panel or block diagram. As illustrated in Figure 3.40, portions of the front panel or block diagram that are not visible appear dimmed in the Navigation window.

3.3

PROPERTY NODES Property Nodes allow you to set the properties and to get the properties of objects. In some applications, you might want to programmatically modify the appearance of front panel objects in response to certain inputs. For example, a front panel object can be made to vanish from the front panel while the VI is running if a Boolean input is True and made to reappear when the Boolean input is False. As another example, you might want an LED to start blinking if a user enters an invalid password. In Chapter 7 we will show how to use Property Nodes to change the color of a trace on a chart when data points are above a certain value. Property Nodes can also be used to programmatically resize front panel objects, hide parts of the front panel, move controls and indicators on the front panel, and for many other uses. You create a property from a front panel object by right-clicking the object, selecting CreateProperty Node, and selecting a property from the shortcut menu, as illustrated in Figure 3.41. A Property Node is created on the block diagram that is implicitly linked to the front panel object. If the object has a label, the Property Node has the same label. In Figure 3.41, the Property Node is labeled Input, since the front panel control has the label Input. You can change the label after you create the node. When you create a Property Node, it initially has one terminal representing a property you can modify for the corresponding front panel object. Using this terminal on the Property Node, you can either set (write) the property or get (read) the current state of that property.

!

Some properties, such as the Label property, are read only and some properties, such as the Value (Signaling), are write only. In Figure 3.41, when the Property Node was created for the digital numeric control labeled Input using the Visible property, a small arrow appeared on the right side of the Property Node terminal, indicating that the property value was being read. You can change the action to write by right-clicking the Property Node and selecting Change To Write from the shortcut menu. In Figure 3.41, the simple VI has one control and one indicator. The Property Node for the control has been set to Visible, so that wiring a False Boolean value to the Visible property terminal causes the numeric control to vanish from the front panel when the Property Node receives the data. Wiring a True Boolean value causes the control to reappear. This is an example of writing a property using the Property Node.

154

CHAPTER 3

Editing and Debugging Virtual Instruments

Right click on the front panel object

Property Node Select Create and then select Property Node

Choose the desired property from the long list Click here to make the control Input vanish and reappear

Change the value and watch the control Input move

FIGURE 3.41

Using the Property Node.

The VI shown in Figure 3.41 can be found in Chapter 3 of the Learning directory. Open and run the VI in Run Continuously mode. Click the push button labeled Visible to make the control Input vanish and then reappear upon a second click. Also, you can change the value of the Position:Left numeric control to move the control Input horizontally on the front panel.

Section 3.4 A Few Shortcuts

155

You can create multiple Property Nodes for the same front panel object. To add terminals to the node, right-click the white area of the node and select Add Element from the shortcut menu or use the Positioning tool to resize the node. Then you can associate each Property Node terminal with a different property from its shortcut menu. Property Nodes execute in order from top to bottom. If an error occurs on a terminal, the node stops at that terminal, returns an error, and does not execute any further terminals. In Figure 3.41, the two properties selected are Visible and Position: Left. Using a large number of Property Nodes in subVIs can negatively impact program execution speed. Property Nodes can be memory intensive and if invoked in a subVI will load its front panel into memory leading to unnecessary memory usage. Use local variables (covered in Chapter 5) for reading and writing object values when possible.

3.4

A FEW SHORTCUTS Frequently used menu options have equivalent command key shortcuts. For example, to save a VI you can choose Save from the File menu, or press the control key equivalent (Windows) or (Macintosh). Some of the main key equivalents are shown in Table 3.1. Shortcut access to the Tools palette on the front panel and block diagram is given by: Windows—Press and the right mouse button Macintosh—Press and the mouse button

TABLE 3.1 Frequently Used Command Key Shortcuts

Windows

Macintosh

Function



Save a VI



Run a VI



Toggle between the front panel and the block diagram



Toggle the Context Help window on and off



Remove all bad wires



Close the active window



Find objects and VIs

156

CHAPTER 3

Editing and Debugging Virtual Instruments

BUILDING BLOCK

3.5 BUILDING BLOCKS: PULSE WIDTH MODULATION The Rising Edge and Falling Edge VIs that you constructed in Chapter 2 will be improved with the editing techniques learned in this chapter. Navigate to the Users Stuff in the Learning directory and open both VIs. Working versions of Falling Edge.vi and Rising Edge.vi can be found in the Building Blocks folder of the Learning directory. These working VIs are provided in case you did not save them in the Users Stuff folder after working in Chapter 2. It is important that you create documentation of VIs you make so that information is available which may not be readily apparent to users interacting with your VI for the first time. You may wish to use free text labels to clarify features of either the front panel or the block diagram. To write a VI description for the Falling Edge VI, go to the File pull-down menu, select VI Properties, and enter the following description under the category Documentation in the VI Description dialog box: This VI is used in Pulse Width Modulation to determine when a high output signal should switch to low, based on the current input values of Duty Cycle, Period, and Clock. Controls such as knobs and slides are useful in situations where there is a preferred or ideal input range for any given variable, since each control limits the user to its specified input range. Replace the numeric control for Duty Cycle with a vertical pointer slide in the Falling Edge VI. Open the Properties window for the slide pointer control to edit the data range and scale range. We want to set the limits so that the user can only enter values between 0 and 1 on the control. Click the Data Entry tab and set the increment value to 0.01. Then select Coerce to nearest so that any input value specified past the hundredths place will be rounded to the nearest hundredth. On the Appearance tab, make the Digital Display visible. This gives the user the flexibility of adjusting the duty cycle by sliding the pointer or by entering a new value in the digital display. Recall that in Chapter 2 Building Blocks we assumed the user will always provide valid inputs for Duty Cycle and Period. Now we can guarantee that the user does not input invalid values for Period and Clock by enforcing the limits on the inputs. To adjust the data range for Period and Clock so that no negative value can be input to Clock and the minimum value that can be input to Period

157

Section 3.5 Building Blocks: Pulse Width Modulation

Set minimum value equal to 100 Set minimum value equal to 0

Vertical pointer slide

FIGURE 3.42

Editing the Falling Edge VI.

is 100, right-click on the respective input to open the Properties window and click the Data Entry tab. In the case of the Clock, deselect Use Default Limits and set the minimum value to zero. In the case of the Period, follow the same steps, except set the minimum value to 100. After modifying the front panel, you may find that you need to rearrange some objects for ease of use of the inputs. Use the Align Objects pull-down menu to organize objects on the front panel and the Clean-Up Diagram button to organize objects on the block diagram. A smartly organized VI makes debugging more straightforward and enhances the ease with which others can understand and utilize the program. Your VI should now resemble the one shown in Figure 3.42. Run the VI with the new Duty Cycle control. Note that as you slide the control, the values increment by hundredths, and if you enter an invalid input on the numeric display, it is rounded to a valid value. When you are done experimenting with your new VI, save it as Falling Edge Edited.vi in the Users Stuff folder in the Learning directory. You

158

CHAPTER 3

Editing and Debugging Virtual Instruments

will use this VI as a building block in later chapters—so make sure to save your work! We now edit the Rising Edge VI to set the minimum range of the Period to 100. Once Rising Edge.vi is open, right-click the control labeled Period to access the Properties window. Click the Data Entry tab and set the minimum value of Period to 100. Repeat the editing process for the control labeled Clock and check that Use Default Range is selected. When you are done editing the Rising Edge VI, save it as Rising Edge Edited.vi in the Users Stuff folder in the Learning directory. Working versions of Falling Edge Edited.vi and Rising Edge Edited.vi can be found in the Building Blocks folder of the Learning directory.

3.6 RELAXED READING: USING GRAPHICAL SYSTEM DESIGN FOR TUMOR TREATMENTS

In this reading, we learn about a new medical device, the Visica 2, used to treat breast tumors in a less invasive and nearly painless procedure, dramatically reducing the emotional and physical discomfort of patients undergoing tumor treatment. Using National Instruments hardware and software, the Visica 2 was developed in a flexible and reliable manner under extreme time-to-market pressures. Imagine a potentially revolutionary product that would let doctors treat benign tumors by freezing and killing them in an almost painless outpatient procedure. This would be a dramatic change from an in-patient surgical solution or a “wait-and-see” approach. Sanarus, a small medical device start-up company, created a well-executed design and development plan to produce a new device of this sort that could have an important impact on breast cancer treatment. The resulting product is the Visica Treatment System (V2) shown in Figure 3.43. Amazingly, a working prototype of the V2 system was produced within four months to meet the product-release schedule. The V2 is an instrument for use in a doctor’s office or clinic. It involves local anesthesia and a real-time, ultrasound-guided approach that is virtually painless. During the 10- to 20-minute treatment the targeted tissue is frozen and destroyed through an incision so small that it does not require stitches. Writing firmware and designing a custom circuit board for the device would have been time consuming, and any error at the firmware or software level could have created delays threatening the entire project. Also, because V2 is a medical

Section 3.6 Relaxed Reading

159

FIGURE 3.43

The CompactRIO platform from National Instruments enabled Sanarus to quickly develop a working prototype. (Photo courtesy of Sanarus Medical.)

device, errors that could compromise system performance were unacceptable. If the device had failed any part of the exhaustive testing, the entire project would have failed and the V2 would not have made it to market. Based on these requirements, it was clear that an extremely reliable development option for V2 was required. CompactRIO was selected because of its mix of programmability and integrated I/O development. Designing a prototype using CompactRIO showed that the V2 could be developed reliably in a short period of time. While a

160

CHAPTER 3

Editing and Debugging Virtual Instruments

custom solution would have taken months to develop, the NI solution took only weeks. With custom firmware, too, “late game” changes would require new and difficult revisions, whereas with the CompactRIO platform the code could be revised if needed with minimal effort. The flexibility afforded by the National Instruments solution accommodated new feature requests without causing delays in the development schedule. The user interface was developed with the LabVIEW for Windows graphical programming environment for a PanelPC, as shown in Figure 3.43. Communications between the GUI and the CompactRIO real-time controller were managed using LabVIEW shared variables. LabVIEW Real-Time was used to implement a state machine on the CompactRIO real-time controller, and on the PID, LabVIEW Real-Time regulated loops controlled the temperature of the tip of the probe. This was done by prescribing control inputs to the liquid nitrogen pump for cooling as well as a simple resistive heating element. The LabVIEW FPGA was used to manage the interfacing to the I/O signals necessary to control these devices. With LabVIEW, the controller was designed and coded in-house, then prototyped and deployed. The design and development cycle was short but it was very successful. Long-term studies have shown the technique to be highly effective in destroying common tumors. The V2 is now available at selected centers throughout the United States. The V2’s product design, prototype, and eventual deployment timelines were met because the National Instruments solution enabled efficient development of an embedded control system with a user-friendly GUI while maintaining the highest quality, and, ultimately, ensuring the safety of patients. For more information on the Visica 2 system, please visit http://www.sanarus.com/visica.html. Additional information can be found at the NI website http://sine.ni.com/cs/app/ doc/p/id/cs-11023.

3.7 SUMMARY The main subjects of this chapter were the editing and debugging of VIs. Just as you would edit a C program or debug a Fortran subroutine, you must know how to edit and debug a VI. We discussed how to create, select, delete, move, and arrange objects on the front panel and block diagram. We developed the important topics of cleaning up the block diagram, routing wires, and reusing snippets of code. We learned how to programmatically read and write the properties of objects using the Property Node. Discussion of program debugging included execution highlighting, how to step into, through, and out of the code, and how to use probes to view data on the Probe Watch Window as it flows through the code.

Section 3.7 Summary

KEY TERMS

Breakpoint: A pause in execution used for debugging. You set a breakpoint by clicking a VI, node, or wire with the Breakpoint tool. Breakpoint tool: Tool used to set a breakpoint on a node or wire. Broken VI: A VI that cannot compile and run. Coloring tool: Tool used to set foreground and background colors. Execution highlighting: Debugging feature that animates the VI execution to illustrate the data flow within the VI. Label: Text object used to name or describe other objects or regions on the front panel or block diagram. Labeling tool: Tool used to create labels and enter text. Navigation window: Displays an overview of the active front panel in edit mode or the active block diagram. Operating tool: Tool used to enter data into controls and operate them—resembles a pointing finger. Positioning tool: Tool used to move, select, and resize objects. Probe: Debugging feature for checking intermediate values in a VI during execution. Probe tool: Tool used to create probes on wires. Probe Watch Window: A unified tool to view and manage all probes. Property Node: Feature that allows you to programmatically set (write) and get (read) the properties of objects. Resizing handles: Angled handles on the corners of objects that indicate resizing points. VI Snippets: Sections of code from the block diagram saved in a .png image file to reuse later or to share with other users.

161

162

CHAPTER 3

Editing and Debugging Virtual Instruments

EXERCISES

E3.1

Construct a VI to accept five numeric inputs, add them up and display the result on a gauge, and light up a round light if the sum of the input numbers is less than 8.0. The light should light up in green, and the gauge dial should be yellow. The VI in Figure E3.1 can be used as a guide.

Hint: Use the Compound Arithmetic function found on the Programming Numeric palette to add the five inputs together.

Align the five inputs and space them at equal intervals

FIGURE E3.1

A VI to add five numeric inputs and light up a round LED if the sum is less than 8.0.

Round light shows green whenever the sum of inputs is less than 8.0 Make the face of this gauge yellow

Exercises

163

E3.2

Open Change to Indicator.vi found in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. Click on the Broken Run button. Select the error, and click on the Show Error button. This wire connects more than one data source. The wire between the output of the Add function and the control result is highlighted and has an “x” over it. Both the output and the control are “sources of data.” You can only connect a data source to a data display. Right-click on the control result and select Change to Indicator. The error disappears and you can run the VI. Input x = 2 and y = 3 and run the VI. Verify that the output result is 5.

E3.3

Open the virtual instrument Multiple Controls-1 Terminal.vi. You can find this VI in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. Click on the Broken Run button, select the error This Wire Connects to More than One Data Source, and click on the Show Error button. The wires from the two controls are highlighted. If you look closely, you will see that both wires are going to the same terminal. That means two controls are defining the value of one input value. Delete the wire from the y control. Wire the y control to the other input terminal on the Add function. Both errors disappear and you can run the VI. Input x = 1 and y = 4 and run the VI. Verify that the output x + y = 5.

E3.4

Open the virtual instrument Crazy Wires.vi. You can find this VI in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. Go to the block diagram and see the wires running everywhere. There is an easy way to fix this! Right-click on the wire running from Knob to the top terminal of the Comparison function. Select Clean Up Wire and watch the wire get straightened instantly. You can repeat the rerouting process for each wire in the block diagram by right-clicking on each wire individually and selecting Clean Up Wire. Another way to tidy up the block diagram is to select the Clean Up Diagram button in the block diagram toolbar (see Section 3.1.9). Besides rerouting the wires, this button will reorder the objects on the block diagram. Use the Clean Up Diagram button and clean up the remaining wires on the block diagram.

E3.5

Open the Oil Change VI in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory and shown in Figure E3.5. The VI assists in determining whether or not a car requires an oil change based on the mileage and elapsed time since the last oil change. The VI assumes that a car needs an oil change after either 6 months or 5,000 miles, whichever comes first. Can you see the problem with the VI by inspection of the block diagram? To confirm and fix the problem, perform the following steps: (a) Click the broken arrow to see what errors exist in the VI. (b) Fix the error and run the VI for various values of months and miles.

164

CHAPTER 3

Editing and Debugging Virtual Instruments

FIGURE E3.5

The Oil Change VI is broken. E3.6

Open Broken VI found in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. Click the broken run arrow to see a list of errors in the program. Determine why this VI fails to compile and run. Modify the VI as necessary so that the errors are repaired.

PROBLEMS P3.1

Construct a VI that generates two random numbers (between 0 and 1) and displays both random numbers on meters. Label the meters Random number 1 and Random number 2, respectively. Make the face of one meter blue and the face of the other meter red. When the value of the random number on the red meter is greater than the random number on the meter with the blue face, have a square LED show green; otherwise have the LED show black. Run the VI several times and observe the results. On the block diagram select Highlight Execution and watch the data flow through the code.

P3.2

In this problem you will construct a stop light display. Create a dial control that goes from 0 to 2, with three LED displays: one green, one yellow, and one red. Have the VI turn the LED green when the dial is on 0, yellow when the dial is on 1, and red when the dial is on 2.

P3.3

Open the block diagram of the Waveform Min Max example VI located in the library Operations.llb. in the Waveform subfolder within the examples folder. See Figure P3.3 for reference.

165

Problems

The input n waves

FIGURE P3.3

The block diagram of the Waveform Min Max example.vi showing the Simple Sine Waveform subVI terminals.

(a) On the block diagram, delete the numeric control labeled frequency by clicking on it and then selecting Delete on the Edit pull-down menu. Clean up the broken wire left behind by right-clicking it and selecting Delete Wire Branch from the shortcut menu or by selecting Remove Broken Wires from the Edit menu. (b) The control can be replaced two different ways. On the block diagram, right-click the node labeled n waves on the Simple Sine Waveform subVI and select CreateControl from the shortcut menu. Alternatively, in the Controls palette on the front panel, go to the Numeric subpalette. Select a numeric control and place it on the front panel. Then wire the control to the n waves input to the Simple Sine Waveform VI on the block diagram. Using one of these methods, replace the numeric control and label it frequency. (c) Move to the front panel and right-click the frequency control. Select ReplaceModernKnob to change the control to a knob. Try moving different components around on the front panel to make space for it, using the Align Objects tools if necessary. (d) Run the VI and experiment with different input values. If you want to save your changes, be sure not to replace the original VI with your edited one. Save the VI you create with a new name in the Users Stuff folder in the Learning directory. P3.4

In this problem, we want to open and run an existing VI. In LabVIEW, go to HelpFind Examples and click the Search tab and type “probes.” Select

166

CHAPTER 3

Editing and Debugging Virtual Instruments

“probes” to display the example VIs that include “probes” in the title. Find the VI entitled Using Supplied Probes.vi and open it. (a) Change to the block diagram. In this problem, you will create custom probes by right-clicking the data wires and selecting Custom Probe. For each probe (numbered 1 through 9) select the appropriate probe from the shortcut menu according to the instructions at the bottom of the block diagram. These custom probes also provide conditional breakpoint functionality, and you will experiment with the conditional settings to pause execution. (b) What probes are available on the block diagram? (c) On the Conditional Double Array probe, what happens if you set the condition to Pause if the number of elements equal to 250? (d) To continue after a break, press the Pause button on the menu bar. (e) Continue examining the Probe Watch Window. What information is supplied to you in the Dynamic Data Type probe? (f) What happens if you implement a conditional breakpoint of zero on the Error Probe? (g) With the VI running, stop the VI from the front panel. What is the state of the Boolean probe? P3.5

Open the Temperature Converter VI in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. The block diagram is shown in Figure P3.5. This VI takes an input in degrees Celsius and converts the input to Kelvins and degrees Fahrenheit, displaying the converted temperatures on numeric indicators. Explain how this VI could have been documented differently to make its purpose more readily evident to other programmers modifying the code and also more user friendly. Then fix the VI to reflect these changes.

Input in degrees Celsius

FIGURE P3.5

The block diagram for the Temperature Converter VI.

167

Problems

Save the VI as Temperature Converter.vi in the Users Stuff folder in the Learning directory. P3.6

Develop a VI that converts an input value in degrees to radians with four digits of precision. Refer to Figure P3.6 for help on changing the output display to four digits.

Right-click on numeric indicator Select Display Format

Set the precision to four digits

FIGURE P3.6

Converting degrees to radians with four digits of output precision.

P3.7

In this problem you will debug a VI that contains a logic error. Consider the VI shown in Figure P3.7. It is named Logic Error.vi and can be found in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. The VI’s objective is to test whether the input number (labeled X on the front panel) is even. If it is not even, a warning message will pop up; otherwise the VI executes without displaying a warning message. However, as the VI is currently coded, a warning message when the input X is even indicates a logic error in the code. Why is this VI not working properly? Open the VI and test it out to confirm that the logic is flawed. Then debug the code and fix the logic error. Save the debugged VI as Logic Error.vi in the Users Stuff folder in the Learning directory.

168

CHAPTER 3

Editing and Debugging Virtual Instruments

Warning message should appear only when input is odd

Even number

FIGURE P3.7

Fixing a logic error. DESIGN PROBLEMS D3.1

In this problem you will use the editing techniques from this chapter to improve the appearance of both the front panel and block diagram of Averaging.vi. This will aid in making the purpose and functionality of the Average VI more readily apparent to users who are unfamiliar with the VI. Open the Averaging VI in the Chapter 3 subfolder in the Exercises& Problems folder within the Learning directory. The block diagram is shown in Figure D3.1. Perform the following editing steps: (a) Resize the knobs on the front panel so that they are all the same size. You may wish to use some of the tools on the Resize Objects menu. (b) Evenly align and distribute the objects on both the front panel and the block diagram. It is conventional to place inputs (controls) on the left side and outputs (indicators) on the right side. As you rearrange objects on the block diagram, you will most likely need to clean up the wires. (c) Hide the labels on the knob controls and change the label on the indicator to read average. (d) Place a free label on the front panel which briefly explains the purpose of the VI. You can also use the Clean Up Diagram button on the block diagram toolbar to organize the objects and wires without individually aligning the objects and cleaning up the wires.

Design Problems

169

FIGURE D3.1

The unedited Average VI. D3.2

Create a front panel that has 8 LED indicators and a vertical slider control that is an 8 bit unsigned integer. Display a digital indicator for the slider, and make sure that the LEDs are evenly spaced and aligned at the bottom. The problem is to turn the 8 LEDs into a binary (base 2) representation for the number in the slider. For example, if the slider is set to the number 10 (which in base 2 is 00001010 = 1 ∗ (23 ) + 1 ∗ (21 )), the LEDs 1 and 3 should be on. To test your solution, check the number 131. LEDs 0, 1 and 7 should be on since 131 is 10000011 in base 2.

D3.3

Construct a VI that generates a random number between −10 and 10. The VI should display the random number on an indicator on the front panel and then light an LED corresponding to the range in which the number falls. Use one LED for negative values of the random number, one LED for values in the range of 0 to 4, and one LED for values greater or equal to 5. Change the properties of the LEDs so that they are bright yellow when turned on and dark yellow when off. Use descriptive labels for the indicators and use the tools on the Align Objects and Distribute Objects menus to space the objects evenly on the block diagram and front panel.

170

CHAPTER 3

Editing and Debugging Virtual Instruments

D3.4

In this design problem you will edit six gauges on the front panel of a VI and then wire the block diagram to take an average of the inputs from five input gauges and display the average on the remaining indicator gauge. Consider the VI shown in Figure D3.4. The VI is named Gauge Properties.vi and can be found in the Chapter 3 subfolder in the Exercises&Problems folder within the Learning directory. Open the VI and edit the front panel so that all the gauges look the same (size, color, font, and needles). Align the gauges in a logical order. Then switch to the block panel and wire up the gauges to take an average of the inputs from gauges 1 through 5 and display it on the indicator gauge 6. Save the edited VI as Gauge Properties.vi in the Users Stuff folder in the Learning directory.

D3.5

Develop a VI that has two inputs, X and Y, where X is always negative and Y always positive. The VI should compute the ratio X/Y and output the quotient and the remainder. Consider the VI shown in Figure D3.5. It is named Logic Debug.vi and can be found in the Chapter 3 subfolder in the Exercises&Problems folder within

FIGURE D3.4

Practice with editing and wiring.

Design Problems

171

the Learning directory. Open the VI and make two runs. For the first run, have |X| > Y with X < 0 and Y > 0. Record the resulting quotient and remainder. For the second run, have |X| < Y with X < 0 and Y > 0. Record the resulting quotient and remainder. Are they what you expected? Why or why not? Switch to the block diagram and edit the VI appropriately to obtain the desired results when |X| > Y with X < 0 and Y > 0 and when |X| < Y with X < 0 and Y > 0. Save the edited VI as Logic Debug.vi in the Users Stuff folder in the Learning directory.

FIGURE D3.5

Debugging a logic error and designing a VI to compute the quotient and remainder of X/Y when X < 0 and Y > 0.

CHAPTER 4

SubVIs 4.1 What Is a SubVI? 173 4.2 Review of the Basics 174 4.3 Editing the Icon and Connector 177 4.4 The Help Window 184 4.5 Using a VI as a SubVI 188 4.6 Creating a SubVI from a Selection 191 4.7 Error Checking and Error Handling 193 4.8 Saving Your SubVI 195 4.9 The VI Hierarchy Window 196 4.10 Building Blocks: Pulse Width Modulation 198 4.11 Relaxed Reading: Embedded Graphical System Design Empowers Life-Saving Spider Robots 201 4.12 Summary 203 In this chapter we learn to build subVIs. SubVIs are VIs used by other VIs. The hierarchical design of LabVIEW applications depends on the use of subVIs. We will discuss creating subVIs from VIs and creating subVIs from selections. Automatic error handling, manual error handling, and error clusters are presented as three mechanisms to tackle the important tasks of VI and subVI error checking and error handling. The Icon Editor is used to personalize subVI icons. The VI Hierarchy window will be introduced as a helpful tool for managing your programs. G OA L S

1. 2. 3. 4.

172

Learn to build and use subVIs. Understand the hierarchical nature of VIs. Practice with the Icon Editor and with assigning terminals. Understand the importance of error checking and handling.

173

Section 4.1 What Is a SubVI?

4.1

WHAT IS A SUBVI? It is important to understand and appreciate the hierarchical nature of virtual instruments. SubVIs are critical components of a hierarchical and modular VI that is easy to debug and maintain. A subVI is a stand-alone VI that is called by other VIs—that is, a subVI is used in the block diagram of a top-level VI. SubVIs are analogous to subroutines in text-based programming languages like C or Fortran, and the subVI node is analogous to a subroutine call statement. The pseudocode and block diagram shown in Figure 4.1 demonstrate the analogy between subVIs and subroutines. There is no limit to the number of subVIs you can use in a calling VI. Using subVIs is an efficient programming technique in that it allows you to reuse the same code in different situations. The hierarchical nature of programming follows from the fact that you can call a subVI from within a subVI. You can create subVIs from VIs, or create them from selections (selecting existing components of a VI and placing them in a subVI). When creating a new subVI from an existing VI, you begin by defining the inputs and outputs of the subVI, and then you “wire” the subVI connector properly. This allows Calling program

Calling VI

This is the subVI Subroutine

SubVI FIGURE 4.1

Analogy between subVIs and subroutines.

174

CHAPTER 4

SubVIs

calling VIs to send data to the subVI and to receive data from the subVI. On the other hand, if an existing complex block diagram has a large number of icons, you may choose to group related functions and icons into a lower-level VI (that is, into a subVI) to maintain the overall simplicity of the block diagram. This is what is meant by using a modular approach in your program development.

4.2 REVIEW OF THE BASICS Before moving on to the subject of subVIs, we present a brief review of some of the basics presented in the first three chapters as part of an exercise in constructing a VI. Your VI will ultimately be used as a subVI later in the chapter. Three parameters associated with a circle of given radius are circumference, diameter, and area. For a radius of length r we have the following relationships: C = 2πr A = πr 2 D = 2r where C denotes circumference, A denotes area, D denotes diameter, and π is a constant. In this chapter we will build a subVI that computes and outputs C, A, and D, given the circle radius r as input. To begin the design process, we will construct a VI that performs the desired calculations. Then, later in the chapter we will modify the VI so that it can be used as a subVI in other applications. The task is to construct a VI to utilize the formulas given above to compute C, A, and D, given r . The following list serves as a step-by-step guide. Feel free to deviate from the provided list according to your own style. As you proceed through this book you will find that the step-by-step lists will slowly disappear, and you will have to construct your VIs on your own (with help, of course!). 1. Open a new VI. Save the untitled VI as Circle Measurement.vi. In this case you are saving the VI before any programming has actually occurred. This is a matter of personal choice, but saving a VI frequently during development may save you a great deal of rework if your system freezes up or crashes. 2. Add a numeric control to the front panel and label it r. This will be where the radius is input.

Section 4.2 Review of the Basics

175

3. Place a numeric indicator on the front panel and label it C. This will be where the circumference is displayed. 4. Make two duplicates (or clones) of the numeric indicator. Using the Positioning tool, select the numeric control while pressing the (Windows) or (Macintosh) key and drag the numeric control to a new location. When you release the mouse button, a copy labeled C 2 appears in the new location. Repeat this process so that three numeric indicators are visible on the front panel. 5. Label the new numeric indicators A and D. These indicators will display area and diameter. 6. Place the numeric indicators in a column on the right side of the front panel. Using the Align Objects tool, align the three numeric indicators by their left edges. 7. Switch to the block diagram. Arrange the control and indicator terminals so that the three indicator terminals appear aligned in a vertical column on the right side and the control appears on the left side. 8. Use functions and constants from the ProgrammingNumeric palette to program the formulas for circumference, area, and diameter. You can use the VI shown in Figure 4.2 as a guide. 9. Once the block diagram has been wired, switch back to the front panel and input a value into the radius control. 10. Run the program with Run Continuously and select Highlight Execution to watch the data flow through the program. Change the value of the radius and see how the outputs change. When you are finished experimenting, you can stop the program execution. 11. Practice single-stepping through the program using the step buttons on the block diagram. 12. Once the VI execution is complete, switch back to the front panel and right-click on the icon in the upper right corner. Select Show Connector from the menu. Observe the default connector that appears, as illustrated in Figure 4.3. When we are done, it will indicate one input terminal and three output terminals. We will be learning how to edit the icon and connector in the next section. 13. Save the VI by selecting Save from the File menu. This exercise provided the opportunity to practice placing objects on the front panel, wiring them on the block diagram, using editing techniques to arrange the objects for easy visual inspection of the code, and using debugging

176

CHAPTER 4

SubVIs

VI icon Circumference Area Diameter

Circle radius

FIGURE 4.2

The Circle Measurements VI.

Default VI connector

FIGURE 4.3

The Circle Measurements icon terminal.

tools to verify proper operation of the VI. The Circle Measurements VI can be used as a subVI (requiring some effort to wire the VI connector properly), and that is the subject of the following sections.

177

Section 4.3 Editing the Icon and Connector

A working version of the Circle Measurements VI can be found in the Chapter 4 folder of the Learning directory. It is called Circle Measurements.vi.

4.3

EDITING THE ICON AND CONNECTOR A subVI is represented by an icon in the block diagram of a calling VI. The subVI also must have a connector with terminals properly wired to pass data to and from the top-level VI. In this section we discuss icons and connectors. 4.3.1

Icons Every VI has a default icon displayed in the upper right corner of the front panel and block diagram windows. The default icon is a picture of the LabVIEW logo and a number indicating how many new VIs you have opened since launching LabVIEW. You use the Icon Editor to customize the icon. To activate the editor, right-click on the default icon in the front panel and select Edit Icon as illustrated in Figure 4.4. You can also display the Icon Editor by double-clicking on the default icon.

!

You can only open the Icon Editor when the VI is not in Run mode. If necessary, you can change the mode of the VI by selecting Change to Edit Mode from the Operate menu. The Icon Editor dialog box provides editing tools for creating icons. As shown in Figure 4.5, it provides icon templates, many useful glyphs, options for adding and formatting icon text, and support for editing with layers. The Icon Editor dialog box saves icons you create in both 256-color and black-and-white

Right-click on the icon Select Edit Icon

FIGURE 4.4

Activating the Icon Editor.

178

CHAPTER 4

Add text to the icon Glyphs library

Templates page

SubVIs

Display Layers page

Pixel editing area

True size icon

Displays the RGB color components of the pixel corresponding to the cursor location.

Displays the x-y position of the pixel corresponding to the cursor location. The Z value represents the total number of user layers in the icon.

FIGURE 4.5

The Icon Editor.

format. You also can use it to create and save icon templates or glyphs for later use as 256-color .png files. The tools on the palette at the right of the dialog box are used to create the icon design in the pixel editing area. A true-size image of the icon appears just right of center in the dialog box and to the left of the pixel editing area (see Figure 4.5). The tools in the Icon Editor palette can be used to perform many functions, as described in Table 4.1. If you have used other paint programs, you will be familiar with these tools. You can cut, copy, and paste images from and to the icon. When you paste an image and a portion of the icon is selected, the image is resized to fit into the selection.

!

The edited icon you create might appear slightly different from the corresponding icon on the block diagram, since the Icon Editor dialog box displays icons in 24-bit color but LabVIEW displays icons only in 8-bit color on the block diagram. The Icon Editor dialog box includes four main pages: Templates, Icon Text, Glyphs, and Layers. Selecting Templates displays icon templates you

179

Section 4.3 Editing the Icon and Connector TABLE 4.1 Icon Editor Tools

Draws individual pixels in the Line Color you specify

Draws a line in the Line Color you specify

Sets the Line Color or the Fill Color

Fills all connected pixels of the same color with Line Color

Draws a rectangular border in the Line Color

Draw a rectangle with a border in the Line Color and filled in the Fill Color

Draws an elliptical border in the Line Color

Draws an ellipse with a border in the Line Color and filled in the Fill Color

Draws individual pixels as transparent

Enters text at the location you specify

Selects an area of the icon to cut, copy, or move

Moves all pixels in the user layer you select

Horizontally flips the user layer you select

Rotates the user layer you select in a clockwise direction

Specifies the color to use for lines or borders and for fill areas

Line color Fill color

can use as background for the icon. This page displays all .png, .bmp, and .jpg files in the Icon Templates directory of the LabVIEW Data folder. Lists of icon templates by category are presented with names that correspond to the subfolders in the Icon Templates directory. You can also filter templates by keyword so that the Icon Editor dialog box displays all icon templates whose name contains the given keyword. Selecting Icon Text displays a page that allows you to place text on the icon. You can specify four lines of text, the color of the text in each line, the font and font size, alignment (left, center, or right), and several other characteristics of the text. Selecting Glyphs displays a library from which you can select glyphs to include in the icon. All .png, .bmp, and .jpg files in the Glyphs directory of the LabVIEW Data folder are displayed. You can synchronize the glyphs available on this page with the most recent glyphs in the Icon Library at ni.com by selecting ToolsSynchronize. You can use layers in the design of the icon. Selecting the Layers page displays all layers of the icon. On that page you can display the preview, name, opacity, and visibility of the Icon Text layer and the Icon Template layer. You can change only the opacity and visibility of these two layers. On the Layer page you also find

180

CHAPTER 4

SubVIs

the preview, name, opacity, and visibility of all user layers. You can add layers, remove layers, and move up and down between layers. Select LayersShow Layers Page to display the Layers page if it is not showing. When you have finished editing, click on the OK button at the bottom right of the Icon Editor to save your edited icon and return to the front panel window, or click on the Cancel button to return to the front panel window without saving any changes. The Show Terminals option (accessed in ToolsShow Terminals in the Icon Editor pull-down menu) can be used to display the terminal pattern of the connector overlaid on the icon. As an exercise, open Circle Measurements.vi and edit the icon. Remember that you developed the Circle Measurements.vi at the beginning of this chapter—it should be saved in Users Stuff. In case you did not save it before or cannot find it now, you can open the VI located in the Chapter 4 folder in the Learning directory. An example of an edited icon is shown in Figure 4.6. Can you replicate the new icon? Check out the Circle Measurements Edited.vi to see the edited icon shown in Figure 4.6.

Unedited icon

Edited icon FIGURE 4.6

Editing the Circle Measurements VI icon.

4.3.2

Connectors The connector is a set of terminals that correspond to the VI controls and indicators. This is where the inputs and outputs of the VI are established so that

181

Section 4.3 Editing the Icon and Connector

the VI can be used as a subVI. A connector receives data at its input terminals and passes the data to its output terminals when the VI is finished executing. Each terminal corresponds to a particular control or indicator on the front panel. The connector terminals act like parameters in a subroutine parameter list of a function call. If you use the front panel controls and indicators to pass data to and from subVIs, these controls or indicators need terminals on the connector pane. In this section, we will discuss how to define connections by choosing the number of terminals you want for the VI and assigning a front panel control or indicator to each of those terminals.

!

You can view and edit the connector pane from the front panel only. To define a connector, you select Show Connector from the icon pane menu on the front panel window as shown in Figure 4.7. The connector replaces the icon in the upper right corner of the front panel window. By default, LabVIEW displays a terminal pattern shown in Figure 4.7. Control terminals are on the left side of the connector pane, and indicator terminals are on the right. If desired, you can select a different terminal pattern for your VI. In the early stage of creating a new VI or subVI, if you think you may make changes that would require additional inputs or outputs, you should consider keeping the default connector pane pattern shown in Figure 4.7, leaving the extra terminals unassigned. This

Right-click on icon pane Select Show Connector Default connector

1 input 3 outputs FIGURE 4.7

Defining a connector.

Each rectangle represents a terminal area

182

CHAPTER 4

SubVIs

Right-click on icon pane

Select Patterns

Select 3 inputs and 1 output and Flip Horizontal FIGURE 4.8

Changing your terminal pattern.

will not adversely affect the function of the code but will provide flexibility so you can make changes without breaking existing wire connections. 4.3.3

Selecting and Modifying Terminal Patterns To select a different terminal pattern for your VI, right-click on the connector and choose Patterns. This process is illustrated in Figure 4.8. To change the pattern, click on the desired pattern on the palette. If you choose a new pattern, you will lose any assignment of controls and indicators to the terminals on the old connector pane.

!

The maximum number of terminals available for a subVI is 28. If you want to change the spatial arrangement of the connector terminal patterns, choose one of the following commands from the connector pane menu: Flip Horizontal, Flip Vertical, or Rotate 90 Degrees. If you want to add a terminal to the connector pattern, place the cursor where the terminal is to be added, right-click on the connector pane window, and select Add Terminal. If you want to remove an existing terminal from the pattern, right-click on the terminal and select Remove Terminal. Think ahead and plan your connector patterns well. For example, select a connector pane pattern with extra terminals if you think that you will add additional inputs or outputs at a later time. With these extra terminals, you do not have to change the connector pane for your VI if you find you want to add

Section 4.3 Editing the Icon and Connector

183

another input or output. This flexibility enables you to make subVI changes with minimal effect on your hierarchical structure. Another useful hint is that if you create a group of subVIs that are often used together, consider assigning the subVIs a consistent connector pane with common inputs. You then can easily remember each input location without using the Context Help window—this will save you time. If you create a subVI that produces an output that is used as the input to another subVI, try to align the input and output connections. This technique simplifies your wiring patterns and makes debugging and program maintenance easier. Place inputs on the left and outputs on the right of the connector when linking controls and indicators—this prevents complex wiring patterns.

4.3.4

Assigning Terminals to Controls and Indicators Front panel controls and indicators are assigned to the connector terminals using the Wiring tool. The following steps are used to associate the connector pane with the front panel controls and indicators. 1. Click on the connector terminal with the Wiring tool. The terminal turns black, as illustrated in Figure 4.9(a). 2. Click on the front panel control or indicator that you want to assign to the selected terminal. As shown in Figure 4.9(b), a dotted-line marquee frames the selected control. 3. Position the cursor in an open area of the front panel and click. The marquee disappears, and the selected terminal takes on the data color of the connected object, indicating that the terminal is assigned. This process is illustrated in Figure 4.9(c).

!

The connector terminal turns white to indicate that a connection was not made. If this occurs, you need to repeat steps 1 through 3 until the connector terminal takes on the proper data color. 4. Repeat steps 1–3 for each control and indicator you want to connect. The connector terminal assignment process also works if you select the control or indicator first with the Wiring tool and then select the connector terminal. As already discussed, you can choose a pattern with more terminals than you need since unassigned terminals do not affect the operation of the VI. It is also true that you can have more front panel controls or indicators than terminals. Once the terminals have been connected to controls and indicators, you can disconnect them all at one time by selecting Disconnect All Terminals in

184

CHAPTER 4

SubVIs

Move Wiring tool to numeric indicator and _ click a dashed box appears

Click on _ terminal it turns black. (a)

(b) Terminal takes on data color of connected control

(c) Move cursor to open area and click FIGURE 4.9

Assigning connector terminals to controls and indicators.

the connector pane shortcut menu. Note that although the Wiring tool is used to assign terminals on the connector to front panel controls and indicators, no wires are drawn.

4.4 THE HELP WINDOW You enable the Context Help window by selecting HelpShow Context Help. When you do this, you find that whenever you move an editing tool across a subVI node, the Context Help window displays the subVI icon with wires attached to each terminal. An example is shown in Figure 4.10 in which the cursor was moved over the subVI Temp & Vol.vi and the Context Help window appeared and showed that the subVI has two outputs: Temp and Volume.

185

Section 4.4 The Help Window

Context Help window for Temp & Vol.vi

Move cursor over subVI and the Context Help window will appear

FIGURE 4.10

The Context Help window.

LabVIEW has a help feature that can keep you from forgetting to wire subVI connections—indications of required, recommended, and optional connections in the connector pane and the same indications in the Context Help window. For example, by classifying an input as Required, you can automatically detect whether you have wired the input correctly and prevent your VI from running if you have not wired correctly. To view or set connections as Required, Recommended, or Optional, right-click a terminal in the connector pane on the VI front panel and select This Connection Is. A check mark indicates its status, as shown in Figure 4.11. By default, inputs and outputs of VIs you create are set to

Right-click on connector terminal

Select This Connection Is

This connector terminal is Recommended FIGURE 4.11

Showing the status of terminal connectors.

186

CHAPTER 4

SubVIs

Recommended—if a change is desired, you must change the default to either Required or Optional. When you make a connection Required, then you cannot run the VI as a subVI unless that connection is wired correctly. In the Context Help window, Required connections appear in bold text. When you make a connection Recommended, then the VI can run even if the connection is not wired, but the error list window will list a warning. In the Context Help window, Recommended connections appear in plain text. A VI with Optional connections can run without the optional terminals being wired. In the Context Help window, Optional connections are grayed text for detailed diagram help and hidden for simple diagram help. Building a SubVI

A VI designed to compute the radius, circumference, and area of a circle was presented in Section 4.2. In this exercise you will assign the connector terminals of that VI to the numeric controls and numeric indicator so that the VI can be used as a subVI by other programs. Begin by opening Circle Measurements.vi in the Chapter 4 folder of the Learning directory. Recall that the difference between the two VIs Circle Measurements Edited and Circle Measurements is that the edited version has a custom icon rather than the default icon. A subVI with an edited icon (rather than the default icon) enables easier visual determination of the purpose of the subVI because you can inspect the icon as it exists in the code. When you have completed assigning the connector terminals, the front panel connector pane should resemble the one shown in Figure 4.12. To display the

1 input 3 outputs (orange) (orange)

This VI is now ready to be used as a subVI

FIGURE 4.12

Assigning terminals for the Circle Measurements VI.

187

Section 4.4 The Help Window

Add description in this block area

Click here when satisfied with the description FIGURE 4.13

Typing the description for the subVI.

terminal connectors, right-click on the VI icon in the front panel and select Show Connector. You should notice that the default connector appears. Right-click on it and choose Patterns. Select a connector with 3 inputs and 1 output. The resulting connector looks like the connector in Figure 4.12. Using the Wiring tool, assign the input terminal to the numeric control r. Similarly, assign the three output terminals to the numeric indicators C, A, and D. There are two levels of code documentation that you can pursue. It is important to document your code to make it accessible and understandable to other users. You can document a VI by choosing FileVI PropertiesDocumentation. A VI description box will appear as illustrated in Figure 4.13. You type a description of the VI in the dialog box, and then whenever Show Context Help is selected and the cursor is placed over the VI icon, your description will appear in the Context Help window. You can also document the objects on the front panel by right-clicking on an object and choosing Description and Tip from the object shortcut menu. Type the object description in the dialog box that appears as in Figure 4.14. You cannot edit the object description in Run Mode—change to Edit Mode. Continuing with the exercise, you should add a description for each object on the front panel. Some suggested descriptions follow: r : Radius of circle to be analyzed. C: The circumference of a circle with radius equal to r .

188

CHAPTER 4

SubVIs

Right click on object Put description of object here

Select Description and Tip...

Click here when finished FIGURE 4.14

Documenting objects on a subVI.

A: The area of a circle with radius equal to r . D: The diameter of a circle with radius equal to r . When you have finished assigning the connector terminals to the controls and indicators, and you have documented the subVI and each of the controls and indicators, save the subVI as Circle Measurements subVI.vi. Make sure to save your work in the Users Stuff folder. A working version of Circle Measurements subVI can be found in the Chapter 4 folder in the Learning directory. You may want to open the VI, read the documentation, and take a look at the icon and the connector just to verify that your construction of the same subVI was done correctly.

4.5 USING A VI AS A SUBVI There are two basic ways to create and use a subVI: creating subVIs from VIs and creating subVIs from selections. In this section we concentrate on the first method, that is, using a VI as a subVI. Any VI that has an icon and a connector can be used as a subVI. In the block diagram, you can select VIs to use as subVIs from FunctionsSelect a VI palette. Choosing this option produces a

189

Section 4.5 Using a VI as a SubVI

Functions palette

Click here to view VI list FIGURE 4.15

The Select a VI palette.

file dialog box from which you can select any available VI in the system, as shown in Figure 4.15. The LabVIEW Student Edition comes with many ready-to-use VIs. In Chapter 1 you searched around the LabVIEW examples and found many of the example and demonstration VIs. In the following example you will use one of the preexisting VIs called Temp & Vol.vi as a subVI. Using a VI as a SubVI

1. Open a new front panel. 2. Select a vertical slide switch control from the ControlsModernBoolean palette and label it Temperature Scale. Place free labels on the vertical slide switch to indicate Fahrenheit and Celsius using the Labeling tool, as shown in Figure 4.16, and arrange the labels as shown in the figure. 3. Select a thermometer from the ControlsModernNumeric palette and place it on the front panel. Label the thermometer Temperature. 4. Change the range of the thermometer to accommodate values ranging between 0.0 and 100.0. With the Operating tool, double-click on the high limit and change it to 100.0 if necessary. 5. Switch to the block diagram by selecting WindowShow Block Diagram. 6. Right-click in a free area of the block diagram and choose Functions Select a VI to access the dialog box. Select Temp & Vol.vi in the Chapter 4

190

CHAPTER 4

SubVIs

Degrees Fahrenheit

Degrees Celsius FIGURE 4.16

Calling the subVI Temp & Vol.vi.

folder of the Learning directory. Click Open in the dialog box to place Temp & Vol.vi on the block diagram. 7. Add the other objects to the block diagram using Figure 4.16 as a guide. Place a Subtract function and a Divide function on the block diagram. These are located in the FunctionsProgrammingNumeric palette. On the Subtract function, add a numeric constant equal to 32. You can add the constant by right-clicking on an input of the Subtract function and selecting Create Constant. Then using the Labeling tool change the constant from the default 0.0 to 32.0. Similarly, add a numeric constant of 1.8 on the Divide function. These constants are used to convert from degrees Fahrenheit to Celsius according to the relationship ◦

8. 9.

10. 11.

C=

◦ F − 32

1.8

.

Add the Select function (located on the ProgrammiingComparisons subpalette of the Functions palette). The Select function returns the value wired to the True or False input, depending on the Boolean input value. Use Show Context Help for more information on how this function works. Wire the diagram objects as shown in Figure 4.16. Switch to the front panel and click the Run Continuously button in the toolbar. The thermometer shows the value in degrees Fahrenheit or degrees Celsius, depending on your selection. Switch the scale back and forth to select either Fahrenheit or Celsius. When you are finished experimenting with your VI, save it as Thermometer Scale.vi in the Users Stuff folder.

Section 4.6 Creating a SubVI from a Selection

191

A working version of Thermometer Scale.vi exists in the Chapter 4 folder located in the Learning directory. When you open this VI, notice the use of color on the vertical switch (orange denotes Fahrenheit and blue represents Celsius). In the previous exercise, the stand-alone Temp & Vol.vi was used in the role of a subVI. Suppose that you have a subVI on your block diagram and you want to examine its contents—to view the code. You can easily open a subVI front panel window by double-clicking on the subVI icon. Once the front panel opens, you can switch to the subVI block diagram. At that point, any changes you make to the subVI code alter only the version in memory—until you save the subVI. Also note that, even before saving the subVI, the changes affect all calls to the subVI and not just the node you used to open the VI.

4.6

CREATING A SUBVI FROM A SELECTION The second way to create a subVI is to select components of the main VI and group them into a subVI. You capture and group related parts of VIs by selecting the desired section of the VI with the Positioning tool and then choosing Create SubVI from the Edit pull-down menu. The selection is automatically converted into a subVI, and a default icon replaces the entire section of code. The controls and indicators for the new subVI are automatically created and wired to the existing wires. Using this method of creating subVIs allows you to modularize your block diagram, thereby creating a hierarchical structure. Building a SubVI Using the Selection Technique

In this exercise you will modify the Thermometer Scale VI developed in Section 4.5 to create a subVI that converts Fahrenheit temperature to Celsius temperature. The subVI selection process is illustrated in Figure 4.17. Open the Thermometer Scale VI by selecting Open from the File menu. The VI is located in the Chapter 4 folder of the Learning directory. For reference, the front panel and block diagram are shown in Figure 4.16. To create a subVI that converts Fahrenheit to Celsius, begin by switching to the block diagram window. The goal is to modify the existing block diagram to call a subVI created using the Create SubVI option. Select the block diagram elements that comprise the conversion from Fahrenheit to Celsius, as shown in Figure 4.17. A moving dashed line will frame the chosen portion of the block diagram. Now select Create SubVI in the Edit menu. A default subVI icon will appear in place of the selected group of objects. You can use this selection method of creating subVIs to modularize your VI. The next step is to modify the icon of the new subVI. Open the new subVI by double-clicking on the default icon called Untitled 1 (SubVI). Two front panel objects should be visible: one numeric control labeled Temp and one unlabeled numeric indicator. Right-click on the numeric indicator and select Visible

192

CHAPTER 4

SubVIs

Select desired objects with the Positioning tool

Expandable icon FIGURE 4.17

Selecting the code that converts from Fahrenheit to Celsius.

ItemsLabel from the shortcut menu. Type Celsius Temp in the text box and then align the two objects on the front panel by their bottom edges. Use the Icon Editor to create an icon similar to the one shown in Figure 4.18. Invoke the editor by right-clicking in the Icon Pane in the front panel of the subVI and selecting Edit Icon from the menu. Erase the default icon by doubleclicking on the Select tool and pressing . Redraw the icon frame by double-clicking on the rectangle tool which draws a rectangle around the icon. The easiest way to create the text is using the Text tool and the font Small Fonts. The arrow can be created with the Pencil tool. The connector is automatically wired when a subVI is created using the Create SubVI option. When you are finished editing the icon, close the Icon Editor by clicking on OK. The new icon appears in the upper right corner of the front panel, as shown in Figure 4.18. Right-click on the Convert F to C.vi and click on View as Icon to remove the checkmark. Then use the Positioning tool to expand the icon to show the input Temp and the output Celsius Temp, as shown in Figure 4.17.

193

Section 4.7 Error Checking and Error Handling

Edited icon

Label output Celsius Temp SubVI code

FIGURE 4.18

The new subVI to convert degrees Fahrenheit to degrees Celsius.

Save the subVI by choosing Save from the File menu. Name the VI Convert F to C and save it in the Users Stuff folder.

! 4.7

You cannot build a subVI from a section of code with more than 28 inputs and outputs because 28 is the maximum number of inputs and outputs allowed on a connector pane.

ERROR CHECKING AND ERROR HANDLING Error checking is a key element of a VI or subVI. If an error situation arises, it is important to know why and where the error occurred. Also it is often important to programmatically respond to errors. If an error occurs, you may want to avoid suspending the execution of the VI and instead to respond programmatically by taking another course of action within the code. You might, for example, pause the execution and wait for a user input. When you perform any kind of input or output (I/O) you should be ready to handle errors that might occur. Most I/O functions return errors and supply mechanisms to handle them appropriately. There are three ways to tackle error checking and error handling: automatic error handling, manual error handling, and error clusters. 4.7.1

Automatic Error Handling By default, LabVIEW automatically handles errors by suspending execution, highlighting the subVI or function where the error occurred, and displaying an

194

CHAPTER 4

SubVIs

error dialog box. Each error has a numeric code and a corresponding error message, supplying the information needed to investigate the source of the error. You can disable automatic error handling for the current VI, for all new VIs, and for subVIs. To disable it for the current VI, select FileVI Properties. In the VI Properties dialog box, select Execution from the Category pull-down menu and deselect Enable automatic error handling. To disable automatic error handling for any new VIs you create, select ToolsOptions. In the Options dialog box, select Block Diagram from the Category list and deselect Enable automatic error handling in new VIs. To disable automatic error handling for a subVI or function within a VI, wire its error out parameter to the error in parameter of another subVI or function or to an error out indicator. 4.7.2

Manual Error Handling You can formulate error-handling decisions to manage errors on the block diagram using the error-handling VIs and functions on the Dialog & User Interface subpalette (found on the Programming palette) in conjunction with the error in and error out parameters of most VIs and functions and the debugging tools discussed in Chapter 3. For example, placing the Simple Error Handler.vi from the Dialog & User Interface palette on the block diagram provides a straightforward means to obtain a description of any error and optionally display a dialog box. You can then use the debugging tools, such as Single Stepping and Execution Highlighting, to delve deeper into the areas of the code with the error. Functions generally return errors with numeric error codes, and VIs return errors with an error cluster. National Instruments strongly recommends that you use some type of error handling in your VIs.

4.7.3

Error Clusters Error-cluster controls and indicators are used to create error inputs and outputs in subVIs. Consider the VI in Figure 4.19, which generates and plots one of the following signals: sine wave, sawtooth, square wave, and triangle wave. It also allows the user to vary the signal amplitude and frequency. On the block diagram the error out is a cluster of three elements providing the following information: status is a Boolean value that reports TRUE if an error occurred. code is a 32-bit signed integer that identifies the error numerically. A nonzero error code coupled with a status of FALSE signals a warning rather than an error. source is a string that identifies where the error occurred.

195

Section 4.8 Saving Your SubVI

Error cluster indicator

Right click and select Explain Error

Cluster with status, code, and source FIGURE 4.19

Using error clusters to assist with error checking and error handling.

In Figure 4.19, the error-cluster indicator on the front panel provides the above error information to the user. When an error occurs, right-click within the cluster border and select Explain Error from the shortcut menu to open the Explain Error dialog box. The shortcut menu includes an Explain Warning option if the VI contains warnings but no errors. The VI in Figure 4.19 can be found in Chapter 4 of the Learning directory. It is named Function Generation with Error Handling.vi.

4.8

SAVING YOUR SUBVI It is highly recommended that you save your subVIs to a file in a directory rather than in a library. While it is possible to save multiple VIs in a single file called a VI library, this is not desirable. Saving VIs as individual files is the most effective storage path because you can copy, rename, and delete files more easily than when using a VI library.

196

CHAPTER 4

SubVIs

VI libraries have the same load, save, and open capabilities as other directories, but they are not hierarchical. That is, you cannot create a VI library inside of another VI library, nor can you create a new directory inside a VI library. After you create a VI library, it appears in the File dialog box as a file with an icon that is somewhat different from a VI icon.

4.9 THE VI HIERARCHY WINDOW When you create an application, you generally start at the top-level VI and define the inputs and outputs for the application. Then you construct the subVIs that you will need to perform the necessary operations on the data as it flows through the block diagram. As discussed in previous sections, if you have a very complex block diagram, you should organize related functions and nodes into subVIs for desired block diagram simplicity. Taking a modular approach to program development creates code that is easier to understand, debug, and maintain. The VI Hierarchy window displays a graphical representation of the hierarchical structure of all VIs in memory and shows the dependencies of top-level VIs and subVIs. There are several ways to access the VI Hierarchy window: You can select ViewVI Hierarchy to open the Hierarchy Window with the VI icon of the current active window surrounded by a thick red border. You can right-click on a subVI and select Show VI Hierarchy to open the VI Hierarchy window with the selected subVI surrounded by a thick red border. If the VI Hierarchy window is already open, you can bring it to the front by selecting it from the list of open windows under the Window menu. The VI Hierarchy window for the Thermometer Scale subVI.vi is shown in Figure 4.20. The window displays the dependencies of VIs by providing information on VI callers and subVIs. As you move the Operating tool over objects in the window, the name of the VI is shown below the VI icon. This window also contains a toolbar, as shown in Figure 4.20, that you can use to configure several types of settings for displayed items. You can switch the VI Hierarchy window display mode between horizontal and vertical display by pressing either the Horizontal Layout or Vertical Layout button in the hierarchy toolbar. In a horizontal display, subVIs are shown to the right of their calling VIs; in a vertical display, they are shown below their calling VIs. In either case, the subVIs are always connected with lines to their calling VIs. The window shown in Figure 4.20 is displayed vertically. Arrow buttons and arrows beside nodes indicate what is displayed and what is hidden according to the following rules: A red arrow button pointing towards the node indicates some or all subVIs are hidden, and clicking the button will display the hidden subVIs.

197

Section 4.9 The VI Hierarchy Window

Arranges nodes left to right

Arranges nodes top to bottom

Redraws the window layout to minimize crossings and maximize symmetry

Displays the hierarchy at its orginial size Resizes the hierarchy to fit the current size of the window Red box indicating that this is the focus node Black arrow buttons

Arrange the nodes into groups according to the libraries the nodes belong to Select Straight Line or Round Orthogonal edge style for the lines that connect items in the window Toggles the VI Hierarchy window to include or exclude type definitions Toggles the VI Hierarchy window to include or exclude globals Toggles the VI Hierarchy window to include or exclude VIs in vi.llb

FIGURE 4.20

The VI Hierarchy window for Thermometer Scale subVI.vi.

A black arrow button pointing towards the subVIs of the node indicates all immediate subVIs are shown. A blue arrow pointing towards the callers of the node indicates the node has additional callers in this VI hierarchy but they are not shown at the present time. If you show all subVIs, the blue arrow will disappear. If a node has no subVIs, no red or black arrow buttons are shown. Double-clicking on a VI or subVI opens the front panel of that node. You also can right-click on a VI or subVI node to access a menu with options, such as showing or hiding all subVIs, opening the VI or subVI front panel, editing the VI icon, and so on. You can initiate a search for a given VI by simply typing the name of the node directly onto the VI Hierarchy window. When you begin to type in text from the keyboard a small search window will automatically appear displaying the text that has been typed and allowing you to continue adding text. The search for the desired VI commences immediately. The search window is illustrated in Figure 4.21. If the characters currently displayed in the search window do not match any node names in the search path, the system beeps, and no more

198

CHAPTER 4

SubVIs

Begin typing search string on the keyboard

This subVI was located by the search

FIGURE 4.21

Searching the VI Hierarchy window for VIs.

characters can be typed. You can then use the or key to delete one or more characters to resume typing. The search window disappears automatically if no keys are pressed for a certain amount of time, or you can press the key to remove the search window immediately. When a match is found you can use the right or down arrow key, the key on Windows, the key on Macintosh to find the next node that matches the search string. To find the previous matching node, press the left or up arrow key, on Windows, or on Macintosh.

BUILDING BLOCK

4.10 BUILDING BLOCKS: PULSE WIDTH MODULATION The goal of this building block is to modify the VIs created in the previous Building Block sections to be utilized as subVIs. Open Rising Edge Edited.vi and Falling Edge Edited.vi. Both VIs should be saved in the Users Stuff folder in the Learning directory. Working versions of both VIs can be found in the Building Blocks folder in the Learning directory. It is very helpful to users of your subVIs if the icons visually convey the purpose of each VI. For this exercise, begin by creating an icon and a connector for the Rising Edge Edited VI and the Falling Edge Edited VI. Use Figure 4.22 as a guide for a visual representation of the Falling Edge Edited VI. You can extend the idea to the Rising Edge Edited VI. When you are finished, save the

199

Section 4.10 Building Blocks: Pulse Width Modulation

Depicts the "falling edge" of the signals FIGURE 4.22

The edited icon for the Falling Edge Edited VI.

VIs as Rising Edge subVI.vi and Falling Edge subVI.vi in the Users Stuff folder in the Learning directory. Once the icon has been edited, it is time to assign the terminals to the inputs and outputs to establish the subVI. First, right-click on the icon and select Show Connector. Use Figure 4.23 as a guide to assign the three controls (one floatingpoint number and two integers) and the single output (a Boolean). Follow the procedure described in Section 4.3 to make the terminal assignments. Once you have developed a subVI to perform a specific task, you will likely want to have it accessible from the Functions palette so that it is readily available. To accomplish this task for your new subVIs, you need to save them in the

Edited icon

FIGURE 4.23

Connecting the Falling Edge Edited VI for use as a subVI.

200

CHAPTER 4

SubVIs

Two subVIs are ready for use FIGURE 4.24

Finding subVIs in the User.lib folder.

folder User.lib. Go ahead and save the Falling Edge and Rising Edge subVIs in User.lib located in the LabVIEW directory. After you have saved the subVIs in User.lib, you will need to exit LabVIEW and then open it again. Once this is done, open a new VI and switch to the block diagram. Navigate to User Libraries on the Functions palette and locate the icon for the Falling Edge subVI, as illustrated in Figure 4.24. The subVI is now readily accessible to you in your future programming endeavors. You can also access the subVIs through FunctionsSelect a VI by navigating to Users Stuff where you previously saved the programs. When you are done experimenting with your new VI, save it as Falling Edge subVI.vi in the Users Stuff folder in the Learning directory. You will use this VI as a building block in later chapters—so make sure to save your work! Follow the same process and construct a subVI version of the Rising Edge Edited VI. Working versions of the Falling Edge subVI and the Rising Edge subVI can be found in the Building Blocks folder of the Learning directory.

Section 4.11 Relaxed Reading

4.11

201

RELAXED READING: EMBEDDED GRAPHICAL SYSTEM DESIGN EMPOWERS LIFE-SAVING SPIDER ROBOTS

In this reading, we learn about a spider robot, developed by Nanyang Polytechnic in Singapore, that operates with a high number of degrees of freedom for good mobility in harsh environments to support critical, lifesaving rescue missions. One purpose of lifesaving equipment is to prevent casualties during rescue missions in the aftermath of catastrophes. Replacing humans in dangerous rescue missions is a remarkable application for autonomous robots. A great example is the small, mobile, intelligent, six-legged robotic spider that can avoid obstacles and access hard-to-reach locations in search of trapped victims. A highly mobile walking scheme is enabled by six independent legs that move the spider robot omnidirectionally—even on terrain where robotic movement is generally not possible or too risky. Walking and rotating are among the basic high-level motion patterns adopted from six-legged insects. With three legs moving and three lifted, the robot can reach the desired walking speed and provide the equilibrium required for harsh terrain. When creeping, the robot can squeeze through tight spaces and narrow slots, as shown in Figure 4.25. The leg mechanics and motion control are the key features of the spider robot. Smart DC brush motors drive the legs and function as integral joints of the walking mechanics. This leads to a sturdy, yet lightweight construction, reducing power consumption and improving motion dynamics. The spider also features typical autonomous robotic subsystems including machine vision, distance measuring, and wireless communication. The embedded hardware, two lithium polymer batteries, and the fuel gauges reside in the robot’s rigid body. The low-level movements of the spider robot rely on complex mathematical models calculated at run time. High-level virtual instruments from the NI LabVIEW Embedded Module for ADI Blackfin Processors continuously run an inverse kinematics algorithm to compute suitable leg-joint angles to precisely move the leg end effector along a trajectory that will create the desired spider robot motion. Besides smart motion and freedom of movement, the spider robot features an intelligent camera and a distance-measurement sensor in its “eye.” Objects and substances are localized and tracked by high-performance imageprocessing algorithms. The “eye” can also be programmed to identify any color in its vicinity. To communicate with the robot, during development and test, a permanent Bluetooth communication interface is maintained. Wireless communication is used also for reading critical parameters, such as motor status and battery level for system diagnostics, for acquiring vital algorithm variables online for tuning,

202

CHAPTER 4

SubVIs

FIGURE 4.25

Using “creeping,” one of its many motion patterns, the robot spider squeezes through tight spaces. (Courtesy of Nanyang Polytechnic Institute and Schmid Engineering.)

and for downloading new mission data prior to an operation. The ultra-lowR R power mixed signal target ZMobile is the heart of the spider robot. ZMobile is compatible with LabVIEW and integrates sensors, actuators, vision, batteries, and wireless communication in a single platform. During the successful building of the powerful spider robot, development time was greatly reduced by using the graphical programming environment R offered by the LabVIEW Embedded Module for Blackfin Processors and the R  high processor performance of the Blackfin Processor. For more information on the spider robot, please visit the NI website http://sine.ni.com/cs/app/doc/p/ id/cs-11181. R ZMobile is a registered trademark of Schmid Engineering, Switzerland. R Blackfin is registered trademark of Analog Devices, Inc.

Section 4.12 Summary

4.12

203

SUMMARY Constructing subVIs was the main topic of this chapter. One of the keys to constructing successful LabVIEW programs is understanding how to build and use subVIs. SubVIs are the primary building blocks of modular programs, that are easy to debug, understand, and maintain. They are analogous to subroutines in text-based programming languages like C or Fortran. Two methods of creating subVIs were discussed—creating subVIs from VIs and creating subVIs from VI selections. A subVI is represented by an icon in the block diagram of a calling VI and must have a connector with terminals properly wired to pass data to and from the calling VI. Automatic error handling, manual error handling, and error clusters were presented as three mechanisms to tackle the important tasks of VI and subVI error checking and error handling. The Icon Editor was discussed as the way to personalize the subVI icon so that information about the function of the subVI is readily apparent from visual inspection of the icon. The editor has a tool set similar to that of most common paint programs. The VI Hierarchy window was introduced as a helpful tool for managing the hierarchical nature of your programs.

KEY TERMS

Active window: Window that is currently set to accept user input, usually the frontmost window. You make a window active by clicking on it or by selecting it from the Window menu. Automatic error handling: Default error handling in which LabVIEW automatically suspends execution, highlights the subVI or function where the error occurred, and displays an error dialog box. Control: Front panel object for entering data to a VI interactively or to a subVI programmatically. Description box: Online documentation for VIs. Dialog box: An interactive screen with prompts in which you describe additional information needed to complete a command. Error checking: A process to tell you why and where errors occur. Error cluster: A convention for managing error inputs and outputs that enable error status to passed between subVIs and displayed on the front panel.

204

CHAPTER 4

SubVIs

Function: A built-in execution element, comparable to an operator or statement in a conventional programming language. Icon Editor: Interface similar to that of a paint program for creating VI icons. Indicator: Front panel object that displays output. Manual error handling: Error handling in which decisions are made to manage errors on the block diagram using the errorhandling VIs and functions on the Dialog & User Interface palette. Marquee: Moving, dashed border surrounding selected objects. Pseudocode: Simplified, language-independent representation of programming code. SubVI: A VI used in the block diagram of another VI— comparable to a subroutine. Top-level VI: The VI at the top of the VI hierarchy. This term distinguishes a VI from its subVIs. VI Hierarchy window: Window that graphically displays the hierarchy of VIs and subVIs. VI library: Special file that contains a collection of related VIs.

EXERCISES

E4.1

Open a new VI and switch to the block diagram window. Select Write to Text File.vi from the FunctionsProgrammingFile I/O palette and place it on the block diagram. Notice that the Run button breaks when this subVI is placed on the block diagram. Click the Broken Run button to access the Error List. The one listed error states that the VI has a required input. As you know from the chapter, each input terminal can be categorized as required, recommended, or optional. You must wire values to required inputs before you can run a VI. Recommended and optional inputs do not prevent the VI from running and use the default value for that input. Select the error from the Error List dialog box by clicking on it and then choose Show Error. Notice that the Write to Text File.vi icon is highlighted by a marquee around the icon. Open Context Help (HelpShow Context

Exercises

205

Help or ) to read about the VI, paying special attention to the inputs listed as Required (shown in bold). You should see that text is a required input. Right-click on the center terminal on the right side of the icon and select Create Control. Notice that once the string control is attached to the icon, the error disappears and you can run the VI. Navigate to the FunctionsMathematicsInteg & Diff palette and select the Numeric Integration VI and place it on the block diagram. Notice that the Run button does not break. Use Context Help again and notice that none of the inputs to this VI are Required. You will be able to run the VI without any inputs wired to it. E4.2

Open a new VI and switch to the block diagram window. Navigate to the FunctionsProgrammingTiming palette, select the Wait Until Next ms Multiple.vi and place it on the block diagram. Determine the errors that cause the Broken Run to appear. Determine a fix to the problem so that the VI can run properly.

E4.3

Open Slope.vi, which calculates the slope between two points, (X1, X2) and (Y1, Y2). The Slope.vi can be found in the Exercises&Problems folder in Chapter 4 of the Learning directory. The Run button is broken; hence, the VI is not executable. Click the Run button to access the Error List and you will find that the error is found within the subVI. You must open the subVI by double-clicking on it and correct the errors within it before the main VI will run. From within the SlopeSub.vi, go to the block diagram and wire the output of the Subtract terminal to the input of the Divide terminal. Save the subVI, return to the main VI, and notice that the Run button is not broken. Enter values into the four numeric controls in Slope.vi and run the VI to vary the slope between two points. Stop the VI. Leave the SlopeSub.vi open and go to FileNew VI to open a new VI. Go to the block diagram of the new VI to practice the various ways to insert subVIs into a main VI. First, click on the icon of the SlopeSub.vi and drag it onto the block diagram of the new VI. Place the Wiring tool over the icon and see that all the input and output terminals are present. Second, from the block diagram, go to FunctionsSelect a VI and browse to the Exercises&Problems folder in Chapter 4 of the Learning directory. Click the Open button and place the icon of the SlopeSub.vi on the block diagram. Remember that both methods of placing subVIs on block diagrams generate the same result.

E4.4

Open a new VI and go to HelpFind Examples. . .. Click on the Browse tab and press the Directory Structure button. In the center panel, double-click on the express folder. This will locate examples that predominantly use Express VIs to accomplish various tasks. Open the Lissajous2.vi by double-clicking on it and run the VI changing the controls on the front panel to alter the curve. Now go to the block diagram and see that there are many Express VIs needed to perform this program.

206

CHAPTER 4

SubVIs

From the block diagram, go to ViewVI Hierarchy. Use the tools you learned in this chapter to become familiar with the VI Hierarchy Window and explore the various subVIs used in Lissajous2.vi. E4.5

Create a VI called Sign.vi which accepts a numeric input. The VI should have a Boolean output that returns True if the input is positive, and one that returns True if the input is negative. Make an icon and configure the connector pane so that the Sign VI can be used as a subVI with another VI. Use the icon in Figure E4.5 as a guide. The connector terminals should be assigned one float input and two Boolean outputs. Once the VI terminals have been assigned, add documentation so that the Context Help will display the following statement: “Tests if an input is positive or negative.” Go to FileVI Properties and then go to Documentation to enter the information.

Edited icon

Float (orange) Boolean (green)

Input

Outputs

FIGURE E4.5

The front panel for the Sign VI illustrating the edited icon and the connector terminals.

E4.6

In this exercise you will modify a VI so that it can be employed as a subVI. Open the Find Greatest VI located in the Exercises&Problems folder in Chapter 4 of the Learning directory. Right-click the icon and notice that the connector pane does not have the right number of inputs and outputs and the terminals have not been correctly linked to the connector. To fix this, take the following steps: (a) Right-click on the icon pane and select Show Connector. (b) Right-click again on the icon pane and select Disconnect All Terminals.

Problems

207

(c) Right-click on the icon pane once again. On the Patterns menu, select the connector configuration with three terminals on the left and one terminal on the right. (d) Assign the three controls to the terminals on the left. Assign the indicator to the terminal on the right. (e) Open the Icon Editor by double-clicking on the icon and create an icon for the VI. (f) Verify that you have set up the connector pane correctly by opening a new VI and placing Find Greatest within it as a subVI. Create controls and an indicator, and run the program several times with different inputs. The output should always be equal to the greatest value input to the subVI. E4.7

An effective icon can convey information about the functionality of a subVI at a glance. The NI website has an icon art glossary containing a wide array of graphics which you may find useful to quickly design professional looking icons. Visit the Icon Art Gallery at http://zone.ni.com/devzone/cda/tut/p/id/6453 and familiarize yourself with the available graphics. Follow the link titled Guidelines for Creating Icons to learn more about basic rules of thumb to keep in mind while creating your own icons. The Calculator VI is a simple VI which performs four different operations on two numeric inputs. Open Calculator.vi found in the Exercises&Problems folder in Chapter 4 of the Learning directory. Right-click on the icon in the upper right hand corner of the front panel and select Edit Icon to create a new icon for this VI that is more descriptive. You can use the glyph library on the Icon Editor or create an icon by hand. Now right-click on the icon and select Show Connector to assign terminals to the controls and indicators. Verify that you have set up the connector pane correctly by opening a new VI and placing Calculator within it as a subVI. Create controls and an indicator, and run the program several times with different inputs.

PROBLEMS P4.1

Construct a VI that computes the average of three numbers input by the user. One computation in your program should be summing the three input numbers followed by a division by 3. The resulting average should be displayed on the front panel. Also, add a piece of code that multiplies the computed average by a random number in the range [0, . . . , 1]. Create a subVI by grouping the parts of the code that compute the average. Remember to edit the icon so that it represents the function of the subVI, namely, the average of three numbers. Figure P4.1 can be used as a guide.

208

CHAPTER 4

SubVIs

FIGURE P4.1

Computing the average of three numbers using a subVI to compute the average.

P4.2

Open Check Limit.vi, which generates a sine wave and plots it on a waveform graph. Check Limit.vi can be found in the Exercises&Problems folder in Chapter 4 of the Learning directory. The values of the sine wave are compared with a numeric control, therefore evaluating whether the sine wave exceeds the set limit. It also uses a While Loop that we will learn about it in the next chapter. Edit the connector icon so that it only has the necessary number of terminals and connect them to the appropriate controls and indicators so that all of the front panel objects can be accessed if this VI were used in the future as a subVI. Also, change the VI so the toolbar, menu bar, and scroll bars are not visible when the VI executes. (Hint: Navigate to FileVI Properties and choose Window Appearance, then choose Customize.)

P4.3

Create a subVI that multiplexes four inputs to a single output. The subVI should have four floating-point numeric controls (denoted In1 thru In4), one floating-point numeric indicator (denoted by Out), and one unsigned 8-bit integer control (denoted by Select). If Select = 1, then Out = In1; if Select = 2, then Out = In2; if Select = 3, then Out = In3; and if Select = 4, then

209

Problems

Out = In4. (Hint: The Select function VI from the ProgrammingComparison palette may be useful.) P4.4

Create a VI that executes the Quit LabVIEW VI from the Functions ProgrammingApplication Control palette. Open a new VI and place the Quit LabVIEW VI on the block diagram. To edit the VI properties, select FileVI Properties and choose the Execution category. Check the box next to Run when opened. Save the VI in Users Stuff. Close the VI and then open it again. What happens? Try to figure out how you can edit the VI. (Hint: A subVI may be useful.)

P4.5

Construct a VI that solves the quadratic formula to find the roots of the equation ax 2 + bx + c = 0 for the variable x, where the constants a, b, and c are real numbers. In general, the roots of the quadratic equation can be either two real numbers or two complex numbers. For this problem, your VI only needs to find the real roots. The solution of the quadratic equation is given by the relations:



x1 = −b + b2 − 4ac /2a and x2 = −b − b2 − 4ac /2a Construct a VI that computes the roots according to the above relationships for x1 and x2 . Use Figure P4.5 as a guide for the front panel. There should be two numeric outputs for the two roots and three inputs for the constants a, b, and c. Once you are finished building the block diagram, create an icon and configure the terminal connections so that your VI can be used as a subVI. Verify that you have done this correctly by placing your quadratic formula subVI in a new VI and connecting the terminals to controls and indicators.

Input constants Roots of quadratic equation

FIGURE P4.5

Front panel for the Quadratic Equation VI with edited icon.

210

CHAPTER 4 P4.6

SubVIs

The error outputs of many mathematics functions indicate only an error number and do not use the Error Cluster (for optimizing memory and execution speed). Consider the VI shown in Figure P4.6. It is named Mean.vi and can be found in the Chapter 4 subfolder in the Exercises&Problems folder within the Learning directory. Its objective is to compute the mean of the input array (labeled X on the front panel) using the math function Mean found in Probability & Statistics on the Mathematics palette. Add the Simple Error Handler.vi to display an error code if an error occurs. Test the VI by passing an empty array to the Mean VI. Save the VI with error handling as Mean.vi in the Users Stuff folder in the Learning directory. The Simple Error Handler VI can be found in Dialog & User Interface on the Programming palette.

FIGURE P4.6

Using the Mean function with error handling.

DESIGN PROBLEMS D4.1

Construct a subVI to calculate an age in years given a birth date and the current date as inputs. Use Figure D4.1 as a guide for the front panel. You should use three separate integer controls to enter each date: one for the day of the month, one for the month, and one for the year. Enter months as numbers. For example, use the number 1 for January, the number 2 for February, and so forth. Be sure to create an icon for the VI and connect the output and inputs to terminals on the icon. When you are finished, create documentation for your VI under VI Properties. Add the following information to the documentation: “Finds age in years of a person given the current date and the person’s birth date as input.”

211

Design Problems

Edited icon

Computed age Inputs

FIGURE D4.1

The front panel for the Age VI. D4.2

Create a subVI which will calculate the Body Mass Index (BMI) of an individual. The BMI is an internationally used measure of obesity. The subVI will have two numeric inputs: a weight in pounds and a height in inches. Calculate the BMI using the formula BMI = (703 ∗ W )/H 2 where W is the weight in pounds and H is the height in inches. Display the calculated BMI on a numeric indicator. Classify the body weight according to Table D4.2 and output a string containing this information. There should also be a “warning” Boolean output that is True for any unhealthy input (i.e. underweight, overweight, or obese). TABLE D4.2 BMI Classification

D4.3