-
Posts
1,969 -
Joined
-
Last visited
-
Days Won
172
Content Type
Profiles
Forums
Downloads
Gallery
Posts posted by drjdpowell
-
-
15 minutes ago, ShaunR said:
Have you automated any of it?
Nope. Painfully tedious manual steps. Trial and error learning all the weird LabVIEW minutiae. I aint doing this twice.
-
1
-
-
Here’s a similar set of checkboxes. All very clear, though my latest ones are resizable, which is an advantage if the system one is too small. Google icon one is nice but based on PNGs and not resizable.
Trouble with Switches (with checkboxes).vi
-
7 hours ago, smithd said:
It may be challenging to make, but I think these web elements are nice:
http://getbootstrap.com/components/#btn-groups
You can label each item so you get the benefits of a radio group (in fact you could argue this looks more like a radio button than most radio buttons). Plus its actually a button, so you get the feeling that it takes immediate effect.
I include a radio group with buttons in the package (calling it "Selection Buttons”). It also works well if you use icon decals instead of text. Can’t do the nice borders like in that package, unfortunately.
7 hours ago, smithd said:"Notify me of replies"
That’s an example of something that (to me) should be a checkbox, since it is part of a form that must be submitted.
5 hours ago, JKSH said:because, from prior experience, clicking 'X' closes windows
Part of the reason I chose not to add the ‘X' is that it makes it more like a checkbox: check for true and nothing for false.
5 hours ago, JKSH said:To take another page from Google's Material Design, their switches convey state by using colours without "ON"/"OFF" labels at all:
But that requires the User to learn what the funny circles are, and what “white circle to the left” means.
-
1
-
-
I think is makes a difference if one has one, two, or many switches in view. Many switches both true and false lets one tell the two states apart, especially with radio buttons where only one is true. With a two-state radio button there can still be User confusion. And then there is having a lone switch. The more elaborate design I made is for a lone switch, while the simpler one is for groups.
I also have relied on checkboxes in place of true switches. Though I read somewhere that a checkbox implies an option that don’t immediately take effect (such a as configuration or a form that has to be applied/submitted), while a switch suggests immediate control of something.
-
I’ve been trying to come up with my own consistent set of custom controls that has a more modern “flat” or “near-flat” style. Largely this was inspired by reading Google Material Design, and I’ve just added the results as a package in the CR: Flatline Controls. The latest thing I’ve been toying with are slider switches (here the Material Design guide on switches). But I’m having a hard time coming up with something that is flat and non-skeumorphic, but also clearly a switch. Attached is a VI (2011) with multiple switch types. The most 3D, old-school, looks like a real-world switch (on the left) seems best in terms of being obviously a switch. My most Google-like switch, on the right, is flat and simple, but not immediately obvious.
My question is: what of the multiple LabVIEW switches do people actually use?
-
2
-
-
Sorry, James, I missed your post till today.
The primary concern I have is whether error code has a performance cost on all the cases where their is no error. I haven’t looked, but I don’t think this is the case. I modified the parsing code a while back to never break up the JSON string, but rather just index along it. This was for performance reasons, but it should mean that you have full access to the whole string at point of error. So I’d recommend reporting back more than just 10 characters, possibly including part of the string before the actual section that failed to parse.
-
- Popular Post
- Popular Post
Flatline Controls
A set of custom controls, following the trend of a more flat UI design. Heavily influenced by Google’s Material Design, though constrained by what can be done with available tools and options in LabVIEW. Uses icons from Google Material Design.
— Buttons based on the system booleans (with hover effects). Icons can be added as decals (such as from materialdesignicons.com)
— Matched sets of controls for numeric/string/enum/etc., based on Silver controls, but swapping out all ‘chrome’ for simple boxes and lines.
— flattened versions of switches/sliders/arrays/graphs etc.
Now on the LabVIEW Tools Network
JDP Science Tools group on NI.com.
-
Submitter
-
Submitted06/13/2016
-
Category
-
LabVIEW Version2011
-
License TypeBSD (Most common)
-
12
-
I didn’t notice the MAX install part, so that might be my problem. Thanks.
-
Here is my current RT version of the example project (to go with the newest version of Messenger Library). To run the actor manager on the RT, you'll need to add it to the project (its in <LabVIEW>/project/Messenger Library).Messenger Library RT Test 2015.zip
-
Sorry guys, I was on holiday when Stobber asked his question. Rolf has answered better than I could. I have only used polling to identify changes. I tend to have timestamped data with the timestamp as primary key, and getting MAX() of the primary key is very fast. One could also use triggers to increment some field whenever something of interest changes, and then poll that field.
-
20 hours ago, smithd said:
I personally think the only real right answer is:
That 15-30 sec figure, at 1.5 to 3 ms per line, seems an order of magnitude too slow to me.
-
On 13/03/2016 at 9:56 AM, drjdpowell said:
See this new video on youtube. I modified the demo so that 'Instrument' is running on a separate project behind a TCP server, with 'Top Level' connecting as a client via a Remote TCP Messenger.
...
Please note that I have yet to do a Real-Time project with Messenger Library. I do have a current project using modified TCP actors to communicate with a non-LabVIEW client from another developer (using JSON messages), but that isn't the same. So please don’t be afraid to ask for help or to make suggestions. Please see if you can run this example with ‘Instrument' on the Real Time system.
I've just got the evaluation kit for an sbRIO with RT Linux. I ran the example with 'Instrument' on the sbRIO; I found that the OpenG zlib compression library did not deploy to RT Linux. So I had to disable zlib with the following Project Conditional Disable: ZLIB_Compression == OFF
Otherwise I didn't make any modifications. But I (so far) have not been able to get my custom probes working on RT, so I'm investigating other RT-usable tools.
-- James
-
OpenG was written before proper recursion existed in LabVIEW, and uses (slow) VI-Server calls to dive into clusters. MGI is more recent and uses proper recursive calls, so should be significantly faster.
Personally, I use JSON for configuration files.
-
29 minutes ago, Stobber said:
Thanks, but "ugh"
. Guess I'll have to pass a DVR in.
Why are you not just (plain-old synchronously) calling the subVI?
-
26 minutes ago, Stobber said:
If I create a DVR in a dynamically launched VI, the DVR ref goes stale when it's passed back to the caller. Anybody know why?
References are “owned” by the "VI hierarchy" that created them, and are automatically destroyed if that hierarchy goes idle. Asynchronously-called VIs run in their own independent hierarchy (even if you use the Run method instead of ACBR). In your example, the DVR was destroyed when the launched VI finished.
-
On May 14, 2016 at 7:37 PM, Neil Pate said:
Now I think perhaps each actor should be responsible for the serialisation of its own config.
Why? Actors are tools. One configures a tool for a specific task. You know the task; the tool doesn’t. Why would the tool be responsible for configuring itself?
-
6 minutes ago, ShaunR said:
Well. Messages are ephemeral and config info is persistent so at some point it needs to go in a file. This means that messages are great for when the user changes something but a pain for bulk settings. Depending on the storage, your framework and your personal preferences, the emphasis will vary between the extremes of messaging every parameter and just messaging a change has occurred.
I use messages containing JSON for configuration, combined with a subVI for handling "Set Config” or "Get Config" messages that accepts config info as either a variant cluster or an array of control references. Once set up, adding new configuration info is trivial.
-
1 hour ago, Neil Pate said:
I currently have no mechanism in my framework for informing a process that a configuration value has changed. This works fine, but I wonder if others have gone the extra step and implemented configuration data using User Events and removing the global data store?
You could extend your Action Engine to have a “Register” action, which takes a User Event and saves it in an array internally, then posts to the Event whenever the config value changes. Then
processesloops can register if they need to be informed when something has changed. Then you have a hybrid AE/messaging system. -
33 minutes ago, CopperD said:
When the user hits the abort button in the IDE I want the threads they created to be killed.
What are you meaning by a “thread” here? Users don’t create threads.
-
No, because you didn’t identify what package you want.
-
1
-
-
1 hour ago, monzue said:
Number of elements in the queue is all that I have ever used.
Added to 1.8.1 version now in the CR. Please test it for me.
-
1 hour ago, monzue said:
Will you include a vi in the queue messenger library that is simply queue status? I've made this vi a time or two, to see if a actor gets behind, the problem is that when I switch to a different computer, or update the Messenger library from the repository, this QueueStatus vi is lost......
Sure, Ben. I haven’t needed such thing (yet) so I hadn’t put it in. Is it just the number of elements in the queue that you need?
-
Does this imply that, in general, "This VI" references do not need to be closed? So I am guessing that memory leaks typically arise from other references (e.g., control refnums, indicators, files, etc.)?
Some refs are static; they always exist and you are neither creating or destroying them. “This VI†and control refs are of this type. “Closing†these refs is a no-op. Other refs are both dynamically created and involve holding resources open of some kind (like an open file, or a Queue or something). Here is where one worries about ‘memory leaks’.
-
What is an OPC-UA method?
Basically a function call on a server. Used for controlling the server. “Calibrateâ€, “Measure Sampleâ€, etc.
Trouble with Switches
in User Interface
Posted
Do you still have that code?