Neosoft Technologies

cancel
Showing results for 
Search instead for 
Did you mean: 

Support Forum: Neosoft DQMH TestStandifier

Solved!
Go to solution

It is a singleton. I created a new DQMH singleton using the latest version of DQMH and generated the TestStandifier outputs. It does now display the running module in the tester as expected. I must have had a problem with the old module I was trying to use. Thank you for the quick response.

0 Kudos
Message 41 of 60
(355 Views)

I have created a TestStand sequence that calls TestStandifier-created sub-sequences for my DQMH module. I am calling Launch Tester in the Setup section and Stop Tester in the Cleanup section. When I do repeated executions of the test sequence, there is a new tester launched in a new thread and old testers are still running in other threads until I close LabVIEW.

 

What is the proper way to launch and close testers? Is there a way to kill the thread of the tester in a cleanup step?

0 Kudos
Message 42 of 60
(351 Views)

Hi Anthony,

 

You should have a stop tester seqeunce call to actually close the tester.

What may happen is that TS is caching the tester and it stays open (but idle) until you unload modules (TS Seq Editor menu -> File -> Unload all modules).

CLA, CTA, LV Champion
View Cyril Gambini's profile on LinkedIn
This post is made under CC BY 4.0 DEED licensing
0 Kudos
Message 43 of 60
(315 Views)

The Stop Tester sequence call does close the tester panel, however, when I run another test and a new tester opens, the new tester does not show the started module or any status updates because there are old testers apparently still executing in the background. I was hoping that Close Tester would have closed the tester completely so that a new tester would work the same as the first one.

0 Kudos
Message 44 of 60
(312 Views)

It is supposed to close it !

The TSifier specifically script a VI which finds the tester and makes use of user32.dll to simulate closing the window (like if a user clicks on the Windows' window red X button). The call is made twice : one to stop the etster, and the second to actually close the window and so making it leaving the memory.

Unless the tester was modified to alter the default behavior, it should work. At least it works on many projects already (ours) and until today nobody reported this kind of behavior.

 

Did you modify the tester default behavior ?

Would you be able to share your code ?

CLA, CTA, LV Champion
View Cyril Gambini's profile on LinkedIn
This post is made under CC BY 4.0 DEED licensing
0 Kudos
Message 45 of 60
(310 Views)

I’ve just started testing TestStandifier. I have a similar set of tools myself, though not as neatly packaged. I’d like to ask if there are plans to release this project on GitHub (or another public repository) to enable collective development and improvements.

 

Additionally, I’m curious about the broader reasoning behind using Round Trips instead of a straightforward Request and Wait for Response approach. Cyril mentioned that the added Broadcast feature makes debugging easier. Could I ask for a comparison with more justification, or perhaps some examples of how this Round Trip broadcast is utilized in sequence within TestStand?

Michał Bieńkowski
CLA, CTA, CPI

  1. Did someone devote their time to help solve your problem? Appreciate it and give kudos.
  2. Problem solved? Accept as a solution so that others can find it faster in the future.
  3. Contribute to the development of TestStand by voting on the TestStand Idea Exchange.
0 Kudos
Message 46 of 60
(120 Views)

Hi Michal !

 

The question of releasing the TSifier as an open-source project will be discussed internally and I'll post a response here.

 

I use Round Trips in TS for one main reason : debugging thanks to the tester.

 

This is particularly useful when your are using Cloneable modules. If, for any reason, your clone ID isn't / cannot be tied to the TestSocketIndex, and you are using a batch or parallel model in TS, it might become difficult to see in the Tester where and when is issued a request.

If you wanted to trace in the tester when a request is done, you'd have to add a Status broadcast in all your MHL states.

Instead of doing this (which is annoying and takes time), I use a round trip. The round trip broacast the reply, so I've got that for free (casted !) in the tester. Then I can format  into string (in the tester only) the answer in order to display that into the Status indicator of the tester.

 

Also, sometimes I modify the Round trip broadcast to embed the request payload AND the reply payload. Sometimes it is difficult to see what were the parameters given from the TS sequence, so I like to trace that in the tester. This way I can see in the tester what was the input of my request and the corresponding reply.

An idea excahnge was posted on the DQMH Idea Exchange forum to have this done automatically when creating a Round trip... who knows, maybe we'll see that feature soon.

CLA, CTA, LV Champion
View Cyril Gambini's profile on LinkedIn
This post is made under CC BY 4.0 DEED licensing
0 Kudos
Message 47 of 60
(110 Views)

So, in the end, you can monitor every interaction with the module in a single place—the tester. Is that correct?

 

One more question: why is the termination monitor "injected" into every request? IMHO, the module API should be designed so that termination monitoring is handled by the request caller (such as SeqEdit). There should be a short request timeout and short MHL cases (just a few seconds at most). This way, the caller (SeqEdit) can decide how to handle a timeout. Since you're adding an RTE callback, you could also include placeholders for timeout handling there.

 

By the way, when creating a module sequence file, you might consider using a sequence file template (with callbacks and similar configurations). This way, when recreating the module sequence file, the tool could prompt you to select a default template or an alternative file—the latter being a version with your modifications already applied. I think this could be a straightforward way to avoid manual adjustments during regeneration (which you mentioned as the only manual step needed when generating again; I saw your presentation 😉).

Michał Bieńkowski
CLA, CTA, CPI

  1. Did someone devote their time to help solve your problem? Appreciate it and give kudos.
  2. Problem solved? Accept as a solution so that others can find it faster in the future.
  3. Contribute to the development of TestStand by voting on the TestStand Idea Exchange.
0 Kudos
Message 48 of 60
(104 Views)

@bienieck  a écrit :

So, in the end, you can monitor every interaction with the module in a single place—the tester. Is that correct?

 


Yes, every round trip in fact. If I explictely don't want to trace my request I would create it as an R&R only.


One more question: why is the termination monitor "injected" into every request? IMHO, the module API should be designed so that termination monitoring is handled by the request caller (such as SeqEdit). There should be a short request timeout and short MHL cases (just a few seconds at most). This way, the caller (SeqEdit) can decide how to handle a timeout. Since you're adding an RTE callback, you could also include placeholders for timeout handling there.


The blocking action is in the request when it is waiting for the response.

If a user decides to modify the timeout for let's say 30sec, then you would have to wait 30sec to actually stop your code module.

Which is not acceptable.

The TSifier is a tool, and I can't control who's doing what with their module. Therefore I add the termination monitor in every request.

If someones designs its module correctly then, yes the termination monitor will be unuseful and the RTE callback will do the job. I think this a more advanced architecture that would not be understandable by everyone. Also, sometimes you 'cannot' make a MHL to be fast : I've seen instruments taking several dozens of second to actually return a value for example...


By the way, when creating a module sequence file, you might consider using a sequence file template (with callbacks and similar configurations). This way, when recreating the module sequence file, the tool could prompt you to select a default template or an alternative file—the latter being a version with your modifications already applied. I think this could be a straightforward way to avoid manual adjustments during regeneration (which you mentioned as the only manual step needed when generating again; I saw your presentation 😉).


Very good idea !

Maybe in the next version of the TSifier ?! Who knows ! 😉

CLA, CTA, LV Champion
View Cyril Gambini's profile on LinkedIn
This post is made under CC BY 4.0 DEED licensing
0 Kudos
Message 49 of 60
(99 Views)

Hello to all, first thanks for that gereat tool and your effort 🤓

 

I have a DQMH Module which I want to use in TestStand as Sequence and also as LabVIEW Module for LabVIEW applications.

So far I created for my DQMH LabVIEW Module a PPL which I manualy integredet in a TestStand Sequence and used it for my LabVIEW Applications too. If I understand it right I can't use the genereted PPL from teststandifier for my LabVIEW Applications due to the teststandifiers PPL modifications? So I need two PPL's one for TestStand and one for my LabVIEW Applications?

 

If it is like I said to you have any tip for PPL Naming to differ them?

 

Best regards & thanks for your work!!!

0 Kudos
Message 50 of 60
(91 Views)