-
Posts
3,445 -
Joined
-
Last visited
-
Days Won
292
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by hooovahh
-
So what is the likelihood that this type of thing could be used on a real-time system? I have a simulated RT system in a VM and I started testing with it and I made some progress, but things still don't quite work. I copied all the www files to the right location on the RT system, including the config file made setting the image type or not, and I modified the example to run without the event structure but instead poll the button values, then I ran the VI on the RT system. I got an error in the following VI because it tried to read the front panel, when there isn't one on RT. (Errro 1013) FPPublisher\WebFrontPanel_class\CreateHTML.vi This part of the code is relatively minor and just reads the size and color of a panel so I replaced the read with some constants for a test. After this the code ran without error so I thought I may get lucky. I went to the file browser from MAX and navigated to the following URL path in a web browser. http://192.168.56.101/files/ni-rt/startup/www/Example.html The page loaded up and...it was mostly blank. I viewed the page source and it is attached. Any idea why this wouldn't work? I looked into several of the properties you call to make the page and I didn't find one that said it wasn't supported on real-time. Example.htm
- 137 replies
-
Ideally the whole project, all source, all libraries, all dependencies, with instructions on how to reproduce the issue. Usually this is done by zipping up all source, then uploading that zip in a post. For most this is not practical so some example code that exhibits the issue would work. Posting pictures is almost useless, some stuff can be understood from it but not things like what is going on in subVIs, how VIs are configured, or how express VIs are configured just to name a few down sides. If you do attach images, it is recommended you post snippets which are PNG files with embedded code in them. They only contain that VI so all external dependencies will still be missing. http://www.ni.com/tutorial/9330/en/
-
So without posting code it is hard to say where the scroll bars are coming from. Are they in the parent VI's pane? or are they in the VI that is inserted into the sub panel? In either case a property node call can fix it, or change the setting in the VI, for the affected pane. I sometimes have a situation where the user can resize the window, and in these cases the sub panel may or may not fit in the pane, of the parent window. So I have the VI enable or disable scrollbars, based on the window size, and the size of the sub panel, which is then sized to the VI that is inserted into it.
-
Wow very neat stuff. So I tried various things to get this to work in VMWare, which is my virtual machine of choice, but didn't have any luck. The two sticky points for me was the network adapter options, and the booting the USB drive. VMWare supports EFI booting so I thought that might work for the USB, but it didn't. I also tried converting the USB drive into a ISO with ImgBurn, and other tools but that didn't work either. But even if you had RT LabVIEW booting, if you don't have a compatible network adapter, it won't run anyway. And in the free version of VMWare I don't think there is a way to change the network adapter type that the guest OS sees. But yes your instructions on using VirtualBox worked great. I was able to make the VM with a SATA, and IDE, have the IDE be my USB drive, and have the network device be an Intel Pro/1000 which is supported. After this I was able to install the OS, and connect with MAX and install other various software, very cool stuff. I haven't played around with it much, but the prospect of being able to develop some code without the actual hardware is fantastic. Things like web services, console output, and the whole RT deployment process can be done in simulation. As for performing actual work I'm not so sure yet what it will be capable of. I know that in some enterprise VM software you can dedicate cores of a CPU in the host to a guest, which would make real-time applications a bit closer to the real thing. But not being an expert I can't say for sure, but having a deterministic OS, as a VM inside a non-deterministic OS makes me think that the guest OS wouldn't be 100% deterministic anymore. Then there is also the licensing side of things. I suspect NI would consider a VM installation of their RT software just as real as any other install, and would require a deployment license of RT.
-
Reaction to an highly suspect Open G License breach
hooovahh replied to Thoric's topic in OpenG General Discussions
I'm still not quite sure why someone would do this. I mean if I found a golden goose, or if someone gave me a golden goose, the point still remains that I now have a golden goose, why lie about it? If you are trying to impress your boss, they either are a developer and know of OpenG and know you are lying, or they are the management type, and don't really care about those types of details and just wants your work to be done. For other toolkits which aren't free, or don't have as open license as OpenG, I can see a desire to do this. Knee-jerk reaction would be to scold them for taking advantage of an open source consortium, but the sensible thing is to take Shaun's advice and probe into the situation a bit first. -
Sorry if my mannerisms seem strange, replace my opening sentence with "What you are trying to do is not clear to me, could you explain it in another way that is clearer, or post simple demo code that exhibits the behavior". Yes I see you are resetting the timer, but couldn't tell from the picture if you have True wired to the Auto Reset, or the Reset, posting code instead of pictures in these cases makes it clearer. Attached is a quick example of what I was talking about. Where there is a loop that runs, and when you click a button two waits are done, one for 2 seconds one for 3 using the elapsed timer, resetting it between each call. This also resets when you first come into the wait so the timer should work as expected where it always counts up to 2, then 3. Notice that the reset only happens when the inner while loop has an iteration of 0, and then isn't reset until the next timer starts. Without this you will get strange behavior because multiple seconds will have gone between pressing the button a second time, so the first wait (the 2 second one) will be completed immediately. I suspect this is what you are seeing. I also don't intend on being rude.
-
Uh...what? The elapsed timer is intended to count up to a certain value, then it gets reset, and then it counts back up again and again. There is some optional inputs that can change this behavior but normally this is how it works. So if you are using the elapsed timer for a set of things, then stop, and you want to start the timer again, you should give it a True on the Reset input, the first time you are coming back into your loop. I've usually done this by using the Equal to Zero function, and wire it to the iteration counter of a for or while loop. Then it will be True the first time that loop starts which will reset the timer.
-
It seems the opened VI couldn't find the dependencies where it thought they should be. This is probably because the dependencies, or the main VI have been moved on disk in explorer, since they were last saved. The paths to the dependencies are relative and moving them in reference to each other can cause that to happen. If you are new to LabVIEW there is some free training here. NI Learning Center NI Getting Started -Hardware Basics -MyRIO Project Essentials Guide (lots of good simple circuits with links to youtube demonstrations) -LabVEW Basics -DAQ Application Tutorials -cRIO Developer's Guide Learn NI Training Resource Videos 3 Hour LabVIEW Introduction 6 Hour LabVIEW Introduction Self Paced training for students Self Paced training beginner to advanced, SSP Required LabVIEW Wiki on Training
-
You selected a function not a terminal. What kind of control would you suggest it make? Right click a terminal (one of the inputs or outputs of a subVI) and then create the control/indicator/constant from that and it will make it for that data type. Same with a selected wire.
-
Okay fine, let me try this again. Those that I've spoken to on the subject find my implementation cleaner and easier to follow. If your opinion does not align with that statement then you are dumb. That being said my implementation could benefit from some classes for sure, and I looked into once but never finished the re-write. Oh and there are some CLNs that could simplify my code too, rather than parsing blocks manually.
-
Don't expect anything too mind blowing, it's basically all stuff you can research on your own, with a few added breakdowns, and experiences.
-
I would not consider VI Explorer well written. It is written by someone who is clearly an expert at other programming languages, but not LabVIEW. That isn't to say I don't appreciate their work just that I found my implementation cleaner and easier to follow. Of course my implementation doesn't show how to replace passwords, posting that publicly would cross a line in my mind. Looking at the VI file structure as an exercise in pulling data out without involving VI Server is a useful tool. Glad to hear you were able to independently reverse the VI file structure. I always assumed that the original writer had some internal knowledge at NI to accomplish what he did, but now I realize how that doesn't necessarily have to be the case.
-
Sorry I misread your opening paragraph to say it worked with a Strict type, but not a normal type def. There is a private method for a VI class type, for Synchronize In All Contexts, not sure if this can be applied to the control VI and have it work or not. Synchronize Private Method.vi
-
Unless I'm misunderstanding something, the type def is doing just what it should and not updating unless the data type of the control changes. If you are only replacing the pictures in a boolean, but not the actual data type, then an update won't be forced on the instances of the control. Only a Strict Type Def will apply changes to all instances of the control, even if a cosmetic change is made.
-
All I can say is you're not crazy, and there probably isn't anything we can do about this. I modified your OnDoubleClick2 in the hopes that adding a cancel output, which would then not add any states (like get terminals and redraw), but as you stated the dirty dot appears even if you don't add those states. Next I looked at the VI property Modifications >> Block Diagram Mods Bitset, this tells you what on the block diagram is unsaved. If the value is 0 then there are no unsaved changes. This value is still 0 when the OnDoubleClick2 VI is ran, so the bit is being set after the OnDoubleClick is done running, which to me means there isn't really anything we can do about it. The second time I double click the XNodes it does have a non zero value, meaning it is reading the bit sets on the calling VI. But even if we were able to clear those bits indicating a modification was made, those bits aren't set until after the VI runs. Oh and another thing I checked was maybe in newer versions of LabVIEW there was an OnDoubleClick3 which fixes this, but in 2015 there isn't.
-
Welcome. Yeah feel free to post your projects. I too would encourage you to post them in the actual Code Repository if they are in a decent state instead of In Development. Bother are fine places but I've found posting in the In Development does get messy, with attachments and updates from users and the original poster. Posting in the Code Repository will have a discussion where this can still take place, but the first post will always take you to the main page where you can download the newest official release, and any previous official releases. Rather than having someone read multiple pages of a discussion trying to find the newest version.
-
Asking questions isn't the problem, there is tons of stuff I don't know about LabVIEW and I've been doing it for some time now, I still ask questions. The problem is some times we ask questions in the wrong way, and that will either bring out the wrong answer, or the wrong attitude from other members. I'm sure Jordan didn't mean to mock you, but sending someone a private message for something that is better discussed publicly is something to be avoided. I'm glad to hear you are passionate about LabVIEW, many of us here are. This document lives on another LabVIEW forum, but I think many of the points are valid here, feel free to read up on what most communities consider good etiquette https://decibel.ni.com/content/docs/DOC-40451
-
I'm going to try to summarize what your code is doing. On value change it will read the number of items in your listbox then run a for loop that many times. In that for loop you are setting the symbols each time, but the value doesn't change, and you are only setting one symbol, so you are turning off all the other symbols. This is because the array size is always going to be 1. If you want to set a symbol for every item, then you need to set the Symbols, with an array, whos size is the same as the number of items, right now the size of the array going into the Item Symbols property is always 1, so you are always going to only set one item to have a symbol. Attached is a new version where on value change it creates an array of the same size as the number of items, and then sets the symbols for all items using that array. Are you interested in any free training for LabVIEW? Here are a few links that I think might help you. NI Learning Center NI Getting Started -Hardware Basics -MyRIO Project Essentials Guide (lots of good simple circuits with links to youtube demonstrations) -LabVEW Basics -DAQ Application Tutorials -cRIO Developer's Guide Learn NI Training Resource Videos 3 Hour LabVIEW Introduction 6 Hour LabVIEW Introduction Self Paced training for students Self Paced training beginner to advanced, SSP Required LabVIEW Wiki on Training These links come from another document that I just linked to in a different thread. Automatic symbol for items Hooovahh Edit.vi
-
I've used DIAdem in the past, and it is quite flexible with data formats. It supports several kinds, and then plugins can be made to support more, but with no additional plugins it works well with some Excel formats, and TDMS. I know ATML works with a plugin, which is great for TestStand outputs. That being said I have rolled my own (sorta) using the DataFinder toolkit and TDMS files. You just point DataFinder to a folder of files to index, then you can perform queries with the LabVIEW API. I made a neat interface and put it on a server so people could login and perform a search based on criteria they wanted. Like the test completed after this date, ran by this user, on this tester, in this nest location, and passed. Then my program could perform a basis Gage R&R showing how values changed between reports that met that criteria.
-
Have you never used a forum on the internet before? Go to lavag.org, click on the subforum most applicable, then click Start New Topic.
-
This post is 7 years old, and has nothing to do with the original question. The answer is to just use a property node and read the Item Names, then use the Array Size, but in the future make a new thread for your new question.
-
Please don't double post, I've removed the other thread. What you are looking for is the System Exec.vi. Search the palette for it. http://zone.ni.com/reference/en-XX/help/371361K-01/glang/system_exec/
-
So I got confirmation today that those who need to know about this issue, are aware of it. At this moment it sounds like efforts will be made (eventually) to bring it back.
-
Here is an article I read a while ago describing the ghost patterns, before reading it I always though the 4 ghosts just chased you randomly. http://gameinternals.com/post/2072558330/understanding-pac-man-ghost-behavior
-
I'd like to think us at LAVA are better than Apple, Google, and Microsoft...okay maybe not better but something.