Jump to content

JimboH

Members
  • Content Count

    16
  • Joined

  • Last visited

Community Reputation

0

About JimboH

  • Rank
    Active
  1. Thanks all for the feedback. I haven't changed the default buffer size yet so I'll give that a try: http://digital.ni.com/public.nsf/allkb/D5AC7E8AE545322D8625730100604F2D I'm also doing minimal processing (read a couple of bytes and conditionally throw onto a queue) in addition to the packet splitting, so I hadn't split it up yet into separate read and split loops but I'll try that next. After some brief web searching it wasn't immediately obvious if there was some system way to detect buffer overflow. I'll probably just do some testing and convince myself that at high rates exceeding my typical usage the system seems stable. The partial packets may be indicative of a buffer overflow. I'm going to work on getting the system to be more reliable then see if the problem still exists.
  2. Way to read the documenation! Thanks. I'm not sure how to improve the reading I have. I've tried two options: 1) Processing an entire "read" and concatenating a partial packet (if it exists) to the next read 2) Implementing a circular buffer. The first was a lot simpler but performance was not great. The second was much more difficult and I didn't see much performance gain (if any). I think it is likely due to memory copying that isn't immediately clear to me. Ideally I would only have one fixed space in memory that I am ever working with for all packets, in addition to the memory generated for each packet that I pull out of the buffer. I was sort of hoping this was a solved problem with a accepted way of handling it. Finally, any ideas why I am not getting buffer overflow errors? Does Labview report this?
  3. I am not. There is no error input to the first udp read. The second udp read has an input but I clear the error if it is 113. However, I never get to the second udp read because the first udp read is always empty and I have a case structure around the second one in which it doesn't run if the first one returns no data.
  4. Hi all, Thanks so much for the help. I had some errors in my implemenation (U8 vs I32) and bytes vs quadlets (bytes*4). After fixing them the problem remains. I wasn't sure of the error off hand, but I confirmed it is 113. Unfortunately ignoring it seems not to work as there is simply no data returned. My guess is this is a Labview implementation that if this error occurs it chooses to retain the data for a subsequent read rather than require concatenation. This error occurs on the first read. I thought it might be a startup issue but on subsequent read loops I still get nothing. Thoughts? Thanks again for the help. Jim
  5. Hi all, I had a couple of questions related to reading udp packets in Labview. I am receiving 100 - 200 Mbps of variably sized packets. The first byte in the packet specifies its size in bytes*4. 1) When I perform a read, I have no idea how much data to request, so I set an arbitrary size. It seems in doing this that I am getting multiple packets together and that I subsequently need to parse the data into packets after reading. Doing so seems to slow down the machine a bit and I'm nervous I'm dropping packets (see next point). I also tried reading only 1 byte, then reading X number of bytes based on that 1 byte, but that threw errors (I think it was error 113 about more data being available than I read). 2) How do I tell if I am overflowing the socket buffer? I am getting weird behavior that seems to indicate dropped packets occasionally but no error is coming out of the udp read function. Thanks, Jim
  6. I'd also be interested in any coding standards that people want to share. Some thoughts that I don't believe have been covered: - using required inputs on subvis where appropriate instead of leaving as recommended - use of typedef controls - removing the default from a case structure
  7. JimboH

    SendKey.llb

    Thanks. I figured it out.
  8. JimboH

    SendKey.llb

    Thanks for the reply. I have those vis as well. As perhaps the first comment on that page indicates, what I am looking for is lacking in that set of libraries. I was really hoping someone might have the files in their local collection ...
  9. JimboH

    SendKey.llb

    I hadn't seen that vi, although there is this one as well http://zone.ni.com/devzone/cda/epd/p/id/3711 Neither vi demonstrates windows selection. I have an API which doesn't expose passing in a particular value to a program. Instead their code does allow a prompt in which you can type the value. To do this you need to first get the handle to the window, which is what that library helped with. I've found a couple of forum posts on the library, but the links are dead.
  10. Hi all, There had been a library floating around for a while called SendKey.llb. Does anyone have a copy of it that I could use in LV 2009? I am trying to get a handle to an open window and send some keys to it. Thanks, Jim
  11. Todd, Thanks for the reply. It seems your suggestion only modifies the library, not the vi on disk. I realize that sometimes that behavior is desirable (library mod only) but is there not an option which does both? Thanks, Jim
  12. I've been using Labview for 6 years now for research and one of the most confusing things for me is how code is supposed to be managed. I have been using Tortoise SVN with folder organization but with things getting more complicated I am starting to wonder what the "right" way of doings things is. I've looked through a variety of posts and official documentation and haven't found what I am looking for (or haven't realized it was what I needed). I'm using LV2009 32 bit, JKI TotoiseSVN Tool 2.2.0.186 (demo), Tortoise SVN 1.7.6, Win 7 x64, and have little interest in actual code deployment. Features I am looking for: - avoiding cross linking problems - prompts to save a vi only when it has been changed - svn integration - code that works with multiple developers instead of corrupted files (mainly thinking about project files) My code base consists of project or modules (not lvproj) just a set of code in a directory & subdirectories. When I am running a program, many of these modules will run together and collect data, with a messaging system in between where necessary. In addition I have generic code libraries (not lvlib), with generic functions (math, string, table, server, etc). It seems like my code libraries should be lvlib files. After some reading it seems like Project Libraries can be used for preventing namespace collisions. On a side note the term Labview Project Libraries is very confusing because I think of Labview Project Explorer which I have no gathered does nothing for changing the namespace. I did happen to find this link, which helped get me started but I'm still not understanding some things. As a general rule I pretty much want library membership to always apply to files that are in my libraries directory, which doesn't seem possible. Question 1: How do I delete a library file via SVN and remove it from the project. I am using the JKI TSVN toolbox and removal of the file doesn't seem to effect removal from the library. Question 2: If I create a vi and later decide to move it into the library, how do I accomplish this in Labview with SVN tracking. For example, if I create a vi in one of my modules and realize that it is fairly generic and would be better in a library, how do I move it to the library (ideally on disk and into the library file) so that both Labview and SVN are happy. Another situation might be moving a file from one module to another module, ideally I could move both library association and disk location. Question 3: If I am running multiple modules, how do I ensure that they have no namespace collisions? Should these be libraries as well? Do I only need a project if I want to deploy my code? Question 4: When someone creates a vi outside of the library but in the library directory how can this be detected and fixed? Question 5: Is there any way to get better svn integration into the lvlib and lbproj right click menu? My current approach would be to do this through the tools menu (tools -> TortoiseSVN -> rename). Side note, this doesn't doesn't currently work on my computer although the actual TortoiseSVN through Windows Explorer works just fine. Question 6: My files are constantly prompting for saving. It seems like most of these are changes from other files and not the file I changed. Since I don't know really know how this works I am not sure what exactly is going on. The end result though is that I want to minimize version changes (as tracked through SVN). I seem to remember reading somewhere that in LV2010 you can separate source code and compiled code. Thoughts? Would this be fixed by better lvlib and lvproj usage or is something else going on? Thanks, Jim
  13. I am using the acrobat reader activeX server in an activeX container and upon quitting the vi the activeX container does not return to design mode. Since the activeX container is still running it still handles things like right click events, not allowing me to switch to design mode. I am using Labview 8.2. Is there another way to force the activeX container to design mode? Thanks. Oops. I just realized that if I select design mode before running the vi, the container would return to design mode afterwards.
  14. I've noticed that tables, at least in 8.2, allow "unlimited" scrolling with the mouse scroll wheel, and keep scrolling down to new areas of the table. I've noticed that listboxes don't have this "feature" and I'm considering switching over to using them. Before I do I was wondering if it is possible to disable this feature, so that I can still scroll with the mouse wheel (or perhaps not, but still scroll with the mouse), but limit the scrollbar so that it doesn't scroll into areas bigger than the content of the table itself.
  15. I understand the double precision comparison problem and thank you for the suggestion, I was just curious if that was exposed at all in the menu ring as it would seem that Labview might consider double precision comparison a problem and have something built in to compensate. Otherwise the suggested solution seems to be that I need to iterate through all of the values in the menu ring, find the one that is closest, and then set the menu ring to be that close value of the menu ring that nearly matches my input.
×
×
  • Create New...

Important Information

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