07-10-2026 01:01 PM - edited 07-10-2026 01:03 PM
Hi everyone,
I am currently migrating the OPC UA Client Custom Device available on GitHub to LabVIEW 2025 and NI VeriStand 2025 Q3.
Repository: https://github.com/NIVeriStandAdd-Ons/OPC-UA-Client-Custom-Device
I migrated the original LabVIEW 2019 source to LabVIEW 2025 by performing the following steps:
.lvproj.config assembly binding redirects (VeriStand assemblies)All Engine Release builds now compile successfully:
I verified the following:
Inside VeriStand:
The problem only occurs during deployment.
During deployment VeriStand reports:
LabVIEW:
The VI is not executable.
This error may occur because the VI is either broken or contains a subVI that LabVIEW cannot locate.
NI VeriStand Engine
→ Initialize Inline Custom Devices.vi
→ Custom Devices Storage.lvlib
→ Initialize Device (HW Interface).vi
Error 1003
Interestingly, the error no longer explicitly mentions RT Driver.vi.
Has anyone successfully migrated this Custom Device (or any Inline Async Custom Device) to VeriStand 2025 ?
Are there any known framework changes between VeriStand 2024 and 2025 that could explain this deployment failure despite a successful build and no broken VIs?
Finally, would you recommend:
The second option seems possible but would require a much larger migration effort, so I'd like to know whether anyone believes it is actually necessary or if there is a simpler solution.
Any advice or feedback would be greatly appreciated.
Thank you!
07-10-2026 01:46 PM
Are the OPC UA examples using the same API calls that the CD is? I remember the API being updated at some point so maybe the CD is using some deprecated VIs that aren't deploying.
07-10-2026 05:15 PM
Thanks Jacobson for your suggestion.
I checked the OPC UA Toolkit API in detail and, as far as I can tell, the custom device is not using deprecated OPC UA VIs. After upgrading the project to LabVIEW 2025 / VeriStand 2025 Q3, all OPC UA Toolkit VIs are resolved correctly and there are no broken OPC UA VIs anymore.
I also verified that the standard NI OPC UA examples deploy and run correctly on the same sbRIO, so the OPC UA Toolkit itself appears to be working properly on the target.
After looking at the RT logs, I noticed the following error:
OPC UA Client (v1.0.2): Started...
******************************
OPC UA Client error encountered.
Error code: -2206
LabVIEW: (Hex 0xFFFFF762) RT FIFO does not exist.
******************************
OPC UA Client (v1.0.2): Stopped...
I then traced where this log message is generated.
By following the callers step by step, I ended up in:
vi.lib\NI\NIVS Inline Async API\_VS Inline Async API\
VS Inline Async API\SubVIs\Connect to Error Handles.vi
This VI does not generate the error itself. It only catches the RT FIFO error and converts it into error -2206 ("RT FIFO does not exist") before logging it.
From there, I continued tracing the call hierarchy backwards until reaching the initialization sequence of the custom device:
RT Driver.vi
↓
RTMain.Initialize.vi
↓
Async.Engine.Initialize.vi
↓
Connect to Error Handles.vi
So, at the moment, it looks like the failure actually occurs before Connect to Error Handles.vi. This VI is only reporting an error that has already occurred earlier during the initialization of the RT engine.
My current hypothesis is that one of the initialization VIs fails before the asynchronous processes (or their RT FIFOs) are successfully created, which then causes Connect to Error Handles.vi to fail when it tries to connect to them.
At this point, I don't have evidence that the OPC UA API itself is the problem. The OPC UA VIs compile correctly and the standard NI examples work on the target.
My question is therefore: Has anyone seen changes in the VS Inline Async API or the Custom Device framework between older VeriStand versions and VeriStand 2025 that could cause this type of initialization failure?
Even if the VIs are not broken after recompilation, could there be API or framework changes that require modifications to the initialization code of an older custom device?
07-12-2026 03:38 PM
Small update after a lot more debugging.
At this point, I no longer believe the issue is in the VeriStand Inline Async API or the Custom Device framework itself.
Here is what I found:
Run Process.vi successfully opens Poll.Main.vi (Open VI Reference OK).Poll.Main.vi is actually started correctly.-2206 (RT FIFO does not exist) error is only a consequence: the FIFO is never created because the asynchronous process terminates before reaching the FIFO initialization.
To isolate the problem, I progressively removed code from Poll.Main.vi.
Poll.Main.vi starts normally and my debug message (Async Started) appears in the RT log.Poll.Initialize.vi), the process no longer starts and Async Started never appears.
This strongly suggests that the failure occurs while loading or initializing the OPC UA Toolkit dependencies, before the code can actually execute.
I also verified the following:
ni-opc-ua) is installed on the sbRIO.libni_opcua.so is present on the target (/usr/local/lib/libni_opcua.so).Open VI Reference succeeds for Poll.Main.vi.
So at this point, the problem no longer looks related to the Async API, FIFO management, or deployment.
The current evidence points to something related to the OPC UA Toolkit itself (or its interaction with VeriStand 2025 Q3/Linux RT), because the mere presence of OPC UA Toolkit VIs or typedefs inside Poll.Initialize.vi is enough to prevent the asynchronous process from starting.
Has anyone seen this kind of behavior before, or have any ideas on what I should investigate next?
At this point, I feel like I've checked everything I can think of:
I'm running out of ideas, so any suggestion would be greatly appreciated.
Thanks in advance!
07-12-2026 08:48 PM
VeriStand 2021 or later does not support 32-bit ARM Linux RT.
Reference: Cannot Add NI Veristand Engine on cRIO-9068
07-13-2026 02:00 AM
Hello ZYOng,
I don't quite understand the point of this comment.
The sbRIO I'm using as a target is indeed running Linux x64. (sbRIO-9603 Specifications - NI)
And I'm compiling the x64 version of the OPC UA add-on custom device project.
Have I forgotten something? ...
Thanks in advance,
07-13-2026 02:11 PM
Edit: I just noticed that I wrote “ARM” in my first post...
So that was a mistake: my apologies.
Thanks for your message,
07-13-2026 08:09 PM
I would recommend debugging the RT Driver deployment first on Windows.
It is much easier to isolate the dependencies issue on Windows and also troubleshooting bug as you can configure subVI to open the front panel for debugging when called.
07-14-2026 04:19 AM
Hello ZYOng,
But that's exactly what I did:
- Deployed the RT Driver VI.vi directly to the target from the lvproj.
--> No problems, no broken wires, no errors related to the OPC UA API... The deployment goes smoothly.
But when I build and deploy in Veristand, as soon as the OPC UA API is called, it causes the Poll.Main.vi to crash immediately.It happens immediately—because if I disable everything related to OPC UA in Poll.Main.vi, it works.
So I don’t know what to debug after all...
Thanks
07-22-2026 02:08 PM
Hello,
Any other ideas?
I’ve run quite a few tests, and ultimately, simply adding a Call Library Function Node that points to the .dll (or the .so on the cRIO) causes any VI to crash when it’s called by the Veristand Async API.
For now, I’ve concluded that this is the only cause of the crash.
I also tried again with a cRIO 9045 formatted with only the necessary software, and the same thing happened—it crashes when calling the .dll (or the .so, again...).
Thanks in advance,