-
Posts
3,426 -
Joined
-
Last visited
-
Days Won
287
Content Type
Profiles
Forums
Downloads
Gallery
Posts posted by hooovahh
-
-
On 12/9/2016 at 1:33 PM, RayR said:
Thanks smithd,
I like the approach in the link that you provided.
And not just because Thomas is also a Dilbert fan? Keep in mind that code is still in its infancies. That being said I've been successfully using it on a couple of projects, one with over 1,000 individual front panel objects (really should have worked on implementing arrays), and unlike the other 10 or so solutions for web based control of a VI, it is 100% open source so feel free to make improvements.
-
1
-
-
5 hours ago, Sekel said:
- I dont know, how to make transparent "transition states" of button control. For ON and OFF states its possible to set it in properties. For button transition states, I am lost.
I selected the Classic Square Button to start, and then using the painting tool colored the True, and the False values transparent. This button has 4 states (not 6 like system buttons) and painting the two values made all 4 states transparent. But you can just copy the button for yourself.
5 hours ago, Sekel said:- How did you add "shadowing" for transparent button.
I didn't. If you run the VI you see this shoadowing go away. This is because this shadowing is not part of the UI and is only there to show that an object is on top of another object. You get the same effect if you move any control over top of a tab (not by dragging that places it in the tab)
5 hours ago, Sekel said:- Could this work also with picture ring indicator? 4 state picture ring indicator should be more logic for control (I could convert 2 bit boolean array to numer giving value to picture ring). Do you have any idea why is it not working with my pictures / gifs?
Picture rings, and 2D picture controls in general don't support gif, or alpha layer transparencies. This is why I went with images on the front panel, it is the simplest solution. Otherwise when you have a gif you need to have code running in a loop that will update the static images at regular intervals. With this image that isn't too hard to do because there is a 400ms wait between changing the image but it still adds more logic, and if you only have these 4 states the code is quite simple.
-
The problem with testing a PID is partially that you don't have the full setup, you are creating a control for your output, but you aren't adjusting the process variable with a simulated model of your environment.
Let me try to explain the best I can with my non-academic view of a PID. So lets say you have a valve you want to control with a PID, and it will open and close and let in more or less water through a pipe. So you create a PID and you want to test it without the hardware, which is what you have above. But the problem is when you adjust that valve in the real world, your measured flow will actually change, and that new measured flow will go back into your PID, and then the PID will adjust the output control a little more, which opens and closes the valve more, which adjusts the amount of water flowing more, which is your simple feedback. But in your simulation you are adjusting the value, but your flow being measured (PV) stays the same. It is like the PID is closing the valve more and more, but the flow keeps coming, so the PID closes it more and more, but the flow keeps coming. A better system is to model how the valve and flow relate to one another, and then have your PV going into your PID change, as your output of the PID changes.
You have there a constant of 90 as your setpoint, telling the PID "I want you to be 90". Then you have your PV (essentially the flow reading) set to 50 for 2 seconds, then 30 for 2 seconds then 50 for 2 seconds (if the comment is correct). This means your measured flow in my example doesn't change for 2 seconds, so the PID is going to try to adjust the valve continually in the same direction.
If you want a good basic example, look at the General PID Simulator.vi by searching for it in the Help >> Find Examples (I searched for PID). It has a simple model where there is a PID that sets an output, and then a plant simulator pretends to be the real world behavior.
-
That changes things a bit but I think the easiest solution (assuming there is always 4 states) is a tab control with an image in each. Then a transparent button on top of all of them. Attached is an example in 2015.
Edit: Back saved into 2011 hope it turns out.
-
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?
-
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.
-
1
-
-
53 minutes ago, Zou said:
for example the Front Panel Grid Size.
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.
-
2 minutes ago, rolfk said:
Even on the few cRIO that support a display output, it is far from a fully featured GUI.
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.
-
13 minutes ago, rolfk said:
That one should theoretically be possible to run in a VM on your host PC, provided you can extract the image.
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)
-
1
-
-
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.
-
Have you built a VM with the NI-RT Linux? I had a go but they are using an old-ass version of Yocto.
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
-
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.
-
1
-
-
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.
-
1
-
-
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.
-
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.
-
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).
Custom pump control
in LabVIEW General
Posted
I just painted the tab with the color brush transparent, starting with the classic tab. Having a picture ring that you need to change the values of isn't a big deal, but it is more code that my solution didn't need.