TestStand Sequence Thread Termination
I have created a Sequence which launches a VI to run in a parallel/background thread. This sequence gets called in my Main Sequence. In my Main Sequence, I'm trying to figure out how to terminate the background thread after the main sequence has completed all of its actions. The background thread has no pass/fail criteria, its is essentially a polling VI which is supposed to share a Queue which contains data telling the VI what to do.
Before trying to implement this into Teststand, I successfully created an application which launches a background VI using VI server. Using Queues, I'm able to terminate and pass data to the VI running in the background from the Main VI. I'm essentially using the same approach in Teststand with no success in being able to terminate the parallel thread. Can parallel threads use the same Queue reference?
Thanks
Peter.
Hi Buzz,
Here's an example I was using awhile back to demonstate a problem. But it might help you in your solution.
The example starts a dialog panel in a new execution. The MainSequence carries on and does something else.
The user has the option to press the button on the dialog to close the new execution, or the mainsequence will come to an end then terminates the new execution.
Hope it helps
Regards
Ray Farmer
Regards
Ray Farmer
Attachments:
StopNewExecution.seq 41 KB
Similar Messages
-
I have a Sequence that launches a sequence in a New Thread that happens to launch some LabVIEW code. The problem is when the LabVIEW code finishes, it will not close even when the TestStand sequence terminates. Is there a way to tell this LabVIEW code to Exit, I've tried the Quit LabVIEW function, but that causes a C++ RunTime Error. The LabVIEW code does end though, and it is set in the VI properties to:
Checked - Show Front Panel When Called
Checked - Close Afterwardds if originally closed
The sequence call that the LabVIEW code is launched from has the following options:
- New Thread
Unchecked - Automatically wait for the thread to complete at the end of the current sequence
Unchecked - Initially Suspended
Unchecked - Use single threaded apartment
Any clues on this would be appreciated.Hi ADL,
Everything should close correctly if you check the checkbox "Automatically wait for the thread to complete at the end of the current sequence" in the thread settings.
With it unchecked, I am seeing the behavior you are.
Gavin Fox
Systems Software
National Instruments -
How to call a python script from a TestStand sequence?
Please tell me how is it possible to call a python script from a TestStand sequence.
Thank for your help in advance.
ImreHere you can find some information about Python and LabVIEW:
http://forums.ni.com/ni/board/message?board.id=170&message.id=124424&query.id=149647#M124424
If you have LabVIEW, you could use LabVIEW steps to call your Phyton Scipts.
Another solution would be, to do, what is decriibed in the thread directly in TestStand:
You can call a dll or .NET assemblies directly from teststand, or use the "Call Executable" TestStep. -
MessagingException: Sequence already terminated (soft).
Hi,
I'm getting the following error after the execution of an IDoc>SQL interface.
The queue shows "XI Error ERROR_OBJECT.INTERNAL: Queue stopped" in FM SXMS_ASYNC_EXEC.
The message with error, in SXMB_MONI, says:
<SAP:AdditionalText>com.sap.engine.interfaces.messaging.api.exception.MessagingException:
Sequence already terminated (soft).</SAP:AdditionalText>
Does anyone ever faced this error?
Tks.
Rafael.Hi,
The Queue sequence has terminated in PI,
Login to Messaging System http://<host>:<port>/MessagingSystem/monitor/monitor.jsp
Check EOIO Sequence Monitor..
Change the Date range according to your message processed date, Queue name can be viewed with status "Terminated".
To resolve your issue, assign a exclusive queue name in sender communication cahnnel or if you already using a queue name, change it to different name.
Let me know if this resolved your issue.
PS: Actually i had the same issue, i am searching SDN on "how to activate Terminated queues" , i saw your thread. This might fix the problem. But still i am searching on Activating termiated queues.
Thanks
Vijay Poreddy
Edited by: Vijayanand Poreddy on Feb 17, 2012 5:55 AM -
Hi all,
I have written C# code to load a sequence file dynamically in TestStand Sequence editor. The code is as follows...
myEngine.PostUIMessage(mySequenceContext.Execution, mySequenceContext.Thread, UIMessageCodes.UIMsg_OpenWindows, 0, null, mySequenceFile, true );
The code is working fine and I could view the Sequence file opened in TestStand Sequence editor.
Now, I wish to select one sequence in the opened sequence file to get the details of the sequence programatically. In other words, I want to simulate a mouse click to a sequence and view the steps associated with that sequence.
Can anybody give some clues...
Thanks in advance.Hi,
Also I am getting error like "Index out of range. Source: TSUISUPP.SelectedSteps at NationalInstruments.TestStand.Interop.UI.Support.SelectedSteps.AddStep(Step val)". Error code: "-17500; Operation Failed." My code is like
mySequenceFile = myEngine.GetSequenceFileEx(@"D:\dynamic loaded sequence.seq", 0, TypeConflictHandlerTypes.ConflictHandler_UseGlobalType);
mySequence = mySequenceFile.GetSequenceByName("First");
Step myStep = mySequence.GetStep(2, StepGroups.StepGroup_Main);
SequenceContext mySequenceContext = mySequenceFile.NewEditContext();
mySequenceContext .AsPropertyObject();
myEngine.PostUIMessage(mySequenceContext .Execution, mySequenceContext .Thread, UIMessageCodes.UIMsg_OpenWindows, 0, null, mySequenceFile, true);
ApplicationMgr applicationMgr = (ApplicationMgr)myEngine.GetInternalOption(InternalOptions.InternalOption_ApplicationManager);
SequenceFileViewMgr sequenceFileViewMgr = (SequenceFileViewMgr)applicationMgr.GetSequenceFileViewMgr(mySequenceFile);
sequenceFileViewMgr.SelectedSequences.Clear();
sequenceFileViewMgr.SelectedSequences.AddSequence(mySequence);
sequenceFileViewMgr.SelectedSteps.AddStep(myStep);
I am sure that my Sequence selected in the Sequence file loaded has more than 2 steps. Please help me in solving this problem and that in the previous post.
Thanks,
Biju kuttan -
How can I run a step only if TestStand not is terminated?
I want to run a step I Cleanup only if TestStand not is terminated. Is there a variable I can read who tell this?
Jan Inge -
I did not know whar version of TS you are using so I created the sequence using TS 2.0.
In the example a save the state to the numeric result of a numeric limit step and the step determines that execution is normal if the state is 1, so the step passes, otherwise it fails. The precondition of the next steps use the pass/fail status of the first step. This way you do not need a local variable.
Scott Richardson (NI)
Scott Richardson
National Instruments
Attachments:
CleanupStepNotRunDuringTermination.seq 30 KB -
Teststand New Thread VS LabVIEW "Call & Forget" Asynchronous call
Hi everyone,
Here is an example taken from the ni.com website showing how to use LabVIEW to post a TestStand Notifier. I have modified the example to fit the situation I needed to use it for. I have an example which works fine (When I use a TestStand new thread to launch the Notifier VI) and an example which does not work (When I use a LabVIEW "Call & Forget" Asynchronous call to launch the Notifier VI).
I would like to understand why it doesn't work in the second situation. The reason why I would prefer the 2nd situation which currently doesn't work is that I try to eliminate all multi-threads from an obsolete sequence written by someone else a few years ago so that I can troublesoot it and update the code to make it work with today's new reality.
Also, for my personal knowledge. I don't understand why the second strategy doesn't work. The Testsand notifier reference is the same and hadled the same way. I have included my example files with the 2 situations in seperate sequences files.
Thanks in advance to the person who will be able to enlight me.
Nien
Solved!
Go to Solution.
Attachments:
New Thread Or Dynamic Call.zip 41 KBHello Nien,
This isn't a TestStand issue. I suggest you take this to the LabVIEW forum. Looking over your code your Notifer and Forget.vi is dependent on the notifier.vi. So it's not necessarily anything wrong with the sequence steps but actually within your LabVIEW code itself. One suggestion is to insert a simple error handler.vi in your Call Notifier and Forget.vi. You have error wires connected to the functions itself, which is good practice but you don't have anything to inform you if an error occurs or not. I would suggest you to run try to debug your LabVIEW code, such as using highlight execution, while you're running your code so you know where exactly the error is happening.
Thanks,
Jonathan R.
Applications Engineer
National Instruments -
I want to create a local object reference variable in a TestStand sequence file programatically using C#.
Hi,
Accoring to your reply in this Thread
http://forums.ni.com/ni/board/message?board.id=330&thread.id=26984
Just try this example. There you will create a numeric variable during excuting a sequence!
Hope this is what you are looking for.
Please attach all your questions here.
juergen
=s=i=g=n=a=t=u=r=e= Click on the Star and see what happens :-) =s=i=g=n=a=t=u=r=e=
Attachments:
CTestStandDialog.zip 31 KB -
Control LabVIEW GUI via TestStand sequence
Hello,
I have a VI with several buttons(controls) that the user can change during the test.
How can I associate these buttons(controls) with TestStand sequence so that during the sequence depending on a variable I set In TestStand the buttons(controls) in the VI will be activated.
Thank you,
Lev KolomietsLev,
Are you talking about your User Interface? Or is it just a VI that you call from your test sequence?
If it's the User Interface then you should use UI Messages.... (Google or Bing: TestStand UI Messages. let me know if you have more questions on that).
If it's a VI you call in a different thread from your test sequence then you will want to pass in the sequence context. Then you can use the VIs on the TestStand palette (specifically TestStand - Get Property Value.vi).
Hope this helps some,
jigg
CTA, CLA
teststandhelp.com
~Will work for kudos and/or BBQ~ -
Hello Forum-Members,
I have a problem concerning the execution of an TestStand-Sequence in LabVIEW. I have created a VI that offers the ability to choose a TestStand-Sequence-File and then executes the sequence using the TestStand-API. The implementation is based on an example in C++-Application found following this link:
http://forums.ni.com/t5/NI-TestStand/Unreleased-references-using-engine-API-in-C/m-p/2927314#M46034
The implementation works quite solid in case the VI is executed the first time. The VI processes the chosen sequence in a acceptable duration.
But in case the execution is started a second time, the execution of the sequence takes ca. 30sec more than in the first case.
Until now I have not found a solution and hope someones got a hint concerning this problem...
I am using LabVIEW 2013 and TestStand 2013.
I have attached my own VI, a sample sequence with a small sample VI, so you can reproduce the problem.
Kind regards,
TobiKi
Solved!
Go to Solution.
Attachments:
Exe-TestStand-Sequence.vi 25 KB
Sequenz.vi 8 KB
Test-Sequenz.seq 5 KBHi Norbert,
first thanks for your answer.
What would be a reasonable way to replace the "Execution.WaitForEndEx"? My first idea is to get the respective thread of the execution and use the "Thread.WaitForEnd".
To clarify my problem:
The execution of the sequence itself takes longer time and so the execution of the calling VI. I have attached pictures of the log file of the first and second execution.
Further I don't get any dialog popups during the shutdown of TestStand. (I have activated the "ReportObjectLeaks" using the "DebugOptions") While developing the attached VI I've gotten several popups. But these popups disappeared after closing all references.
Maybe you have another hint how to locate the problem.
TobiKi
Attachments:
FirstExecution_20-08-2014.png 16 KB
SecondExecution_20-08-2014.png 16 KB -
Multi-thre​aded Sequences,​Threads and tracing
Am writting a custom OI in LabView. Got a issue which is causing a fair amount of head ache. I'm using the trace message to find out what is executing and displaying the data in the appropriate form.
However, I've notice that when sequences go off and execute in thir own threads(Multithreaded - 'Run Sequence in New Thread') there doesn't appear to be any trace messages coming back from thouse spawned threads. I've had a good look at thi but still can;t seem to figure out why.
Basically I need those trace messages.....Wojtek -
The default operator interfaces only support tracing one active thread at a time. Each operator interface has a thread control that allows you to switch between threads.
There is an option ExecMask_TraceAllThreads which specifies to send trace events for all running threads in an execution. This option can be set on Engine.NewExecution, but keep in mind that the OI must be able to support this option. When the TestStand sequence editor and operator interfaces launch new executions, they do not set this option.
Scott Richardson
National Instruments -
Hi all,
I am using LabVIEW 8.5.1 and TestStand 4.1. I have done a TestStand sequence with a VI in it, which uses Report Generation Toolkit elements. On my machine I am using LabVIEW and TestStand with a Development System license. On the other machine I am using TestStand with a Base Deployment license and I have chosen the LabVIEW 8.5 Run-Time Engine in the Adapter Configuration. Everything is running well except of this VI with Report Generation Toolkit elements. The error message is showing that the VI is not executable. It works well only after I have installed LabVIEW with an Evaluation license and chosen LabVIEW 8.5 Development System in the Adapter Configuration.
I have found other posts and a document in the KnowledgeBase with a similar problem: http://digital.ni.com/public.nsf/allkb/8A0E6274D9BD7B1986256F62006AD402?OpenDocument But I am not using EXE files in my sequence, so I don't know how to solve mine. Anybody has an idea?
Solved!
Go to Solution.Hello guys,
thank you very much for your answers!
@Ruediger:
I tried to follow the instruction for Method 2 in the mentioned document: http://digital.ni.com/public.nsf/allkb/F3DC40A6E3F3B25B862570AD005D1D3D?OpenDocument, but the steps on my machine are different starting from step 4. After I click "Continue..." in step 3, I dont get a window, the system just makes a new folder with the same VI.
To be honest, I am new to LabVIEW and have some difficulties at this time. What I understood from your reply is, that I need to make a LLB-File, where the files from Report Generation Toolkit are in!?
@GovBob:
I was following the instruction in the document: http://digital.ni.com/public.nsf/allkb/9E00E7EFE0635E678625734600779EFE, but it wasnt working. Can you please tell me how I can check if the VI Server is installed and running on the machine?
I am using LabVIEW 8.5.1 and TestStand 4.1 on my machine, on the deploy machine there is TestStand 4.1.1. The version of my Report Generation Toolkit is 1.1.2.
Kind regards, Roman -
Is it possible to call a VI that is inside a LabVIEW executable from a TestStand sequence?
I have created a custom TestStand operator interface and have modified the default sequential process model to display a UUT information dialog that prompts for more information than just the UUT serial number. This UUT information dialog is a LabVIEW VI. To distribute the operator interface, I build it into an executable. As part of the build process, I make a copy of the UUT information dialog VI (which is part of my operator interface project) and place it in the same folder as the executable. I have then configured the sequential process model to call the dialog VI from this location. It would be really nice if I could embed the UUT information dialog VI inside the operator interface executable so that I could distribute just an executable instead of an executable and separate VIs. Is this possible? In other words, is it possible to call a VI that is inside a LabVIEW executable from a TestStand sequence just like a standard LabVIEW VI call?
Ryan,
The dialog that you've created isn't being directly called by the OI at all and shouldn't need to be included in the same directory as the OI for distribution. Since you are modifying the PreUUT of the default process model, you will give the path to the VI in that step, create a deployment and then manually copy the VI to the directory referenced in the step. The VI is considered a support file for the process model and is not related to the OI at all.
Test Engineer - CTA -
How do I find the path to a TestStand sequence file using LabVIEW
My LabVIEW application launches a bunch of teststand sequences, provided it has the complete path to each of them. I want to make it more flexible by providing it just the name of the TestStand sequence so that it will go and find the path to the sequence by searching a directory structure. TestStand has a neat FindFile() function that can do this, but I need to do this from within LabVIEW. Is there a way to do it?
There are a few ways to do this depending on how you are getting the sequence files. If you are calling the GetSequenceFileEx method, you can just pass the GetSeqFile_FindFile (0x20) flag in the SequenceFileFlags property. If you are using the ApplicationMgr.OpenSequenceFile method, this is automatically done for you.
If you want to use the FindFile function in general, you can use the Engine.FindFile method.
Allen P.
NI -
Finding the name of my teststand sequence in the process model
I would like to be able to find the file path and name of a teststand sequence in the process model. I have created a simple vi which will display this information when run in a sequence. If i insert the vi into the process model, the file path and name returned is that of the process model and not the sequence under exectution. Is there a way of extracting this information in the process model?
Davepar -
If you are executing in the process model you can use the following as a lookup string if you are in the root context "RunState.ProcessModelClient.Path" or "RunState.Root.RunState.ProcessModelClient.Path" if you are not in the root context.
Scott Richardson (NI)
Scott Richardson
National Instruments
Maybe you are looking for
-
Customer/Vendor A/C with line item details and with opening and closing Bal
Dear Sir / Madam, Is it possible to have a customer and / or vendor Sub-Ledger account- with line item details and with opening and closing balance detail for a particular period.? Regards Chirag Shah I thank for the given below thread which has solv
-
Printing problem: "fit to page" option does not work, even from cmd
hello! i am switching a company over to linux, that's why i am trying to make it shine as much as possible! unfortunately i have to explain why something as simple as printing an email to one page instead of 1 and half isn't working... no matter what
-
When trying to sync my nano 5th Gen i got a message saying there was a problem and to try uninstalling and reinstalling. I did this step by step, but when reinstalling i was presented with this message. 'The file 'i Tunes library .itl' cannot be read
-
Compilation Error - Parsing Error Page
Dear All, I have a procedure in a package which is returning SQL QUERY string. So I have use that procedure and create a report. When I create that report I used "Function Returning SQL Query" option and used below code DECLARE tmpVar VARCHAR2(5000);
-
im a graphics student and really need a package with these included!!!