-
Posts
3,872 -
Joined
-
Last visited
-
Days Won
262
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by Rolf Kalbermatter
-
Comments in Configuration Files
Rolf Kalbermatter replied to Cloedu's topic in LabVIEW Feature Suggestions
QUOTE(EdDeWitt @ Oct 1 2007, 03:09 PM) Not just LabVIEW for everyone!!! There isn't any standard at all and the only defacto standard is what Windows invented for ini files and as far as Windows is concerned there are no comments in an ini file. The fact that there are lines that contain some data that is never queried with a GetPrivateProfileString is all that makes them comments. Similarly SetPrivateProfileString does not really give you any functionality to add comments to an ini file. As per Windows a section is enclosed between brackets and what comes behind is not read and a ini token has a name that starts a line and a value that follows the equal sign. The value can be a quoted string if it must contain line breaks but otherwise it goes to the end of the line. One could of course devise various variants on this and restrict above limit to request double quoted strings for anything that contains line breaks AND spaces and stop reading a token value as soon as there is a non quoted space but that is not how Windows invented it. The Configuration functions already do some non-Windows stuff by escaping special characters and normalizing paths in order to be platform independant. If you want to change above behaviour it is fairly easy to modify the Configuration file VI's to do so as they are clearly structured and build up. They do the double quoting already for strings containing spaces but at least in 8.2.1 is a bug in that respect where the quoting is skipped if the section did not yet exist when adding a new key. Extending the configuration VIs to allow adding comments programmatically will however by a much more involved task. It's one thing to just ignore some data and a completely different one to add infrastructure to support it. Rolf Kalbermatter -
Change the FP grid spacing programmatically?
Rolf Kalbermatter replied to JDave's topic in VI Scripting
QUOTE(Aristos Queue @ Sep 30 2007, 10:36 AM) Hmm, I have to say that the FP grid does not work like this for me. I tend to drop controls on a front panel and then nudge them with the cursors to where I want them (or use alignment and distribution) since the grid simply does not work well for me independent of what settings I have it. I recently resorted to disable the grid snapping for most VIs I'm working on after I found this by accident. For FPs that are meant to be visible to the end user the grid is to restrictive to get the look I want, since most of my FPs except the main screens usually really are application dialogs and use the system dialog style, and for other FPs I just put them so they are logically aligned in a similar manner than the connector pane is layed out. As far as I'm concerned a global "don't snap to the grid" option would be the best I could ask for. And yes my FPs usually adapt the background color to the system dialog background color too, so there goes your other argument :-) Rolf Kalbermatter -
QUOTE(ryanlai @ Oct 1 2007, 03:01 AM) Traditionally the parallel port was an output only digital port. In order to make it get bidirectional various people came up with various solutions. 1) use one of the strobe lines as input and clock in data over that. Makes it really just a slow 1bit serial port!!!!! 2) Some hardware manufacturers made the hardware so that 4 of the 8 bits could be set as input. Better than 1 but not possible with every parallel port (the ones that only can drive the 8 digital data lines). 3) Some other manufacturers decided to go for the full bidirectional functionality of the entire port. 2) and 3) require extra register bits to setup the port in the desired manner and are of course exclusive of each other at any given time. Because of this variety and the many bugs in the actual hardware implementations VISA does not try to do anything on its own with the parallel port. Windows can be configured to operate the parallel port in one of these three modes provided the hardware chip supports that mode. But even when set that way none of above solutions will work with a 1 to 1 cable to transfer data between computers. You need to wire the handshake lines accordingly to the mode you have set the computers (and both are better set the same) to make this work at all. You can get some more detailed explanation for instance here http://www.thaiio.com/parallelportinfo.html So if VISA Read and Write will do the right thing on a parallel port depends on the actual wiring, the mode the parallel port is set in Windows and if the hardware supports that properly, which nowadays integrated chip-sets usually should. Who after this discurs still thinks connecting computers through a parallel port is a good idea, does this for a hobby and knows what side of a solder iron gets hot or can't be helped IMHO. Getting a serial port wired up correctly is in comparison almost trivial. Rolf Kalbermatter
-
QUOTE(Eugen Graf @ Oct 1 2007, 09:35 AM) For anyone looking for this information: Basically lvserial is meant to work similar to the VISA functions but without using VISA and instead going directly to the Windows COMM API. And I think Martin Henz did an amazing job and someone ELSE could put some time into it to help with documentation if they feel it is needed. Rolf Kalbermatter
-
SCC, subVIs, and multiple calling VIs
Rolf Kalbermatter replied to torekp's topic in Application Design & Architecture
QUOTE(Michael_Aivaliotis @ Oct 1 2007, 10:31 AM) Personally I have resolved to copy my library VIs into the project directory itself whenever used in a project to avoid the mentioned troubles of changed behaviour between project developments. And one other thing I usually do for bigger projects is a unit test framework. It will not solve the problem of automatically detecting any dependencies in any project you ever programmed, but for projects where you have a well defined unit test framework in place you can easily run this unit test in every project you are interested in regularly to make sure there have been no regressions. This also helps greatly during development of a project itself where you can tend to make subtle changes to a seemingly unimportant function and suddenly other things fail in an amazing way. Rolf Kalbermatter -
QUOTE(brianafischer @ Sep 28 2007, 01:01 PM) You can usually do that for digital outputs but not for analog outputs. It would anyhow only read the value written in the digital registers of the DA converter and not the actual value on the analog output. To read the analog value there needs to be an AD converter too and that would make the DA converters extra expensive. However most NI-DAQ boards do have a lot more analog inputs so wiring the analog output externally to an analog input will allow you to do what you want. On some boards you can even use internal signal routing lines but programming the according switches is a lot more complicated than a simple external wire. Rolf Kalbermatter
-
QUOTE(tnt @ Sep 28 2007, 04:41 AM) Making sure VISA is installed will of course help tremenduously! MAX is only the UI configuration tool for all NI driver software. As such it does NOT access any hardware at all directly but looks for installed NI software drivers such as NI-VISA, NI-DAQ, NI-DAQmx etc and queries them for known resources. I didn't consider that you could somehow end up with MAX on a computer without having installed VISA. Rolf Kalbermatter
-
QUOTE(Shoyurx @ Sep 27 2007, 12:37 PM) The serial port in your computer is entirely independant of your external device. If you can't see it in MAX it is either not there, not properly installed in your OS or disabled. MAX automatically shows the serial devices it can detect from the OS. It does not allow you create arbitrary devices for that class since that makes no sense. A port is either there and accessible or it isn't. Have you tried to do a Refresh of the MAX configuration (hitting F5 after starting it up)? That will rescan the system for built in devices and show any it can detect. If that does not give you a serial port then you have to start debugging there and see why MAX can't seem to find it. After you got your port you can start to deal with your device but until then it is completely irrevelant to this. Rolf Kalbermatter
-
the state of CGI
Rolf Kalbermatter replied to aart-jan's topic in Remote Control, Monitoring and the Internet
QUOTE(Ben @ Sep 27 2007, 07:53 AM) Long ago I did look into this also in combination to interface to external script servers like Python for instance. One idea I came up is to use the LabVIEW TCP/IP VI server interface directly (instead of going through it's Active X interface which would limit the solution to Windows LabVIEW hosts only). I could access this interface through direct TCP/IP sockets in LabVIEW 6.1 but eventually run into some problems to access the Call by Reference interface (nothing that couldn't be overcome but the flattening of the typedescriptor and the different parameters is a real headache to get right and requires a lot of inside research into the LabVIEW datatype storage model (almost fully documented in an older App Note). I eventually stopped development on this because of several reasons. - My Library was for ease of testing and debugging written in LabVIEW. Not very useful really considering that you can much more easily use VI Server directly and converting this interface to another language like C, Python, etc would still be quite an undertaking. - NI obviously never documented that protocol for some reasons. One of them is that they change it between LabVIEW versions albeit not extremely. But the introduction of the 32bit safe typedescriptors in LabVIEW 8 certainly must have had a profound impact on that protocol although I never looked into that. Support of the entire (private) LabVIEW object hierarchy through this interface in LabVIEW 7 should probably also have made some impact here. In general I concluded this interface to have great potential but its undocumented nature and version dependant changes make it basically unsuitable to rely upon for any serious project. And for just some fiddling around it is way to much work to develop and maintain such a solution in any language I could imagine. But it would be quite feasable to create a LabVIEW DLL/shared lib that wraps the important VI Server methods and functions into exported functions and access that from any host that is capable to call into shared libraries. You would have one DLL/shared lib per platform you want to access LabVIEW from but since VI server is network TCP/IP based that would not have to be the machine that is running the actual LabVIEW target VI. Rolf Kalbermatter -
QUOTE(Ben @ Sep 27 2007, 03:13 PM) I used this feature in older LabVIEW versions exactly to detect crosslinking! It allowed to see if a project was referencing somehow VIs outside of the project file hierarchy (and vi.lib, user.lib). Any such VIs I usually squashed immediately to avoid later problems with cross linked VIs referencing VIs from other projects (and even worse: other LabVIEW versions). Unfortunately LabVIEW 8.0/8.2 lost that capability and I didn't get around to try 8.5 yet for any real project. Rolf Kalbermatter
-
QUOTE(jbrohan @ Sep 23 2007, 09:10 AM) The problem with speech recognition is that it is a failry complicated technique to get to work in any useful way. I only played briefly with it in other applications, without trying to import it into LabVIEW and it did not feel up to what I would expect from such a tool. It is simply rather complicated to configure and train it appropriately since human perception of speech seems to be such an involved process and as probably anyone who knows more than one language can attest, is also very much depending on the environmental influences where the language is one parameter of it. There has been work in speech recognition for more than two decades now with speech recognition technology already available in the Windows 3.1 area and still it hasn't made it to a meaningful means of human interaction with the computer, not to talk about replacing human interface devices like a mouse or keyboard at all. This has been partly because of processing power and memory usage but that can't be the only problem, when you consider that computers have now already 1000 times as much memory as was common 15 years ago and the CPUs run at about 50 times the speed of then and are even more powerful, not to mention the availibility of multicore and multi CPU systems. Not having looked at the MS Speech recognition API in a long time I can't really say much about it but it has been already complicated years ago and probably got even more possibilities and features since then. Rolf Kalbermatter
-
Subversion local repository synch to server?
Rolf Kalbermatter replied to hfettig's topic in Source Code Control
QUOTE(siva @ Sep 20 2007, 03:33 AM) SVN really works the same. But the OP request was explicit intermediate commits to the server while away from the network, and here CVS will fail exactly the same as SVN. Only solution I see is to keep the CVS server on the local machine too and put it's repositry on an external harddrive or maybe make a regular backup copy of the entire local repository to some other location. I know that that will work with SVN since a repository is there completely self contained without any external information that could get lost when doing a simple file backup. Rolf Kalbermatter -
How NOT to code large applications
Rolf Kalbermatter replied to JackHamilton's topic in Application Design & Architecture
QUOTE(manic @ Sep 19 2007, 03:39 AM) If I would be tasked with that my reaction would be simple. Don't even try to redesign it! It will cost at least double the time than doing it from scratch and still not be as clean and performent as it should be. Rolf Kalbermatter -
conditional occurence wait
Rolf Kalbermatter replied to Gabi1's topic in Application Design & Architecture
QUOTE(Gabi1 @ Sep 19 2007, 04:04 PM) As Aristos already mentioned the extra memory used for a skalar notifier won't really kill your memory at all. The occurrences on the other hand are not producer/consumer oriented and while multiple places can wait on the same occurrence their mechanisme is not in such a way that you could easily do the opposite at all. On the other hand polling an occurrence with a small timeout, while not optimal, will not kill your CPU performance either. Rolf Kalbermatter -
QUOTE(karthik @ Sep 19 2007, 02:08 AM) I would think Property Nodes to be the magical solution here. Rolf Kalbermatter
-
Wiring the 'N' terminal inside a For Loop
Rolf Kalbermatter replied to Justin Goeres's topic in LabVIEW General
QUOTE(Louis Manfredi @ Sep 18 2007, 11:09 AM) Well, such is life. Most things I found by accident, searching actively for something or through user groups/mouth of word/LAVA/Info-LabVIEW etc. and when then looking for them they were eventually somewhere in the printed or online docs, but it is simply to much material to read through completely. I have long ago resorted to work with what I know and try to learn new things by various opportunities and simply not let myself be bothered that there are still many golden eggs out there that I do not know about. If I would have a photographic memory I would simply scan all the documents in a matter of flipping through them and rely on that, but alas, I'll have to do with what I can. Rolf Kalbermatter -
QUOTE(Cherian @ Sep 12 2007, 01:58 PM) Wow, you mean you wrote a driver for the FPGA board to communicate with it from within LabVIEW? In that case I would assume you know more about how this could be done, than anyone else here on LAVA possibly could know. And probably also almost anyone else except those that work for NI and developed the FPGA product and maybe a system integrator or two under NDA. Rolf Kalbermatter
-
QUOTE(tharrenos @ Sep 16 2007, 11:18 AM) As far as LabVIEW is concerned there won't be any problem. WiFi cleanly integrates into the OS networking stack and as such just looks like any other Ethernet hardware interface to LabVIEW, meaning LabVIEW has absolutely no idea that the packets would go over a twisted pair, glasfiber, dial-up modem, or WiFi network. The central heating part might be a bit more troublesome. You will need to have some hardware that can control the heating and at the same time has a WiFi interface too. As embedded device which would be interesting only for high production numbers that would require some engineering. If you just put a normal (small size) PC beside and run a LabVIEW executable on that too the necessary engineering would be quite limited. Rolf Kalbermatter
-
Wiring the 'N' terminal inside a For Loop
Rolf Kalbermatter replied to Justin Goeres's topic in LabVIEW General
QUOTE(Louis Manfredi @ Sep 13 2007, 01:21 PM) Yes upgrade notes would not have worked. They are both in LabVIEW as long as I can remember, which is about version 2.5 or maybe the parse enum wasn't in there but at least 3.0. Possibly 2.2 for Mac only, had it already too. Rolf Kalbermatter -
QUOTE(pjsaczek @ Sep 12 2007, 04:47 AM) As indicated already, if you talk to a serial device always add explicitedly the end of message character for that device to the command or if you want to be more dependant on a specific VISA feature set the "Serial Settings->End Mode for Writes" property for that VISA session to "End Char" and make sure you also set the "Serial Settings->End Mode for Reads" property and the "Message Based Settings->Termination Character" property accordingly as well as the "Message Based Settings->Termination Character Enable" to True. As already said it could have problems with older VISA versions (really old) and I find it better to explicitedly append the correct termination character myself to each message. Also note that since about VISA 3.0 or so the default for serial VISA sessions for "Serial Settings->End Mode for Reads" is already "End Char" and the "Message Based Settings->Termination Character" property is set to the <CR> ASCI character as well as the "Message Based Settings->Termination Character Enable" is set to true. However "Serial Settings->End Mode for Writes" property is set to "None" for quite good reasons as it does modify what one sends out and that can be very bad in certain situations. LabVIEW as general purpose programming environment shouldn't do that for you automatically since there are many somewhat more esoteric devices out there that use another termination character or mode then appending a <CR> character or <LF><CR> character sequence. Rolf Kalbermatter
-
QUOTE(pjsaczek @ Sep 10 2007, 10:52 AM) No LabVIEW is not adding anything to the strings on its own and I would be really mad if it would. However if you use VISA in a more recent version (let's say less than 5 years old or so) you can configure it to do that for a serial session automatically for you. But personally I find that not such a good idea. I prefer to code each command in such a way to append the correct end of string indication explicitedly. Rolf Kalbermatter
-
QUOTE(jed @ Sep 11 2007, 04:26 PM) The Windows message queue example is not really meant to hook directly into the queue but only monitor it. In order to hook into that event you would have to modify the C source code of that example to do that specifically. Not to difficult but without some good C knowledge not advisable. Another way might be that newer LabVIEW versions will send a filter event in the event handling structure "Application Instance Close?" which you can use to disallow shutting down the app. Not sure if it will disallow shutting down the session directly though. But it should be enough to detect that there might be a shutdown in progress and allow you to execute the command Adam mentioned to abort that. Rolf Kalbermatter
-
QUOTE(dsaunders @ Sep 11 2007, 03:09 PM) The private property is somewhat a pain to use as it is really a number of informations you would need to check. First the connecter pane layout itself which is just a magic number for one of the patterns you can choose. Then the array of connections with an arbitrary number to identify the position in the connector pane it is connected too and last but not least the datatype of each connection which is a binary type descriptor and can't just be compared byte for byte but needs to be verfied on a logical level since different binary representation do not necessarily mean different data types. Not sure I would want to spend that much time for this! Another possibility and LabVIEW uses that a lot for its plugins is to use the Set Control Value method and then simply run the plugin VI. Makes the connector pane completely independant of the calling information. You just need the correctly named controls on the front panel. Using an occurrence (or notifier etc.) you can wait in the caller for the VI to signal its termination or simply poll its status to be not running anymore. Rolf Kalbermatter