Parallel Process Model vs Asynchrono​us Sequence

I've been studying the features of TestStand, and learning how to use it for about a month, so still very new to the environment (although I have been using Labview and Veristand pretty heavily for about a year).  I wanted to get a little clarification on the use of the different process models, because I think I may be misunderstanding some of the terminology.  
Here is a little background of my project:
I have a Labview VI that I created to interface with a remote target (emulator).  I previously used the VI to run tests manually, and would like to use it as a code module in TestStand so that I can run automated tests.  I intend to use the same VI repeatedly throughout the test sequence.  The functionality of the system is dependent on maintaining constant communication with the emulator, so I can't be opening and closing the code module repeatedly.  Once it is open, it has to stay open and continually communicate  (I'm hoping I will not have to create "wrapper" code modules to be the go-between with my current VI).  Breaking communication would cause most of the test results to become invalid.  For these reasons, I had chosen to call the VI as a code module in a sub sequence so that it can be run asynchronously, outside of the main sequence.
Now, as I learn more about the details of TestStand, I am introduced to the concept of "Process Models".  I had initially been using the default Sequential Process model, but would like to know if I should switch to the Parallel Process model.  From what I can tell, the parallel process model is used when testing multiple UUTs, or running tests in parallel.  Is this correct?  To clarify my situation, I will only be testing 1 UUT, I will only be using 1 code module, and I will be running several test steps with that 1 code module.  I will need to continually pass data back and forth with the code module as it runs in parallel to the main sequence, and there will likely be several sub sequences called during the process, so that I can maintain modularity with my testing.
So the question is, do I switch to the Parallel Process Model, or should I continue with the Sequential Process Model and the asynchronous sequence to run my code module in parallel?  Thanks much.
GSinMN          
Solved!
Go to Solution.

Hey GSinMN,
Are you wanting to run your test steps in parallel with each other, or will that need to be a sequential process? The Parallel model is probably not the right choice for this application. The purpose of the Parallel model is to run the same test program on multiple UUT's at once, as you mentioned. Since you are just testing with a single UUT, the best approach would be to run the emulator communication module asynchronously, as you mentioned. You can easily pass data to this code module using a TestStand queue or a similar synchronization object.
Daniel E.
TestStand Product Support Engineer
National Instruments

Similar Messages

  • How do I automate parallel process model?

    Hello,
    I need to modify parallel process model so it runs in automated mode. The serial number will come from a serial bar code reader and the operator does not have to press OK on the operator screen. How can I do it?
    Thanks
    CT.

    Either you can write your own preUUT callback sequence or you can modify modelsupport2.dll which provides the standard serialnumber input panel. You can find the source code for modelsupport2.dll in <teststand directory>/Components\Models\TestStandModels.

  • Parallel Process Model Entry

    Hello,
    First, using LabVIEW 2011 and TestStand 2010 SP1.
    We have a custum GUI setup to use the sequential model.  At the heart of it, when we hit start, it accesses the Single Pass entry point and runs it with some modifications we've made.  Now, we'd like to have a setup that can test multiple DUTs and use the Parallel Process Model.  I'd like to have our GUI basically perform the same functions as the built in popup when running the TestUUTs entry point.  I've seen the PreUUT callback where you can disable the built in popup.  But what I can't seem to figure out is how to initiate a test socket test because it doesn't seem to line up with an entry point necessarily.
    When they push the start button next to DUT 0, I want to start socket 0.  And if they hit the start button next to DUT 1, I want to start socket 1.  What entry point does the GUI use to make this happen?  Does the GUI need to start an entry point (IE Test UUTs) then send more information later to start a test?  if so, where does TestStand wait for that information within the parallel process model?
    Thanks.

    One way you could do it is as follows:
    Still override PreUUT like in the example and add code which posts a UIMessage synchronously to the UI and then waits for a persocket notification (e.g. you can use the socket index as part of the name to make a per socket notification). Then in your UI, handle the UIMessageEvent on the ApplicationMgr. When you get the UIMessage from your PreUUT you will know it's ready and you can then update your UI to enable the start button, and when the user presses it, you can then Set() the notification to tell the testsocket thread to continue.
    for example, in preuut:
    Create Notification "MyUIStartNotification Socket 1"
    Thread.PostUIMessage(UIMsg_UserMessageBase + 1, RunState.TestSockets.MyIndex, "MyUIStartNotification Socket 1", null, true)
    Wait on Notification "MyUIStartNotification Socket 1"
    In your UI
    Handle UIMsg_UserMessageBase + 1
    Enable Start Button
    When start button pushed, Set Notification that corresponds to that socket. Pass any data needed with the notification, for example, create a container that contains a serialnumber property and a continuetesting property and pass that with the Set operation. In your PreUUT code get that data from the notification and update your parameters.
    Not simple, but doable.
    -Doug

  • How to add process model results to the sequence file results?

    After my sequence file runs, I would like to add some additional results using the process model. I need to log my equipment list which is obtained by the process model. Alternatively, I could add a sub-sequence to the end of each of my sequence files for doing this, but that would create maintenance problems if I ever needed to change the way equipment is logged. Does anyone know a way to (1) append process model results to the sequence file results or (2) force each client sequence file to call a sub-sequence before returning to the process model.

    Mark -
    The report and database process model routines expect a single subsequence step result that invoked MainSequence. This result contains the results from the sequence call.
    In TestStand after the process model root sequence call to MainSequence is performed, the property Locals.ResultList[0] is the MainSequence result. The subproperty Locals.ResultList[0].TS.SequenceCall.ResultList contains the results from the steps in MainSequence.
    One option is to create a subsequence call in the process model that logs the equipment info in the results for its steps. The call to the subsequence should not be checked to record results.
    This subsequence would have a parameter called ResultList. The Result type does not exist in the Insert menu, so you can only create the parameter by copying the empty Locals.ResultList and pasting it in the parameters. Then change its type from By Value to By Reference.
    In the setup of the subsequence, add the following steps which do not record results. These steps rename the Locals.ResultList parameter to ResultListOrig, and then create a new Locals.ResultList alias property that really references Parameters.ResultList. This way any additions to the Locals.ResultList really append to the Parameter.ResultList.
    Setup
    Step: "Rename Locals.ResultList"
    StepType, Adapter: Action, Active-X
    Description:
    Action, Set PropertyObject.Name = "ResultListORIG"
    Record Results: False
    Step: "Create Alias in Locals"
    StepType, Adapter: Actioin, Active-X
    Description:
    Action, Call PropertyObject.SetPropertyObject ("ResultList",
    0x201 ' Not Owning and Create, Parameters.ResultList)
    Record Results: False
    In the Main steps, you add your equipment info steps which record results.
    In the Cleanup steps you undo the steps performed in Setup.
    Cleanup
    Step: "Delete Alias in Locals"
    StepType, Adapter: Action, Active-X
    Description:
    Action, Call PropertyObject.DeleteSubProperty ("ResultList",
    0x400 ' Refer to Alias)
    Record Results: False
    Step: "Rename Locals.ResultListORIG"
    StepType, Adapter: Action, Active-X
    Description:
    Action, Set PropertyObject.Name = "ResultList"
    Record Results: False
    I have attached a TS 2.0 version of SequentialModel.Seq that has a AppendResults subsequence in it and this is invoked after MainSequence in Single Pass entry point.
    Hope this helps...
    Scott Richardson (NI)
    Scott Richardson
    National Instruments
    Attachments:
    SequentialModel.Seq ‏174 KB

  • Some Executions Are Not Terminated by Using Terminate All in Parallel Process Model

    Hi,
    This issue confued me recently, I'd like to use a parallel model process, and to terminate all execution at once.
    If there's some action steps in the sequence, it seemed all execution will be terminated.
    However, I put a wait function instead of action steps, there are some executions not terminated while I pressed the Terminate All button in the toolbar.
    Hope someone can give me some help. Thanks a lot.
    ps. the number of testsockets is set to 9 in my teststand.
    Solved!
    Go to Solution.
    Attachments:
    Terminate_Test.seq ‏7 KB

    Hi, Ting,
    Thanks for your help.
    I'd like to add some additional remarks,
    What I'd like to know is what cause the termination unstable in such a situation.
    The timing seemed to play an important role, but it is not my orignal concern.
    I used the testsocket of the last one to send the TerminateAll() command, but the choise is an accident...
    Originally I take the first testsocket to send TerminateAll() command, it works "well".
    I've notice the terminating action is always done in the reverse order of the testsocket(i,e, from the last testsocket to the first one),
    it seemed to make each testsocket go to cleanup and then not allow the testsocket continue.
    If we trace the executions more detailedly, it can be found the executions not terminated are actually received the command of the TerminateAll().
    They went to cleanup, and waited for the following "not continue" procedure, but somehow it missed so that they survived to repeat the execution.
    This consquence is a little like the termination is terminated...(not tongue twister...XD)
    If my postulation is true, it is safe to put the TerminateAll() command to the first testsocket so that the latter executions will be terminated before the first one terminated.
    If I put it to the latter testsocket or the last one, the termination will be terminated and some executions will revive.
    If I skip the wait function in the cleanup, the situation is not optimistic as my thought, the last testsocket will revive itself and back to the terminate command to send it again so that it makes me feel that it is better if I skipped the wait function.
    The above is my unconfirmed idea, maybe it totally wrong, if someone can correct my understanding I would be greatly appreciated.
    BTW, it is really special case, so we can take it easy, hope this will not add your loading and we can discuss freely as an amateur

  • 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

  • Runtime error in process model and sequence still passes

    I am doing some custom initialization in the process model (in the ProcessSetup callback). I call a .NET module that may throw an exception under certain error conditions. This causes the the process model to jump to the Cleanup section of the process model (not the client sequence file cleanup) and that's okay. The problem I have is that in my UI I am getting the AxAppMgr_ExecutionEnded event and the e argument's exec.ResultStatus property indicates "Passed". I want it to indicate "Error" or "Incomplete" or something other than passed. The client sequence never ran at all. While it had no failures, it could not have passed.
    How do I force the status to be "Error" or something other than "Passed"?
    Solved!
    Go to Solution.

    Ryan,
    I am just getting back to this. Thanks for the response.
    I have my own sequence that gets called from ProcessSetup in the process model. That sequence sets up some station global variables for me including some Object References. One of the object references is a .NET object used to read a file. If that file does not exist, then the .NET object throws an exception which results in TestStand presenting a dialog with the error message and options about what to do next. I don't want our technicians getting that dialog box so I changed the Station Options to "Run Cleanup" on Run-time error. 
    The process model jumps to its Cleanup section when the run-time error is received. 
    Does that give you the information you need?
    Incidentally, I am able to look at the e.exec.ErrorObject in the AxAppMgr_EndExecution event handler and I can see the error as suggested by Doug above.
    Thanks.

  • How to load the sequence file from the process model?

    Does anyone have an example process model that loads a sequence file? The out-of-the-box process models assume the sequence file is already loaded. I want the process model to identify the UUT type and load the appropriate sequence file based on that.

    Mark,
    A better solution to your question can be accomplised if you have TestStand 2.0.
    Within the entry point of a process modle you can set the client sequence using Execution.ClientFile(). This is a new method of TestStand 2.0. It was specifically designed so that you could dynamically set the client sequence within the process model.
    Currently the entry points in the default process models (i.e. Test UUTs and Single Pass) are configured to Show Entry Point When Client File Window is Active. This means that you must open and have active a client sequence file before you can execute one of the entry point. You probably do not want this implementation if you are going to set the client file during the entry point execution. To change this you will need to go the sequence properties of your entry point (while the sequence is open select Edit>>Sequence Properties), switch to the Model tab of the entry point's property dialog box, and enable Show Entry Point For All Windows. The entry point will then appear whether or not you have an open sequence file active.
    You will need to add at least 3 steps to your entry point sequence that all use the ActiveX Automation Adapter. Remember that MUST disable Record Results for any step you add to the process model. The 3 steps will perform the following tasks:
    1) Obtains a sequence file reference of the file that you want to be the client sequence file. You will need to use the Engine.GetSequenceFileEx method. You will need a local variable (ActiveX data type) in which to store the sequence file reference.
    2) Set the client sequence file using the Execution.ClientFile property.
    3) Close the reference to the client sequence file in the Cleanup step group of your entry point sequence using Engine.ReleaseSequenceFileEx
    I am attaching a SequenceModel.seq file (the default process model in TestStand 2.0) in which we have modified the TestUUTs entry point as described above.
    Note that you'll be prompted to enter the path to your client sequence file. This is a message popup that you can delete and it was added for your review only.
    Good luck in your project,
    Azucena Perez
    National Instruments
    Attachments:
    sequentialmodel.seq ‏164 KB

  • Getdescrip​tionex not working in parallel proces model

    Hi All,
              In parallel process model, I would like to get the description of the called step. So I make use of the function Runstate.CallingStep.GetDescriptionEx(0) in the ProcessModelPostStep sequence. TestStand is getting hanged once the control reaches that particular step. I used the same function in the Sequential Process model I didn't face any problem over there.
    How shall I get the description of the client sequence Step? Is there any alternative way..?
    Thanks
    Arun Prasath E G

    Hi Arun,
    When you modify the ProcessModelPostStep (or any other ProcessModel... callback), it only affects the particular Process Model that you modify the callback on.
    Did you add the custom step to the callbacks of both the ParallelModel.seq and the SequentialModel.seq files? You might have just modified the Sequential Model and not the Parallel Model.
    Also, another option you might want to persue (based on what you are trying to accomplish) would be to simply use the Sequence File callback, SequenceFilePostStep. This will affect all the process models, but only for a single sequence file.
    Here is an article that discusses the differences:
    KnowledgeBase 2LT9BI6E: What is the Difference Between Using a "SequenceFile..." callback and a "Pro...
    Jervin Justin
    NI TestStand Product Manager

  • Reversal Process Model using PUOCBA

    Hi Guys,
    There is a requirement in our Co. to set up a reversal process model using PUOCBA.
    As far as i know, it is a pretty standard process and we need to copy standard process model SAPUSOCV and create our own and use the same in PUOCBA selecting the reversal option.
    I am doing my every steps correctly, but some how in table T52OCG the Processing type field is not converted to 'V' which is necessay for reversal and it does not allow me to do reversal.
    Kindly brief me on the same , if you have face the same kind of problem or have worked on it.
    Regards,
    Ketal Parikh.
    1-847-330-4127

    Hi Jim,
    So this is my understanding. You have two different sequence files that are run for two different Test Environments. These two environments uses two different data structures to perform some initialization on two different instruments.
    The best way to do so without any modification to the sequential process model is to create Sequence File Globals. So lets say that you have test sequence 1 and test Sequence 2. The two data structures will be DataStruct 1 and DataStruct 2. So open your Test sequence 1 in the sequence editor. From the "View" drop down box on the sequence editor, select "Sequence File Types" and create your DataStruct 1 here. Similarly do that same for Test Sequence 2, create DataStruct2.
    Now use the ProcessSetup and ProcessCleanup callback. Again you shouldn't modify your process model. Go to Edit Menu >> Sequence File Callbacks. Select your callbacks and click add. This will automatically add your callbacks to your Test Sequence files. Now you can add the code relevant to your instruments here and you have access to your datastructure as well. The beauty with callbacks is, you can override the ones in your process model by the ones in your sequence files. This is automatically done, when you place the callback in your sequence file. Now we have accomplished what you wanted to do without a single modification to your process model.
    I hope this helps
    Sijin Karayil
    National Instruments

  • How to model a parallel process in BPML

    I've just started using BPML to model a process for CAF. In the process, there will be a block of steps that will have to be repeated for a list of employees, in parallel.
    I want to model the parallel process in a BPML diagram; I've had a look through some introductory texts, but cannot see a way that I can represent a parallel process. Also, the exact number and identity of the employees is unknown at run time.
    Can anybody help with this?

    Hello Arun,
    I am using Microsoft Visio with a BPMN stencil:
    http://www.workflow-research.de/Downloads/BPMN/Frapu-BPMN_Template(v1.1).zip
    I am using it in accordance with the SAP white paper "Guidelines for Specifying Composite Applications.pdf"
    Tony.

  • How to release process model sequence file object?

    Calling engine's method GetStationModelSequenceFile we get the reference to the process model sequence file object. According to TestStand Help, you should "Release this reference when you are done using it." The question is: how do you release it? Call engine's method ReleaseSequenceFileEx passing the reference to the model sequence file gotten from GetStationModelSequenceFile won't work, it returns FALSE which means the sequence file can't be released. Similar problems exist with methods SequenceFile.GetModelSequenceFile, Execution.GetModelSequenceFile. My aplication is written in VB. Using the statement like
    Set modelSequenceFile = Nothing also does not solve the problem.  I want to get some information of process model, such as version number, so I call those API functions in my code, which was developed under TestStand 3.1. I post this question because when I ran my application with TestStand 3.5 or 4.0 beta, I got the warning dialog when loading a sequence file and then closing the application. The dialog listed all the unreleased objects which I figured out is due to that the process model file was not released. Because message in the dialog is as following:
    The following top-level objects were not released:
            Sequences [1 object(s) not released]
                Sequence #1:
                    Name: Test UUTs
            Type Definitions [43 object(s) not released]
                Type Definition #1:
                    Name: TimeDetails
                Type Definition #2:
                    Name: ReportOptions
    Of course there are more in the list, but the sequence file loaded into the application is released correctly by calling engine's method ReleaseSequenceFileEx, so it does not appear in the list.
    Any help will be greatly appreciated.

    Here are what I did after launch the operator interface:
    1) Call Engine.GetSequenceFileEx to get a reference to a sequence file.
    2) Display steps of MainSequence of the sequence file in GUI.
    3) Call Engine.GetStationModelSequenceFile to get a reference to the station process model sequence file. The variable used to save the reference of process model sequence file is modelSequenceFile.
    4) Loop through all the sequences in process model sequence file, get the references of entrypoint sequences in the process model and put them in a container (VB Collection).
    At this point,
    Calling modelSequenceFile.CanUnload returns TRUE
    Calling modelSequenceFile.IsExecuting returns FALSE
    Calling Engine.ReleaseSequenceFileEx(modelSequenceFile, ReleaseSeqFile_UnloadFile) returns FALSE
    There is no other loaded process model sequence file reference at this point.

  • Getting sequence filename and sequence name in process model error handler

    We are using the sequential process model and would like to log sequence step error information to a file.  We have an Error Handler callback in SequentialModel.seq and that is where we will write to the error file.  In the Error Handler callback, I can get the error container info for the step where the error occurs and the name of the that step thru the Error Handler Step parameter.  I would also like to record the sequence file and the sequence where the error occurred, but I have not been able to find those in the sequence context.  I know they are available because the TestStand RunTime Error dialog box displays them.  How can I access the name of the sequence file and the name of the sequence where the error occurred?
    Thanks,
    Hans

    Hey hans,
    Use the API.  Since you already have the Step object reference coming in as a parameter you can just use a few ActiveX steps to get the Sequence File and Sequence from which the error was thrown.
    Step.Sequence
    Sequence.Name (gets the name of the sequence)
    Sequence.SequenceFile
    SequenceFile.Path (gets the path of the sequence file)
    So basically just 4 activex steps.  I hope this helps.
    Regards,
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • How do I make a process model sequence (not entry point) available to the test sequence?

    I have sequences that update process model data in the process model sequence that I would like to make public so that I can call this sequence from the test sequence.
    I am using TS2.
    I know that I could insert a sequence call and when specifying the module simply select the process model sequence file. Is there a more direct way of specifying the process model sequence file? Can I hide sequences in the process model so that they can't be called by the test sequence?Message Edited by Francey on 05-19-2005 06:38 AM

    When creating a custom step type, you can check "Designate an adapter", and use the Sequence Call adapter. If you would like to make the user unable to change this property, you can disable the "Can Specify Module" property on the "Disable Properties" page.
    Warning: If you ever want to change the parameters or the sequence call you are making for all steps, you must load ALL of the sequences that use this step, check the "apply changes in this dialog to all loaded steps of this type" box when you make the changes. This means that you should be very careful to make sure you have your step type designed properly before you begin using instances of it. The reason this is the case, is that the module is a property for each instance of the step, rather than the step type. We are simply giving a default value. By disabling the specify module dialog, we are preventing the user from being able to change from the default.
    Allen P
    NI

  • Running a sequence with 2 process models

    Hi,
    We intend to use 2 different process models, running the same MainSequence.  The reason for the difference in process models is there is large difference in hardware on the stations.  So we need to account for that difference in our mainsequence as well, where we do certain actions when using one process model, and a different action on another.
    My question is, what is the preferred property to look at in memory (runstate tree somewhere?) for the MainSequence to have knowledge of what process model it is currently running, so we can add cases in our MainSequence to differentiate actions. 
    Thanks
    Solved!
    Go to Solution.

    James' approach is better....
    Because then you don't have to worry about if your root is correct.
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

Maybe you are looking for

  • ACR Raw images wont copy to Jpeg or Tiff; as it fails with "Cannot Create File"

    Requesting immediate help if anyone available currently I've been using Photoshop CS6 for several years, never a problem at all. As soon as I bought Creative Cloud, I see many issues that cannot be resolved or are recurring. Again today as I go to co

  • Inactive Sender Communication Channel still processing Files?

    We de-activated the Sender Communication Channel of an interface. However, the file adapter keeps processing?    Anybody know what is going on?                 Thank-You.

  • Files with same file name in IFS

    Hi, Does anyone know if, as IFS uses a "reference model files system", it is possible to store in the database 2 files with the same name (I'm talking to unfoldered files, but I suppose it will be the same for foldered files). If yes, how can I make

  • Back Up Mail Server

    Hi, Is it possible to set up a back up mail server to receive mail when the primary mail server is down and then once the main server is up then deliver the mail to the user. Thanks , Luke

  • Multiple schemas assigned to a workspace

    I'm trying to write an app that accesses other schemas besides the apex user I'm using. I can't figure out how to assign more than one schema to a workspace. All help is sincerely appreciated Rich