-
Posts
3,433 -
Joined
-
Last visited
-
Days Won
289
Content Type
Profiles
Forums
Downloads
Gallery
Posts posted by hooovahh
-
-
I just tested the VI attached by AQ in the first post in LabVIEW 2013. I clicked Trigger about 20 times, and every time the user event was handled first, and the array showed 0, 1, 2. It does look like this is fixed.
I do wonder however, what other event based bugs will be seen now that 2013 had this major overhaul. I don't believe there must be new bugs, but it looks like there was quite a few changes, and I'm sure a lot of testing went into it, but when upgrading legacy programs I wonder what unexpected results may occur.
-
So a couple things. If you have a professional version of VIPM on your laptop you can create a VIPC file that contains multiple packages. This will create a single file that can be double clicked on any computer without the internet and it will install all the packages just as if you got them from the internet.
If you don't have the professional version of VIPM you can still copy the individual package files from your laptop and bring them over. Go to C:ProgramDataJKIVIPMcache to find all the packages that have been locally downloaded. This path is for Windows 7 and maybe slightly different for other OSs. You can then install these package files on your other PC by going to File >> Open Package File(s) and selecting all the files at once.
-
I can't help but get excited. Because everything this guy talks about resonates with what NI has been trying to do with LabVIEW. Also the fact that people rejected Fortran made me smile a little. Because the same type of people, will reject LabVIEW for similar reasons. Not that I can't be suborn at times. I still don't use the auto-tool.
-
hooovahh - alter-ego of crelf and king of LabVIEW
I like it!
I started calling myself LabVIEW Overlord as a joke, because people throw around the term Guru all the time. Only now it sound pretensions when someone introduces me as the LabVIEW Overlord. Also someone may take that as me pretending I'm better then a NI Knight, which wasn't the intent either.
Lo and behold, even LabVIEW can't make 32 divided by 5 equal an integer and there was an extremely annoying 1-pixel bend.This may be also the background to some of NI's own 1-pixel benders.
Lets not be rational here. We can all agree it is NI's fault and I demand they fix it. Can't they just have 6.4 pixels per terminal?
-
Yeah, this is similar to what I was describing. The problem is then the QD is basically just a separate way to launch the same tool (vs the tools menu). Which i could add, but it's still not a QD only solution.
QD feels like a "Every problem is a nail...." situation to me.
I agree. I have found myself developing a tools menu item, and then changing it to a quick drop item instead. When developing I find two shortcut combos is faster then navigating the tools menu. Especially on a system where the items and order of the things in the tools menu potentially changes after installing something from VIPM.
-
So maybe instead of typing you hit a quickddrop shortcut. Ok, now we have a list of methods, how do I display them? Can you just populate the quickdrop combobox? I could never figure out a happy way to make the plugin work, so i ditched quickdrop all together.
I'm no quick drop expert but this is how I'd do it. Say CTRL+Space then CTRL+C (maybe that is semi-reserved) this brings up a new dialog window that shows the options, and you pick the one you want which then adds the code to the block diagram. Closing this window does nothing, and calling another CTRL+C brings this window back to the front with new settings if it was never closed before. Not ideal no but I think it could be used this way.
-
Often my header rows are different heights, though there are obviously other cases. Regardless, it is good to know of this optimization, as by knowing it I can use other tricks to show things like units and what not which would cause the abnormal sizes for a single row.
I forgot about this. But usually to highlight this I will color the background a different color, or bold the font. I don't think either of these change the cell height.
-
Actually I could live with 4*1*1*4, as it's the 4 on either end that are most important to me. I kind of like your arrangement as it means the enums (I presume) hanging off the bottom are nicely aligned.
I'm okay with this for the same reason.
But I would rather be consistent. Look at the sample I posted with the TDMS functions. That gets me every time that I need to be one pixel off whenever that palette is used. I would rather they were consistent with 5-3-3-5 (or what ever they picked).
But I would say that 4-2-2-4 is my standard and very rarely deviate from it. But just as the style guide is a guide, I would say that a 4-2-2-4 setup should not be strictly enforced and if I were king of LabVIEW I wouldn't ban anyone if they used another.
-
1
-
-
Is it possible to use the data analysis tools in the graph pallete of xy graph using external boolean buttons? I have a requirement where the application zoom in/out and other functions in the graph palletes must trigger using the function keys of the key board. I looked in the property nodes but there doesn't seem like a way out??
Any ideas??
Best Regards
K Waris
Yes there exists properties to modify the graph axis info. One demo (that I haven't found yet) was shown off at NI Week to allow a graph to be zoomed in using the scroll wheel. This was to show off the new mouse scroll event.
Select the active scale property for either the X or the Y scale. This is a zero index value so if your graph only has one X and wire a 0 to it. Then you'll probably want to change the autoscale to be no auto scale. Under the X Scale Property set the Scale Fit to 0 which is no scale (the help describes the others). Then you can set the X Scale, Range, Minimum and Maximum. This will set the minimum and maximum that the X will be. You can do the same for the Y scale as well.
-
Like Rob said, the 100 random number challenge has already been given in a slightly different form, and even though this year it would be a little farther from the rules than it was last time, I would still have suggested the same solution I did back then - a for loop running 100 times with rnd+3 and auto indexing - it would generate 100 numbers between 1-5, but not between 2-2.99.
I wasn't at the challenge but I could tell there was some kind of discussion there about the implementation. It met the specified requirements did it now? I realize it may not be the intent but that is because of poor requirements.
Now that I think about it I can agree with your front panel specifics, because you mentioned what is considered an object on the front panel from the perspective of LabVIEW.
-
And beware of changing the cell height accidentally for one row. That might disable the nice optimization from Christina altogether and get you back to the old situation.
Yeah when Christina mentioned the cell height of each cell needs to be the same, I thought when have I ever wanted the cell height to be different for a single row, and I guess there is a case for this but I have never needed it.
-
Thanks for sharing these and also thank you for permission to repost your videos to YouTube! The LabVIEW Coding Challenge is now posted in two parts:and
I'm going to argue for the sake of arguing if you don't mind.
"To stop the VI you cannot press the abort button, or by clicking an object on the front panel"
Are we now saying that the exit button is not an object, on the front panel? The title of the window is something like "Untitled 9 Front Panel" so to me that states that the entire window is called the Front Panel, and the Resize, Minimize, Maximum, and Exit buttons would be part of it.
That being said it doesn't bother me that Darren won.
-
- Popular Post
- Popular Post
Why are you using To More Specific Class there? AFAIK, Bool is more specific than Control, so To More Generic Class would make more sense.Maybe I made a superBoolean class that is a subset of the boolean class that I want to be more specific to. Or maybe I just grabbed the first two functions I knew would demonstrate my frustration and took a screenshot.
-
3
-
However we LabVIEW programmer are not called 'pixel pusher' for nothing
I don't use auto tool (lets not get this started) so I am very quickly pressing tab, on top of all the quick drop functions, compulsive CTRL+S, and constant CTRL+E or CTRL+W. As a result I have been called the Certified LabVIEW Finger F***er.
-
Right, a new AA: LV Aligners Anonymous....
Instead of 12 Steps we have 12 States.
- We admitted we were powerless over LabVIEW OCD alignment—that our lives had become unmanageable
- Came to believe that through hard work and determination, ourselves could restore us to sanity.
- Made a decision to turn our will and our lives over to the block diagram cleanup as we understand it.
- Made a searching and fearless moral inventory of ourselves.
- Admitted to ourselves, LAVA, and to another human being the exact nature of our OCD.
- Were entirely ready be content with these wiring defects.
- Humbly asked developers to review their code and accept it when the review is complete.
- Made a list of all developers who did not adhere to the LabVIEW style guide, and became willing to make amends to them all.
- Made direct amends to such people wherever possible, except when to do so would injure them or others.
- Continued to take personal inventory, and when spending too much time adjusting wires, promptly admitted it.
- Sought through research and discussions to improve ourselves, for knowledge of other developers for us and the power to carry that out.
- Having had a acceptance and realization as the result of these steps, we tried to carry this message to other LabVIEW OCD wire addicts, and to practice these principles in all our affairs.
You would be surprised how little this differs from the actual 12 steps.-
2
-
-
It's just a technique I have found that keeps responsibilities modularised and the parent clean of module specific event handling.
I am all for this type of development, and I think I can see how this could help with that. Thanks.
-
Had a chance to look more closely now.
You can save yourself having to load "special" VIs that take a custom event via controls or detecting mouse over/move events on the child FP (checking mouse coordinates in region etc in the main VI) by attaching a callback to the VI when you load it. The callback can be attached to any VI to piggy-back the child VIs events and inject your own user event that you can access in your main VI. You can attach these call backs to not only the VI server events (close, mousemove, resize et. al.), but controls/indicators as well. I think it would greatly simplify you main VI.
I don't fully understand what you are saying but am curious. I have used event call backs on .net DLL calls so I am passingly familiar with them but I don't know how they could help simplify my code.
So when the mouse enters my panel VI I can have that run a VI through the callback feature, which can generate a user event, that tells the parent this event has happened? I don't see how that is better then at the moment where the VI ref can be passed to the parent, then register for the mouse enter event, causing the event to be handled in the parent when the mouse enters the panel.
Don't take this post as me saying "This is stupid and my way is better" I just don't fully understand how it can help because I've had very little experience with event callbacks.
-
- Popular Post
- Popular Post
Okay I don't think I'm as bad as some of you guys but I too find my self moving things one pixel at a time some times to line them up nicer. But there are a few times that I hate the terminal choices used by NI. Here are two times that I can think of that irk me.Why do these not line up? Seriously NI? Seriously?
-
3
-
I don't think flushing events would solve this, e.g. how can you be sure that the last element isn't already in the event queue, meaning that flushing will remove the most important element you actually want to handle.
Very true, you could flush it then process the last one that was flushed. I haven't used the new Event Features yet but I assume after flushing it will return all the events that were flushed like a flush queue. Then if 100 value changes come in you flush them all and process the analog output on the last one. There's a bunch of ways of working around this and the timer idea neil mentioned is another I have used.
-
Okay it's morning and I have a few more links.
Inlining INI key
http://zone.ni.com/devzone/cda/pub/p/id/347#toc2
Thread discussing it and code
http://forums.ni.com/t5/LabVIEW/Dr-Damien-s-Development-Improve-Load-Time-with-Inlining/m-p/823418
-
1
-
-
Did a project in 2007 where a slider was linked to the amplitude of an analog output. Sliders generate thousands of events which overfed the consuming hardware actor. Each time I got a slider-value-change event, I unregistered, updated the AO, and re-registered for value change. There were other requirements with this method which were necessary to ensure that I got the latest value when the operator was finished dragging. Maybe this challenge would be better handled today by flushing specific events instead of managing registration?
I agree that this can be a place where the Flush can be used, but my work around was when the slider had a value change all it did was set a boolean true in a shift register. This boolean would set the event structure timeout to 0ms. Then in the timeout case I would perform the analog output, then set the boolean in the shift register back to false. The timeout case only gets executed when there are no other events in the event queue. So I would only set the analog out after the 100s of value changes had stopped for 0ms. This would reduce the number of analog output commands from 100s to on the order of 10 or so and it would always set the last value.
-
Why? If I have a C++ project with 100 text files can I combine them into one monolithic text file? Sure, but now that one file is very hard to manage, and edit.
It can be done and in previous versions of LabVIEW there was an INI key that would allow you to right click a sub VI and choose "Inline" which is different from the execution inline. This inline would replace the subVI with the code from the subVI. This turned the code into very hard to understand code because it would just programatically plop down the code.
But really why do this? If you really want one file create a source distribution, maybe an LLB with a top level VI. Or just zip the code, that's usually what you see on the forums when people have multiple files that go together.
-
Your code already has this problem with tabs - what if someone wants more than 20 pages? But since Tab Controls are Enums, I don't think there'll ever be the facility to add pages at run-time.
I totally knew that going into it. But I feel like having 500 tabs and have them be hidden is not a big issue, but having 20 subpanels for each tab making 10,000 subpanel controls just not being used, would be overhead that may have an effect on performance. What I'm saying is the 20 page limit is arbitrary sure, but can be a very large number without any real issue.
If you use the OS tab control via activex or .NET. you can add/remove pages dynamically.I never thought about this. It sounds like it might be a good idea to try since adding/removing pages dynamically would be a nice feature that the native tab can't support.
EDIT: or VIBox might work too.
-
Is using the win32 'child window' declaration a hard and fast requirement?
Well...do you have another mechanism for attaching floating windows to other windows? If you go with subpanels you can do it but you need something like 100 subpanel controls, all hidden on start, and then when you need to insert a VI you go get one and move it to the location you want and insert a VI. But if you need 101 controls then you need to go and make more subpanels in the source and make a new build.
If subpanels could be added programatically at runtime this would be fine but you can't so I don't know another way to do this.
By the way, I have tested this UI design with subpanels and it does work, but it is more limited.
EDIT: Also things like panel resize while docked gets a little tricky with subpanels, where the user32.dll gives access to allow a window to be resized like a floating window.
Error 5 occurred at write to binary file
in Application Builder, Installers and code distribution
Posted
I've seen something similar with TDMS and Copy. I have a test running where we log to TDMS. Then we close the file at the end, then copy it and the index file to a duplicate location. Many times I would get an error 10 "Duplicate Path" "Asynchronous I/O Operation In Progress". So I would put the copy function in a for to retry a couple times and we no longer have this problem. I never determined the cause, and didn't have time to debug it because a solution was found.