NI TestStand Idea Exchange

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

At our facility, we have a shared Users.ini file on a network that is used by all test systems in our entire organization (somewhere between 150 and 200 systems).  It contains hundreds of different users and many different user groups and its contents change frequently.  I recently upgraded to a newer version of TestStand and learned that a single Users.ini cannot be used by multiple versions of TestStand; it can only be used by the version of TestStand in which it was created (or saved, when upgrading).


This is problematic because it means I have to maintain multiple Users.ini files for the different versions of TestStand in use at my facility; whenever I need to make a user change, instead of changing it in one location, I have to make the same change in multiple Users.ini files.  Because there is a mixture of TestStand versions in use at my facility, it would be really nice if different versions of TestStand were able to use the same Users.ini file.

Under TestStand Sequence Editor, a lot of IVI Class are not encapsulated in Steps Type.

It should be interesting to have IVI Step Type because the development and the maintains of a Hardware Abstraction Layer is complex and requires a lot of time.

Under Labview all IVI class are presents. Why not in TestStand?

 

 

 IVI2.png

 Xavier

Test Architect - Alstom Transport

 

Provide capability to allow set a property that contains the full path of the file to be downloaded/uploaded via an expression browser. When running my tests with my sequence file I won't know my filename/pathname until the test is completed. Provide an expression browser for the remote path and the local path so I can dynamically set the property of the path at the end of the test.

 

Expression Browsers Feature.png

 

 

 

 

 

 

See Also

Simulated Devices in LabVIEW projects

Project and Workspace Context in MAX

 

Link to those ideas in next post

 

We can already create tasks, channels and scales in a LabVIEW project but, We cannot then use MAX to run those Tasks and we must use MAX to create a simulated device on a development machine.  After a few projects the Max configuration becomes cluttered.  Deployment and importing of the hardware configuration can get problematic to say the least! 

 

On the other hand- if the Hardware, Data neighborhood and IVI session set-ups could be added to the workspace, deployment would be a snap! just import the *.nce from the workspace without having to create one from MAX and exclude items not concerned for the deployment.

 

For integration and station troubleshooting the Sessions, Aliases, Tasks et al would be organized by deployment in MAX and fault identification has all the "tools" any repair tech could want to isolate a failure.

It would be awesome if we could drag and drop attributes from the attributes dialog into expression panes in TestStand.

Return the last element of an array by indexing it with -1, as in myArray[-1].

 

For a bonus, the second-to-last could be returned by usinging index -2, etc.

Hello,

 

With the strongest possible emphasis I would like to propose the following new command line arguments for the ORPU. These are desperately needed.

 

  1. /minimized    Launch ORPU truly minimized without having it steal window focus.
  2. /no-splash    Launch ORPU without splash screen
  3. /silent           Launch ORPU in the tray, without a splash screen and without having it steal window focus.

This is a profoundly useful tool and we are adopting it on dozens of stations around the world... but not having these improvements is really frustrating for operators and these improvements appear to be low hanging fruit. No thanks, I don't want to recompile the ORPU for several very good reasons.

 

Please help us out by carefully considering the daily use cases for this tool.

 

References:

https://forums.ni.com/t5/NI-TestStand/How-do-I-get-the-TestStand-Splash-Screen-to-not-appear-when-I/m-p/3120481

https://www.ni.com/docs/en-US/bundle/teststand-api-reference/page/tsref/using-command-line-arguments-with-the-offline.html

Feature request 523524

 

Hi,

 

Several years that I'm facing this issue : I'd love to be able to rename a file when building my TestStand project image.

It would be particularly nice to ease the installation of a Type Palette thanks to this feature (taken from TS help):

 

TestStand also searches the TypePalettes directory for type palette files with the Install_ prefix. When TestStand finds a type palette file to install with a base filename that is not the same as any existing type palette file, TestStand removes the Install_prefix and adds the type palette to the type palette list. When TestStand finds a type palette file to install with a base filename that matches an existing type palette, TestStand merges the types from the install file into the existing type palette file and deletes the install file. This method is better than modifying the existing type palette file because this method is more modular and flexible for deployment and updates.

 

So, in my project I made a type palette file xxx.ini. When deploying this file, I'd love to rename it Install_xxx.ini so TS can install/merge it on the destination computer !

This is just an example of the use case, it could be applied to any file within my deployement image.

(This idea was created as response to this discussion board topic: https://forums.ni.com/t5/NI-TestStand/ExpandPathMacros-FindFile/m-p/3767542#M56811)

 

The commands "Engine.FindFile", "Engine.FindPath" and "Engine.ExpandPathMacros" only support one macro:

$(Platform)

but there are other generic paths that could be helpful e.g. when trying to call a third-party .dll (that's my main usecase) or write a logfile:

-------

$(commonprogramfiles) - The actual folder name varies depending on Windows language settings and bitness. No absolute paths possible but a lot third-party .dlls are here.

$(temp)

$(localappdata)

$(appdata)

$(user)

$(public)

$(MyData) - The actual folder name varies depending on current user and Windows language settings

 

It hopefully shouldn't be too hard to access the windows functions which get the actual names via macros.

It would be nice if NameOf() had the option to return the entire name including the containers that it is nested within. This could be an optional boolean parameter in NameOf, such as NameOf(Parameters.Contaner1.Value, True) returns "Parameters.Contaner1.Value" and not just "Value".

It would be nice if I could right click a variable in the variables pane and choose from the context menu "highlight steps which reference this variable" or words to that effect and then the background of each step which referenced that variable would alter.

It would be really nice if it happend just by hovering my mouse over a variable.

 

I know this can be done by using a search but it is rather clunky

It is really easy to get a user in system by name via the current API methods

 

User = Engine.GetUser("loginName")

 

but if you want to (A) delete that user, or (B) update values related to that user (password/fullname/loginname) there feels like an unnecessary number of hoops that must be vaulted through related to digging through UserFile->userList->AsPropertyObject-> Get/SetPropertyObjectByOffset()

 

in both cases, I'm obliged to loop through the userList to find the element I want, and then fetch/set/delete it.

 

I would love if there was some shortcut in the API to take on this chore for me in a more efficient manner.  Something as simple as:

index = Engine.GetUserIndex("loginName")

 

would match behavior that already exists with Sequences and Steps so that I can efficiently know what array element I want to interact with based on the current name.

 

or if we wanted to get fancy we could have an:

 

success = Engine.UpdateUser("loginName", UpdatedUser obj) 

 

function that would go all the way and actually take a replacement user object and do the array overwrite & save the file for me... but I'd be content to do that myself if there was just an easier way to get the information I wanted in/out of the userlist having to maintain my own search list for users in memory feels tedious.  We already have GetStepIndex() and GetSequenceIndex(), so why not one for users too?

 

--Elaine R.

Trying to minimize memory used by Teststand, I have selected from sequence properties "Disable Result Recording for All Steps".  This works great except for sequence which DO need to record results.  There is currently no way to override this sequence option to enable recording for the specific measurement steps.  I would recommend added an option which allows the step to 'Override' the sequence disable result recording setting.  In TestStand 2014 there is an option under the Step / Run Options / Result Recording Options to "Enabled (overriding sequence setting)" but this does NOT work to enable / override the sequence setting, the results don't get recorded.  The only solution I found was to NOT enable the sequence "Disable Result Reporting" option on sequences with measurements, and select each step, disabling the Result Recording, except for the measurement steps.

Recently I am trying to customize process model and found somethig that may be useful for making fast process.

Here is the Idea.

Suppose I have ~20 sequence(Engine callback, Process model callback etc..). If i want to edit any one of this  sequence than I have to scroll down and select particular sequence. Moreover, sometime if two or three sequence has same initial name than I have to increase the length of sequence column and find sequence of my interest.

but what if teststand has ability that i just give initial character and teststand redirect selection to the sequence starting with same character(like in windows or Step Type in teststand)

Greetings,

 

The current behavior of the Batch Synchronization options "One Thread Only (first thread executes step, remaining threads skip)" and "Serial (one thread at a time)" is that the threads wait at that step until all threads have gotten to that point before it executes using the selected behavior. It essentially has a rendezvous built into the step. There are many times when I want the first thread that encounters that step to perform the action immediately (and then continue, with other threads skipping that step) without waiting for the other threads to also get to that point in the test.

 

For example, I may have three threads running in the Batch model and when the first one gets to a certain point in the test I want it to perform some action (log activity, turn something on, etc.) that I only want to be done once. I can use the "One Thread Only" option, but this causes the test to pause until all of the threads have reached that point before it performs the action of the step (once). Additionally, the remaining threads also pause at that step until the first thread completes the activity. So the undesirable delay is twofold: the first thread doesn't run the step until the other threads have also reached that point, and the other threads now wait until that activity is completed before continuing.

 

It would be great to have the option to select how I want this to behave. If the rendezvous could be selectable then it would provide the desired functionality. I'm sure custom coding could create this effect somehow, but I don't see a straightforward way to have only one thread run a step (and others skip) without waiting for the other threads to arrive or the remaining threads to wait until the first completes. The "Serial" Batch Synchronization option can be implemented in a different way without major effort (using locks, rendezvous, etc.), but the "One Thread Only" with selectable rendezvous option is what is truly missing (and it may make sense to have it available for both).

Recently I tried to add in custom error handling to the NI_DatabaseLogger.seq, but because Plugin Sequence files don't support Engine Callbacks, this was difficult.

 

This idea is to allow model plugins to access Engine Callbacks, so that we can override their behaviour with customised sequences.

TS does not allow the ability to rename steps that are of the Flow Control type (i.e. If, Else, For, While, etc.). In a report, these generic names are then used, making it very difficult to know what condition the step was evaluating to determine whether to enter or continue within the flow control block. A step name would normally give the reader of a report some indication as to what is being tested or reported on. This is not the case for these step types.

 

For example, an "If" step that is determining whether a condition is met (and whether to enter into the subsequent steps within the flow control block) simply shows up in the report as:

Step Status Measurement Units Limits
Low Limit High Limit Comparison Type
If {True}  Done        

 

There is no indication of what it evaluated to determine it was True, meaning someone reading the report has no idea what the purpose of the step is. As designer of the test, I can look through the sequence to determine exactly what it was doing, but a report is a useful tool to be able to show to someone not familiar with the test and allow them to be able to see what happened. A report gives the reader the history of the test. Without knowing what a step is for, a lot of the "story" being told by the report is either lost or becomes much harder to follow.

 

I would assume there is a reason as to why these step types are not able to be renamed, but I'm not familiar with what that would be. It would be nice to be able to modify, or at least add to, the step name so that the report gives some indication of what it was that it evaluated. If that is not possible, there should be a simple way to include the parameter/expression being evaluated with the step name in the report. This can be somewhat accomplished using other methods, such as the Additional Results of the Properties tab, but this is not intuitive or clean and I would think this behavior should actually be default, not something the user has to manually create and enable.

 

Regards,

I've got a bunch of variables in StationGlobals.  Many of them are types.  I want to edit the type of one of the variables to add a parameter.

 

Workflow -- 

Open StationGlobals pane by clicking the "world" icon along the top.

Find the variable instance.  I right click on the variable instance, and this is the listing I get

Darn.  I was hoping to be automatically linked to the type definition.

AddViewToSGviewer.png

 

 

Frustrated, I was convinced I had right clicked on instances of types before and been able to directly link to the type definition for that variable.  So I go to my empty dummy sequence file, and try doing the same thing from the variables pane of "Sequence File 1"

 

viewexistsinSFview.png

 

Ah Ha!!! that's what I wanted.

 

So how about this -- why don't we just take this "Right click -> view -> type definition" ability that exists in the variables view, and get that feature added to the station globals view, kinda like this:

 

addedView.png

 

 

This is the existing function:

returnvalue = AllOf(True,False,True)

 

 

But I need often this:

my_boolarray = {True,False,True}

returnvalue = AllOf(my_boolarray)

> Error: Expected Boolean, found Array of Booleans

Now TestStand 2016 supports enums, I found myself in need of an Enum Step Type to check the value of a Enum.

I have VI that returns the UUT's current status as an enum. E.g. Booted OK, Bootloader, Timeout or Error. 

In this case I want to check the UUT has got to the Bootloader...  

I intially worked around using numeric limit test with Datasource set to  "Val( Enum("Boot_State","Bootloader"))". But then in results it would be nicer to see "error" than the enum constant. 

Then I relaised I could use the String test instead.... which is better. Example attached, casting to Str instead of Val.....