LabVIEW Idea Exchange

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

These function names create undue confusion. Every semester, new students to LabVIEW post questions on the NI and LAVA forums asking how to use these functions to open, edit or load data from an Excel file (.xls).

 

Unfortunately, the name spreadsheet file has become synonymous with Excel. Even experienced computer users have an expectation of some sort of intelligent file when reading the title "Read from Spreadsheet File".

 

These functions should really be renamed to 'Read from' and 'Write to' DSV file...

 

Delimiter Separator Values  (wikipedia link)

I wish the Formula VIs supported conditional logic.

 

More broadly, make the Formula Node and the Formula Parse and Eval VIs have the same syntax and capability.

 

from LV help:

Differences between the Parser in the Mathematics VIs and the Formula Node
The parser in the Mathematics VIs supports all elements that Formula Nodes support with the following exceptions:

Variables—Only a, a0, ..., a9, ... z, z0, ..., z9, are valid.
Logical, conditional, inequality, equality—?:,, &&, !=, ==, <, >, <=, and >= are not valid.
Functions—atan2, max, min, mod, pow, rem, and sizeOfDim are not valid. You can use these functions in a Formula Node or use their corresponding LabVIEW functions.

 

LabVIEW AF is a fantastic tool to create multi-threaded messaging applications the right way. It promotes best practices and help write big yet scalable applications. 

I feel however that there is not enough included in the box 🙂 When looking at many other industry implementation of the actor model e.g. Scala Akka, Erlang, Elixir, microservices in many languages etc. you find that the frameworks usually include many more features. https://getakka.net/

 

I understand the decisions behind the design for AF yet would like to start a discussion about some of these.

I would like to see the following features being included into AF:
1. Ability to Get Actor Enqueuer by Path through hierarchy of actors e.g. /root/pactor/chactor could be used to get the enqueuer to chactor. This would probably require actors to have unique paths pointing to them. Having a system manager keeping all enqueuers on local system is not a bad thing. It is a good thing.

2. Ability to seamlessly communicate over the network and create your own queue specifications. For example actors should be able to talk between physical systems. Using the Network Actor is not a good solution, because it is simply to verbose and difficult to understand. The philosophy of AKKA should be embraced here "This effort has been undertaken to ensure that all functions are available equally when running within a single process or on a cluster of hundreds of machines. The key for enabling this is to go from remote to local by way of optimization instead of trying to go from local to remote by way of generalization. See this classic paper for a detailed discussion on why the second approach is bound to fail."

3. Improved debugging features like MGI Monitored Actor being inbuilt. https://www.mooregoodideas.com/actor-framework/monitored-actor/monitored-actor-2-0/

4. Included Subscriber Publisher communication scheme as a standard way for communicating outside the tree hierarchy. https://forums.ni.com/t5/Actor-Framework-Documents/Event-Source-Actor-Package/ta-p/3538542?profile.language=en&fbclid=IwAR3ajPR1lvFDyPFP_aRqFZzxR4FCQXh2nB2z0LYmPRQlnvXnsC_GQaWuZQk

5. Certain templates, standard actors, HALs, MALs should be part of the framework e.g. TDMS Logger Actor, DAQmx Actor. Right now the framework feels naked when you start with it, and substantial effort is required to prepare it for real application development. The fact that standard solutions would not be perfect for everyone should not prevent us from providing them, because still 80% of programmers will benefit.

6. Interface based messaging. The need to create messages for all communication is a major decrease in productivity and speed of actor programming. It also decreases readability. It is a better with the BD Preview in Choose Implementation Dialog in LV19, but still 🙂

7. This is more of an object orientation thing rather than actor thing but would have huge implications for actor core VI, or Receive Message VI. Please add pattern matching into OO LV. It could look like a case structure adapting to a class hierarchy on case selector and doing the type casting to the specific class inside the case structure. You could have dynamic, class based behavior without creating dynamic dispatch VIs, and you would still keep everything type safe. https://docs.scala-lang.org/tour/pattern-matching.html

 

The natural way for programming languages to evolve is to take ideas from the community and build them into the language. This needs to also become the LabVIEW way. I saw a demo of features of LV20 and I am really happy to see that many new features were inspired by the community. Lets take some ideas about actor and add them in.

 

I wanted to share my view on the direction I think AF should go. I see in it the potential to become the standard way to do big applications, but for that we need to minimize the barrier to entry.

With the release of labview 2016 the issue of cross-platform support for video becomes critical.

 

As stated in the "features and changes" page: "NI no longer provides the 32-bit version of LabVIEW for OS X."

 

Up to now it was possible to use Christophe Salzmann's QTLib to work with video. This was great software because the very same "universal" VIs ran on Windows and OSX systems. However, this tool relied on QuickTime. QuickTime is 32-bit and will not evolve to 64-bit (it has been replaced by newer libraries), and so does QTLib.

 

Thus all the code developed with labview including cross-platform video handling cannot be maintained and developed!

 

On the other hand, video is becoming an ubiquitous feature in computer technologies, from mobile apps, to IT, to big data and deep learning. It is a strategic time to push for video on labview across all platforms. It is time for video handling VIs to appear in the standard dev package, just as jpeg or png read/write VIs were added after photos massively entered the computer world.

 

I propose the addition in the "Programming/Graphics&Sound" palette of a subset of VIs for handling video (open video file for read or write, read file frame by frame, append one frame to file, grab frames from webcam). There is no doubt that such feature will be valuable in a future labview release!

 

An add-on to the highlight execution that makes the highlight execution go into the subVIs and keeps doing highlight execution in the subVI

We use TDMS extensively for large analysis tasks (multi Gbyte) files, and find the current two levels very restrictive, at minimum would like to see an one more level than Group and Channel. Without this, storing series of spectra requires overloading the current levels, or the Channel concept gets bastardized, by creating a new channel for each spectrum. Carsten Thomsen

LabVIEW should ship with a Set Operations palette item, including the common operations such as Union, Intersection, Complement, and Cartesian Product, as well as more advanced operations that I don't know about. These operations would act on 1D arrays of almost anything. Floating point numbers and those would have to have some kind of "error in value" input that defaults to the machine epsilon or equality checking. Output would be a 1D array on the input datatype with the values, and perhaps an output for matched indices.

 

Yes, these are quite easy to make yourself (loop+search), but I think that it would be beneficial for the community for NI to provide it. The VIs found at http://zone.ni.com/devzone/cda/epd/p/id/3929  are... Interesting, to say the least. NI might be able to provide better performance, too.

I'd love to see a handful of built-in false-color colortable choices for the Intensity Plots.

 

I know there's programmatic control over these things - I wrote my own 4-5 years ago. But the black-blue-white should be one of several common selectable colorschemes.

 

I labeled my own as:

 Greyscale B->W

 Greyscale W->B

 X-Ray

 Yellow Hot

 Rainbow

 Rainbow #2

 Fluorescent (green)

 Blue Red Green 

 Planet Earth

 

Perhaps one of the front panel (and Property node please) off of the Z-Axis submenu, listed by title.

 

I also have the ability to invert top/bottom or choose the color-inverse (photographic negative) for even more colors. 

 

Attached is a sample of some common colortables I routinely use.

2nd attachment is a snap of the VI I use to create the colors based on colortable constants.

3rd attachment is my messy but functional code (Block Diag of attachment 2)

 

Charts and graphs in LabView have been driving me nuts for years. What I would like to see is a simple chart (maybe even an "Express Chart") that has a single dimensional array input and a timestamp input. Values in the array would automatically be plotted on their own plot and the time stamp would be put in the X-axis starting from the left. An option to just use the current time if no timestamp was input and amount of data displayed on the X-axis can be adjusted on the fly by setting the X-axis TIME/DIV

I'd like to see native Ternary Logic support (aka three-valued or trivalent logic, or 3VL). True and False could still be represented by 1 and 0 respectively, and the third option could be represented by -1.

 

Not much else to say about this really... I think it's pretty self-explanatory.

Currently, whenever you filter data it is initialized with all zeroes.  If your data is fairly constant, there is a large section where the filtered value slowly goes from zero to the steady state value.  This is annoying when doing a quick look at the filtered data, because you have to rescale a graph to ignore the ramping portion of the filtered data.

 

My suggestion is to provide an option for either providing a starting value for the filter or automatically using the first value of the data being filtered.  For fairly constant data, this would eliminate the large ramp from zero.  For varying data, it would start better as well.  It seems the initial value is fairly arbitrary, so it shouldn't violate any mathematical rules.  It would be the equivalent of subtracting the first value from all the data, filtering, then adding the first value back to the filtered data.

 

Bruce

In the real world, machine epsilon is a function of the binary representation of a floating point number.

 

The labview help describes it as:

 


Machine Epsilon

 

"Represents the round-off error for a floating-point number with a given precision. Use the machine epsilon constant to compare whether two floating-point numbers are equivalent."


 

 

From the term "given precision", we would assume that epsilon depends on the representation. In fact, we can right-click on the machine epsilon and select between SGL, DBL, and EXT.

 

However, if we look at the actual value, we can see that machine epsilon has the identical decimal value for SGL, DBL, and EXT. No matter what representation we chose, we get the value for DBL.

 

This is not right!

 

Suggestion: the machine epsilon must depend on the representation. Since the exact representation of EXT depends on the architecture (64, 80, 96, 128 bits total), machine epsilon for EXT needs to adapt accordingly.

 

Here's one possible way to calculate machine epsilon explicitly. Note the discrepancy for SGL and EXT.

 

 

 

 

 

Download All

This proposed new VI would expand upon the Clear Errors VI, and keep a history of the error codes that have been cleared. Ideally, it would have a History Length input (not shown) that, when not wired, would default to 1024 errors.

 

ClearErrors+History.png

 

 

In the world of tab controls, a tab caption refers to the actual text in the tabs that you click on to select the different pages, see attachment "Tab Caption". Currently, there is no property node that allows you to change the font characteristics of the tab captions. The font characteristics can be customized non-programmatically by right-clicking on the tab control and selecting Advanced/Customize. However, within the customize control all the tab caption properties are linked, so if I make the font color red for the page 1 tab caption, it will automatically change the page 2 tab caption text as well. The same thing applies to the other font characteristics.

 

This functionality would be useful for those users who want more control over the aesthetics of their front panel. For example, if a user wanted each tab to represent a test that he was running he could change the individual text and color to represent whether or not the test passed, green "passed," or failed, red "failed."

 

The Formula Node (FN) is indispensable when implementing numerical algorithm in LV. There is just no way to get it right with wires and built in functions.

The problem is that it is limited to Double Precision only.

 

Since all functions available in the FN are implemented as primitives supporting extended precision, it is not like NI doesn't have the needed algorithms at hand.

Hence, please upgrade the FN to allow use of extended precision numbers (internally but also as inputs and outputs).

 

Note: I know about Darin. K's wonderful tool to transform text-based formulas into VIs, but sometimes there is just too many inputs/outputs for this approach to be a viable route, not mentioning that there is then no way to decipher (and modify) the resulting code...

I use fixed point values quite a bit, and i do find myself splitting and joining them quite often when I have to roll my own low-level, optimized operations. 

 

The fixed point type is (generally) treated as an arithmetic type (e.g. floating point) rather than a logical type (e.g. integers). The (default) configuration should maintain this behavior.

 

split.png

What I would have found most useful is having Split cut the value in half and return the two properly configured fixed point values. Join would take two adjacent fixed point types and glue them together into one value. This definition would actually make Join equivalent to adding the two values.

 

Split could take an optional split location which dictates the binary point at which the values are split apart. I suggest defining the value as the location of the lsb (least significant bit) of the high part. In the example, the value would be 0 to get the equivalent behavior. This terminal would require a (immediately computable) constant wired to it since the fixed point output types can't be computed until this value is known.

 

 

I often want to pull elements out of an array based on their content. In a simple example, I'd like an array B that contains all, the elements of A that are greater than 0.5. A few previous posts have suggested a conditional append function on the output of a loop. Here's another possibility. Change IndexArray so that one can wire an array of Booleans to the Index input. The output would be just those elements of the input array for which the Boolean array element is true.

 

 

Another way to handle this would be to have a primitive that returns an integer array containing the indices of the true elements in a boolean array. Then allow arrays of indices to be wired to the Index input of IndexArray.

 

By the way, these are not really orignal ideas. They come from Matlab. Specifically, the A(A>0.5)  syntax and find(A>0.5).

Hi,

 

My application uses a series of files to configure it self and I need to search in arrays to find which are similar to a given reference.

 

My solution is to use a for with a Match pattern VI and some logic to do the operation.

 

I believe that "Search 1D Array" would be faster than this implementation if it had the option to use wild cards ("*" and "?") as "element" input.

 

Other option would be include a flag "Exact match", by default set to TRUE to behave as is today or FALSE to stop on first occurrence of "element" in the array that contains it somewhere.

 

For example, if element = "ode" and array element = "model", it should set as a match if Exact match is set to FALSE.

 

Cheers.

This idea will probably have a narrow audience... those of us who use the "zip" functions in LabVIEW. There is currently an unzip function that takes a zip file on disk, then writes the unzipped files back to disk. To manipulate zipped files, you must then access the disk and load into memory. In other words, 3 disk operations... read zip, write file, read file.

 

There needs to be a function that unzips the files into memory, with the output of this function as an array of flattened strings, byte arrays, or data pointers.

 

 

UnzipToMem.png


Message Edited by Support on 06-09-2009 08:35 AM

There are some cool methods to load VIs programatically and also to load classes programatically. There is however no way to unload a plug-in class from memory.

 

This should be a VI available in LabVIEW to do this kind of operation programatically. It can look like this:

 

Usage.png

 

 

Documentation.png

 

Adding this method to LabVIEW would be a big benefit for large architectures, I think.