NI TestStand Idea Exchange

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

If there's a way to do this already feel free to ignore this suggestion 🙂

 

I have a process that spawns N parallel measurements for a given DUT at one point during code, and then has a series of wait steps later, to collect all the results / errors / etc.

 

I have a reaonable timeout, with error generation enabled on the Wait steps as a safety mechanism in event a process hangs (rare, but not impossible). During normal execution these timeouts never trip, and all runs beautifully.

 

If I set a breakpoint/single-step my execution to troubleshoot one of the measurements during design/debug, often times it takes a while before I 'resume', and when I do, the timeout on the parallel wait immediately trips with error.

 

would there be some way to make the Wait step's timeout logic 'pause' while execution paused and 'resume' when sequence is executing normally? that way the error I'm trying to trap during debug won't get confused with an irrelevant error for 'you took too long'...

 

i know I can put conditional logic on the timeouts to discard the error if running inside the debugger, but it'd be cool if the step was just smarter in general

 

--Elaine R

Hi,

 

Recently I wanted to iterate through ALL my subproperties in the container.

 

I've discovered that the function GetNthSubPropertyName accessing only first level of subproperties and it doesn't get deeper into hierarchy.

 

I wonder if it could be an extension to this function - and to all similar functions - allowing iterating automatically over ALL subproperties. For example a new option could be applied here.

 

Recently I've discovered misleading TestStand behavior.

 

In the case where in the sequence we have two steps with the same name and we'd like to refer to the SECOND step via its name like shown below:

 

screen02.png

 

TestStand allows us to do this, but during the execution, this reference is bind to the FIRST instance of the step:

 

screen01.png

 

In this caseTest D should fail showing result 12 not 10.

 

So, TS allows me to pick a step I want, however it looks like TS binds it to the first match on the list; so it is a lie.

 

In my opinion TS should either:

--don't let me do this, or

--implicitly bind it using unique step ID.

 

Anyway the current behavior (TS2014) is ambiguos and shall be treated as a bug.

It looks like there is no "gentle" way to access the results of the executed tests in ongoing execution during this execution.

Sometimes there is a need to access the test results during the execution, before the data will be committed to the database, and execution is still ongoing. The reason for that could be we can reuse the some data of the test in other tests, or we can use for example the status of the test to drive the flow in our sequence.

It looks like there is no other general way to do that as only described by Sasha here: http://forums.ni.com/t5/NI-TestStand/RunState-ProcessModelClient-How-to-access-the-results-from-the/td-p/2796658

So, theoretically, - please read Sasha post - we have recipe to access all results we want. However, problem with accessing the result list is that, that it is done via the index of the ResultList array.

 

It leads us to two problems:

 

1. the elements in that list depends on the step position in the sequence file, which makes the editing sequence almost impossible,
2. if our sequence contain loops the problem from the point above is even more impossible.

Therefore, the idea:

Please prepare the easy accessible, not index based as it is now, method (container?) which developers can access the Results containers of the steps on the fly during the execution.

Handler proposal 1:
Step name (binded as unique ID) + execution order number

Handler proposal 2:
Callers path + StepName +execution order number

 

where execution order number could be the handler which could be number 0 by default unless the step is called few times.

 

 

 


Other post: https://forums.ni.com/t5/NI-TestStand/Accessing-measured-data-from-further-steps/td-p/1144710

Hi,

 

As in subject: allow the *.llbs, build as the Source Distributions in LV Application Builder, to work  with TestStand as indemendent application instances.

 

K.

Hello,

 

For the moment the runtime error handling can be managed by using ...

 

  • Runtime error options
  • Ignore runtime error flags
  • Manually, for action steps, by handling actions returns

It should be nice to add such a kind TRY CATCH block, in order to modify the error handling in a local section of a sequence.

 

TRY

    Steps ...

    Steps ...

CATCH

     case 35  // Error code = 35

     end

     case default // All other error codes

     end

End

 

Doing so, could be a way to handle runtime errors, in an other way that the global configured way.

 

Manu.

Hello,

 

I have a sequence which must loop a very long time, with cyclic access to hardware components.

In order to limit the amount of memory used by my application i decide to use the famous "Disable result recording" flag.

 

Beside this problem, my sequence don't have to collapse in case of runtime error (Due to hardware manipulations during execution),

and operators don't have to aknowledge the "error dialog box" ... every time an error occurs !

 

To handle my runtime errors, i deceide to :

 

  • The main sequence is a loop calling the different fonctionnalities by sequence calls 
  • I configure the sequence calls with "ignore RTE", so my mainSequence never stops on runtime error 
  • I Configure the "runtime error handling" with the Run cleanup ... so no popup disturbs the operator

This is OK, but i also want to treat my errors (Tracing at least) ... and then i get the folowing problem ...

 

  • The errors are no more accessible using Runstate.previousStep.result.error... ... Runstate.sequence.main.... .... , because i have used the "Disable result recording" flag.
  • Storing a runtime error in locals is not possible in post expressions ... because post expressions are not executing after a runtime error

Perhaps the only way to handle my problem would be to use the SequenceFilePostStepRuntimeError callback ... 

But doing so, would need to use stationGlobals or FilesGlobals to get back the error in my main sequence. (A complicate architecture only to get an error !)

 

So, it would be nice, to be abble to ...

 

  • Let the result recording working
  • This make the runstate.previousstep.result.error... works fine
  • And sometimes, be abble to flush the result tree (Using a new API function. Something like <Execution>.FlushResults( ....) )

PS : My sequence don't use any report, database writing ... thats why disabling results recording is possible !

 

I don't know if i am clear ? (And with my bad english ???) Smiley Frustrated

 

Manu.

 

This execution analyser ( an option since it may slow down execution) will analyse the UUTGener executions and recomend user for improving the perfomance.

Few things that i can think of  is :

1) If a  debug DLL is running which if replaced will improve speed.

2) Check for memory leaks.

3) Generate list of steps which are logged many times ( example in loop which may not be requied to log)

4)List out steps which are taking long time to execute( say top 5)

5)List out steps whose execution time is inconsistent ( varies considerably from execution to execution

 

These are few of the things that i could think of.There maybe others.

 

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

 

Hi,

 

Recently I've discovered that it would be very useful if developers can have a function which allows them to re-initialise all variables and limits containers for all test steps to the default value.

 

By default value I mean the state as the variables and limits containers are just after the sequence file is open.

 

This function would be used in the situation when the test station is testing a lot of DUTs one after another and as a result of this the MainSequence is called, but not re-loaded, every DUT tested. Without this function, as it is now, developer have to explicitly reinitialise all variables they are interested in. However, it causes the risk of forget to refresh/reinitialise some variables, which could lead to long and costly debugging.

 

Proposal (sudo code):

FileGlobals.ReinitialiseToDefault()

Locals.ReinitialiseToDefault()

ResultsContainers.ReinitialiseToDefault()

LimitsContainers.ReinitialiseToDefault()

 

It looks like to implement it on the sequential model needs a lot of modifications. http://forums.ni.com/t5/NI-TestStand/Loading-default-limits-for-every-execution/m-p/2943434/highlight/false

Hi,

 

I'd like to propose a new feature for consideration. I'm missing the feature using which I could measure how long it takes to execute the freely chosen block of steps. To do this the new step would be needed.

 

Let say the step type name would be: "Time elapsed".

 

User would be able to specify the name for every instance of the step used, in the way as we can use the names in Rendezvous instances. And exactly as it is done in the rendezvous step type it would be some operations associated with that step type.

 

1. First call of "Time elapsed" step type would be called wit the operation: Create. The one obligatory argument would be the name.

2. Every other call of this step type with reference to the same name, apart from the last one, would be optional. The operation name this time would be Lap Time this time. The step would return the amount of time has gone from either the Create operation or the previous Lap Time operation.

3. And the last call of this step type with reference to the same name should be invoke with the operation called Finish for example, and it would return the time has passed from the first call of the step (with operation Create).

User would be able to create a lot of time elapsed type gauges, distinguish by their names.

 

This functionality would allow to measure the speed of the sequence during execution.

 

Example (sudo code):

 

TimeElapsed.Create("test01") //somewhere in the sequence

...

TimeElapsed.LapTime("test01") //somewhere in the sub-sequence

...

TimeElapsed.LapTime("test01") //somewhere in the sequence

...

TimeElapsed.Finish("test01") //somewhere in the sub-sequence

 

Values returned respectively could be:

0s

32s

35s

107s

 

Kamil

Hi,

 

Default log option for " Numeric Array - Graph" , String Array - Array but not formatted properly. Will be good if theres a option to display as table.

 

TS - Array.PNG

Hi,

 

I suggest being able to group steps in a sequence:

 

TS_Group_Steps.png

 

Steps that are grouped should in interactive mode be forced to be handled together, e.g. "Run selected steps" would always select all the steps in the group. This way you could re-use certain steps multiple times down the sequence without allowing such steps to be executed by themselves (or the opposite, make sure certain steps were never executed without surrounding safeguards).

 

Today we'd usually enclose such must-work-together steps inside sub-sequences, but that solution does not safeguard against selecting a single step within that sub-sequence for execution by itself, and sometimes putting steps in a sub-sequence is non-optimal (one such case is when you have disabled tracing into subsequences, but this particular set of steps you'd like to have tracing on - I know there are ways to go about this, but these are cumbersome and non-trivial to spot when editing the sequence).

 

I wouldn't add any extra configuration options to a group, it should simply be a group/ungroup thing - all settings still being on a per step basis.

 

The use cases for a group could be expanded into making it easier to select a co-working set of steps for copying and pasting, it would be a good way to document co-working steps and so on.

 

Cheers,

Steen

In every TS step we have the looping feature. I find it very elegant feature which allows us to save implementing full loops for singular steps.
 
I wonder if some statistical information to the looping feature can be added to the looping feature.
 
We could image that there is a step with the i.e. LV module which is responsible for acquiring one sample of data. Let say the sampled signal is noisy. It would be fantastic if we can use this singular step which acquire singular sample and the looping feature of the TS step to get multiple samples and to have a statistic the samples taken. The statistic could be:
--averaging
--mediana
--standard deviation
--etc...

This would be a useful feature to recover from a unreposive code module. Particularly useful, if the code module communicates with the firmware inside the DUT which could become unresponsive due to unforeseen erronous conditions.

 

This option should be optiional. It should be configurable with different timeout values. Once set and configured, then TestStand shall stop executing the code module, return from it and generate an error.

Hi,

 

Sometimes I can find difficult to access arrays using indexes. Although straightforward it can be difficult to maintain in certain situations, like calibration data for a lot of frequencies. Lets imagine you have a table of sixty calibration factors per frequency and forty frequencies, generated by third party software to the excel file.

 

It would improve accessibility if we could name columns and rows and use their names instead/along with the indexes.

 

We can access the array data like AnArray[4][6] now. In this idea we could access the data like that: AnArray["63dB”]["125MHz"].

 

When we would like to import the data using property loader it would be easier to access the data with defined names of colums and rows rather than indexes. (data binding)

Hi,

 

Firstly, I've discussed the topic how to programatically disable assesing results here.

 

I've realised there is no such option. Only one alternative is to swich the comparison type to LOG going thru the steps one-by -one.

 

It would be good to have the override method not to compare ALLresults in the sequence (during execution).

Hello,

 

It would be nice to VIEW errors which occurs in the process Model or callbacks using a special dedicated window.

 

Recently, i have send updates to one of my customers, using FTP transfert.

The updates consists of processModel updates, dotNet assemblies ...

During the FTP upload by my final customer, the dotNet assemblies were marked, by windows 7, as "Bloqued" Smiley Frustrated. (For security reasons ...)

These assemblies were called in my process model.

When the final user tryed to launch his application (Operator interface), nothing occurs Smiley Mad! The dotNet assemblies calls fell in error, but without any message. I had to investigate using debugging tools to find out the problem.

 

It should be nice, in case of "anormal errors" in process model calls, or in callbacks (like frontend callbacks) to launch an error window to view this kind of errors.Smiley Wink

 

You may say, you should have test the errors and handle them correctlty ... and you're certainly right !

But i get a look to the default processModels provided with TestStand ... and they are coded as i do !!!!

So even with the 'default process model', if an internal dotNet error occurs (missing sub assemblies, no more ressources ... ) the same kind of anormal behaviour could occured !

 

So having the way to view process Model, or hidden callbacks errors will perhaps be interesting ! Smiley Happy

 

Thanks a lot.

 

Manu.

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.  🙂

Now, if the number is exactly in between if two integers, TS rounding function uses bankers rounding method as a tie-breaking rule. Although bankers rounding tie-breaking rule generally secures equal statistical error distribution, in case of a need of rounding numbers with only one decimal place this tie-breaking rule produces output which could be different than - let say a natural - expectation. 
 
For example if we have a group of numbers like below:
 
{-2.0, -1.5, -1.0, -0.5, +0.0, +0.5, +1.0, +1.5, +2.0}
 
the basic expectation is to have them rounded like that (round-half-up):
 
{-2.0, -1.0, -1.0, +0.0, +0.0, +1.0, +1.0, +2.0, +2.0} 
 
However, using banker-rounding method instead of the rounding as above we see:
 
{-2.0, -2.0, -1.0, +0.0, +0.0, +0.0, +1.0, +2.0, +2.0}
 
I think round half up tie-breaking method option should be added for developers to use.
 
BTW: (the + and - signs and .0 notation are used just to keep the numbers to be easy to compare)