Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by smithd

  1. For FPGA most everything is reentrant but really I'm referring to things like delay, rising edge, etc. functions which store previous state in a feedback node. This would cause a problem if you made any such function non-reentrant but this isn't the default. But...I actually do mean going to the extreme of never storing state in a VI except in these special cases -- with DVRs I don't think an uninitialized shift register is really appropriate anymore. For the analysis functions I don't think there was ever a need to store state inside--they're math functions! Or they could go even furth
  2. It could totally free that memory if it really wanted to. It doesn't have a problem. Only if you store state inside of your VIs, which I personally think is a bad idea with a few exceptions (FPGA, action engine operating on a singleton resource, etc). Pure math functions are certainly not on the list. Also, staab posted up this suggestion a while ago: http://forums.ni.com/t5/ideas/v2/ideapage/blog-id/labviewideas/article-id/19226 Didn't seem to be popular for whatever reason, I think he probably just didn't explain how big the issue was. Either way, my hope is that enough people
  3. Yeah I'd expect something like this (http://www.ethercat.org/en/products/92F6D9A027D54BABBBEAFA8F34EA1174.htm) to be right right answer, but I can't find one for PXI(e). Modbus is not a particularly fast protocol and its also not that easy to use (there is only one data type). Do you have performance constraints for how fast you need to move data around or what the latency should be like?
  4. No, the only slave is the 9144, PXI is usually used as a master. Out of curiosity why would you want to use a PXI chassis as a slave? I normally see PXI has a high speed/throughput acquisition system unless veristand is involved. Is there a PXI-only feature you need which isn't supported by the 9144? If you don't need deterministic single-point data communication, does the beckhoff controller support other protocols?
  5. So I mean they were trying to get there with call and collect, I just don't think its very user-friendly. Your concept makes a lot of sense, and it would be handy for all the different types of call-by-ref. Instead of a single node, we have "latch values", "run", and "get values", and I suppose we'd have to have a function to "get instance from clone pool". The other usability items I can think of: Timeout on the wait/collect node Easy way to abort reentrant clone pools if we need to shut down (probably solvable if we had a "get instance from clone pool" function). Improved type propagation s
  6. Looks pretty straightforward. On the one hand I like the type safety the object gives you but on the other hand, objects are a pain to use in large quantities. I hate the whole documentation, inheritance, etc process. I know there are some fixes out there but really I'm ok with giving up type safety in exchange for just passing in a vi server reference...of course nothing about your version prevents someone from doing that. May just have to use yours in the future
  7. Since its a simple change I made a branch here: https://github.com/smithed/taskpool/tree/removecancel I think I like it better, but I'm still thinking about it. Edit: yeah I think it makes sense to leave that to the end user. It should be easy to make a task which supports a custom cancellation mechanism if needed.
  8. Meh, you're right. I hadn't thought about that issue...the DD calls will eventually all add up, and they'll be shared across all the call pools probably. Oh well On the adv vs. easy API topic what I was considering was creating a FGV which has the same behavior as what you and AF have, so it would initialize a default call pool and provide a simple 'run task' function you can just grab and use. But having a backing API makes me happy I've been kind of on the fence about the cancellation thing since I made my UI example, as its kind of hard to keep track of. It felt like it wo
  9. I'm not sure where but I'm guessing GDS has some scripts you can use as a starting point, and the master branch is in 2012. Edit: didn't realize its GPL. May cause issues for you.
  10. Ok I made the changes you suggested and I think I like it better this way. Also I realized I forgot to address one point on your #1 Even if I did change it to just support the standard execution system, I still prefer having a specific 'context' or whatever that everything runs on, rather than using what is basically an inaccessible FGV. If you want a semi-real reason its this: the async call pool can only grow, which makes it kind of scary to me to use in a long running application unless you have the ability to shut down the entire clone pool (which I don't think you can do in AF
  11. 1- ^^what he said, its mostly just there if you know you're going to block an entire thread doing something. For example with http get I believe its calling a dll, so you're blocking a thread during that process. Same thing with some of the other I/O types. Its not clearly documented, but those inputs can be completely ignored and it will automatically create a pool of size 10 on the standard exec system and always run it there. 2-I thought about that one a lot and went back and forth. On the one hand I liked the idea of batches of batches, and of course you can still do that with your own
  12. I thought about yours and af before moving forward on this and decided it still made sense as more of a loop co-processor than as a dedicated logical actor. That is its more of an off-diagram "helper" loop, in your terminology. I may need to go back and look at the code, though, as I was under the impression that everything in there was an actor and I wanted to avoid that because you still have the problem of clogging the QMH. If every instance is its own async call then I think I must have just missed the right spot in the code or misunderstood. Looking at it again, now that I'm looki
  13. Yeah, thats correct. I had been learning a bit of c# and thought the ease with which you could run things in the tpl was impressive. Mine is...nowhere near as fancy, and probably never can be, but the intent was similar.
  14. Hey all, I've spent a little time here and there working on this and I figured now was the right time to ask for feedback. Typically when making a new UI I'll use something like AMC and have a producer (the event structure) and consumer (a QMH). This is the standard template in AMC (image here) and its also used in, for example, the sample projects. This is ok and has done well for a long time, but there are weak points. (a) the QMH can get clogged. After all you're sending all of your work down there and if something is slow, the consumer will run slow. (b) This pattern seems to alway
  15. I'm not sure if it fits your needs but have you looked at this? http://www.ptpartners.co.uk/ptp-sequencer/ It looks pretty cool (haven't used it but theres a video series on that page). It seems to cover all the basics you're developing here and it's got a 'run next step' function you could call from anywhere including an actor. Seems like it might fit your needs. Also on the tools network: http://sine.ni.com/nips/cds/view/p/lang/en/nid/212277
  16. That could work, but you'd probably have to make sure the lvproj links to the source distribution rather than the original. I doubt app builder will do anything with the lvproj file. With the source dist option, you should also double check that your bitfile works correctly if you're using cRIO. Back to the original question, I see this as being two fundamentally different issues. Basic protection is pretty simple as described above, you can use either a source dist or a lvlibp and remove the block diagrams. From an IP protection standpoint, you may want to remove front panels+tur
  17. As for your other question about plugins, theres a few links I'll put below but you should ask yourself these questions: Do you really need to do this? ...I mean really, are you sure? ......No really, its not fun. Ok so if you really do decide to do this, theres a few things that would come in handy: https://ekerry.wordpress.com/2012/01/24/created-single-file-object-oriented-plugins-for-use-with-a-labview-executable/ https://decibel.ni.com/content/groups/large-labview-application-development/blog/2011/05/08/an-approach-to-managing-plugins-in-a-labview-application https://decibel.ni.c
  18. I don't think this will help anymore (you said you can't modify the grandparent) but I've found it handy in the past for what I think are similar situations. Its essentially a nice way to describe what the dr. was suggesting: http://en.wikipedia.org/wiki/Template_method_pattern Here your top-parent provides a public static method and a protected dynamic method. This gives defined places for a child to override behavior but also makes sure the public method does what you want, like catching errors or handling incoming messages. That way you separate the functionality specific to the logic/
  19. I also imagine people in favor of this model would be happy to mistake liking a piece of software vs liking a style of sw. For example for a long time my group has used yEd for diagramming things. yEd is fine, but its kind of irritating to use and last year I found a similar tool online (https://www.draw.io/) which is significantly better in terms of usability and a little bit better in terms of features. But I'd really love it if I could just download it and use it offline.
  20. Now I'm sad I didn't see this earlier. As soon as I read your first post my immediate thought was...McAfee? Fun story: on some of the domain computers here at NI (can't figure out which ones or what is different), the labview help will take about 1-2 minutes to load any time you click on detailed help because McAfee is...McAfeeing. You go into task manager and kill mcshield (which is railing the CPU) and it works in an instant. Its truly amazing. And...yes, you can add exceptions. McAfee doesn't seem interested in making it easy, but it is possible. Renaming to labview.exe is a pretty
  21. This is what you want: http://zone.ni.com/reference/en-XX/help/371361K-01/lvhowto/ws_static_content/ But I'd start here if you've never used lv web services before: http://zone.ni.com/reference/en-XX/help/371361K-01/lvhowto/build_web_service/
  22. There is a function called get lv class default value by name which you might be able to use. It requires that the class is already in memory, but if you follow a standard naming convention "DeviceA.lvclass", "DeviceB.lvclass" your user can just type in "A" or "B", you can format that into your class name, and then use that function to grab the right class. We've also done something more general for our configuration editor framework here: https://github.com/NISystemsEngineering/CEF/tree/master/Trunk/Configuration%20Framework/class%20discovery%20singleton Basically it lets you add a searc
  23. I don't personally know of anyone in my group using IRIG with the timekeeper but it might help to better explain what it does. The timekeeper gives the FPGA a sense of time through a background sync process and a global variable which defines system time. It doesn't know anything about time itself -- its simply trying to keep up with what you, as the user of the API, say is happening. To give you an example with GPS, the module provides a single pulse per second and then the current timestamp at that time. You're responsible for feeding that time to the timekeeper and the timekeeper is respons
  24. I think git the command line is pretty unusable but I've found sourcetree to be the correct subset of functionality to do everything that I want. I don't particularly care for the lets-fork-everything style, so we basically use git as a non-distributed system. The easy renaming of files, lack of locks, and the ability to instantly create a local repository are all excellent. And, as the article said, a lot of people use git because of github. Thats fine too. All told I find it to be just a lot simpler to work with than perforce or tfs (I haven't used TSVN in ages).
  25. For a fixed number you could use a feedback node with delay=200. For an unknown number you can use any number of memory blocks, either an array, an actual block of memory, or a FIFO. These all have advantages and disadvantages depending on how much space you have and if you need to have access to the data except to do an average. However the basic concept is exactly the same as what is shown in that other thread.
  • Create New...

Important Information

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