Five Techniques for Better LabVIEW Code Peter Blume President peter.blume@bloomy.com

Preview:

Citation preview

Five Techniques for Better LabVIEW Code

Peter BlumePresident

peter.blume@bloomy.com

www.bloomy.com© 2003 Bloomy Controls Inc.

Overview

Introduction Five techniques with examples

Specifications Data flow State machines Error handling Documentation

Conclusion

www.bloomy.com© 2003 Bloomy Controls Inc.

Introduction

Most LabVIEW applications begin with an industrial measurement and/or control challenge

LabVIEW facilitates fast development cycles Easy to connect and control instrumentation Fast solutions to industrial challenges Instant gratification for developers

LabVIEW developers adopt fast habits Sloppy wiring No documentation Computer science fundamentals are ignored

Fast habits = bad habits

www.bloomy.com© 2003 Bloomy Controls Inc.

Justifying Bad Habits

LabVIEW is a graphical language Computer science fundamentals don’t apply Block diagram is self-documenting

We don’t have time to write good code Intense time pressures LabVIEW is a secondary responsibility Requirements continuously change Equipment availability constraints

I’m the only developer / end-user Nobody else needs to use or understand my programs

www.bloomy.com© 2003 Bloomy Controls Inc.

Issues Resulting from Bad Habits

Application requirements expand LabVIEW code becomes messy

Inefficient Buggy Difficult to troubleshoot, expand, and maintain Not reusable

Overall development time is increased

www.bloomy.com© 2003 Bloomy Controls Inc.

Bad Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Good Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Let’s Write Better LabVIEW Code!

Follow these five techniques More up-front time and effort Attention to detail Discipline

Dramatically save time in the long run

www.bloomy.com© 2003 Bloomy Controls Inc.

1. Write a Functional Specification

Understand the application’s requirements Interview operators, developers, engineers, managers,

bean counters Document the requirements

Statement of high-level objectives Specific requirements for I/O, analysis, GUI Timetable and budget Design prototype screen shot Assign priorities to each requirement Test methodology

www.bloomy.com© 2003 Bloomy Controls Inc.

Functional Specification (Continued)

Avoid designing the system Don’t prolong specification phase by including too much

detail such as how to implement the systemMake the specification readily accessible

Have all contributors review and approve Revise when requirements change Keep it somewhere that you and others can quickly

reference it

www.bloomy.com© 2003 Bloomy Controls Inc.

Simple Specification Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Bad Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Good Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

2. Use Proper Data Flow

Data flow definition:“A block diagram node executes when all its inputs are available.

When a node completes execution, it supplies data to its output terminals and passes the data to the next node in the dataflow path.”

Parallel paths are permitted and desirable Efficiency is optimized when LabVIEW determines the

execution order Readability is optimized when source terminals, wires,

and destination terminals are visible

www.bloomy.com© 2003 Bloomy Controls Inc.

Data Flow Impediments

Sequence structures Excessive nesting Local and global variables Coercions Sloppy wiring

Excessive bends Overlapping wires with other objects Multidirectional data flow

www.bloomy.com© 2003 Bloomy Controls Inc.

Simple Data Flow Example

Impeded Unnecessary

sequence Coercion Local variables

Better data flow

www.bloomy.com© 2003 Bloomy Controls Inc.

Bad Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Bad Code – Zoom In on Wiring

www.bloomy.com© 2003 Bloomy Controls Inc.

Data Flow Enhancements

Artificial data dependency Use error cluster and/or task ID

Shift registers Reduce local and global variables

Clusters Reduce the overall number of wires

Neat wiring Left-to-right data flow Straight wires Consistent data types Comments with “>” indicating data flow direction

www.bloomy.com© 2003 Bloomy Controls Inc.

Good Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

3. Use a State Machine Top-Level Architecture

Define application as a series of states Go to any state from any other state Easy to modify, maintain, and debug Self-documenting Scalable

www.bloomy.com© 2003 Bloomy Controls Inc.

Classic State Machine

www.bloomy.com© 2003 Bloomy Controls Inc.

State Machine Enhancements

Use enumerated or string for case selector

Poll user interface events in “No Event, Default” frame or in separate event structure in parallel loop

Use intuitive state names Include “Initialize” and “Shutdown” states

www.bloomy.com© 2003 Bloomy Controls Inc.

Enumerated State Machine

www.bloomy.com© 2003 Bloomy Controls Inc.

Event-Driven State Machine

www.bloomy.com© 2003 Bloomy Controls Inc.

4. Incorporate Proper Error Handling

Trap and report any I/O related errors in all VIs I/O functions include DAQ, file I/O, instrument I/O,

communication Trapping is facilitated by propagation of error cluster Reporting methods include dialog prompt or log to file

www.bloomy.com© 2003 Bloomy Controls Inc.

Error Trapping

www.bloomy.com© 2003 Bloomy Controls Inc.

What’s Wrong With This Picture?

www.bloomy.com© 2003 Bloomy Controls Inc.

Better Error Handling

www.bloomy.com© 2003 Bloomy Controls Inc.

5. Document Your Source Code

Assume every VI will be used and maintained by other developers

Best time to document your source code is while you develop it

www.bloomy.com© 2003 Bloomy Controls Inc.

LabVIEW Documentation Techniques

Control labels Use succinct, intuitive labels Indicate units in parentheses or use free labels Enter descriptions or online help where further text is needed

Icons Intuitive text or graphic 10-point small fonts Color-coding for icons of related subVIs

www.bloomy.com© 2003 Bloomy Controls Inc.

Documentation Techniques (cont’d)

Diagram Leave the background color white Set all control labels visible Liberally document with free labels

Enter descriptions for every subVI

www.bloomy.com© 2003 Bloomy Controls Inc.

Bad Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Good Code Example

www.bloomy.com© 2003 Bloomy Controls Inc.

Summary

Write a specification for all projects before you begin coding

Use proper data flow Use a state machine top-level architecture Incorporate proper error handling Document your source code while you code

www.bloomy.com© 2003 Bloomy Controls Inc.

Conclusion

Techniques improve: Readability Robustness Efficiency Maintainability Reusability

Techniques can be implemented quickly if you make them habits Apply to every project, starting now Apply consistently throughout each project

Dramatic reduction in overall time and effort

www.bloomy.com© 2003 Bloomy Controls Inc.

About Bloomy Controls

Test, measurement, automation, and control specialists since 1991

Systems integration, software development, and training provider

NI Select Integrator and Certified Training Center 3 Certified LabVIEW Architects 8 Certified LabVIEW Developers 1 Certified TestStand Architect 2 Certified TestStand Developers 8 Certified Professional Instructors

Offices in Windsor, CT; Milford, MA; and Mahwah, NJ

www.bloomy.com© 2003 Bloomy Controls Inc.

Contact Bloomy Controls

Email info@bloomy.com Write or visit

CT, Western MA, Eastern NY:

Eastern MA, RI, Northern New England:

Greater NYC, NJ:

839 Marshall Phelps Rd. 100 Medway Rd., Ste 202Windsor, CT 06095 Milford, MA 01757 Mahwah, NJ(860) 298-9925 (508) 902-0054 (201) 818-0117