-
Posts
4,914 -
Joined
-
Days Won
301
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by ShaunR
-
This is the "clean" version of my contribution to this thread.
-
How many data copies should a graph make?
ShaunR replied to Cat's topic in Development Environment (IDE)
We had a similar problem with large images. Our solution was to view at different resolutions (i.e decimate) and load from disk only the sections of the image the user could see as he zoomed in rather than try to keep the whole image in memory. So in the whole picture we had reduced resolution but as he/she zoomed in it would reload at finer and finer granularity. You could do the same thing with a graph after all, when viewing the whole timeseries of lets say 1 week, can a user really visually resolve 1us? As he changes his axis, you could reload that section of data and at some point (where you decide) you no longer decimate but load raw data. -
Find a valley in continuous DAQ data
ShaunR replied to george seifert's topic in Application Design & Architecture
If you can define the trough as a rising, falling edge or it drops below a certain level, you can get the analogue card to trigger aquisition. Take a look at Acq&Graph Voltage-Int Clk-Analog Start w Hyst.vi in the examples and see if it will suffice. -
How many data copies should a graph make?
ShaunR replied to Cat's topic in Development Environment (IDE)
I you go to the Tools>>Profile>>Show Bufffer Allocations. It should indicate where theallocations are. -
References Opened in VIs called with "Run VI" method
ShaunR replied to ssv's topic in Application Design & Architecture
Indeed. In fact you can have the best of both worlds (an "Inteliigent Global Daemon" if you like). If you make the Intelligent Global/Action Engine re-entrant and "share clone instances". You can have a boolean control that causes it either to continue running or exit immediately but it only has one dataspace. It means the first time you call it you set it false (runs as a daemon cos its connected to the conditional terminal) and you can still call it in other areas with the boolean set to "True" to retrieve/set the data. Used sparingly its very useful. Hmmm. That sort of solves the OPs problem really. -
References Opened in VIs called with "Run VI" method
ShaunR replied to ssv's topic in Application Design & Architecture
I think we are both arguing the same point As I said. The self configuring vi (and yes I can do the above in both DAQ and IMAQ as well as VISA) keeps the refs LOCAL to the vi. If it (the one that was launched) goes idle then yes the refs disappear and I wouldn't have it any other way. However, if the launching vi goes idle then the vi remains running unless the AutoDispose was set to false (as in the OPs case) in which case it no longer remains running and halts when the calling vi exists and bang goes your refs. If there were such a thing it would be a "Daemon" design pattern. For the OPs case, this self configuring daemon seems a bit awkward since he has no way to access the refs because he can't call it as a sub vi. That can easily be overcome with a global (oooh dare I say it ) or simply reading the ref control with a property node. However the general intent is NOT to make the refs global but encapsulate complexity to make an autonomous, fire-and-forget sub system. -
References Opened in VIs called with "Run VI" method
ShaunR replied to ssv's topic in Application Design & Architecture
Not if you set autodispose to true when you load the vi dynaimically.. Then the launched vi is responsible for closing its own refnum so the IMAQ refs remain until you close the launched vi. Perhaps I should have started with the IMAQ example instead of the VISA. I only chose visa because it was the first pallet item I came accross (visa autidispose is the first thing I set when installing LV by the way). As I pointed out, this technique keeps the ref local to the vi. If you want to access it outside the vi then you have to transfer it using a queue or global. If you need to do this then its not for you and the normal functional global is more appropriate. -
References Opened in VIs called with "Run VI" method
ShaunR replied to ssv's topic in Application Design & Architecture
Really? So I can't do this then -
References Opened in VIs called with "Run VI" method
ShaunR replied to ssv's topic in Application Design & Architecture
Ahh. IC. Been a long weekend I use self initialising vis for exactly this (usually, VISA and IMAQ). Not a million miles away from a functional global, but it keeps the reference local to the vi using it and is released when the vi is closed. something like this.... -
References Opened in VIs called with "Run VI" method
ShaunR replied to ssv's topic in Application Design & Architecture
Set autodispose ref to true and don't close the ref in the calling vi. http://zone.ni.com/reference/en-XX/help/371361E-01/lvprop/vi_run_vi/ -
Aha. Sounds like you've reached the PCI bandwidth limitation, which is about 133MB/s max and about 110MB/s sustained. Not a lot you can do about that except change the motherboard for one that supports PCIe. PCI = 133MB/s Max. PCIe x1= 250MB/s Max. PCIe x4 = 1GB/s Max. PCIe x8 = 2GB/s Max. PCIe x16 = 4GB/s Max.
-
I'm a bit ambivelent about this article. I thought a "duct-tape programmer" was basically an un methodical script kiddy type. But he describes any programmer that applies KISS. After all if you have 2 weeks to write some code that puts a "widget" in a "doodah", why spend 2 weeks writing code to interface to other code (that you have still to write) that puts a "widget" in a "doodah". That seems to be the gist of the article rather than lauding seat-of-yer pants programming. From experience. there are (simplistcly) 4 phases to software projects. Design, Implemention, Fire-fighting and Delivery. KISS programmers do a lot less of the fire-fighting because they have less to go wrong.
-
Most modern adapters allow teaming with multiple ports (so you could team your servers adapters) http://www.intel.com...b/cs-009747.htm The old way used to be (under windows) creating bridged connections. Well, I say old way, you still can, but its more CPU intensive than allowing the adapters to handle the throuput. There is an overhead involved, but it is simple to implement and scalable. Sounds to me like you want 10GbE
-
Can I synch up a continuous DMM measurement with a DAQ measurement?
ShaunR replied to george seifert's topic in Hardware
You need to use the RTSI. http://zone.ni.com/devzone/cda/tut/p/id/4761 -
Post your DLL and source/test code so we can see first hand.
-
The other way of course is to have one file for each language and your software just switches between files. This makes life a lot easier for the translators, but means you have to coordinate updates to multiple files.
-
Copyright Registration for LabVIEW written application
ShaunR replied to Irene_he's topic in LAVA Lounge
I think they are just being pedantic. The purpose of registration is purely to have evidence (its irrelevent what the evidence is, be it human readable or not) that can be attributed to a date so that you can prove that you thought of it first. Its not like a patent (whole different ball game) whereby a search must be made and you need to prove it is unique and has not been thought of before. The Copyright Office is merely a "vault" where you can register evidence of your copyrightable material. The evidence will only be applicable once you (as in the copyright holder) take someone to court for infringement. Then you can use whatever tools you like (including Labview) to prove you are the original author. -
Copyright Registration for LabVIEW written application
ShaunR replied to Irene_he's topic in LAVA Lounge
Copyright is an automatic right of the author unless some other contractual obligation takes precendent. It is usually sufficient to add a copyright notices to your software. The issue is only really applicable if infringement takes place and registration with a copyright office is basically registering with an authorised, third party witnessing service that can verify the date and contents of the of copyrighted material to add ammunition to your defence. However. It is a powerful defence. The copyright office in the UK allows online-uploading of copyright material (for a fee) and there is no requirement for the uploaded contents since it is irrelevent. They even have a "Registration Update Service" so that you can upload "in development" work as and when it changes. If you are having issues with beaurocracy in your home country I would suggest using them. UK Copyright Services -
You'll probably want these. UFT16.zip
-
I prefer dlls myself, but for a single instruction it might be worth looking at CINs rather than converting a whole piece of LV code to C. Especially if you already have the code. Theres a very good tutorial HERE
-
We use some vis that enable dynamically changing between certain languages like english, French, German etc. I canot share the code because they are owned by the company but (as I wrote them) I can tell you how they work. There may be others who are not restricted to share. The key is really not to "hard-code" strrings into the diagrams and takes a little bit more thought but is fairly easy to do. don't talk to me about Japanese or Chinese however...lol. They take advantage of labels and captions for controls and indicators. The Label is used as the "tag" and the Caption is what is displayed to the user. Display strings are a bit more complicated, but not much. A create language file vi is used to iterate through all labels in the app and save them to a" bar" separated spreadsheet file. We use the bar "|" symbol because it then allows the use of commas, semicolons etc in the text. This file is then sent off to the translators and they add the words (or phrases) for the other languages on the same line for each language (first column English, second French, third German....etc). A change language file vi is used to load the file and iterate through all the labels changing the captions to the specific language. You have to check the control type as for things like boolean indicators, its not the caption the user sees. Job done for controls and indicators. This can be invoked at any time and the current language is saved to a config file so that the software starts up in the last used language. Display strings in the code are always preceded with a get language file vi that takes a string as an arguement (the tag as described above) and outputs the corresponding word/phrase in whatever language is chosen to be active. I've been meaning to get around to including a digram search for these tags so they can automagically be added with the create language file vi, but I've more important fish to fry. Thats basically it. It shouldn't take you very long to write something yourself, or I suspect others on this forum have similar tools that they can share.
-
The force wasn't strong with this one! He should have used the Jedi mind trick. " This isn't the droid you are looking for....move along"
-
Its unlikely to be a memory issue unless you are using so much the OS has to swap to disk. It is more likely a higher priority process or hardware latency is getting in the way. Disk saving is the usual cause. Next time watch the LED hard-drive indicator when you see the time jump. What is the camera interface? If you are using GigE,another cause can be packet collisions causing the camera to re-send. This will also appear as a latency causing your loop time to jump.
-
Some people have no sense of humo(u)r. I hope my behavio(u)r hasn't caused our English speaking neighbo(u)rs to harbo(u)r a grudge. Lets not let the spect®e® of conceit compromi(s)(z)e integrity and (e)(i)nsure we all get with the program(me) of coexistance and co(s)(z)iness.