Jump to content
News about the LabVIEW Wiki! Read more... ×


Popular Content

Showing content with the highest reputation since 11/14/2018 in all areas

  1. 17 points
    After I made this post I decided to bring the LabVIEW Wiki back online. It was not easy and took several days of server upgrades and hacking. The good news is I was able to bring up all the original pages.. The even better news is I talked with @The Q and @hooovahh and we are all on the same page as to how to move forward. @The Q did a great job of stepping forward and trying to fill the void that the LabVIEW Wiki's absence had left. He's agreed to migrate all the new content he created over to the LabVIEW Wiki, from Fandom and continue to develop new articles and content moving forward on the new site. He will also help in moderating the Wiki and will be promoted to Admin rights on the Wiki. His help is much appreciated. The LabVIEW landing page created here on LAVA is awesome but the forums don't lend themselves to static content creation. Instead @hooovahh has agreed to move the old landing page to here. That will be the new home for the landing page. This will become a valuable resource for the community and I hope all of you start pointing new people in that direction. With many editors, it can only get better and better over time. Where do we go from here: Logging in. - The old accounts are still there. If you're a LAVA old-timer, then you can try to login using your LAVA username. If the password doesn't work then reset it. You can also create a new account here. I'm going to announce a day when new accounts can be created. I'm limiting it for now because of all the spam accounts that can be potentially created. There's an issue with the current Captcha system. if you are super-eager to start creating content now and want to help, send me a direct message on LAVA and I can manually create an account right away. - New account creation is now open. Permitted content: - I'm not going to put restrictions on content at the moment. Obvious vandalism or offensive\illegal content will not be tolerated of course. However, the guidelines will be adjusted as time goes on and new content is created. There's just not enough content right now to be overly concerned about this. We need content. Discussions about the Wiki. - Each article page has an associated discussions page where you can discuss issues related to that article. Please use that mechanism (same etiquette as wikipedia). General Wiki issues\questions and high level discussions can be done here. So now, if you need to add content, you can do it yourself. Feedback as always is welcome.
  2. 4 points
    Thanks to hooovahh for posting information before I could get to it. Most of you already know me but for those of you who don't, you can always reach out to me directly if you have questions or concerns about LabVIEW. As he stated, the 2018SP1 installer was not complete and wasn't supposed to go live online when it did. Our apologies to everyone who downloaded it and found it to be incomplete. The issue with the installer has been fixed and we will release the finished product/installers soon. My personal apologies that our installers were so eager to get out the door and into your hands that they didn't wait for all of the final testing to be complete. When we do our next get together at the CLA conference, LV Champions call, NIWeek, or other LabVIEW-related event, feel free to come find me and let me know how we can best improve LabVIEW to help you.
  3. 4 points
    I think it would be possible for JKI to add besides the JKI package repository and the NI Tools Network repository one more well known repositorey such as a LAVA URL to the free edition. That would not be a big deal to add I'm sure. Another option I would definitely consider, is a paid version of VIPM that costs a small fee but then allows to add custom repositories to that client. You still would need a full pro license to create new repositories but not to access them. The current license model is impossible to defend in a company as ours where you not only need a pro license to create your own company wide repository, but anybody wanting to access that repository needs that license too in order to add it to the locations VIPM will check for packages. So something like the free community edition as now with additional LAVA repository added. Then an intermediate Developer Client edition that allows to subscribe to custom repositories that everybody in a company could use. And last but not least the full featured VIPM Pro as it is now. The old OpenG package manager could more or less do the two first editions already, it is just outdated and doesn't handle new LabVIEW file tyypes properly anymore, that were coming out with LabVIEW 8 and later. EDIT: About 2 years ago we were evaluating in our company how to manage internal libraries and the distribution thereof. VIPM was considered too but the fact that every developer would need a Pro license killed that idea very quickly. If there would have been a Developer Client edition that normal LabVIEW developers could use and could have been purchased as a site license for a feasable fee, I'm pretty sure we would have been able to get that solution approved together with a few Pro licenses.
  4. 3 points
    I don't think it's just you. For my part. I work with companies that require approved suppliers so using any third party software is an admin nightmare. Because of that and the length of my whispy white beard, I have accrued my own software which is unencumbered by other licences and can be used by the aforementioned companies because I am approved. Certainly there are some features that have been added to LabVIEW when before only openG had those features (getting type def info and auto indexing array springs to mind) and Rolfs zip package is much, much faster than NIs. But a lot of the functionality was just replication of NIs (like most of the string functions). There were a few gems in there like the inifile being able to write anything (but I think MGI toolkit outpaced that and besides, I moved to SQLite a while ago now). And, as you mentioned, removing array duplicates and it's ilk. But, like you say, they are not hard to write and the incestuous dependencies means that when you want a banana you get a banana, the gorilla holding the banana, the tree the gorilla sits in and the whole jungle surrounding it. Package that with some BSD 2/3, LGPL, GPL and god knows what else ad nauseum and it makes an otherwise fine package difficult to actually use in anger.
  5. 2 points
    Great article, thanks! And a pretty cool way to explain things in LV terms OK, here the detailed explanation as promised: You can find a very simple example in the ZIP file attached to my first post, GZipStream.Example.vi . There's a file Hello.txt, if you run GZipStream.Example.vi you'll get the compressed file Hello.txt.gz . To decompress it, activate the other frame of the diagram disable structure and run it. The output will be Hello2.txt . There's not much to say about this example VI, the code consists of just .NET invoke nodes and properties. The code of CreateGZIPStream.vi is that what matters here. We use .NET reflection to call a constructor that would be otherwise inaccessable for LV. Reflection is the ability to query a .NET assembly (DLL or EXE) for the classes (and other types) contained within and ask these classes for their properties, methods, events and constructors. It is built into the .NET framework and thus always at your service if the .NET support of LV isn't enough. The most important .NET data type when using reflection is System.Type . OK, let's now dissect the code. Sorry about using C# here but I know no better way to explain .NET code. This is what we want to do: GZipStream CreateGZipStream(Stream stream, CompressionMode compressionMode) { // Call the constructor. return new GZipStream(stream, compressionMode); } Since LV doesn't allow us to select this constructor we need another way to get and invoke it. Reflection makes that possible, although the code becomes much more complex. CreateGZipStream.vi is roughly equivalent to the following C# code: GZipStream CreateGZipStream(Stream stream, CompressionMode compressionMode) { // Get the types. Type streamType = typeof(Stream); Type compressionModeType = typeof(CompressionMode); Type gzipStreamType = typeof(GZipStream); // To get the desired constructor we need its argument types and bundle them into an array. Type[] constructorArgTypes = new Type[] { streamType, compressionModeType }; // Get the constructor. ConstructorInfo gzipStreamConstructor = gzipStreamType.GetConstructor(constructorArgTypes); // Bundle the constructor arguments into an array. object[] constructorArgs =new object[] { stream, compressionMode }; // Call the constructor and cast the result. return gzipStreamConstructor.Invoke(constructorArgs) as GZipStream; } Unfortunately LV complicates things a little further: We have no direct equivalent of typeof(). We can work around that by either using GetType() or loading the type from the assembly by name. Using GetType() is easier but it requires a valid .NET reference. Thus we need both: GZipStream CreateGZipStream(Stream stream, CompressionMode compressionMode) { // Get the types. Type streamType = stream.GetType(); Type compressionModeType = compressionMode.GetType(); Type gzipStreamType = compressionModeType.Assembly.GetType("System.IO.Compression.GZIPStream"); // To get the desired constructor we need its argument types and bundle them into an array. Type[] constructorArgTypes =new Type[] { streamType, compressionModeType }; // Get the constructor. ConstructorInfo gzipStreamConstructor = gzipStreamType.GetConstructor(constructorArgTypes); // Bundle the constructor arguments into an array. object[] constructorArgs =new object[] { stream, compressionMode }; // Call the constructor and cast the result. return gzipStreamConstructor.Invoke(constructorArgs) as GZipStream; } But that's still not enough. For LV CompressionMode is an enum, in .NET an enum is a full featured object. So we have also to construct a CompressionMode .NET object in LV and set its enum value. There's no direct equivalent to the 'value__' property in C#, I guess LV does something special here. Now we're ready to invoke the constructor in LV. The snippet again: We construct the CompressionMode object and use its Assembly property to get the GZIPStream Type object. Then we ask for the constructor using the parameter types bundled into an array. Finally we call that constructor with the arguments bundled into an array and cast the result to GZipStream. A note about the style of the code: When it comes to external reference-based code I use a single error wire through all nodes to enforce some kind of control flow. Furthermore it's important to close all open .NET references after using them. I'm using .NET reflection to do things that are not supported by LV for a couple of years now, in my case .NET Remoting with events, see here (no reflective constructor invocation, though).
  6. 1 point
    View File Unrestricted Invoke Node.xnode One of the difficulties with editing XNodes without the license is that invoke nodes for the XNode class don't show any methods. This XNode acts pretty much like a real Invoke node, but it allows access to all possible methods. You can also right-click and replace it with a real Invoke node. Submitter paul_cardinale Submitted 11/06/2018 Category XNodes LabVIEW Version 2018 License Type BSD (Most common)  
  7. 1 point

    Version 1.0.0


    There it is. The complete library for the MCP2221A. I2c adapter, I/O in a single IC. I love that one. Let me know if any bug is found. I try to make that library as much convenient as possible to use. Two version available 32 bit and 64 bit. little note: to open by serial number, the enumeration need to be activated on the device first. (open by index, enable the enumeration) It needs to be done only once in the life time of the device. PLEASE do not take ownership of this work since it is not yours. You have it for free, but the credit is still mine... I spent many hours of my life to make it works.
  8. 1 point
    So I have this bug report that AppBuilder fails to build this one particular app whenever the "remove polyVIs and typedefs" option is enabled. The top-level VI breaks during the build. I try some of our usual debug approaches and don't find anything, so I hack up AppBuilder a bit so that when I get to the end of the build, I can open up the broken VIs and see what they look like. And I see this: Where the heck have all the class methods gone? They're in memory at the start, missing at the end. That shouldn't happen! So I set up a trap to detect when the VIs go missing. I'm working in a debug build of LV with a lot of extra guards and logging turned on, so it takes about two hours to run this build. And I get nothing. So I rework my trap, thinking I've coded something wrong. Four times I do this over the course of yesterday, working on other issues while the build runs. Four times -- roughly 8 hours -- nothing. The VIs swear they're all in memory and the caller should know about them. This morning I come in and, for some reason, I happen to double-click on one of those ? nodes. And, lo, the missing VI opens. Say what? Turns out, AppBuilder had stripped all the VI icons out (saves space in the built EXE to ditch all those unneeded images), so they all render as the ? icon. I have no idea what's actually broken, but it ain't that all the class methods have gone away. One wasted day. *head bang* *head bang* *head bang* Yet another reminder -- as if I needed it -- that computers only do what we tell them to do. And they do it very precisely.
  9. 1 point
    Some test code I made of doing 500 Get Attributes of a class with some large data sets. I would try to avoid having to much data in the Attribute, but if I need it I might user the Reference Variable Design Pattern GDS can apply to a class. GetAttribute.zip
  10. 1 point
    The real death of an API isn't when development stops, but instead the last time someone uses it as a dependency. (loosely quoting several people about existentialism)
  11. 1 point
    I just loaded a bunch of JKI VIPM packages onto a new laptop and a bunch of OpenG packages were dependencies. I would not say this is dead at all.
  12. 1 point
    So if it wasn't clear, this release had issues. It wasn't intended to be the final LabVIEW 2018 SP1 and was an version between SP0 and SP1 for testing. It was unintentionally released to the public and wasn't intended for the general public to use, and likely won't activate. The release was pulled and if you did download it you are better off not using it until the actual SP1 release. On top of not being intended for an actual release, and not activating, it also has a bug with upgrading from 2018 f2 to 2018 SP1 which is being addressed for the actual SP1 release.
  13. 1 point
    The OpenG forums here on LAVA have been considered as official channels for some time, unless that's changed. But thanks for finding this. I think moving to GitHub is a great idea and would allow better collaboration. Bug reports and feature requests can be managed on GitHub more efficiently probably than on LAVA. However, freeform discussion forums are also very usefull. What can we do to accelerate the Github migration?
  14. 1 point
    OpenG isn't dead. There just hasn't been a lot of work on it lately (though we have been working to keep them working in NXG). I've been in the process of moving the libraries over to GitHub, as needed. LAVA posts aren't the best way to get in touch ;-)
  15. 1 point
  16. 1 point
  17. 1 point
    I a similar vein. The toolkit gives new starters a lot of examples on how to use prototypes in LabVIEW - in small, easily digestible chunks IMO it has enormous value as a teaching resource and as an exemplar of coding style.
  18. 1 point
  19. 1 point
    Link is now dead, they got the feedback I guess. Well, the feedback that this particular install is bad. Not the feedback of "maybe you should test these installers before uploading them" ?
  20. 1 point
    We use a PreBuild action, which can set the build number of an EXE to the SVN commit version. This means that we'll have software where commit 384 is the source that made that EXE. Having it in the EXE means Windows can tell me what version it is even if I can't run my application and get to an About Screen. It isn't seamless but it works well enough.
  21. 1 point
    Thanks for reminding me. I just tested it and yes the TDM Importer Version (as reported in Excel) now imports my TDMS files without crashing. That was a major pain because I'd uninstall TDM 18.0.0, reinstall TDM 17.x, but in the uninstall some other dependencies were removed which then needed to be reinstalled...which by default installed 18.0.0 again. Oh and it looks like the download page to this add-on was updated yesterday to the new version too. Other fixes in SP1 I've heard are related to VIMs but am unaware of the details.
  22. 1 point
    I had a hard time downloading this, but it could be an IT issue on my side. The download would stall, and I'd pause, then resume to get it going again. After installing with default settings, I launched it and got an error "error unable to open resource files". I'll be performing a full uninstall and reinstall. It could be an issue on my end or an issue with the release. I probably should have tested this in a VM first... EDIT: Uninstall and Reinstall fixed it, not sure if that means there is an issue with upgrade or just me.
  23. 1 point

    Version 1.0.0


    One of the difficulties with editing XNodes without the license is that invoke nodes for the XNode class don't show any methods. This XNode acts pretty much like a real Invoke node, but it allows access to all possible methods. You can also right-click and replace it with a real Invoke node.
  24. 1 point
    main.vi I've back-saved to LV 2012 but I don't have 2012 available ATM to check (and can't remember when the "Inserted VI" property was introduced.)
  25. 1 point
    Two ways to do what the OP is asking. 1. VI Server world: Children have a static link to their parents and Parents have a dynamic link to their children. This means that once a class is loaded into memory, the parent knows about the child. According to the documentation this will NOT work in the runtime environment, but i've used this several times when making IDE Tools. 2. Runtime Reflection: The following code will also give you an array of all of the children loaded in memory, but this time it uses less VI Server so it will work in the runtime environment. I use this when using a plugin architecture. I've not done a lot of performance testing with it, but on a medium-ish size project (one with ~150 classes) it only takes about 50 ms to run, so it's worked well for me so far. Having given you those solutions, I still think your best bet is to use a statically defined array. This will ensure things are loaded into memory when their needed and such. My solutions really only become worth it once you're dynamically loading classes.


Important Information

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