Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Posts posted by jdunham

  1. Thanks for the link! I see in its code that it just attempts to open clones 1 to N where N defaults to 100. That seems like a real hole in the VI Server API, not to have a method to find all active processes.

    OK, I just read the whole thread, looks like there is awareness of the issue. Too bad there's no solution yet. Thanks again ShaunR for the pointer.

  2. Why do you need their paths? The open VI reference accepts the VI name (if it is in memory).

    Oh yeah, I was converting the name string to a path, since it seemed to want that, but I forgot that it accepts strings Thanks!

    So the App.AllVIs property doesn't include clones in the list, so I still haven't solved my actual problem of enumerating all the clones currently running as top-level VIs in my current app instance. Is that doable?

  3. The App.AllVIs property gives a list of VIs in memory. I want to open VI references to all of them, but I need their paths. Is there a way to go from lib:vi name to path to its reference?

    Actually what I want is to find all Vis executing at top level, including clones. Is there another way to get that?

  4. Yep, the Instance close? filter event is the right one.

    If you don't close withing N seconds, the user will be shown a 'This app is not responding, end now?' function.

    What was the reason you didn't directly looked for this event?

    I knew about the event, but I wasn't sure it would process Windows messages generated from outside of LabVIEW. I ended up building a test anyway to make sure that it still worked as claimed when running as a service.

    But since I Googled something like "labview application close external event", and got very little useful information (and nothing dated later than 2008), I figured a Lava post was in order, and it was certainly helpful.

  5. > It seems like a site has no authority to assert that

    > donated code is public domain or any other license,

    It does if you agree to the site's terms of use when you created your account, which you do with NI.com.

    Right, I think I said as much, albeit a lot less clearly.

    The real issue is that ni.com can't really prevent you from posting infringing code. It would be a violation and I'm sure they would take it down if duly notified by the copyright owner, but in the meantime if someone else downloaded the offending code and reused it, they could still be liable to the copyright holder.

  6. Well I'm not a lawyer.

    It seems like a site has no authority to assert that donated code is public domain or any other license, unless the copyright holder (almost always the original author or in some cases her employer) has explicitly assigned the copyright to the site. It certainly could not do that retroactively, but it could make terms of use for the site which include some stipulation about the licensing of posted code. I think most sites are unwilling to do that since it's much harder legally than just saying "we have no control over what you choose to post, but copyright violations are forbidden to be posted".

    Another consideration is that the USA has the "Fair Use" doctrine, which is legally vague, but which could be used to defend against using copyrighted work which was posted with the intent of it being reused.

    Another consideration of copyright law is that the penalty for infringement is related to the economic damages, and I think it would be difficult for the copyright holder to claim damages if the code were posted by the author on a public web site.

    • Like 1
  7. Is there any easy way to add a new method VI to an existing hierarchy of inherited classes? Right now I make the VI in the base class, and then save as... to make a copy in each child class, and then I have to change the input and output class terminals, add it to the correct class, and re-import the icon glyph.

    I guess that's not too bad, but it is pretty tedious.

  8. I've never seen a use of Notifiers where you couldn't have done it with a Queue.

    If you have 100 listeners, you would need 100 queues to send the same message to all of them simultaneously. It's much easier with a single notifier. Our software detects events which must be handled by a variety of subsystems all able to run in parallel, and a notifier makes short work of it.

  9. The basic difference of course is that a Notifier is a broadcast mechanism. If you have ten threads waiting on (listening to) the queue, and enqueue an item, then only one will stop waiting. I think it will be the one that started waiting first but I don't know whether that is guaranteed.

    If you have ten or ten thousand threads waiting on a notifier, they will all stop waiting and take the update.

    With a single element queue, you can't put any more into the queue until the first item is taken out, but with a notifier, you can put as many in as you want, and if the receiving thread or threads don't finish looping in time, they can miss notifications. There is no way for the sender to know if any or all of the recipients have received a particular notification.

    • Like 2
  10. I am not a lawyer either, but one essential protection is that any software you release should be marked "AS-IS" and that there is no warranty on operation or on "fitness for purpose" and you want to make sure you assume no liability consequential damages. You should have a clause that basically says "we don't accept liability for anything, but in any case, our liability is also limited to the price of the software. Of course all of that stuff is fodder for the courts no matter what you say in your contracts and licenses, but if that's on your software and on your terms and conditions, then you'd hope that was some protection.

    If you search those terms and the agreements of other software products you own, you should find some acceptable boilerplate language. My understanding is also that when you see stuff in capital letters, you have to keep it that way, probably because some court somewhere decided those clauses weren't obvious enough and somebody lost a case about it. There are other important clauses that seem irrelevant, like severability, so don't cut anything out without using a lawyer, which you should do anyway.

    The importance of those clauses is that you have to make it the customer's responsibility, such that when they accept the software and make the payment, that means they are satisfied with the software's functionality and fitness for purpose. If the machine ends up not working or hurting somebody it should have been agreed upon upfront that this was their responsibility to spec the project to consider all the safety-related requirements and to test that those worked after taking delivery and before deployment.

    Of course there is always room for disagreement and lawsuits so insurance is a good idea, but I've done projects without any. I don't think this ends up in court too much at the typical labview scale, because the customers (i.e. a factory) have plenty of insurance. Their insurance carrier is probably not going to bother coming after you even if the defect can be tied to your work. The aforementioned examples of Toyota or Microsoft are consumer applications, and the class-action lawsuit is its own beast, but you're not likely to run into that until you have millions of customers.

  11. Dammit... I spoke to soon - the build spec does get updated in the Pre-Build VI, but it only comes into affect on the NEXT build (so when I was testing it seemed to be working, as I was running it all over and over again ;) )

    I bet if I made a stand alone builder (like yours) it would all work, but trying to hook into the regular build action seems to be a failure (in this case)

    ...If only there were a way to get the ref to the running build spec...

    Yes the building build spec runs in a different application instance. Maybe you can get your prebuild action to spit out a ref to its own application.

  12. Hello Everyone,

    I am working on a project which will allow me to capture images of license plate numbers of vehicles and log them. Right now I can do OCR and ROI on a sample image which I captured and saved on my computer using the OCR example express VI in LabVIEW. But that is not enough, I want to be able to acquire images automatically using my camera and the ROI selected automatically. I just ordered the following hardware (though I am yet to receive them, and they cost me a fortune) and I wondering what I will do with them when they finally arrive. Please someone come to my rescue!

    1. NI CVS-1456 Compact Vision System

    2. NI Vision, I/O Terminal Block and Prototyping

    3. Camera, Basler SCA1600-14FM, IEEE-1394B, 1628X1236, 14 FPS, Monochrome

    4. Cable, CVS to Basler A601 trigger cable

    5. Lens,35MM,Compact Fixed Focal Length, Edmund Optics

    Sounds like a good setup. First you will want to hook up the camera and acquire the images automatically using the NI Vision Examples. If you are having trouble, NI tech support should be able to get you to that point. How do you plan to select the ROI automatically. That seems like the difficult part, but I'm sure it's possible.

    • Like 1
  13. Take a look at the attached code it places a free label in the BD in the bottom left corner out of the way of all objects. You could easily modify it for the FP.

    Thanks Kurt, this helped me out today


  14. I am just finished 1 month trial, but not enough time to continue to learn labview because the trial is expired.

    I need one more month to finish learning. How can i get another month for trial out ?

    You should contact your local NI sales rep. His or her job is to help you get into LabVIEW.

    Or you could buy a new computer to get a new eval (or maybe install a virtual machine within your OS, that might work too).


  15. I see permissions on the test PC as two things: access to the features of the test program and access to the operating system. The test program has permissions including calibration, maintenance (manual) operations, test execution, and test and limit editing. The operating system has permissions to access files and directory, programs, and system and user configurations. I believe IT should and must be involved with the operating system permissions, but is (at most) optionally involved in the test program permissions.

    I think I agree that those should be separate, but you should leverage the OS infrastructure to implement the test program permissions.

    If you use your own password system, it's totally insecure. The OS people put tons of work into a secure infrastructure for authentication, and you can't really hope to compete with that. Once two people need to know the same password, they are going to write it down, usually on a post-it affixed to the monitor, or if they want extra security, they will tape it to the back of the monitor!

    It's much better to use per-person authentication and the assignment of roles, rather than just having an "admin" password. If some person is fired, their access to your test system will cease as soon as IT shuts off their login. If IT is too slow to change users' test program roles when needed, they can give local supervisors a limited admin role on those folders and control the access, but it's still all done on the OS side. All of this comes for free and all the developer needs to do is set up the roles.

  • Create New...

Important Information

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