LabVIEW Idea Exchange

Community Browser
Top Authors
cancel
Showing results for 
Search instead for 
Did you mean: 
Post an idea

Originally suggested by RavensFan.

 

LabVIEW scripting makes it possible to automate repetitive tasks in LabVIEW, but it is often difficult to find the properties and invoke nodes to accomplish the task. It would be great to have a recording feature that watches what you do in LabVIEW, and then generates the corresponding code for it. I'm sure the engineers at NI could design it much better than any more specific ideas I could throw out, so I will leave the rest up to them. 

Edit >> Create SubVI:  I almost never use this function... but it could be so nice!

Imagine being able to develop code on some diagram, check functionality in line, and quickly generate a subVI.  We're so close with "Create SubVI", but in 7+ years, I've never really used it.

 

Suggested Tweaks:


1) Use default connector pane (12 terminals)
2) If there are error clusters, wire them to the bottom terminals.
3) If there are error clusters, auto create a case structure and put the code in the No Error case.  Wire the error cluster through the Error case.
4) If there are in and out references (e.g. File In, File Out), wire these to the top terminals.
5) Run Clean Up Diagram.

(Unless it's already changed in newer LV's, i'm on 2011 right now)

 

When opening the connector pattern, the current isn't marked in any way. If i'm after some extra connectors or a symmetrical one (why do people choose 3-1-1-1?) it'd be nice to quickly see where to start looking. A simple bold outline would suffice, maybe in blue?

 

ConnectorPane.png

 

/Y

Searched and didn't find this.  I know you can format the text manually.  Comments should be colorized automatically.

 

formual node.png

The Timing palatte is looking bad with all thes gaps.  A simple fix would be to fill these holes with useful functions. I'm proposing 3 and attaching 2 from my re-use code. (I may re-create the third later)

timing2.PNG

 

Time to XL.vi (Attached): and its inverse, XL to Time.vi

12:00:00.0 AM Jan 0, 1900 is a pretty common epoch (Base Date) for external programs and converting from LabVIEW epoch shows up several times a year on the forums. and Time to excel has a few solutions to threads under its belt.   Moreover for analisys against external data from other enviornments you are often using Access, Excel, Lotus... All share the same epoch (and Leap year bug) in their date/time formats.  These vi.s have been pretty useful to me although the names may change to avoid (tm) infringements

 

Time to Time of Day.vi (Attached) has also been in my arsenal and proves both valuable and get on a few threads per year on the forum.

 

The gaps in the palatte make it a perfect fit

timing.PNG

Download All
I would love it if the Call By Reference node had a "don't wait until done" option, so that we can stop using the inconvenient and inelegant Set Ctl Val method or other inconvenient ways to pass arguments to dynamically called processes.

 

I believe the main issue with this is what to do with the outputs from the subVI (since you won't be able to use them) and I can think of two options:

 

1. This option would be settable at edit time and would break the caller if you wire any of the outputs.

2. This option would be settable at run-time and you would get default data from the outputs and an error or warning from the error out terminal of the node if you wire any of the outputs.

This one of my very old ideas and goes all the way back to InfoLabVIEW. I recently got reminded in this thread to write it up as an idea. You might have heard it before. If not, read it :D)

 

Currently, an output tunnel gets the default value for the given datatype if "use default if unwired" is enabled and a case executes where it is not wired. Recently, we also got the "linked tunnels" feature, which is more like an editing assistant.

 

Many times we have a big stack of cases but the computation of many outputs is shared by many cases, maybe with one or two notable exceptions. 😉 It would be cool to be able to define this shared "default" code only once so it is executed unless we create an exception case.

 

My suggestion is to have a new, special case that allows us to define the output of each tunnel for cases where it does not receive an overwriting input.

 

The image shows a few possibilities for an event structure (same applies for all other relevant structures).

 

A: A reference is wired across by default. We don't need to wire across any other case.

B: Nothing is defined, so it acts like today. This is the default, so everything is automatically backwards compatible with existing code.

C: A number is incremented with each iteration unless we overwrite in a specific case

D: The default output is based on the operations of several inputs.

E: If a tunnels is unwired, we get NaN (or whatever we need) instead of zero. For I32 me might want -1, for example.

F: Same as A. This is similar (but not exactly the same) as linked tunnels. (I.e. It also applies to existing unwired cases)

G: This tunnel is defined in all cases. If we add an unwired case later it would act like B.

H: (not shown): certain global event terminals (e.g. time) should also be available in the "default definition case", because we might want to utilize it for a default output.

 

 

 Downconversion would be somewhat messy. It would probably need to wire the relevant default operations into all cases where an output is not wired, keeping the functionalty the same.

Message Edited by altenbach on 07-11-2009 10:45 AM

I have created NI MAX custom scales to use in a data acquisition system with a cRIO and LabVIEW.  As part of the Quality Management system at my company, I regularly calibrate instrumentation, and update these calibrations as custom scales in NI MAX.  My issue is that these calibrations/custom scales are a very important part of overall data integrity. The concern is multiple test users can gain access to NI MAX and randomly change the custom scales without knowledge of the Quality System manager, thereby compromising data integrity. Perhaps NI could look into allowing password protections of Custom Scales like they password protect the configuration of the cRIO system I am using.  This would help greatly to protect data integrity. Thanks for your consideration.

I find the Example Finder to be a terrible eyesore.  Really.  It's to the point that I don't even like to open it up--I'd rather type in search terms on the NI Community and hope someone has posted the code there, or some similar code.

 

Example Finder Scrolling.gif

 

My major beefs with Example Finder:

 

1. Line spacing is inconsistent.  Some examples have long titles that extend onto a second line, some don't.  (See green in image.)  I would prefer to use the horizontal space on my monitor by resizing the window horizontally, so that everything fits on one line.

 

It's nice the word order is consistent among examples.  However, it's not that helpful because we can't make use of this consistency by resizing the window.  For instance--your eyes will dance around trying to find the differences between these next four DAQmx examples:

 

Cont Acq&Graph Voltage- Int Config

Filter- SCXI114x.vi

Cont Acq&Graph Voltage- Ext Clk- Dig

Start.vi

Cont Acq&Graph Voltage- Ext Clk.vi

Cont Acq&Graph Voltage- Int Clk-

Accessory Status-PXIe-4300.vi

 

Now, watch how it all becomes much more clear when you allow the window to stretch out, so there's one example per line:

 

Cont Acq&Graph Voltage- Int Config Filter- SCXI114x.vi

Cont Acq&Graph Voltage- Ext Clk- Dig Start.vi

Cont Acq&Graph Voltage- Ext Clk.vi

Cont Acq&Graph Voltage- Int Clk- Accessory Status-PXIe-4300.vi

 

 

2.  Lots of scrolling to compensate.  Before I open an example, I try to glean some information from it by reading the "Information" section--but it's hard to keep track of things with all the scrolling (see red in the above image).

 

To minimize scrolling, we should have flexible sub-windows within the main Example Finder window.  Maybe I would want to give the majority of the window room to example VI titles, and less room to that huge "LabVIEW Zone" image I never click on.  Or maybe I'd minimize the extensive list of hardware the examples pertain to, and give more horizontal room to the "Information" column in the upper-right.  The point is, however I resize the Example Finder for my use, it should stay that way every time I load it up.

 

Resizing sub-windows

 

Here's hoping!  Please let me know what y'all think.

Today, if you wire something out of a case structure, the resulting tunnel does not use the default value if it is unwired.

 

In event structures (and disable structures), however, the tunnel defaults to use the default value if unwired. This is the more dangerous choice and should thus be reversed - the default for event structures should be NOT to use the default if unwired.

 

For disable structures, the current behavior makes more sense than it does for event structures, but maybe it should also be reconsidered. One way this could work is if the code broke only if the enabled cases are unwired, but this has some issues with the conditional structures, where code which is currently disabled might be enabled on another platform or when building an EXE.

I work with large projects.  And I often need to move items around in my projects.  However...  while you're dragging an item in the Project Explorer, if the cursor is at the top or bottom of the visible area, the window does not scroll.  This means that the item you're moving, and its destination, must both be visible at the same time in order to drag and drop it.

 

I regularly have to un-expand items in order to be able to simply move a file.  This is time consuming and forces me to un-expand tree items that I would prefer to keep expanded.

The front panel below contains a modern-style string control and a classic-style string control.

 

3 (edited).png

 

We may want to replace the modern-style control with a classic-style control (for example if the team style guidelines recommend classic-style controls for non-user-facing front panels, or just for consistency).

 

The problem is that after right-clicking the modern-style control and selecting Replace >> Classic >> String Control, the control is replaced with something that looks different from an original, genuine classic string control. This is shown below. The new control looks like a hybrid between classic and modern. The same behaviour occurs when using QuickDrop to replace the control (Ctrl+Space, Ctrl+P).

 

4 (edited).png

 

My suggestion is: Controls and indicators should be replaced by genuine-looking items, not by hybrids that preserve some attributes of the old style, and some of the new.

 

Thanks

I just finished installing LV15 (and device drivers) on a new PC and I think the installer window could use an upgrade.

When expanding the different features you can install beyond 2-3 levels, they disappear out of the narrow tree-area. 

 

It would be awesome if I could then just resize the entire installer and it would grow the tree (and description) so I didn't have to use the little horizontal scrollbar

 

installer with 3 levels expandedinstaller scrolled to the right

One of the biggest deterrents for learning is lack of organization.  LabVIEW examples in the Example Finder are currently only half-organized.  There's a directory structure--and that's great--if I need to find a data acquisition or generation task example, I can pretty easily think through the directories:

 

Hardware Input and Output >> DAQmx >> Analog Measurements >> Voltage

 

But here's where I have to stop and REALLY search.  Not only is it hard to read through the examples (see my other idea about Resizing Example Finder), but the slew of examples make no sense in order of complexity.  The Example Finder currently appears to only organize examples based on alphabetic order.

 

For instance, take a gander at the following laundry list of DAQmx >> Analog Measurement >> Voltage.  I marked in blue the first five examples I would recommend to a new user, in the order I would recommend them.

 

Organizing Examples.gif

 

How would a new programmer ever be able to get started with those so well hidden?  I have a lot of people who ask me exactly that: "I know I just need an example, but I don't know which one!"  From a customer support perspective, I have to say a lot of time spent and confusion revolves around finding a good, pertinent example

 

So here's what I recommend::

 

Reorganize all the examples in order of increasing complexity.  How do we define increasing complexity?  Well, the DAQ and Signal Conditioning Course already has it hammered down pretty well for DAQmx:

1. We start with just a Finite Acquisition with an internal clock--the most basic acquisition

2. Then, we add a little complexity with a trigger

3. We add a little more complexity by showing how to simulate a trigger in software

4. We add a little more complexity, doing the same thing in hardware-timing

5. And so on until the very end, when we look at very special-case, fancy examples which are supported by specific hardware, and which require specific property nodes to manipulate the behavior.

6. When we've exhausted the subject of Finite Acquisitions with triggers, we move on to Continuous Acquisitions with triggers in another sub-topic of the lesson.  Again, we build up from simple to complex.

 

Not only would this simple re-ordering help new learners, but it helps re-learners who have taken a DAQ class and have forgotten which example to start with (which happens all the time).  Let's be honest--it's VERY difficult to remember everything you've taken in any class.  We should do a better job to marry coursework (customer education courses) with homework (Example Finder).

 

It would also be of benefit if we added some extra directory structure to examples--such as Finite vs. Continuous and Internal vs. External clock in the case of DAQmx examples.  It is of really no benefit to have all these examples run together, as they are now.  New programmer or experienced programmer, a long list format with a lot of reading just gets confusing.  Technically, I believe anything over 7 items is about the limit for grasping new concepts.  Beyond 7 items, an average learner will be overtaxed and/or lose interest.  Besides--adding some extra descriptive folders would help a budding programmer to identify abbreviations like "Int Clk" with "Internal Clock".

 

Organizing Examples Folders.gif

 

From my digging, it looks like the examples that are in the most dire need are DAQmx, SVXMPL (Sound & Vibration), and everything in LabVIEW Fundamentals. The CAN, RIO, and FPGA examples are actually organized a little better, but could still use some work organizing from simple to complex instead of alphabetically.

 

This is a relatively easy project an intern could do, but it would be a huge help getting new programmers through the LabVIEW learning curve.

This is a very simple improvement, since the features are almost there. I want the block diagrams look like an electric diagram, that is: Controls aligned to the left, with the labels on the left of the control and the indicators moved to the right with the labels on the right, like this:

Wish.png

 

The problem is that in current LV versions the alignments occurs on the labels as well, making look the diagrams like this:

Current.png

 

Normally you should: 1) align labels relative to the object and 2) align the objects (without the labels) relative to the block diagram. This kind of cleaning up saves a lot of space and clutter.

 

Now I am pushing my luck, but it would even be better if I could have these settings on SubVI's only, because I usually don't want this in my main.

 

Good luck 

 

When creating a control or indicator based on a subVI terminal or strict typedef, formatting (speicifically the radix) is preserved.  However, when creating a constant from the same source, the format is removed.  This can cause incorrect behavior to inadvertantly be implemented when dealing with components that use Octal or Hexadecimal, as incorrect values can be input under the assumption of the correct formatting.

 

 

radix.png

 

 

Instead, block diagram constants should display the same behavior as controls and indicators, and maintain the correct radix/formatting when created from an existing source.

 

 

When the Developer Suite DVD binder arrives, the first thing I do is find a black Sharpie, cross out the name (e.g. 2010) on the binder label, and write the version of the software it contains (e.g. 2009 SP1).

 

Rarely if ever do I care which year the DVD binder shipped to me -- all I care about is the version of the software (the most important being LabVIEW) it contains.

 

Now that LabVIEW and most other NI software products are on an annual release cycle and named according to the year and service pack, I would love it if the Dev Suite binders were named the same way.

As outlined in this post, the current identical look of the Expression Node and Convert Unit can cause serious miscommunications, since their functions are completely different.

 

I suggest that they are made to look different so we can tell immediately what we have.

 

For example the two results below are very different, even though the code looks absolutely identical if the labels are hidden.

 

One possibility would be to make "convert unit" a different default background color (example shown below), but there are probably even better suggestions. How about rounded corners (not shown)?

 

 

I would like to see more native support for compression and encryption/hash algorithms.

 

When it comes to compression and encryption. We are very much the poor relations to other languages that have a plethora of source and examples for SHA1, DES, 3DES, Blowfish, HMAC, Ryjindel, AES (encryption) and LZO, LZMA, LZW, GZip, JPEG2000 (compression) to name but a few.

 

Apart from "Zip" (which can only be used on files) and "twofish" (which is hardly an industry standard because of security concerns) we have very little choice but to use DLLs and SOs meaning our applications violate one of the biggest reasons for using LabView........cross-platform. We have very little in our tool-kit to make efficient and secure network applications for example. Especially if we are required to interface to existing systems that ave used these technologies for many years.

 

We cannot even write applications to access Twitter any more!

 

With the introduction of "Stream" prototypes in the new LV2010, it is essential to have these tools in our palettes.

I propose LabVIEW launch the browse dialog that Windows provides with each OS version instead of the current limited LabVIEW browse dialog on all versions of Windows.

 

Background:

The LabVIEW browse dialog looks like this regardless of the Windows OS version you're using. This is for any browse dialog from LabVIEW... the getting started window, the file menu, save as, path controls, everything:

labview browse dialog.png

 

This is OK and works fine for most things. However, it hasn't received the updates that the Windows OS has provided for browse dialogs in Windows Vista and Windows 7. Mainly... the left pane is very limited. If you look at Windows Vista's browse dialog:

vistasaveas.jpg

 

You get a much more capable left pane including favorites. The top address bar is also more capable instead of just a dumb drop down box.

 

The same thing goes for Windows 7:

browse dialog.png

 

If you are like me and use lots of mapped drives and favorite locations... it is infuriating having to give up all your favorite locations when you use LabVIEW. You always end up pathing to the same places... but can't do anything about that because the LabVIEW browse dialog doesn't support the modern Windows browse features.

 

I propose LabVIEW launch the browse dialog that Windows provides with each OS version instead of the current limited LabVIEW browse dialog. This is possible somehow... as the screen shots I took for the Windows browse dialogs were from Firefox 7.0.1 on two different OSs (7 and Vista). So there must be some API call to invoke the Windows browse dialog.