Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow a LabVIEW Service to return DoubleAnalogWaveform data and create example. #515

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Source/Build Specs/ni_protobuf_types.vipb
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I built the MeasurementLink Service .vip and installed it into LV 2021. Then I tried to build the ni_protobuf_types.vipb and I got these errors. Did you have a way to build / install these locally to test? It seems to me like you need to update MeasurementLink Service.vipb, build it and make sure it's installing these files so we can then build ni_protobuf_types.vipb. But then, this seems like a bad dependency chain. I think ni_protobuf_types.vipb should be able to build on its own without any other MeasurementLink packages being installed.

image

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because of this, I'm unable to get a good setup to try out your example. I think we should make a separate PR to get all of the .vipb changes in place and then add the example after that's all ready.

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<VI_Package_Builder_Settings Version="2020.1" Created_Date="2023-01-23 14:05:21" Modified_Date="2023-11-27 13:47:44" Creator="lvadmin" Comments="" ID="2a6d08d1d469108e8e2b0af2a497cfbc">
<VI_Package_Builder_Settings Version="2020.1" Created_Date="2023-01-23 14:05:21" Modified_Date="2024-05-15 12:36:22" Creator="lvadmin" Comments="" ID="0d425cbd7517105942ddc6bb1f4b46e8">
<Library_General_Settings>
<Package_File_Name>ni_protobuf_types</Package_File_Name>
<Library_Version>1.0.0.1</Library_Version>
<Library_Version>1.1.0.1</Library_Version>
<Auto_Increment_Version>false</Auto_Increment_Version>
<Library_Source_Folder>..\gRPC\Generated APIs\ni\protobuf\types</Library_Source_Folder>
<Library_Source_Folder>..\gRPC</Library_Source_Folder>
<Library_Output_Folder>..\..\Build Output</Library_Output_Folder>
<Company_Name>NI</Company_Name>
<Library_Summary/>
Expand Down
1 change: 1 addition & 0 deletions Source/Example Measurements/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Includes an example measurement service.
with an NI FGEN.
- `NI-SCOPE Acquire Waveform`: Acquires waveforms from an NI SCOPE.
- `VISA Measurement`: Writes and reads a value from a serial instrument using VISA.
- `Waveform Measurement`: Demonstrates the usage of the waveform data type in a graph.

For more details about a specific example, see the `README.md` file included
with the example.
Expand Down
15 changes: 15 additions & 0 deletions Source/Example Measurements/Waveform Measurement/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Waveform Measurement

This is a MeasurementLink example that demonstrates the usage of the waveform data type in a graph.

## Features

- Generates 2 waveforms and displays them in a graph

## Required Driver Software

None

## Required Hardware

None
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
<?xml version='1.0' encoding='UTF-8'?>
<Project Type="Project" LVVersion="20008000">
<Item Name="My Computer" Type="My Computer">
<Property Name="server.app.propertiesEnabled" Type="Bool">true</Property>
<Property Name="server.control.propertiesEnabled" Type="Bool">true</Property>
<Property Name="server.tcp.enabled" Type="Bool">false</Property>
<Property Name="server.tcp.port" Type="Int">0</Property>
<Property Name="server.tcp.serviceName" Type="Str">My Computer/VI Server</Property>
<Property Name="server.tcp.serviceName.default" Type="Str">My Computer/VI Server</Property>
<Property Name="server.vi.callsEnabled" Type="Bool">true</Property>
<Property Name="server.vi.propertiesEnabled" Type="Bool">true</Property>
<Property Name="specify.custom.address" Type="Bool">false</Property>
<Item Name="Waveform Measurement.lvlib" Type="Library" URL="../Waveform Measurement/Waveform Measurement.lvlib"/>
<Item Name="Dependencies" Type="Dependencies">
<Item Name="vi.lib" Type="Folder">
<Item Name="1D String Array to Delimited String.vi" Type="VI" URL="/&lt;vilib&gt;/AdvancedString/1D String Array to Delimited String.vi"/>
<Item Name="8.6CompatibleGlobalVar.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/config.llb/8.6CompatibleGlobalVar.vi"/>
<Item Name="Application Directory.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/file.llb/Application Directory.vi"/>
<Item Name="BuildHelpPath.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/BuildHelpPath.vi"/>
<Item Name="Check if File or Folder Exists.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/libraryn.llb/Check if File or Folder Exists.vi"/>
<Item Name="Check Special Tags.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Check Special Tags.vi"/>
<Item Name="Clear Errors.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Clear Errors.vi"/>
<Item Name="Convert property node font to graphics font.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Convert property node font to graphics font.vi"/>
<Item Name="Details Display Dialog.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Details Display Dialog.vi"/>
<Item Name="DialogType.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/DialogType.ctl"/>
<Item Name="DialogTypeEnum.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/DialogTypeEnum.ctl"/>
<Item Name="Equal Comparable.lvclass" Type="LVClass" URL="/&lt;vilib&gt;/Comparison/Equal/Equal Comparable/Equal Comparable.lvclass"/>
<Item Name="Equal Functor.lvclass" Type="LVClass" URL="/&lt;vilib&gt;/Comparison/Equal/Equal Functor/Equal Functor.lvclass"/>
<Item Name="Equals.vim" Type="VI" URL="/&lt;vilib&gt;/Comparison/Equals.vim"/>
<Item Name="Error Cluster From Error Code.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Error Cluster From Error Code.vi"/>
<Item Name="Error Code Database.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Error Code Database.vi"/>
<Item Name="Error Strings Global Internal.vi" Type="VI" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Measurement Server/Helpers/Error Strings Global Internal.vi"/>
<Item Name="ErrWarn.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/ErrWarn.ctl"/>
<Item Name="eventvkey.ctl" Type="VI" URL="/&lt;vilib&gt;/event_ctls.llb/eventvkey.ctl"/>
<Item Name="Extensions.lvlib" Type="Library" URL="/&lt;vilib&gt;/gRPC/Extensions/Extensions.lvlib"/>
<Item Name="Find Tag.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Find Tag.vi"/>
<Item Name="Format Message String.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Format Message String.vi"/>
<Item Name="General Error Handler Core CORE.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/General Error Handler Core CORE.vi"/>
<Item Name="General Error Handler.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/General Error Handler.vi"/>
<Item Name="Get File Extension.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/libraryn.llb/Get File Extension.vi"/>
<Item Name="Get String Text Bounds.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Get String Text Bounds.vi"/>
<Item Name="Get System Directory.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/sysdir.llb/Get System Directory.vi"/>
<Item Name="Get Text Rect.vi" Type="VI" URL="/&lt;vilib&gt;/picture/picture.llb/Get Text Rect.vi"/>
<Item Name="GetHelpDir.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/GetHelpDir.vi"/>
<Item Name="GetRTHostConnectedProp.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/GetRTHostConnectedProp.vi"/>
<Item Name="grpc-lvsupport-release.lvlib" Type="Library" URL="/&lt;vilib&gt;/gRPC/LabVIEW gRPC Library/grpc-lvsupport-release.lvlib"/>
<Item Name="gRPC-servicer-release.lvlib" Type="Library" URL="/&lt;vilib&gt;/gRPC/LabVIEW gRPC Servicer/gRPC-servicer-release.lvlib"/>
<Item Name="Longest Line Length in Pixels.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Longest Line Length in Pixels.vi"/>
<Item Name="LVBoundsTypeDef.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/miscctls.llb/LVBoundsTypeDef.ctl"/>
<Item Name="LVMapReplaceAction.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/miscctls.llb/LVMapReplaceAction.ctl"/>
<Item Name="LVNumericRepresentation.ctl" Type="VI" URL="/&lt;vilib&gt;/numeric/LVNumericRepresentation.ctl"/>
<Item Name="LVRectTypeDef.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/miscctls.llb/LVRectTypeDef.ctl"/>
<Item Name="MeasurementLink Discovery Client.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Discovery Client/MeasurementLink Discovery Client.lvlib"/>
<Item Name="MeasurementLink Discovery V1.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Discovery V1/MeasurementLink Discovery V1.lvlib"/>
<Item Name="MeasurementLink Instrument.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Instrument/MeasurementLink Instrument.lvlib"/>
<Item Name="MeasurementLink Measurement Server Internal.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Measurement Server Internal/MeasurementLink Measurement Server Internal.lvlib"/>
<Item Name="MeasurementLink Measurement Server.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Measurement Server/MeasurementLink Measurement Server.lvlib"/>
<Item Name="MeasurementLink Measurement Service Base V2.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Measurement Service Base V2/MeasurementLink Measurement Service Base V2.lvlib"/>
<Item Name="MeasurementLink Session Management Client.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Session Management Client/MeasurementLink Session Management Client.lvlib"/>
<Item Name="MeasurementLink Session Management V1.lvlib" Type="Library" URL="/&lt;vilib&gt;/MeasurementLink/MeasurementLink Session Management V1/MeasurementLink Session Management V1.lvlib"/>
<Item Name="ni.protobuf.types.lvlib" Type="Library" URL="/&lt;vilib&gt;/gRPC/Generated APIs/ni/protobuf/types/ni.protobuf.types.lvlib"/>
<Item Name="NI_AALBase.lvlib" Type="Library" URL="/&lt;vilib&gt;/Analysis/NI_AALBase.lvlib"/>
<Item Name="NI_Data Type.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/Data Type/NI_Data Type.lvlib"/>
<Item Name="NI_FileType.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/lvfile.llb/NI_FileType.lvlib"/>
<Item Name="NI_LVConfig.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/config.llb/NI_LVConfig.lvlib"/>
<Item Name="NI_MABase.lvlib" Type="Library" URL="/&lt;vilib&gt;/measure/NI_MABase.lvlib"/>
<Item Name="NI_PackedLibraryUtility.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/LVLibp/NI_PackedLibraryUtility.lvlib"/>
<Item Name="Not Found Dialog.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Not Found Dialog.vi"/>
<Item Name="Remove Duplicates From 1D Array.vim" Type="VI" URL="/&lt;vilib&gt;/Array/Remove Duplicates From 1D Array.vim"/>
<Item Name="Search and Replace Pattern.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Search and Replace Pattern.vi"/>
<Item Name="Search Unsorted 1D Array Core.vim" Type="VI" URL="/&lt;vilib&gt;/Array/Helpers/Search Unsorted 1D Array Core.vim"/>
<Item Name="Search Unsorted 1D Array.vim" Type="VI" URL="/&lt;vilib&gt;/Array/Search Unsorted 1D Array.vim"/>
<Item Name="Set Bold Text.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Set Bold Text.vi"/>
<Item Name="Set Difference.vim" Type="VI" URL="/&lt;vilib&gt;/set operations/Set Difference.vim"/>
<Item Name="Set String Value.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Set String Value.vi"/>
<Item Name="Space Constant.vi" Type="VI" URL="/&lt;vilib&gt;/dlg_ctls.llb/Space Constant.vi"/>
<Item Name="System Directory Type.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/sysdir.llb/System Directory Type.ctl"/>
<Item Name="System Exec.vi" Type="VI" URL="/&lt;vilib&gt;/Platform/system.llb/System Exec.vi"/>
<Item Name="TagReturnType.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/TagReturnType.ctl"/>
<Item Name="Three Button Dialog CORE.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Three Button Dialog CORE.vi"/>
<Item Name="Three Button Dialog.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Three Button Dialog.vi"/>
<Item Name="Trim Whitespace.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Trim Whitespace.vi"/>
<Item Name="whitespace.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/whitespace.ctl"/>
</Item>
<Item Name="kernel32.dll" Type="Document" URL="kernel32.dll">
<Property Name="NI.PreserveRelativePath" Type="Bool">true</Property>
</Item>
<Item Name="lvanlys.dll" Type="Document" URL="/&lt;resource&gt;/lvanlys.dll"/>
</Item>
<Item Name="Build Specifications" Type="Build">
<Item Name="Waveform Measurement" Type="EXE">
<Property Name="App_copyErrors" Type="Bool">true</Property>
<Property Name="App_INI_aliasGUID" Type="Str">{4CD09758-E193-4D4D-B773-3FA815F96A26}</Property>
<Property Name="App_INI_GUID" Type="Str">{34B10509-3660-46B8-83EB-02BC76C1DC08}</Property>
<Property Name="App_serverConfig.httpPort" Type="Int">8002</Property>
<Property Name="App_serverType" Type="Int">0</Property>
<Property Name="Bld_autoIncrement" Type="Bool">true</Property>
<Property Name="Bld_buildCacheID" Type="Str">{B1A2C2A3-C684-4978-BF36-7E81BD1A5F11}</Property>
<Property Name="Bld_buildSpecName" Type="Str">Waveform Measurement</Property>
<Property Name="Bld_excludeInlineSubVIs" Type="Bool">true</Property>
<Property Name="Bld_excludeLibraryItems" Type="Bool">true</Property>
<Property Name="Bld_excludePolymorphicVIs" Type="Bool">true</Property>
<Property Name="Bld_localDestDir" Type="Path">../builds/NI_AB_PROJECTNAME/Waveform Measurement</Property>
<Property Name="Bld_localDestDirType" Type="Str">relativeToCommon</Property>
<Property Name="Bld_modifyLibraryFile" Type="Bool">true</Property>
<Property Name="Bld_postActionVIID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Advanced/Build Assets/Post-Build Action.vi</Property>
<Property Name="Bld_previewCacheID" Type="Str">{CEC8F72A-0A52-43A8-96A9-FA4685F9D5B4}</Property>
<Property Name="Bld_version.major" Type="Int">1</Property>
<Property Name="Destination[0].destName" Type="Str">WaveformMeasurement.exe</Property>
<Property Name="Destination[0].path" Type="Path">../builds/NI_AB_PROJECTNAME/Waveform Measurement/WaveformMeasurement.exe</Property>
<Property Name="Destination[0].preserveHierarchy" Type="Bool">true</Property>
<Property Name="Destination[0].type" Type="Str">App</Property>
<Property Name="Destination[1].destName" Type="Str">Support Directory</Property>
<Property Name="Destination[1].path" Type="Path">../builds/NI_AB_PROJECTNAME/Waveform Measurement/data</Property>
<Property Name="DestinationCount" Type="Int">2</Property>
<Property Name="Source[0].itemID" Type="Str">{232931C6-0AF3-432E-8F7F-0527704DBCE1}</Property>
<Property Name="Source[0].type" Type="Str">Container</Property>
<Property Name="Source[1].destinationIndex" Type="Int">0</Property>
<Property Name="Source[1].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Get Measurement Details.vi</Property>
<Property Name="Source[1].sourceInclusion" Type="Str">Include</Property>
<Property Name="Source[1].type" Type="Str">VI</Property>
<Property Name="Source[2].destinationIndex" Type="Int">0</Property>
<Property Name="Source[2].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Get Type Specializations.vi</Property>
<Property Name="Source[2].sourceInclusion" Type="Str">Include</Property>
<Property Name="Source[2].type" Type="Str">VI</Property>
<Property Name="Source[3].destinationIndex" Type="Int">0</Property>
<Property Name="Source[3].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Get UI Details.vi</Property>
<Property Name="Source[3].sourceInclusion" Type="Str">Include</Property>
<Property Name="Source[3].type" Type="Str">VI</Property>
<Property Name="Source[4].destinationIndex" Type="Int">0</Property>
<Property Name="Source[4].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Measurement Configuration.ctl</Property>
<Property Name="Source[4].sourceInclusion" Type="Str">Include</Property>
<Property Name="Source[4].type" Type="Str">VI</Property>
<Property Name="Source[5].destinationIndex" Type="Int">0</Property>
<Property Name="Source[5].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Measurement Logic.vi</Property>
<Property Name="Source[5].sourceInclusion" Type="Str">Include</Property>
<Property Name="Source[5].type" Type="Str">VI</Property>
<Property Name="Source[6].destinationIndex" Type="Int">0</Property>
<Property Name="Source[6].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Measurement Results.ctl</Property>
<Property Name="Source[6].sourceInclusion" Type="Str">Include</Property>
<Property Name="Source[6].type" Type="Str">VI</Property>
<Property Name="Source[7].destinationIndex" Type="Int">0</Property>
<Property Name="Source[7].itemID" Type="Ref">/My Computer/Waveform Measurement.lvlib/Run Service.vi</Property>
<Property Name="Source[7].properties[0].type" Type="Str">Window run-time position</Property>
<Property Name="Source[7].properties[0].value" Type="Str">Minimized</Property>
<Property Name="Source[7].propertiesCount" Type="Int">1</Property>
<Property Name="Source[7].sourceInclusion" Type="Str">TopLevel</Property>
<Property Name="Source[7].type" Type="Str">VI</Property>
<Property Name="SourceCount" Type="Int">8</Property>
<Property Name="TgtF_fastFileFormat" Type="Bool">true</Property>
<Property Name="TgtF_fileDescription" Type="Str">Waveform Measurement</Property>
<Property Name="TgtF_internalName" Type="Str">Waveform Measurement</Property>
<Property Name="TgtF_legalCopyright" Type="Str">Copyright © 2024 </Property>
<Property Name="TgtF_productName" Type="Str">Waveform Measurement</Property>
<Property Name="TgtF_targetfileGUID" Type="Str">{A057BE78-D3C2-4518-8030-8CD0DD195935}</Property>
<Property Name="TgtF_targetfileName" Type="Str">WaveformMeasurement.exe</Property>
<Property Name="TgtF_versionIndependent" Type="Bool">true</Property>
</Item>
</Item>
</Item>
</Project>
Binary file not shown.
Binary file not shown.
Loading