At present CVI is missing a serious report printing facility that permits to create flexible, professional and good looking reports.
A quick search in CVI forum shows that periodically somebody posts questions about reporting but available instruments at the moment are not satisfactory in my experience.
As far as I can tell, a good reporting instrument:
Include a function to programmatically re-start the NI Variable Engine if it is found to be stopped.
Although the NV libraries include a function to detect whether the NI Varible Engine service is running, there is no function included in the library to facilitate re-starting the NI Variable Engine service.
For those The method that I am aware of to restart this service is to use the ANSI C system() function with an embedded command line:
Index = 0;
while((!running) && (index++ < 5))
System(“net start \"NI Variable Engine\"");
if(!running) return -1;
Learning this required some time spent on the web, looking through old posts on how to solve the same problem in LabView. Rather than spending that time, it would have been more productive to just pull it out of the library.
I discovered through trial and error that the CNVCreateBufferedWriter function, while it does provide buffering when necessary to preserve data until it can be written within a process, it does not provide for arbitration between writes originating from multiple processes. Stated another way: As far as I am aware, a single Network Variable process is not designed be written to by more than one application.
The documentation was not clear on this point. It states “You can buffer data to be written to the network variable by calling CNVPutDataInBuffer. The system automatically writes the buffered data to the network variable.” This suggested to me that arbitration of some kind existed to handle asynchronous writes by multiple applications. I confess, my interpretation may have been driven by wishful thinking to support my application needs.
Nevertheless, my suggestion is that future versions of this library include a capability to arbitrate asynchronous writes from multiple applications to a single network variable. i.e., that two, or three, or more applications can successfully connect to and write to the same network variable.
I tried to use a source code / version control for projects in which I use LabWindows and Visual Studio.
One possible solution would be to implement support for the team foundation server, which already has be added to LabView.
Another would to provide an independent solution.
It appears that when adding a font to the installation package by having the installer copy the font file to the [Fonts] installation directory, all the installer appears to do is copy the font to the C:\Windows\Fonts directory. This is good enough for Windows XP, but in later versions of Windows additional steps must be performed for the font to be recognized by Windows. It would be nice if the installation package could perform these steps when installing fonts on these versions of Windows.
Starting from CVI2010, the User Interface Browser and the Attribute Browser are both located on the right of the UIR editor in the Workspace window.
I'd like to be able to hide these windows when required: when working on small screens like when you use a laptop these windows occupy a lot of space even if you reduce their size at the minimum.
In addition, the ability to choose which window to display on the bottom left could be a good option: up to version 2009 the bottom left side of the workspace window switched between the library tree (source editor) and the attribute browser (UIR editor).
Ideally, while in the UIR editor I would like to be able to:
building on this suggestion of Bertrand I'd like to extend it as follows:
Please provide an opacity/transparency attribute not only for xy plots, but also for graph annotations (texts, glyphs), PlotLine, PlotRectangle, PlotText etc.
I would like to suggest a function tree view in CVI. I feel this is sorely missing. Many times, I want to jump right to a function, but I don't remember where it is. In a single C file with 1,000+ lines, this can be very aggravating.
For this reason, I tend to use Notepad++ for the heavy lifting, along with the Source Cookifier plugin. See attached screenshot of that plugin.
There are options in the plugin to enable certain features, such as the global and local variables in addition to the function names. When you are inside a function in the souce editor, the tree updates with a selection to show that you are inside that function. This is very helpful with functions that have more lines than available veritcal screen space. This way, I don't have to scroll up to see what function I'm looking at. I simply look at the tree with a glance and I know.
I noticed that LabVIEW has two ways to download instrument drivers: direct downloads from IDNET and through the NI Instrument Driver Finder.
[NI Instrument Driver Finder Menu Option Image]
[Alternative NI Instrument Driver Finder Menu Option Image]
When downloading drivers directly from IDNET, the file must first be unzipped and then placed in the <National Instruments>/labview xxxx/instr.lib folder.
The easier option when working with LabVIEW, the NI Instrument Driver Finder, downloads the files, unzips them, and instantly gives you access to example code or palette of VIs for communicating with said instrument.
If possible, could we add a similar tool to LabWindows CVI? It would be nice to have a menu option which would open a CVI Instrument Driver Finder.
The interface could then allow users to easily find a driver, download it to their Instruments Folder, see example code and start work.
Since probably 30% of all LabVIEW adoption comes from driver downloads and driver development, maybe this is an investment of resources worth looking into?
[Image of NI Instrument Driver Finder]
[Image of Instrument Driver Finder example code, project access, and palette access]
building on this suggestion I'd like to see a more comfortable panel of the UI editor for editing label/value pairs, see below:
SetAnnotationAttribute permits you to pass -1 in AnnotationIndex parameter to apply the attribute to all annotations on the graph, while SetCursorAttribute does not. It would be good that this command too permits someway to operate on all cursors in a single pass.
As an example, when I want to print a graph on a black-and-white printer I prepare the control for this changing all elements to black.
I can use a single instruction for annotations:
SetAnnotationAttribute (panelHandle, PANEL_GRAPH, -1, ATTR_ANNOTATION_CAPTION_COLOR, VAL_BLACK);
On the other hand, I need to iterate on all elements for cursors
GetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_NUM_CURSORS, &numCursors);
for (k = 1; k <= numCursors; k++) SetCursorAttribute (panelHandle, PANEL_GRAPH, k, ATTR_CURSOR_COLOR, VAL_BLACK);
Customer who has used CVI for years and likes it was looking a Mstudio for the reason that a lot of his new engineers can't or don't do the regular C programming. He likes Mstudio as an idea but, with the extra cost of adding MS Visual Studio and dealing with a they support/We support issues of having two SW pkg from 2 different companies gives him pause about purchasing. He stated he likes CVI because if there is an issue (even if rare) he know that NI will help to figure it out. I let him know I'd provide the feedback.
There is an option to display the default display format for integers and floating point, but no such option to set the default format for
"String Display" or "Array display". Strangely, "Array display" shows my arrays as decimal numbers even though I have the default display format for integers set to Hex.
Ideally, I would like to be able to set them separately for char and unsigned char strings. For example:
char strings I prefer to display as Ascii, null-terminated strings (the current default).
Unsigned char strings I prefer to display in Hexadecimal, with Options==Display Entire buffer. This is because my unsigned char strings are actually arrays of bytes.
I've been using CVI for a long time and it's frustrating to setup these options each and every time I look at one of my unsigned char strings. Even if it can't be setup separately for signed/unsigned chars, I would like the option to set some sort of default.
Another aside, would it be possible to display the array/string as hex characters with the Ascii equivalent just below it? A dual display would be even nicer!
I'd like the following options being added to FileBrowser tollslib control:
just a little idea for a minor improvement of the status bar: Right now, the coordinates of UI controls are displayed in different ways: in the popup window, the sequence is Top Left, while in the status bar the sequence is Left Top - this is somewhat irritating...
So I'd suggest to change the status bar text from
(23, 873) to something like
Top: 873 Left : 23
I'd like to see better documentation online.
Currently, documentation seems to be spread over different areas: online, in sample code included with the development environment, in a downloadable help file, etc. What online documentation there is is incomplete - for instance, if I'm looking at the function reFFT (just an example, I know it's obsolete), the online help gives me the parameters and what they are but they don't tell me acceptable values, e.g. what is the largest/smallest value I can use for numberOfElements: 1 - 9e99999? Another case was with the NIscope driver NISCOPE_ATTR_INPUT_CLOCK_SOURCE. When I looked at the documentation (downloaded zip file filled with CHM files) there was a list of defined values but no desciption of what they were or were not for. Example: NISCOPE_VAL_NO_SOURCE ("VAL_NO_SOURCE")...I *assume* NO SOURCE is equivalent to Intenal but should I really have to guess when looking at documentation? For that matter, why does this information only appear to be available via downloadable file?
In another case with NISCOPE I found that the niScope_ConfigureHorizontalTiming expects a certain clock frequency (10 MHz) if you're using an external clock, but if you are using a clock frequency at exactly what you're asking for you have to set the attributes directly. I messed with this for a while before calling the help desk. The person at the other end was able to tell me how to fix my problem but he could not find documentation online (accessable by me) where this information could be located. It seems to me that the number of help calls could be drastically reduced if sufficient help were available online. Finding information on error codes is similarly lacking.
I also have a problem with referencing "installed" sample code in lieu of a online programmer's manual. I don't always run on my development machine. So I'm on my target system (that does not have the development environment installed) and I want to look something up...it's very frustrating to find all help on a particular subject referring to my development machine.
Starting CVI the IDE uses cpu resources even if sleeping, i.e. doing nothing except waiting for user input. It seems that the IDE is also using the scheme of SetSleepPolicy...
Today most other software does better and I would like to see an improved behavior: use cpu (and thus energy...) only if something actually needs to be done
There are several quests for better graph and UI controls, and I support them all
Now, I was very impressed looking at the new WPF Graphic controls of Measurement Studio 2012 and would like to have similar features in C (i.e.CVI), too.
So in addition of having classic controls and lab style controls may by one could also add this new scheme of controls...??? The graph control in particular looks very promising, with color gradients and polar plots, both frequently requested features, here realized in a new style. Wanna have...
For a fist impression, see here
We have recently dropped CVI (as of 2009) as an option for use with our many data visualization applications. The graphic performance is just too slow and clunky to put up with any longer and gets worse as we add features or try to make 'native looking' applications (that resize, animate, etc).
Things like dragging/updating cursors is noticably clunky when you have more than one graph updating (linked cursors across more than one graph).
Updating datasets in large tables is slow enough to watch it step through the rows. Even using suggest tips like using ATTR_CTRL_VAL instead of SetTableCellVal, when a large table has to update... it's painfully noticeable. Basically any operation that updates a large portion of the UI.
Another example, try to resize and move controls (as most other applications do) on the EVENT_PANEL_SIZING?
I'm going to go out on a limb and guess that CVI doesn't use any graphics card acceleration? since workstation or netbook doesn't seem to make much difference in graphic performance.
Our clients notice when our applications look 'clunky' and 'slow' when compared to smooth, responsive apps/interfaces from competitors. It's often the little things that make a big difference in appearance.
Note: the LabWindows/CVI Idea Exchange is not the appropriate forum to submit technical support questions.
The LabWindows/CVI R&D team is committed to reviewing every idea submitted via the LabWindows/CVI Idea Exchange. However, we cannot guarantee the implementation of any LabWindows/CVI Idea Exchange submission.