LabVIEW Idea Exchange

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

More function for tdms file.


The tdms files are a very good way to record data on disk, but some usefull function aren't present.

- you don't can delete a channel or a group or a value or a property
  Exemple : You add the measurment in the group 'raw data', channel 'volt'.
  In the group 'calculate data', you add the channel 'filtered volt'
  You change the filetring parameters. You wan't to replace the channel 'filtered volt' with the new data, but you don't can easy replace the old data (channel 'filtered volt')

  You must copy all data in a new file without the channel 'filtered volt' befor you can add the new calculation.

 

- you have only 2 hierarchy (group and channel). More should better ?
exemple : 'acquisition\device name\channel name\acquisition number'

Populating the Tree Control with items takes very long time.  I suggest improving the performance of a tree control.  Many other applications have tree controls that are populated in a small amount of time, so it should be possible with LabVIEW.

 

I know of three ways to populate a tree control.  The first is to individually add items using the Add Item invoke method.  This method takes a very long time.  Adding 15,000 entries took over 180 seconds.

 

The second way is to use the"Add Multiple Items to End" invoke method.  This took over 20 seconds for 15,000 entries.

 

The third way is to programatically respond to the user expanding an item in the tree and populating only as necessary.  I assume that this is fast, but it seems like a lot of work to do every time a tree control is used that could have a lot of items. Maybe LabVIEW could improve performance by using the third approach internally for the programmer. 

 

Currently I am hesitant to use a tree control because of performance.  LabVIEW is a great product, and making the tree control perform better would improve LabVIEW even more.

 

It would be nice if XControls could maintain arbitrary state information akin to display state but was volatile and so not preserved when the XControl was saved and (importantly) did not set the VI modified flag when it was changed.

 

An XControl's display state is the natural place to store all state information about the XControl that you might want to access via property or method nodes as well as via user activity on the facade.  However, anytime the State Changed ? flag is set in the facade, then container vi is marked as having unsaved changes. This is obviously sensible if the state change is meant to persist - e.g.. control resize, but not if the state change is volatile and can bee discarded after each run.

 

There are various alternative methods that can currently be employed, but they are not satisfactory:

1) Additional shift registers on the facade - are not available within property or methods

2) Storing volatile state data in LV2 style globals - unfortunately the same global is shared between instances of the XControl. This is still the best solution as the Container refnum can be used to generate a per-instance unique identifier to enable the global to manage the state data for all instances of the XControl.

3) Storing volatile state data in a 1 element queue. There are two problems - firstly some daemon process needs to be able to keep the queue reference alive but this adds complexity in making sure the dameon process shuts down cleanly. Secondly, there is still a problem of ensuring separate data storage between instances of the XControl.

4) Storing volatile state with the data. This works where the data type supports attributes I.e.. variants and waveforms but not for the general case.

5) Storing volatile data in a tag of the container refnum. This requires scripting and private methods and only works in the development environment.

 

A better solution would be an additional ability type def that is provided for volatile state, presented as a control/indicator pair for properties and methods and prepare to save, wired through on a shift register for the facade and presented as an indicator to init and as a control to uninit.

In LabVIEW 2009, the programmatic API for shared variables and I/O variables was introduced. This allows you to reference a variable by name, rather than dropping a static node on the diagram.

 

Some of the benefits are: iterating over many variables with looping structures, creating modular code, and dynamically accessing variables based on names in a config file for example. 

 

Programmatic access to single-process shared variables would also be useful.

 

(Single-process variables are effectively global variables (not network published), but use the same static node as the shared variable and are contained in project libraries.) 

 

I have 2 suggestions for the highlight feature.

 
  1. A slide bar or some other way to set the speed that the highlight runs.
 
  1.  A way to only highlight a section of code but run the rest full speed.
 

Maybe it could it be done by selecting an area, as done with the diagram disable?

Or with break points. Highlight between points?

 

Most of the time when highlighting, you don’t need the entire VI to highlight just one small section or frame. So, you put in a break point before and after the section you want. When the code pauses, you turn highlight on. When it pauses again, you turn it off. On large loop iterations, this is very time consuming.

 

An example would be for nested loops. If there are 3 nested loops and you would like to highlight one small area of code in the second loop. You have to: continually wait for the inner loop in highlight, or pause-highlight-unpause every iteration.

I would like to propose the use of a stacked parallel execution structure.  Especially in FPGA applications, this will solve the problem of diagrams running off the screen.  All execution pages will run simultaneously as if independent while loops were scattered across the BD.  This idea potentially leads into a 3 dimensional visuallization of coding LabVIEW. Note: In the image, the pages are offset but should look similar to a stacked sequence structure.

 

 

Parallel Execution Structure 3.JPG

 

 

When you’re making a By Reference LabVIEW Object using a Data Value References (DVRs) the user of your class would need to embed each Dynamic Dispatching VI inside an In Place Element Structure (IPE). Or you have to create wrapper VI for each method but this undermines the advantages of LVOOP Inheritance.
 
The idea is that a DVR containing a LabVIEW Object wired to a Dynamic Dispatching Terminal is equal to calling the Method VI inside the IPE structure like illustrated below.

DVR DynamicDispatch.PNG

Message Edited by Support on 01-15-2010 04:39 PM

I have always disliked storing extra data with controls in the description section of controls, vis....  This section already has a use for documentation.  I have seen this hijaced for language information, user access security even requirements gateway.  It would be nice if there was a properys similar to a string/binary data section that was devoted for meta data.  This meta data is only accessed programatically.  Users could use this to keep extra information about any Gobject (read or write to this maybe even lock it)  that is useful for coding.  I dont know if this is even possible since it would not be backwards compatable.  This allows metadata to be shared and linked to a reference.  Is there a beter way to do this.

 

 

Message Edited by Support on 01-08-2010 04:43 PM

The Get and Set Variant attribute functions are polymorphic on the 'variant' input terminal.

 

Why?

What do you expect of the following code:

Example_VI_BD.png

 

I think allowing this is a bad technique in a 'early typed' language like LabVIEW.

 

Or am I missing something?

 

Ton

I'm not sure if there is already a way to do this, but it'd be nice to have a "References Manager" at run-time so you can watch all kinds of references be created and (hopefully) destroyed when no longer needed. This can apply to file refnums, TCP connection IDs, queues, etc. It would be helpful for debugging large programs and where multiple developers are working on the same project... as well as for the forgetful likes 🙂

Spurred by Darren's latest nugget, I think it would be an excellent addition to the feature to be able to retain wire values for all subVIs of a particular VI as well as the VI itself. Several times, I have found myself having to run a VI a couple times to get to the point where I can satisfactorily examine the data flow. There is a JKI RCF plugin by Vishal posted here which implemented this, but native functionality would be much preferred. 🙂

 

I'm not sure how best it could be implemented in UI so as not to disturb those who don't want this, and I can forsee a hairy situation arising if a particular subVI is called from a different hierachy later. Ideally, the subVI would retain values for the last execution in the retained hierachy, but obviously that's incorrect in the grand scheme of things. I'd love to hear other ideas on how to handle that scenario.

List Folder.JPGA function present in File I/O - "List folder" returns FileNames and Folder Names.  But while dealing with "Large Data" set it would badly affect the speed and Memory consumption.  ........ (This is faced in one of application Smiley Sad)

 

User interest would be 1) Only FileNames Or 2) Only Folder Names  3) Both FileNames and Folder Names

 

Can we provide this with Option of selection in "Enum Control" with default as 3)

 

Regards

Hemant.....

I would like to see the "radix" visible in the probes for "Numeric probes" and "hexadecimal/coded display" for "string" probes

 It would be nice to have a default QSM project.  The attached image could be a good starting point for everyone to provide comments, in regards to what the project should include.

QSM.jpg

The only method available to assign all the data from one chart to another is to use the History Data property node.  

 

chart property.png 

 

Without using the property node, all you get is the last value of the chart.   

 

Take for example this use case:

   I have several functional globals holding unique chart data.  Using one Front Panel chart on the main VI, i swap whichever operations data i'd like to see in and out of that chart.  Currently, i have to fumble around with searching for the correct reference number of the Func Global chart and use a property node to do my data assignment.  Totally inefficient! 

 

Adding the ability to select assignment of the entire history to the "Data Operations" context menu, and making the chart polymorphic to recognize the input difference would be incredibly helpful. 

I like to keep my code tidy and aligned.

However, nearly every time when I need the select function, I 'd like to have the 'true case' at the bottom side.  Now I add an invert function to keep the code tidy.

My idea:

Add an extra select function with the True case at the bottom side or add an option to the current select function 'invert selector'.

 

AdjustedSelect.png

Problem

When creating an installer for my built LabVIEW application, I really dislike having to choose between including the RTE installer (and having a 100+ MB installer for my application) or not including it (and requiring my users to download and install the RTE as a separate step).  Typically, I'll build two installers at the same time (with roughly duplicate build settings): a full installer w/ RTE and a light installer w/out the RTE.

 

Proposed Solution

What would be much nicer would be if my app's installer were able to download and install the RTE, if necesary.  Actually, this is common practice, these days, for users to download a small installer that then downloads larger installer files behind the scenes.

HI

In installer creation, provision should be available for executing any third party installer/executable before starting the LabVIEW application installation.

 

And

 

After installing any application developed in LabVIEW, we can see that in Start > Program > <application>, is there any way we can get uninstall option in same menu (Start > Program > <Application uninstall>. (so it remove all the components were installer with the application)

This is sort of two features bundled together, but they make sense to do them at the same time.

 

First, add an easy way to temporarily disable the "Allow debugging" VI property across an entire project.  This would be step 1 in making an easy "Release Mode" option.

 

Second, add some conditional disable symbols to all projects.  If the project is in debug mode, add "DEBUG_MODE" to the project, and if it's in release mode, add "RELEASE_MODE".  While it is possible to do this manually now, each user could choose a different name for their symbol.  If LabVIEW does this for everyone, then it allows better library interoperability.  The main use case for these symbols is to add debugging traces and breakpoints that are undesirable in shipping code.

I really like the idea of being able to define error codes and descriptions in an error.txt file.  It's very convenient to be able to see all the errors in a single place.  However, the location the error.txt file must be stored, to be blunt, stinks.  Instead of storing them in user.lib\errors (which creates a useless palette item) how about putting them in user.lib\_errors?  It would also be nice if the Error Cluster from Error Code VI had an optional filename input to define which error.txt file to use when looking up the error.