Discussion:
Tell us about your large LabVIEW applications!
(too old to reply)
tbob
2005-04-29 03:11:26 UTC
Permalink
We have a system that uses a third party sequencer (I would have much prefered TestStand but I did not have a say in the matter). The sequencer was written entirely in Labview. Over 200 vi's. This sequencer allows editing Labview vi's, configuration of instruments and sequence steps, administrative duties like user management and passwords, stop on fail, breakpoints, single stepping, and other features. Our entire test system including the sequencer and the test program vi's total to over 500 vi's. Other special tools written to assist in test programming brings the total up to around 800 vi's. It is all managed by subdividing the software into sections and assigning each section to a particular individual. One person is in charge of the system software, one person on the product specific testing, one person on self test and calibration, and an outside firm was hired to write the special tools. All vi's are controlled by Source Safe. We use VI Build Lists and build CAB files for installations and software package control. General planning is necessary when making modifications and additions so as to not adversely affect any subsystems. If conflicts arise, different versions of vi's can be specified in the build list so that everyone is happy. All in all, it works quite well, but requires a concentrated effort on everyone's part. The test system is used to test electronic medical devices. Since quality in the medical field is of utmost importance (people's lives are at stake), the test programs are quite extensive, and code reviews are imperative. Traceability must also be strictly maintained.
Dushyant
2005-04-29 03:11:31 UTC
Permalink
Hello Michael,<br>First of all, I would really like to thank all of NI support and people in discussion zone for being so cooperative and helping me out on different problems. Without the proper support, I would have not been successful in writing code for my application as I am quite novice in labview.<br><br>Needless to say that I again need some help. Please look at my other post titled "Newport controller ESP300: Time out error".<br>I am using Newport controller to talk to UTM25PP.1 series stepper motors(both from Newport) and photo diode and its controller from EdmundOptics.com. The whole setup is for optical microscopy and I am using laser as a light source.<br><br>In this operation, I am doing the following:<br>(1) I am scanning sample, let us say in 1000 micrometers X 1000 micrometers in step of 1 or 2 micrometers.I am using two motors stacked along Y and Z direction.<br>(2) First I move Ymotor by Y_Step from its initial position, it then stops and I record the diffracted intensity using photodiode. Then it moves by another Y_Step and again the same photodiode operation and it goes on till Y_Motor comes to Y_Final position.<br>(3) Then Z-motor moves by 1 Z_Step and Y-Motor again come back to Y_Initial and it goes on till Z_Motros comes to Z_Final and Y_Motor comes to Y_Final.<br><br>My code is running smoothly. Only sometime motion controller ESP300 reports and error of "Communication Timeout". I believe that I read somewhere that communication timout default value for this controller is 13 sec. I am also getting an error from labview saying:<br>LabVIEW: Generic file I/O error.<br>---<br>NI-488: I/O operation aborted..<br><br>What I am doing wrong? Can I increase communication timeout on Newport controller (I beleieve that I read somewhere that it's 13 sec)? IS there anyway that automatic error handler can click "OK" so that the whole operation can run smoothly?<br><br>You may want to look at my previous post.<br><br>Thanks again,<br>Dushyant<p>Message Edited by Dushyant on <span class=date_text>04-28-2005</span> <span class=time_text>05:51 PM</span>
DianSong
2005-04-29 09:41:10 UTC
Permalink
Hi, Mike<br><br> I havn't ever built a "large" Labview application, but I really want to add a comment on this topic.<br><br> First, it's normal for many new-Labview developer to get a feeling that Labview is not good at large applications. I used Labview for 3 years. In most of the time, I was mentoring interns from universities to create Labview programs for test automation in product development and manufacturing. Almost every intern run into a situation where they couldn't handle their program when it becomes larger to some degree. Even a small modification in functionality was very difficult.<br> I resolved the problem by creating a program architecture with datasocket server, as following:<br> step 1: dividing a large application into several modules according to the functions. <br> step 2: for each module, besides their Front panel, another interface was defined with datasocket. we can sent commands to the module, and get result from the module, with Datasocket data. <br> step 3: also, for each module, test program was developed to make sure the module is functional right.<br> step 4: Combining all the modules with datasocket server to build a "large" application. <br><br> With this model, each developer could work well again because each module is simple enough for them to manage. And they could optimize their module without impact to other parts if they keep the same functionalities and interface of the module.<br><br> As I said at the beginning, the application is not large(13 VIs total). But I have found a way to build bigger programs than before. (I have several thoughts on using Labview; some of them are kind of crazy...maybe talking to you later)<br><br>best regards<br>Diansong
Ben
2005-04-29 19:41:09 UTC
Permalink
Part one of two.<br><br>The following is an application I devloped about a year and half ago.<br><br>It is somewhere between 500 and 700 VI's.<br><br>Ben<br><br>21 CFR 11 Compliant Environmental Monitoring and Reporting System<br><br>The Challenge<br>One of Data Science Automation?s (DSA) customers needed an application that allowed their existing customers to upgrade to a 21 CFR 11 compliant laboratory monitoring and control system. The application had to integrate seamlessly with their existing hardware, provide a customizable user interface while being fault tolerant (Figure 1).<br><br><br><br>The Solution<br>DSA developed an application based on a robust architecture that harnessed the power and flexibility of LabVIEW for Windows, LabVIEW Real-Time, NI-FieldPoint, and NI-VISA. The scalable application can be easily customized by the end-user to reflect their physical and organizational structure and uses cFP-20XX?s to provide fault tolerance at multiple levels (Figure 2)<br> <br><br>Solution Overview<br>The new application maintains support for the legacy hardware and greatly expands the capabilities of the previous system by introducing a network of Compact FieldPoint (cFP) units running an embedded application. Each of the cFP nodes is considered a Remote Unit (RU). The RUs monitor all configured process variables (PV) while maintaining the state of local alarm devices (not illustrated). The RU also maintains a history buffer that is available for storing historical PV information in the event of network or Central Station PC (CS) failures. The CS will monitor the history buffer of all the configured RUs and update the database as required. The CS also provides ready access to the PV history and configuration through a web-enabled GUI. The CS also provides notification, event tracking and reporting functionality.<br><br><br>Challenges Enumerated<br>The challenges can be categorized as development, interoperability, or GUI, related and are listed below. The details of each of these challenges will be discussed further in the context of their solutions.<br><br>Development<br>? Short developmental cycle<br>? Complex application<br>Interoperability<br>? TCP/IP connection to RUs<br>? Serial compatibility with existing hardware<br>? Fault tolerant communication<br>? DTMF support for paging and voice notification<br>? Control and monitoring of local alarm enunciation devices<br>GUI<br>? Web-Access<br>? User Friendly<br>? Customizable GUI<br>? Secure (21 CFR 11)<br><br>Development Solutions<br>NI-LabVIEW and NI-LabVIEW-Real Time were selected as the development environment. The short development cycle was addressed by leveraging LabVIEW?s integrated source code control to enable multiple developers to work in parallel. The complexities of the application were addressed in the application design. A simplified diagram illustrating the architecture for a ?one RU system? is shown in figure 3.<p>Message Edited by Ben on <span class=date_text>04-29-2005</span> <span class=time_text>11:53 AM</span>


Figure1.JPG:
Loading Image...


figure2.JPG:
Loading Image...


figure3.JPG:
Loading Image...
Ben
2005-04-29 19:41:10 UTC
Permalink
part two of two<br><br><br>The simplified architecture illustrated in figure 3 shows how the functionality was shared between the CS and the RU and uses a TCP/IP connection to interact. The RU uses its local configuration information to acquire, process, and buffer all PV related readings and events (i.e. alarms, warnings, faults ?). The RU also supports a ?Security Window? that exposes a set of password protected methods that can be used by the CS to read the ?History? buffer and permit configuration modifications.. The ?history? buffer was implemented as a ?round-robin? buffer capable of storing up to 8000 events without adding additional memory.<br><br>For simplification, the illustrated CS design omits the reporting and notification functions.. The ?History Poller? (HP) maintains and monitors the state of the TCP/IP connection to each of the configured RUs. As long as the HP has a valid connection to the RU, the buffer is periodically checked for updates. If updates are found, the new information is used to refresh the ?Recent History? buffer (used to provide quick access to the PV readings from GUI) and the Database. Once the Database has confirmed the updates have been written, the HP will mark the updates in the ?History? buffer as saved. This handshaking ensures that no data is ever lost without being detected.<br><br>The CS User Interface allowed authorized users to view the PV history, or review and modify PV configurations. All configuration changes are logged to the Database after being confirmed by an appropriate password.<br><br>Interoperability Solutions<br>The TCP/IP connection shown in figure 3 was implemented using the ?VI-Server? technology. This eliminated the need for all low level TCP/IP development and meant that the original version of the ?Security Window? never had to be modified.<br><br>The serial compatibility issues were addressed by developing appropriate drivers that ran in the RUs under LV-RT and used the built-in serial ports of the cFP units. The cFP serial ports also were used to control and monitor the handshaking lines for use in the local alarm annunciation (not shown). <br><br>The fault tolerance was addressed by using cFP controllers. Compact FieldPoint controllers have the option for backup power supplies. The ?handshaking? (described above) used by the HP also allowed the reading of updates from the history buffer in RU to be completely tolerant of communication failures and PC crashes.<br><br>Control and monitoring of the local alarm annunciation device used the handshaking lines of one of the PC?s serial ports using NI-VISA. NI-VISA was also utilized to control a voice modem to provide the pager and voice notification functionality. Modules were developed to provide voice and e-mail notifications.<br><br>GUI Solutions<br>The CS application was designed and written to take advantage of LabVIEW?s web server. This made it possible to provide the full local functionality of the CS to a remote user.<br><br>The CS made extensive use of the Tab Control to organize and control access to all of the applications functions. The Tab Control was combined with picture controls to implement a graphical interface that could be customized by the end user to configure the physical location of all PVs. An authorized user could specify a bitmap file as one of ten possible background maps. The state of each PV was illustrated by an icon overlayed on the background map at the configured location. A LabVIEW event was used to detect the mouse position while viewing the maps and provided a ?mouse over? feature that used a tip strip to show the current reading and state of the PV. Mouse events were also used to access PV history (left clicking on PV icon) or configuration screens (right clicking on PV icon). <br><br><br>Summary<br>The solution described made extensive use of the power, flexibility, and feature
SciWare
2005-04-30 15:11:04 UTC
Permalink
If anyone doubts that you can build a professional windows looking application with LabVIEW then take a look at GOOP Developer. <br><br><a href="http://www.sciware.com.au" target=_blank>www.sciware.com.au</a><br><br><br>GOOP Developer has a Windows Explorer style user interface complete with popup menus that makes creating and managing your GOOP based project very simple and intuitive. The class framework used supports inheritance, virtual functions and the ability to bind a process. You can develop with GOOP Developer in any version of LabVIEW from 6.1 up.<br><br>GOOP Developer is about 700 vi?s and was written completely in LabVIEW. GOOP Developer and its associated class framework took approximately three years to research and develop to its final state.<br><br>I work for ICON Technologies as a Systems Developer and we use GOOP Developer and its associated class framework to develop our systems. The benefits are<br><br>1) Our development time is significantly reduced through ease of use.<br><br>2) Code re-usability. For example we can quickly extend the capabilities of an existing class through inheritance.<br><br>3) Our code becomes simpler through the use of inheritance and the ability to bind a process to a class.<br><br>With LabVIEW and GOOP Developer we can design and develop complex systems. Our current project is to develop a system for controlling a sample handling robot that will manage the handling and analysis of ore samples. <br><br>I have also come across the false argument from text based programmers that LabVIEW is not a general purpose programming language, I strongly disagree. The misconception seems to arise from the fact that you don?t need to be a formally trained programmer to develop your solution. Also, unfortunately a lot of the LabVIEW code that is developed by self taught LabVIEW programmers that gets reviewed by the IT Manager is not what would be defined as good structured code.<p>Message Edited by SciWare on <span class=date_text>04-30-2005</span> <span class=time_text>09:53 AM</span>
DirkLV
2005-05-05 17:10:55 UTC
Permalink
Hi J.A.C.<br><br>I guess there is no general rule for the number of subVIs. The overhead in terms of memory usage or execution speed induced by using a subVI should mostly be negligible (if their front panels are closed, or removed for the .exe). Try to keep a good separation of different layers (user interface, functional layers, hardware drivers, etc.), i.e. a low level driver VI should not be called directly from the main user interface VI. A few weeks ago I followed a discussion in a LV workshop about the (non-)usability of the VI Hierarchy window for large applications, and a good deal of the problem seems to arise from fact that there are often too many dependencies ("wires") extending over several layers, making the Hierarchy look chaotic. <br>Another thing that helps a lot is to have an error in/out cluster for ALL VIs, even if not handled internally. By wiring each error input/output you get a transparent flow control and timing and not too many sequence structures.<br>It is often a matter of discipline, not of ability, to produce good code. Hard enough, though. <br>With "project tools" I meant the entire collection available today, including VI metrics and Buffer allocation. But what I am really waiting for is something that helps me not to get lost with 20 VIs and diagramms opened at the same time... <br><br>Dirk
DirkLV
2005-05-04 12:10:47 UTC
Permalink
Hi Mike,<br><br>during the last years, we have been continuously developing the software for an optical surface analysis system. This includes the instrument control, data handling, visualization and analysis, image processing and external device control, consisting of about 1000 VIs and roughly 100MB Labview source code.<br>Some key features:<br>- instrument control via TCP/IP to an embedded system running up to 16 motors, 3 cameras and a bunch of A/D and DIO ports.<br>- video streaming over TCP/IP<br>- data generated by the instrument and displayed are numeric values, graphs, images and maps of data, handled by log files, charts, 3D graphs and so on.<br>- image display and processing is done with IMAQ Vision<br>- automation of the measurement routines may be done with a scripting language completely coded in Labview <br>- external devices are integrated via DataSocket, RS232, ModBus, USB, or DAQ<br><br>The GUI is split into several VIs that run independently, communicating mainly via Queues, LV2-style globals, etc. (and some standard globals here and there, but we are working on that ;-) With some effort to make the front panels NOT look too much Labview-like, which has partly to do with the prejudices you mention. <br>As the project was evolving over several years, the quality of the code is very different, depending on our improving skills, but also on the LV version that was originally used when a particular module was written. Sometimes one spends time developing something which is then included in the next version of Labview, so there is a tendency to start all over again. Regarding CPU load, memory usage or execution time, a lot of time was required to evaluate different realizations. Ok, there are some general guidelines, but they work best with the simple examples, not with complex real world applications. <br><br>For LV8, I am hoping NOT to see too many new functions. For me, what is really needed are tools to get the project organized in a better way. By this, we will see more of the large applications.<br><br>Dirk
JoeLabView
2005-05-12 12:40:52 UTC
Permalink
<br><blockquote><hr>spaceman spif wrote:<br>Yeah, my program is enormous. And looking back, knowing what I do now, I now see how I made parts of it so much more complicated than they needed to be. Of course, every time I put my program to work on the floor, someone eventually finds an oddball way I never dreamed of to make it lock up. And it's back to the drawing board!<br><hr></blockquote><br><br><br>Hey Spaceman... <br><br>don't be so hard on yourself. <br><br>Most people write enourmous LV vi's at first. <br>Then one day.. they see the light. They discover the power of the sub-vi.<br><br>I would cramp up so many functions within a vi, that it was nearly impossible to follow the wires, as they were tightly placed together (like a circuit board ;) ).<br><br>I started using sub-vi's as sub-routines. For each little task, a sub-vi. Then I started re-using the sub-vi's.<br><br>Now large vi's consist of wires and sub-vi's (which also contain a bunch of sub-vi's).<br><br>Have fun in space!!! among the friendly wires...<br><br>:D<br><br>JLV
JoeLabView
2005-05-05 17:10:57 UTC
Permalink
The largest LV code was probably my last contract.<br><br>Unfortunately, due to NDA, I cannot describe many aspects of the work, but I can provide a brief overview of the work.<br><br>There were three "Test Software" Engineers working on automating the final stages of production for a wireless system. I worked on it for over 1 year. I believe we had over 750 vi's/sub-vi's when I left. It was trully a piece of art.<br><br>Basically, the system comprised of a number of cards each having their own dedicated CPU running Linux.<br>There was a central processor card with six RF tx/rx cards. <br><br>All cards had to be fully tested and RF tuned individually and as part of the final assembly, the system was automatically configured and RF tested as an assembled unit.<br><br>Due to the number of cards, efficiency (speed) had a high level of importance. Cards were tested in parallel, using TestStand as a sequencer.<br><br>The test software programmed various FLASH memory devices and FPGA using a number of programming devices (such as Xilinx Parallel cable, VisionProbe, I2C programmer, Ehternet).<br><br><br>Basically, there were many instances where I thought I'd reach the limits of LV, and to my surprise, solutions were implemented rapidly. Many thanks to this forum.. I still prefer LV over C/C++.<br><br>-JLV-
waldemar.hersacher
2005-05-06 22:40:59 UTC
Permalink
I'm rewritting a LV 6.0.2 app in LV 7.1.1 taking the advantage of events and making it more modular and expandable.<br><br>One part is a driver layer for the security testers of my customer. This driver consists of by now of 60 VIs and CTLs. This driver is deployed as Active-X Server, DLL and LLB and also used in the main application. This driver is acompanied by help in CHM and PDF format for the programmers. I also created some VIs and CMD files for automatical build. The driver is not complete by now. It misses the private functions for firmware update and setting internal parameters. It will expand by another 25-30 VIs for the driver and 2 apps.<br><br>Another part is the main application which now consists of 8 kernel modules builded by 375 VIs and CTLs. These modules are not all ready. I'm expecting to get another 100-180 VIs and CTLs. Missing by now are another 12 modules each expected to be 20+ VIs and CTLs. Together with them a programmer reference is builded. Each module is located in one LLB. There are more than one implementation for one module. As long as the interface of the module builded by CTLs and fixed named VIs aren't changed the modules can be exchanged. All the modules will be automatically build by some VIs and CMD files.<br><br>These two parts are now aimed for Windows but there are plans to get them running on Linux too. We have made some investigation and found that we need only a limited number of functions differently implemented for each platform. We will expand our build process to have the work and testing done on Windows and include an automatic build on Linux. The Linux version is aimed to run in an embedded PC of an automated test system in a light or full version. We need to rescale and rearrange the UI of the Linux version during the build process.<br><br>Another part is a custom installation routine to enter some registry information and doing a first configuration of the application when the end user installs it on his machine.<br><br>Also there is a plan to build a deployment application. This will automate the process from getting the right modules from a master layout to the the CD the end user is buying.<br><br>The problem of measuring how large an app is appears not only in the number of VIs and nodes. This is only the sight from the programmers state. Its also related to the number of steps you need to build it from the sources. And its not only the EXE and LLBs its also the programmer and end user information.
Robert Cole
2005-05-06 23:41:04 UTC
Permalink
We have developed a Hydrogen Fuel Cell Test System that includes 2 parts.<br><br>On the RT system where the safety system and test sequencer run along with an Instrument Manager, DAQ, Data Logging, DI Monitor, Watchdog and a few other parallel processes - we have currently 1027 VIs (not counting some that are dynamically loaded).<br><br>The GUI on the computer side has a little over 600 VIs. There is also a configuration system that contains a little over 200 VIs.<br><br>This program is managed in Perforce and is built modularly, so that a number of sections can be used, tested and managed separately. Testing a build in this software suite takes a while. There is an extensive test document to go along with the scads of design documents.<br><br>There are a number of "common" code modules that have been used in other projects as well.<br><br>If you're wondering, this program has been developed over about 5 years and is being rebuilt to use DAQmx.<br><br>You can see some of our projects at: http://www.advmeas.com<br><br>The ONLY way to build something this complex in any language is to do a lot of design up front.<br><br> Rob
rfriedr1
2005-05-09 13:40:52 UTC
Permalink
Hi,<br><br>I've designed I LabView program to evaluate gas-chromatographie-spektra. It does a lot of calculations a plotting data.<br>It needs about 50 suVI's and saves many (many many...) "Excel-klicks".<br><br>In the moment I'm about to write a program to control a mass-spectrometer and the preparations line for water-samples.<br>That means I have to control various instruments, e.g.<br> - Quadrupol masspec<br> - Cryogenic coldtraps controller<br> - valve controller<br> - pressure gauges<br> - digital multimeter<br> - countercard<br> - magnetic-field-controller ...<br><br>First you have a water sample that should be processed in a preparation line and after that measured in a mass-spectromter.<br>All between should be automatically done by LabView with a high amount of flexibibility to process the sample.<br><br>Of course storing the measured data and designing a usefull Userinterface is another point.<br><br>I estimate the final number of VI's to 300-400.<br><br>Regards.<br><br>Ronny
billings11
2005-05-13 14:11:02 UTC
Permalink
The lastest system I am developing is running final test on laser galvanometers at the end of a manufacturing line. Right now I have just passed 1000 vi's, but I am sure it will keep growing as I still have a lot of work to do. Everything is written in labview, including the tests, GUIs, and the test sequencer. I am using PCI NI DAQ hardware (M Series) along with a couple of GPIB instruments.<br><br>The thing I am most proud of about this system is the sequencer. I have a wizard style setup vi that allows a senior tech to setup a final test sequence, along with the parameters for each test The wizard allows him to actually connect to a real unit and test in real time while he enters parameters, so he knows he is not entering grossly incorrect test parameters as wizard would instantly show a failed test. He can configure the test sequence to be as long or as short as he wants, and run any one test as many or as few times as he wants. He only has to configure the test sequence once, after which it is saved in an SQL server database. I made it as easy as doubleclicking to add a test from a listbox of available tests to a listbox of selected tests. Then the wizard cycles through the tests in a Next or Back style to let him set up parameters for each one.<br><br>The test parameters for the elements in the test sequence are saved as an array of variants in an OLE object of the database. Also an array of strings representing the names of the tests in the sequence is saved When the parameters are read back, the two arrays provide everything the system needs to know to run the test. The test name drives a case loop which converts the variant to one typedef or another depending on the test name. This way we have infinite configurability in test sequencing. It also means I can add new tests without breaking old ones very easily.<br><br>Because of the drawbacks of subpanels, I have had to figure out a way to use windows reparenting rather than subpanels to parent any pop-up windows withing the mother application window. This is highly superior to sub-panels for three reasons. The first is that you can denug a reparented vi's diagram as it runs, while you cannot do so if it is in a subpanel. The second is that you can reparent many vis within the same parent window while you can only have one subpanel per vi. You can drag the child windows around within the parent window like an excel workbook within an excel application. The third is that event structures have all sorts of conflict problems if you have an event driven vi subpaneled in another event driven vi. The windows reparenting works very well, as I am using named queues to make event driven interaction between several vi's running in parallel. It is all written in labview with calls to windows API dll's for reparenting. I would encourage NI to look into this avenue instead of subpanels. Once we figured out the details of windows reparenting labview subpanels became obsolete for us.<br><br>I handle results the same way as parameters, by saving them as variants in the database OLE object. I chose this because my company has an extremely large set of products with a huge number of custom tests. I also know that there will be new custom tests to add to the existing test framwork, and I don't want to have to continually change the database each time I add a new test. The drawback is that since all tests are saved in the same table as a variant in an OLE object (with a string in abother column to tell what type of test it was), you can't look at individual test metrics at the database level. The advantage is that no matter how many tests I add to the list of available tests, or how many times in a given sequence the same test is executed, I will never have to change the database at all. The only thing I have to do to add a new test is write the test in labview
BenBabb
2005-05-14 02:11:06 UTC
Permalink
Hello all,<br>I have one program that has about 400 vi's. It started out as a test program for a radio we developed. The speed in developing the test impressed managment to the point the requested a GUI be built,I had a basic GUI for lab characterizations, and we currently send it to customers as the evaluation software. The functionality requirements of the program has increased with each new addition of the radio family, currently there are three different radios being offered. The radio is controlled through the parallel port with an I2C interface. The radio uses the com port for the data over the RF link. The program grew to add a small oscilloscope program using the sound card, all the field represenatives have laptops and are not able to cary bench equipment to customers. It seemed with each new function designed for the radio I was able to easily implement it into my program and repackage it for distrubution. <br><br>There are several other characterizations programs that have been written that run 200 to 400 vi's. It seems that more neat tricks and cool gadgets I learn the better, larger( as far as VI count) and cleaner my programs become.<br>Ben
Jack Me
2005-05-16 16:41:11 UTC
Permalink
I made an application before that automates our company's spooky equipments There are about 20 laboratory equipments (for IC evaluation) being controlled to perform various test and characteristics measurements for different ICs. The application includes serial programming of the IC using the parallel port, a USB device and NIDAQCard-DIO 24.<br><br>The user can customize a test set-up depending on his needs on certain IC evaluation and the results are displayed in the monitor through charts, graphs and tables. He can print print the results for a quick reference. The results are also saved in excel file (using ActiveX for Office2000 and OfficeXP) where all data (test settings and results) are stored for future references. The Excel file should be readable for the users. And if the future that a certain test has to be repeated for a different IC, the can just locate the appropriate files and load it the application to clone the tests.<br><br>This application is built over a thousand subVIs, code interface nodes, activeX invoke and property nodes and a couple of state machines.<br><br>The main objective of this application is to be very user-friendly, re-use of its subVIs for smaller applications, speed and accuracy of test and measurement and eliminate man-hours spent on documentation of results.<br><br>That was almost three years ago and the application is still in use in our company and is very much admired by our clients.<br><br>Today, we are planning to re-make this application to be controlled over the network, produce HTML and XML results, capable of e-mailing its users, monitor equipments' frequency of usage, and integration of more equipments, measurement set-ups, devices and technology.<br><br>Three years ago, I developed this one-stop tool for test engineer in our division.
RPJ
2005-05-18 23:11:14 UTC
Permalink
Hello Michael,<br><br>I supposed you asked the question for marketing/R&D reasons. Here it goes:<br><br>I used both - common programming languages (Basic, Pascal, Fortran, C) and LabView. However, none of them at high extent; that is, I do not do programming for a living. LabView seems to be very good for data acquisition. However, when it comes to programming things get complicated. For now, the word I have for LabView would be "cumbersome". It takes a lot of time to learn it and a lot of 'gymnastics' to actually program with it; if it wasn't for technical support and forum I would have had terrible times trying to program my first 'large' application.<br>I am looking into programming a large application right now and it doesn't look good. It makes me think about learning Visual C++ as a better alternative...<br><br>Make the training cheeper and you are going to sell LabView better.<br>Also, when you are selling the "full development" version explain customers that it is not really full at all...or just change the name.<br><br>All in all I am excited about using LabView but it keeps giving me a bitter taste<br><br>RPJ (double PhD - if this could give more weight to my opinion)
LV_Pro
2005-05-18 23:11:22 UTC
Permalink
I've heard the comments about building big applications, how there is some belief that it is easier in other languages, but generally I have found, particularly lately with the various features now in LabVIEW, and hopefully those that are to be added, that it isn't any more difficult. Building a well structured large application is a challenge regardless of the language you use. The problem I frequently see with LabVIEW, particularly how it has been marketed locally, is that there is an emphasis on how easy it is to start working in it, with the sales engineers competing to throw together a basic DAQ system in under a minute. The prospective LabVIEW user leaves, believing they've seen a pretty simple solution to building their automated test system to test 400 various parameters on their products, save the data and have both meaningful test result printouts and beautifully formatted management reports. As someone who then contacts these folks to offer my company's service in achieving this goal I am frequently met with shocked silence when I present a project estimate to them. "What do you mean two months work at X dollars/hr?!!!" Some have gone to the effort of sending engineers to the LabVIEW basics classes, bought the "Full development package" and then months later, with management breathing down their necks to meet the now rapidly approaching deadline, have contacted me for help. Usually what I find is that while they may have a grasp of the basics, it is a long, long way from there to understanding how one structures a large, complex program, regardless of the language. LabVIEW isn't a magic bullet. There are things that are hard or impossible to do in LabVIEW, but these tend to be in the realm of low level communication with unique devices, where a little bit of code written in C or C++ can be used to perform the low level task and can be called from LabVIEW. I have developed large programs in a variety of languages; PASCAL, C and even FORTRAN, and have, by personal choice, used LabVIEW almost exclusively for the last 13 years. There isn't any technical impedement to building large applications in LabVIEW that I've encountered recently (LabVIEW 2.5 might be a different story!) and there is a lot to be said for being able to test most modules in a standalone setting, without building complex test cases for each one.<br><br>wire on!<br><br>Putnam Monroe<br>Certified LabVIEW Developer<br>crusty LabVIEW curmudgeon since 1992
billings11
2005-05-19 19:11:22 UTC
Permalink
<br><blockquote><hr><br>I've heard the comments about building big applications, how there is some belief that it is easier in other languages, but generally I have found, particularly lately with the various features now in LabVIEW, and hopefully those that are to be added, that it isn't any more difficult. Building a well structured large application is a challenge regardless of the language you use. The problem I frequently see with LabVIEW, particularly how it has been marketed locally, is that there is an emphasis on how easy it is to start working in it, with the sales engineers competing to throw together a basic DAQ system in under a minute. The prospective LabVIEW user leaves, believing they've seen a pretty simple solution to building their automated test system to test 400 various parameters on their products, save the data and have both meaningful test result printouts and beautifully formatted management reports. As someone who then contacts these folks to offer my company's service in achieving this goal I am frequently met with shocked silence when I present a project estimate to them. "What do you mean two months work at X dollars/hr?!!!" Some have gone to the effort of sending engineers to the LabVIEW basics classes, bought the "Full development package" and then months later, with management breathing down their necks to meet the now rapidly approaching deadline, have contacted me for help. Usually what I find is that while they may have a grasp of the basics, it is a long, long way from there to understanding how one structures a large, complex program, regardless of the language. LabVIEW isn't a magic bullet. There are things that are hard or impossible to do in LabVIEW, but these tend to be in the realm of low level communication with unique devices, where a little bit of code written in C or C++ can be used to perform the low level task and can be called from LabVIEW. I have developed large programs in a variety of languages; PASCAL, C and even FORTRAN, and have, by personal choice, used LabVIEW almost exclusively for the last 13 years. There isn't any technical impedement to building large applications in LabVIEW that I've encountered recently (LabVIEW 2.5 might be a different story!) and there is a lot to be said for being able to test most modules in a standalone setting, without building complex test cases for each one.<br><hr></blockquote><br><br><br>I very much agree with this statement. now there are two software development platforms that I see as far and away superior to all others for developing large systems: LabView 7.1 and .Net Developent Studio. And of these two labview has a steeper learning curve for someone that does not already have a lot of software experience, and it lends itself to data acquisition and instrument control in a much simpler way. Perhas some people find large application building challenging without direct instruction from NI, but an intuitive devloper should have no problem if he or she is willing to experiment with different aspects of labview functionality.<br><br>Many of the concepts I use to develop very large applications are things I picked up through years of experience with labview, not from a training course. I recently inquired about higher level labview training from NI only to be disappointed that there really isn't any. I asked about a seminar or course from NI that would touch on large scale development, and I had specific questions about things like using variants to pass data in an adaptable way or different methods of building a universal sequencer in labview that could have new tests added without modifying source code. I also have all kinds of questions about details of things like heavily using vi server. I learned from NI that there is a course for large application developers that takes place in a different city every month or so, but only if
drval
2005-05-19 20:41:11 UTC
Permalink
Having been a software developer -- and user -- for over twenty years, I've seen a lot of changes and developments in programming languages and platforms. I've already described by currently deployed application which integrates three out-of-process servers (developed in C++). Right now my task is to rearchitect the entire application, so that I can completely remove the out of proc servers.<br><br>The ONLY reason those out of proc servers were constructed as they were was because of the programmer who was involved. He was committed to NOT having LV code throughout as a way of making certain that he would still be "needed" throughout the development cycle.<br><br>I wouldn't DREAM of beginning to rearchitect in any other language than LV and I wouldn't DREAM of beginning this project using any other platform. Most of my colleagues/competetitors in the deployed field use C++ as the language and Visual Studio as their environment. A few have migrated to Studio Net but most haven't. I will have this app re-architected and deployed with a very short time -- because of how I can refactor and rapidly prototype using LV.<br><br>The development - deploy process would be VERY DIFFERENT and far, far slower it I weren't using LV.
JanK
2005-05-23 14:10:54 UTC
Permalink
Hi Michael,<br><br>One of our projects has been going on for some years. Several developers are involved in the project and they are still working on the project. It is a platform for system tests.<br><br>All platform code is built in GOOP, using the original GOOP Wizard 1 developed by NI-Endevo.<br><br>There are 195 classes. We counted almost 5000 VIs but all classes where not loaded at that time. Although GOOP does add some extra VIs (class helper VIs) I guess this qualifies as a large application.<br><br>To cope with large applications it is necessary to have some means of structuring the application. GOOP is doing an excellent job here. Could we have done this without GOOP? Everything is possible, but I wouldn't like to try.<br><br>With GOOP we got the means to create structure, this enables us to continously add new functionality and still be productive and maintain good quality. With GOOP we could partition the platform functionality into several components which enables the user to select what functionality to use and intialize when using the platform. We also got the means to divide work on project members (one or several classes per person). You cannot do big-bang testing on an application like this, with GOOP we got small code modules which enabled us to do unit testing before integrating the application.<br><br>So, is LabVIEW suitable for large applications development? Well, there isn't much specific support built-in, but with the GOOP extention it definitely works fine. One feature which I think cannot be overestimated is the ability to run and debug each single VI as soon as it is written. This really supports incremental development! It also saves us from writing a lot of test code Otherwise you can easiliy write the same amount of test code as application code.<br><br>Thanks,<br>Jan
JanK
2005-05-23 14:40:58 UTC
Permalink
Hi Michael,<br><br>One of our consultants (Mikael Holmström) has written a graphical editor in LabVIEW. Writing a graphical editor isn't the typical LabVIEW application. In a graphical editor you should be able to handle individual graphical objects, get context help, configure the graphical objects etc.<br><br>The tool is a UML Modeller for Endevo GOOP (UML is a standard for graphical systems design, check out www.uml.org and also www.endevo.se).<br><br>The tool is built in 100% LabVIEW and structured using Endevo GOOP Wizard 3. Current code count is 36 GOOP classes, around 700 method VIs (probably around 1000 VIs in total although we haven't counted). Large? Well, it is not small anyway.<br><br>GOOP as a way to structure the code is very suitable for this kind of application. Why? Well, in a graphical editor you need to handle a lot of individual graphical elements, move them, add them, resize them etc. Each kind of graphical element is naturally modelled as a GOOP class. Although the "things" you like to do with each graphical element are conceptually very similar (move, add, draw, resize etc) the implementation will naturally differ (drawing a circle is different from drawing a line). So, how do you cope with this? <br><br>We used a feature called inheritance (avaliable in Endevo GOOP Wizard 3, sorry for the tools promotion). Inheritance enables the structuring of GOOP classes into inheritance hierarchies. It also enables adding the same method (like draw) to each class but you can implement them differently on each class. In addition, inheritance will let you pass objects from an inheritance hierarcy around and also use them without knowing which class they where created from. For example, you can create an array of object references, to redraw all objects you just call method Draw() on each object. One of the objects could be a circle, so calling Draw() will cause a circle to be redrawn. Another object could be a line, so calling Draw() will cause a line to be redrawn. <br><br>The benefit with designing using inheritance is that you can add new features, like in our case a new kind of graphical object (it will be a new class in the inheritance hierarchy), and still not have to modify more than a small portion of your application. Most code is untouched by extentions to the application. <br><br>GOOP and also with the addition of inheritance are important for large applications development. Although this example is not the typical LV application, inheritance can be a very useful technique for designing extendable LV applications.<br><br>Could this tool have been built in non LV environements? Definitely, but Mikael wanted to see if it could be done with GOOP Wizard 3. It could:-) Could it be done in LV without GOOP and inheritance? I wouldn't dream of trying.<br><br>Thanks,<br>Jan and Mikael
LuI
2005-05-31 14:10:58 UTC
Permalink
Hi,<br><br>I know I am late here, but anyhow...<br>My projects range into the medical and medical devices area. The two largest apps span the whole bandwidth:<br><br>1. ECG Mapping:<br>This is an app to control an examination and DAQ setup, basically to perform 96 channel ECG recordings and to evaluate the results. It is used in the Deutsches Herzzentrum Berlin (German Heart Center Berlin). Its aim is to review the electrical operation of the human heart without the danger of intrusive heart cathether examinations. It measures ECG on 96 places around the patients torso, as well as the exact position of each ECG electrode. From this signals it calculates a signal mapping (voltage level graphs like barographs on metheorological maps) onto a virtual globe around the heart. This is done (off-line, of course) for each sample time. From the movement of the voltage level graphs one can see the movement of the excitement of the heart muscle and its time course. This allows to detect problems like stroke-damaged areas or extra systole sources.<br>It is about 600 VIs with several dynamically called parts, Needed some new technique (at least for me) for storing large amounts of data, data compression, highspeed multiport serial communication and, last but not least, sphaerical triangulation and displaying techniques. Took about two years..<br><br>2. Multiseat test sequencer:<br>This sounds perfectly like an app for NIs TestStand, And I started with it, but finally gave up after nearly a full year of devellopment. Now I did what we needed with LabVIEW. <br>The app controls a teststand with two SVGs, a PXI chassis containg two DMMS, two switching modules and some AO and DIO devices and, last but not least, 8 USB ports and 27 serial ports. It is used to test up to 8 medical devices.<br>Its main VI controls the whole system, starts test processes from templates, gets their results and displays it to the user. <br>Each single test process is a kind of test sequencer preloaded with an array of steps to perform. This array can be changed during the test process whenever needed (errors, missing components etc). Each test process communicates with _its_ UUT. All access to 'global' ressources is protected by semaphores. Some parts of the process are dynamically called daemeons. Interprocess communication is done using named queues.<br>The app has more than 650 VIs, Parts of 'em are toolkits or from my private libraries. Took about a year for the LabVIEW part now. Had to learn a lot about using DLLs, exchanging data with C-DLLs, evaluation complex C-data structures, writing multiprocess-safe code, using stacked type definitions etc.<br>As it is a test system, it is still (and probably will forever) be under construction.)<br><br>Greetings from Germany!<br>-- <br>Uwe
LuI
2005-06-03 06:40:52 UTC
Permalink
Peter,<br><br>parts of the Mapping project have been reported about in the VIP congress book of 2003. AND there was a handout for the visitors of the 'Lange Nacht der Wissenschaften' 2003. As this is just a tool for the physicians, they might have published results of their work with this SW that I am not aware of..<br><br>As for the test solution, this is more or less an internal ptoject. It is (and will probably be) under construction to improve its functions. To publish it would be like comparing with NIs own solutions (especially with TestStand). I am not willing to do so and my employer won't neither.<br><br>How to get to the expertise? Reading good books, Trying (& learning from Errors), discussing solutions, taking courses ... It takes time and effort, no question. And I feel like beeing far apart from being an expert. <br>To recomment some sources:<br>* www.ni.com * info-LabVIEW * www.lavausergroup.org<br>And there are some good books:<br>* j. Conway et al: 'A software engineering aproach to LabVIEW' Prentice Hall 2003<br>* G. W. Johnson 'LabVIEW Power Programming' McGraw-Hill 1998 (and a 2nd band availabel)<br>t b c'd<br>Greetings from Germany!<br>-- <br>Uwe
RoSt
2005-06-03 07:10:51 UTC
Permalink
Hi Michael,<br><br>We all know that it is possible to write large applications in LabView. I have seen it being done myself and we have all read this thread and knows that it is possible. But, I would like to stear this thread into a new direction and that is to identify the problems that where encountered developing all this large LabView applications. I mean problems or annoyances in LabView or the LabView development environment.<br><br>When I think of it, I still have the same problems with LabView 7.1 that I had with version 4.0 (that was my first LabView version). LabView has developed in this years, no doubt about it, but the majority of new features are for beginners. I mean things like wizards, express VI´s and things like that. The core LabView application hasn´t changed that much really!<br><br>I will try to list a few things that was a problem in LabView 4.0 and still is a problem in 7.1. I know that there are "work-around" solutions to some of the problems, but I have no interest of building my own IDE/LabView system as I think that NI should have done that work for me.<br><br>LabView problems:<br>* There is still not possible to debug a reentrant VI.<br>* There is still no conditional breakpoints.<br>* There is still no way seeing variables on the diagram when a breakpoint is hit.<br>* There is still an awful icon editor.<br>* There is still no good way of entering code comments without cluttering up the block diagrams with lots of text.<br>* It is not possible to search VI only present on disk and not in memory.<br>The above points are just ontop of my head, there are a lot more if you come to think of it. There are also code bugs and problems, but I´ll leave these for now...<br><br>Enviroment problems:<br>* It is still difficult to use a VCS system as LabView constantly recompiles VIs (marked with a * in the titlebar) making it hard to know what to check in to the VCS system. For example paths to VIs used between different developers might not be exactly the same or simple things like a subvi used that might not have same revision for all developers.<br>* LabView searches for missing VI´s in hidden folders that makes a VCS system like CVS or Subversion hard to use as these programs makes use of hidden folders to manage itself.<br>* The diff tool are only availible in the professional version of LabView and it is (what I know of) only availible from inside LabView, making it harder to do compares from the VCS system of your choice.<br><br>If it wasn´t for GOOP developed by Endevo (I am still using 2.02) I would NOT concider developing large applications in LabView at all with a large team of developers! LabView is good, but the direction for the past 10 years has been for beginners and NOT for more advanced developers.<br><br>/ Roine Stenberg & Henrik Toräng
Beach Comber
2005-07-07 17:40:17 UTC
Permalink
Hello Michael,


I have a brief listing of one of my projects below.&nbsp; I do not know
how many vi's there are but probably over 1000.&nbsp; There are also
applications written to visualize DDR DRAM defects with respect to
their physical location on the die, waffer maps with this and other
testing info.




The system called the
Suss PA 200 &amp; NI waveform generation test suite:






-
Suss PA200 8? wafer
prober with 6 DC servo motorized programmable axis, 7 with proposed
motorized zoom lens and 2 communication links, (GPIB and RS232, both
are required for testing) It should be noted that the SUSS
motion controller does not comply to IEEE 488.2 standards and
requires an additional GPIB controller in the test computer because
it will not co-exist with the other instruments. Good and
proper operation of this machine tool requires PID servo tuning
especially as we continue to add mass to the microscope stages.

-
Trio-Tech 8? thermal
chuck: GPIB interface to control temperature and PID control to
maximize response time.

-
34401A Digital multimeters:
Required for current and resistance measurements there are 2
34401A?s both with GPIB interfaces.

-
3646A programmable power
supply: Required to provide proper power sequencing. The 3646A has
a GPIB interface.

-
National Instruments PXI-1042
chassis with MIX-3 interface:





-
5 HSDIO 6552?s
mixed signal FPGA based 20 channels with simultaneous
acquisition/generation, with per card acquisition/generation voltage
control.

-
1 NI-7811R FPGA
based digital only acquisition/generation system with 160 digital
channels. Necessary for long term testing and future enhancement
and flexibility of the testing systems capability.

-
1 NI-2503 4x6
switching matrix: Required to perform resistance and current
measurements.

-
1 NI-1428 camera
link interface: Required for imaging system. This card will be
replaced with a PCI version running in another computer due to
bandwidth limitations





-
1 Advanced Illumination
S6000 strobe controller: Required for off axis illumination
system. RS232 interface.

-
2 TDS 3054 and TDS 3014
Digital oscilloscope: Required for analog assessment of signal
integrity and VI transfer characteristics.
This scope has GPIB or Ethernet interfaces and a Labview application
to store waveforms on the network.

-
1 Agilent 33120A function
generator and FLC Electronics F20ADI
amplifier to perform VI transfer characteristics
venkatgill
2005-07-31 19:10:41 UTC
Permalink
Hello,

I am pretty new to LabView and DAQ. I want to measure a AC voltage and
Current seperately generated from a single phase power supply range
0-120V AC using the DAQ card NI-PCI-MIO-16E4 and LabView 7.1. I also
have the connector block CB-68LP and the connector wire. I dont have
the pin diagram of CB-68LP and and any example VI from LabView doing
the same work..&nbsp; I also have Current Transducer CTL-101/100 and
Signal Conditioner&nbsp; CTA201P.

ANy help is much appreciated. Any VI or weblink supporting this is needed.

Thanks
walterwalker
2005-08-24 17:45:30 UTC
Permalink
Hi Mike --

I am an EE and self-taught on LabVIEW: four years with Base package, one year with
Full Dev System (the event queue structure is worth it).

I have a body of control VIs (drivers, if you will) for the Microwave and RF test
equipment used in our shop. We design and manufacture LNAs, SSPAs, Frequency Converters,
Line Drivers, etc. I have used LabVIEW to automate many of the repetitive measurements
made by technicians and to calibrate and test our products in a variety of situations.

Among the ATE systems I have developed are two that have been particularly effective
in increasing throughput and uniformity of quality, and they are probably the "largest."

One system uses a PC with a GPIB controller card to control a signal generator, a power
meter, two power supplies, and an environmental chamber. The system controls the DUT
via RS-232 serial. A lot of data is acquired at a number of ambient temperatures and
DUT operating points. A unique set of calibration tables is created from this data,
loaded into the DUT, and then the performance is evaluated at a number of ambient
temperatures and DUT operating points. Failures are trapped, and audible-visible alarms
are sounded using automobile lamps, horns, and turn-signal flashers. As cool as the
whole test is, I get the most comments on the alarm. Go figure.

Another system uses GPIB to control a scalar network analyzer and a sweep oscillator.
Serial ports are used for the environmental chamber and up to three DUTs. An A-D I/O
card is used to control RF switches to multiplex the DUTs onto the scalar measurement
equipment. I built some custom shelves for the environmental chamber, too. Guess what
gets the comments?

LabVIEW is a marvelous tool for this work. GUIs are easy to build, modify, and explain.
Data analysis is great (I have used some of the built-in features, but I still do most
on my own, so any mistakes are mine, and so I don't forget how to do it). File I/O
is something I wrote routines for years ago, and I have not had to monkey with since.
Tests that take a long time save all data locally, then copy it to the LAN server at the
end. If the server goes down during a test, the test finishes normally except for the
backup operation.

Some problems crop up if I re-compile a program in a newer LabVIEW version, but far
more often, I have to re-work a program after a Microsoft Update. The change from
Win98 to WinXP generated some work. For example, the ability to control the RTS line
in real time, used for RS-485 2-wire serial comms, went away with Win XP. I had to
remove the INPORT function, and change to new RS-485 cards that had an auto-switch
feature in the receiver-transmitter.

Thanks for the opportunity to chat.

-- Paul
whatsthis 163
2005-08-25 18:13:02 UTC
Permalink
&nbsp;&nbsp;&nbsp; The application I work with seems fairly large. There's over 400 vi's. About 75 megs. We rely heavily on NI data aquisition cards to communicate with our own hardware. Overall I'm pretty impressed with how easy some things can be in LV.&nbsp;The rest though seem fairly&nbsp;difficult. I do think LV is a great language for some, but it is very undocumented and trying to figure out what it does at times can be frustrating. Especially with how it deals with memory.
&nbsp;&nbsp;&nbsp; To me LV seems very difficult to develop large applications. PLEASE correct me where I'm wrong, I hope there are ways to do some of these things that I have problems with. Multiple developers seems almost impossible to me, merging large files with many differences, and maintaining seperate branches of code in LV is far inferior to text based languages. The fact LV cannot have two VI's opened with the same name is a big drawback. How else can I look at old versions of code while working on new ones? I also just found out about LVDiff, thanks again.
&nbsp;&nbsp;&nbsp; I'm not sure if I'm missing something, but my main GUI vi (about 8MB) has a large amount of controls/indicators; this makes a couple of things very difficult: When creating events, trying to find the control in the event window can take a long time. The variables are not in any worth while order(they seem to be in the order they were created). Can we at least sort them alphbetically? Same thing goes for selecting a local variable out of a list. If the list is long it can take quite a while.
&nbsp;&nbsp;&nbsp; Another large drawback is with arrays and property nodes. Not being able to disable an individual control, or change colors, or...&nbsp;in an array of buttons/controls is devestating to my application.&nbsp;The fact all elements of an array have to have the same properties seem completely against OOP.
&nbsp;&nbsp;&nbsp; The debugger with a large VI is just about useless to me. If I want to watch certain portions of code run, my computer almost locks up. Because labview tries to run everything in parrallel, when I set a breakpoint, then turn on the little lightbulb, it can take many minutes until I actually see my code run.
&nbsp;&nbsp;&nbsp; Saving is also just as large of problem. It can take a minute to save my vi (I&nbsp;am running&nbsp;a p4 3.2G processor with 2GB of ram). The same goes with trying to open the property window of a control. It can take at least a minute at times. WinXP thinks the program is not responding. These things make developing very frustrating. I know I shoudn't have such a large vi, but how else do you make a large complex GUI?
&nbsp;&nbsp;&nbsp; Some other problems I have;&nbsp;with variables, you can't cut/paste them. So your only option is to drag them around (mainly because selecting them from the list is worse and if they're hidden on the front panel I can't create them from there). &nbsp;Again, with a large VI this can take some time scrolling around. Trying to keep the vi looking good takes more time than developing it.
&nbsp;&nbsp;&nbsp; The endless amounts of crashing that occurs in LV&nbsp;is also a pain. The undo command has caused this one many times. The undo stack errases after a save&nbsp;and having undo crash the system, ouch. No way outta that one. Duplicating events also crashes the system pretty regularly. Things that don't really happen in text based languages.
&nbsp;&nbsp;&nbsp; Enums/rings have also been a pretty painful. Because globals don't work efficiently, the only way to use enums is with constants. Once the constants get spread throughout the code, changing them is absolutely unacceptable.&nbsp;What's the better way? I know constatns are a huge NO-NO.
&nbsp;&nbsp;&nbsp; I'm sure I could go on longer and I am well aware that some of the poor design in this system causes some of these headaches, but there also seemed like no other practical way out.
Zura85
2005-08-28 12:41:06 UTC
Permalink
Hey all..
&nbsp;
Im very virgin to this LabView thing so I kinda need your help..
&nbsp;
1. How to datalog ecg signals acquired from a DAQ board?2. How do i save the waveform to a binary file?
&nbsp;
is there anybody that can help me with the programming...
HELP MEEEE..
&nbsp;
Thnks in advance!
altenbach
2005-08-28 17:12:45 UTC
Permalink
Zura85:
Your post is offtopic here as was your <a href="http://forums.ni.com/ni/board/message?board.id=170&amp;message.id=139615#M139615" target="_blank">other</a> post elsewhere. Please start a new thread! :)
dgholstein
2005-08-31 22:13:30 UTC
Permalink
I agree with the wiring and array copying comments made.&nbsp; I too
have used C-based DLL's to do the big work, LabView excells for quick
and easy front ends.

What I'd like to see is an opening up of the LabView controls (beyond
ActiveX).&nbsp; If I want to create a new widget in a C-based graphics
environment I can, I'd like to do the same with LabView, NI needs some
kind of control toolkit.&nbsp; As an example, I'd like to create a tree
control that has non-string column values, booleans, floats,
etcetera.&nbsp; LabView will never anticipate all the controls a
programmer might want, why not open it up to allow a programmer to
create his own?

&nbsp;&nbsp; ...Dan
Electramotive
2005-09-01 01:12:55 UTC
Permalink
Hello,
&nbsp;
My most recent application with labview was a fuel pump controller using pulse width modulation.&nbsp; This actually applied to a UAV and had about 20 vi's.&nbsp; The development of this project carried over from a previous dyno control GUI.&nbsp; Using this along with help off of this message board and the NI phone and email support, the project was completed.&nbsp; Now the testing begins and I am sure I will have more questions to come!
&nbsp;
Earlier this year I helped develop a labview application that was the basis for the control of a Stewart platform which was used for spinal testing as a senior project.&nbsp; This project had about 50 vi's.&nbsp; The development of this project stemmed from the user manuals from the actuators that we had purchased.
&nbsp;
Nick Statom
djs_at_eaton
2005-09-07 01:13:13 UTC
Permalink
I started programming with LabVIEW 5.0 in 1997.&nbsp; I took a basic
and advanced LabVIEW course.&nbsp; My first application used two
cameras, 14 pneumatic fingers, a DMM, GPIB programmable power supply,
and one DAQ card, I think.&nbsp; It was less than 50 VIs to test two
oven controls simultaneously in under 24 seconds.&nbsp; There was no
requirement for revision control or documentation.

The largest application I support now is 176 VIs with very stringent
documentation and revision control.&nbsp; It tests airplane parts, and
the test time is about 45 minutes.&nbsp; I did not write the program,
but when we received it from the vendor only about 25% of it actually
worked as specified.&nbsp; I spent almost 6 man-months making it work,
so I guess it's "mine" now.&nbsp; It would be simpler if the original
programmer had used a state machine, but he called child processes with
server functions instead.&nbsp; It works now, but changes are rare
because it literally takes hours or minutes to fix a problem, but days
to revise the documentation.

Another application runs a 22-hour test in an environmental
chamber.&nbsp; Up to 6 test articles run simultaneously.&nbsp; That
application is 76 VIs, and includes VIs made exclusively to test other
VIs.&nbsp; It has a "simulate" feature that allows running the program
about 30x faster for debug purposes while still retaining the "real
time" DAQ.&nbsp; Both of these applications are subject to Measurement System Analysis, a mathematical method of determining test effectiveness.

The program I'm developing now is over 80 VIs and counting.&nbsp; It
will run two endurance tests for almost a year.&nbsp; The two test
articles have to run simultaneously and independently, yet have a
common interface with both automatic and manual modes.&nbsp; The system
architecture forces the test program to be that way.&nbsp; There will
be two very large test stands, one indoors, the other outside.&nbsp;
One stand has 8 tons of steel weights to move up and down.&nbsp; The
other has a 50Hp motor I will program to "simulate gravity."&nbsp; I
also built simulation into this program, because no hardware or test
articles will be available for some time.

No, I'm not too worried about running that long with a Windows OS
(2K).&nbsp; I have another endurance application that's been running
almost two years without a problem.&nbsp; The only time the computer is
turned off is when power fails.&nbsp; LabVIEW programs can be very
stable.&nbsp; And also, "No, I don't have great affection for Microsoft
either."

My first programs were relatively unstructured and not well
documented.&nbsp; However, you learn very quickly that you don't
remember what you did or why.&nbsp; Document those babies!

One very helpful book is Conway &amp; Watts A Software Engineering Approach to LabVIEW.&nbsp;
State machines and messaging make programming large apps much
simpler.&nbsp; Large applications can cause huge problems if you don't
spend the time up front to plan a reasonable system.&nbsp; I have a
background in circuits and mechancal design.&nbsp; Software design is
similar.&nbsp; Know the overall function and break it up into smaller
testable pieces.&nbsp; Do that in your head first.

I'm impressed with the documentation capabilities built into
LabVIEW.&nbsp; It's obvious someone thought seriously about it.&nbsp; I
like the graphical approach.&nbsp; I programmed in PASCAL and
assembler, and structure in LabVIEW is so much easier to find than in a
text language.&nbsp; I don't have the professional versions, but have
made utilities of my own to extract revision data from VIs and export
hierarchies to EXCEL files.&nbsp; I don't know if present-day advanced
courses teach this aspect of programming, but they should.

LabVIEW started as a way to get measurement data into a computer, bu
mikeporter
2005-09-09 04:12:56 UTC
Permalink
What to say, what to say, what to say... How about:
"A poor workman blames his tools..."
Every one of the problems you mention comes from not LV, but from your&nbsp;inability to&nbsp;write usable code. Before trashing LV perhaps you should learn how to use it properly first. Or perhaps you should have your meds checked. Anyone who would make a statement concerning LV that "...you can't reuse your source code..." is clearly out of touch with reality.
BTW: The last C code I wrote to get around a short-coming in LV was in about 1993...
Mike...
PS: Don't bother flaming me in reply. Your opinions mean nothing and I won't be wasting time reading any more of them.Message Edited by mikeporter on 09-08-2005 11:53 PM
Jaime Rodriguez
2005-09-09 12:13:38 UTC
Permalink
I am having trouble with Labview DSC module. WHen I install it on my PC
the windows shutdown HANGS. However if I uninstall all Labview
software, my PC goes back to normal. Something is getting in the way of
the power down of the computer. Has anyone had eny experience with this?
shoneill
2005-09-09 12:43:26 UTC
Permalink
Mikeporter,

here, here!

Lack of knowledge or lack of skill is no excuse for doing things wrong.

I've never encountered a LV app (small OR large) that "automatically"
creates copies of large arrays.&nbsp; Learn how to program properly and
all these seemingly horrendous problems will simply go away.&nbsp; And
yes,&nbsp; programming in LV IS DIFFERENT than programming in Pascal or
C.&nbsp; Different, but just as capable of up-scaling.&nbsp; In fact I
would argue that the visual programming style (once you've gotten used
to it, which you perheps haven't yet) makes it EASIER to scale up a LV
project.

As to not being able to reuse code, I have functions and code I've
written years ago and I'm constantly dropping them into my current
code.&nbsp; If you program them properly, they will be reused.

Shane.
Brittner
2005-09-09 12:43:32 UTC
Permalink
Sorry,
maybe you didn't understand what i meant to say. I didn't expect to hurt you personally, when I talked about LabView. I am just interested to find the best way to work with LabView. For me it is a tool and nothing else.
If you start the 'Show buffer allocation' you will find out where LabView makes copies of your data automatically. Maybe the buffers are reused. But I am astonished that my application needs 10 times more memory when I increase the array sizes, than I expected from the memory I neeed to store the pure data.&nbsp;On a PC platform&nbsp; it is no problem, I increase the memory to 1GB an everything is fine. But unfortunately it is not possible to do that on a cRio platform there is no 1GB machine.
If I am a so bad software developer and you are so much better than me, take some time and explain it to me.
Otherwise if you don't want to see comments like mine on your disussion forum, i beg the administrator to&nbsp;delete my&nbsp;message. It was not my intention to pollute your side.
Hope you can except my excuse.
Best regards
&nbsp;
&nbsp;
shoneill
2005-09-09 13:13:54 UTC
Permalink
Brittner,

I don't feel hurt personally, it's simply a matter of expressing
opinions.&nbsp; Your opinion is valid (for yourself) as is everyone
else's (for themselves).&nbsp; As such there's no overlap, and also no
reason to feel hurt.&nbsp; :smileytongue:

I don't have the "show buffer allocation" tool, because I'm working
with LV 6.1.&nbsp; There are some rules to wiring large data sets which
can greatly avoid memory overhead.&nbsp; When working with large arrays
and basically just reading values, even from sub-sets of the original
array (without modifying the array) make sure to wire the array through
the structure or sub-vi you're doing the work in.&nbsp; This will
actually AVOID copies.&nbsp; It seems counter-intuitive because you're
passing the array to a sub-routine (which kind of suggests more
copying, not less) but the LV compiler is "smart" enough to realise
you're not chenging the array and passes it "Byref" instead of
"Byval".&nbsp; At least that's my understanding, but I don't have a
formal programmer training, so I may be wrong.

LV is a different programming language (and indeed paradigm) so it DOES
take time to learn the subtelties.&nbsp; I can also understand that 10
copies of a 10MB array doesn't seem like a subtelty when it happens
unexpectedly, but there's always a way to avoid it.&nbsp; This is
another reason why everyone says local and global variables are
bad.&nbsp; Each one generates a copy......

I don't take exception with your programming skill, quite the
contrary.&nbsp; If I think back at what I did with LV when I started I
shudder and a shiver runs down my spine.&nbsp; What I did take
exception with (on a factual level, not a personal one) was your
damnation of LV due to something which CAN be avoided when you know how.

I don't think your post is "polluting" anything.&nbsp; It's important
to have different views, but it's also important to be willing to learn
something instead of quickly blaming something as being faulty.&nbsp; A
quick question as to why LV creates so many copies instead of claiming
it simply "automatically" creates copied would have generated a totally
different response, and would have most likely lead to several people
taking time to explain things to you.&nbsp; In this way, everyone wins.

On a side note, I don't accept apologies where they're simply not
neccessary.&nbsp; Don't worry.&nbsp; I don't fly off the handle quite
that easily.

Shane.

PS for some understanding of code optimization in LV, check out the
past coding challenges.&nbsp; They're a gold mine of speed
optimizations.....
Message Edited by shoneill on 09-09-2005 03:12 PM
billings11
2005-09-09 13:43:14 UTC
Permalink
Brittner,
&nbsp;
When you use local variables I believe labVIEW creates duplicate copies of the stored data in memory.&nbsp; So if you have a 1000 pt array and call 10 local variables of it, you will end up allocating memory for 10,000 data points.&nbsp; Try using property nodes instead.
&nbsp;
Also, in an above post you said "there is nothing like object oriented classes".&nbsp; This is not true.&nbsp; There are many easy ways to create objects and classes in LabVIEW.&nbsp; Do you know how to use typedefs in your labview code?&nbsp; You can use typedefs of clusters to create the equivalent of c++ structures.&nbsp; You can create subvi's with these structures that contain a while loop with a shift register containing the data.&nbsp; These are sometimes called functional global variables or FGV's.&nbsp; These have limited use, but you can also have something similar to FGV's that accept action commands and actually can do operations on the data fields based on a command.&nbsp; You are in control of everything, and you can certainly have all the power of c++ classes.
&nbsp;
I think the true beauty of labview is that you should never have a project that takes 10 man years of labor.&nbsp; I've never seen one taking more than about 2 man years, 4 skilled large application developers should be able to finish developing the most gigantic project in 6 months what it would take four visual basic developers 10 years.
&nbsp;
Part of the problem is that there is not easily accessible training for large application developers.&nbsp; Indeed, it does concern me a lot that NI seems to be pushing more toward simplistic student oriented features like express vi's (useless outside of a college lab) instead of focusing on expanding the power of labview as a complete programming language capable of handling large applications with very&nbsp;rapid development.&nbsp; Event structures really revolutionized labview for large applications.&nbsp; They need to keep working in that direction.
&nbsp;
You are right, they could definitely use a project manager that organizes and also tracks subvi changes.&nbsp; Also, the application builder is far too simplistic and dumbed-down.&nbsp; They need an advanced application builder that gives me much more power.&nbsp; They need a windows connectivity toolkit that gives me better access to environmental variables and lets me reparent windows.
&nbsp;
But still, LabVIEW offers by far the most cost effective and fast solution, and has all the power necessary to build very large applications.
PJM_Labview
2005-09-12 14:43:17 UTC
Permalink
Hi Billings,

You said: "Also, the application builder is far too
simplistic and dumbed-down.&nbsp; They need an advanced application builder
that gives me much more power."

You should really try the <a href="http://www.openg.org/index.php?option=com_content&amp;task=category&amp;sectionid=4&amp;id=68&amp;Itemid=47" target="_blank">OpenG Builder</a>, it has a lot more features than the NI Application builder and is truly a great tool. You can get it through the <a href="http://prdownloads.sourceforge.net/ogpm/openg_commander-2.0-alpha3.zip?download" target="_blank">OpenG Commander</a>.

Best of all, its free.

Regards

PJM
fliyer
2005-09-17 09:42:55 UTC
Permalink
Our typical application is 400-500 vi's, we have to be very precise about memory management limiting the number of global variables and so on.
&nbsp;
K C
2005-10-05 08:40:38 UTC
Permalink
Reading the title of this thread, I asked myself: what a large LabView application is. Can it be measured by the number of VI?s or the time you spend making the application or ??
&nbsp;
My first introduction to LabView was a demo with version 3. After this introduction I made my first application with LabView 4. A tester for a small PCB with a microcontroller we produced for one of our customers. The tester, with a bed of nails adapter, was build with SCXI modules.Not enough time to do things the right way and little knowledge how to make a good LabView program. Afterwards I think I did al lot of things the wrong way but the tester was in production for a lot of years at the company where I was working at that time and still is by someone else.
During last 10 years I made a lot of LabView applications. Large and small ones.
Currently I am working on a Go-No-Go tester for about 30 different safety modules. (See <a href="http://www.yokogawa.com/iss/products/iss-en-prosafe-sls-plc.htm" target="_blank">http://www.yokogawa.com/iss/products/iss-en-prosafe-sls-plc.htm</a>: ProSafe-SLS) Each module is one Euro-PCB with a 48 pole DIN connector. With only e few standard signals.&nbsp; The tester is build with a PXI rack with a DMM and Matrix-switch (66x16). The Matrix-switch is used to be able to test all the different modules with one UUT connector. Also some boards from the ProSafe-SLS modules are used in the tester.The tester must be useable in a factory environment and give the operator enough information about the found error. The test-program for a module is a plain text file (test-script) with commands for the tester. The LabView program executes these commands.In short: The LabView program must translate the commands in the test-script, set the Matrix-switch, communicate with the SLS board (Modbus), take the measurement, and decide about Go or No-Go.Is the LabView application large? It?s about 200 VI?s and it took me about 6 months to build everything (hard- and software)
I am still very enthusiastic about LabView. When I have to program something (at home or at work) I use LabView.
&nbsp;
DavidMundie
2005-10-25 16:40:48 UTC
Permalink
I have an application that is a full web based backend that gets data
readings from remote units via email with binary attachments and sends
command to remote unit via email as well.&nbsp; Each site has a custom
web page and a custom vi that monitors that sites data and provides a
graphic representation of the current data.&nbsp; Customers use a menu
based web interface to request excel reports (generated in LV, and
graphs of data history generated on requiest using about 100 CGIs all
writen in labview.&nbsp; There in on main message processing VI that
receives the email messages extract the data and operates based on the
contents.&nbsp; About 40 vis monitoring data files looking for changes
generated by the message processor that update their front panels. and
100 or so CGIs.&nbsp; We us the G-Web server obviously and upon request
we set up password protection for access to the customer site and allow
him to manage his own usernames and passwords again via CGIs and html
forms.

In effect this is a web based virtual scada system for customers that don't want to invest in a stand alone scada system.

Typical customer site looks like this:&nbsp; www.httscada.com/rcud
TerryR
2005-11-04 00:13:12 UTC
Permalink
I can't figure out how you count the # of VI s in the first place.&nbsp; And is a large application based on the number of I/Os and calculations?
My first application&nbsp;was a system controller with only 32 DIO&nbsp;15 Analog In, 8 Analog out and 4 rs232 ports (2 streaming data in and 2 pull/response mode) and datalogging.&nbsp; Among the other calculation and charting I would only consider this a small to medium application for LabView.&nbsp; I am guessing 50-60 VI s
As for its performance is it is big,&nbsp; Development time under&nbsp;3 months.&nbsp;
(Development time&nbsp;would have been less if&nbsp;more time was put into the requirements up front.)
NavyJack
2005-11-09 21:11:36 UTC
Permalink
I am
involved in the system design and software development of automated
test systems for the AIM-9M Air-to-Air Missile Guidance Control
Systems.&nbsp; These systems are used to test all aspects of the
missile flight control systems.&nbsp; LabVIEW is used to control the
system and obviously to obtain all data collected by the system.&nbsp;
It takes over 90 minutes to completely test a system in fully automatic
mode, and quite honestly has more VI's than I've ever cared to
count.&nbsp;
mcsynth
2005-11-11 17:43:27 UTC
Permalink
Hi Mike,
I completed a large project about 2 years ago using LV 6.1RT, 1 PC, 6 PXI-8175s and 12&nbsp;FP-2000 modules.&nbsp; The task was to durability&nbsp;cycle 36 automotive GDI (gasoline direct injection) pumps, each with independent test cycles,&nbsp;calibrations, and fuel control&nbsp;in an explosion proof test cell.
The arrangement was 6 test stands of 6 pumps each.&nbsp; Each test stand required 1 PXI-8175, and 2 FP-2000 controllers.&nbsp;&nbsp;Each set of&nbsp;2 FieldPoints talked to a PXI, and each of the 6 PXIs talked to the PC, all on a isolated 24 channel ethernet hub.&nbsp; The PXI program managed all the control, safety monitoring, and data collection.&nbsp; One FP 2000 handled all high power switching, and one FP-2000 handled all DAQ.&nbsp; The PC provided operator&nbsp;control of&nbsp;one test stand or one pump at a time (except for global shutdown), and data collection and analysis for all 36 pumps.&nbsp; The overall system must run 24 hours a day, 365 days a year, with each stand&nbsp;and pump being totally independent of the others.
There were also numerous non-LabVIEW systems, such as closed circuit video, vapor and spark monitoring, and fire safety (CO2) systems.
The breakdown per test stand:
Located in a non-gasoline environment adjacent to the gas cell:
One&nbsp;PXI-6713 provided 6 analog outputs to control each of the six 5hp drive motors to spin 6 pumps.
One&nbsp;PXI-6602 provided the PWM control outputs to high current drivers to control the fuel output of 6 pumps
One&nbsp;FP-2000 with 2 FP-RLY-420s and 1 FP-DO-401s provided the power management of all 120VAC and 480VAC circuits.
Located&nbsp;near the ceiling of the gasoline environment, above the vapor line:
One&nbsp;FP-2000 for DAQ with 1 FP-AI-100, 3 FP-TC-120s, 2 FP-CTR-502s, 1 FP-DI-301, and 1 FP-RLY-420.
The biggest challenge were developing all the TCP/IP VIs.&nbsp; Most important was to isolate from the house intranet, and to set the relative timing between the many commo loops on all platforms.&nbsp; Another huge problem was to get the PC interface to disengage from one of the 36 control loops, and to engage any one of the other control loops, read the current status, and then take control without any crosstalk between commands or data.&nbsp; The operator only interfaces with one stand/pump at a time, and it was tough to get in and out of each control loop without causing any adverse effects.
The system has been running 24/7 for 2 years now with an occasional shutdown (every few months) for mechanical&nbsp;and fluid maintenance.
Best regards,
mcsynth
Uttam Kotdiya
2005-11-19 11:40:09 UTC
Permalink
We had developed a Energy management system using Labview /Labview DSc ( 6.1 )&nbsp;and Oracle and some delphi DLL. It had about 100 vi's. The software collects the data from energy meters using MODBUS protocol from 8 comports simultanouesly and show the data online in gauge , graph and tabular fasion.&nbsp;There program automatically tranfers Citadel data to Oracle database for power ful reporting.It also shows alamrs and generate about 150 different&nbsp;reports. &nbsp;Though&nbsp;labview had some very good feature&nbsp;and looks very impressvie which increase the prodcutivity to develop such online monitoring applcation. We are able to read and log and view about&nbsp;4000 tags within 30 seconds. We had&nbsp;more then 20 installation of the product.&nbsp;
But the biggest problem with labview is that it is not stable and the functions mentioned in user manual do not work as it. and after wasting so much time you found that this is known bug of labview. Below is my mail which I had put in serval mail group and forum&nbsp;and got the answer that Labview new version may fix this. But I am afraid is Labview 8 is a stable/ bugfree&nbsp;version and Labview is bundled with so many features but&nbsp;it have frequent problem of&nbsp;data corruption and there is not easy way to recover. Also many times DSc engine stop working after some erros like "Input queue compacted". One more problem when using network tag it will continue showing the Last tag value even is the server is stopped
My suggestion is that NI should&nbsp;should also focus on quality of LAbview and Labview DSC along with the feature set. Unless NI focuses on quality,reliability &nbsp;and stability it will remain as procuts for LAbs and academic purpose and cannot be used in commercial product.
&nbsp;
my earlier mail


My application continueously monitors the energy meters and log data into citadel database. There are on average 2000 tags polled every 30 seconds. I am getting Citadel corruption problem very frequently (every 20-25 days). Once the data base is corrupted I am not able view in historical data viewer/ Max explorer or query through ODBC. Also archive vi also does not work on that data and only option is to manually delete that data using windows explorer. As we are product based company and the sale of software is picking up so it is difficult to support if database is not reliable.Can anyone tell me the ways/tip to minimise the database corruption possibilities. I had tried to keep the data for only 15 days in Days to keep historical files in Tag confiuration editor but that does not help as it does not remove data automatically. I had increased the polling time to 60 seconds but this also does not helped I am having very bad time explaining such frequent corruption to my customers as we pay big license fee for Labview DSC Runtime and it works so badly.&nbsp;
Loading...