I have a problem with an application that I'm working on.
Task of the application: Control multiple devices (measurement devices, power supplies and so on) in a teststand using a plugin structure. Most of the devices are controlled by VISA.
My application works fine ... sometimes for hours, sometimes for days. And then it suddenly crashes without an error message. The only information that I get is the windows protocol (unfortunately only in German):
Name der fehlerhaften Anwendung: EVOBenchControl.exe, Version: 126.96.36.199, Zeitstempel: 0x5fc73c0f
Name des fehlerhaften Moduls: ntdll.dll, Version: 10.0.19041.2788, Zeitstempel: 0xc7ff7cdf
ID des fehlerhaften Prozesses: 0x2850
Startzeit der fehlerhaften Anwendung: 0x01d973700c72460c
Pfad der fehlerhaften Anwendung: C:\EVOBenchControl\Program\EVOBenchControl.exe
Pfad des fehlerhaften Moduls: C:\Windows\SYSTEM32\ntdll.dll
Vollständiger Name des fehlerhaften Pakets:
Anwendungs-ID, die relativ zum fehlerhaften Paket ist:
Up to now, the NI support couldn't help me with the problem. The only idea was to change all VISA operations from asynchronous to synchronous calls. I would say: it was a little improvement, but I still see the crashes.
Maybe someone here already has experiences with this kind of error.
The development environment that I'm using is LV 2020 SP1 32 Bit.
That sounds a lot like a memory leak. Have you looked at using the Desktop Execution Trace Toolkit, DETT? It does ship with that LabVIEW version but might not install by default.
Check that it is installed then, run DETT
the software is already running on several PCs, all running on Windows 10. All PCs have the same problem.
The DETT is something I have never used before ... I will give it a try.
You mention that MOST modules use VISA but what are the not most using? Any chance you use DLLs through Call Library Nodes?
If so, you have a very high probability that the problem is in there, and the only reason NOT to look there first is that it is difficult to do. It’s not a good reason though!
some of the Plugins are written for NI Devices and thus use DAQmx. One device is controlled by Modbus where I'm using the Modbus Master library.
All the other devices are controlled via TCP/IP using SCPI commands.
DAQmx, while using DLLs internally, is from NI and you neither want to have to check those Call Library Nodes, nor should you have to! Those are generally done very correct and tested thoroughly. You still may want to consider trying to use a different DAQmx version, if for nothing else than seeing if it changes anything. Just be careful. DAQmx only supports the version of LabVIEW that was current when it was released and the three prior LabVIEW versions. Also if you use older hardware you need to make sure it is still supported in the DAQmx version you intend to install.
I made some tests with the Desktop Execution Trace Toolkit and captured the crashes ... or let's say I tried. I attached two pictures of two different tries with the same result: there are a lot of messages that are captured during the runtime of the software, but wenn the app crashes, the DETT shows a gap (marked with arrows in the pictures):
In addition, my App is running for a few more seconds after the error entry in the Windows Event Viewer. Can anyone interpret these messages to give me a hint where to find my problem?
the problem seems to be solved. In my plugins I used timed loops for the data akquisitiion. The NI support asked me to replace the timed loops with normal while loops ... since this change I haven't had any crashes