You are here: Start » Appendices » Quick Start Guide for the Users of LabVIEW

Quick Start Guide for the Users of LabVIEW

Both FabImage Studio and LabVIEW are based on the idea that the data-flow programming model can be very useful in data-processing applications. This makes the two applications similar on the general level, but still they are very different in the details. FabImage Studio has been primarily designed for machine vision engineers, whereas LabVIEW is advertised as "software ideal for any measurement or control systems". This results in a completely different design of the user interface with FabImage Studio concentrating on more sequential algorithms and Data Previews accessible directly within the Main Window.

If you have used LabVIEW before, below you will find a list of key differences that will allow you to start working with FabImage Studio more quickly by mapping the new concepts to what you already know:

LabVIEW FabImage Studio Notes
Nodes Filter Instances In both environments these elements have several inputs and outputs, and are the basic data processing elements.
Wires Connections Connections in FabImage Studio encompass more program complexity than wires in LabVIEW. Like in LabVIEW there are basic connections and connections with data conversion (LabVIEW: coercion). There are, however, also array connections that transmit data in a loop and conditional connections that can make the target filter not executed at all.
Basic Data Types FabImage Studio has two numeric data types: Integer and Real, both 32-bit. There are also Booleans (LabVIEW: Boolean), Strings, File (LabVIEW: Path) and enumerated types.
Arrays and Clusters Arrays and Structures Arrays and Structures are more similar to the corresponding elements of the C language. Arrays in FabImage Studio can be multi-dimensional, e.g. one can have arrays of arrays of arrays of integer numbers. Structure types are predefined and their elements can be "bundled" and "unbundled" with appropriate Make and Access filters.
Local Variables Labels The programming model of FabImage Studio enforces the use of data flow connections instead of procedural-style variables. Instead of local variables you can use labels, that replace connections visually, but not actually.
Global Variables Global Parameters Global Variables in LabVIEW are recommended mainly for passing information between VIs that run simultaneously. In FabImage Studio this is similar – global parameters should be used to communicate between Parallel Tasks and with HMI Events.
Dynamic values / Polymorphic VIs Generic Filters Generic Filters of FabImage Studio are more similar to templates of the C++ programming language. The user specifies the actual type explicitly and thus the environment is able to control the types of connections in a more precise way.
Waveform Profile A sequence of numeric values that can be depicted with a 2D chart is called Profile.
Virtual Instrument (VI, SubVI) Macrofilter A macrofilter is a sequence of other filters hidden beyond an interfaces of several inputs and outputs. It can be used in many places of a program as it was a regular filter. Macrofilters do not have their individual front panels. Instead, the environment of FabImage Studio is designed to allow output data preview and input data control.
Front Panel HMI In FabImage Studio, HMI (Human-Machine Interface) is created for the end user of the machine vision system. There is thus single HMI for a project. There are no blocks in the Program Editor that correspond to HMI controls. The connections between the algorithm and the HMI controls are represented with "HMI" labels.
For Loop, While Loop Array Connections, Task Macrofilter There are two methods to create loops. The first one is straightforward – when the user connects an output that contains an array to an input that accepts a single element, then an array connection is used. A for-each loop is here created implicitly. The second is more like the structures of LabVIEW, but also more implicit – the entire Task macrofilter works in a loop. Thus, when you need a nested loop you can simply create a new Task macrofilter. These loops are controlled by the filters that are used – more iterations are performed when there are filters signaling ability to generate new data.
Shift Registers Registers Registers in FabImage Studio are very similar to Shift Registers. One difference is that the types and initial values of registers have to be set explicitly. Step macrofilters preserve the state of registers between subsequent executions within a single execution of the Task that contains them. There are no Stacked Shift Registers, but you can use the LastTwoObjects / AccumulateElements filters instead.
Case Structures Variant Macrofilter While Task Macrofilters can be considered an equivalent of the While Loops of LabVIEW, Variant Macrofilters can be considered an equivalent of the Case Structures. Selector Terminals and Cases are called Forking Ports and Variants respectively.
Sequence Structures All macrofilters in FabImage Studio are executed sequentially, so explicit Sequence Structures are not needed.
Controls Palette HMI Controls
Functions Palette Toolbox
Formula / Expression Nodes Formula Blocks Formula Blocks are used to define values with standard textual expressions. Several inputs and outputs are possible, but loops and other C-like statements are not. This feature is thus something between LabVIEW's Expression and Formula Nodes. If you need C-like statements, just use C++ User Filters that are well integrated with FabImage Studio.
Breakpoints Iterate Current Macrofilter As there are no explicit loops other than the loops of Task macrofilters, a macrofilter is actually the most appropriate unit of program debugging. One can use the Iterate Current Macrofilter command to continue the program to the end of an iteration of the selected macrofilter.
Error Handling In FabImage Studio there are no error in/out ports. Instead, errors are handled in separate subprograms called Error Handlers. In some cases when an output of a tool cannot be computed, conditional outputs are used. The special value Nil is then signaling a special case. This is for example when you try to find the intersection of two line segments which actually do not intersect.
Call Library Function Node User Filter User Filters can be used to execute pieces of code written in Microsoft Visual C++. The process of creating and using User Filters is highly automated.
Previous: Backward Compatibility Policy Next: Quick Start Guide for C/C++ Programmers