From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Additional NI Software Idea Exchange

cancel
Showing results for 
Search instead for 
Did you mean: 
ThomasZettl

Provide a VeriStand SystemDefinitionAPI that is usable from inside 64Bit applications

Status: New

Hi,

 

We are using the VeriStand SystemDefinition .NET API to automatically generate VeriStand .sdf files. However the SystemDefinitionAPI only seems to work when accessed in 32Bit applications (in our case Matlab/Simulink). As in the future more and more applications will only be available as 64Bit versions, this very convenient VeriStand feature will no longer be usable for us. Thus I strongly suggest for to provide also a 64Bit compatible version of the SystemDefinition .NET API. Interestingly, other VeriStand .NET APIs (like the Execution API) seem to work well even when accessed from 64Bit applications.

 

Best regards,

Thomas Zettl

 

3 Comments
BenParrott
Member

Can you provide more details about your usage of the System Definition API from a 64-bit application? What you trying to do, and what isn't working? There are examples of 64-bit applications which use the System Definition API successfully (such as VeriStand UI Manager).

ThomasZettl
Member

Hi,

we are trying to automatically generate .sdf-File content via Matlab/Simulink. For instance, we create a VeriStand Model-DLL out of our Simulink models and after a successful build process we want to automatically add the DLL to a .sdf-file (along with setting other sdf-file properties). As Matlab/Simulink has a .NET interface, we are using the VeriStand SystemDefinition .NET API for this purpose. Following code snippet illustrates how it is currently done:

 

NET.addAssembly('NationalInstruments.VeriStand');
NET.addAssembly('NationalInstruments.VeriStand.SystemDefinitionAPI');

modelName = 'myModel';
modelDescription = 'myModeDescription';
dllPath = 'c:\temp\myModel.dll';
processor = -1;
decimation = 1;
initalState = 0;
segmentVectors = true;
importParameters = true;
importSignals = true;

modelObject = NationalInstruments.VeriStand.SystemDefinitionAPI.Model(modelName, ...
                modelDescription, ...
                dllPath, ...
                processor, ...
                decimation, ...
                initalState, ...
                segmentVectors, ...
                importParameters, ...
                importSignals);

 

Creating the VeriStand Model object this way works fine if a 32Bit Matlab application is used, however in 64Bit Matlab applications, following error is thrown (please note that the message is thrown on a german windows system) :

 

Error using demoVeristand (line 14)
Message: Die DLL "NIVeriStand_MdlWrap.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
Source: NationalInstruments.VeriStand.SystemDefinitionAPI
HelpLink:

 

A first analysis indicates that the mentioned "NIVeriStand_MdlWrap.dll" is only available as 32Bit Dll in the VeriStand installation on our computer and we suppose that this might be the problem as a 64Bit processes (Matlab in our case) need 64Bit Dlls.

 

Thanks,

Thomas

 

BenParrott
Member

Hi Thomas

 

Thank you for the extra details.

 

You are correct, NIVeriStand_MdlWrap.dll is only available as a 32-bit DLL. Depending on the target OS for the model, the model being "wrapped" will also be 32-bit. VeriStand UI Manager solves this problem by using a 32-bit process to access model information and communicating between the 32-bit process and the 64-bit VeriStand UI Manager process via a named pipe. Clearly that is a lot of extra work relative to what you are trying to accomplish, and improving this situation this a good idea.

 

Ben