NI TestStand Idea Exchange

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

When setting arrays, even multi-dimensional arrays, it is possible to initialize them in single assignment expression. For example, "Locals.Array = {1, 2, 3}" will re-define Locals.Array as a 1D array with elements "1", "2", and "3". This is essentially the same as C-style initialization syntax, which also supports structs.

 

It would be helpful if containers could be assigned in a similar manner. For example, the illustrated container:

 

Untitled.png

 

could be assigned completely using "Locals.Container = {True, 1, "foo"}".

 

Currently, that syntax generates a run-time error, "Expected Container, found Array of Containers".

 

The only scenario I could think of where assignment gets a little weird is with Object types, but in that case you'll have to be assigning Nothing, the return of a function call, or an existing object from another property - there's no way to define a literal value to assign there, but that's already the inherent nature of Object types.

 

My use case is often container initialization. There are several kludges around this - keeping an empty copy of the container and assigning it to the working copy to clear the working copy, individually listing out each parameter, and a few others. Another case is when it's useful to assign a constant to module parameter - it's debatable that may be bad form, but would still dramatically improves the ease of skimming parameters if it were implemented. It would be a slight bonus to Sequence adapter in particular, which cannot expand containers in the parameter list, as other adapter types can (go kudos Allow Sequence Adapter to expand containers in the module tab to fix that!).

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 just had an issue (SRQ#1672094 - for NI employees who want to look it up) where I tried to open a termination monitor in a sub VI which was called in a VI that already had an termination monitor running. The whole thing seemed to run properly until the second termination monitor was about to be closed. It threw an error telling me that I was playing around with an invalid reference. I was a bit confused...

The issue was solved by NI hotline in a short time - as usual: It's not possible to have several termination monitors running in this constellation and I should forward the open monitor into the subVI and use it there.

 

I wonder whether it is possible that an error message is thrown when one tries to open a redundant termination monitor. Even if LabView can't know, TestStand should be able to and respond accordingly if the function is called. It would make debugging easier.

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.

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

 

I'd prefer TestStand worked the same way as LabVIEW, such that it'd allow multiple versions open at the same time. Other than probably some stuff internal to the TestStand architecture* I don't see any reason for the version selector.

 

* It's probably due to the ActiveX API having the same server and method names between versions, but that can be worked around if necessary.

 

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

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)

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

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.

It would be nice if TestStand provided basic file I/O functions (open, close, read, write) to complement the other functions already available.

When LV throws an error, it's all very easy to catch via callback and/or is auto propigated through the system to Runstate.SequenceError etc.so it can be detected.

 

When LV throws a warning... the data doesn't seem to go much of anywhere in TS... and unlike LV it doesn't propigate from step to step either.

 

I'd like to catch and log these warnings in my error handlers (naturally with different logic, but I don't want to lose the data either, it's important sometimes!)

 

from poking around, it looks like my options are:

(1) creating a custom steptype wrapper around all LabVIEW step calls,

(2) editing each VI called by TS manually

(3) some fun expression(s) in the 'add additional result' or 'post expressions' sectionsof each LV step, to create new variables in TS on the fly...  (or using a post-step callback to do the same)

 

It would be nice if the LV adapter / LV steptypes had some native way of catching this 'almost error' behavior and getting it into the report at least. I don't know if leaning on the error callback is the right answer, since, afterall, these aren't errors... but having a warning callback feels too LV specific...

 

How about a checkbox in the LV adapter, where you could specify 'treat warnings like errors' and then in the Error callback you could check to see if the bool was false, and punt as desired?

 

Is there something I'm not seeing that would be a better solution?

 

--Elaine R.

 

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.

It would be nice to have StationFileLoad, StationFileUnload, StationFileSave, etc... callbacks.  That way we could have a special analyzer or even splashscreen that could run when certain sequence files were closed, opened, saved, etc...

 

Thoughts?

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)

Using the stock reportgen_xml.seq file, the text value of the XML node shouldn't contain the characters < or >:

 

http://www.w3.org/TR/xml/#syntax

 

When using LabVIEW VI's to parse this, you (rightly) get errors, so it's incredibly difficult to just search and replace the offending characters with their XML escapes. 

 

Example node contents from the XML report:

 

<Prop Name='ReportText' Type='String' Flags='0x400000'>
                            <Value><![CDATA[{0} Locals.i = 0; Locals.i < 2; Locals.i += 1]]></Value>
                        </Prop>

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.

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.

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.