QA40X Nonfatal-Error

I’m getting a textbox popping up that say “An error has occurred, but it might not be fatal. If you continue, please save your current state to a new file, close and restart the app. This info has been logged. Do you want to continue?”

I’m currently using the QA40X software to run audio tests via the REST API. The error appears sporadically and has only. happened a few times. It also doesn’t seem to impact the tests. I don’t remember seeing any errors on the console when it happened. I’ll try to replicate it and double check.

Does anyone know what might cause this to happen. My code changes settings and generators then runs acquisitions and gets test data from it. It also runs frequency response tests using masks I generated.

Hi @Isaac, in the directory MyDocs\QuantAsylum\QA40x\ExceptionLog directory you should see a list of exceptions the app has experienced. Is there anything in that directory? If so, do the contents give you a hint?

Hey Matt,

The exception log folder was empty, but there were two logs in the log folder. Those may have been from when I started in logging mode or they could be logs from when I got those exceptions. Those both have different exceptions attached to them.

Exception in KickTimer_Tick:Usb.ReadRegister failed to read data. Register: 17
Form1_FormClosing
The webserver has stopped. Webserver exception: The I/O operation has been aborted because of either a thread exit or an application request
The webserver may have failed to start listening on the specified port. It may require the application to run with admin privs OR a namespace reservation needs to be made on the port you desire. For example, for port 9402:netsh http add urlacl url=http://*:9402/ user=DOMAIN\userTo check entries, use: netsh http show urlacl
Exiting user code…

Form1_FormClosing
The webserver has stopped. Webserver exception: The I/O operation has been aborted because of either a thread exit or an application request
The webserver may have failed to start listening on the specified port. It may require the application to run with admin privs OR a namespace reservation needs to be made on the port you desire. For example, for port 9402:netsh http add urlacl url=http://*:9402/ user=DOMAIN\userTo check entries, use: netsh http show urlacl
Exiting user code…

Either way it looks like running with admin privs or making a reservation for the port might be connected to my problem. Though the first one was possibly from disconnecting the USB during a request.

Another question I have is about the rest API. I was looking through the documentation is there any command to put the software in remote control mode? Also if I’m using other equipment on the DUT to measure current drawn or something similar, and I want to measure it with a signal, is there a way to temporarily turn on the generator using the REST API? Making an acquisition will turn it on, but won’t let me send a command to my other device until the acquisition is completed and the generators already off.

Hi @Isaac,

Both of those errors look like general reporting of something unexceptional. But keep an eye on the directory. You can also run with -L (logging) or -C (console) and see what might pop up there when you encounter an error.

Another question I have is about the rest API. I was looking through the documentation is there any command to put the software in remote control mode?

The software is always ready to take remote commands via REST. When a command comes in, you’ll see “REMOTE” appear in the task bar for a second or so.

Also if I’m using other equipment on the DUT to measure current drawn or something similar, and I want to measure it with a signal, is there a way to temporarily turn on the generator using the REST API?

You are probably using a POST /Acquisition to make measurements now, and that will block while the measurement is being made. But there’s also a Post /AcquisitionAsync that will start a measurement and return immediately. And then you can use GET /AcquisitionBusy to see when the measurement is done.

So, you could do

  1. Post /AcquisitionAsync with a 64K buffer at 48ksps. That acq would take 64/48=1.36 seconds
  2. Wait about 200 mS. At this point, the acq should be going
  3. Make current measurement 1
  4. Make current measurement 2
  5. Make current measurement 3
  6. Poll via GET /AcquisitionBusy to wait for the measurement to finish
  7. Verify 3 current measurements are in bounds. The first might have occured too early, the last might have occured too late. But hopefully all three are in range.

And you can make the above smarter still by timestamping your current measurements and the start + end of acquisition to make sure everything makes sense.