<?xml version="1.0"?>
<rss version="2.0"><channel><title><![CDATA[Application Design &amp; Architecture Latest Topics]]></title><link>https://lavag.org/forum/9-application-design-amp-architecture/</link><description><![CDATA[Application Design &amp; Architecture Latest Topics]]></description><language>en</language><item><title>Unicode Display (TabControl and Tree Menu)</title><link>https://lavag.org/topic/59199-unicode-display-tabcontrol-and-tree-menu/</link><description><![CDATA[<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<span>Hello,</span>
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<span>I am currently experiencing an issue in my application developed using LabVIEW 2024,</span>
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<span>My project is configured as a multilingual application. However, when I convert strings to Unicode, I encounter a display problem in the TabControl and the Tree menu components. After the Unicode conversion, the text is replaced by blank spaces instead of displaying the expected values,</span>
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<span>Could you please advise on the recommended solution to preserve the correct values and ensure proper Unicode character display in these controls?</span>
</p>

<div style="background-color:#ffffff;color:#333333;font-size:16px;text-align:left;">
	<span style="background-color:#ffffff;color:#333333;font-size:16px;text-align:left;"><span> </span></span><span><span><span>https://forums.ni.com/t5/image/serverpage/image-id/353696iA182204E1B54555B/image-size/large?v=v2&amp;px=999</span></span></span><span><span><span><span>https://forums.ni.com/html/assets/iconmonstr-external-link-thin.svg</span></span><span>https://forums.ni.com/t5/image/serverpage/image-id/353698i16D2AA03F67605E6/image-size/large?v=v2&amp;px=999</span></span></span>
</div>
<p>
<a class="ipsAttachLink" href="https://lavag.org/applications/core/interface/file/attachment.php?id=22694&amp;key=51286899462af52a03af733474e07307" data-fileExt='vi' data-fileid='22694' data-filekey='51286899462af52a03af733474e07307'>TabControl V 2016.vi</a></p>]]></description><guid isPermaLink="false">59199</guid><pubDate>Thu, 26 Feb 2026 23:28:52 +0000</pubDate></item><item><title>Software architecture for modular measurement system in a battery and electronics testing laboratory</title><link>https://lavag.org/topic/56385-software-architecture-for-modular-measurement-system-in-a-battery-and-electronics-testing-laboratory/</link><description><![CDATA[<p>
	Greetings, <br />
	<br />
	To set the scene, our University wants to build a laboratory where we can test batteries and electronic devices with our equipment. Just to list a few of them we have: <br />
	- Climate chamber<br />
	- cRIO-9039 for data acquisition and safety control<br />
	- Electronic load<br />
	- Multiple power supplies<br />
	- Multimeters<br />
	- Oscilloscope<br />
	- LCR meter<br />
	- EIS measurement instrument<br />
	and so on.... <br />
	<br />
	All of these devices can be interfaced through LabVIEW, and I am certain that this list will increase in the future. <br />
	The main concept:<br />
	- We have a sotfware, where we can create the test sequence, step by step (i.e.: Configure powersupply, delay(ms), enable ps. output, delay(ms), disable output ). The output would be a recipe file, which include each step, and its parameters.<br />
	- The main software, where you can import the test sequence, and execute it. The sequences can include multiple measurement instruments. The data logging is continuous.  If there is an emergency, the measurement is aborted. <br />
	   The imported sequence file would be executed step by step in a case structure (or if there is any other possibility). <br />
	<br />
	<br />
	My question is: What kinf of architecture would be suitable for the main software? I have already developed larger applications using QMH, but I have experienced its limitations. Im also looking at OOP concpets, but I have no experience with i so far. <br />
	I know that TestStand is similar to our needs, but currently we dont have a budget to purchase it.<br />
	<br />
	Thank you for your help
</p>
]]></description><guid isPermaLink="false">56385</guid><pubDate>Thu, 20 Mar 2025 09:06:24 +0000</pubDate></item><item><title>How to implement fractional decimation with 32SPC?</title><link>https://lavag.org/topic/54406-how-to-implement-fractional-decimation-with-32spc/</link><description><![CDATA[<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	Hello there,
</p>

<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	I have a problem that I can't solve on my own, and I hope to find the answer here from you.
</p>

<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	Now, I need to upgrade a product's functionality, which requires using LabVIEW's built-in fractional decimator or interpolator sub-VIs, but they only support a maximum of 16 parallel channels, whereas I need 32 SPC.
</p>


	<a href="https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-32cn8uozfsle1.png?width=1533&amp;format=png&amp;auto=webp&amp;s=fa46059a51b97eb14ab914ad698c8a15d2ed74c8" rel="external nofollow" title="Image from r/LabVIEW - How to implement fractional decimation with 32SPC?"><span>https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-32cn8uozfsle1.png?width=1533&amp;format=png&amp;auto=webp&amp;s=fa46059a51b97eb14ab914ad698c8a15d2ed74c8</span></a>


<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	I have a project called "IP Test" that uses 16 SPC fractional decimator, and it runs on the PXIe-7915.
</p>


	<a href="https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-ucua5z9vgsle1.jpg?width=3024&amp;format=pjpg&amp;auto=webp&amp;s=8460e92df12f5d7588f77d84e41a2e2557360afb" rel="external nofollow" title="Image from r/LabVIEW - How to implement fractional decimation with 32SPC?"><span>https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-ucua5z9vgsle1.jpg?width=3024&amp;format=pjpg&amp;auto=webp&amp;s=8460e92df12f5d7588f77d84e41a2e2557360afb</span></a>


<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	Here is the main interface. After running the program and triggering with the decimat.rate, you can see the IQ waveform.
</p>


	<a href="https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-0tw4vjifhsle1.jpg?width=4032&amp;format=pjpg&amp;auto=webp&amp;s=b609d0b6dbf0fe61975a4ab9c09f2230375295c2" rel="external nofollow" title="Image from r/LabVIEW - How to implement fractional decimation with 32SPC?"><span>https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-0tw4vjifhsle1.jpg?width=4032&amp;format=pjpg&amp;auto=webp&amp;s=b609d0b6dbf0fe61975a4ab9c09f2230375295c2</span></a>


<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	In the following FPGA Main.vi program, I set the I channel to a DC value of 0.5 and the Q channel to 0. After passing through the frequency shift module, the output is connected to the data in interface of the 16 (or <span class="ipsEmoji">😎</span> SPC fractional decimator.
</p>


	<a href="https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-y1aaxz46jsle1.png?width=1647&amp;format=png&amp;auto=webp&amp;s=b522436e22917b2f89d46869c57708f044119a3d" rel="external nofollow" title="Image from r/LabVIEW - FPGA Main.vi"><span>https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-y1aaxz46jsle1.png?width=1647&amp;format=png&amp;auto=webp&amp;s=b522436e22917b2f89d46869c57708f044119a3d</span></a>

	
		FPGA Main.vi
	


<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	In my understanding, this program sends 16 IQ data points (16 SPC) in parallel to the fractional decimator during each cycle. It can be seen that the frequency shift module supports 32 SPC, but the fractional decimator does not. This is the problem I need to solve.
</p>


	<a href="https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-kwncautwmsle1.jpg?width=4032&amp;format=pjpg&amp;auto=webp&amp;s=f9f716e38a8076846291b4176757c7f74c08ec45" rel="external nofollow" title="Image from r/LabVIEW - How to implement fractional decimation with 32SPC?"><span>https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-kwncautwmsle1.jpg?width=4032&amp;format=pjpg&amp;auto=webp&amp;s=f9f716e38a8076846291b4176757c7f74c08ec45</span></a>



	<a href="https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-fn0pnaeblsle1.png?width=1841&amp;format=png&amp;auto=webp&amp;s=683f0970ec9f65f87e0c957771c6b347095a5ee8" rel="external nofollow" title="Image from r/LabVIEW - frequency shift"><span>https://preview.redd.it/how-to-implement-fractional-decimation-with-32spc-v0-fn0pnaeblsle1.png?width=1841&amp;format=png&amp;auto=webp&amp;s=683f0970ec9f65f87e0c957771c6b347095a5ee8</span></a>

	
		frequency shift
	


<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	I’m thinking if I can use two 16 SPC fractional decimators, where in one cycle, the first 16 data points are sent to the first fractional decimator, and the next 16 data points are sent to the second fractional decimator. This way, 32 IQ data points (32 SPC) can be processed in one cycle. However, I’m not sure how to program this, so I hope someone can help me, or if you guys have other ideas.
</p>

<p style="background-color:#ffffff;color:#2a3c42;font-size:14px;">
	Any help appreciated. Best regards.
</p>
]]></description><guid isPermaLink="false">54406</guid><pubDate>Tue, 04 Mar 2025 01:22:59 +0000</pubDate></item><item><title>New icons for Messenger Library</title><link>https://lavag.org/topic/53489-new-icons-for-messenger-library/</link><description><![CDATA[<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<span>I </span>have put some effort into improving the VI icons in Messenger Library, in hopes of making things clearer.  I have particularly been trying to get rid of the magnifying glass icon, which was standing in for too many concepts.   I have also tried to improve the Palettes by putting the standard VIs (that one would most commonly use) in the root-level palette:
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="22235" data-ratio="56.43" width="638" alt="image.png.301424a19415ce5ea482bc7d3ecdc40e.png" data-src="https://lavag.org/uploads/monthly_2024_12/image.png.301424a19415ce5ea482bc7d3ecdc40e.png" src="https://lavag.org/applications/core/interface/js/spacer.png" />
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	 
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	The 2.0 version also introduces Malleable API methods (the orange-coloured ones), which make code cleaner.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	If anyone could spare some time, it would help me to have feedback.  Especially from people who have not used Messenger Library before, so I can get an idea if the key concepts come across.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	New 2.1.3 version is available here: <a href="https://forums.ni.com/t5/JDP-Science-Tools/New-icons-for-Messenger-Library/m-p/4412550#M192" rel="external nofollow">https://forums.ni.com/t5/JDP-Science-Tools/New-icons-for-Messenger-Library/m-p/4412550#M192</a>
</p>
]]></description><guid isPermaLink="false">53489</guid><pubDate>Tue, 03 Dec 2024 17:25:51 +0000</pubDate></item><item><title>Get references to front panel cluster objects?</title><link>https://lavag.org/topic/2866-get-references-to-front-panel-cluster-objects/</link><description><![CDATA[<p>I know how to programmatically get references to controls/indicators on the front panel but is it also possible to (recursively) get references to the controls <span style="text-decoration:underline;">within</span> a cluster control on the front panel?</p>
<p>Nevermind. I just found the answer. If you know that a front panel object is a cluster then it is possible to typecast its generic front panel reference (if it is generic) to a specific cluster reference and then use a cluster-specific property to get the cluster members.</p>
]]></description><guid isPermaLink="false">2866</guid><pubDate>Tue, 31 Jan 2006 15:56:24 +0000</pubDate></item><item><title>Implementing UNDO in my application UI.</title><link>https://lavag.org/topic/22148-implementing-undo-in-my-application-ui/</link><description><![CDATA[<p>
	I wanted to get some input from the group on how others have implemented "undo" in their LabVIEW applications. Of course this will vary depending on what the application does. However, i wonder if there are any design patterns out there that I could model after. 
</p>
]]></description><guid isPermaLink="false">22148</guid><pubDate>Mon, 26 Jul 2021 06:27:49 +0000</pubDate></item><item><title>Problem with the root actor taking too long to launch</title><link>https://lavag.org/topic/24004-problem-with-the-root-actor-taking-too-long-to-launch/</link><description><![CDATA[<p>
	I'm in charge of developing a sequence editor at my company, and I've noticed that the application I'm developing takes an unusually long time to start up taking about six or seven seconds, is it because I'm nesting too many actor in my program?
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">24004</guid><pubDate>Mon, 03 Jun 2024 03:19:41 +0000</pubDate></item><item><title>How do I avoid coupling modules together by data type?</title><link>https://lavag.org/topic/23489-how-do-i-avoid-coupling-modules-together-by-data-type/</link><description><![CDATA[<p>
	Hi All,
</p>

<p>
	I'm writing (what I hope is nice) modular code, trying to modularise functions and UIs etc accross the applications we're developing to keep things nice and flexible. But I'm struggling to keep individual modules "uncoupled" - or rather not all interdependent on each other. 
</p>

<p>
	Example - I have module for communicating with an oscilloscope to capture waveforms. I create a typedef in that module for passing out those waveforms and related information to another module, which sends them on to a storage module and a waveform processing module (where I do various things to the raw waveform) and then finally out to a waveform display module... 
</p>

<p>
	So my question becomes "who should own the waveform data typedef" - the easiest thing to do is make sure the input side of any module's API accepts the output of the API producing the data... so if it sits in the acquisition module library at the "source" of the data, then assuming I dont keep translating to different data types, all of my other modules end up dependent back to there too - e.g. my waveform processing and display modules now depend on the acquisition module - but I might want to write a post processing and display application that needs to know how to process waveforms, but I dont want to have to include the waveform acquisition module with that as it wont be acquiring anything...
</p>

<p>
	I'm sure there's lots of options, and this post is really to try and find some I havent thought of yet!
</p>

<p>
	I know I could create the typedef in it's own library or even outside of any library, then the users of that typdef are not dependent on each other (I think that's basically a form of dependency inversion?). But then that gets hard to manage and leads to the idea of a "common data types" library, which can quickly grow to lots of other things and more types of coupling in a way.
</p>

<p>
	I could translate the typedef as it passes through a chain of modules so that each module defines the way it expects to receive the data, and then a tree type module hierarchy limits the coupling... but that always feels somewhat inefficient - and I want one waveform data type, not 4 depending on where I am in the application.
</p>

<p>
	My situation is marginally complicated as well since we're using PPLs and some of my data types are now classes, so they need to be inside a PPL somewhere and then used from there (and its a pain we cant build a packed class without first wrapping it in a project library...)
</p>

<p>
	So yes - how do you all manage your typedefs and classes that get used across module boundaries to minimise those dependency issues!? 
</p>

<p>
	 
</p>

<p>
	Thanks in advance, sorry for the slightly rambly post!
</p>
]]></description><guid isPermaLink="false">23489</guid><pubDate>Fri, 29 Sep 2023 12:10:35 +0000</pubDate></item><item><title>Where to put settings modules in my DQMH program?</title><link>https://lavag.org/topic/23462-where-to-put-settings-modules-in-my-dqmh-program/</link><description><![CDATA[<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	Hello all,
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	I'm copying this question from my post on the ni forums because this seems like a more appropriate place for it.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	I am somewhat new to DQMH and for my first project I've decided to make my testbed software compatible with future projects so I am making it as modular as I can. Modules contained within include <strong>Camera</strong>,<span> </span><strong>Stage<span> </span></strong>(which is a cloneable abstraction layer for a Zaber stage. Cloneable as to allow multiple axes in the future), <strong>Test</strong>, and a <strong>Model</strong><span> </span>module. Eventually once I make the UI I'll have a whole MVC architecture going on and I'll make that good and nice. Camera, Stage, and Test each have their own settings which are required, and I have made a <strong>Camera Settings </strong>and a <strong>Stage Settings (cloneable)</strong><span> </span>module as well (haven't gotten to test yet). These are required for reading the ini files containing the VISA sessions, baud rates, microstep sizes, IMAQdx settings, etc.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	 
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	Without the data from the ini files, there's really nothing for the hardware modules to use, so I would like to have the gathering of settings information in the init message case. From what I can see, I have two options as to how to lay out the program. My initial thought is to have the modules for settings launched by each individual hardware module.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	 
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="17964" data-ratio="60.69" width="1200" alt="618099389_Screenshot2023-09-06095832.png.7208ee1c2ef8f602db13f4f6d12ce76f.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2023_09/618099389_Screenshot2023-09-06095832.png.7208ee1c2ef8f602db13f4f6d12ce76f.png">
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	 or I can have settings be given to the hardware modules by main. This avoids having a bunch of layers, and sticks with the philosophy of having everything sent through the controlling module.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="17965" data-ratio="51.31" width="1200" alt="1081818717_Screenshot2023-09-05114647.png.24af3731b47ed7cbea67499660c2d47a.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2023_09/1081818717_Screenshot2023-09-05114647.png.24af3731b47ed7cbea67499660c2d47a.png">
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	I'm really not sure what the smart way to do this is. Especially with the cloneable stage module where each clone will need to be given a single clone of the settings module. 
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	 
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	Additionally, I'm not sure how much work the init message should be doing in terms of loading these ini files. Good design philosophy tells me that it makes the module more atomic to have a separate config case, but realistically, there should be no reason for a stage module to change which hardware stage it's connected to, so I don't really want to include a configuration in the API when it can all be done at module startup.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	 
</p>
]]></description><guid isPermaLink="false">23462</guid><pubDate>Thu, 07 Sep 2023 14:00:03 +0000</pubDate></item><item><title>Program architecture</title><link>https://lavag.org/topic/23456-program-architecture/</link><description><![CDATA[<p>
	Hello everyone
</p>

<p>
	I always wonder about the best method to use for data acquisition, filtration, formatting, calibration, etc... when using several different types of communication. 
</p>

<p>
	Where can I find examples to inspire me? 
</p>

<p>
	For example : <br />
	I have : <br />
	- an electronic board with 8 analog inputs, 3 analog outputs, 10 digital outputs and 5 digital inputs.<br />
	- an RS485 link with 5 Keller pressure sensors and 2 Bronkhorst flowmeters<br />
	- A CAN link with 6 SEW drives<br />
	- ModbusTCP link with 3 Kollmorgen drives<br />
	- Etc...
</p>

<p>
	I use a lot of different equipment, with different communications. And I'd like to be able to make an adaptable program that can also store component lifetimes (number of solenoid valve openings, number of input and sensor activations if replaced before the board).
</p>

<p>
	Another example of hesitation:<br />
	For a TCP-IP communication with 5 sensors, is it preferable to make a Vi that communicates with everyone, or 1 Vi re-entering with 5 instances in memory?
</p>

<p>
	I've started to make Objects, 1 Hardware, 1 Communication, I was thinking of making 1 for scales, 1 for filtration and for calibration... but I'm always a bit afraid of being on the wrong track... and I spend a lot of time... 
</p>

<p>
	<br />
	Do you have any advice, examples or anything else that might help me? 
</p>
]]></description><guid isPermaLink="false">23456</guid><pubDate>Tue, 05 Sep 2023 07:27:21 +0000</pubDate></item><item><title>Windows system GDI object limit problem</title><link>https://lavag.org/topic/23383-windows-system-gdi-object-limit-problem/</link><description><![CDATA[<p>
	I have developed a large application using labview, in this project there are more than 3000 labview files! During the process of building the application LabVIEW crashed, later I found out that the reason for the crash of labview is that during the process of building the application the GDI objects of the labview <span style="background-color:#ffffff;color:#161616;font-size:16px;">session</span> exceeded 10000, later I changed the system parameters of windows to solve the problem, but if I continue to develop on this project does it end up with labview is not able to build the application, how can I go about solving this problem.
</p>

<p>
	 
</p>

<p>
	<a href="https://learn.microsoft.com/en-us/windows/win32/sysinfo/gdi-objects" rel="external nofollow">GDI Objects - Win32 apps | Microsoft Learn</a>
</p>
]]></description><guid isPermaLink="false">23383</guid><pubDate>Wed, 26 Jul 2023 02:00:34 +0000</pubDate></item><item><title>Follow Reference in vi</title><link>https://lavag.org/topic/23097-follow-reference-in-vi/</link><description><![CDATA[<p>
	Hi there,
</p>

<p>
	I am wondering if there is a way to "follow" Wires/References through a project?
</p>

<p>
	 
</p>

<p>
	In the last months I got a few requests to kinda refactor old code, for that I would like to get a list of all VIs which are connected on a specific wire.
</p>

<p>
	 
</p>

<p>
	For example to get all commands which are sent to a device.
</p>

<p>
	 
</p>

<p>
	Bonus: this function can handle following the same reference even if the reference is shared over the whole project via locals...
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	thanks in advance
</p>
]]></description><guid isPermaLink="false">23097</guid><pubDate>Mon, 03 Apr 2023 08:06:38 +0000</pubDate></item><item><title>Instrument simulator - command interpreter</title><link>https://lavag.org/topic/22908-instrument-simulator-command-interpreter/</link><description><![CDATA[<p>
	Hello All.
</p>

<p>
	I have the need for instrument simulators, that I can use while developing and the instruments are not physically available.
</p>

<p>
	Think of any RS232, or ETH instrument: dmm, motion controller, hardware interface, sensor, whatever.
</p>

<p>
	I would like to have a piece of software that I would "connect" to and send commands. This sw would basically do syntax checking and reply with error codes in case of invalid syntax or with some 'valid' reply - a 'simulated' dmm would reply with a random value (maybe within a range). [I know of IVI instrument simulator, but this offers a limited number and, most often, my instruments are not IVI/SCPI compatible].
</p>

<p>
	Now, the main issue is that I would like to avoid writing a specific simulator for every instrument I come across with; it would be time consuming and error prone, defeating the whole purpose of working with simulators (which is mainly getting ahead and saving time, while waiting for instruments to become available).
</p>

<p>
	I would like to have the syntax specified in a text file (I know the commands syntax from the instrument manual, much like: CMD param1 -OPT1=param2... etc.). It resembles what command line interpreters, language compiler preprocessors do, based on a syntax/grammar description (abstract syntax tree?).
</p>

<p>
	Searching on the net gives out a lot of stuff; however everything is specifically targeted for for windows, linux and other programming languages.
</p>

<p>
	I could not find anything "programmable" or general purpose.
</p>

<p>
	I came across a couple of posts - <a href="https://lavag.org/topic/10040-exterface-architecture/#comment-60273" rel="">Exterface</a> by <strong style="background-color:#ffffff;color:#353c41;font-size:14px;"><a data-ipshover="" data-ipshover-target="https://lavag.org/profile/7603-daklu/?do=hovercard&amp;referrer=https%253A%252F%252Flavag.org%252Ftopic%252F10040-exterface-architecture%252F" href="https://lavag.org/profile/7603-daklu/" rel="" style="background-color:transparent;color:inherit;" title="Go to Daklu's profile">Daklu</a></strong> and <a href="https://lavag.org/topic/18808-gold-parser-engine/" rel="">Gold Parser Engine</a> by <strong style="background-color:#ffffff;color:#353c41;font-size:14px;"><a data-ipshover="" data-ipshover-target="https://lavag.org/profile/53215-taylorh140/?do=hovercard&amp;referrer=https%253A%252F%252Flavag.org%252Ftopic%252F18808-gold-parser-engine%252F" href="https://lavag.org/profile/53215-taylorh140/" rel="" style="background-color:transparent;color:inherit;" title="Go to Taylorh140's profile">Taylorh140</a></strong> - which seem to point in the 'right' direction but I can't seem to find any code to work on.
</p>

<p>
	Is there anyone out there that can point me towards any kind of resource - not necessarily LabView - that can perform as I "dream of" and from I can learn/use?
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">22908</guid><pubDate>Sun, 05 Feb 2023 14:45:10 +0000</pubDate></item><item><title>The property node design pattern where you edit a parameter by selecting which one is "active" is a horrible design</title><link>https://lavag.org/topic/22797-the-property-node-design-pattern-where-you-edit-a-parameter-by-selecting-which-one-is-active-is-a-horrible-design/</link><description><![CDATA[<p>
	I just got hit by this bug. My writer below works fine (never exits) as long as I don't start enable the reader (top loop). I see my error now but the design was ripe for it.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://lavag.org/uploads/monthly_2022_11/973227837_Addingreaderbreakswriterstability.png.2b8289fc8133e7156855c2b3ed1e1853.png" data-fileid="17263" data-fileext="png" rel=""><img alt="Adding reader breaks writer stability.png" class="ipsImage ipsImage_thumbnailed" data-fileid="17263" data-ratio="47.29" width="1051" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2022_11/973227837_Addingreaderbreakswriterstability.png.2b8289fc8133e7156855c2b3ed1e1853.png"></a>
</p>
<p>
<a class="ipsAttachLink" href="https://lavag.org/applications/core/interface/file/attachment.php?id=17264&amp;key=3c289d419bfa8bde897f2cecffd921cc" data-fileext="vi" data-fileid="17264" data-filekey="3c289d419bfa8bde897f2cecffd921cc">reader breaks writer.vi</a></p>]]></description><guid isPermaLink="false">22797</guid><pubDate>Thu, 10 Nov 2022 01:36:27 +0000</pubDate></item><item><title>Labview anti-pattern:  Action Engines</title><link>https://lavag.org/topic/11603-labview-anti-pattern-action-engines/</link><description><![CDATA[<p>Recently there have been a few discussions about action engines as they relate to specific applications (<a href="http://lavag.org/topic/11578-dvr-seq-fgv-semaphores/" rel="">here</a> and <a href="http://lavag.org/topic/11523-rookie-attempt-at-inheritance/" rel="">here</a>) but the topic is broad enough that I felt it deserves it's own thread.</p>
<blockquote data-ipsquote="" class="ipsQuote" data-ipsquote-contentcommentid="69853" data-ipsquote-username="neBulus" data-cite="neBulus" data-ipsquote-timestamp="1260293969" data-ipsquote-contentapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentid="11603" data-ipsquote-contentclass="forums_Topic"><div><p>AE= Action Engine &gt;&gt;&gt; loosly a Functional Global Variable.</p></div></blockquote>
<p>Ben, you left out part of the definition...</p>
<p>AE= Action Engine &gt;&gt;&gt; loosly a Functional Global Variable <strong>and a commonly used Labview </strong><a href="http://en.wikipedia.org/wiki/Anti-pattern" rel="external nofollow"><strong>anti-pattern</strong></a><strong>.</strong>  <img src="http://lavag.org/public/style_emoticons/default/biggrin.gif" alt="biggrin.gif"></p>
<p>&lt;---Disclaimer---&gt;</p>
<p>Ben, these comments are not directed at you.  I know you're a CLA and already understand much of what I say below.  I'm simply using your comment as a springboard to jump on my soapbox.  <img src="http://lavag.org/public/style_emoticons/default/wink.gif" alt="wink.gif"></p>
<p>For those that like to use AE's, please don't take this as a personal attack; I'm referring to the AE as a programming construct and not passing judgement on anyone who uses them.  Also, this is very much an <em>opinion</em> and is based on my own observations.  My Labview experience is somewhat narrow, centering around single computer desktop applications, so there may be situations where an AE <span style="text-decoration:underline;">is</span> the best solution.  I don't claim to know all...</p>
<p>&lt;/---Disclaimer---&gt;</p>
<p>Simple functional globals have a place.  Any time a functional global crosses the line into an action engine I'm looking to replace it with a class.  Using an AE may solve the <em>immediate problem</em> sooner, but it also imposes more constraints on the unknown, future modifications.  You are painting yourself into a corner and the longer you stick with it the harder it is to get out.</p>
<p>To expand a bit on what I said about layering api's <a href="http://lavag.org/topic/11578-dvr-seq-fgv-semaphores/page__view__findpost__p__69892" rel="">here</a>, when you create an action engine you are creating a chunk of data with associated actions that apply only to that chunk of data.  Those actions define the api your AE supports.  Now suppose the AE grows to the point where you want to shift some internal behavior off to a sub vi.  Like it or not, <em>that sub vi has just become part of the public api.  </em>You cannot change that sub vi without considering how it will affect code in countless other places.</p>
<p>"But," you say, "I know that sub vi isn't supposed to be used anywhere but in the AE!"  Easy to say now.  What will you do when, in order to fill a change request, you have the choice between a quick fix by using the sub vi someplace you didn't intend 'just this once,' or a more time consuming fix by changing the behavior of the AE itself?  Furthermore, when somebody else works on that code, how do you convey to them the difference between, and enforce the correct usage of, the public api versus the private api?</p>
<p>Every VI we write is essentially a mini api.  Every action a public api exposes places constraints on how you can change that api in the future.  AQ recently talked about the problems associated with publicly accessable vis in vi.lib.  Those VIs are part of the public api even though they were not intended to be used by the public simply because they <em>can be used</em> anywhere.  Trying to add functionality to the intended public api without changing the behavior of the <em>un</em>intended public api is extremely difficult, and sometimes impossible.  Good api design involves exposing, or making available to the public, only what is necessary and no more.</p>
<p>Applications that don't use the classes or libraries are programmed with, in effect, one giant public api.  Any vi can (and probably will) be used anywhere, which often results in a very complex vi hierarchy and interactions that are difficult to disentangle.  We try to manage that complexity by organzing our projects into subfolders and using naming conventions.  Unfortunately naming conventions and disk hierarchies cannot enforce the intended usage.  For that we need classes and libraries.</p>
<p>&lt;/soapbox&gt;</p>
]]></description><guid isPermaLink="false">11603</guid><pubDate>Wed, 09 Dec 2009 16:45:37 +0000</pubDate></item><item><title>Copying change from an individual cluster element to multiple clusters</title><link>https://lavag.org/topic/22542-copying-change-from-an-individual-cluster-element-to-multiple-clusters/</link><description><![CDATA[<p>
	<strong>Basic problem:</strong><br />
	If an element of a given cluster is changed - that value, and that value change alone, should be applied to several other clusters (which will otherwise retain their other element values).
</p>

<p>
	<strong>Known solutions:</strong><br />
	In the attached file (LabVIEW 2020 code) I have two ways of doing this: 1) using dynamic events and Set Cluster Elements by Name (OpenG), or 2) by using the Cluster To Array of VData.vi (also from OpenG).  (Note: The use of array locals in the examples are there just to simplify the demo).
</p>

<p>
	<strong>Question:</strong><br />
	Are there other / better ways of doing it?
</p>

<p>
	 
</p>

<p>
	<strong>A bit more background:</strong><br />
	In configuration windows I sometimes allow users various ways to choose to apply any *changes* globally or to a selection of targets. If e.g. they want to change the baud rate of 3 out of 5 different serial links they can choose the 3 links, and if they change anything in the communication setup of the first of them it will be applied to all 3 links (the rest of their setup will remain as before (they might still have different parity settings e.g.).  I usually avoid clusters in the GUI so each change is handled individually, either in a dedicated value change event case (lots of coding needed...), or in a common case that uses the control reference to touch the correct element of the other target's configuration...(less code needed). However, in cases where the number of controls is very high, it can be nice to just have them in a cluster in the GUI as well - and to not have to write event cases to handle the change of each and every cluster element...
</p>

<p>
	<a class="ipsAttachLink" data-fileext="zip" data-fileid="16667" href="https://lavag.org/applications/core/interface/file/attachment.php?id=16667&amp;key=09746aea3eccf7107580475a316927e4" rel="">Distributing cluster changes.zip</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">22542</guid><pubDate>Wed, 18 May 2022 12:09:48 +0000</pubDate></item><item><title>Best way to merge 2 case structures with hundreds cases each.</title><link>https://lavag.org/topic/22522-best-way-to-merge-2-case-structures-with-hundreds-cases-each/</link><description><![CDATA[<p>
	I am maintaining the code of two controllers (cRIO and CVS) in a system. Each of them handle request from ethernet communication like a server with input is string data type. And each of them handle hundreds of message like that. In the future the number of commands can be increased. Now the fun part is we decide to merge these two controllers into one. I am trying to find the best way to merge these two case structures together and how to handle this better.
</p>

<p>
	I am thinking about rewriting this using inherited child class to catch each command. But as I know this only work if I use the child on the client side too. In the future if I need to developer the client by different language such as Python, I am not sure how to send the command to match with side of server.
</p>
]]></description><guid isPermaLink="false">22522</guid><pubDate>Thu, 28 Apr 2022 14:46:42 +0000</pubDate></item><item><title>Strange VI Status</title><link>https://lavag.org/topic/22518-strange-vi-status/</link><description><![CDATA[<p>
	I am staring at this:
</p>

<p>
	<img alt="266135766_StrangeVIStatus.png.33b8e5c0d1ad8533fd28b695b0a7b336.png" class="ipsImage ipsImage_thumbnailed" data-fileid="16585" data-ratio="57.96" width="1018" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2022_04/266135766_StrangeVIStatus.png.33b8e5c0d1ad8533fd28b695b0a7b336.png">
</p>

<p>
	which shows a snapshot of 3 VIs, two of them being in vi.lib/Utility/error.lib VIs (visible FP), the other one being a subVI in a library of mine.
</p>

<p>
	The snapshot illustrates the puzzling situation that I am encountering: Three Button Dialog.vi, whose state is idle as is clear from the snapshot (but is also confirmed by the LabVIEW Task Manager), is however "running" as indicated by the green arrow in the calling VI (whose BD is shown in the back).
</p>

<p>
	The "Close Notebook Dialog Window" is nothing but the Three Button Dialog CORE.vi of the error.lib library, and is also idle.
</p>

<p>
	In other words, the calling subVI is never stepping out of this situation and the only way for me to recover is to abort the VI.
</p>

<p>
	Question: <strong>how is THIS even possible?</strong>
</p>

<p>
	<u>Background information</u>:
</p>

<p>
	First of all, I wished I could boil this down to a simple example that I could share, but I haven't been able to reproduce this yet in a bare bone project.
</p>

<p>
	Now, the weird thing is that this situation occurred after what I thought would be a simple refactoring of my application, namely dynamically launching my consumer loop, which itself launches the Notebook VI whose subVI is now unresponsive.
</p>

<p>
	<u>Before</u>:
</p>

<p>
	Main launches Notebook dynamically.
</p>

<p>
	User closes Main. Only Notebook remains live.
</p>

<p>
	User clicks Notebook's "close box" which call the  3-button dialog.
</p>

<p>
	User clicks "No", Notebook closes.
</p>

<p>
	<u>After</u>:
</p>

<p>
	Main launches Consumer loop VI dynamically.
</p>

<p>
	Consumer opens Notebook dynamically.
</p>

<p>
	User closes Main which sends a "Quit" message to the Consumer loop, shutting it down. Only Notebook remains live.
</p>

<p>
	User clicks Notebook's "close box" which call the  3-button dialog
</p>

<p>
	3-button dialog is idle, Notebook is stuck waiting for it to finish.
</p>

<p>
	 
</p>

<p>
	Something is going on (or rather is not). <strong>What could it be</strong>?
</p>

<p>
	 
</p>

<p>
	LabVIEW 2021 SP1 64-bit Windows 10
</p>

<p>
	 
</p>

<p>
	Edit: I forgot to mention that none of the VIs above are re-entrant and that the 3-button dialog CORE.vi is supposed to run as a modal window.
</p>
]]></description><guid isPermaLink="false">22518</guid><pubDate>Thu, 21 Apr 2022 22:43:35 +0000</pubDate></item><item><title>Dynamic Loading Classes using Interfaces, this year I'm finally doing it...</title><link>https://lavag.org/topic/22498-dynamic-loading-classes-using-interfaces-this-year-im-finally-doing-it/</link><description><![CDATA[<p>
	Okay, this is it, I'm really going to figure out how to dynamically load my instrument classes using a factory without carrying every specific instrument class in memory when compiled. I've tried and failed in the past but this time I'm going to spend however much time it takes to get it working.
</p>

<p>
	Someone critique this architecture and tell me how far off base I am.
</p>

<p>
	I have a base Hardware class that has must overrides to instantiate the communication to the instrument, configuration of the instrument by passing in a JSON strong of config arguments, and deconstruction of the instrument. 
</p>

<p>
	I then have interfaces to represent generic instrument types, DMM, Switch, Digital Input, etc, that have overrides for their API. Then I have specific hardware that inherits the appropriate interface(s). A keithley DMM inherits DMM, an NI MIO device inherits DI, DO, AI, AO... 
</p>

<p>
	I have a hardware manager class that acts as a factory,  instantiating the classes using a config file that I want to include a key inside of that points to the specific class on disk. The hardware manager is passed to operations that use the instruments and they interact with them by casting to the type of interface they want.
</p>

<p>
	Heres some hurdles I'm having trouble conceptualizing. I have some applications that run in different labs but perform the same task with different hardware. For example, in one lab they use a Kiethley DMM with a built-in switch card, in others they use a Kiethley DMM and an NI Switch card. In the first case it's one instrument that inherits DMM and Switch, in the other it's two instruments. I guess I could have two config entries, one for DMM and one for Switch and have the factory compare addresses on instantiation and if it's already initiated communication on an address it just points to the first instance?
</p>

<p>
	And the biggest question, if the above is workable, any tips on how to get from a case structure containing every possible specific hardware class to dynamically loading them disk without putting them all into some subVI somewhere to guarantee they're loaded in memory during compile time?
</p>
]]></description><guid isPermaLink="false">22498</guid><pubDate>Mon, 11 Apr 2022 15:00:02 +0000</pubDate></item><item><title>Primer on the new Multiple Errors VIs?</title><link>https://lavag.org/topic/22467-primer-on-the-new-multiple-errors-vis/</link><description><![CDATA[<p>
	I have jumped from 2019 SP1 to 2021 SP1 and incidentally discovered the existence of new Multiple Errors VIs introduced in <abbr title="LabVIEW">LV</abbr> 2020 after listening to <a href="https://youtu.be/00TZxeyt8_A" rel="external nofollow">AQ's presentation</a> at the previous GDevCon (which otherwise went right above my head).
</p>

<p>
	The <a href="https://www.ni.com/pdf/manuals/371780t.pdf" rel="external nofollow">upgrade notes</a> only say:
</p>

<p>
	<span style="font-size:14px;"><span dir="ltr" style="font-family:sans-serif;">Multiple Errors VIs</span><br />
	<span dir="ltr" style="font-family:serif;">The Dialog &amp; User Interface palette includes the new Multiple Errors subpalette. Use the</span> <span dir="ltr" style="font-family:serif;">Multiple Errors VIs to convert an error cluster into different formats or to manipulate the</span><br />
	<span dir="ltr" style="font-family:serif;">attributes of an error cluster.</span></span>
</p>

<p>
	Digging cursorily into the VIs, I see the use of JSON instead of the ad hoc <abbr title="LabVIEW">LV</abbr> error message syntax, but I am unclear what changes (or not) as far as handling "standard" errors. I am assuming not everything has been rewritten has this would break former code (the Simple Error Handler.vi seems not to have changed and only deals with &lt;append&gt; and &lt;err&gt; syntax.
</p>

<p>
	I couldn't find anything in the examples or much in the Help.
</p>

<p>
	Do I want to add "Attributes" to an error cluster? How can I take advantage of the new features for better error reporting/formatting?
</p>
]]></description><guid isPermaLink="false">22467</guid><pubDate>Sun, 06 Mar 2022 23:00:13 +0000</pubDate></item><item><title>Application recovery</title><link>https://lavag.org/topic/22457-application-recovery/</link><description><![CDATA[<p>
	<span style="background-color:#ffffff;color:#333333;font-size:16px;text-align:left;"><font style="vertical-align:inherit;"><font style="vertical-align:inherit;">有谁知道应该如何进行应用程序恢复？</font><font style="vertical-align:inherit;">我希望应用程序在计算机突然关闭然后重新打开电源时恢复到断电之前的状态。</font></font></span>
</p>
]]></description><guid isPermaLink="false">22457</guid><pubDate>Wed, 02 Mar 2022 00:56:58 +0000</pubDate></item><item><title>Have you ditched TestStand to roll your own sequencer?</title><link>https://lavag.org/topic/20541-have-you-ditched-teststand-to-roll-your-own-sequencer/</link><description><![CDATA[<p>
	I know many people never go the route of using TestStand, choosing to roll their own sequencer and make it work (as I did once upon a time)<br>
	However I'm starting to hear from a few folks who adopted TestStand and are going back to try to make their own sequencers (as I hope to never do)<br>
	So, I shook the corporate tree some and have a meeting tomorrow for which I'm representing y'all, based on what I was hearing at NIWeek
</p>

<p>
	That being said, if any have gone the route of TS only to turn back, and you'd like your voice shared inside the guts of the mothership, please do share here.<br>
	FWIW, If you've got specifics as to why you've never tried, that would be best for another thread. Thanks for understanding
</p>

<p>
	~,~<br>
	The Captain was here
</p>

<p>
	Tag anyone you may know have done the same
</p>

<p>
	<a contenteditable="false" data-ipshover="" data-ipshover-target="https://lavag.org/profile/4959-mark-yedinak/?do=hovercard" data-mentionid="4959" href="https://lavag.org/profile/4959-mark-yedinak/" rel="">@Mark Yedinak</a><a contenteditable="false" data-ipshover="" data-ipshover-target="https://lavag.org/profile/584-mark-balla/?do=hovercard" data-mentionid="584" href="https://lavag.org/profile/584-mark-balla/" rel="">@Mark Balla</a>
</p>
]]></description><guid isPermaLink="false">20541</guid><pubDate>Wed, 30 May 2018 18:45:12 +0000</pubDate></item><item><title>Question about the JKI state machine</title><link>https://lavag.org/topic/18945-question-about-the-jki-state-machine/</link><description><![CDATA[<p>I downloaded the JKI state machine toolkit and it's quite neat. For eons, I have been using state machines following a very similar structure, but always with enums instead of strings. In simple state machine, each state would define the next one (no queue), and in more complex ones, a queue would be used to allow some states to enqueue several ones (and some wouldn't enqueue anything). But always with an enum or a queue of enums, since it seemed this would prevent typos, and allow renaming a state at only one place (the enum typedef).</p>
<p> </p>
<p>However I am tempted to make the switch since I see the value in using a tool used by other advanced developer. Where do you stand on this? Is JKI's string-based design the best way for your state machines?</p>
<p> </p>
<p>Thanks</p>
<p>Emmanuel</p>
]]></description><guid isPermaLink="false">18945</guid><pubDate>Tue, 21 Apr 2015 16:49:33 +0000</pubDate></item><item><title>DQMH - creating modules, singletons or cloneable help</title><link>https://lavag.org/topic/22213-dqmh-creating-modules-singletons-or-cloneable-help/</link><description><![CDATA[<p>
	Hey Fancy Folk,
</p>

<p>
	 
</p>

<p>
	Back at it with a question regarding DQMH and how to properly set up code.  Long story short, I am creating a "power and IG" module for some motors.  This module will contain a module for a "PS class" that I've already created (class, not module) and I'm trying to figure out if I should make the "PS class" module a singleton or cloneable.
</p>

<p>
	 
</p>

<p>
	The high level view is that the code would have a controller which requests to the "Power and IG" module which would request to the "PS class" module.  The "PS class" module would then broadcast to the "Power and IG" module which would broadcast back to the controller.  This way everything gets passed down/up 1 level at a time.  The "Power and IG" module will be cloneable because there can be multiple copies of this module for one test stand.  However, I only want each "Power and IG" module to have 1 instance of the "PS class" module.  I was originally thinking of making the "Power and IG module" cloneable but the "PS class" module singleton.  The issue I see with this is that I am going to be creating multiple singleton "PS class" modules for when I have multiple "Power and IG" modules and I think that is going to cause the code to fail.  Therefore, I am thinking about making both the "Power and IG" and "PS class" cloneable to be safe.  
</p>

<p>
	 
</p>

<p>
	Thanks,
</p>

<p>
	Matt
</p>
]]></description><guid isPermaLink="false">22213</guid><pubDate>Thu, 23 Sep 2021 13:15:26 +0000</pubDate></item><item><title>Custom subarrays</title><link>https://lavag.org/topic/22214-custom-subarrays/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	I need to do windowing on big arrays (4-D with millions of elements) which is very expensive.
</p>

<p>
	Just to illustrate what I mean by windowing.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="16177" data-ratio="34.58" width="616" alt="windowing.png.b04827a8849aa8744e89b73e2ac5828a.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/windowing.png.b04827a8849aa8744e89b73e2ac5828a.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="16178" data-ratio="45.63" width="618" alt="windows.png.bd37fec0d2fd1ea5f4891f0c182ba3bf.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/windows.png.bd37fec0d2fd1ea5f4891f0c182ba3bf.png">
</p>

<p>
	<br>
	From what I've read here and on the internet, LabVIEW stores arrays as a structure with the dimension sizes and a pointer to the first element.
</p>

<p>
	In the example 2-D Array Handle in the "External Code (DLL) Execution" vi, we can find a definition:<br>
	typedef struct {<br>
	    int32 dimSizes[2];<br>
	    double elt[1];<br>
	    } TD1;
</p>

<p>
	When we do simple operations on 1D or 2D arrays such as reverse or transpose, LabVIEW doesn't copy any data, instead it creates a structure with the information needed to read or reconstruct the array.<br>
	<a href="https://lavag.org/topic/7307-another-reason-why-copy-dots-is-a-bad-name-for-buffer-allocations/?tab=comments#comment-42542" rel="">Rolf Kalbermatter said that this information is stored in the wire Type description.</a>
</p>

<p>
	We can read this information with the vi ArrayMemInfo.<br>
	It gives the pointer to the first element, the size and stride of each dimension and the element size. The stride is the number of bytes to skip to get the next element in a given dimension.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="16179" data-ratio="77.48" width="444" alt="mem_info_bd.png.6dd5391bc44ec74f914c763957ff6da3.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/mem_info_bd.png.6dd5391bc44ec74f914c763957ff6da3.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="16180" data-ratio="52.44" width="614" alt="mem_info.png.5148f450bb7dbbbf3c6684e25407ac39.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/mem_info.png.5148f450bb7dbbbf3c6684e25407ac39.png">
</p>

<p>
	Numpy has a similar approach and this is what it gives for sizes and strides.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="16181" data-ratio="21.47" width="531" alt="strides_python.png.d9b2b8b430c0707a37d9547ce750bdb9.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/strides_python.png.d9b2b8b430c0707a37d9547ce750bdb9.png">
</p>

<p>
	We can modify it with the function "numpy.lib.stride_tricks.as_strided", and do really fast windowing thanks to it.
</p>

<p>
	The information given by ArrayMemInfo seems incorrect but assuming it's just a reading error, modifying this information would allow me to do efficient windowing and much more, like transposing or permuting N-D arrays.
</p>

<p>
	I have no idea if this is possible and even if I could change this information, I don't know if LabVIEW would have no problem interpreting it.<br>
	What do you think ?
</p>
]]></description><guid isPermaLink="false">22214</guid><pubDate>Thu, 23 Sep 2021 15:13:28 +0000</pubDate></item><item><title>Is this a good place to use the "swap value" primitive?</title><link>https://lavag.org/topic/22206-is-this-a-good-place-to-use-the-swap-value-primitive/</link><description><![CDATA[<p>
	Can you rank these three options? Specifically, I'm looking at what are the best options for avoiding mem copies of the string. Is the "swap value" primitive buying me anything?
</p>

<p><a href="https://lavag.org/uploads/monthly_2021_09/1902490483_dequeuefromtwoqueues.png.7675154578b3341df72d00bbf1272e12.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="16152" src="https://lavag.org/applications/core/interface/js/spacer.png" data-ratio="85.97" width="606" class="ipsImage ipsImage_thumbnailed" alt="dequeue from two queues.png" data-src="https://lavag.org/uploads/monthly_2021_09/1902490483_dequeuefromtwoqueues.png.7675154578b3341df72d00bbf1272e12.png"></a></p>]]></description><guid isPermaLink="false">22206</guid><pubDate>Fri, 17 Sep 2021 23:43:21 +0000</pubDate></item><item><title>Open Source Test Executive</title><link>https://lavag.org/topic/22203-open-source-test-executive/</link><description><![CDATA[<p>
	Hi Lavans<br>
	<br>
	<a href="https://medulla.net/" rel="external nofollow">Medulla </a> will be releasing its Test Executive framework as open source before the end of the year.<br>
	<br>
	I responded to a post <a href="https://lavag.org/topic/22024-open-source-alternatives-to-teststand/?do=findComment&amp;comment=137063" rel="">here</a> where people were after an Open Source Alternative to TestStand.<br>
	<br>
	I wanted to make this a new post as I don't want it to be misconstrued that our executive is a replacement or that we are anti TestStand, I think TestStand is a brilliant tool, I've used it and will use it where needed, however options are good to have and many of our clients only want a LabVIEW only solution.<br>
	<br>
	Our Test Executive is built on the <a href="https://lavag.org/topic/22199-viper-a-dependency-injection-framework-for-labview/" rel="">ViPER framework</a> which is also being made open source. You can view a presentation I did on ViPER and our Test executive here
</p>

<p>
	<a href="https://www.linkedin.com/posts/kurtfriday_labview-manufacturing-medicaldevice-activity-6842027395436945408-CTPD" rel="external nofollow">Medulla Test Executive</a>
</p>

<p>
	Part 2 includes a demo.<br>
	<br>
	I'll be talking more about ViPER and the Test Executive at the GLA Summit.<br>
	<br>
	I'm looking for some power users who would be keen to play with it before I release it.
</p>

<p>
	<img alt="IMG_20200121_090359.jpg.01148144b47a2a4480f695816ea72573.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="16136" data-ratio="75.00" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/IMG_20200121_090359.jpg.01148144b47a2a4480f695816ea72573.jpg">
</p>

<p>
	<img alt="IMG-20180206-WA0000.jpg.43e49bfddd1e4083278275c6cedcbcba.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="16137" data-ratio="74.93" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/IMG-20180206-WA0000.jpg.43e49bfddd1e4083278275c6cedcbcba.jpg"><img alt="IMG_1934.jpg.05491ed0e6a0c4b57a0a182f84976dae.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="16138" data-ratio="133.33" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/IMG_1934.jpg.05491ed0e6a0c4b57a0a182f84976dae.jpg"><img alt="20140904_111802.jpg.a6883a653da5225473b89c75e3e0a443.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="16140" data-ratio="56.25" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/20140904_111802.jpg.a6883a653da5225473b89c75e3e0a443.jpg"><img alt="20160219_111138.jpg.1e637758c7c7356845bc33287acaff62.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="16141" data-ratio="56.25" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/20160219_111138.jpg.1e637758c7c7356845bc33287acaff62.jpg"><img alt="IMG_1988.jpg.83f400faf73db628afe558d843481c7d.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="16139" data-ratio="46.80" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2021_09/IMG_1988.jpg.83f400faf73db628afe558d843481c7d.jpg">
</p>
]]></description><guid isPermaLink="false">22203</guid><pubDate>Thu, 16 Sep 2021 00:43:04 +0000</pubDate></item><item><title>DQMH - Does it make sense to have a "constant broadcast helper loop" and how do I prevent "circular messaging"?</title><link>https://lavag.org/topic/22043-dqmh-does-it-make-sense-to-have-a-constant-broadcast-helper-loop-and-how-do-i-prevent-circular-messaging/</link><description><![CDATA[<p>
	Hey fancy folk,
</p>

<p>
	 
</p>

<p>
	I've been looking into the DQMH architecture a bit and I'm thinking about designing a test around it.  Basic test background, I am have a motor driving another motor and I'll be reading and writing over CAN for both motors and reading an analog in. I have laid out the basic module diagram as far as who is requesting what and who needs to broadcast their data.  I'm currently running into 2 issues that I'm someone can provide some insight on.
</p>

<p>
	 
</p>

<p>
	First Issues - constant broadcast helper loop
</p>

<p>
	I will be have 3 read loops broadcasting their data to an "XY Module" (the data will get formatted in the XY style and stored in a circular buffer) which the XY module will broadcast the circular buffer to the "Main Module".  My issue is how do I do the constant read properly?  I have 2 basic ideas.  First is to create a helper loop that is started from the MHL and that helper loop continually broadcasts the message.  Second is to use the MHL timeout to do my read (set the timeout from -1 to say 100ms once the module is started).  IIRC, best practice is to have the helper loop do your repetitive actions, but by having my helper loop broadcast, I feel like I'm taking away from the main design that the MHL is supposed to broadcast.  I am currently leaning towards the second option since I'm not too worried if my read is a bit of.  For example, say another action got sent to the MHL (request sent to EHL which sends action to MHL) and the action takes 10 ms, the timing should be: read, wait X of 100 ms for MHL to receive action, do action in 10 ms, timeout 100 ms, read.  This would result in a 110+X ms between the reads.  I'm not worries about the 10+X ms between reads since my "test cycle" is on the side of 6 seconds.  I'm just trying to make sure I understand the drawback of method 2.
</p>

<p>
	 
</p>

<p>
	Second Issue - prevent circular messaging
</p>

<p>
	I was reading about the best practices and they were saying that modules shouldn't have circular referencing.  In my project, I was going to have a set up of module A requests module B who broadcasts back to A and requests module C who broadcasts back to A.  I could go into more of the specifics if you want, but this is the basic idea.  Instead what I'm thining about is s Module A requests Module B, Module B broadcasts back to Module A, Module A sees the broadcast and sends the request to Module C.  In this scenario, Module A seems more like a "post office" for the messages/user events being sent back and forth.  I think its a bit cumbersome, but I also like how all the module controls stems from the "post office" since the submodules will only get their requests from the main module.
</p>

<p>
	 
</p>

<p>
	Any additional insight would be much appreciated,
</p>

<p>
	Matt
</p>
]]></description><guid isPermaLink="false">22043</guid><pubDate>Thu, 13 May 2021 19:02:21 +0000</pubDate></item><item><title>warning.txt</title><link>https://lavag.org/topic/22035-warningtxt/</link><description><![CDATA[<p>
	I've recently upgraded a test stands pc motherboard, drives, etc.  The test stand is used for automated testing of products.  The labview environment is downloaded and erased via batch files.  The loading comes from a CD.  This is to verify that the tests are never changed.  After the PC upgrade I'm getting a warning.txt that states the "typedef was expected to be in _____ but was loaded from _____ instead."  The file exist in both places.  If you click ok on the warning.txt., the test runs smoothly.  If you do not notice the warning.txt, because it's in the background until that part of the test starts, then the test will just run continuously until ok is clicked.  Anyone have suggestions?  I cannot post the .vi's or any of the software onto this forum at this time, FYI.
</p>
]]></description><guid isPermaLink="false">22035</guid><pubDate>Mon, 03 May 2021 14:35:04 +0000</pubDate></item><item><title>Invalid Dynamic Shared Variable Performance Issue</title><link>https://lavag.org/topic/19160-invalid-dynamic-shared-variable-performance-issue/</link><description><![CDATA[<p>Recently experienced a performance bug that I traced to a bug in my code related to shared variables that I just want to share to hopefully help others avoid this error.  (This was running in LV2014 SP1 on Windows)</p>
<p> </p>
<p>I am using a dynamic shared variable "<b>Read Variable Function.vi" </b>but not opening the connection prior to reading the data.  I accidentally had passed in an invalid PSP variable path to the "<b>shared variable refnum in" </b>input.  This VI happened to be in a loop that was updating fairly frequently (every 50 ms).  Well ... it turns out that because I wasn't opening the connection first and passing in an actual refnum, every time it hit this node, it retried opening a connection to a variable that didn't exist which eventually timed out - this was a very shared variable/(scan engine?) intense operation and effectively brought all of my other shared variable operations to a halt - performance went from awesome to a total drag and my application was almost unusable.</p>
<p> </p>
<p>Short term fix - I changed my configuration to point to an existing and valid PSP variable and all of my performance went back to normal.  Hope this helps someone else avoid my "mistake" although I'd also call this a <abbr title="LabVIEW">LV</abbr> bug in a sense that it shouldn't drag an application's performance down in such a severe way if a variable goes from existing to non-existent.</p>
]]></description><guid isPermaLink="false">19160</guid><pubDate>Tue, 11 Aug 2015 18:43:31 +0000</pubDate></item><item><title>Log File Structure</title><link>https://lavag.org/topic/21891-log-file-structure/</link><description><![CDATA[<p>
	I have an error log and a couple other logs associated with a program I've written. My question is this, when you read a log file, do you expect the newest information at the beginning of the file or the end.
</p>

<p>
	I think I prefer it at the beginning of the file... That said I worry about large log files. The only way I figured out how to accomplish this was to read the entire file, add my new entry at the beginning and then re-write the entire file. Seems like a lot of overhead just for a style preference. 
</p>

<p>
	Is there a better way to accomplish writing new entries at the beginning? Or does everyone prefer new log entries at the end of the file?
</p>

<p>
	thanks for you comments and ideas...
</p>

<p>
	Bob Harmon
</p>
]]></description><guid isPermaLink="false">21891</guid><pubDate>Tue, 19 Jan 2021 00:39:19 +0000</pubDate></item><item><title>Resolution of Pseudopaths in LabVIEW (Per-Target Invocation of Packed Project Libraries)</title><link>https://lavag.org/topic/21775-resolution-of-pseudopaths-in-labview-per-target-invocation-of-packed-project-libraries/</link><description><![CDATA[<p>
	I have made public a document detailing an old internal feature of LabVIEW that will be of great interest to those of you deploying Packed Project Libraries. Until recent conversations with a customer, I never considered that this would have much utility.
</p>

<p>
	<strong>The problem this solves: </strong>First, you build a packed project library (PPL) from source. Then, you write a VI that calls that PPL. It works fine. But now you load the caller VI under a different target in your project. The caller VI breaks because it tries to load the PPL, and the PPL refuses because it isn't built for the new target. Packed project libraries are compiled for one and only one specific target. How can you write ONE caller VI that will load DIFFERENT libraries depending upon the target without adding Conditional Disable structure complications?
</p>

<p>
	<a href="https://forums.ni.com/t5/Community-Documents/Resolution-of-Pseudopaths-in-LabVIEW-Per-Target-Invocation-of/ta-p/4087124" rel="external nofollow">https://forums.ni.com/t5/Community-Documents/Resolution-of-Pseudopaths-in-LabVIEW-Per-Target-Invocation-of/ta-p/4087124</a>
</p>
]]></description><guid isPermaLink="false">21775</guid><pubDate>Tue, 29 Sep 2020 19:55:56 +0000</pubDate></item><item><title>Events or Queues</title><link>https://lavag.org/topic/21793-events-or-queues/</link><description><![CDATA[<p>
	I have a design question.  I am designing a system which transfer large amount of data (about 12 mb ever 500 ms for displaying, saving etc. Of the two choices presented below which one of two will be a better choice. Thanks in advance for all the advice.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="15297" data-ratio="43.00" width="1200" alt="image.png.eb2c8190dc8a293176a1b822a3e831d4.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_10/image.png.eb2c8190dc8a293176a1b822a3e831d4.png">
</p>
]]></description><guid isPermaLink="false">21793</guid><pubDate>Sat, 10 Oct 2020 05:17:11 +0000</pubDate></item><item><title>Design advice needed for data acquisition system</title><link>https://lavag.org/topic/21772-design-advice-needed-for-data-acquisition-system/</link><description><![CDATA[<p>
	Hi
</p>

<p>
	I need to make a scalable data acquisition system (I have to deal between 1 and 20 of hardware cards in the same time).<br>
	The systems are based on polling and have quite much data in and out.
</p>

<p>
	Tried to use arrays of data, arrays of clusters, than arrays of classes and with all of them my problem was the multiple data copies while I am doing a single operation (one input change causes a copy of the whole array of all inputs or clusters or classes). Thought about functional variables too but that is hard to scale (with my current labview experience).
</p>

<p>
	So I decided to use references - the basic idea is below - it it a valid one ore I try to push my luck with something not recommended?
</p>

<p>
	DataIn is a bool array representing a set of inputs (there will be more, also numeric ones).<br>
	In the final solution the Ref_DataIn probably will be a global, the rest of the loops will be in different reentrant VI's (except the creation of the references from frame 1 which probably will be non-reentrant or synced). 
</p>

<p>
	Also I would like to know the granularity of Labview in the sense of reference variables (Ref_DataIn and his elements in the case below) - do I need to sync the read and write of the values or it is good as it is?<br>
	I would like to avoid reading the Value while the data acquisition loops write it - it is not a problem if I read an array half old, half new values but it is a problem if I read empty array or half array when this kind of collision occurs. <br>
	Have no idea how this works in Labview - in C/C++ I would need to sync it.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="15277" data-ratio="53.42" width="1097" alt="image.png.ac1b6965fc76f62047236e0720e68b11.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_09/image.png.ac1b6965fc76f62047236e0720e68b11.png">
</p>

<p>
	Any other input is welcome, I come from the C,C++ world with more than 20 years of experience, I could make this work in a few days in a DLL and than import it in Labview but the problem is others have to access, slightly modify and easily maintain the whole structure even on site which is easier if I leave everything in Labview ...
</p>

<p>
	Thank You ...
</p>
]]></description><guid isPermaLink="false">21772</guid><pubDate>Mon, 28 Sep 2020 07:25:52 +0000</pubDate></item><item><title>Panel Actors Work in Dev but fail to display in Runtime</title><link>https://lavag.org/topic/21776-panel-actors-work-in-dev-but-fail-to-display-in-runtime/</link><description><![CDATA[<p>
	I'm using MGI's Panel Actor. I have an application in which a nested actor launches other nested actors one at a time and inserts them into a subpanel. This works great in dev mode. I have the "Launched Nested" set to Autoshow = T. When I run it in an EXE the panel actors won't display in the subpanel. I thought maybe the autoshow was the problem so I added a message to the nest panel to "Send Show Msg" and it still didn't work. Any ideas on what could be causing these to fail to show in the EXE? The root panel actor and its nested panel start up and display but then when that nested panel tries to launch its own nested panels and display them in its subpanel that's the part that isn't working in the EXE but is in Dev mode.
</p>

<p>
	 
</p>

<p>
	Thanks
</p>
]]></description><guid isPermaLink="false">21776</guid><pubDate>Tue, 29 Sep 2020 20:13:13 +0000</pubDate></item><item><title>Panel Actors Launched from non Panel Actor</title><link>https://lavag.org/topic/21756-panel-actors-launched-from-non-panel-actor/</link><description><![CDATA[<p>
	Just starting looking at MGI's Panel Actors. In the examples, the root actor is always a panel actor and therefore the "Launch  Root Panel.vi" is used. What if you have an application where your root actor is not a panel and you want it to be able to launch a panel actor. Do you just used launch nested panel or do you always have to have a root panel actor? I thought in general you want a single root actor unless you are communicating across network boundaries.
</p>

<p>
	To give you a better idea of what I want to do:
</p>

<p>
	I want:
</p>

<p>
	-Root actor is not a panel actor and launches and sets up some communication and other actors
</p>

<p>
	-Root actor launches a nested panel which is a panel actor that contains a subpanel.
</p>

<p>
	-This nested panel actor launches other panel actors and switches them into the subpanel as needed
</p>

<p>
	 
</p>

<p>
	Thanks
</p>
]]></description><guid isPermaLink="false">21756</guid><pubDate>Tue, 15 Sep 2020 19:05:25 +0000</pubDate></item><item><title>Plugins, PPLs and the MGI Solution Explorer</title><link>https://lavag.org/topic/19502-plugins-ppls-and-the-mgi-solution-explorer/</link><description><![CDATA[<p>I gave a presentation at the America's CLA summit this year where I introduced the MGI Solution Explorer.</p>
<p> </p>
<p>Here's the link to the presentation information and some documentation (that will be expanded) for the tool.</p>
<p> </p>
<p><a href="http://www.mooregoodideas.com/mgi-solution-explorer/" rel="external nofollow">MGI Solution Explorer Info</a></p>
<p> </p>
<p>Feel free to post feedback here.</p>
]]></description><guid isPermaLink="false">19502</guid><pubDate>Tue, 08 Mar 2016 22:06:16 +0000</pubDate></item><item><title>Actors and CVTs</title><link>https://lavag.org/topic/21731-actors-and-cvts/</link><description><![CDATA[<p>
	I recently ran into this issue and wanted to know what the community has to say about it.
</p>

<p>
	I have a main program that is a QMH that can launch a single actor (picked by the main program and loaded through PPL) to perform a task. I want to have that actor update a CVT for the main program to monitor.
</p>

<p>
	I set up the CVT in the main program and had the actor write to CVT. When that call happens I get an error that it can't find that tag in the CVT. I have a CVT viewer that shows that exact tag, though.
</p>

<p>
	For testing, I setup the CVT in the actor with the exact same tag list and it finds it just fine. This leads me to believe that the QMH main program lives in a different memory space from the actor. (Maybe things loaded through a PPL live in different memory?) The current work-around is to send the value back to the main program. I don't really like doing that but it is what it is. My next option will be to convert the main program to an actor and see if the child actor can see the CVT setup by the main actor.
</p>

<p>
	Any thoughts on this? Maybe I'm doing something wrong?
</p>

<p>
	<strong>Edit</strong>: Tested a QMH with an actor called directly, instead of through a PPL and the actor can see the CVT without error. Next up, trying a packed actor called directly instead of loaded dynamically.
</p>

<p>
	<strong>Edit 2</strong>: Created a trivial PPL actor and called it directly from the main program and it could not see the CVT. Is there a good workaround for this?
</p>
]]></description><guid isPermaLink="false">21731</guid><pubDate>Mon, 24 Aug 2020 21:04:54 +0000</pubDate></item><item><title>The most complex VI file</title><link>https://lavag.org/topic/21649-the-most-complex-vi-file/</link><description><![CDATA[<p>
	I sorted all the extracted LV14 files by size, and one stands out.
</p>

<p>
	Size of Block Diagram in XML form: 15MB
</p>

<p>
	And the size is not due to some binary blob stored inside - no, the is just a lot of parts in the block diagram heap.
</p>

<p>
	Amount of XML tags:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln"># xmllint --xpath "count(//*)" ex_allChanPropsMod_BDHb.xml
234903</span></pre>

<p>
	File: vi.lib/Platform/express/ex_EditUserDefinedProperties/ex_allChanPropsMod.vi
</p>

<p>
	And its content isn't even that impressive:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="15077" data-ratio="29.56" width="1200" alt="ex_allChanPropsMod.png.7624205ca948484040513ec44042ab93.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_07/ex_allChanPropsMod.png.7624205ca948484040513ec44042ab93.png">
</p>

<p>
	There are just a lot of cases hiding in the "Case Structure", and a lot of copies of the same chunk of diagram within each case.
</p>

<p>
	Also the file seem to have syntax errors? Is it normal that some library files from NI doesn't even compile?
</p>
]]></description><guid isPermaLink="false">21649</guid><pubDate>Mon, 06 Jul 2020 23:28:20 +0000</pubDate></item><item><title>Read TDMS to a 2D array</title><link>https://lavag.org/topic/21625-read-tdms-to-a-2d-array/</link><description><![CDATA[<p>
	Hello Mates,
</p>

<p>
	need some advice from you.<br>
	<br>
	My data come from serial port as a big string and it is stored to a double array, I save the time stamp as string and them the whole DBL array as dynamic data, then I get this nice TDMS file which in excel looks like this:
</p>

<p>
	I only need to read the C and D columns, what is the best approach?<br>
	<br>
	Probably there is a better way to save the tdms, I willing to improve my code
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="15048" data-ratio="63.36" width="1200" alt="image.png.52a825b6f522f9cb251260978a64931c.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_06/image.png.52a825b6f522f9cb251260978a64931c.png">
</p>

<p>
	 
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="15049" data-ratio="45.29" width="1200" alt="image.png.15c4bb6cfe4c2d206d9465ca722a4511.png" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_06/image.png.15c4bb6cfe4c2d206d9465ca722a4511.png">
</p>
]]></description><guid isPermaLink="false">21625</guid><pubDate>Mon, 22 Jun 2020 19:18:05 +0000</pubDate></item><item><title>CLA Exam Question</title><link>https://lavag.org/topic/13847-cla-exam-question/</link><description><![CDATA[<p>When I took the CLD, what really caught me off guard was how many <em>more</em> requirements there were in the actual exam than there were in the practice exams.  Does the CLA practice exam accurately represent the kind and and quantity of requirements I should expect to see on the real exam?</p>]]></description><guid isPermaLink="false">13847</guid><pubDate>Sat, 19 Feb 2011 19:12:57 +0000</pubDate></item><item><title>Multiple Machine QMH</title><link>https://lavag.org/topic/21520-multiple-machine-qmh/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	I'm working on a project to connect and interact with a cell of machines (8 PLC aprox) with datasocket, the app consist in a simple communication to poll a trigger, read and search the partnumber and retrieve data to PLC from a SQL database. I use QMH to start this project, and I made a MHL with the functionality of ONE machine (PLC and SQL communication, and a few messages to UI loop).
</p>

<p>
	This loop I called <span>"Station Handler" is initialized with a configuration file which haves unique information to run each machine (CSV file with tags and parameters of SQL), I convert this loop in a SubVI and configured to be &lt; Preallocated Clone Reentrant &gt;, and I configure the datasocket subvis that i made to be reentrant also.</span>
</p>

<p>
	When I run the application it works fine with the PLC about a couple of cycles (write/read), also I can use the two PLC I currently have to do tests, but suddenly, the "Station Handler" vi dont read ok the trigger tag, i have it in true and labview never read it. Is not a problem of network or OPC because I already open a OPC test client and read ok the value of the trigger tag.
</p>

<p>
	I will appreciate if anyone can help me... and sorry for the english if I dont explain myself enough haha
</p>

<p>
	Also I'm open if there is a better way to achieve this, and QMH maybe wasn't the answer...
</p>

<p>
	 
</p>

<p>
	Top level VI
</p>

<p>
	<img alt="imagen.png.a5151642b76954ea7396c27ffb01a812.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14734" data-ratio="54.17" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_04/imagen.png.a5151642b76954ea7396c27ffb01a812.png">
</p>

<p>
	 
</p>

<p>
	Station Handler loop in Poll trigger state
</p>

<p>
	<img alt="imagen.png.0f1a46cade5c0ed5db4ff705d5118ff2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14735" data-ratio="54.17" width="1200" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_04/imagen.png.0f1a46cade5c0ed5db4ff705d5118ff2.png">
</p>

<p>
	 
</p>

<p>
	Poll trigger VI
</p>

<p>
	<img alt="imagen.png.fe4a37d1cc8cb83ea6c9f0cbe89dffc5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14736" data-ratio="65.22" width="969" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/monthly_2020_04/imagen.png.fe4a37d1cc8cb83ea6c9f0cbe89dffc5.png">
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	Thanks in advance!
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">21520</guid><pubDate>Tue, 21 Apr 2020 00:51:53 +0000</pubDate></item><item><title>Broadcast Actor (AF with a touch of DQMH)</title><link>https://lavag.org/topic/21594-broadcast-actor-af-with-a-touch-of-dqmh/</link><description><![CDATA[<p>
	<a class="ipsAttachLink" contenteditable="false" data-fileid="14931" href="https://lavag.org/applications/core/interface/file/attachment.php?id=14931" data-fileext="zip" rel="">Broadcast Actor.zip</a>
</p>

<p>
	Hello All!
</p>

<p>
	I'm looking for a little bit of feedback on an Actor I've put together. The zip file attached contains an Actor called "Broadcast Actor". I know the idea of a "broadcast" partially goes against the AF rules but bare with me. 
</p>

<p>
	The reason I put this together is because the idea of an abstract message was driving me a little crazy. I probably haven't had it properly explained to me but in any case I decided to try and build something that accomplished a similar task as an Abstract Message while also maintaining the low/zero coupling abstract messages provide. I do know Interfaces are out and about in LabVIEW 2020 but this approach is for older code bases that we can't quite upgrade yet.
</p>

<p>
	I loosely based this approach on DQMH which has an interesting architecture for messages going "up the tree" using broadcasts (user events), that parent modules register for when they start up. I figured something like this could also be implemented in an Actor. 
</p>

<p>
	The attached broadcast actor has a message that returns its own populated "Event Cluster". Calling actors can call this message and are returned this "Event Cluster". The parent actor can then register for all of the events of the child actor in their Actor Core. I know reply messages are kind of discouraged in AF but this also felt like an okay way to use them. Once the child actor is up and running it can call it's own broadcasts which the parent can hear and do something intelligent with. My understanding of "low coupling" is limited, but I *think* this approach would prevent the parent actor from being loaded into memory if we are just trying to load the child actor. 
</p>

<p>
	Maybe I'm way off or maybe this has been done before but it felt like a way to not have to use abstract messages (a barrier for some people to adopt AF), but also allow for low coupling between the actors themselves. 
</p>

<p>
	Any and all feedback is welcome. What am I missing? 
</p>

<p>
	-John Hoehner
</p>
]]></description><guid isPermaLink="false">21594</guid><pubDate>Tue, 26 May 2020 14:32:28 +0000</pubDate></item><item><title>Instructional videos on YouTube</title><link>https://lavag.org/topic/19266-instructional-videos-on-youtube/</link><description><![CDATA[<p>
	I've started to make some <a href="https://www.youtube.com/channel/UCVfW08kA4N3jytIitOnH9NQ" rel="external nofollow">instructional videos on YouTube</a> for my <a href="https://lavag.org/files/file/220-messenger-library/" rel="">Messenger Library</a>.   I was inspired by Delacor's nice <a href="https://www.youtube.com/playlist?list=PLZ3A_SIOKdQs73IjbtaWwCSqoxQfxlWj6" rel="external nofollow">videos on their new DQMH framework</a> and also by Steve Watts' <a href="https://www.youtube.com/channel/UCUeR9TSNhJzTLcp8E8aYkkA" rel="external nofollow">CSLUG channel</a>.  Any feedback appreciated.
</p>

<p>
	 
</p>

<p>
	James
</p>
]]></description><guid isPermaLink="false">19266</guid><pubDate>Tue, 13 Oct 2015 21:27:07 +0000</pubDate></item><item><title>Aggregation or Composition for user events and dynamic processes</title><link>https://lavag.org/topic/21522-aggregation-or-composition-for-user-events-and-dynamic-processes/</link><description><![CDATA[<p>
	I have been going back and forth on the best method for handling shared data between two processes which may or may not exist at the same time. Assume you have processes A and B, and process A is running, B is not. At some point in the future when B begins running, A needs to register for some events from B. I see two ways to handle this. The first way is aggregation. Some parent process that has visibility of both A and B is responsible for creating the user event refnum and passing it to both processes if/when they are created. This is a simple solution but can be a bit ugly in my opinion, since the refnum will exist even in scenarios where it is unused, among some other issues with encapsulation and the like.
</p>

<p>
	The second option is to use composition and create the refnum in process B which it is launched, and pass it to process A. This would be done by sending some message to process A to give it the refnum in order to register. This seems to be the cleanest method from an encapsulation standpoint, but also seems to add a lot additional code to the framework as compared to the aggregation method above. 
</p>

<p>
	There are of course other pros and cons to each of these but those are the most generalized ones I see. I just want to get a feel for what other people out there are doing to solve this.
</p>
]]></description><guid isPermaLink="false">21522</guid><pubDate>Tue, 21 Apr 2020 16:33:51 +0000</pubDate></item><item><title>NI LabVIEW-DSC Application Architecture</title><link>https://lavag.org/topic/21485-ni-labview-dsc-application-architecture/</link><description><![CDATA[<p>
	Hello,
</p>

<p>
	Recently i started working on NI DSC module and exploring how to make use of different concepts related to DSC. for eg. Connecting different devices mostly PLC based systems (having OPC I/O server driver support in HW), then reading and writing data PLC I/Os using LabVIEW I/O server mechanism, reading Alarms and events, Processes, Creating tags etc. Well, I want design typical application in LabVIEW using DSC module which has following implementation. for eg.
</p>

<p>
	1. Adding or Removing new PLC or Devices.
</p>

<p>
	2. Once the PLC is connected, Adding tags using I/O server lvlib. deploying it programatically. (Which we can do using Process deploy/undeploy VIs in DSC). I have seen the given <abbr title="LabVIEW">LV</abbr> example.
</p>

<p>
	3. Raising Alarms or Events for a shared variable, monitoring complete process, logging data, Taking user action againt abnormal condition related to hardware.
</p>

<p>
	4. HMI Front panel design in labVIEW. etc
</p>

<p>
	So far, i have tried all the given examples in NI example finder in LabVIEW. That gave an idea on using different concepts.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents">
		<p>
			Now I want to design a generic LabVIEW SW architecture which will efficient enough to use above pts. 1,2,3,4 etc. Is there any developed architecture Combining (LabVIEW-DSC) oriented functionality to start with? Any Guidlines from NI (Documentation/Articles) on how to design such HMI-LVDSC-OPC-HW efficient architecture? I am still new to using DSC on major scale (when there will be large factory automation work, lots of controllers, PLC etc), ideally my <abbr title="LabVIEW">lv</abbr> sw architecture should be scalable and easy to maintain. Any thoughts?
		</p>
	</div>
</blockquote>

<p>
	 
</p>
]]></description><guid isPermaLink="false">21485</guid><pubDate>Tue, 07 Apr 2020 07:26:39 +0000</pubDate></item><item><title>Multi threaded telnet comms</title><link>https://lavag.org/topic/21313-multi-threaded-telnet-comms/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	   I am using the depreciated Internet Toolkit to give me access to the telnet protocol (without having to write my own stack). I would like this to be multi threaded, but the toolkit it's self has not been designed to thread. All of my little comms routines are running as seperate VI's (call and forget), so they are all isolated from each other. I would like to not have to rely on the single threading of the telnet stack, as this massivly slows down what I would like to be concurrent operations. Is there anyway I could burn the telnet stack out as some kind of .exe or .ddl or other and allow each of my seperate processes to use the same code?<br>
	Any Ideas?<br>
	A.
</p>
]]></description><guid isPermaLink="false">21313</guid><pubDate>Tue, 17 Dec 2019 13:38:25 +0000</pubDate></item><item><title>Poll on Architecture and Frameworks</title><link>https://lavag.org/topic/21199-poll-on-architecture-and-frameworks/</link><description><![CDATA[<p>
	I was interested in the relative numbers of LAVA developers using different "frameworks" or types of architecture.  Apologies, my list of poll options shows my biases towards a message-passing, actor-ish, style of architecture.
</p>

<p>
	Sorry, I seem to have forgotten to allow more than one option, so you'll have to pick the the best answer and explain more in a post. 
</p>

<p>
	I pick "Messenger Library", though as I developed that, my honest answer is that I use my own internal framework.
</p>
]]></description><guid isPermaLink="false">21199</guid><pubDate>Wed, 25 Sep 2019 11:43:19 +0000</pubDate></item><item><title>Receive a large traffic data program crash</title><link>https://lavag.org/topic/21195-receive-a-large-traffic-data-program-crash/</link><description><![CDATA[<p>
	<span style="background-color:#ffffff;color:#333333;font-size:14px;text-align:left;">The program obtains the number of messages in the hardware buffer through ZCAN_GetReceiveNum function, and then calls ZCAN Receive to complete the received data. When the amount of data reaches 1000 frames / s, the program will crash.</span>
</p>

<p>
	UINT ZCAN_Receive(CHANNEL_HANDLE channel_handle,  ZCAN_Receive_Data* pReceive,  UINT len,  INT wait_time = -1);
</p>

<p>
	<img alt="jju0WeQJGObiBjsAAAAgEMAAAAXKq62lH7cUqYdo" class="ipsImage" data-ratio="55.46" height="579" width="1044" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/imageproxy/4410187f4ac75cd8b319be758f59a5d1.png.54e76807ded4118ac02096729a77f8ed.png">
</p>

<p>
	<span style="background-color:#ffffff;color:#333333;font-size:14px;text-align:left;">I think there is something wrong with creating the parameter array ZCAN Receive Data* pReceive. Has anyone ever encountered a similar problem?</span>
</p>

<p>
	 
</p>
<p>
<a class="ipsAttachLink" href="https://lavag.org/applications/core/interface/file/attachment.php?id=14367" data-fileext="zip" data-fileid="14367">Receive.zip</a></p>]]></description><guid isPermaLink="false">21195</guid><pubDate>Fri, 20 Sep 2019 09:35:12 +0000</pubDate></item><item><title>Overcurrent Protection VI ?</title><link>https://lavag.org/topic/19972-overcurrent-protection-vi/</link><description><![CDATA[<p>
	Does anyone have any vi of overcurrent protection? for substations? simulation only.  
</p>]]></description><guid isPermaLink="false">19972</guid><pubDate>Mon, 23 Jan 2017 22:21:39 +0000</pubDate></item><item><title>LV built-app talk to CVI/VisualStudio exe: how?</title><link>https://lavag.org/topic/21118-lv-built-app-talk-to-cvivisualstudio-exe-how/</link><description><![CDATA[<p>
	DLL functions or shared variables?  Or something else?
</p>

<p>
	I have a Labview 2014-64 executable (or I can build a DLL) that runs one piece of equipment, the X-ray.  The other engineer has a large CVI Labwindows 2015 + MS Visual Studio 2012 (C++) executable that runs everything else.  I want the Labview code to be a slave of the CVI code, accepting commands to turn X-ray On or Off, reporting failures, and the like.  Translating the X-ray code into C++ would be possible in principle, but not fun.
</p>

<p>
	Shared variables look easy, but I'm kinda scared of them.  I would define all the shared variables in my <abbr title="LabVIEW">LV</abbr> code, since I'm more familiar with <abbr title="LabVIEW">LV</abbr>, then use them in both.  There's a thread in here called "Shared Variable Woes" so maybe I should be scared.  In the alternative, I tried building a proof-of-concept DLL in Labview, and calling its functions in CVI/C++, and it works, but it's kinda clunky.  (I'm attaching it below in case you want to play, or advise.)
</p>

<p>
	Your advice would be appreciated.
</p>
<p>
<a class="ipsAttachLink" href="https://lavag.org/applications/core/interface/file/attachment.php?id=14298" data-fileext="zip" data-fileid="14298">XrayDLL.zip</a></p>]]></description><guid isPermaLink="false">21118</guid><pubDate>Fri, 09 Aug 2019 19:49:44 +0000</pubDate></item><item><title>Eleven Ways to Update an Indicator from within a subVI. Their Relative Performances and Quite Far Reaching Consequences...</title><link>https://lavag.org/topic/21024-eleven-ways-to-update-an-indicator-from-within-a-subvi-their-relative-performances-and-quite-far-reaching-consequences/</link><description><![CDATA[<p>
	Yes, I know, you wanted to do this some day too. So I did it for you. Just run (and then stop) the Main VI from the attached set (Saved in LabVIEW 2016 32-bit). I suspect (and hope<img alt="Smiley Tongue" data-ratio="100.00" title="Smiley Tongue" width="16" src="https://lavag.org/applications/core/interface/js/spacer.png" data-src="https://lavag.org/uploads/imageproxy/16x16_smiley-tongue.gif.f9af6a00343e5960be47aa5fc2dc1e6c.gif">) the numbers will be quite a surprise and even a shock, especially for the fans of one particular method and some very aggressively promoted frameworks which use that method.
</p>
<p>
<a class="ipsAttachLink" href="https://lavag.org/applications/core/interface/file/attachment.php?id=14174" data-fileext="zip" data-fileid="14174">Fastest update of indicator from subVI.zip</a></p>]]></description><guid isPermaLink="false">21024</guid><pubDate>Mon, 17 Jun 2019 23:41:15 +0000</pubDate></item><item><title>How to get list of events from an Event Registration Refnum (as variant)</title><link>https://lavag.org/topic/21003-how-to-get-list-of-events-from-an-event-registration-refnum-as-variant/</link><description><![CDATA[<p>
	With VI Scripting, I can get the data type of an Event Registration Refnum as variant. How could I get the list of events (at least their names) that it contains?
</p>

<p>
	I need that to know what events are registered in an event structure, and at what indices, in order to manipulate the dynamic events in the structure with Scripting.
</p>
]]></description><guid isPermaLink="false">21003</guid><pubDate>Mon, 03 Jun 2019 10:04:43 +0000</pubDate></item><item><title>Simulation on LV</title><link>https://lavag.org/topic/20975-simulation-on-lv/</link><description><![CDATA[<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	Hi,
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	Say, I am going to build a system and control it using labview through DAQ.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	For example, the system has stepper motors to move a heating chamber back and forth, a temperature monitoring system, a pressure controlling gauge etc.
</p>

<p style="background-color:#ffffff;color:#333333;font-size:16px;padding:0px;text-align:left;">
	Now, before diving into building the actual system, Is it possible to make a simulation of the whole device and integrate the necessary <abbr title="LabVIEW">LV</abbr> coding, where I can show on screen how the <abbr title="LabVIEW">LV</abbr> program controls the different parts of the system?
</p>
]]></description><guid isPermaLink="false">20975</guid><pubDate>Mon, 20 May 2019 15:46:18 +0000</pubDate></item><item><title>Queue elements in 2D array form</title><link>https://lavag.org/topic/4451-queue-elements-in-2d-array-form/</link><description><![CDATA[<p>I am trying to enqueue numeric data into 2D array form. The element data type and each enqueue element is a 1D array of numeric. When I read Elements in Get Queue Status, I see an array of cluster of 1D array! Is there a way to create a queue with elements organized in a 2D numeric array type</p>
<p>Thanks</p>
]]></description><guid isPermaLink="false">4451</guid><pubDate>Tue, 19 Dec 2006 16:18:24 +0000</pubDate></item><item><title>Owning the lifetime of VI launched with "Run VI Method"</title><link>https://lavag.org/topic/20840-owning-the-lifetime-of-vi-launched-with-run-vi-method/</link><description><![CDATA[<p>
	Lifetime of VI launched by the "run VI method" are managed by LabVIEW (meaning the caller do not own the the lifetime).
</p>

<p>
	Practically, as soon as the target VI terminate LabVIEW will dispose of the resource created by the target resulting - among other thing - for every references created within the target scope to die (see attached example).
</p>

<p>
	<img alt="2019-03-30_15-42-35.png.713908f5df3dce1491801ce36ced705f.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13939" data-ratio="34.18" width="1200" src="https://lavag.org/uploads/monthly_2019_03/2019-03-30_15-42-35.png.713908f5df3dce1491801ce36ced705f.png">
</p>

<p>
	I have a use case where this is undesirable and I would love to have the flexibility of the run VI method (generically address control on the target VI) while keeping ownership of the VI call chain in the launcher (like the CBR does).
</p>

<p>
	Note: as far as I know, what I am asking is not possible but I would love to be told otherwise.
</p>

<p>
	Thanks
</p>

<p>
	PJM
</p>

<p>
	Cross posted on <a href="https://forums.ni.com/t5/LabVIEW/Owning-the-lifetime-of-VI-launched-with-quot-Run-VI-Method-quot/m-p/3911923" rel="external nofollow">NI forum</a>
</p>

<p>
	<a class="ipsAttachLink" data-fileext="zip" data-fileid="13940" href="https://lavag.org/applications/core/interface/file/attachment.php?id=13940" rel="">rvm.zip</a>
</p>
]]></description><guid isPermaLink="false">20840</guid><pubDate>Sat, 30 Mar 2019 22:59:46 +0000</pubDate></item><item><title>Getting a ref to a clone VI inherently unsafe?</title><link>https://lavag.org/topic/20860-getting-a-ref-to-a-clone-vi-inherently-unsafe/</link><description><![CDATA[<p>
	I was browsing through class code from the Actor Framework (ashamed to say I haven't used this framework, yet, but that's changing), and stumbled across what appears to be a dire warning.  (See the attached,
</p>

<p>
	or if you'd rather, read the BD comment here.)
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents">
		<p>
			 
		</p>

		<p>
			Obtaining a reference to a clone VI is an unsafe opeation that can cause LabVIEW to crash. LabVIEW was never designed to allow this, and it is possible only because of an oversight in Open VI Reference that went unnoticed for many years. However, opening a reference, using it for a limited set of operations, and closing it quickly is safe enough to use for a debugging tool. National Instruments recommends you avoid doing this in applications meant for your end users.
		</p>

		<p>
			If you use this technique elsewhere, please replicate this advisory message.
		</p>

		<p>
			 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<p>
	I've used an architecture for years now where I launch <em>N</em> clones of a VI using the ACBR in fire-and-forget mode, and subsequently the clones get a VIref to themselves and register that (with an assigned index) by message back to a GUI VI.  The GUI then allows the user to switch through the clones' FPs to be shown in a subpanel.  I've never had an issue traceable to this.  Note that in my code, <u>the clone refnums are NOT obtained by an Open VI ref with clone name string (as shown)</u> - they are implicitly obtained within the clones via a VI class property node.
</p>

<p>
	Does this warning imply that this architecture is somehow unsafe?
</p>

<p>
	I'm hearing AQ's authorship in my head when I read this warning.  <a contenteditable="false" data-ipshover="" data-ipshover-target="https://lavag.org/profile/5877-aristos-queue/?do=hovercard" data-mentionid="5877" href="https://lavag.org/profile/5877-aristos-queue/" rel="">@Aristos Queue</a>, are you listening?  Can you comment? (Apart from chastisement for my only now learning about the AF - sorry.)
</p>

<p>
	 
</p>

<p>
	Dave
</p>

<p><a href="https://lavag.org/uploads/monthly_2019_04/1750511286_OpenBDfromAFDebug.png.8883d0652888398ece2216790f7cd999.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="13990" src="https://lavag.org/uploads/monthly_2019_04/1750511286_OpenBDfromAFDebug.png.8883d0652888398ece2216790f7cd999.png" data-ratio="53.02" width="562" class="ipsImage ipsImage_thumbnailed" alt="Open BD from AF Debug.png"></a></p>]]></description><guid isPermaLink="false">20860</guid><pubDate>Tue, 09 Apr 2019 18:27:36 +0000</pubDate></item><item><title>Can this architecture issue be solved with composition?</title><link>https://lavag.org/topic/20829-can-this-architecture-issue-be-solved-with-composition/</link><description><![CDATA[<p>
	Sorry for the ambiguous title...hard to convey the problem without description.
</p>

<p>
	Right now I have an application that takes various measurements, but for now I'm going to focus on current. The issue is that there are many devices that can take current measurements, which our customer will swap out. But they don't necessarily have a parent/child relationship. Everything I think of screams to me "This would be easy with interfaces" but I'm really hoping there is some solution with composition. 
</p>

<p>
	The application has a lot of situations where there is a power supply, but they may use a DVM to take the current measurement because they get better resolution on their results. There are other times they just use the current measurement the power supply reports. So, I thought about having a current measurement class that is composed of a "Source" object and a "Measurement" object. In some cases the Source and Measurement objects would both be a power supply. In other cases one may be a power supply and the other a DVM. But, I also want all my power supplies to inherit from BasePowerSupply and the DVM to inherit from BaseDVM. But if I want to do this and have either a power supply or a DVM be the measurement class, they both have to inherit from the same base class with a MeasureCurrent must-override method. However, as soon as I do this, if I want to create a a Source class, the BasePowerSupply can't inherit from it too. 
</p>

<p>
	To me this just screams having an ICurrentMeasurable interface and an ISourceable interface that classes can implement. But alas, I cannot. So, any suggestions are appreciated. It just seems to me the more complex instruments get the more I really want interfaces to keep overlapping functionality required while avoiding coupling of unrelated devices through inheritance.
</p>
]]></description><guid isPermaLink="false">20829</guid><pubDate>Fri, 22 Mar 2019 16:05:41 +0000</pubDate></item><item><title>building a display calculator</title><link>https://lavag.org/topic/20670-building-a-display-calculator/</link><description><![CDATA[<p>
	i want to build a display calculator which displays the floating point integers too 
</p>

<p>
	can anyone help me 
</p>

<p>
	thank you
</p>
]]></description><guid isPermaLink="false">20670</guid><pubDate>Mon, 29 Oct 2018 07:52:38 +0000</pubDate></item><item><title>Playback file on cRIO</title><link>https://lavag.org/topic/20788-playback-file-on-crio/</link><description><![CDATA[<p>
	Hi all,
</p>

<p>
	<br>
	I need your opinion about a problem.<br>
	I need to reproduce a data file on a cRIO. Typically the file is made of recorded data from the field with at least 2 columns : time and value.  I would use a cRIO to reproduce the file and stimulate my target (device under test) with the same condition of the equipment on the filed.
</p>

<p>
	The idea is :<br>
	1)  trasfer the file on cRIO file system and open it.<br>
	2) read the data from the file with Read Delimited Spreadsheet and save the value in an array<br>
	3) read the array, row-by-row, with an auto-indexed tunel loop<br>
	4) Inside the loop send the data, organized into a cluster, to cRIO FPGA via RT-FIFO<br>
	5) On FPGA keep in listen on the RT-read and get the message when ready
</p>

<p>
	Someone has experience in this case? Any suggestion?
</p>

<p>
	<br>
	Thanks
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">20788</guid><pubDate>Mon, 18 Feb 2019 15:55:11 +0000</pubDate></item><item><title>Shared Variable Woes</title><link>https://lavag.org/topic/20783-shared-variable-woes/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	   OK, so I have 2 PCs. 1. is a PXI system and 2. is a normal PC. They both have LabVIEW 2017 Dev on them but no "LabVIEW Datalogging and Supervisory Control Module". On System 1 I have created a network shared variable in the project. I can create a shared variable on one, that seems to be published, but when looking system 2 I see it is not published. The Distributed System Manager on system 1 is populated, but on system 2 is empty. System 2 can see System 1 (through the dist. sys. manager) but there are no variables to be seen. Any ideas?
</p>

<p>
	Many thanks, Alec
</p>
]]></description><guid isPermaLink="false">20783</guid><pubDate>Wed, 13 Feb 2019 13:33:22 +0000</pubDate></item><item><title>Style Tips for Spaghetti Block Diagram</title><link>https://lavag.org/topic/20776-style-tips-for-spaghetti-block-diagram/</link><description><![CDATA[<p>
	I've been programming in LabVIEW for a few years and have a dozen or so programs that I've written use for calibration of test items. However, as the number of inputs and outputs grows for some of my programs, my block diagrams suffer from a clear case of spaghetti code. I have a top level VI that calls about 20 sub-vis during different steps in the calibration process, and about 50 user inputs from the front panel. I've attached a few screenshots of the spaghetti code below. It's hard to see what is going on, but you get the general idea.
</p>

<p>
	Whenever I need to modify the block diagram to add additional measurement steps or add more user inputs based on different test parameters, I end up spending a huge amount of time trying to create space by moving wires and SubVIs around to try to fit everything so it isn't 5 screens wide, and the wires paths are at least somewhat visible. Even as it is, I have 5 layer of stacked sequences to process everything.
</p>

<p>
	I sure there is a better way. Do you all have some tips as to how to build more manageable block diagrams? For the data, instead of wiring everything separately should I just make a 50 input cluster typedef and then wire the cluster to all my VI and unbundle the inputs I need inside each SubVI? Should I instead make 5 clusters of 10 inputs each to make the number of inputs more manageable? Any other style suggestions? I know from reading the forums that many LabVIEW programmers discourage using stacked sequences and would instead prefer to use a Producer/Consumer design pattern with queues, but I don't really understand how to do that. I would like to learn these techniques eventually, and apply that to future programs, but I am not there yet. Also, rewriting my program to a new design pattern would likely take me a few weeks or so, which I can't spare. I am looking more for tips that I can implement in a day or two of modifying my block diagrams without having to redo everything from scratch.
</p>

<p>
	Thanks. Here are a few screen shots of spaghetti code.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13816" src="https://lavag.org/uploads/monthly_2019_02/1629230515_BlockDiag1.png.3a5f05cb1eab1e0b2586f81fc0638ada.png" alt="1629230515_BlockDiag1.png.3a5f05cb1eab1e0b2586f81fc0638ada.png">
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13817" src="https://lavag.org/uploads/monthly_2019_02/61749476_BlockDiag2.png.c6667e9b31586f34c247225044243996.png" alt="61749476_BlockDiag2.png.c6667e9b31586f34c247225044243996.png">
</p>
]]></description><guid isPermaLink="false">20776</guid><pubDate>Wed, 06 Feb 2019 20:15:08 +0000</pubDate></item><item><title>plugin HAL</title><link>https://lavag.org/topic/20760-plugin-hal/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	I need help with the redesign of an old framework:
</p>

<p>
	A sequencer has a general plugin front panel for each family of instruments drivers.
</p>

<p>
	Each of the general plugins manages a front panel while interacting with a general family driver which is actually a dll server that accesses the instrument.
</p>

<p>
	That dll server accesses a dll that wraps the vis from the instrument manufacturer using family standard vis.
</p>

<p>
	For example:
</p>

<p>
	Instrument manufacturer Init vi -&gt; Instrument family standard Initialize vi -&gt; specific instrument standard dll -&gt; general family driver server dll -&gt; General family front panel plugin -&gt; sequencer 
</p>

<p>
	The result is the ability to build a sequence with a general family front panel + general driver and replace the general driver with a specific driver when it is done. 
</p>

<p>
	It shortens the development time since the sequence and the driver can be written in parallel while maintaining a bug free standard that gets all the other benefits of the sequencer or the already written front end logic.
</p>

<p>
	At the moment the driver family server is written in c because it was written when LabVIEW missed lots of features.
</p>

<p>
	Since it reminded me of the actors HAL example, I'm thinking about an actor that will hold the family front panel and lvlibp general driver with inheriting lvlibps that uses the manufacturer vis implementing standard family vis.
</p>

<p>
	Is there a simpler solution that will let me reuse as much of the framework?
</p>

<p>
	Thanks in advance.
</p>
]]></description><guid isPermaLink="false">20760</guid><pubDate>Tue, 22 Jan 2019 12:59:01 +0000</pubDate></item><item><title>REx - Remote Export Framework and Remote Events</title><link>https://lavag.org/topic/17024-rex-remote-export-framework-and-remote-events/</link><description><![CDATA[<p>
	lEver wanted to communicate with VI which are across context boundaries?
</p>

<p>
	Those typical boundaries, are
</p>

<ul>
	<li>
		 
	</li>
	<li>
		different LabVIEW project
	</li>
	<li>
		 
	</li>
	<li>
		LabVIEW into LabVIEW EXE,
	</li>
	<li>
		 
	</li>
	<li>
		EXE to EXE
	</li>
	<li>
		 
	</li>
	<li>
		PC to PC across a network or even the internet
	</li>
	<li>
		 
	</li>
</ul>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	Usually to get around these boundaries, we have to flatten to some easier transport mechanism like a string and then unflatten on the other end.
</p>

<p>
	 
</p>

<p>
	There are a whole other host of situations and and reasons why cross context boundary communication is useful and not just a simple slam dunk using existing primitives in LabVIEW
</p>

<p>
	 
</p>

<p>
	REx (Remote Export Framework) is a useful framework that you can take advantage of to eliminate the typical boundaries
</p>

<p>
	Instead of spend 45 minutes trying to describe it, see the linked videos below, (also in the PPT) until more written content gets made.
</p>

<p>
	 
</p>

<p>
	Basic Demo - Current App <a href="http://screencast.com/t/JbW2mM3jx" rel="external nofollow">http://screencast.com/t/JbW2mM3jx</a>
</p>

<p>
	 
</p>

<p>
	Creating &amp; Using a New Command <a href="http://screencast.com/t/GhkE2CEx4Ip" rel="external nofollow">http://screencast.com/t/GhkE2CEx4Ip</a>
</p>

<p>
	Send into EXE <a href="http://screencast.com/t/bxbI0B4l8Xs" rel="external nofollow">http://screencast.com/t/bxbI0B4l8Xs</a>
</p>

<p>
	EXE to EXE <a href="http://screencast.com/t/xCJw2B39mFQr" rel="external nofollow">http://screencast.com/t/xCJw2B39mFQr</a>
</p>

<div>
	 
</div>

<div>
	Debugging Ports / Services <a href="http://screencast.com/t/E0RXrgM3Yex" rel="external nofollow">http://screencast.com/t/E0RXrgM3Yex</a>
</div>

<div>
	Using Service Dump Info <a href="http://screencast.com/t/oTUSH5aFqo9S%C2%A0" rel="external nofollow">http://screencast.com/t/oTUSH5aFqo9S </a>
</div>

<div>
	Network Communication <a href="http://screencast.com/t/KuTPTKA8rmC1" rel="external nofollow">http://screencast.com/t/KuTPTKA8rmC1</a>
</div>

<div>
	 
</div>

<div>
	Rebuild of EXE (addendum) <a href="http://screencast.com/t/36oWmrybjRMj" rel="external nofollow">http://screencast.com/t/36oWmrybjRMj</a>
</div>

<div>
	 
</div>

<div>
	*******************
</div>

<div>
	1/12/15 Update: attached new VIPC which upgrades REx to 1.14.0.31 to address the issues w/ things not moving into the tools menu properly
</div>

<p>
	<a data-fileext="pptx" data-fileid="8424" href="https://lavag.org/applications/core/interface/file/attachment.php?id=8424" rel="">Remote Export – REx Framework.pptx</a>
</p>

<p>
	<a data-fileext="vipc" data-fileid="9854" href="https://lavag.org/applications/core/interface/file/attachment.php?id=9854" rel="">REx Installation Full.vipc</a><br />
	<br />
	01/31/22 Update: Added update to Error handling on response, required
</p>

<p>
	<a class="ipsAttachLink" data-fileext="vip" data-fileid="16430" href="https://lavag.org/applications/core/interface/file/attachment.php?id=16430&amp;key=be2282a58e2ddc792ffe1105aedc2dac" rel="">ni_lib_rex-1_15.0.30.vip</a>
</p>
]]></description><guid isPermaLink="false">17024</guid><pubDate>Tue, 06 Aug 2013 19:43:17 +0000</pubDate></item><item><title>Shared library PPL dependency problems</title><link>https://lavag.org/topic/20687-shared-library-ppl-dependency-problems/</link><description><![CDATA[<p>
	Inspired by my question from this post: <a href="https://lavag.org/topic/20648-project-template-dependencies-best-practices/" rel="">link</a>, I started off on a path of packaging project dependencies into vi.lib as suggested by <a contenteditable="false" data-ipshover="" data-ipshover-target="https://lavag.org/profile/52313-smithd/?do=hovercard" data-mentionid="52313" href="https://lavag.org/profile/52313-smithd/" rel="">@smithd</a> and <a contenteditable="false" data-ipshover="" data-ipshover-target="https://lavag.org/profile/4441-darren/?do=hovercard" data-mentionid="4441" href="https://lavag.org/profile/4441-darren/" rel="">@Darren</a>  however I have started down a rabbit hole of packed project library (ppl, *.lvlibp) head scratchers that have left me a little confused on what is going on in the background. Most of my components are built into packed libraries because I am following plugin models for extensibility when building as an EXE.  To make packed libraries work with dependencies, you basically have to build those into packed libraries as well to avoid the namespace issues.
</p>

<p>
	I used VIPM to create packages to distribute some of this shared code to vi.lib.  In the example below, I created a packed library (Controls.lvlibp) and packaged it to vi.lib for use.  In the Limits project in the image, I am using the Controls library in a few of the functions. Limits also contains a build specification to create a packed library for a component.  However, I first noticed an issue when I looked at my child class projects (that inherit from the Limits.lvlibp:Limits.lvclass).
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13561" src="https://lavag.org/uploads/monthly_2018_11/image.png.bf047ca37290771fcd30a2f057978145.png" alt="image.png.bf047ca37290771fcd30a2f057978145.png">
</p>

<p>
	The Limits.lvlibp is showing as Not Loaded. When I go directly to the library on disk and try to open it, I get the message "Project or Library file cannot be opened." I notice that if I get the correct Controls.lvlibp into memory by opening it up or by putting one of its VIs on a block diagram, then the library will load correctly.  So, I know it has something to do with when data from vi.lib is loaded into memory, but I don't know how to force it into memory to get this to work correctly.  Generally I am selecting the option to "Exclude dependent packed libraries" in my build specifications, but if I leave that unchecked it will open properly (because it places the dependency directly next to where it is built).  I did not have these issues until I placed my shared components into vi.lib, so I would be grateful for any help to help me debug this!
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13562" src="https://lavag.org/uploads/monthly_2018_11/image.png.7d268e2fbbb3335d91ff8a82cb602a17.png" alt="image.png.7d268e2fbbb3335d91ff8a82cb602a17.png">
</p>
]]></description><guid isPermaLink="false">20687</guid><pubDate>Fri, 09 Nov 2018 21:21:15 +0000</pubDate></item><item><title>How do you model this?</title><link>https://lavag.org/topic/11627-how-do-you-model-this/</link><description><![CDATA[<p>I've been working on developing a state diagram to document what our application has morphed into.*  The main loop uses a QSM architecture with ~35 states.  Some of the states queue up several states to execute in sequence.  (Woo hoo!  A queued sequence machine!  <img src="http://lavag.org/public/style_emoticons/default/wacko.gif" alt="wacko.gif"> )  Some of the states don't queue up any states after executing, relying instead on a previous state to drop enough states on the queue.  (This is the kind of thing I was thinking of when I referred to a "procedure machine" <a href="http://lavag.org/topic/11349-using-multiple-2-event-structures-in-1-vi/page__view__findpost__p__68321" rel="">here</a>.)  Some states queue up a new state under certain conditions, but drop to idle under other conditions.  Trying to map it all out is dizzying.</p>
<p>My question is about those states that do not queue up a new state.  As I understand it a state diagram shouldn't have a single state listed more than once.  How do you go about diagramming a situation where the previous state is one of many possible states and the following state depends completely on what was already put in the queue?  I have the distinct impression what we ended up with may be a state machine architecture but it's not really a state machine.  For one, I assume that for it to be a state machine you have to be able to model it.  Nevertheless, I still don't grok the Moore vs Mealy state machine models or how they apply to software, so maybe what we have is a Mealy machine and it is possible to model it clearly...</p>
<p>*Yes, I know the diagram is supposed to come <em>before</em> the code.  Managing this headless chicken of a project was out of my hands.  Best I can do at this point is try to contain the blood.</p>
]]></description><guid isPermaLink="false">11627</guid><pubDate>Tue, 15 Dec 2009 02:45:30 +0000</pubDate></item><item><title>How to display RT Data on a multicolumn listbox?</title><link>https://lavag.org/topic/20716-how-to-display-rt-data-on-a-multicolumn-listbox/</link><description><![CDATA[<p>
	Hi, I had a problem working with a CAN-bus equipment.
</p>

<p>
	 
</p>

<p>
	This is the flow chart of the device interface function call.    (Image.png),  What Structure, should I use to display RT Data on a multicolumn listbox while ensuring real-time ?   
</p>

<p>
	 
</p>

<p>
	 
</p>

<p><a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=13639">usbcan-e-u_demo_labview2010.zip</a></p>
<p><a href="https://lavag.org/uploads/monthly_2018_12/image.png.91d875bd8163c39333c30a58587ad1be.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="13640" src="https://lavag.org/uploads/monthly_2018_12/image.png.91d875bd8163c39333c30a58587ad1be.png" class="ipsImage ipsImage_thumbnailed" alt="image.png"></a></p>]]></description><guid isPermaLink="false">20716</guid><pubDate>Tue, 04 Dec 2018 09:06:10 +0000</pubDate></item><item><title>Advice Needed for Distributed Measurement and Control System</title><link>https://lavag.org/topic/20627-advice-needed-for-distributed-measurement-and-control-system/</link><description><![CDATA[<p>
	Hey guys!
</p>

<p>
	I wanted to get some expert advice on a distributed measurement and control system I've been tasked to create for a research project. Essentially, I have to gather measurements from a number of devices on a LAN, where the devices can vary in make/model and communication protocol (power meters using MODBUS, proprietary communication protocols, or BACnet)  These devices have varying/intermittent response rates on the LAN, mostly due to their distance from the router. I've followed two approaches in the past with mixed results:<br><br>
	1) Centralized DAQ Loop<br>
	I try to go with an OO approach where the parent class is Device, and it's "Get Measurement" VI is overridden with device specific commands. A configuration file indicates the devices that need to be queried and the DAQ loop just takes care of any new devices that are added. The issue is that some devices have slower response rates than others, which slows down the thread considerably. Some devices also need to have their connection refreshed - which again, doesn't help. This was abandoned pretty early on.<br><br>
	2) One loop per device<br>
	Hacky solution but it's worked so far - each loop takes care of it's own device, with the timing being controlled by a software defined clock. Definitely not scalable.
</p>

<p>
	Has anyone faced this in the past? I get the feeling that the Actor Framework might address this ...but just wanted to check before getting too far in.
</p>

<p>
	Shehezaada
</p>
]]></description><guid isPermaLink="false">20627</guid><pubDate>Thu, 13 Sep 2018 11:19:13 +0000</pubDate></item><item><title>Open VI Front panel programmatically without having to include the.vi in the build</title><link>https://lavag.org/topic/20603-open-vi-front-panel-programmatically-without-having-to-include-thevi-in-the-build/</link><description><![CDATA[<p>
	Open VI Front panel programmatically without having to include the.vi in the build folder.
</p>

<p>
	I'm using the invoke node to open the front panel and passing in a reference from a static vi reference. This appears to need the .vi file in the build folder to work but I would prefer not to include the .vi file as it's not very professional.
</p>

<p>
	Any help appreciated.
</p>
]]></description><guid isPermaLink="false">20603</guid><pubDate>Mon, 13 Aug 2018 11:24:18 +0000</pubDate></item><item><title>help for 3D Picture and markers</title><link>https://lavag.org/topic/19642-help-for-3d-picture-and-markers/</link><description><![CDATA[<p>
	Hi everybody,
</p>

<p>
	I'm a PhD student of Naples and I'm working in a complex project that involves Labview code (that I know very very basically..).
</p>

<p>
	I'll start to ask you help for a little problem <img alt=":)" data-emoticon="" src="https://lavag.org/uploads/emoticons/default_smile.png" title=":)"></p>

<p>
	I had imported a STL file (3D file) in Labview (below there is a screen shot) and I manage to get the coordinates x,y,z of  the point of the STL file that  I select with the mouse click.
</p>

<p>
	Now I would need to create a marker ( or a little sphere or a red point ) on the STL file where I clicked and, if I click on an other point I would need that the marker created before was deleted and that a new marker be created on the new point I clicked, I mean that on the 3D object must be always only one marker. (I'm sorry for my English, please tell me if there is something not clear).
</p>

<p>
	I would specifie somethings:
</p>

<ol><li>
		the Z coordinate is not important to create the marker/point/sphere because it gona be create on the surface of the 3D object I've imported at the start of the VI (STL file).
	</li>
	<li>
		I must be able to continue to move the 3D object in the scene and create the marker/sphere/point only when I click on the object surface
	</li>
	<li>
		I need to storage the X,Y marker coordinate
	</li>
	<li>
		on 3d onbject must be only one marker at the time
	</li>
</ol><p>
	 
</p>

<p>
	THANK YOU IN ADVANCE
</p>

<p>
	 
</p>

<p><a href="https://lavag.org/uploads/monthly_2016_06/Front_Pannel.png.1ae337a3535cf33e619263fcc312cf51.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="11306" src="https://lavag.org/uploads/monthly_2016_06/Front_Pannel.thumb.png.59a1bf6a6db57c24a18e91f694eb3c0f.png" class="ipsImage ipsImage_thumbnailed" alt="Front_Pannel.png"></a></p>
<p><a href="https://lavag.org/uploads/monthly_2016_06/Block_Diagram.png.c434685525f40d6ca4d76625b721cb53.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="11307" src="https://lavag.org/uploads/monthly_2016_06/Block_Diagram.thumb.png.dede2c232c14ad6a49502c7b8f5a9025.png" class="ipsImage ipsImage_thumbnailed" alt="Block_Diagram.png"></a></p>
<p><a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=11308">Pick_point_3D_Picture_Control.vi</a></p>]]></description><guid isPermaLink="false">19642</guid><pubDate>Thu, 09 Jun 2016 09:00:10 +0000</pubDate></item><item><title>Get VI Path</title><link>https://lavag.org/topic/20482-get-vi-path/</link><description><![CDATA[<p>
	Hi Folks,
</p>

<p>
	I have some popup VIs that can be called by the main VI's menu as well as from the popups themselves. These VIs are not dropped inside any VI, but are called dynamically using their path - either absolute or relative to the caller. My problem is, I do not know where the VIs might be placed at the time of the Build.
</p>

<p>
	Without going too deeply into the dirty laundry and politics of our company, the project was divided into 2 parts. One part is concerned with retrieving and writing data to a database (my part). This requires user interaction. My contribution is integrated into a legacy application "owned" by another person. That person controls the main VI as well as the Build and distribution. Unfortunately, he operates autonomously and without communication. Bottom line is I have no idea where he will place the VIs for the build and he may change the location at any future build.
</p>

<p>
	I cannot use the Get VI Dependency method because the popups are called dynamically and therefore do not exist on any block diagram. Is there <em>any</em> way to retrieve these paths within an executable at runtime?
</p>

<p>
	Yes, I know the answer is to work as a team, but that is not going to happen...
</p>

<p>
	Thanks,
</p>

<p>
	John
</p>
]]></description><guid isPermaLink="false">20482</guid><pubDate>Fri, 06 Apr 2018 19:32:40 +0000</pubDate></item><item><title>Is appropriate to use QSM in robotic arm control?</title><link>https://lavag.org/topic/20155-is-appropriate-to-use-qsm-in-robotic-arm-control/</link><description><![CDATA[<p>
	I use crio-9014 with 6 of NI9505 module to control RM-501 robotic arm.
</p>

<p>
	but i have some problem to design suitable architecture:
</p>

<p>
	1.Some component need synchronous.
</p>

<p>
	2.Need to store configure,it can change online.
</p>

<p>
	3.If possible, improve control rate.
</p>

<p>
	4.Some of Data is needed for many component.(Joint Position, Joint Velocity, Cartesian Position, Cartesian Velocity)
</p>

<p>
	I decide to use QSM in this application,is this good choice?  
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://lavag.org/uploads/monthly_2017_06/59328e07c156e_IMG_02101.JPG.42da85a05f24b1e5bafac67e5646f93a.JPG" data-fileid="12405" rel=""><img alt="IMG_0210[1].JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="12405" src="https://lavag.org/uploads/monthly_2017_06/59328e093110d_IMG_02101.thumb.JPG.6a60ea61f4833be354100673926696b0.JPG"></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://lavag.org/uploads/monthly_2017_06/59328e2092597_IMG_02111.JPG.d604dc6060bdef88bfaefbe2eb6ba603.JPG" data-fileid="12406" rel=""><img alt="IMG_0211[1].JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="12406" src="https://lavag.org/uploads/monthly_2017_06/59328e21edad2_IMG_02111.thumb.JPG.bde9931356e0695060ae38e8ca2d186d.JPG"></a>
</p>
]]></description><guid isPermaLink="false">20155</guid><pubDate>Wed, 31 May 2017 14:23:02 +0000</pubDate></item><item><title>LV text rendering, MBCS, OS, Unicode</title><link>https://lavag.org/topic/20436-lv-text-rendering-mbcs-os-unicode/</link><description><![CDATA[<p>
	<span style="font-size:12px;">Cross post from NI forums.</span>
</p>

<p>
	<span style="font-size:12px;"><a href="https://forums.ni.com/t5/LabVIEW/LV-text-rendering-MBCS-OS-Unicode/td-p/3740140" rel="external nofollow">https://forums.ni.com/t5/LabVIEW/<abbr title="LabVIEW">LV</abbr>-text-rendering-MBCS-OS-Unicode/td-p/3740140</a></span>
</p>

<p>
	<span style="font-size:12px;">This translation topic keeps coming back to me from time to time when I was asked to provide multilanguage UI for Chinese and Eng. </span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">I have the problem in understanding how <abbr title="LabVIEW">LV</abbr> is rendering strings.</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">So far I understand (I hope I do) that Windows uses </span><span style="font-size:12px;">unicode</span><span style="font-size:12px;"> UTF16. In <abbr title="LabVIEW">LV</abbr> we do not have Unicode support and (we have some private functions but using them is too much pain) uses MBCS so we need codepage to tell how string needs to be rendered. In </span><span style="font-size:12px;">Windows</span><span style="font-size:12px;"> we can set system locale that will tell </span><span style="font-size:12px;">non</span><span style="font-size:12px;"> Unicode</span><span style="font-size:12px;"> apps how to render strings?</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">Assuming all that </span><span style="font-size:12px;">i</span><span style="font-size:12px;"> have a problem understanding why this is displayed:</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;"><a class="ipsAttachLink ipsAttachLink_image" href="https://lavag.org/uploads/monthly_2018_02/large.png.7463726286efd0a96a5f4acbc320d398.png" data-fileid="12945" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="12945" src="https://lavag.org/uploads/monthly_2018_02/large.thumb.png.657d9f3a56e6083cbb57b6cf1af37005.png" alt="large.png"></a></span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">It should display exactly what is on this codepage? If not can someone explain why it shows this results and some random digits at the end?</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">Unicode strings can be converted to multibyte based on given codepage by using</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">WideCharToMultiByte and MultiByteToWideChar.</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">Assuming I have something written in </span><span style="font-size:12px;">russian</span><span style="font-size:12px;">/</span><span style="font-size:12px;">chinese</span><span style="font-size:12px;"> (Unicode) we can convert that to MBCS based on codepage and display correctly for valid codepage in the system?</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">I have looked at <abbr title="LabVIEW">LV</abbr> error files and they are stored in utf8 for </span><span style="font-size:12px;">xml</span><span style="font-size:12px;"> files, so some sort of conversion must occur inside <abbr title="LabVIEW">LV</abbr> to correctly display this data?</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<span style="font-size:12px;">txt</span><span style="font-size:12px;"> encoding of error files varies (at least that is what notepad++ is saying), for Chinese txt we have GB2312, when system locale is set to China I assume this coding will be used to render text in <abbr title="LabVIEW">LV</abbr>?</span>
</p>

<p style="margin:0px;font-size:16px;line-height:1.42;color:rgb(51,51,51);font-family:Helvetica, Arial, sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	 
</p>
]]></description><guid isPermaLink="false">20436</guid><pubDate>Tue, 20 Feb 2018 19:51:48 +0000</pubDate></item><item><title>Application configuration data storege</title><link>https://lavag.org/topic/20420-application-configuration-data-storege/</link><description><![CDATA[<p>
	Hello Guys,
</p>

<p>
	How do You store configuration data for applications?
</p>

<p>
	I have tried ini files, xml, binary over the years. Now I started to think that having one SQLite file for the application would be nice + some interface to configure all that data.
</p>

<p>
	What is Your experience on that aspect for small and big scale applications? What worked best, what kind of problems did You have? 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">20420</guid><pubDate>Mon, 05 Feb 2018 11:57:14 +0000</pubDate></item><item><title>deploy hierarchies of shared variables in EXE</title><link>https://lavag.org/topic/20410-deploy-hierarchies-of-shared-variables-in-exe/</link><description><![CDATA[<p>
	I wonder if someone ran into this and has a good suggestion about. I have a DSC project, in which it looks just right to organize hierarchically my shared variables. Like, e.g.
</p>

<p>
	<img alt="SystemManager_2018-01-25_11-50-47.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12876" src="https://lavag.org/uploads/monthly_2018_01/SystemManager_2018-01-25_11-50-47.png.3e21bcfc572c4086d2815db9b9925973.png"></p>

<p>
	Now this is easy to do programmatically, see the attached project. The problem arises when building an application. It would look as if the plain way to do it, would be to create a build specification which includes the additional libraries, and select their deployment in the "Shared Variable Deployment" tab. However, this doesn't seem to work for nested libraries as in my example. The only possibility seems to add in "Always included" each of the contained libraries. But by doing like this the hierarchy is flattened.
</p>

<p>
	If I include like this,
</p>

<p>
	<img alt="LabVIEW_2018-01-25_11-49-55.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12877" src="https://lavag.org/uploads/monthly_2018_01/LabVIEW_2018-01-25_11-49-55.png.832d78a24b964422c9a0ca52b47d2f81.png"></p>

<p>
	then the variables within the container library are not deployed at runtime.
</p>

<p>
	In my example project:
</p>

<ul><li>
		open the project in the IDE, run DeployAllSharedVariables.vi, then CheckDeployed, and see the result (all four variables found with their nested paths)
	</li>
	<li>
		build and run DeployFlatLibraries and see the result: four variables, but flattened paths
	</li>
	<li>
		build and run DeployHierarchicalLibraries: only the two variables in the unnested SimpleVariableLibrary are there.
	</li>
</ul><p>
	I've searched a bit, and only came up with <a href="https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019MEMSA2" rel="external nofollow">this document</a>, which (for &gt;2009) says "just check the checkbox". Nor the <a href="http://zone.ni.com/reference/en-XX/help/371618K-01/lvdscconcepts/building_dsc_app/" rel="external nofollow">help page</a> says much either.
</p>

<p>
	I wonder if I can do what I'd like only compiling separately the libraries, and loading them programmatically afterwards, both in the IDE and in the exe. Which probably is sane, but inconvenient for the first attempts.
</p>

<p>
	<a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12878" data-fileid="12878" rel="">TestDeploy.zip</a>
</p>
]]></description><guid isPermaLink="false">20410</guid><pubDate>Thu, 25 Jan 2018 10:27:29 +0000</pubDate></item><item><title>JKI VI Tester - Use of suites and cases to test multiple classes in the same way</title><link>https://lavag.org/topic/20395-jki-vi-tester-use-of-suites-and-cases-to-test-multiple-classes-in-the-same-way/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	I'm writing unit tests for some logging code (OK... so I suppose testing the actual logging class would be integration testing, but...) and have (at present) two disk logging classes and an in-memory test implementation.
</p>

<p>
	My test suite/case arrangement is currently a bit of a mess (understatement) and what I really want to do is run the same set of tests using each logging implementation. Obviously I don't want to code up the same tests repeatedly (and have to maintain a set of multiples).
</p>

<p>
	The solution as I understand it is to store a class object of the type to test in either the Suite or the Case (or both?) and then always read from private data when running a test. Writing the individual tests in this way is fine. My confusion lies in the best way to arrange the Suites and Cases to do this.
</p>

<p>
	In particular, if I have some DiskLoggerTestCase containing a collection of tests (for simplicity, all of my tests) and with the Logger object as private data of the Case, then I can create a Suite with code like below in New.vi (duplicatedCasePerSuite.png). Here, I build an array of each Logging object, then use a Write accessor and an autoindexing For loop to build the Suite. Problem: In the VI Tester UI, I see "DiskLoggerTestSuite:DiskLoggerTestCase, DiskLoggerTestSuite:DiskLoggerTestCase". There appears to be no way to distinguish or add names separately (if this is incorrect, I'd love to know how to change it).
</p>

<p>
	My second attempt (SuitePerImplementation.png) was to create a new Suite for the single TestCase, with each suite having a new name but the same TestCase (and using the write accessor, without a For loop). This works out, but means I now need to create a new suite for each additional implementation. It's not so terrible, but changes have to be reproduced in each suite if I want to modify something. Further, if I have more than one TestCase, it isn't possible to place them in a loop without reorganising them to inherit from a shared class providing the "Write Logging Object" VI as Dynamic Dispatch. Adding cases that don't use this require a new loop to discover their test methods. Duplicate code again rears its head.
</p>

<p>
	My next attempt will be to create one Suite of TestCases, in which the Suite has a Logging object, and it passes the object to the necessary cases, whilst allowing me to then create a set of owning Suites that each contain the first Suite. This is probably more or less the same as the second approach, but should at least compartmentalise some of the changes needed when adding Test Cases and separate adding Test Cases (change to the first Suite) from adding implementations (add a new Suite of the second type).
</p>

<p>
	 
</p>

<p>
	Does anyone know the way this should really be done? I feel l'm missing a good solution and just creating difficult-to-maintain messes.
</p>

<p><a href="https://lavag.org/uploads/monthly_2018_01/duplicatedCasePerSuite.png.bedd8e7cfa64633d0280a705a8d82def.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12844" src="https://lavag.org/uploads/monthly_2018_01/duplicatedCasePerSuite.png.bedd8e7cfa64633d0280a705a8d82def.png" class="ipsImage ipsImage_thumbnailed" alt="duplicatedCasePerSuite.png"></a></p>
<p><a href="https://lavag.org/uploads/monthly_2018_01/SuitePerImplementation.png.f0e712d2e800138b9f2e7c5585b1f934.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12845" src="https://lavag.org/uploads/monthly_2018_01/SuitePerImplementation.png.f0e712d2e800138b9f2e7c5585b1f934.png" class="ipsImage ipsImage_thumbnailed" alt="SuitePerImplementation.png"></a></p>]]></description><guid isPermaLink="false">20395</guid><pubDate>Fri, 05 Jan 2018 07:13:27 +0000</pubDate></item><item><title>Distributing updates by PPL instead of EXE</title><link>https://lavag.org/topic/20371-distributing-updates-by-ppl-instead-of-exe/</link><description><![CDATA[<p>
	I'm considering distributing a wrapper application that can download updates from the internet or internal network. I'm thinking that, so the user doesn't have to think too much about file locations or windows explorer, maybe just have the update in the form of a PPL and then async launch the top level. Has anyone had success going down this route?
</p>

<p>
	It would probably be a good idea to secure the PPL by either signing it or making sure to download it using SSL.
</p>
]]></description><guid isPermaLink="false">20371</guid><pubDate>Mon, 04 Dec 2017 20:36:57 +0000</pubDate></item><item><title>Tetris in LabView problem with move blocks</title><link>https://lavag.org/topic/20015-tetris-in-labview-problem-with-move-blocks/</link><description><![CDATA[<p>
	Hello.
</p>

<p>
	I try to make Tetris in LabView.  I have problem with stop blocks on the last field and move blocks left and right.
</p>

<p>
	Does anyone have an idea how to solve it?
</p>

<p>
	 
</p>

<div style="padding-top:20px;color:rgb(33,33,33);font-family:arial, sans-serif;font-size:0px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);">
	<pre lang="en" style="background-color:transparent;border:none;padding:0px .14em 0px 0px;margin:0px;font-family:inherit;width:276px;white-space:pre-wrap;font-size:29px;line-height:36px;color:rgb(33,33,33);" xml:lang="en">

 </pre>
</div>

<p><a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12098">Tetris4.vi</a></p>]]></description><guid isPermaLink="false">20015</guid><pubDate>Mon, 13 Feb 2017 19:19:01 +0000</pubDate></item><item><title>String with multiple delimiters</title><link>https://lavag.org/topic/20338-string-with-multiple-delimiters/</link><description><![CDATA[<p>
	Hi guys! I know that it is an old topic , but I will try !  <img alt="Smiley feliz" src="https://lavag.org/uploads/imageproxy/16x16_smiley-happy.gif.263a16b504a1f8213f12f6d4b00a0c86.gif" title="Smiley feliz"></p>

<p>
	My DAQ board sends to PC data in the following format.
</p>

<p>
	!voltage1[0],voltage2[0];voltage1[1],voltage2[1];voltage1[2],voltage2[2].....voltage1[n-1],voltage2[n-1]:TIMER4,TIMER5&lt;CR&gt;
</p>

<p>
	! is the starting character
</p>

<p>
	and we have "," , ":"   and ";" as delimiters.
</p>

<p>
	In the end of the packet (after ":") my board sends the values of two microcontroller timers (4 and 5).
</p>

<p>
	The first data packet ends with a &lt;CR&gt; and my boards repeats that every 3 seconds.
</p>

<p>
	 
</p>

<p>
	I need to plot voltage1[n] and voltage2[n] in two separate graphs and my time base is the value of TIMER4 / n.
</p>

<p>
	 
</p>

<p>
	The real data is like showed below.
</p>

<p>
	 
</p>

<p>
	!0016442034,0000727890;0016499095,0000727024;0016543605,0000724990;0016568541,0000722157;0016578803,0000719243;0016587848,0000716010:0123456789,9876543210&lt;CR&gt;
</p>

<p>
	 
</p>

<p>
	I have used and modified altenbach's VI (<a href="https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Contract-multiple-delimiters-for-quot-Spreadsheet-string-to/idc-p/1239830#M7564" rel="external nofollow">https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Contract-multiple-delimiters-for-quot-Spreadsheet-string-to/idc-p/1239830#M7564)</a> but some delimiters are bothering me yet.
</p>

<p>
	 
</p>

<p>
	<u>Modified Altenbach's VI</u>
</p>

<p>
	<span style="width:769px;"><span><img alt="VI.PNG" src="https://lavag.org/uploads/imageproxy/10bee97e5aaa7939a5e7df85d724fe4f.png.b31dacf0a5fe0a4312e29e67856e31aa.png" title="VI.PNG"><span> </span></span></span>
</p>

<p>
	<u>Case value 1 detail</u>
</p>

<p>
	<span style="width:199px;"><span><img alt="vi1.PNG" src="https://lavag.org/uploads/imageproxy/c8ecca60bdb071366d09eff6392e744c.png.5abc374478e85fd643751b920f275108.png" title="vi1.PNG"><span> </span></span></span>
</p>

<p>
	The result is:
</p>

<p>
	<span style="width:443px;"><span><img alt="screen.PNG" src="https://lavag.org/uploads/imageproxy/35217c38493b290ec70cfbe4dcf9538b.png.b725d66df168b6f61f736e81c3acbe2a.png" title="screen.PNG"><span> </span></span></span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	The VI was great to separate correctly the values of voltage1 and voltage 2 in two separate strings but I did not know how to avoid the last comma.
</p>

<p>
	Also in Timer4 and Timer5 I could not avoid the characters ":" and "," right before the numeric values.
</p>

<p>
	I would be grateful if anybody help to solve this issue or give me other tips to do what I need with that data.
</p>

<p>
	Thank you everybody in advance !
</p>

<p>
	<a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12728" data-fileid="12728" rel="">DirtySpreadsheetStringToArrayVariable.vi</a>
</p>
]]></description><guid isPermaLink="false">20338</guid><pubDate>Thu, 26 Oct 2017 02:12:30 +0000</pubDate></item><item><title>VI server method to get refs of all clones?</title><link>https://lavag.org/topic/20341-vi-server-method-to-get-refs-of-all-clones/</link><description><![CDATA[<p>
	I thought there was an easy, built in, VI server way of doing the following, but I haven't found one. Am I missing something trivial?
</p>

<p>
	So I have one application instance, spawning clones of a certain VI. I would like to get an array of the VI refs of all of these clones. I thought I could via some property like  <em>Application:All VIs in memory</em>, but I haven't found any suitable. <em>All VIs in memory</em> gets only the base VI names.
</p>

<p>
	Missing that, I resort to register all my clones in a FGV as they startup, <img class="ipsImage ipsImage_thumbnailed" data-fileid="12737" src="https://lavag.org/uploads/monthly_2017_10/r.png.a57c119e1143fe777d894f5c3048fb7f.png" alt="r.png">, and consult the FGV at will. Is there a more linear way?
</p>

<p>
	<a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12736" data-fileid="12736" rel="">RegisterMovieWriters.vi</a>
</p>

<p>
	I also note that I have to associate each VI ref with its clone name in the FGV, otherwise plain refs to different clones match as equal in lookups.
</p>
]]></description><guid isPermaLink="false">20341</guid><pubDate>Mon, 30 Oct 2017 17:54:38 +0000</pubDate></item><item><title>Will statecharts survive to move to nxg?</title><link>https://lavag.org/topic/20336-will-statecharts-survive-to-move-to-nxg/</link><description><![CDATA[<p>
	I have to admit I've never gotten to use the state-chart module on a project, but I've always wanted too. I really enjoyed it when i evaluated it, but i worry it wont be available to nxg users... ever. Of course I can hope that it will be re-tooled and better than ever on nxg. What do you guys think will happen?
</p>]]></description><guid isPermaLink="false">20336</guid><pubDate>Mon, 23 Oct 2017 20:37:27 +0000</pubDate></item><item><title>Add an option</title><link>https://lavag.org/topic/20331-add-an-option/</link><description><![CDATA[<p>
	How do I add an option to the menu in the upper right corner?
</p>

<p>
	 
</p>

<ul style="margin:0px;padding:0px;list-style:none;"><li style="font-size:14px;vertical-align:middle;line-height:22px;margin-right:15px;">
		<ul style="margin:0px;padding:5px;list-style:none;color:rgb(39,42,52);font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;"><li style="float:right;vertical-align:middle;margin-right:0px;margin-left:15px;">
				 
			</li>
		</ul></li>
</ul>
<p><a href="https://lavag.org/uploads/monthly_2017_10/59eb342066b2e_.png.e65a08abd0b29d240d3a0ca487390f56.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12718" src="https://lavag.org/uploads/monthly_2017_10/59eb34210c925_.thumb.png.d1ba80d12e66cb03ed1b5f042365307a.png" class="ipsImage ipsImage_thumbnailed" alt="未命名.png"></a></p>]]></description><guid isPermaLink="false">20331</guid><pubDate>Sat, 21 Oct 2017 11:50:25 +0000</pubDate></item><item><title>Slow Index Array of Classes</title><link>https://lavag.org/topic/20325-slow-index-array-of-classes/</link><description><![CDATA[<p>
	I have an array of classes, let's call the object TestPass, of size 1 (but it is an array because it can scale out to multiple test passes). In this class, there is one other nested class which is not too complex, then various numeric and string fields to hold some private data. There is also an array of clusters. In this cluster there is a string, two XY pair clusters, and an integer. Not very confusing.
</p>

<p>
	This array of clusters gets fairly large, however, upwards of 80-100k elements. What I am finding is when I index the array of pass classes it is crazy slow. On the order of 30 ms. Doesn't seem like much, but we are indexing the array in our method to "Get Current Pass" which is used in various places throughout our code. This is adding potentially hours to our test time over the 80k devices we are testing. 
</p>

<p>
	So, I started digging. When I flatten the class to a string and get the length, it's 3 mb. But, when I run the function with the profiler is is allocating close to 20 mb of memory!
</p>

<p>
	My gut feel was that the string is causing the issues. So I removed the string from the cluster and the index time went to 0 ms. 
</p>

<p>
	Luckily we can normalize a bit and pull the strings out of the cluster since a lot of them are duplicates. But it makes our data model a bit uglier. 
</p>

<p>
	Has anyone seen these kind of performance issues before? I saw them in 2013 and 2017.
</p>
]]></description><guid isPermaLink="false">20325</guid><pubDate>Mon, 16 Oct 2017 16:12:22 +0000</pubDate></item><item><title>Variant</title><link>https://lavag.org/topic/20313-variant/</link><description><![CDATA[<p>
	There is a way to solve the automatic judgment Variant Type and transferred to the output ??
</p>]]></description><guid isPermaLink="false">20313</guid><pubDate>Sat, 30 Sep 2017 14:23:14 +0000</pubDate></item><item><title>Decouple UI and application core - need advice</title><link>https://lavag.org/topic/20261-decouple-ui-and-application-core-need-advice/</link><description><![CDATA[<p>
	I have to decouple the UI part of a medium size application (approx. 2000 VIs) from its core.
</p>

<p>
	When we created the application it was a simple state machine.<br>
	Later we realized that some operations must be asynchronous<br>
	so we added an event-based control loop that controls the state machine<br>
	via user events. But it was still a single VI and over the years it grew bigger...<br>
	Now I decided to move the state machine (approx. 70 states) into a subVI but since<br>
	there never was a separation between the UI part and the non-UI part I now<br>
	need a way to access the UI controls (approx. 40 controls) from the state machine.
</p>

<p>
	<br>
	Currently I see the following options:
</p>

<p>
	1) User events from/to the state machine. This seems to be a quite clean<br>
	approach but means a lot of work.
</p>

<p>
	2) Use something like Actor Framework. Probably the most clean approach but<br>
	even more work.
</p>

<p>
	3) Get/Set Control Values by Index. I prefer that over Get/Set Control Value<br>
	because I often have to read/write several controls at once. I can easily<br>
	encapsulate this in a nice class that maps my control names to indices.
</p>

<p>
	4) Put the control refnums into a cluster and pass that to the state machine subVI.<br>
	This is the approach I dislike the most. I already decided not to do it that way.
</p>

<p>
	Currently I like 3) best but I have mixed feelings about it:<br>
	- It seems odd to use control access to separate application parts. Maybe that's just me but it feels wrong...<br>
	- I have controls of which I have to access other properties than the value so I definitely need events here.<br>
	- Searching here on LAVA brought nothing about Get/Set Control Values by Index which disturbs me a little bit.
</p>

<p>
	Do you have any any advice for me? Do I miss something important?
</p>

<p>
	Thanks in advance,
</p>

<p>
	candidus<br>
	 
</p>
]]></description><guid isPermaLink="false">20261</guid><pubDate>Fri, 25 Aug 2017 09:24:19 +0000</pubDate></item><item><title>Hard Crashes, maybe start async call node related?</title><link>https://lavag.org/topic/20298-hard-crashes-maybe-start-async-call-node-related/</link><description><![CDATA[<p>
	I have been getting some hard crashes in my built application and I have some strange feeling (although it's just a guess) that it is related to a combination of using the database toolkit in a pool of workers that are launched by the start async call node. Their job is to sit there and monitor a directory then parse data files and throw their contents at the database through a stored procedure call. All my hardware comms (2 instruments) are using scpi commands through VISA GPIB and TCP so I think the risk that those are causing crashes is relatively low.
</p>

<p>
	Active X inside a bunch of parallel threads seems far more risky, even though as far as I can tell adodb should be thread safe, and each thread manages its own, unshared connection. These crashes are happening ~once a day on multiple test stations. I have sent the crash dumps to NI but am waiting to hear back. Right now I am grasping at straws because when I look at the dump file it's pointing me to function calls in the lvrt dll which does nothing for me. 
</p>

<p>
	I am mostly just looking for any debugging suggestions or direction to getting this resolved more efficiently than just disabling code one loop at a time. I'm also curious if anyone has seen something similar. For the time being, I have reduced my number of workers to 1 in case it is a thread safety issue. I have also considered getting rid of that DB toolkit and leveraging .NET, even though I think that is just a wrapper around the same calls. Looking inside the database toolkit VIs alone scares me.
</p>

<p>
	FWIW I am using LabVIEW 2013 in this application.
</p>

<p>
	Thanks!
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">20298</guid><pubDate>Thu, 21 Sep 2017 20:54:54 +0000</pubDate></item><item><title>Multi-user acess to cRIO</title><link>https://lavag.org/topic/18852-multi-user-acess-to-crio/</link><description><![CDATA[<p>Hi,</p>
<p> </p>
<p>I need advice for architecture design for application where measurement from cRIO could be accesed by multiple user at the same time.</p>
<p> </p>
<p>My first idea was tu use 'Remote Panel' but:</p>
<p>- GUI is composed of a few dialogs and only one user can control 'Remote Panel' which also means that only one user can launch dialogs on its computer.</p>
<p>-  The customer would like to transform signal to sound and listen to it. It is also unavaliable using Remote Panel</p>
<p> </p>
<p>The second idea was to use 'Shared Variables' but:</p>
<p>- In order to hear the sound it has to be streamed to the user.</p>
<p> </p>
<p>Curenet application works for one user using combination of 'Shared Variables' and 'Network Stream'.</p>
<p> </p>
<p>The last idea is to publish all informations which needs to be published through 'Shared Variable' and implement special mechanism which will create seperate 'Network Stream' for each user who try to connect to cRIO.</p>
<p> </p>
<p>I am concerned about managing many 'Network Streams' so maybe somebody here have a better idea.</p>
<p> </p>
<p>Thank you for all responses.</p>
]]></description><guid isPermaLink="false">18852</guid><pubDate>Mon, 02 Mar 2015 17:48:32 +0000</pubDate></item><item><title>myrio voce recognition</title><link>https://lavag.org/topic/20263-myrio-voce-recognition/</link><description><![CDATA[<p>
	hi,i am making voice control robot.i have heard that microsoft voice sdk cannot work for myrio. then what works for myrio so that it acquires voice and perform action.can any one please provide the links or sample programs for voice recognition in myrio. and also i wanted to diplay the text spoken,is their any dictionary vi for all words.if not how we can predefine only certain words.
</p>]]></description><guid isPermaLink="false">20263</guid><pubDate>Sat, 26 Aug 2017 06:43:59 +0000</pubDate></item><item><title>Help Needed with Configuration File (.ini) Control for Connection to DAQmx Virtual Channel</title><link>https://lavag.org/topic/20234-help-needed-with-configuration-file-ini-control-for-connection-to-daqmx-virtual-channel/</link><description><![CDATA[<p>
	Dear All, 
</p>

<p>
	I'm new to this forum and I'm really glad I became a member.
</p>

<p>
	I am currently in the phase of designing a simple program which can control all the DAQmx channels using a configuration file (.ini) which is capable of change voltage range during mid-simulation. 
</p>

<p>
	At the moment my .ini file reads as follows: 
</p>

<p>
	<strong>[AO Channel 1] </strong>
</p>

<p>
	<strong>Name = T2</strong>
</p>

<p>
	<strong>Physical Channel = cDAQ1Mod1/ao0</strong>
</p>

<p>
	<strong>Max Value = 10 </strong>
</p>

<p>
	<strong>Min Value = 0 </strong>
</p>

<p>
	<strong>[AO Channel 2] </strong>
</p>

<p>
	<strong>Name = T3</strong>
</p>

<p>
	<strong>Physical Channel = cDAQ1Mod1/ao1</strong>
</p>

<p>
	<strong>Max Value = 10 </strong>
</p>

<p>
	<strong>Min Value = 0 </strong>
</p>

<p>
	<strong>[AO Channel 1] </strong>
</p>

<p>
	<strong>Name = T2</strong>
</p>

<p>
	<strong>Physical Channel = cDAQ1Mod1/ao0</strong>
</p>

<p>
	<strong>Max Value = 5 </strong>
</p>

<p>
	<strong>Min Value = 0 </strong>
</p>

<p>
	<strong>[AO Channel 2] </strong>
</p>

<p>
	<strong>Name = T3</strong>
</p>

<p>
	<strong>Physical Channel = cDAQ1Mod1/ao1</strong>
</p>

<p>
	<strong>Max Value = 10 </strong>
</p>

<p>
	<strong>Min Value = 0 </strong>
</p>

<p>
	My LabVIEW VI for the .ini script  is attached. I'm relatively new to using configuration file functions and I don't really understand where "Get Key Names" section should be wired to. I have placed a constant on it for now which reads the "AO Channel 1" but how can I get it to read all the channels in the .ini file.
</p>

<p>
	I am welcome to all suggestions here, I just want to make sure that I don't cause any problems to any of the channels and use best practice methods. All constructive criticism welcome!
</p>

<p>
	Thank you. 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p><a href="https://lavag.org/uploads/monthly_2017_08/iniblockdiagram.PNG.8b2d1389da61d4c65941f9f460d47e68.PNG" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12563" src="https://lavag.org/uploads/monthly_2017_08/iniblockdiagram.thumb.PNG.84ac36e181d8354558728d627726d2f7.PNG" class="ipsImage ipsImage_thumbnailed" alt="iniblockdiagram.PNG"></a></p>
<p><a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12564">Read Configuration (INI) File (1).vi</a></p>]]></description><guid isPermaLink="false">20234</guid><pubDate>Wed, 02 Aug 2017 14:37:31 +0000</pubDate></item><item><title>Obtaining SceneMesh parameters of 3D objects</title><link>https://lavag.org/topic/20202-obtaining-scenemesh-parameters-of-3d-objects/</link><description><![CDATA[<p>
	Hi All.
</p>

<p>
	How can I obtain the SceneMesh parameters of an Object if I only have the objects name.
</p>

<p>
	My thoughts would be to use something as shown below.... unfortunately SceneMesh is not a Class of SceneObject....
</p>

<p>
	Specifically I would like to get the VertexArray, NormalArray and Indices.
</p>

<p>
	Any suggestions?
</p>

<p>
	 
</p>

<p><a href="https://lavag.org/uploads/monthly_2017_07/SceneMesh.png.68b546e192b80c61bbc65e010d15e015.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12485" src="https://lavag.org/uploads/monthly_2017_07/SceneMesh.png.68b546e192b80c61bbc65e010d15e015.png" class="ipsImage ipsImage_thumbnailed" alt="SceneMesh.png"></a></p>]]></description><guid isPermaLink="false">20202</guid><pubDate>Tue, 11 Jul 2017 20:08:42 +0000</pubDate></item><item><title>Data transfer strategies for FPGA-RT-Host</title><link>https://lavag.org/topic/20192-data-transfer-strategies-for-fpga-rt-host/</link><description><![CDATA[<p>
	Hi all,
</p>

<p>
	I have a question about high level system design with FPGA-RT-PC. It would be great if I can get some advice about ideal approaches to move data between the 3 components in an efficient manner. There are several steps; DMA FIFO from FPGA to RT, processing the data stream in the RT to derive chunks of useful information, parsing these chunks into complete sets on the RT and sending these sets up to the Host.
</p>

<p>
	In my system, I have the FPGA monitoring a channel of a digitiser and deriving several data streams from events that occur (wave, filtered data, parameters etc). When an event occurs the data streams are sent to the RT through a DMA FIFO in U64 chunks. Importantly, events can be variable length.  To overcome this, I reunite the data by inserting unique identifiers and special characters (sets of 0's) into the data streams which I later search for on the RT.
</p>

<p>
	Because the FPGA is so fast, I might fill the DMA FIFO buffer rapidly, so I want to poll the FIFO frequently and deterministically. I use a timed loop on the RT to poll the FIFO and dump the data as U64's straight into a FIFO on the RT. The RT FIFO is much larger than the DMA FIFO, so I don't need to poll it as regularly before it fills.
</p>

<p>
	The RT FIFO is polled and parsed by parallel loop on the RT that empties the RT FIFO and dumps into a variable sized array. The parsing of the array then happens by looking for special characters element wise. A list of special character indices is then passed to a loop which chops out the relevant chunk and, using the UID therein, writes them to a TDMS file.
</p>

<p>
	Another parallel loop then looks at the TDMS group names and when an event has an item relating to each of the data streams (i.e. all the data for the event has been received), a cluster is made for the event and it is sent to the host over a network stream. This UID is then marked as completed.
</p>

<p>
	The aim of the system is to be fast enough that I do not fill any data buffers. This means I need to carefully avoid bottle necks. But I worry that the parsing step, with a dynamically assigned memory operation on a potentially large memory object, an element wise search and delete operation (another dynamic memory operation) may become slow. But I can't think of a better way to arrange my system or handle the data. Does anyone have any ideas?
</p>

<p>
	PS I would really like to send the data streams to the RT in a unified manner straight from the RT, by creating a custom data typed DMA FIFO. But this is not possible for DMA FIFOs, even though it is for target-scoped FIFOs!
</p>

<p>
	Many thanks,
</p>

<p>
	Max
</p>
]]></description><guid isPermaLink="false">20192</guid><pubDate>Thu, 06 Jul 2017 07:49:55 +0000</pubDate></item><item><title>Data type parsing</title><link>https://lavag.org/topic/20146-data-type-parsing/</link><description><![CDATA[<p>
	Can someone explain the use of Data type parsing?<br>
	Thank you
</p>]]></description><guid isPermaLink="false">20146</guid><pubDate>Sun, 28 May 2017 13:39:57 +0000</pubDate></item><item><title>NI Bluetooth Auto Trigger VI</title><link>https://lavag.org/topic/20103-ni-bluetooth-auto-trigger-vi/</link><description><![CDATA[<p>
	The NI-RSFA-Bluetooth Analysis soft front panel has a function in it called "Auto Trigger".<br>
	The Examples of how to use the bluetooth (as shown in my below examples) set the "Ref Power Edge" if the auto trigger is set to false, or "Un Set" the reference trigger.
</p>

<p>
	I would like an "Auto Trigger Level" function. It is my beleif that National Instruments do not provide an example of this. Does anyone have any idea how I would even begin to make an Auto Trigger Level VI for the Bluetooth analysis toolkit.
</p>

<p>
	Many thanks, Alec
</p>

<p><a href="https://lavag.org/uploads/monthly_2017_04/58f5f6d1c8576_AutoTriggerCode.jpg.38726debd7b10e11365a4da2bbb8e320.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12262" src="https://lavag.org/uploads/monthly_2017_04/58f5f6d221a39_AutoTriggerCode.thumb.jpg.680ac30c62007da5c78129b9fefa98d4.jpg" class="ipsImage ipsImage_thumbnailed" alt="Auto Trigger Code.jpg"></a></p>
<p><a href="https://lavag.org/uploads/monthly_2017_04/58f5f6d5b3f73_ManualTrigerCode.jpg.e92acae2143f05a28f1d289294d8fc06.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12263" src="https://lavag.org/uploads/monthly_2017_04/58f5f6d6034d7_ManualTrigerCode.thumb.jpg.66d868ff314439e1abc7941dab8fcf1e.jpg" class="ipsImage ipsImage_thumbnailed" alt="Manual Triger Code.jpg"></a></p>
<p><a href="https://lavag.org/uploads/monthly_2017_04/58f5f6da8acb5_AutoTrigger.jpg.ff697d378b6641d4568b2c00bd19f941.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12264" src="https://lavag.org/uploads/monthly_2017_04/58f5f6dae886d_AutoTrigger.thumb.jpg.0026c2b6106d2c3c99df3bf4feeac94a.jpg" class="ipsImage ipsImage_thumbnailed" alt="Auto Trigger.jpg"></a></p>]]></description><guid isPermaLink="false">20103</guid><pubDate>Tue, 18 Apr 2017 11:41:13 +0000</pubDate></item><item><title>working with values of a table</title><link>https://lavag.org/topic/20079-working-with-values-of-a-table/</link><description><![CDATA[<p>
	Hello everyone,
</p>

<p>
	I have a question regarding re-writing values in a table.
</p>

<p>
	I have a table (attached as png). I have to save and read the values from this table and main point re-write.
</p>

<p>
	I have been able to save and read but whenever i try to re-write a value or give in a new value in the table, it turns all the other values to zero and only the new value(s) is then shown. Do you know how i can avoid that?
</p>

<p>
	And one more thing i have used .ini to save the values. Is there any easier way to do so?
</p>

<p>
	Thank you <img alt=":)" data-emoticon="" src="https://lavag.org/uploads/emoticons/default_smile.png" title=":)"></p>

<p>
	 
</p>

<p><a href="https://lavag.org/uploads/monthly_2017_03/table.PNG.4bc24098952aed588c7a7b94516d5127.PNG" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="12204" src="https://lavag.org/uploads/monthly_2017_03/table.PNG.4bc24098952aed588c7a7b94516d5127.PNG" class="ipsImage ipsImage_thumbnailed" alt="table.PNG"></a></p>]]></description><guid isPermaLink="false">20079</guid><pubDate>Tue, 28 Mar 2017 11:33:13 +0000</pubDate></item><item><title>2D Array Filling by Boolean</title><link>https://lavag.org/topic/20064-2d-array-filling-by-boolean/</link><description><![CDATA[<p>
	Hello,
</p>

<p>
	In the the attached vi there is the followiing operation:
</p>

<p>
	When the boolean (Acquire) turns on, an array starts to fill with data, when that boolean turns off the user can decide to "keep" that 1D data by pressing a boolean button (Keep) and thus incerting that 1D array into a 2D array. When the user repeats the process the 2D array should populate accordingly; one row of 1D data each time the keep is pressed. As you can see from the attached vi, when the user presses the keep button, the 2D array continuously fills with the acquired array. I "prevented" this by adding a 1sec timer but its a bit unstable.
</p>

<p>
	Is there another way of doing this?
</p>

<p>
	Thank you in advance
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12166" data-fileid="12166" rel="">2D array filling.vi</a>
</p>
]]></description><guid isPermaLink="false">20064</guid><pubDate>Thu, 16 Mar 2017 11:46:59 +0000</pubDate></item><item><title><![CDATA[Graph & Timing]]></title><link>https://lavag.org/topic/20059-graph-timing/</link><description><![CDATA[<p>
	Hello,
</p>

<p>
	This is probably a silly question but my mind is stuck!
</p>

<p>
	Attached there is a simple voltage acquisition vi. The aim is to have a case structure in a while loop and acquire-plot data from a sensor when the case structure is true. The displayed data needs to be plotted against time in seconds starting from 0 and ending in Xsec. Each time the case structure is true, the x-y graph needs to display the new data with the time starting at 0.
</p>

<p>
	The vi does not do that, instead the old data remains on the graph and on top of that the vi gives an Error -200279 after a while.
</p>

<p>
	What am I doing wrong?
</p>

<p><a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=12151">Voltage - Continuous Input.vi</a></p>]]></description><guid isPermaLink="false">20059</guid><pubDate>Tue, 14 Mar 2017 07:28:44 +0000</pubDate></item><item><title>Simple string in and out of a DLL created with LabVIEW</title><link>https://lavag.org/topic/19939-simple-string-in-and-out-of-a-dll-created-with-labview/</link><description><![CDATA[<p>
	Good morning,
</p>

<p>
	I have a DLL I created (in Labview)  that takes in string information, does some magic crunching on it to create a password that is passed out as a string.  This DLL will be called from CVI and probably from a C# application.
</p>

<p>
	This should be so simple, however I cannot figure out how to pass the string in and get the modified string out of my DLL.
</p>

<p>
	I've had no luck at all getting this DLL to work by trying many different things.  It crashes <abbr title="LabVIEW">LV</abbr>, returns and error, or simply passes nothing out during my trials.
</p>

<p>
	I've included the project (its small) in zipped format.  Can one of you kind souls take a look at my code and tell me what I'm doing wrong, or what I need to do correctly to both, configure the DLL and then call it from LabVIEW?
</p>

<p>
	 
</p>

<p>
	Thank you!
</p>

<p>
	 
</p>

<p>
	Randy
</p>

<p><a class="ipsAttachLink" href="//lavag.org/applications/core/interface/file/attachment.php?id=11905">Password Generator.7z</a></p>]]></description><guid isPermaLink="false">19939</guid><pubDate>Mon, 02 Jan 2017 16:22:28 +0000</pubDate></item><item><title>Automatic Check for 'Re-entrant'</title><link>https://lavag.org/topic/20034-automatic-check-for-re-entrant/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	   I have a whole chain of Sub VIs. Is there any automated way I can check to see if everything in the chain is re-entrant?
</p>

<p>
	Cheers, Alec
</p>
]]></description><guid isPermaLink="false">20034</guid><pubDate>Thu, 23 Feb 2017 12:47:20 +0000</pubDate></item><item><title>Single Storage point for Multithreaded code</title><link>https://lavag.org/topic/20017-single-storage-point-for-multithreaded-code/</link><description><![CDATA[<p>
	Hi. I have a vi I am calling time and time again. Sometimes I call the VI its self and sometimes I call a VI which loads a clone instance by reference of the vi.
</p>

<p>
	I need a single storage point for this vi, no matter where it is, how maybe threads deep it has got its self, I need a central repository for its data.
</p>

<ol><li>
		Can I just use a normal vi as a Functional Global Variable, or do I run the risk of cloning the FGV, and therefor the data inside it?
	</li>
	<li>
		Do I need a single vi, that I call from disk once and talk to it by its queue, (and assign the queue a fixed name)
	</li>
</ol><p>
	Many thanks, Alec
</p>
]]></description><guid isPermaLink="false">20017</guid><pubDate>Wed, 15 Feb 2017 12:55:18 +0000</pubDate></item><item><title>storing a value</title><link>https://lavag.org/topic/20003-storing-a-value/</link><description><![CDATA[<p>
	Hello <img alt=":rolleyes:" data-emoticon="" src="https://lavag.org/uploads/emoticons/default_rolleyes.gif" title=":rolleyes:"></p>

<p>
	I have a question regarding storing a value until changed. This might be confusing so ask me if you have any question.
</p>

<p>
	Since i can't share my program because of some adminishtrative rules i will try my best to give an example.
</p>

<p>
	So i have to give in 3 values say x, y, z and if these values are not given, the program has to read the previous value. For this i think i have to store the value and if it's not given read the value from the place i have stored. How do i do this?
</p>

<p>
	Thank you for your help <img alt=":)" data-emoticon="" src="https://lavag.org/uploads/emoticons/default_smile.png" title=":)"></p>
]]></description><guid isPermaLink="false">20003</guid><pubDate>Tue, 07 Feb 2017 13:23:12 +0000</pubDate></item></channel></rss>
