NI TestStand Idea Exchange

Community Browser
About NI TestStand Idea Exchange

Do you have a feature idea for how to improve NI TestStand? Submit and vote on ideas now!

  1. Browse by label or search in the TestStand Idea Exchange to see if your idea has previously been submitted. If your idea exists sure to vote for the idea by giving it kudos to indicate your approval!
  2. If your idea has not been submitted click Post New Idea to submit a product idea. Be sure to submit a separate post for each idea. Note: the TestStand Idea Exchange is not the appropriate forum to submit technical support questions.
  3. Watch as the community gives your idea kudos and adds their input.
  4. As NI R&D considers the idea, they will change the idea status.
  5. Give kudos to other ideas that you would like to see implemented!

The TestStand R&D team is committed to reviewing every idea submitted via the TestStand Idea Exchange. However, we cannot guarantee the implementation of any TestStand Idea Exchange submission until further documented.

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

StartTimeUnix.png

 

Looking at any step result, there's a TS.StartTime property, but it's referenced against the "the number of seconds since the application initialized the TestStand Engine"

 

What this means is that each step result is referenced against a somewhat arbitrary and changing epoch that isn't recognizable outside any one instance of the TestStand application, let alone by external applications.

 

I'd like to propose adding TS.StartTimeUnix, which contains the absolute time the step started.

I've added this in our model customization plugins, but to convert the epoch to UNIX I have to perform this calculation:

 

Seconds(False)-Seconds(True) + Parameters.Result->TS.StartTime

 

Why I'm asking for this:

In our step result database table, we've added a column for STEP_START_DATE_TIME which is absolute UTC time. To populate this I have to go through the gymnastics above. I revisited this code today and thought, "What silliness. This should be something natively supported." (Other than that I have no strong opinion on the matter)

The Search Directories.Insert method should only insert the directory if it is not already there.

 

The Method includes an index argument, if the directory is already there, then it should move the existing directory to the requested index.

 

While we were working on the shipping examples for DQMH, we discovered that the insert method was creating duplicates every time it was called. We implemented a work around that includes a for loop to check each of the items in the search directories list to see if it is the directory we are trying to insert, if it is, we delete it. Once the for loop ends, then we insert the directory where we want it.

 

You can see a video of the issue and how we worked around it here: DQMH 3.1 Only inserts the Delacor examples directory into Search Directories once

When monitoring values within a loop in TestStand, it is often desired to only record step failure results.  It would be useful to have a "Result Recording Option" of "Enabled On Step Failure":

 

TestStand Idea Exchange - Enable Result Recording On Step Failure.png

 

This is possible through various means (SequenceFilePostResultListEntry callbacks and other custom code).  However, I believe this would simplify TestStand sequence development significantly.

How many times have you found yourself typing double backslashes "C:\\Windows\\System32\\cmd.exe" or even worse, going through a copied path to change every backslash to a double backslash (and inevitably missing one), just so you can pass a file or directory as a constant to a code module or another sequence?

 

string issue.png

 

I'd like to see a symbol for 'explicit string' in the TestStand expression language, much like C# does with the @ symbol.

So if we typed @"C:\windows\temp" we would actually get the string "C:\Windows\temp" instead of "C:\Windows<tab>emp".

 

To really go the extra mile on this:

  • Drag and drop could be enabled, so that any file dragged from another window into an expression box would automatically paste the filename.
  • A browse button could be added to the expression browse dialog which would bring up the usual file open dialog and insert the selected filename.
Message Edited by Josh W on 06-14-2010 12:57 PM
Message Edited by Josh W on 06-14-2010 12:58 PM

When opening a version of TestStand which is not the current version, an error dialog shows. It would be helpful if this dialog included a button to open the version selector and/or a button to open the active version.

 

Example.png

 

The concept of TestStand Environments was introduced in TestStand 2016 and allows you to define multiple configurations on a single test station or development PC. It would be nice if there was an option to link a sequence file to a specific environment, similar to how you can set a sequence file to "Require Specific Model" In the Advanced tab of the Sequence File Properties. When a sequence file is loaded, the engine could check to see if the required environment matches the current environment and:

  • Automatically relaunch the app in the correct environment
  • Generate an error
  • Prompt the user for an action
  • Other??

It would be nice to choose the behavior when a required environment doesn't match.

 

If anyone has other thoughts or use cases, please share below.

-Trent

I've found that there's a hole in the global map in TestStand - often there's something that I want to access across a project or workspace instance, but not a station (this is especially true when developing on my laptop).  I know that there are work arounds for this issue, but none of them are elegant solutions IMHO.  I'd like to see workspace and/or project globals implemented.

When loading large sequence files, TestStand does not display progress and appears to "lock up" both TestStand and the LabVIEW OI.  Sequences with hundreds of steps can take minutes to load.  Operators often incorrectly conclude the application has stopped respoding during long pre-loads.

 

I am suggesting to implement a responsive progress display, allowing the LabVIEW OI to proceed execution, and post the following UI Messages during step pre-load.

 

UIMessageCodes

  1. UIMsg_ProgressPercent–(Value: 11) TestStand step modules post this message to the user interface to notify it to update its progress indicator associated with an execution.
  2. UIMsg_ProgressText–(Value: 12) TestStand step modules post this message to the user interface to notify it to update its progress message associated with an execution.

 

20869i87D31F1755A9EB9F

 

Because of the way .NET applications and assemblies are invoked in TestStand they are a child process of TestStand.  This means that they share TestStand's resources.  For most applications this is not an issue but if the application or library being instrumented by TestStand is resource intensive this creates a significant problem.  In the scenario that served as the impetus for this suggestion we saw performance 1/10 that when running the target application outside of TestStand.

 

To correct this I recommend the .NET adapter architecture be changed or be able to be configured such that instead of directly instantiating target applications a call to create an object with a .NET adapter would create a separate process that consisted of a TestStand WCF client wrapper process that would host the target .NET process and communicate with the parent TestStand instance via WCF.

 

Here is a simple block diagram of the intended architecture:

 

 

TestStand_dotNET.jpg

currently the behavior of the date function is (1) get a short ("MM/DD/YYYY") or long form date string ("Weekday, Month D, YYYY")with nice easy boolean input, (2) pass it N local variables to get all the discrete parts and assemble it myself with a bit of STR() and concatenation.

 

could we create a permutation on this date() function, (does one already exist) so that I can just pass it a %<> syntax string and have it format the current date to my desired format?

 

specifically, I'm looking for a non painful way of building a "YYYY-MM-DD" style string for a report (or even just DD/MM/YYY) without having to lug around 8 locals and a lengthly expression, or call into a LV VI. 

 

We have basic string format symbols available for the STR and VAL functions, why not for date? if anything passing this 1 parameter might save alot of folks creating a bunch of locals because they can just ask for the time item they want directly, and then VAL() the output text to get the numeric data if they need it?

 

it'd be awesome if the function supported standard DB format tags such as (http://www.w3schools.com/sql/func_date_format.asp) or failing that, was consistent with what LabVIEW's time format strings were.

 

Just a thought. Has anyone worked around this in a reasonable way?

 

--Elaine R.

Currently, the only way to pass parameters from a subsequence to a caller is by reference.  It would be nice if you could also pass parameters to callers by value to prevent the callers from modifying them.

HI

 

It would be nice to make Sequences public or private within a SequnenceFile.

With this you where able to make powerful SequenceFiles librarys.  The biggest advantage of this

is you can show the consumer of the library only the "important" public sequences. The

private ones where invisible. This will help to avoid errors.

 

 

Regards

 

juergen

Smart rename should handle renaming variable into and out of container.

Or function like smart move when user can drag variable in/out of container and references in sequence would update.

Let's say I'm building a fairly long compound expression that has some repeated parameters - I would like a way to specify (without creating additional locals) a variable/macro for use just within that expression.

 

For example, instead of:

Locals.CommandLine = "cmd /c C:\some path\that\is\reused" Locals.CommandLine += " /path C:\some path\that\is\reused"

 

 

I could specify:

#pathmacro "C:\some path\that\is\reused" Locals.CommandLine = "cmd /c " + pathmacro Locals.CommandLine += " /path " + pathmacro

 

 

The idea being that with this I only need to update the macros in one place in a long expression.

 

This is a simple example, but hopefully you can see why this would be useful and why I wouldn't want to create lots of locals when the values are required only within the expression.

When I get called to look at an issue that has occurred with a test, the account logged into TestStand is typically a restricted user (i.e. Operator). Since the Operator account has very limited options, in order to really do much immediate troubleshooting I need to stop the test and re-run it in the Administrator account. At best this is inconvenient and inefficient if the spot the error occurred is late in the test. However, it is extremely frustrating when it's an intermittent run-time error and I can't do any real-time debug because Operator is logged in. The only real alternative I can think of (when the problem is intermittent) is to leave it logged in as Administrator so I can debug whenever it happens to occur. This is not really an acceptable practice in most cases.

 

It would be fantastic if there were an override that let's an Administrator provide the proper credentials to perform the desired task that would normally be off-limits to the Operator. The basic premise of this suggestion is similar to the functionality within Windows; if you try to connect to a secured location or perform a task that requires administrator privileges, a dialog box pops up asking you to enter authorized credentials.

 

I run into many situations where I wish this feature was present. The issue is not always within TestStand (could be a database connection issue, etc.), but it is TestStand that throws the error and in Operator mode the only option is "Run Cleanup". Significant time, effort, frustration, and efficiency could be saved if I could simply enter my credentials as an administrator to perform the tasks I need to do.

 

Regards

 

 

On an unrelated side note, I find it humorous that "TestStand" is considered a misspelled word when using the forum spell checker.  🙂

Since our projects involve several developers working in tandem, we manage all project relevant data under SCM (Source Code Management). This way sharing and exchange of data between developers is much easier. To ensure that all developers can access and use the same TestStand Components – especially the language directory – the TestStand configuration directory is also under SCM control.

During the development process if a developer checks out the project folder, for example to „C:\ProjectX“, then the language folder is available under „C:\ProjectX\TestStand\Components\Language“.

 

TestStand ProjectX.jpg

 

In Teststand there is an option to point the configuration directory to a custom directory. To do this, go under the Station Options – Preferences – Configuration Directory,  and change the default path to our custom checkout path.

 

Station Options.png

 

However, even changing this setting, the language files are still get loaded from the default configuration path. In other words, assigning new custom path (which is „C:\ProjectX\TestStand\Components\Language“) seems to have no effect and the older default location (which is „C:\Users\Public\Documents\National Instruments\TestStand“) keeps getting selected instead.

This means, every developer has to copy the ProjectX TestStand folder into the default location manually a SCM update.

 

Suggested solution: make the whole default location directory changeable, to point to a custom directory. Thus during development of different projects, it is much easier to switch between the projects and to have the possibility to check out the code from a SCM to only one directory (and continue working with them).

I'd like to be able to specify the username, password, and local & remote paths by expression:

 

18787i328326F4E8289180

Every so often it turns into a mess of trying to do math in TestStand.  Or manage arrays (finally got some of that cleared up in TS2012).

LabVIEW "solved" some of that by implementing formula nodes, which are kinda just like the expressions we currently have in TestStand.  Then they realized that formula nodes didn't have all the functionality that users needed, and why not just expand to a "industry standard" and implement MathScript.  Why can't TestStand do the same?  Build the MathScript engine into the TestStand distribution, and allow us to write expressions (or at lest a 'mscript statement step') in mscript format.  This would help remove pressure from adding more functionalty to the TestStand API (since a lot of it would already be built into mathscript language).

 

I could imagine writing a statement like Locals.MyArray = Mscript.ones(15)

Similar to the SequenceFileLoad Callback but for any sequence file using that process model.

 

One use case would be invoking a splash screen with company information.