Jump to content

hooovahh

Moderators
  • Posts

    3,392
  • Joined

  • Last visited

  • Days Won

    284

Everything posted by hooovahh

  1. You aren't cleaning up your references at all. On top of holding onto the file you likely would have memory leaks. Close all the references you open when you are done with them. There are some functions that also have a dispose method so you may want to see if those are appropriate for releasing reference too.
  2. Yup that seems to be the problem. The Enum control (or possibly ring I think those appear as the same control type in the JS) is being shown as an image, and not as a web control. I'd suggest you either edit your cfg file, or give the boolean constant to the Publish function which can show a dialog of settings for each control. Look at the settings for the enum control and it should have Show as image to be false. If you want Value Only then that is up to you but with it either on or off it should be controllable.
  3. Would it be possible to post any of the HTML or JS files generated? I'm unsure why some controls that are legit controls wouldn't be controllable in one location but would be in another. Maybe also post your cfg used which defines how each control should be seen and used. If a control type isn't recognized it defaults to an image (which the path control does because what should it do in a browser?) and it is possible the other controls that don't work have the same issue. Buttons will always act as buttons even when it is set to be image only (since it just toggles between the two static images) so if a button is no longer clickable then that likely isn't the problem with that control. Oh what about z-order as well? Is there something on top of the control? I see a decoration and I thought I made them go to the back but maybe there is some invisible object on top of a button. The HTML generated should make it clear if that is the issue. In Chrome you can right click and choose inspect element to see the page source and where the objects are and what data they have.
  4. Again not saying this is the issue, but many desktop CPUs have somewhat decent integrated graphics now a days, even lower end Core I3 has had some integrated Intel HD graphics. These are still pretty poor for gaming, but basic video rendering, playback, and streaming could see some benefits.
  5. Well that's not good. Is this PC a 100M connection as Shaun asked earlier? I doubt you'd be using up 90% of a gigabit connection. Is this a PC that can handle a PCIE network card that is a gigabit to test out with?
  6. That's the minimum to install the IDE, it isn't the minimum for any application you can write. I can clearly write an application which requires more processing power than that. In this case MAX isn't doing anything else. I'd say evaluate your code, find slow parts, and inefficiencies. An atom just might be under powered for what you want. Oh and your low power PC might not have a GPU that the vision toolkit or OS might be using for rendering.
  7. A pretty common technique that works for the simple cases, is to use the OpenG Write Panel to INI, and Read Panel From INI. This will take all the control on the front panel and save their current values to an INI file. The reverse can take the INI file and put the values back on the controls. These functions are found in the Variant Configuration OpenG package.
  8. Oh the pain of resizing LabVIEW UI's. I learned tons of work arounds to make useful UI and UX in LabVIEW and several involve using having controls fitting to panes and using splitters, and subpanels in VIs. If you do go with the Maintain Proportions of Window that ensegre suggested, I'd recommend starting with you UI as small as you expect to support, and then turn that setting on. It tends to work a little better if you only make controls get larger, then resize back down to the original size. If you have a UI and then try to make it smaller things get squished and overlap, then when you make it large again things are out of place.
  9. I use this feature all the time to make code more reusable, being able to find all labels, data types, and values of each element in a cluster quite easily. It's getting back that can be more tricky, where you need to take the array of variants, turn it into a cluster (using the array to cluster setting the size correctly) then a variant to data going from the variant to the cluster. I made an XNode for it a while ago that just sets the cluster size as you wire it up.
  10. Here is a good example. It is a bit more complciated than it needs to be but the main thing is that after a value change it hides the invisible path control, and then if your mouse leaves the chart, then it makes the invisible path control shown. http://forums.ni.com/t5/Example-Program-Drafts/Windows-Explorer-in-your-front-panel/ta-p/3492301
  11. Sorry if I came off as too defendant of LabVIEW, I didn't mean to post these solutions as ways of saying "See LabVIEW can do it, you just need to work harder." It was meant to say "Here is a solution". Often times on the forums a user will post a question and I'd like to find a solution, to get discussions going so others can also post their solutions which are often times better than the first ones I came up with. Not supporting gifs with varying timing, longer than 1s delays, and extension blocks feels short of being able to say LabVIEW supports gifs. Having LabVIEW support PNGs without alpha layer transparencies is a similar shortcoming that I've found work arounds for. But again it doesn't mean I'm happy about it. The dragging files to a control from explorer has similar work arounds that I'm sure you've found involving transparent and hidden path controls, floating on top of the control which will have value change events when dropped. These are incomplete features of LabVIEW and I agree NI should fix them.
  12. There's a few reasons I don't like this method but might meet the needs of others. This means the gif you load must have even timing between frames, and you need to export the gif frames before hand. I'd prefer a method that you give the path to a gif and it takes care of the rest, but if this method meets your needs go for it. I've also seen images pre-loaded into a picture ring and then write to the terminal which image to show.
  13. I whole wholeheartedly agree. That being said customers don't really care what kinds of hoops I have to go through to make something work, they just care about it working the way they think it should (with my input of course). I don't remember a customer putting any kind of requirement on my software to have an animated gif that is clickable, that sounds more like the kind of thing I would look into in my spare time. Because I think it would set my software apart from other LabVIEW software they had seen, and show an expertise in the field. Yes LabVIEW should be able to to do this, and we can complain to NI, vote on it, and tell them all we want. But I'm sorta in the opinion of also trying to come up with a solution that works mostly well with the tools I have today. Then trying to wrap that functionality into a easily reusable example. I did make a thread on the dark side asking about PictureBox animation. One suggestion is to use the ActiveX container for the web browser which has other dependencies but I think could be made to work. Clearly you could do this with an array of images you are updating, but I wanted to avoid polling and timing and updating, and have that off load to some other tool. Attached is an example using the ActiveX web browser and a sub panel. GIF Click Test.zip
  14. Oops missed that, like given. Well some tricks could try to be done to detect mouse down and detect where the mouse is clicked, but not getting the gif animated in the first place is a bit of a show stopper anyway.
  15. These gifs don't look like the kind of thing the user is clicking. These look like loading gifs or things to look at while stuff happens in the background. If you really needed to detect interactions with the animated image, a picture ring, with changing values, would be suggested but that wouldn't be able to be dynamically loadable either. It all depends on your needs. I was just trying to suggest a way to display an animated gif from a file, on the front panel, that adhered to better timing needs.
  16. I tried once getting a gif to load in a .Net picture box but I couldn't get it to animate, I wonder if that would be a better solution. Here is the basics of the code I used to load an image into a picturebox. It looks like it should animate but it doesn't, maybe I'm missing something.
  17. I don't think it is. I can't say for certain but if it was I'd assume one of the NI R&D engineers I've talked to would have been excited about it and mentioned it. Are you part of the technology preview? I'm asking of course for a completely unrelated reason and has nothing to do with the current discussion we are having about vector based FP and BD. And sorry no 4K here.
  18. Great example Gavin. I had one recently where a subVI would be used to log data into a report. For all most all logged data we have a pass fail criteria so one input is an enum of the different limit types (Greater, Greater or equal, Less, Less or equal, Equal, Not Equal, In Range, Out of Range, or Within Tolerance). But there are a few times when we want to log the data, but not have a limit condition. I could have made a separate function that logged but didn't have a limit, and I could have had a case where my enum had a "None" option, but this enum is used in other places where the None doesn't make sense. So I had my limit set to NaN and I check to see if it is a number and if it isn't then I assume it is unwired, and to not have a limit. It would have been nicer to be able to detect the limit enum was unwired, and to therefor log the data but don't perform any pass/fail checking on it.
  19. Odd, I'm unaware of any reason this wouldn't work. Perhaps you need to have a set number of posts, or been a member for so long. I'm sorry I don't know.
  20. Don't click See my Activity, just on that page you can enter a message, attached image as an example.
  21. When signed in if you click on your profile in the upper right corner and go to Profile you'll see your page. Here you'll find your feed that others can view, and subscribe to follow. I believe in the last rounds of forum updates the simple status update was turned into a more facebook like page with content you follow and posts you've made.
  22. I've wanted this feature on several occasions. I had a discussion on LAVA about it a while ago that I can't find and the suggestion by Darren was to use the VI analyzer to find when subVI terminals weren't wired...he clearly didn't understand what I was requesting. So in my project today as a lone developer I probably have 10-20 VIs that I could use this feature on if it existed. Instead I'm usually forced to do something like set the default value and check against it. For doubles this isn't a big deal, I just set the default to NaN and check for that. Arrays I look for an empty array, strings I look for empty strings. But integers I don't have a good solution for and will sometimes make the input a double, and set it to NaN. Admittedly in my cases most could be resolved if wanted to bother with polymorphic VIs. So I may have something like convert a typed cluster to a string that is human readable. But I also might want to convert an array of those clusters into a scalar string. So I'll have a VI that has both the scalar and the array of clusters and look to see if the array is empty, and then operate on the scalar cluster instead. Most examples I have are derivatives of this. Having a path, VI refnum, and string input is another one I remember. If the VI refnum is valid perform some VI server call on it. If it isn't but the path control isn't empty then open a VI reference then operate on that. If the VI refnum is empty, and path are empty, do a open VI reference on the VI name. There are a few advanced string functions I wanted to create for getting string subsets. Where things like unwired inputs meant the rest of the string, mirroring some of the LabVIEW primitives. Of course in these cases I usually have a numeric input that has the default set to -1 and then have the check for <0 and if so do something special. This one is pretty common for getting subsets of other data too like arrays or circular buffers. I would use this function if it existed to make more intuitive code that mirrors some of the palette functions today, and I'd use it to help skirt around the weaknesses of polymorphic VIs. Once you realize how the delete from array function works, you like the fact that it behaves differently when some inputs are unwired. I'd like my code to have similar abilities some times.
  23. Very interesting, all the GIFs I was testing with had the same delay between all frames. Wonder if NI this could be an issue brought up to NI and have a CAR assigned if it is related to short frame length, or varying frame length in the images.
  24. So what I suspect here is that you were using the TDMS write over and over again but the buffer never caused a flush to disk, and you never explicitly called the flush function. Then the program crashed and no file was written to disk. If your file did at one time flush to disk then you'd have some data to look at. If you have a file but it has an error on open, then you might be able to still pull out chunks of the file and recover some of the data. I tend to have a logging module (actor) that will periodically flush to disk, then check for fragmentation, and close, defrag, and reopen the file if it gets fragmented. This is in parallel to the test running so data will pile into a queue while this is happening. This helps make TDMS a bit more robust, because as you found if you have the whole file in memory and then the system crashes, or there is a power outage, then the file is lost. Flushing to disk periodically help keep at least some of the data.
×
×
  • Create New...

Important Information

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