Jump to content

hooovahh

Moderators
  • Posts

    3,365
  • Joined

  • Last visited

  • Days Won

    268

Everything posted by hooovahh

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. I am all for this type of development, and I think I can see how this could help with that. Thanks.
  10. 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.
  11. 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?
  12. 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.
  13. 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
  14. 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.
  15. 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.
  16. 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. 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.
  17. 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.
  18. Wow I can refresh and watch Sam work. Must be some poor co-op student.
  19. I know it's hasn't even been a week since NI Week ended but does anyone know about the availability of presented slide material? Throughout the conference I would hear presenters say something like "All this material will be available online". So my question is will there be an aggregate place similar to this one for presentation material? And if so when can we expect to see it?
  20. I've never heard of ALOHA but might check it out. If it is an unbounded number of panels I assume they are doing similar techniques with Parent Child relationships. Using subpanels alone does work but you have a limited number because you cannot add a subpanels (or any other control) at runtime.
  21. I didn't realize there was a new QMH in 2012. You can still find the old (which is the one I was referring to) under File >> New... Templates. The Project template for a QMH in 2012 is quite different and I have a whole new set of feelings towards. Before 2012 I didn't think there would be a question on what is a QMH because NI had a template on it, and JKI had a template on it that both used an array of string. So having these two be the only two examples I've seen I assumed that's what made it a QMH. An array of states (in this case string) to be processed one at a time by going to the respective state. Adding user events, and shift register data still kept it a QMH in my mind so all discussions of QMH I've had were with this very open state machine like pattern. You would be wrong. Generally I have a -1 timeout. I use User Events as my messaging structure and I don't have timeouts unless I see a need for them to actually poll something periodically. But even that can be handled by sending a message periodically instead.
  22. Again maybe my misunderstanding but I thought it was well defined. If I ask NI what is a QMH won't they open the template that comes with LabVIEW? Now I never use that template as it is, I think I always add an event structure in the "" case, add a Default case to handle typo issues, and add a BFC (Big F***ing Cluster) on a shift register. Is this now no longer called a QMH? It feels like it is a QMH but it also feels like it is something more specific but it is still a QMH is it not?
  23. I wasn't talking about terminology to public methods VIs, I was trying to say that when in a public forum and discussing FGV vs AE all that matters is that the audience understand what we are talking about. And by that I mean a uninitialized shift register.
  24. NI Week was a blast and while there I got to mention a few things I was trying that I'd like to share with the community. One of them is this thing I'm calling a Multi Panel Interface (MPI). The code is rough around the edges, very rough. This is probably the least polished code I've posted in a long time but this code has been sitting in a half working state for a while, and if I took the time to clean it up, it might never be ready. So please be gentle, there's room for improvement but I think the basics are there. Now with that out of the way here's what I got. I wanted to make an interface similar to Veristand. I don't want to re-create the wheel when it isn't necessary but anyone who has worked with Veristand knows that there are quite a few limitations, and as a result I started developing a UI that is dynamic. So that controls and indicators can be added and setup in way that could be saved and loaded for different operator types. This would be setting and getting event based information from Actors running asynchronously. Implementation It is a publisher subscriber architecture. Here there are actors for each set of hardware we care to read from. Later we could talk about controlling Actors but for now lets just talk reading. So for example there maybe an Actor for CAN, Power Supply, AIO, DIO, FPGA, Real-Time (talking to another PC), UPS, etc. Each Actor has a functional global that describes what data it has for other panels to display. For the time lets call any data an Actor is publishing a "channel". An Actor will publish the channel data to user events, and in a global it will have the list of user events and their names so they can be subscribed to. The actual messaging system between the Actors and the Panels can be anything and in my demo I actually just have random numbers because the demo isn't meant to showcase the messaging it is meant to showcase the UI. UI The purpose of the demo posted is to show that a tabbed interface can be made, and be made semi-dynamically. There are 3 things to be defined to understand what is going on. The Parent VI, the Panel VI, and the Child VI. In the demo the Parent is the top level "Main.vi". Clicking the "Add" button will add a Panel VI which is a shell of a VI that has controls to minimize, pop out, and control menus to the Child. The Panel has a subpanel that contains the Child VI. The Child VI in this demo is only a graph showing random data. The Child VI is tied to the Panel VI using a subpanel. The Panel VI is tied to the Parent VI using Windows user32.dll function calls. The user can interact with the Child anyway the child defines. There is no right click override (like in Veristand) where you can no longer right click on a graph and get a menu. The Parent VI also has little restrictions. It is a normal VI with a menu bar which can be used for things like managing Panels. In the demo there is also tabs in the Parent. They are fake tabs in that there are 20 but the ones not being used are hidden. There are neat UI elements that are hard to describe in text. Things like docking/undocking Panels, minimizing Panels while docked or not, resizing Panels while docked or not, moving panels quickly and easily, renaming panels, intuitively adding tabs while moving panels. These are the basics that I didn't know if I could do so I did first. The messaging I described before is not difficult it just takes some time to define how Actors talk and how Panels subscribe to the data. I know there are some UI bugs. The biggest one that you'll notice is trying to move a Panel when docked will have some z-order issues with other Panels that are docked, but there are others. Code The actual code in the demo uses several pieces of code I've found. The parent child idea I originally saw in the Dynapanels demo. Then there are several user32 functions from the Windows API. Panel controls were from UI Panels. OpenG Array, Error, and Application Control is needed, I'm not sure if there are others. http://screencast.com/t/P9SJ1anR Please feel free to comment and use as you see fit. Just know I won't be supporting this as a real project. Multi Panel Interface.zip
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.