Posts posted by TomOrr0W
During Q&A in one of his "An End to Brainless Programming" presentations, @Darren mentioned that classes wrapping any references should only contain references (From the 2020 GLA Summit - see https://youtu.be/pS1UBZzKl9k?t=1741). This makes sense to me to some degree, as usually you don't want any associated data to be no longer synchronized with an internal reference after branching a wire.
It is still a new concept to me, though - if people are willing, I would like to hear more discussion/reasoning on the topic before I wholeheartedly adopt it as a personal rule.
Do you know of any other forum posts/whitepapers/recorded presentations on the topic - @Darren mentioned @Aristos Queue having talked about this before? Do you agree with this as a general rule? I assume that any classes containing an object that wraps references also should only contain references - is this correct? Should this rule also apply to normal clusters containing references? Can you think of any exceptions that might make a class with both value and reference data appropriate?
I did look through some NI APIs for exceptions, and found a couple in the Actor Framework's message classes: Actor Framework.lvlib:LastAck.lvclass wraps a by-val error cluster along with some objects containing only references (Actor.lvclass and Message Enqueuer.lvclass); Actor Framework.lvlib:Launch Nested Actor Msg.lvclass wraps a by-ref actor.lvclass with some by-val data.
Could you post the bug here on the dark side: Monthly bugs for 2021 - NI Community once you get confirmation/a bug number from NI?
LAVA opens fine for me in Microsoft Edge and in Google Chrome. Note that I am only signed in in Edge, however.
19 hours ago, ThomasGutzler said:
I replied with an example on the relevant thread on the JKI forum
You might want to post a link to this thread in that thread. The attachment is listed as unavailable - the error message says "This attachment is not available. It may have been removed or the person who shared it may not have permission to share it to this location". Brian's original attachment is also listed as unavailable.
Maybe that was JKI's problem all along - they wonder why no one sends them examples while not realizing that they don't allow anyone to post code.
@ShaunR: Were you referring to VI Macros when you mentioned LV 2009?On 10/28/2019 at 6:31 PM, Aristos Queue said:
Malleable VIs, not VI macros. VI macros is a never-released, LV2016-and-earlier prototype feature.
It looks like the issue is putting nested VIMs in a class. See https://forums.jki.net/topic/2641-vi-calling-vim-fails-to-build-fixed-in-vipm-2017f1/ and https://forums.ni.com/t5/LabVIEW/VI-Package-Manager-Fails-to-Build-with-Malleable-VIs-VIMs/td-p/3871468.
@Jim Kring If you are still looking for a simple reproducing case of this bug, here is one.
I get the same errors as you in both LV2019 SP1 64-bit and LV2019 SP1 with VIPM 2019.0.0.
@drjdpowell was able to build a VIPM package that uses nested VIMs. See https://lavag.org/topic/21268-malleable-buffer-seeing-what-vims-can-do/
15 hours ago, drjdpowell said:
If you do this, you still end up with a broken buffer wire (you just also get a broken data wire if you choose to incorrectly wire in a scalar). Note that the type of the output wire now matches the input wire now instead of being a DVR. I am using LV2019 64-bit in case 2018 32-bit has a different implementation.
If you then convert the malleable vi to an instance vi or copy the type specialization node into the top-level vi, both wires unbreak. Also note that nothing changes if you also do the same change (adding a third case with a passthrough on top and broken data wire on bottom) on the Add to Buffer (By Value).vim called in the Type Specialization  and  cases.
I haven't tried an offline install or non-standard location install of any of the NIPM products yet, so I can't help you on the main issues. Wiping all prior NI software (one thing NIPM makes easy is uninstalling everything but itself) before installing LV2019 seemed to work well for me on a couple testers.
You mentioned LV2019 SP1, which might have some more caveats for offline installs. NI changed their license manager again with that version - I would be interested to see if it works offline at all (there seems to no longer be a way to cancel the activation login dialog and enter codes, but maybe something will change when offline):
I've felt for a while now that the NI License Manager 4.x versions are vastly inferior to the 3.x versions.
I played around with the continuous and finite examples using a 9205 (mine is in a 9178 chassis, but that shouldn't matter), and analog start triggers configured on the same AI as the task's first channel seem to work for RSE continuous measurements, but not differential measurements. They also seem to work for Differential finite measurement, but trigger off the channel configured, not the differential pair. Continuous differential measurements exhibit the same behavior in NI's examples as in your code.
A continuous measurement doesn't make much sense for your application, as you are only measuring once after the trigger.
Once you do get triggering working, you may be able to use DAQmx connect terminals to route the AnalogComparisonEvent (you can find this if you enable advanced terminals in the I/O Name Filtering) to another card, which could then be used to drive circuits without any software timing involvement. If you change to the 9178 or 9179 chassis, one of these terminals could be the BNC connections on the chassis itself.
Try running VIPM as an administrator.
I have had similar issues happen when trying to install packages that were cached from the tools network by another user. Cached packages (and some other VIPM settings, I would assume) are stored in %ProgramData%, and Windows 10 seems to think that you shouldn't be able to access files in program data created by (in this case downloaded by) another user.
I don't know of any ready-built solutions, but I did come up with the idea below when you mentioned not wanting to reorder (there may be a way to do this with channel wires, but I am not really familiar with that feature) (vi is also attached, saved to LV2018):
I realized you might be including the menu bars, tool bars, and resize handles in the size. I tried turning them off on the 2018 vi, and it still doesn't generate an error (FP.PanelBounds = FP.WinBounds = 100-100-101-101).
I am able to set panels to 1x1 in Windows 10, LabVIEW 2016-2018. Note that the VI saves with size 1x1, but the panel widens to show the run button when you open the vi.
In some subpanel code I am working on in LabVIEW 2016, I found that any pane containing subpanels set to fit control to pane can't shrink below 5x5 without throwing error 1.
Looking at the readme files, LabVIEW 2015 SP1 is also supported on WIndows 10 (http://www.ni.com/pdf/manuals/374715d.html) if you have issues with the 2016 versions.
3 hours ago, Michael Aivaliotis said:
Second bottleneck, and the biggest hurdle, is that in order to subscribe to a repo you need a Pro license.
Has JKI ever mentioned why they chose to have this restriction?
I would ask the question on their forums, referencing this thread, but I don't really want to keep track of another forum account just to ask one question.
My apologies if this is browser-specific (I am using Microsoft Edge).
I have noticed that topics being moved to another forum make it so their original forum stays marked as unread even after you click on all the topics (including the moved one). You can use Mark Site Read to clear this state, but it seems like a forum bug.
All LabVIEW General topics have been read but a topic was recently moved (in the red box):
Yet LabVIEW General is listed as unread on the main page:
I tested this on some versions I have access to:
2009: No Error Prompt (Yes, I double-checked that Automatic Error Handling was turned on)
2015: Error Prompt Appears
2017: Error Prompt Appears
2018: Error Prompt Appears
Assuming your pulse is a pulse on the strain gauge itself and not the lightbar, the specifications of the hardware you selected should be capable of capturing a pulse in that range. I would recommend taking buffered measurements with a Windows system. If you need to react to this pulse as it occurs, you may need a real-time system instead.
The NI 9237 can capture at 50 kS/s (or 20 us per sample) - http://www.ni.com/pdf/manuals/374186a_02.pdf. This is more than enough to detect your pulse without aliasing (>2 times the frequency) and to give a decently accurate representation of the signal (>10 times the frequency - http://www.ni.com/white-paper/13655/en/).
The NI 9425 is less clear, but it appears to be able to measure down to 8 us per sample - http://www.ni.com/pdf/manuals/373782b_02.pdf. However it may not be capable of buffered measurement (https://forums.ni.com/t5/Digital-I-O/Can-NI-9425-DI-be-buffered/td-p/3368527).
I can confirm this with LV2009 (32-bit) and LV2018 f1 (32-bit). This is from fresh vis, not copying one of the snippets in the thread.
For Darren, if you try to wire from the constructor, you cannot find the terminals. It is only if you create another object and try to wire it to the constructor that you can connect to the terminals (or if you try to wire one of the other terminals on the constructor to the hidden ones). Also, their vertical location is in the center of the constructor, so if you are trying to connect to the top, it will appear that they don't exist.
If I am reading the directions correctly, you can break this reading up into sections:
(character 1) T1 Polarity = +
(characters 2-7) T1 Value = 0x0056A4 = 22180
(character 8) Thermocouple Type = K
(character 9) T2 Polarity = +
(characters 10-15) T2 Value = 0x005640 = 22080
(character 16) Unknown = _
(character 17-22) Timer =000353
(character 23-30) Meter Status = ________
(character 31) = Carriage Return (part of a new line character)
(character 32) = Line Feed (also part of a new line character)
The calculation shown is to convert a hex value to a decimal value and scale it into an actual temperature (divide by 1000). Mentioning MSD and LSD is just so you can order the Hex value correctly when converting to decimal.
0x0056A4 = 0 * 16^5 + 0 * 16^4 + 5 * 16^3 + 6 * 16^2 + A * 16^1 + 4 * 16^0 = 0 * 1048576 + 0 * 65536 + 5 * 4096 + 6 * 256 + 10 * 16 + 4 * 1 = 0 + 0 + 20480 + 1536 + 160 + 4 = 22180
Your temperatures are 22.180 and 22.080 (not sure what unit; probably degrees Celsius).
In LabVIEW, you can use code similar to the following to make the conversion:
I finally decided to put an idea up on NI’s idea exchange to improve the process of activating NI Software via web page here (they broke some things when switching to NILM 4): https://forums.ni.com/t5/Additional-NI-Software-Idea/Bring-Back-the-Web-Page-Activation-Link-in-NI-License-Manager/idi-p/3791221
I also noticed a couple good License Manager ideas by others:
https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Smartphone-application-to-activate-NI-Software/idi-p/2161064 (already mentioned earlier in this thread by its creator, Antoine Chalons)
Does anyone have a method for preventing a class from being inherited by other classes in LVOOP?
This question came up while researching Object-Oriented API Design guidelines, one I came across in text-based languages was "Design and Document for Inheritance or Else Prohibit it" (see Slide 26 of http://lcsd05.cs.tam...des/keynote.pdf; there is also a video of the presentation on YouTube). In the case of classes that are reused within a team or publicly distributed, the issues discussed there with changing implementation details in the class being distributed potentially breaking children seems to still be valid in LabVIEW.
Objects Containing References - Discussion
in Object-Oriented Programming
Crossposted to the NI forums here: https://forums.ni.com/t5/LabVIEW/Objects-Containing-References-Discussion/m-p/4127970