Modal message popup hangs parallel model in Teststand 4?

Hi:
I'm having a problem using the 'Make Modal' option on message popups. It is hanging the user interface.
Here is what I've done:
* created a sequence with just a message popup in it (using Teststand 4.0 editor)
* set the popup to be modal
* set the sequence to use the parallel model
* recompiled Full Featured CVI User interface for teststand 4.0 (using CVI 8.0.1)
* run sequence in the recompiled user interface
* popup is displayed
* after acknowledging the popup, the popup and the user interface freeze
If I change the sequence to use the batch model, everything works.
If I don't recompile the user interface project that came with Teststand and just run the exe, everything works.
What am I missing? Sequence file attached.
Thanks,
Dave
Attachments:
modalpopup.seq ‏6 KB

Hi dseel,
After I copied over your version of modelsupport2.dll, I see the attached error message for every test socket, basically saying that TestStand can't find a certain function in modelsupport2.dll.
What modifications did you make to the dll?
One thing though, I notice the same error message even with the Simple OI... Where are you putting modelsupport2.dll? In the same folder as the CVI Executable, or in <TestStand>\Components\NI\Models\TestStandModels?
Jervin Justin
NI TestStand Product Manager
Attachments:
TSErrorMessage.jpg ‏56 KB

Similar Messages

  • Modal message popup is causing TestStand ActiveX error

    When I execute a modal Message Popup step, I get the following error:
    ActiveX Error
    sCode = 0xffffbba4
    Source: TSAPI
    Description: Could not connect to TestStands TSSync server.
    If the Message Popup is not modal, the sequence executes just fine.
    I am making the Message Popup modal by selecting the "Make Modal" option.

    There is a call to TS_StartModalDialogEx function in the \API\CVI\tsutil.c file which in turn calls into the engine. The engine needs the sync server to implement the modality. I would assume that the file \bin\TSSync.dll is missing or not registered. You can register the dll by running "regsvr32.exe \bin\TSSync.dll". See if this fixes your problem.
    Scott Richardson
    National Instruments

  • What is the best way to open close and pass instrument handles from labview in teststand parallel model?

    I have a number of test systems that use a parallel model with labview. We have a good number of instruments(PXI).
    What is the prefered method for open,closing and passing instrument handles in teststand using labview? 
    Solved!
    Go to Solution.

    Hi,
    No, Below is a bit from the Session Manager Help
    Currently, Session Manager supports the following instrument session types:
    IVI Sessions—Use an IVI session to obtain the C-based instance handle for an IVI logical or virtual instrument name. NI Session Manager does not support IVI-COM drivers at this time. When IVI-COM drivers are available, you can use an IVI session to obtain an ActiveX interface reference to an IVI-COM driver.
    VXIplug&play Sessions—Use a VXIplug&play session to obtain a C-based instance handle for a VXIplug&play logical or virtual instrument name. Configure VXIplug&play names in the <VXIplug&play directory>\<Platform directory>\NISessionMgr.ini file.
    VISA Sessions—Use a VISA instrument session to obtain a C-based viSession handle to a VISA resource or logical name. Configure VISA logical names in the <VXIplug&play directory>\<Platform directory>\NISessionMgr.ini file.
    Custom Sessions—Use a custom session to create a data container object that shares ActiveX objects you create or other data between software components you write. Use the Attach and Get methods to attach data to and retrieve data from a session. A custom session does not initialize, close, or own an instrument handle. The data you share with a custom session does not have to be instrumentation related. You can create a custom session with any name you request.
    Regards
    Ray Farmer
    Regards
    Ray Farmer

  • SequenceFileUnload in TestStand 4.0 Parallel Model

    Has anyone experienced a problem when updating to TestStand 4.0 with the SequenceFileLoad and SequenceFileUnload callbacks?  I’m using the parallel process model configured for 8 threads and in earlier versions of TestStand have had no problems placing my hardware initialization steps in the SequenceFileLoad callback and the cleanup steps that release hardware references, in the SequenceFileUnload.   It seems very random that sometimes when I close my sequence, the Unload steps are executed.  Sometimes they only run if I select File->Unload All Modules or close TestStand. 
    Is there a flag in TestStand that I can use to trigger the Unload steps or possibly a better place in the parallel model to place my hardware cleanup?  I don’t want to release and have to reinitialize hardware references with each loop so any cleanup steps will need to be done once after all parallel threads are finished.

    Most of the time people do this in the Process Setup Callback and Process Cleanup Callback.  Those are process model callbacks that you can override from your client sequence.  They are probably better to use than the engine callbacks (SequenceFileUnload and SequenceFileLoad).  They get executed before and after the looping respectively.
    If you open the process model you'll see where they get called.  Process Setup Callback is in the Setup step group and Process Cleanup Callback is in the Cleanup step group.
    Regards,
    jigg
    CTA, CLA
    teststandhelp.com
    ~Will work for kudos and/or BBQ~

  • Can't edit the Message Popup in TestStand 3.5

    I'm using TestStand 3.5/Labview 8, and when I inserted a Message Popup in my sequence, I found that I'm unable to edit it.
    I started with a new sequence file, right click->Insert Step->Message Popup, then right clicked the message popup and select Edit Message Settings.  I then get the following error (see err1.jpg attachment for actual error popup):
         SeqEdit.exe
         Error in call to LoadPanelEx.
         Parent Panel Handle: 1
         UIR File Name: editmsg.uir
         Panel Resource ID: 1
         hInstance: 0x597F0000, D:\...\TestStand 3.5\Components\NI\StepTypes\MsgBox\msgbox.dll
         Error Code: -143
         ActiveX control error
    Then when I click OK in that error I get another error (see err2.jpg attachment for actual error popup):
    Sequence Editor
    Program Error.
    Error Code: -17001
    I verified that the msgbox.dll file exists, and from reading some posts on the forum thought it wasn't properly registered.  When I tried to register it using regsvr32 I got the following message:  "msgbox.dll was loaded, but the DllRegisterServer entry point was not found.  This file can not be registered."  See err3.jpg attachement for actual error popup.
    Any ideas what is going on here and what I need to do to correct it?
    Thanks,
    -Bill
    Attachments:
    err3.JPG ‏15 KB
    err1.JPG ‏20 KB
    err2.JPG ‏11 KB

    Unfortunately that didn't work.  I went to Start->Programs->National Instruments->TestStand 3.5->Operator Interfaces->LabWindows-CVI and got the following error message:
    Test Executive
    Error in call to LoadPanelEx
       Parent Panel Handle: 0
       UIR File Name: TestExec.uir
       Panel Resource ID: 4
       Hinstance: 0x00400000, D:\...\OperatorInterfaces\NI\Full-Featured\CVI\TestExec.exe
    Error Code: -143
    Active X control error
    The actual error window is attached.  Looks like my installation has other problems?  With the way our IT department operates, if there is a way to fix this without reinstalling, that would really be helpful... :-)
    Attachments:
    err4.JPG ‏20 KB

  • Message Popup crashes TestStand

    Hello,
    Our sequence executes under TestStand 3.5 ; steps call dlls written with LabWindows/CVI 7.1.1.
    Everything is going fine except some calls to the "Message Popup" step
    of TestStand : sometimes TestStand crashes on such calls (we have to
    stop it from Windows Task Manager). We have several "Message Popup" to
    display during the sequence execution and we have noticed that the
    application does not systematically crash on the same Message Popup
    step.
    The target computer is a PIV 3.2 HT with 1Gb RAM.
    Does anybody have the same problem ?

    Hi,
    We have installed CVI8.0.0.273 runtime engine and we still have crashes on some Message Popups in SeqEdit.
    Here is a short description of the system : we have a PXI 1000B chassis connected to the computer with a PCI and a PXI MXI-3 (software v1.15).
    PXI cards : 2 PXI CAN 8461/2 (one dedicated to DiagOnCAN and the other one for CAN), 1 PXI 6070E, 1 PXI 6713, 1 PXI 6704, 1 PXI GPIB. We also have 2 PCI cards : Addi-Data APCI 2032 which drive the relays of the system. We have installed DAQ-mx 8.0 (DAQ 7.4.0 is also used on the system for an other application, not with TestStand), NI-488.2 2.43 and NI-CAN 2.3.2.
    Our application is multithreaded (3 threads + 1 main thread).
    We have tried several solutions not to use the step "MessagePopup" of TestStand : we have created a specific step calling a CVI dll. In this dll we call the CVI MessagePopup function, but TestStand still crashes. Next we have tried to display a panel (created in a uir file) instead of the Popup but the problem is not solved (we tried several combinations of panel attributes).
    In Windows TaskManager we see that the PIV 3.2GHz HT is never overloaded (CPU load = about 90%) and that there is enough memory available on the system.
    If we try to run a sequence that creates 3 threads which process nothing (infinite loops), with no signals / CAN / instruments processing, we can't reproduce the crash caused by the Popups.
    Do you have any suggestion about that ?

  • TestStand 2.0でMessage popupに日本語を表示する方法について

    いつもお世話様です。 TestStand Ver.2.0(English)で、Message Popup欄に日本語でのメッセージを表示する方法をご教授ください。 以前のW2Kでのシステムでは表示可能だったのですが、PCをW-XPへGrade upした際に表示できなくなりました(文字化け)。 よろしくお願いいたします。 

    この件はPCの言語設定により解決いたしました。  今後ともよろしくお願いいたします。  skktomi

  • Deal with teststand message popup

    when I add a message popup in my sequence,I need two button: Ok(button1) and Cancel(Button2).and set timeout.
    My question is like this; I need get the status when execute,if uesr click ok,the sequence should go to next step,the other stauts,the sequence should abort executing.
    example:
    Message Popup
    if(RunState.Sequence.Main["Message Popup"].Button1Label=="OK")
       call sequence   //this action need execute when click "OK"
    else
       break        //this is a action ,without any connection of message popup
    end
    but no matter what button I click ,the sequence always execute break,that's means the if condition can't get the status of message,where is my error.
    any one help me ,thanks very much

    duplicate post see the following link
    http://forums.ni.com/ni/board/message?board.id=330&message.id=21602&jump=true
    Regards
    Ray Farmer

  • How do I prevent reporting Button Index line of Message Popup Result in TestStand report??

    My Message Popup is reported as:
       Verify that the Installed memory (RAM) is 1.96 GB: Passed
            Button Index:             1
    What is the best way to prevent reporting the Button Index line?

    For your step in the sequence open Step.Result in Variables pane, right click on ButtonHit, select Advanced>Edit Flags and uncheck "Include in Report" property. It is checked by default for custom step types created as combined types with the Message Popup general type.
    That should be done for all instances of these step. When I tried just to incheck the "Include in Report" property in my step type, somehow it is still checked for all newly created steps of this step type. Possible solutions (besides changing them all manually as I described above) are to modify them at drop time from OnNewStep custom substep or to create automated script and run it on your sequences after creation to modify the flag.
    Let me know if you need help with these solutions.
    Sergey Kolbunov
    CLA, CTD

  • Loop counter reset in parallel model ?

    Hello,
    i am using TestStand 3.1 with parallel model. There is a loop counter for each UUT in RunState.Root.Parameters.TestSocket.UUT.UUTLoopIndex. This increases with every loop that is done.
    Now my problem is: If i start the NextUUT, this counter is not set to 0. It just increases.
    Is there a different counter that i can use ? Or where can i get the information that the NextUUT button is pressed so that i can reset the counter manually ? Or is there another solution.
    Thanks for Help.

    Hi,
    I don't completely understand, why you want to reset the UUTLoopIndex, because it shows the number of iterations per test socket to check how many uut's have been tested on each. However, you could reset the value with a simple statement before you start the tests. You could do this in the setup step group, e.g. with RunState.Root.Parameters.TestSocket.UUT.UUTLoopIndex = 0. You could add a message popup or evaluate an extra condition or so.
    Kind regards,
    Philippe Goetz,
    Applications Engineer, National Instruments

  • How to open a message popup and keep the sequence running ?

    I have some steps in my sequence to initialize communication ports that takes a few seconds. As i have the trace off i want to display a message popup to tell the user that the sequence is doing the init. After the init steps are done i want to close the popup out of the sequence without pressing any button.
    Is there a possibility in TestStand to do this ?
    The normal Message popup stays until a key is pressed and even pauses the sequence while active.
    Thank for help.

    You could call your message popup in a subsequence as new execution and terminate this execution programmatically after your init steps have finished.
    In order to do this you have to specify (module) the sequence call step that calls your subsequence:
    -Multithreading and Remote Execution = Run in a New Execution
    -Settings: Initally Hidden and Tracing disable, Restartable, Close Window when done, Wait for Execution to complete: Do not wait, Process Model Option: Do not use a Process Model
    -Store an Object Reference to the New Execution in: e.g. Locals.ExecutionRef
    After your Init steps you insert a ActvieX/COM Action Step that terminates the new execution:
    -Object Reference: Locals.ExecutionRef
    -Automation Server: NI TestStand API 3.1
    -Object Class: Execution
    -Call Method or Access Property: Call Method
    -Method: Terminate
    This will terminate your new execution showing the message popup.

  • Creating a custom UUT dialog for the parallel model

    Hello,
    I am attempting to customize the parallel process model in order to (amongst other things) present a different UUT info dialog.  (The default one defined in modelsupport2.dll only presents a single "Serial number" field where I need numerous other ones.)  Because I am not familiar with CVI (and don't have the development tools for it), I was hoping to create an ActiveX DLL in Visual Basic, or a .NET assembly to manage a slightly more complex version of the UUT info dialog...  While I am sure it would be great fun to fumble with all the complexities of this until it shows some semblance of proper functionality I am hoping there may be some resources available online that would demonstrate how one would go about doing this kind of thing.  I've seen LabVIEW code that provides a different UUT dialog, but it was based on the sequential model which circumvents the most complex issues such as synchronizing the dialog with the TestStand threads, etc.  Any pointers would be greatly appreciated.
    Thanks!

    I am just posting this in case anyone else runs into the same sort of requirement.  The attached zip file contains the source for a .NET assembly that is the beginnings of a VB .NET replacement for the parallel UUT dialog of the modelsupport2 DLL.  I don't want to write an epic here, so the general idea is that the parallel model sequence is modified to make calls into this assembly instead of the modelsupport2.dll component.  But you can't just disable the dialog by setting the ShowUUTDlg boolean to false - that will completely remove the consumer loop in the ProcessDialogRequests sequence which the .NET assembly is trying to send requests to.  I've attached the modified ParallelModel.seq in case anyone's interested.
    Note that there are still significant problems with this and it is provided as-is.  In particular, if you attempt to break and step through the parallel model sequence after the dialog has been initialized, you will not be able to continue - the main thread will hang until you restart TestStand.  With a little more thread mgmt, that could be fixed.  If nothing else, it is useful code to look at if you need to enqueue items from a .NET assembly into a queue defined in a TestStand sequence.
    If you can afford to use the existing dialog as-is, and then add additional info gathering to the main sequence, that is clearly easier.  (That will be OK for my purposes so that is what I'll do.)  However, if you need to have one custom dialog that manages everything in the parallel model, this is the kind of code you should expect to need.
    Hopefully that helps somebody.  There is not much info out there about integrating .NET at this level.
    Attachments:
    CustomUUTDialog.zip ‏117 KB
    ParallelModel.seq ‏430 KB

  • Replacing the default Parallel model UUT Dialog

    What is the best way to replace the default UUT Dialog for the parallel model? I don't want to modify the default parallel model, but use the callback options in my sequence to replace the default UUT dialog.
    Things already tried:
    1) Generated a UIR to replace the default UUT dialog.
    2) Placed an action to call the new dialog into the PreUUT callback.
    3) Created a statement function that change the status to display the default UUT Dialog and place into the ModelOption callback.
    This replaced Default UUT Dialog with the new UUT dialog. But the new UUT Dialog panel shows up in four different panel, one for each of the four socket being executed.
    The goal is to have the new UUT Dialog appear only once to handle all 4 sockets. The default parallel model initialize the default UUT dialog panel then uses display panel to view UUT dialog. Is there a different method to have the new UUT Dialog panel appear only once for all four socket inputs and not multiple times?

    There is an example for this under the directory:
    <TestStand>\Examples\ProcessModels\ParallelModel
    Edited: Just realized that what you asked is a bit different than the example.
    I recommend you try one of 2 possibilities:
    1) In addition to disabling the old dialog as shown in the example,
    override the ProcessSetup and ProcessCleanup model callbacks and add
    your code to display and remove your dialog there (you should probably use a "new thread" sequence call when displaying the dialog so that it has its own thread for message processing). Then also override
    the preuut callback and add code to communicate with your dialog in
    some way to pass and return the necessary information for each
    testsocket. This could be a dll call or some other way of doing this communication.
    2) Modify the existing code for the current dialog or implement something similar. The code for the dialog is in the cvi project for modelsupport in the same directory as the process models. If you are going to modify this dll you should copy the Models directory from Components\NI to Components\User and modify the version of it there. The Components\User version will override the version under Components\NI.
    -Doug
    Message Edited by dug9000 on 03-06-2006 10:25 AM

  • Parallel model

     Is there a way to reflect messages from my steps in the Parallel Model Panel ?
    Attachments:
    1.jpg ‏47 KB

    There is no built in functionality that allows you to post messages to the Status area in the Parallel UUT Dialog.  However, if you have CVI then you can modify the ModelSupport2.dll which is where the dialog functions exist.  The ModelSupport2 project can be found in the <TestStand>\Compenents\NI\Models\TestStandModels directory.  The code for the Paralell UUT Dialog is held in the paralleluutdlg.c source file.  If you take a look at the source, there is actually quite a bit going on.  However, it is not too difficult to add a function that hooks into the Status Text controls so that you can post your own messages.  I added the following function to the modelsupport2 project and rebuilt the dll.  This function allows the user to set a custom message that will be displayed in the Status Text for the given TestSocket.  Note that the dlgHandle parameter represents the UUT Dialog panel handle.  The handle is actually stored in the Process Model.  You can access the Dialog Handle using RunState.Root.Parameters.ModelData.DialogHandle from your client Sequence.
    int DLLEXPORT _stdcall PostParallelUUTDialogStatusMessage(int dlgHandle, int testSocketIndex, char *statusMsg)
    {    int error = 0;
        ERRORINFO errorInfo;
        int panelId = dlgHandle;
        int childPanel = -1;
        PUUT_PanelData *panelData = NULL;
        TestSocketData *testSocketData = NULL;
        errChk( GetPanelAttribute (panelId, ATTR_FIRST_CHILD, &childPanel));
        errChk( GetPanelAttribute (panelId, ATTR_CALLBACK_DATA, &panelData));
        testSocketData = &(panelData->testSocketDataArray[testSocketIndex]);
        errChk( ResetTextBox (childPanel, testSocketData->ctrls[kTSCtrl_Status], statusMsg));
        Error:
        return error;
    If you do not have CVI, then I would be happy to post the modified modelsupport2.dll.  The other option is to rewrite the Panel in LabVIEW, which would be a non trivial task.  Please let me know what version of TestStand you are using.
    Thanks,
    Tyler Tigue
    Applications Engineer
    National Instruments

  • A special Rendezvous that works on subsets of processes in the parallel model

    I have a parallel model test that works great on 14 UUTs so far, but now I must write some sequences where the processes have to share hardware two at a time. I need to pair up the processes like (0,1), (2,3), (4,5), etc. and have a Rendezvous operate on them two at a time like this:
    Processes (0,1) operate in parallel.
    Processes (2,3) operate in parallel.
    Processes (4,5) operate in parallel.
    And so on....
    Given enough time, maybe I could write that programmatically in TestStand; but I hope TestStand has a built-in Rendezvous for subsets of processes, or something else to do that. Does such a thing exist?

    bmihura wrote:
    OK I tried your pairing up idea with six processes (three seperate Rendezvous, one for each pair), but they all still ran in parallel. I'd like for one pair to execute at a time while locking out the others. This is because my system has two electronic loads (and two of many other things) that the six UUTs must share.
    Ok, then what you proposed before (a separate rendezvous for each pair of threads) is not the correct way to synchronize things. A rendezvous just causes threads to block until the specified number of threads reaches the rendezvous point. You have three independent pairs of threads running in parallel. If that is not what you want, then using rendezvous like this isn't the right approach.
    Please describe in more detail the entire flow of execution you are looking for. At what scope do you want the other threads to be blocked? Do you want each pair of threads to run all tests before any other threads can run? Do you want this only around certain steps? or Group of steps? Also, why do you want the threads to be paired? The most straightforward way I can think of to allocate two of a resource is to not care about which thread is using it, but to only allow two threads at a time, they don't necessarily have to be in pairs or even the same two threads every time. Do you really need the threads to be paired?
    One of the simplest TestStand specific ways to allocate resources is to use the auto-schedule step types. They allow you to define blocks of code which require specific resources and then automatically run those blocks of code when those resources are available. I recommend you read the documentation for these step types and see if that sounds like it will work for you.
    Another relatively simply way to synchronize access to a fixed number of resources among many threads is with a semaphore. A semaphore allows a certain number of threads through at a time, and blocks other threads until one of the ones using the resource release their acquisition of the semaphore. If the resources involved are more complicated though, I think you are better off using the auto-scheduler step types.
    Hope this helps,
    -Doug

Maybe you are looking for