Jump to content

PA-Paul

Members
  • Posts

    139
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by PA-Paul

  1. Hi crelf, Any chance of a quick screenshot of how to do that? Thanks PAul
  2. Hi all, Quick (hopefully!) question. I have a "top level application" which will be built into an exe and I want to be able to call small "utilities" from within it. The utilities should be able to remain open without preventing the top level app from accepting user input. The utilities should be separate and modular, but they need to be able to send instructions back to the top level app. They may also need to take some information from the top level app at the point they are called. My main app has a queue structure, so as long as the utilities can access the queue sending instructions is fine. What I've done for the moment is to build the "utility" into an llb, and then load the top level vi dynamically. I used the "call by reference" function to open the VI and that all works, except that it blocks - i.e. it wont return control to the top level app until the utility is closed. I used the call by reference so I could wire in an input to the utility - so I can't use the "run" invoke method and tell it not to block... Is there any way to use the call by reference function without it blocking? this is all in LV 8.6 by the way... Cheers Paul
  3. Now that's odd.... The "mouse down" event will fire if I click anywhere on the menu ring. The "mouse up" event only fires if I click on the increment part of the menu ring - not the main text bit. I thought the "mouse up" was fired when you released the mouse button over the control (similar to the way a boolean control can be set to switch on release rather than click)? So why doesn't it work on the menu ring? Cheers Paul
  4. Thanks for the replies, I found the "mouse up" event not working quite an interesting one - how come it doesn't register the event if you mouse up on the menu itself? Only on the increment? I like the refresh idea, and Tim_S - my "<Select>" item does pretty much what your null does too... Thanks again! Paul
  5. Hi All, I have a bit of code (LV 8.6) which populates a menu ring based on the contents of a directory. I want the user to be able to select from the menu and in doing so trigger an event (within an event structure). So, I set up a "value change" event on the menu ring and basically it works. However, sometimes there may only be one item in the menu ring, in this case, clicking it doesn't change the value and hence doesn't trigger the event. I tried adding a "mouse up" event to the structure, but that is only fired if the user clicks on the increment/decrement button part of the menu ring, not if they click on the text itself. The only way around this that I've found is to add a "<Select>" item to the menu ring and make sure this is the default value. Then the user has to select something and thus change the value. Is there a better way to do this? Thanks
  6. Hi Guys, Thanks for the replies. So it looks like if I move to a controller with an "RSXXX" the only way I'll be able to improve latency is to find something running at a higher baud rate (the parker ViX controllers are limited to 19.2 kBaud). Otherwise, I may be better off running something with ethernet communications or a direct USB... Thanks again
  7. Hi All, One of the projects I'm working on is a multiaxis positioning system (typically 3 or 4 axes of stepper motors). At present we're using one Parker ViX stepper drive/controller per axis. One of the drives is connected to the PC via an RS232 (with a usb-rs232 adapter in line) and the other drives then daisy chain off that. For our application, we basically do point to point positioning, with some data acquisition in between (step and measure essentially). All movement is controlled on a PC with software written in labview (so we send move commands etc over the RS232 interface from VISA within LabVIEW). We're currently looking at possibly changing the motor controllers and one of the motivations is the latency we see when sending commands to the drives over the RS232 interface (currently configured to the ViX max data rate of 19200). Setting up a move and issuing the move command currently takes us about 100-150 ms... which is either a lot or not much depending on how you look at it! But I'd like to reduce it if at all possible! There are various other stepper controllers out there which all work on different comms interfaces, but no one seems to specify the communication latency of the various interfaces. Can anyone give me a rough idea of the relative expected performance of the following interfaces: RS232, RS485, RS422, Ethernet, USB (a direct USB rather than one of the others with a USB converter). I realise it may well depend on implementation as well, but any sort of rough idea would be better than what I have right now! Thanks! Paul
  8. Hi all, Thanks for the suggestions. Ended up getting everything working, luckily I'm at a conference and the company responsible for the software that's using the agilent were here. They confirmed that they're software should work with the NI VISA system alone installed (they simply require a visa installation of some kind). We tried removing the agilent visa, but still had no luck talking to the scope. Then we downloaded a full version of the latest NI VISA from the ni website, installing that fixed the problem with no faffing around in settings. I wonder if the issue stemmed from the fact I was running an installer created in labview which only installed a VISA runtime environment rather than a full VISA install... Also the version of VISA which was being installed by my installer was only 4.4 not the latest 5. Anyway, all working now! Thanks Paul
  9. Nothing is using GPIB in the setup (at least not outwardly). The Agilent scope (used by the other companys software) is a direct UBS connection (there's no sign of USB-GPIB unless its internal to the scope). Secondly, since I have only installed a runtime envirnment on the computer, I don't seem to have the options you mention within Max... any other thoughts? Thanks Paul
  10. Hi All, I have a small problem. A customer is running a system which does various things including acquire data from an agilent oscilloscope connected via Agilents USB interface (USB in the scope).The system and software were developed by another company, but the gist is, the software uses the Agilent IO library to connect to the scope, and that includes Agilent VISA. I now want to install and run a labview based program which controls a completely independent (at least in terms of control) device on the same PC. My system (written in LV8.6 and run from exe after installation with NI created installer) requires VISA to communicate (via a USB-RS232 adaptor - within labview I simply address the COM port which is installed by the adaptor). I ran my installer and my device worked fine, but the Agilent Scope then failed to communicate (Error message said : Unable to communicate with device USBInstrument1 on VISA (or words to that effect). The only way I managed to get the scope to work again was to re-install the agilent IO library. But then of course, my system no longer worked (Error 0xBFFF0012 Invalid resource reference specified. Parsing error). Initially, I could only get one version of VISA to install at a time, but I did finally mange to install the Agilent as the secondary VISA, but I still had the same problem with the Agilent scope not talking. Does anyone know of a fix for this kind of problem? I'm not trying to use labview to control the scope, only my other device, but I can't seem to get both things working at once! Any help very gratefully recieved. Paul
  11. Thanks for that, I checked the licence manager and it said the license for 8.6.1 professional with mathscript was out of date... I updated it and it works fine now! Thanks again
  12. More excitement and problems - I have the full dev suite of labview 8.6.1, but I can't find mathscript nodes... I tried to place one from the labview help, but it says "object not found"... where do I install this from?! Thanks
  13. JesseA, Thanks for the response, that does sound like it may be useful (the contours thing - and having this functionality direct in palettes!). One quick question, just to be sure, I just need to create my own subvi with a mathscript node in it with the necessary mathscript functions and then when I build an exe,it'll all work by magic? Do I need to include any additional installers for distributing the code if I've used mathscript nodes? Thanks again for your help. Paul
  14. Ben - You're absolutely right, but the cursors always appear in "3D" and "latch on" to the positions the points would be in in 3D if it weren't for the fact that only the projection is showing. Also, it's much harder to customise the 3D graph - I find the axis labels look clunky, and I cant seem to get a decent "tight fit" for the projection on the map... a 2D graph (like the matlab "contour" plot would be the ideal solution for what we're trying to achieve... Is there any (built in) way to calculate the points of the contour lines and then plot them in an XY graph? i.e. each contour line would be an individual plot within the XY graph? so I feed my 2D data array into a magic function which calculates the path of each desired contour (i.e.-3dB, -6dB etc) and then I plug those into an XY graph... Any more thoughts gratefully recieved! Thanks Paul
  15. Hi All, We're using labview to control a measurement system which comprises several moving axes, a source and a detector. We have a whole suite of software written now in labview for control and acquisition with the system and (separately) for post processing acquired data. One of the functions of the measurement system is to acquire 2D data "maps" and then process the data and display it to the user. For the type of measurement we're doing a dB contour plot of the data is extremely useful. At the moment, we have manage to achieve this using the 3D plots in labview (8.6). But we want to be able to make cursor measurements on the plots as well, which is where things get tricky - although we can make the 3D plot simulate a flat, 2D contour plot, the cursors within the 3D plot are always in 3D... so it's not at all obvious where on the flat projection of the contour plot the cursor is actually placed. The ideal solution would be to have a genuine 2D plot with the contour lines on it (as opposed to using the 3D activex graphy thing), but I can't see anywhere within labview how to do this... I can get nice looking intensity plots of the data, but I want contour lines (with user selectable dB interval). Is there any easy (i.e. pre-existing) labview code that will let me do this? I can't imagine that I'm the only one who's interested in doing this with data acquired in labview.... Running inside the labview IDE I can use the MatScript node and the matlab "contour" function, but this app requires building into an exe and running under the labview runtime engine (which apparently you can't do with matscript functions...) Anyone know any good solutions for doing this? Any suggestions welcome (I'd probably even pay for an add on if one existed... well, maybe...) Cheers Paul
  16. Thanks for all the info. I do have LV2010 still sitting in its wrapper on my desk... unfortunately, this project needs to stay LV 8.6 compatible for a while... customers eh? Who needs them?!
  17. Never mind - got it. I had to set the port number within the project file (A). Thanks again!
  18. Hi Antoine, Thanks for the reply. I'm still trying to get my head round it all. I've done lots of labviewing -although not perhaps by people here's standards - but never really got into using VI server like this! I ran your example fine using the exes, but when I ran it directly from the VIs in projects, I get an error when I try to run "B"... I get error 63 - serial buffer overflow. Any idea why?
  19. Hi All, I have an application which I've written to control a measurement system, the main app is based on a kind of queue driven state machine. This application is typically built into an exe before use and then run from that. I now want to write a second application that can programmatically fire off some of the operations (states) within the first app. So, my question is, is it possible to do this using standard queues? Simply put, I have a Queue (sink) in App 1, and I want to write things into that queue from App 2. (note, this is not VI 1 to VI 2, this is separate apps...). Thanks in advance for any help! Paul
  20. Hi Ned, Yeah, I did see that, but to do that I'd have to go through the manufacturers entire set of wrapper VIs and change each one, adding a path to the right dll file... I was wondering if there was any way to tell the labview runtime engine where to look for dll files... (it seems strange to me that when run in a dev system environment, labview looks at the path specified in the "Call library node", but when in an executable runtime environment, it looks in the root directory of the application). Might it be something to do with search paths? Anyone got any other suggestions? Cheers Paul
  21. Hi All, We've developed a system control application using a plugin architecture to make the main app "device independent". So far everything is working well, I write device driver VIs for the specific hardware, and then compile them into an llb file which is then called dynamically (by reference to the top level vi in the llb) as needed by the main application. My problem is this: One of the devices I'm using is controlled in labview using calls to a manufacturer supplied dll file. The manufacturer has also written a bunch of "wrapper" type VIs for using said dll file. Within these wrappers, the "call library function nodes" are set up internally with a path to the dll file to use. When I write my driver VI and then build it into an llb (using openG builder to remove the front panel and block diagrams), the wrapper VIs appear to still be looking for the dll in the original directory (which is within the instr.lib directory). However, when I then dynamically call my driver VI from within the main application (which is being run as an exe) unless the dll is within the root directory of the application, I get an error (stating that the top level vi isn't executable). What I want to do ideally is specify the (relative?) path to the dll when I build the llb file so that I can place it where I want within my application directory (eg ../App_root/Device plugins/Support/XXXX.dll) Does anyone know how I can do this? (Does anyone understand what I'm rambling about?!) Any advice greatly appreciated! Cheers Paul
  22. Hi All, I'm using openG bulder to build some driver plugin llb files. I want to exclude from the llb the any VI listed in a specific lvlib file. If I simply put the lvlib file in the exclusions will this work? I can't see anywhere if openG builder knows what an lvlib file is... cheers! Paul
  23. Hi Ben, Thanks for the response. I got it to work in the end by wiring the cursor name (found from the properties on the fp) to the item... I did try it first by index, but I was 0 based, so maybe that's why it didn't work. Cheers! Paul
  24. Hi all, I've set up a 3D graph in labview 8.6.1 and have added a pair of cursors to it. I'm trying to get those cursor values out programatically. I tried it like this: But I don't see what I should wire to the "Item" input. anyone know how to do this? Cheers Paul
  25. Hi Ton, Thanks for the reply. I actually didn't wire anything in to the "application ref", should I have? If so, what? The plugin VI is set as "public" scope in the lvlib where it was created. I also went through and made sure anything it was calling was also public (just to see if that helped) but it made no difference. The thing that really puzzles me is why it works fine when called from the source code, but not when called from an exe... Also, why do other plugins made in the same way work fine both from the exe and source code?! Any suggestions most welcome! Thanks Paul
×
×
  • Create New...

Important Information

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