Jump to content

Jon Kokott

  • Content Count

  • Joined

  • Last visited

  • Days Won


Posts posted by Jon Kokott

  1. I'm using this library, but I've had to modify alot of the variant related attributes for performance and data handling.  Most of what I have removes the OpenG stuff and directly casts types.  It will also properly preserve data names/typing unlike the current version without extra variant to data casts.

    I don't really want to go through all the data types that I'm not using, but If you're still interested in maintaining this its probably a worthwhile upgrade.

    Get as Variant



    logic will change to look more like this



    surely there will be some difficulties with this approach on certain data types, and I dont really want to go through and test them, but dynamically building variants is pretty slow and some of the functions are quarter baked which removes the type string.

    I've got an assortment of scalars, arrays, and clusters working with this method.

    Let me know if you're interested in this.

  2. The labview webbrowser stuff is pretty crappy.


    Use a .net webBrowser control, navigate, get the document and you can pretty much do what you want using standard .net calls, and really gives you better control over the browser (which is IE version on your machiene)


    At this point you can pretty much google how to get stuff, just look to use visual basic or C# and follow the .net calls putting them in labVIEW.  




    Get Webpage Stuff.vi

  3. If anyone stumbles across this, a better method is to use the windows .net calls.




    its probably the same thing system exec does under the hood, but you get asynchronous control of standard in, out, and err.


    I'm certain the performance of this will crush anything else, and all the software is already on your windows machine.  



    • Like 2
  4. For the only Xnodes I created/actually used, I created a method where you could right click on the Xnode and replace the Xnode with a subVI containing whatever the xnode created.  Its really straightforward to implement, I'll try to dig it up but its been a while and I haven't been maintaining it.

  5. I think its because your terminal on the xnode isn't really a typedef but just an adapted terminal.  Maybe try opening the typedef itself (by using the string of the actual name) and then getting the path.


    So somethign like:


    control -> Value-> Strip out typedef name from variant -> open vi reference (with the string name in same application ref) -> then get path.



  6. It would be easier if you simply posted the code, however, I suspect that the class going into your init function is not the same as the one coming out.  


    Other LVOOP comment, take a look at the Actor Framework.  It comes with labVIEW, and I think will take you to a better place, however, it is probably a difficult place to start off with LVOOP as some of the conceptual aspects of it are more difficult than the code you've presented.

  7. I am trying to connect to a linux mobile device using ssh connection.

    The problem is that this is part of a time sensitive test. using plink has too much overhead. I also have to make a new connection everytime I want to use it.

    The tunnel method does not work as suggested by many. I don't believe a ssh tunnel will encrypt and decrypt data for you.


    labSSH provides vi's for sftp, scp and ssh terminal which are things I tools I would like to have but I would like to know what experiences people have had with it.


    OR better still if there is a solution that is open source.


    Matthew L.


    if you are using plink to create an ssh tunnel, I assure you that it is being encrypted.  in fact the whole idea of ssh tunneling is to perform the encryption/decryption.  I would seriously doubt you'd be able to outperform putty's implementation using a labview based ssh implementation (there are ALOT of hours of development and test in that application.)  If you want to try a different ssh client, openssh on cygwin is a really solid ssh program as well.  (BTW I'm pretty sure that plink is open source, its just putty for the command line.)


    Lastly, if you want to test for encryption, use a program like wireshark and you'll see that all the data is in fact tunneled over the encrypted ssh connection.


    I've done what you're doing with an iphone.  I used an itunnel program to open up a socket on my PC that went over USB instead of the wireless which will greatly reduce latency.  I'm certain there is a simmilar application you could find for linux/andriod.


    also you'll definitely want to use a tunneled connection as you alluded to before.  The authentication exchange does take a finite amount of time, but with a decent network connection and pre-generated keys it should be in the mili second time range.

  8. Un-abortable from VI Server: Start Asynchronous Call Prepare to call and forget 0x80 


    I'm trying to abort call and forget VIs that don't get shutdown properly.


    I'm launching using 0x80 (call and forget)




    Problem is, I can't seem to find them in memory using VI server.




    If I "trick" labview and just start opening a VI by name, and put in the correctly (guessed) clone name


    i.e. dameon.vi:3


    and it just so happens to be the right name I can find it.


    Why isn't it appearing in all VI's in memory?


    Is there any way to find clones of a VI through server?


    Stranger still:


    the name of the VI when i hover over the abort button is something like dameon.vi:Hostdaemon:ProxyCaller.234908238:3


    wtf?  how can I abort call and forget VIs problematically?


    Lastly, I'm aware of Abort.vi which I forget who programmed.  I got it off lavag at some point, see attached.



    Oh yeah, even if I get the right clone name from VI server through my educated guess, I still cant abort it problematically with the abort method.


    Showing the front panel with an invoke node does work however (wtf? why?)


    I can then hit the abort button on the front panel of the daemon, and it does stop.




  9. This becomes syntactically burdensome and impractical. Dynamically-dispatched methods in this Command Pattern cannot readily accept/return unique parameters that are scoped locally to the caller (e.g., one method accepts a Boolean wire from the caller, while another accepts a Numeric wire). Additionally, this statefulness of the caller does not necessarily belong in the object just to circumvent this issue (now you have a LVOOP-style-clustersaurus).


    Case study: try creating two user interfaces requiring request-response communication with Actor Framework (e.g., any sufficiently advanced SubPanel architecture), then examine the sequence diagram (timing diagram) of communication.


    Interesting, I take it you're not drinking the AF coolaide?  The arguement you're making hasn't been my experience, and one of my favorite applications of the AF IS a complicated Subpanel architecture.  If I had to knock the AF it would be more for removing compile time type safety on methods than anything else.  

  10. Hmm,


    It sounds like you want the parent to have a partial abstract.  (that would be C# lingo, where partial means the definition of the implementation of the parent is incomplete, and abstract means it must be overridden; furthermore I've never done this in C# so I'm not even sure if its legal)  You'd can (or cannot) complete the parent implementation to match your (now known) override of the abstract implementation, but once you do that you'll have the same interface for all children of that parent (which is what I think you're trying to avoid)




    In labview, if I wanted to do this, I'd probably use something very similar to the Actor framework where the interface for all methods is itself a class (i.e. the message type)  It basically creates an additional abstraction layer.  You'll be able to mark a method as must override, and use a common interface class for all of them (which you'd then define a specific type for your override class as well.)



  11. This is on a TCP write command.

    I'm getting an error code 62 --


    Error 62 occurred at an unidentified location

    Possible reason(s):

    LabVIEW: Serial port overrun error.


    LabVIEW: The system caused the network connection to be aborted.


    This is interface is not being taxed terribly heavily, maybe 1Kb/s on total of 3 sockets for one Ethernet connection, and 3 other ethernet connections with only 1 active socket (pretty slow on these ones.)

    The bizare thing is that once this occurred, I lost every single socket on the entire computer for about a minute, then the ship righted itself and everything started back up.

    Any notable easy fixes for this problem?


  12. Instead of using the "menu launch information.vi" (which I'm totally unfamiliar with/do not have) try using an application (read) property node -> App.MenuLaunchApp to get the calling application reference. I also use App.MenuLaunchVI to get the name of the VI in memory, but you can only open that vi in memory when wiring the application reference from teh app.menulaunchapp.

    I think that the property node I use is not available by browsing.

    ok here it is


  13. I did this exact thing in Labview 2010.

    It was super annoying because then a popup would occur during the build saying that the vi had been modified (obviously) which occurred like a half hour into the build.

    I cant upload files right now, but all I did was modify a string constant with a new date and save it (using Save.Instrument invoke node.) I was pretty careful about closing all the references, but I doubt that is what your problem is.

  14. For the first question, post your code and someone will be able to help you do what you're trying to achieve.

    Question 2:

    you really cant use a table in an array because you need to get the reference to the array objects (MCLs in this case) and labview doesn't provide you with a way to do that. If you hack a little bit you'll notice that the reference you from the Arrayelement get will just populate all the tables in the array. I'm not gonna say its impossible, but you are not using the control the way the designers intended, and might get some strange behavior.

    you can achieve your table in a 2D array by doing the following:

    make a cluster of a 2D string array and put that cluster in another 2D array.

    It might not look as pretty as you want, but the behavior will be a little simpler. Watchout as this will be a pretty slow FP object to display and arrays of arrays are pretty hard on the memory manager as well.

  • Create New...

Important Information

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