-
Posts
3,392 -
Joined
-
Last visited
-
Days Won
284
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by hooovahh
-
Yup, or if you only have 4 states you could have 4 booleans that are shown and hidden.
-
Yeah it's a neat feature but only works on the double (or numeric really) data types. As for the Matrix data type, no idea really. I mean I always assumed there is some performance improvements for those functions but then again why couldn't those improvements be implemented with normal 2D array of doubles as the data type and not be polymorphic like most other array functions? Another nice function that is on the matrix palette that is polymorphic is the Matrix Size which returns the rows and columns both as scalars. Why this isn't on the array palette I'll never know.
-
...wait...I just noticed something. Your product is called the Atom-RIO but uses a Celeron processor? Isn't that a bit misleading? Why not call it the Xeon-RIO or the I7Extreme-RIO?
-
Interviewing for a LabVIEW developer position, how should I prepare?
hooovahh replied to rakuz's topic in LabVIEW General
Worst quality? I am a workaholic, I push myself too hard...or...it takes me a long time to learn anything, I'm kind of a goof off, and stuff starts disappearing from the work place... When I was first starting out I knew nothing, but a company took a chance on me. Not because they thought I was a good engineer, but because they thought I was a good fit for the culture/work environment, and I was eager to learn. Things certainly are different as you have a career but as others have said, when you are starting out, attitude is probably more important than skill. Having any level of certification (in anything) shows a great deal about yourself too. If you are willing to put yourself out there to try to accomplish something optional, then I assume you are interested in it. I don't have a certification in basket weaving, but if I did you would probably think I like basket weaving. -
Really? This doesn't exist still? I was sure it was there but I go and look and I couldn't find it. I did find a thread 9 years ago that talks about it. Sorry I can't help with the original issue.
-
All the more reason I'd like to have the ability to develop and test for it without needing the hardware. Thanks for all the other information you gave.
-
What have you tried? This sounds like a Menu Ring, or Enum.
-
Yeah clearly the major benefit of this is not deploying and testing DAQmx code. It is more writing and debugging code that has a UI on this platform (testing and seeing the limitations), any 3rd party tool kits, or packages (related to LabVIEW or Linux), and anything network related (network streams, TCP, web servers, etc). I'm might not be fully informed, but assuming I was able to make a hard drive image, and boot that in a VM, I was hoping that MAX would just see that PC as a remote target, and allow me to install software to it just like any other target. Sure it is a different processor, but it is in the same family (Intel x64) and I'd hope that all the libraries made for the x64 platform would install through opkg using the NI package repository or any other found on the internet. Which includes all the tool chains NI already has compiled. NI already has some package groups made for the common development tools, which I've used on the actual hardware successfully.
-
Futures - An alternative to synchronous messaging
hooovahh replied to Daklu's topic in Object-Oriented Programming
We are starting to get a bit off topic, so I posted what I tried on getting a VM of the Linux RT x64. (spoiler I haven't figured it out) -
So there was some discussion of the Linux RT running in a VM and I figured I would try a few things. I have a cDAQ 9134 which is an atom based target running the Linux RT OS. I thought I might be able to perform an image of the hard drive, then boot that image in a VM but I wasn't successful. Here is what I tried. I logged in with SSH and performed this... dd if=/dev/zero of=0bits bs=20M; rm 0bits To zero out the drive, this makes compressing the image better since the dd will image the drive bit for bit, and will be unnecessarily big. Then I ran this command... dd if=/dev/sda | gzip > /media/sdb1/image.gz To make the hard drive image and put it on an SD card. I then copied the image over to my Windows PC, extracted the gz which gave me a single file named "image" (no extension). I then used this command to turn the hard drive image into a vmdk... VBoxManage convertdd "C:\<Path>\image" vmdkname.vmdk --format VMDK But this drive wouldn't boot in Virtual Box using the IDE or SATA controller. I also tried extracting the "image" file which extracted a single file named "0.img". Turning that into a vmdk using the same command from earlier created an image that also wouldn't boot. In both cases Virtual Box complained about not having a bootable device. Any suggestions are appreciated, but as I said in an earlier thread I don't know about if I would be able to share a virtual machine if I do get it working.
-
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