[ANN] LabVIEW0 - Calling Julia from LabVIEW using ZeroMQ

I’m happy to announce this package. The package is alreary registered. For documentation see on GitHub https://github.com/Eben60/LabVIEW0.jl/blob/main/README.md and links therein (I still have to learn Documenter). A number of examples are provided, and documentation contains screenshots of LabVIEW VIs, so you don’t need LabVIEW installation to get the first impression. BTW, though LV is commercial (and not cheap), there is now a Community Edition, which is free for private use and specifically for open source development.

Supported data structures (clusters in LV lingo): at least numbers, boolean, ASCII strings, and clusters and arrays thereof in any combination for JSON transfer, numeric arrays and images for binary transfer.

The latency of Julia call is about 1-2 ms. 1 MB data transfer (forth and back) in binary format “door to door” - from numeric array in LV back to numeric array in LV, inclusive all necesary data transformations in LV and Julia, takes about 20-25 ms on my notebook. At about 100MB transfer, LV may get out-of-memory (8 GB RAM installed).

Julia Version 1.7.1
Commit ac5cc99908 (2021-12-22 19:35 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, skylake)

Most of the Julia server functionality was moved into the separate package LVServer. One of the reasons behind the decision, the package LVServer contains nothing LV-specific and could be as well used for communication with other languages or environments.


Outlook for future development (provided I have resources, and there is interest, as actually I don’t have any real need for it in my work):

  • LV server, Julia client.
    Actually this was the request by @martincornejo, which initiated my work on this package. I think, I have some general idea on how to implement it.

  • Binary encoded transfer of greyscale images and stacks of images (RGB is already implemented).

  • API to “externally” add custom types to be binary encoded.
    Should be possible if needed, however I think by current implementation of numeric arrays and images most of the use cases are covered.

  • Some better way to distribute the LV part of the package.
    Maybe somehow using NI Package Manager, but no idea how to combine it with Julia packages.

  • Multithreading and parallel server access
    No specific idea how to implement. Concurrent access to the Julia server from different parts of LV program (first come first served) is actually already possible - see Example 6c.

Any feedback is highly welcome :smiley:

7 Likes

Is there a reason that directly embedding Julia into LabView within the same process would not work? I did some preliminary tests with that and could not find any obvious issues.

Could you explain, how do you mean - embedding Julia into LabView?