Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


odoylerules last won the day on May 8 2017

odoylerules had the most liked content!

LabVIEW Information

  • Version
    LabVIEW 2013
  • Since

Recent Profile Visitors

1,353 profile views

odoylerules's Achievements


Newbie (1/14)



  1. As someone who does a lot of javascript and nodejs programming. I use it all over the place and often wish Labview could parse it as well as some other languages.
  2. Its stuff like this why i don't develop a Windows target and RT Target in the same project any more. Locked classes/libraries are such a pain. I'm not sure that will solve your issue since it would still probably recompile on you. Do you know if the items that are recompiled happen to marked Read Only in the OS? That's caused me issues before on re-compiles and strange saves.
  3. Well partly yes, i do have an issues with this. However, i also have an issue with global dependencies and honestly there may not be away around that based on how labview was designed. I don't have as much experience with Labview as a lot of people here so i'm sure there are lots of use cases where it might be needed. However, i think there are two types of labview "packages". One would be your IDE extensions such as the G-code manager that you linked. These types of packages work well with VIPM and are good for extending the functionality of the labview IDE. However, i think project specific dependencies, such as OpenG, should live in the subfolder of the project. This would basically mean having a separate copy of OpenG for every project you are working on. Personally i think this makes sharing code a lot easier than running a VIPC file every time you change projects. It compartmentalizes project specific dependencies away from the IDE/Program Files location and into a specific place. It also prevents one project from touching the dependencies of another. So there may be more downsides than not, i'm not sure, but i think its a better approach than global dependencies.
  4. I've considered writing one, however, i have a different philosophy on dependencies and prefer all dependencies not native to labview live underneath the main project file instead of sharing files across projects within user.lib and vi.lib. Pallets would be stored in the user libraries section of the pallet viewer and all pallets would be re-written to point back to the project specific dependencies directors instead of user.lib and vi.lib. Something feels really wrong having to rewrite program files directories to maintain dependencies. I've also considered using NPM, which is the nodejs package manager, to maintain labview packages instead of vipm in combination with the approach above. This a little more involved as i need to write a script to handle different types of packages and it requires packages to have a package.json instead of a "spec" file inside of them. So there would be additional work with that. Anyway, i haven't started anything yet, but i'm also curious what else it out there.
  5. I've been using other languages too much recently. I had totally forgotten about this thread and the general Labview name spacing issues. My dream of project dependencies solely within the project directly may be a dead one until NI changes some things. Even Git Submodules may not be a good solution b/c of the library linking issues highlighted in that thread.
  6. I've been thinking about this issue a lot lately and having recently been writing code in Nodejs, I've been considering writing a labview tool that mirrors some of the functionality of the NPM way of handing Nodejs dependencies. Unfortunately there are pro's and con's to both of the solutions your outline. I personally would avoid #1 at all cost. Checking in re-use code to your project repo is just asking for pain down the road. If you pursue this route, then i would recommend looking into Git Submodules. However, even those are pain to use but are probably a better route then checking code directly into the project. As far as #2 goes, this is one of my biggest issues with labview. It would be so nice if you could have the functionality of the user.lib folder but have it associated within the project folder or on a project by project basis. If you go the user.lib route, or use the vipc route, you are forcing the programmer to only work on essentially one project at a time. It has always felt so heavy to me to have to modify the labview program directory to update re-use libraries. However, if your team is heavy into using the pallets, this is the only way that i know of, to get pallets for your libraries working in labview. This is also pretty much the standard way of doing things currently. This is probably the better route to go for the time being. A nice future labview feature to have would be to load pallets out of the project instead of the user.lib Anyway, the approach i'm considering is similar to NPM, why mess with something that works great. Each project would have a file associated, similar to package.json, that would contain links to the Git repositories that hold your dependencies for the project. These dependencies would then be installed into the project folder under a single "dependency" sub folder that you would ignore in your .gitignore. Each re-use library would have its own subfolder within this dependency folder. The benefits of this system would by that you could then only check in your "dependency" file to your repo. The user would then "install" these dependencies after they checkout the main project repo. This process would involve running the tool which would clone the individual library repositories into this "dependency subfolder". The file location relative to the project file should always be constant so you shouldn't have to worry about linking issues. In addition, it gives you the ability to keep all of your re-use libraries in separate repositories. If someone updates a re-use library at a later time, all you have to do it pull down the latest version off of that libraries repository. It also allows you to have different versions of re-use libraries associated with different projects at the same time. The main downside i see is that you would lose pallet functionality for these libraries. I am a big quick drop user, so this doesn't affect me, but could be an issue for others. Also, this solution probably only works for GIT based source control. I've used SVN before but i'm not as familiar with it. There may be other downsides i'm missing i would like to hear about. I may start a new thread and if i get something working i'll probably look for feedback from the community.
  7. Welcome to LVOOP... this is one of my biggest gripes about using it for certain things. The work arounds listed above help, but using LVOOP design patterns can make some of the simplest things so heavy. LIke these guys mentioned before, you can make a new class that contains the shift register data of the NI method you want to use and write a custom method for the action want. Then include this class in your parent and pass it around in each child. This sounds like an interesting approach, but lately, LV2013 SP1, i keep getting burned by hacking around the call-by-reference nodes to try and fix issues like this. There seem to be some weird deep labview crashing bugs that i keep stumbling upon when i do things like this.
  8. A tcp/ip server is going to be the most flexible, its just takes more to set up. If you do go with network streams have you seen this white paper? http://www.ni.com/white-paper/12267/en/ You have to set up your streams correctly otherwise you won't be able to connect. Also, i believe if you have to shutdown the "server" stream and re-open it if you want to have a new endpoint connect to it.
  9. He makes some good points but i would guarantee that there are a hundred articles out there that would argue against every point he makes much better than i could. I would say people just need to work with whats best for them. I use GIT and i'm sticking with it. The ease of branching is what made me switch from SVN. Making a branch, testing a change and merging it back in is fast and easy. I will say i do miss the locking aspect of SVN, especially since labview like to randomly touch files in the project.
  10. If this is really command you feel is safe for anyone to send at anytime to the CRIO, have you considered handling this "message in a separate loop on the crio that maintains some crio state information. Then you anyone can send the command at any time and if your CRIO is in a state that can process it, then process it, otherwise discard the message or queue it up for a later time. As far as implementing this i'm not 100% what to tell you. In all my applications i specifically avoid multiple host that have the ability to send commands. I'm not sure if a networked buffered shared variable that you can write on multiple host works like you want or not. Basically a network multi writer queue. If it does, then it could be a decent route for your application. If i was going to do something like that i would probably set up a tcp/ip server on my crio and handle all "commands" using that. It will accept multiple connections from different hosts. You could then parse messages(commands) from different hosts based on their IP or connection sequence or a multitude of other things. If you haven't seen it yet, this library may help you out with making a TCP/IP server. http://www.ni.com/example/27739/en/ I have used it before on a CRIO to handle commands.
  11. I second Shaun's comment. I have found that using multiple network streams to connect to different clients becomes extremely CPU dependent for crio's, especially if you need fast updates. I'm not 100% sure what you mean buy " transform signal to sound ". I would probably recommend performing this action on the Host computer either way. I would push the raw data to the host and then do your transformation on the host. What i would recommend would be to make a single network stream that handles all the "commands" that the host might need to send to the CRIO. The benefit of this is that you would only be able to have one host connected at a time with this stream. This also gives you a single point from which to issue commands so you don't have multiple people trying to control the crio at once. As far as sharing data back out to multiple clients, shared variables do work well for this sort of thing. They have their other downsides but this is probably a good place to start. I would highly recommend that you only read data using shared variables and not write using them. All your variables on your host would have their access mode set at "Read" and none as "write. This once again prevents multiple people from issuing commands at once since you will have multiple clients connecting to the CRIO. One other thing i might recommend is that the if you do use shared variables, that you set the one that give your your "Sound" raw data to be have network buffering. Since it appears to be the critical component of your system, this should help with disconnects or network issues, to keep your data stream intact. Hope that helps
  12. I've been looking at nodejs a lot lately. Its basically server side javascript. Lets you do the backend and frontend in the same language. Obviously you still need to learn HTML and CSS but i think the browser is the future for HMI and GUI's for most of my projects. Its hard to beat the amount of open source material there is out there for the front end browser experience. I still want to learn C++ for embedded stuff.
  13. This should be 2012 versions. As far as them being a CPU hog, i can't really comment on that. I'm not sure how fast you want to update or what your computer currently is but on most modern computers it shouldn't be too much of a draw. GraphTest.vi GraphUpdate.vi
  14. I was having a similar issue however mine were due to having the gui vi's i put into subpanels be reentrant. In general i've found strip charts behave kind of strangely and you can't really rely on them to update properly. In the end i ended up moving away from the strip chart and instead moving to a x-y graph. Basically i would maintain an array of points and redraw the graph whenever needed with new points. I have attached a quick example of how i did it. Hope it helps its in lab view 2013 SP1 Also, depending on how you are doing things you could simplify your array handling into an action engine and just call it every time you wanted to update. Since i was using shared clones, i had to handle my arrays differently in my class and outside of an action engine. GraphTest.vi GraphUpdate.vi
  • Create New...

Important Information

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