Jump to content

Lipko

Members
  • Posts

    110
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Lipko

  1. I solved it by having multiple dialogs, so the user can only change a single thing or a few closely related things at once. There is still a god dialog but users find it hard to "feel" that all its elements will be applied on all selected "sections". In my usecase the settings mean properties of a section in a sequence (an array of clusters is a sequence and the dialog shows all elements of that cluster or section). In most cases only a few things will be the same in multiple sections, for example the comment, or section length, but the god dialog was a hystorical thing (the only way to set up a section in the first release) that I left there because many users are so used to it. I never got back to the problem, the best idea I could come up with is to change the background of an element if it was changed by the user, but didn't implement it. I still feel the multiple single-property dialogs are more intuitive and also quite simple to implement, and maybe it would be the best just to get rid of the god dialog. But this doesn't apply to the original post, I don't fully understand that usecase.

  2. Sorry to chime in, maybe I had a similar problem some time ago and I'm interested in the GUI design part of the problem.

    So basically you have a config window and you only want to apply changes to elements that were changed by the user? And the changes should affect more things (all changed cluster elements in an array of clusters)? How the users know what was changed besides their memory? How would a user apply an elements current (default) value to the other clusters apart from changing the value than changing back to the default?

    If I'm totally off, then sorry. I kind of gave up on this feature because I coudn't think of a proper solution that would be evident to use for the users apart from the two workarounds I mentioned or having a "changed?" or "apply value?" bool control next to every single control.

  3. Hi all!

    I want to create a smooth curve through given points in 2D and I'm having trouble with using the built in interpolation functions in Labview.
    I need something like this:

    Interpolated Points

    I found this thread from more than 10 years ago and I can't find the interpolation vi it's using, and I don't really understand what the other similar vis are doing.
    It's only for a drawing application so it's not really important in details how the interpolation works (nurbs/bézier/whatever), it only needs to look okay.

    Thanks for any hints in advance!

  4. I don't fully understand your post. Does the problem also occur if you don't have the front panel of "Three Button Dialog.vi" oneped? Does it occur if only the caller vi is open? I often make dialogs from a "promt user input" express vi by opening it's front panel thus converting it. If I forget to close its front panel, all sorts of similar race condition things occur if I run the main vi. Never cared enough to have this sorted out though...

  5. Whenever I had to rewrite stuff and restarted from scratch, the result (GUI, bugs, code quality) was much better. Okay, I'm learning continuously and I jump into real projects when I have the absolute minimum required language knowledge, so even in the course of one project my coding style can change a lot, so I have some really bad code mixing methods like crazy (LV small data storage example in non-speed-critical aplications: local varaibles (I dropped that very early)->shift registers->hidden indicators).

    In my uneducated opinion the biggest obstackle of making clean code and fine architecture (thus less bugs, better improvability) is that it's impossible to fully flesh out the specifications when starting a new project (and refractoring can be a real pain).
    On the other hand if you port (especially if you are also an active user of the program), then you have a solid specification and a working "prototype" (the original project) mapped out to the last detail. Of course, you have to be ready with a very detailed test plan.

  6. Hi All!

    Little background: I was searching for an implementation (or at least a full explanation) of constructing an ellipse from 5 points. 5 points exactly define an ellipse, so it's not a data fitting problem. To my surprise, I couldn't find any solutions that can be used as it is or any full explanations. All I could find was pointers into the proper direction (matrix math) but my math is so rusty that I could not implement anything from those information ("just calculate the determinant with some symbolic math library or do it on paper haha and goodness comes"). I was a bit upset because I wasn't doing homework, I actually needed that function.

     

    Anyhow, after finding a small hint in one of the threads, I could go through the thing and implementet the algorithm. Maybe it will be useful for anyone who is looking for exactly that thing.

    It's not that nice, not optimised, I guess many of the math could be optimized/simplified, but it's working at least.

    Precision: I'm not sure. For my needs, it's precise enough, I'm not an expert in condition of the matrix or other calculations.

    I think the names are self explaining, but If you have questions, don't hesitate to ask. The formulas and the thread I found most usable are included on the block diagram.
    Input: array of coordinates (x,y in a cluster).
    Output:

    • ellipse parameters: center, two radii and angle of the first axis
    • the coordinates of the axis endpoints
    • the five t parameter values of the input points (t parameter for the parametric equation of the ellipse), so for example you can draw ellipse arc between two of the points
    • If the ellipse cannot be constructed, it results in some NaNs here and there... No extra checks added

    2 subvis are also implemented, but maybe they are already in the LV base package and just missed them:

    • parametric equation for arbitrary ellipses (or polar equation, my math is that rusty I can't even express properly what I mean)
    • CCW angle between two vectors (result in 0....2 PI range), it's used to calculate the t parameters for the points. This is where I feel there's some redundancy or redundant trigonometric calculations.

     

    Thank's for any feedback!

    EDIT: I added a small demo program. You can move the 5 points on a graph.

    2D_ellipse_parametric_equation.vi 2D_ellipse_from_5pts.vi 2D_ccw_angle.vi

    Ellipse_Demo.vi

    • Thanks 1
  7. I haven't looked into the thread in detail, but for debouncing I usually use an "off delay". It works with a one-cycle spike in the raw measured data too.

    mtxsoft_offdtmr_timing.jpg

    I haven't implemented it in Labview, I use these off-delay blocks in Siemens Logosoft (PLC).

  8. 4 hours ago, Lipko said:

    If you are not a programmer, then I would not jump into OOP. I'm not a real programmer myself either, but did programming for years, did some medium complex data aquisition and processing applications but never dared to try OOP.

    Anyways, I don't know "how big of a data package to carry on the shift register on every iteration is acceptable", I think you are okay with shift registers, but you have to be careful about the amount whatever way you do it. For example save new data to a file (append) regularly and throw away what you saved (or down sample, or whatever you need).

    For copying data a lot, I'm not sure, the code looks rather messy. I don't know the full picture, but based on the snippet you posted, maybe you should separate raw data from calculated data (because raw data is not modified by your snippet, only read). You could also try to "streamline" your VIs. I don't know the proper term, when the data on the input terminal comes out unaffected on the output terminal (like a reference). This will ruin parallelization of the calculations but can save a few copies (if the VIs can be inlined).

    Maybe I misunderstood, and what you posted is just an example. Anyway, that example shows that the different calculations and sub Vis are run serially, because of data dependency, so I would "streamline" the VIs and use "in place element" structures if possible (and of course for loops with auto-indexing/deindexing). In your example there would be no large data copies at all: "Calc DZPV" (modified so data in passes through) then "Cal S and wa" (modified so data in passes through) then "in place element" structure to index the data, and inside the structure anotheer "in place element" structure to adress the cluster elements you want to change. If the subVIs can be inlined theres no data copy of the whole data in array. Maybe you don't even have to inline the subVIs because the optimizer can optimize away the data copies when passing data to the subVIs, I have no knowledge about these stuff.

    • Like 1
  9. If you are not a programmer, then I would not jump into OOP. I'm not a real programmer myself either, but did programming for years, did some medium complex data aquisition and processing applications but never dared to try OOP.

    Anyways, I don't know "how big of a data package to carry on the shift register on every iteration is acceptable", I think you are okay with shift registers, but you have to be careful about the amount whatever way you do it. For example save new data to a file (append) regularly and throw away what you saved (or down sample, or whatever you need).

    For copying data a lot, I'm not sure, the code looks rather messy. I don't know the full picture, but based on the snippet you posted, maybe you should separate raw data from calculated data (because raw data is not modified by your snippet, only read). You could also try to "streamline" your VIs. I don't know the proper term, when the data on the input terminal comes out unaffected on the output terminal (like a reference). This will ruin parallelization of the calculations but can save a few copies (if the VIs can be inlined).

  10. Hi all, 

    Are you aware of any Labveiw module (non 3rd party) that is affeced by the Log4j issue? Web services, or other?

    Out head IT is in panic, we don't have much time to collect the softwares that may be affected, sorry for not looking up it myself.

    Thanks in advance!

  11. 51 minutes ago, Antoine Chalons said:

    Also these custom graphs, 100% 2D picture control. The lad who did that is a ninja!

     

    Graphs + plotimages of graphs also has pretty good contomization potential.
    Horizontal fill:

    image.png.d2bcc95efc6a003d50c4eaf638ccf17b.png

     

    A failed project with some flat controls, all my design, though I don't quite like it, I'm not good at visual design. Note, that it's meant to be a tablet application, but it has no exit button :D
    The room is a 2D picture and slots can be selected by clicking.image.png.306b61a0551e9b0faca07003ef92aedd.png

  12. I use splitters all the time, but making a tab control responsive, I failed miserably with that. Positioning and grouping of widgets on one page screws widgets on another one... Especially if there are graphs which are clumps of widgets by themselves.

    A test sequence editor (this has no problems with responsivity) which has a ribbon bar and some other splitters.
    The comment of some selected sectios are being edited at the moment (double click on the time line invokes a positioned text control)
    image.png.5e8a41f3234fb846047ade3fc8627d42.png

  13. 6 minutes ago, Mads said:

    Awesome as in unusual but cool / exploring new concepts in user interface design (often irritating the user in the long run though...) - or as in user friendly and nice (non-LabVIEW-typical?) looking? I too would love to see examples of what others have made.

    I can share some of the designs I have made myself or have influenced, that I think at least fit the user friendly but not typically LabVIEW-looking bill:

    We make monitoring systems and use LabVIEW to develop everything that runs on PCs and PACs. I have always put a lot of effort into making the user interfaces as nice, intuitive and recognizable as regular Windows applications (helps with the intuitiveness) as possible in G...The system typically consists of a headless service/embedded server (sbRIO inside a subsea device e.g.) gathering, analyzing and logging data from sensors, and exposing it to control systems or data historians through Modbus, OPC or CANOpen. Users can connect remotely to configure the server and view and analyze the results using application specific clients (through TCP, serial or CANOpen (Cia309.3 transparent links)).

    Here is a screenshot of the main window of one of the clients (this one is used for corrosion-erosion monitoring):

    168648210_ClampOnsoftwareexample.PNG.5a010928107f038010410921cbd03cec.PNG

     

    We also make many of the tools we need to do tests and troubleshooting on these sensors and systems, and some of them we have chosen to release as shareware (CAN Monitor on the NI Tools Network e.g.). Here is an example of the Modbus Test Master:

     

    Modbus-Test-Master-Overview.png.18e0310752f280b5bc0741896b04ce34.png

     

    We do not earn much from the shareware, but since we want these tools ourselves anyway, and need to maintain them, having them out there at least do not cost us much. It also puts a bit of extra pressure on us to make even (some of) the internal tools look and work well.

    Yes, I was thinking about something like those!

    I'm thinking about what I could share, but most of my GUIs fail or may be confidential to show.

  14. 24 minutes ago, ShaunR said:

    The glib answer is that LabVIEW is a tool for engineers who generally prefer function over form.

    The actual reason is that the LabVIEW UI is limited, difficult and clunky to modify from the defaults. Just pop up a menu for example (no icons, can't change the background etc). The ability to create our own controls is also fraught with issues and extremely time consuming. The the only real option is XControls - which are a bit hit-and-miss. Give on-the-fly theme changing a go and you will quickly run into trouble with many controls. Making a pretty UI can double or triple the project time in some cases.

    There is also the subjective nature of "good looking". I hate the flat, monochrome icons that are all the rage, for example. What I may think is "cool", you may think is ugly.

    That's true but by good looking I don't only mean the actual looks of the widgets (for example the silver theme looks good enough for me. Or there are some 1px border cluster hacks that someone already did so you don't have to do it yourself and greatly improves the look), but the way the widgets are arranged, grouped, or hidden. Even for an industrial HMI, most of the time you just need to load some test sequence, some parameters from a file that (hopefully) doesn't change without documentation, and some status of the test. Yet, in many occasions, every crap is on screen. I guess the reason is that during development it's good to see everything at one place, but in a shipped product? It's not so great effort to arrange stuff into tabs.

    One major obsatcle for better GUI design is in Labview itself, the lack of proper widget anchoring. You either have to make ugly hacks on the front panel (that may just fail for whatever reason) or implement every positioning in code. That's a huge issue.

  15. 4 hours ago, JKSH said:

    Can you say, "Here is the STOP button! The big red 'X' in the top-right corner of the window"? 😁

    I have a better suggestion. Place a full-window Stop button behind all other GUI elements, so whenever the manager accidentally clicks off an element by mistake: sadness.

  16. 3 hours ago, JKSH said:

    What's the context?

    Traditionally, I've treated good desktop app design as different from good industrial HMI design as different from good web app design, etc. But, contemporary designers are moving towards a unified approach.

    What are your thoughts on Google's Material Design, Microsoft's Fluent Design, or Apple's Human Interface Guidelines?

    The context is Labview. I haven't seen much (any?) good looking Labview GUI examples. I know Labview means industrial HMI most of the times, but it's also good for some other related things too.

    But this is just a Lounge topic, I'm not gathering resources in general, I believe my GUIs are more on the good side of the UX scale. Maybe I should tweak the topic a bit, and ask:

    Do you guys also see that Labview GUIs in general tend to be quite ugly? Cluttered, full with unimportant info, not responsive (window resize, pane resize) even if seemingly made for desktop? And full of not user friendly solutions (like no Cancel, choosing save paths before starting a test and perhaps always defaulting to some folder, punishing user for its mistakes, no saving of GUI values, etc.).
    Or can you share some better designs (your own or what you found over the web). Google doesn't have so nice hits. I'll try industrial HMI in general, maybe it'll have better results. but I', also curious about other usages of Labview, like data visualization or whatever.

    If there is a tendency that LV GUIs suck, what could be the reason?

    Just for fun.

  17. 6 minutes ago, David Boyd said:

    My original point remains, though - what other desktop (non-LabVIEW) application features a button as the way to dismiss an application?  For years I've just trapped window close attempts, and used those to start the decision process of whether it's proper/safe/etc, and handle the app exit gracefully (hardware known state, file/db management, etc).

    Fullscreen applications.

  18. I usually keep the stop button (and name it "exit" because that makes sense...).
    Only because of mere laziness. But I don't really see it as a biggie... If that's the managers biggest issue, then make him that stop button and everyone wins.

    I don't have many clients (they are my co-workers..), one of them interestingly claims that the GUI is too structured and wants to see all crap at the same time. Because 24" ultraHD can handle it. Um... no.

    Interesting how badly designed production line application GUIs can be. So few engineers have sense for design...

  19. Hi all!

    I have a strange bug/feature with Front Panel - Get image. The image has a false color. I haven't tested with other colors, I hope there's some easy answer, or it is a known bug, so I stop searching and heavy debugging and go with the alt+printscreen emulation method instead of get image.

    The false color is on the graph > plotimages.back and seemilnly it's only the orange that turns into pink.
    (Don't mind the other small differences betwen the images)

    image.png.de53d120a445f9d494ac569459ebecc7.png

    The pictures are generated in sequence without any delays, maybe the front panel is not fully updated before the capture? Which would mean some things are updated asynchronomously, which I didn't explicitly do. I certainly see the front panel flashing in the right colors.

     

    Thanks for any hints!

×
×
  • Create New...

Important Information

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