-
Posts
655 -
Joined
-
Last visited
-
Days Won
70
Content Type
Profiles
Forums
Downloads
Gallery
Posts posted by LogMAN
-
-
There is no way to change the scope for elements inside a cluster. You can only hide them on the front panel.
Your solution to unbundle the private cluster and bundle the public cluster is the best way to hide internal complexity.
If you just want to omit certain parameters without explicitly unbundling/bundling, you could also serialize to and from JSON. Of course, this comes at a performance cost.
Note, however, that this only works if the element names are exactly the same.
Here is an example using JSONtext
- 1
-
- Popular Post
- Popular Post
2 hours ago, cordm said:I tried to be clever using BLAS dcopy for copying out the relevant part, but the conversion kills the performance gain.
It is actually much faster on my machine. Here are a few results:
-
@Łukasz
- Fast solution: ~30 µs
-
@cordm
- Case 1 (really slow): ~403 µs
- Case 2 (good performance and readability): ~54 µs -- output is wrong, see below.
- Case 3 (): ~235 µs
- Case 4 (original solution): ~30 µs
- Case 5 (LV200000_BLASLAPACK.dll): ~14 µs
- Case 6 (LVBLAS.dll:BLASCopyVectorH): ~16 µs
-- Windows 11, LabVIEW 2020 SP1 (32-bit)
2 hours ago, cordm said:This code actually truncates the last value because the length of the source array becomes odd.
Here are two possible fixes. The second one is slightly faster for me.
1) Append the final element: ~60 µs. (slightly slower than before)
2) Rotate the string before conversion: ~42 µs.
- 3
-
31 minutes ago, hooovahh said:
I'm also not sure why this works only in the enabled structure. I wouldn't expect the structure to be a non-reentrant type function. And it doesn't, when I put a wait in there as a test.
Probes on the top-level diagram of the parallel For Loop simply show no debug info unless debugging is enabled. Any subdiagram will do the trick.
-
No. The image shows how to assign multiple event sources to a single event case in the Event Structure.
You would have to create a custom user event and handle it in another event case to be able to do what you describe. It is just not a good solution for your particular usecase.
-
14 hours ago, epiz said:
Is it possible to have two buttons in the same event structure(I don't think its possible but want to confirm).
Yes. One event can be triggered by as many buttons as you want.
14 hours ago, epiz said:Lets say one of the events is to read data from a device and it displays on the vi. Is it possible to just create another event that can simply just pull that said data and write it to a file?
Technically yes but this is bad design because it would have to go through the UI thread, which is super slow.
There are more robust ways to do that. Please take a look at the "Continuous Measurement and Logging" project template that ships with LabVIEW.
-
You should find the CAN palette under Measurement I/O.
That said, NI CAN is only for legacy CAN hardware. For newer hardware, NI XNET is the way to go: NI-XNET CAN, LIN, and FlexRay Platform Overview - NI
Edit: Forgot to mention NI Example Finder, which includes several examples on how to use the API (via Help > Find Examples).
- 1
-
Not sure if this is relevant but there appears to be an issue with the file paths when loading the script node. The debugging window is displayed when placing the node on the block diagram (notice the unreadable characters in the file extension):
It often results in a crash but when it doesn't you get another debugging window when executing the VI:
It also reports the same error code as the one mentioned above:
This is running on Windows 11 using LabVIEW 2013 (32-bit) and Python 2.7 (registered in PATH) with the latest version of LabPython from VIPM. msvcrt.dll is available in SysWOW64 and System32 (part of Windows).
Not sure what causes the issue but at the very least it doesn't appear to be isolated to Windows Server 2019 🤷♂️
-
Your image is broken for me because it resides in your gmail account. Can you attach it directly to your post?
Did you add Python 2.7 to the PATH environment variable? Also make sure only one version is added to PATH, otherwise it may lookup the wrong version. This was the reason for me in the past.
-
1 hour ago, acb said:
We've explored the gray code idea, but it presents a few challenges; for example, what if the generated grayed out diagram is bigger than the diagram space it has? Do we push everything out to make room for the predicted code? Do we just clip it at the edge of the structure, move nodes, etc? We haven't dug into that yet. Ideas welcomed.
Perhaps diagram zoom could be utilized or the change could be displayed in an overlay (or both combined)?
For example, there could be an icon to indicate that Nigel has a suggestion:
When hovering the icon, it could display the suggested diagram in an overlay from which I can choose to apply them:
Suggestions could also be displayed on subdiagram level, depending on the scope of the suggestion. For example,
Once applied, the diagram grows to fit the new content.
-
55 minutes ago, acb said:
my first post!
Welcome to the forums 🎉
55 minutes ago, acb said:What types of day-to-day tasks would you want Nigel to help you with?
I haven't really thought about it as this was the first time I learned about Nigel (never thought anything like that is even remotely possible in LV). Still, I'm familiar with GitHub Copilot and Visual Studio's IntelliCode, which have great IDE integration.
What I'm looking for is not so much an AI that writes my code (because I know how to do that), but one that accelerates my development process by suggesting changes in the context of my code. For example, to predict what I'm going to do and provide hints in the form of grayed-out suggestions I can simply accept by pressing a key (tab-driven-development 😉).
Things like:
- When I place an "open connection" function, it suggests the corresponding "close connection" function.
- When I place several methods of a class or VISA or DAQmx, it suggests how to order them in a sensible manner (open, read, write, close).
- When I connect the terminals of a VI, it suggests to connect error wires as well.
- When I place error terminals it suggests adding an error case structure.
Of course, there are more specialized tasks where a smart AI would also be really useful:
- Creation of driver libraries, just like your example from importing a PDF to generating code.
- Configuration of CLFNs
- Beautify/Cleanup my block diagram
- Suggest changes when upgrading to a newer version of LabVIEW
- Suggest icons for my VIs 😍
- Derive VI descriptions from code
- Apply changes to a set of VIs (i.e., renaming them)
- Point out mistakes in my code (missing cases, unhandled errors, etc.)
55 minutes ago, acb said:And yes, I intend Nigel to help you with your hardware and codebases that aren't the latest & greatest.
That's awesome. I hope we can play with it soon
-
1:02:00 "... but NIgel can control your physical hardware!"
*terminator theme intensifies*
Jokes aside, the copilot looks interesting but it needs much better integration to be useful for any of my day-to-day tasks. It needs much faster response time and it will have to show how well it can work with legacy and non-standard code bases that aren't developed with NI's portfolio and vision in mind.
Did they mention if and when this can be tried out?
-
I'm not familiar with network streams but the online help provides an example for your particular scenario (scroll to the very bottom): Specifying Network Stream Endpoint URLs - NI
Based on your code this works for me: Working Example.zip
Edit: To provide some more explanation:
Only one application can create endpoints in the default (empty) context "//localhost/".
Incidentally, this is also the default context when you create a writer endpoint by name. For example, writer endpoint "my_writer" is equivalent to "//localhost/my_writer".
In your particular example,
-
Application B creates a writer endpoint "ApplicationA_in_writer", which is equivalent to "//localhost/ApplicationA_in_writer".
-
Application C creates a writer endpoint "ApplicationB_in_writer", which is equivalent to "//localhost/ApplicationB_in_writer".
And since only one application can use the default context, the error happens.
To create endpoints in separate contexts, you must specify the context in the endpoint name. For example, "//localhost:ApplicationB/ApplicationA_in_writer" and "//localhost:ApplicationC/ApplicationB_in_writer".
- 1
-
Application B creates a writer endpoint "ApplicationA_in_writer", which is equivalent to "//localhost/ApplicationA_in_writer".
-
I'm not quite sure if this is what you are looking for but here is an example that works for me:
-
A union is always sized to its largest member, not the sum of its members. In your case, 4 bytes. You currently provide 8 bytes of memory. Try reducing the size of the union to 4 bytes.
- 1
-
+1 for Unbundle. It it simple, requires less code and you understand immediately that these elements belong to the current class. They are also easier to maintain in case you ever feel the need to change the name or type of an element and work well with In-Place Element Structures in Unbundle-Bundle-Scenarios.
- 1
-
A few month later, this is what Bing Image Creator produces for the same input:
Can confirm, wires everywhere...
-
13 hours ago, Mahbod Morshedi said:
I have heard that converting everything to a class is the best approach
Not like this
13 hours ago, Mahbod Morshedi said:, but I am unable to find any suitable resources or examples for it. Most of the available information pertains to simple and uncomplicated data types.
Because that is the goal; break down your complex and complicated data types into simple and uncomplicated ones.
For configuration data you could maintain the path to the storage location and load the data as needed.
- 1
-
9 hours ago, mwebster said:
Not sure why ROLLBACK TO X didn't close the transaction, but that was the root cause.
This is explained in the SQLITE help pages: https://www.sqlite.org/lang_savepoint.html#savepoints
QuoteThe ROLLBACK TO command reverts the state of the database back to what it was just after the corresponding SAVEPOINT. Note that unlike that plain ROLLBACK command (without the TO keyword) the ROLLBACK TO command does not cancel the transaction. Instead of cancelling the transaction, the ROLLBACK TO command restarts the transaction again at the beginning. All intervening SAVEPOINTs are canceled, however.
- 1
-
Sounds like an uncommitted transaction. Make sure you have committed all transactions before closing the file. Uncommitted transactions are lost.
- 1
-
This appears to be a known issue in LabVIEW 2021 SP1.
QuoteLabVIEW 2021 SP1 causes an increase in the memory usage of some applications unnecessarily over time.Workaround:
You can disable the performance optimization which caused the memory leak by adding "MemoryManger.UseMasterPointerPool = FALSE" to the LabVIEW INI file. LabVIEW 2021 SP1 f1 patch fixes the issue by disabling the performance optimization by default.https://www.ni.com/de-de/support/documentation/bugs/22/labview-2021-sp1-known-issues.html
- 2
-
For future reference: https://download.ni.com/#support/daq/pc/ni-daq/daqmx/
It appears they moved their old ftp server to that site.
- 2
-
4 hours ago, bsvingen said:
Please note that moving forward from LabVIEW 2022 Q3 you can only purchase LabVIEW Application Builder via LabVIEW Professional Development System.
Okay, wow! This is just awful.
4 hours ago, bsvingen said:Are there any other way to get around this, other third party builders, or anything?
Community edition is equivalent to professional... just saying...
-
This might be an issue with environment variables. Your application runs with whatever environment variables exist at the time it was launched and cuda is only added to PATH during its installation.
QuoteBy default, where searches the current directory and the paths that are specified in the PATH environment variable.
It should work if you specify the path explicitly (or somehow reload environment variables).
-
3 hours ago, hooovahh said:
Why does everyone have problems downloading this except me?
Your download works fine but only for signed-in users. Also, the error message could be misleading:
Set While Loop Timing Without Delay Function?
in LabVIEW General
Posted
I agree, without any code it is difficult to explain how your particular VI works.
That said, when using DAQmx you can just define the sample rate of your task and request the desired number of samples in order to achieve the desired loop time.
Here is an example that reads a voltage from a channel at a rate of 1000 Hz, 500 samples at a time.
The read function is blocking, so the loop runs at exactly 500 ms intervals.
Timing Example.vi