-
Posts
3,432 -
Joined
-
Last visited
-
Days Won
289
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by hooovahh
-
Futures - An alternative to synchronous messaging
hooovahh replied to Daklu's topic in Object-Oriented Programming
So without having actually tried, I suspect I can help out with this. I have a cDAQ 9132 on hand which is the x64 atom based controller running Linux RT. I feel like I should be able to install some software that allows me to take an image of the hard drive, and then boot that hard drive image in a VM. My concern with this the legality, of me sharing it, and the distribution method for a large HD image -
Boolean Tag Channel vs Notifier Performance
hooovahh replied to infinitenothing's topic in LabVIEW General
As far as I know there have been no community examples of making custom channels yet, other than this recent one posted by Stephen. I believe the hooks or standards for making custom channels hasn't been published yet. (I was wrong documentation was posted by smithd) http://forums.ni.com/t5/LabVIEW-Channel-Wires/A-new-channel-template-Event-Messenger/gpm-p/3460575 That one in particular is a new type of channel wire that supports registering for a dynamic event. -
Okay after some searching I finally found the NI Week 2016 presentation I was talking about. http://forums.ni.com/t5/2016-Advanced-User-Track/TS9524-Code-Optimization-and-Benchmarking/gpm-p/3538653
-
Oh that is interesting. Well you aren't dealing with any graph type because what you want to show isn't an X axis. An axis on any graph type always increases to the right and decreases as you go left. To make a UI like this I can think of a couple of solutions, but most are going to be very static and won't resize with the UI. Adjusting the number of points on the UI will likely break things. The only thing I can think of that will scale well, would be to make a 2D picture control, then increasing or decreasing the font size of the numbers on the bottom based on the size of the image, and number of points. This will give the most amount of control for things like rotating the font, which in LabVIEW is generally more difficult than it should be. As for the graph part, yes that should probably be a Waveform Graph since each point is the same distance apart, which in this case the units and size don't matter since the real X axis is not shown.
-
The variant attributes is probably the fastest way for any decent sized table. Otherwise you are using the search 1D array. You can run some speed and performance testing to see which is faster for the data you have. I'd recommend you watch some of the 2016 advanced user track videos on Benchmarking and Optimization...but NI's site is a bit broken at the moment and I can't find hardly anything, but this is where the session content is, videos are a bit harder to find. http://forums.ni.com/t5/NIWeek-Session-Content/TS9524-Code-Optimization-and-Benchmarking/ta-p/3321074
-
Well you are using a Waveform Graph. This means that every X value is separated by the same amount. This is generally used for displaying something like DAQ measurements where you know each sample is always separated by some amount of time like 1ms. So you have a start time and date, you have the amount of time between samples, and you have an array of Y values which are every increasing on the X axis. If your data always adheres to these restrictions then you can use a Waveform Graph. I'm still not fully understanding what the data is so I can't say for sure, but I suspect you actually want an XY graph, where you specify the X and Y value for each point to be displayed. Do you want three lines? You also claim column "2, 3, 6" are X and 5 is Y. Do you mean index 2, 3, and 6, or the second, third, and sixth column? Remember LabVIEW starts counting at 0. But even so lets just look at "column 2", where are the Y values for this axis? Are they the same for all three X axis? Attached is a version that uses an XY graph, setting up the minimum and maximum as the values seen from index 1, 2, and 5. Three lines are shown each using one of those X Axis, and all using the same Y data from column index 4. These are constants on the block diagram. gg Hooovahh Edit.vi
-
What have you tried? There are Waveform Charts, Waveform Graphs, XY Graphs, and Mixed Signal Graphs, which are you using? What is the data type of the data you have? Do you have an example VI with sample data? It should be possible it would just be nice to have more information before attempting to help.
-
Setting the key focus on an array control programatically
hooovahh replied to John Lokanis's topic in User Interface
That doesn't sound too terrible if it can be wrapped into a single function, with a defer and undefer front panel updates at the beginning and end (so the user doesn't see weird resizing of array controls) -
Yeah I suspect you'll hear from NI lawyers at some point. I suspect what others are saying about Xilinx is correct, and NI is likely bound by a contractual agreement somewhere, to take action and prevent this type unauthorized use of the compiler. On technical merit, good for you, it seems neat. On the NI side they are the gatekeepers, and decide (to a large extent) where LabVIEW can go. If it can go on an x86 processor it is because they allow it to. If they don't want it to be on <$100 hardware (other than for home use like Pi) then they can probably put a stop to that as well.
-
Yeah I'm an Approach #1 guy. Starting in 2010 I think the application builder settings allow you to change the GUID, before that you could edit the .lvproj file in a text editor. So I just copy the GUID from one to the other, so Windows believes the program is an upgrade. So if I install 1.0.0 full (with all RTE and dependencies) and then install 1.1.0 upgrade (just app) Windows knows to remove the old app and replace it with the new, and in add remove programs it only shows the 1.1.0 version installed. I'm not sure I'm a fan of the "Full" and "Upgrade" naming but it is what I've been doing for years. So I will have a "Test Application 1.0.0 Full", then "Test Application 1.1.0 Upgrade" There could of course be a 1.1.0 Full (with all dependencies) but it seems unnecessary to release a full with every version. But the reason I don't like the naming of Full and Upgrade, is because to me that implies an upgrade can only be installed after a full. And for me there are some applications that only require the RTE and that will likely be on the test machines already. So in this case I'll know I just need to install the Upgrade, but other engineers may not know that and will take the time to install the full, then upgrade. Another issue I've seen is when engineers don't know the steps to get the latest on a fresh machine because of multiple Full installers. Lets say I made a 1.0.0 Full, then 1.1.0 Upgrade, then a 2.0.0 Full, then a 2.1.0 Upgrade. It isn't clear what should be installed to get to 2.1.0. Do I need to install 1.0.0 Full, then 2.0.0 Full, then 2.1.0 Upgrade? I can't think of a good name that is short and basically means with dependencies. Of course knowing what those dependencies are and if you have them is another issue so I probably just won't change anything for now. Other than these minor issues I'm pretty happy with the solution. The other approaches you mention sound fine but this seems pretty easy to manage, and works by just using the NI tools (like no inno setup to manage).
-
Confirmed the behavior in LabVIEW 2015 SP1 f3 and LabVIEW 2016. An easy fix for this is to just add the Always Copy function on the error wire between loops. But clearly this should be fixed since you can't always know when that is needed until an issue occurs.
-
So I don't have any spare time to improve this at the moment, but I do have this running on the embedded RT Linux with UI. Before running the VI I needed to transfer the contents of the www folder to /usr/local/natinst/labview, and I needed to specify the IP address host in the example VI using the IP to string function. I'll admit things aren't 100% but I do have the example VI running on the Linux RT target, and after mapping a network drive to it in Windows (using Webdav) I can open the webpage and see the VI running on my RT machine from chrome on my Windows machine. Not all of the controls look quite right, but interactions seem to work. Then I installed Firefox on my Linux RT target by downloading it from here, and updated soundlib2 as described here. The result is a similarly looking, semi-broken but interactive web page running on the embedded target. Again looking a little broken, with images not being sent over, but even if this can't be correctly fixed, there are other solutions for controls with a limited number of images like picture rings, and buttons. This is pretty exciting to me because it can mean that the same interface for interacting with a VI on the embedded UI, can be the same interface for controlling the same VI from any web browser that can access that target.
- 137 replies
-
- 2
-
-
Merged topics. This is not your personal website, please do not spam the forums with your products.
-
Oh now it's clear. I thought you had the for loop in there processing multiple items for some reason. In that case I'd say that's a perfectly fine way to check for an abort condition, and then stop if a new request comes in. The abort example really only seemed like a good idea in an example like the one I posted. Where maybe you were doing some image processing to display to the user, which might take a long time, where a purely computational operation could be aborted without any concern.
-
Okay here is an example of the abort technique. Attached is a VI that will perform an Add every time a button is pressed, but the add takes 2 seconds to operate. If you click Add within the 2 seconds, it aborts the current add, and then process the new add that was requested. Keep in mind aborting a VI like this can have bad consequences depending on what is happening. You shouldn't just abort a VI that is dealing with references. You should go through a cleanup process. Of course you could just pass references already opened in to this VI and I think things would still be fine. Abort Test.zip
-
The sequence structure you have shown there is likely a whole lot of stuff right? Is it a single subVI that takes a long time to return? If so pass the queue reference into it and check there. Then in your subVI use a state machine architecture that periodically checks to see the size of the queue. A more clunky solution could also be to call the Calculate subVI as an asynchronous process, and then abort it if your queue gets an element.
-
Oh and you already missed out on the early bird special...which there was about a 1 week window between being announced and closing. One of the reasons I heard this change was coming, was because NI used to get deep discounts at the convention for going in the summer, but those discounts aren't there anymore. That and people have been complaining about how hot it is. Still I think it will be weird for a few reasons. The academics will be considerably lighter since...well school will still be in. Professors will also likely not be able to get time off so attendance will be down for that group even more. And what about What's New In LabVIEW 2017? Is 2017 going to be released in May? Usually there is a SP1 in February, is NI going to be able to push out a new full release (develop, review, document, beta test, etc) in time? It'll probably be for the better in the long run, but I wouldn't be surprised if attendance is down this year.
-
You mentioned remote desktop. What's wrong with just using that? If you do something custom you will likely run into issues where taking an image doesn't quite work right. Like I suspect that the right click menus won't be included in a method on the VI reference to get an image of the front panel. Maybe invoking a screenshot with kernel32.dll will include it. What you are describing is probably possible, but the amount of effort involved would be a lot, and there are already other tools for sharing a computer (VNC, RDP, TeamViewer, etc.) and would work probably just as well.
-
cDAQ Command-Query & Reply Update Speed
hooovahh replied to Gan Uesli Starling's topic in LabVIEW General
Glad you figured it out. The Open, Operate, Close paradigm (with operate taking place in a loop) is pretty common in LabVIEW and is often see for File I/O, VISA, and other hardware stuff. I'm guessing with simulated hardware an Open and a Close just takes much less time than communicating with actual hardware. There are times when open and close can take place in the loop, but it is generally useful when you only call the operate once in a great while, allowing for the hardware to be used for some other task. -
cDAQ Command-Query & Reply Update Speed
hooovahh replied to Gan Uesli Starling's topic in LabVIEW General
I'd be curious to see how your tasks are created and the type that they are. Are you starting and stopping tasks all the time? I'd suggest setting them up to be continuous, and then just read the values that essentially are in the buffer, then close when you need to modify the task or the application is done. I think you're going to have to do some debugging and figure out where the extra slow downs are occurring, and maybe write some test code to test the performance of doing the same thing, different ways. I've not seen a the type of slow down you describe, and it sounds pretty extreme. Oh are you connected to any USB hub? If this is a desktop try the USB ports on the back of the computer instead of the ones on the front. Any other computers you can test with? -
Yup. In the configuration software you make a COM port, then tell it the IP address, and port to expect the ethernet to serial device. Then I think there is a service running in the background that handles the back and forth, but to Windows it just looks like a COM port that any application can use. When the COM port is closed (by any application) by default the connection to the IP device is also closed, so any other computer on the network can open the same device. In our situation we could run a bunch of extra RS-485 cables across our lab, and have each PC have a PCI serial concentrator card, so it has the 2-8 COM ports needed on each PC, but this seems more flexible. We'll see if it holds up.
-
OpenG Variant Configuration file library
hooovahh replied to Rolf Kalbermatter's topic in OpenG General Discussions
Wow this is a fantastic discovery. I always knew the OpenG config functions were really slow for large structures but always blamed the NI INI config functions that had to be called so many times. In the past I've switched over to using the MGI Read/Write Anything code (modifying it a bit for my needs) but I'll look into the improved OpenG solution in the future. If someone does take on the updating of this package and code, they also may want to use some of the newer LabVIEW features that can improve performance, like inlining, and conditional or concatenating array tunnels. -
I'm a bit confused (not about resurrecting a 6 year old thread). Do they sell only the software? How much for the hardware? EDIT: I see how the software version works now, that is interesting, but seems like a lot of overhead to have a server if the only purpose is to talk to a serial device. We've recently had a need for some basic serial to ethernet devices and bought the UDS-1100 which is a single port to ethernet device by Lantronix. It's only $130 at CDW or $190 for a two port version that I haven't used yet. Software and drivers are free with the hardware which is available for download from their site. Updating firmware for the devices is a bit of a pain, and does have a wizard like UI. I also had a bit of difficulty with the web interface which sometimes didn't look like it saved my settings but would. But once you get it going they work pretty well. We've only been using them for a couple of weeks but we plan on getting more if we don't see any issues.
-
Sweet indeed. I actually have a list of Idea Exchange items that could be completed with XNodes, and just haven't gotten around to doing them. I try to make my XNodes not have any external dependencies, since it is a bit of a pain to ask users of your code to go get an API that they are unfamilar with, and isn't on the tools network. I've heard good things about the CodeGen Engine NI built, and if you get some time you may want to look into porting some of those scripting functions into VIs that use the CodeGen Engine since that is shipped with LabVIEW and the dependencies won't need to be tracked down. https://decibel.ni.com/content/docs/DOC-47786
-
Yeah I like that property, but there are still a few instances where a VI could be inlined, but doing so would effect the code in some way the developer needs to be aware of. If you use the Call Chain primitive, then it will return one less level, if the VI is inlined. I only say this so that others are aware that turning on inlining for all VIs that can be inlined, is not always a good idea.