
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
The only export from autolv is App that opens an ActiveX connection to LabVIEW through its VI Server. With a reference to LabVIEW it is then possible to open an ActiveX connection to a specific VI. The primary use case for this library is to set control values on the VI front panel from Python, run the VI, and read the control values back into Python.
pip install autolv
Suppose the VI name is 'test.vi' and has a single Numeric control with the name (label) 'input' and a single Numeric indicator with the name 'output'. The VI implements 2*'input' -> 'output'
>>> import autolv
>>> lv = autolv.App()
>>> vi = lv.open('test.vi')
>>> vi.input = 2.0
>>> vi.run()
>>> vi.output
4.0
Now move the 'input and 'output' Numeric controls into a Cluster called 'data'.
>>> vi = lv.open('test.vi')
>>> vi.data.input = 3.0
>>> vi.run()
>>> vi.data.output
6.0
It's possible to get an error code explanation. Suppose a VI attempts to create an invalid DAQmx channel.
>>> vi = lv.open('error.vi')
>>> vi.DAQmx = "PXI1Slot2"
>>> vi.run()
>>> vi['error out'].code.value
-201237
>>> lv.explain_error(_)
'Physical channel name specified is invalid...'
In Jupyter, run the VI in the following way:
In [1]: import autolv
In [2]: lv = autolv.App()
In [3]: vi = lv.open('test.vt')
In [4]: vi.input = 2.0
In [5]: await vi.run()
In [6]: vi.output
Out[6]: 4.0
As a context manager:
>>> with autolv.App() as lv:
vi = lv.open(<file>)
...
>>>
LabVIEW will close upon exiting the context if it was not running prior to entering the context.
It is possible to call the VI object directly instead of using VI.run(). Reusing the
'test.vi' from above where output
= 2 * input
and these controls have been wired
to the connector pane:
>>> import autolv
>>> lv = autolv.App()
>>> vi = lv.open('test.vi')
>>> vi(input=2.0, output=0.0)
>>> vi.output
4.0
There are two key differences between VI() and VI.run():
Specify a cluster as a dictionary. Suppose 'test.vi' has a cluster data_in
with
one numeric control input
and a cluster data_out
with one numeric indicator output
and output
= 2 * input
:
>>> vi = lv.open('test.vi')
>>> vi(data_in={"input": 3}, data_out={})
>>> vi.data.output
6.0
It is recommended to label controls as a valid Python identifier which improves
productivity when using dot-access in an interactive session. But, LabVIEW controls
often are given names that are invalid Python identifiers. It is possible to work
with these. Suppose a numeric control is labeled x in
and the indicator y out
:
>>> import autolv
>>> lv = autolv.App()
>>> vi = lv.open('test.vi')
>>> vi(**{"x in": 3, "y out": 0})
>>> vi["y out"]
4.0
The Waveform Graph control can be a 1d array of y-axis values, 2d array of x-axis and y-axis values, or a cluster (t0, dt, Y) where t0 and dt are scalers and Y is the y-axis values.
>>> vi = lv.open("graph_1d.vi")
>>> vi.run()
>>> vi.graph.value
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
>>> vi = lv.open("graph_1d.vi")
>>> vi.run()
>>> vi.graph.value
array([[0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],
[0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]])
>>> vi = lv.open("graph_cluster.vi")
>>> vi.run()
>>> vi.graph.value
[0.0, 1.0, (0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)]
>>> vi.graph.t0
0.0
>>> vi.graph.dt
1.0
>>> vi.graph.Y
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
>>> vi = lv.open("tab control.vi")
>>> vi.tabcontrol.page1.cluster.b
0.0
>>> project = lv.open('<file>.lvproj')
>>> vi = project.open('<file>.vi')
Clusters in the Silver visual style need to be reordered after opening the VI.
>>> vi = lv.open("silver error cluster.vi")
>>> vi["error in"]
Cluster({'code': True, 'source': , 'status': False})
>>> cluster = vi["error in"]
>>> cluster.reorder_controls(["status", "code", "source"])
>>> vi.read_controls()
>>> vi["error in"]
Cluster({'status': True, 'code': 1, 'source': abc})
>>> print(vi.context_help())
>>> vi.set_context_help("Does stuff...")
>>> help(vi)
FAQs
Automate LabVIEW from Python
We found that autolv demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.