Studying a Big LabVIEW program

In the past, when I had a to modify a big and messy program (with only 2% of documentation), I will study it without a set method, and when I have an adaquate understanding of the program, I would re-code it from scartch, since the original program is messy.
Right now, I am looking a piece of code that is big, but not too messy (just sort of messy and with ouly 2% of documentation).  I think I can understand the whole program if I have the right approach to it.  I need to come up with the right method to understand the program, so that I don't get too frustated and quit my job .  Below is my approach, please comment and also let me know what's your approach.
1. Understand the flow of the program
2. Clean up the block diagram.
3. Go through each subvi and document each of them.
4. Understand how the program interact with input and output
Kudos and Accepted as Solution are welcome!

jyang72211 wrote:
I think I can understand the whole program if I have the right approach to it.  I need to come up with the right method to understand the program, so that I don't get too frustated and quit my job .  Below is my approach, please comment and also let me know what's your approach.
1. Understand the flow of the program
2. Clean up the block diagram.
3. Go through each subvi and document each of them.
4. Understand how the program interact with input and output
This looks like a pretty good approach.
I think there's actually a Refactoring Checklist in the LabVIEW Core 2 training materials.
This webcast may be helpful too.
NI Webcast on inheriting code

Similar Messages

  • Case study: "Large?" labview programs flooded with different VIT's

    Case study: "Large?" labview programs flooded
    with different VIT's
    Type of application:
    Computer with loads of individual hardware connected or other software (either
    onsite (different buses) or offsite (Satelite/GSM/GPRS/radio etc.).
    Hardware
    description: little data "RPM" but communications to all devices are intact.
    More "RPM" when many VITs are involved.
    Size: 1000+
    VITS in memory (goal). Total software has been tested and simulated with 400.
    I'm posting
    this post after reading this thread (and actually I cant sleep and am bored as
    hell).
    Note: I do
    not use LVOOP (but sure post OOP examples, am starting to learn more and more
    by the day.)
    Things I
    will discuss are:
    Case 1: Memory usage using a plugin
    architecture
    CASE 2: memory usage using VITs (!)
    CASE 3: updating datastructures:
    CASE 4: shutdown of the whole system
    CASE 5: stability & heath monitoring
    CASE 6: Inifiles
    CASE 7: When the hardware is getting crappy
    Total
    application overview:
    We have a
    main application. This main application is mainly empty as hell, and only holds
    a plugin functionality (to register and administer plugins) and holds an
    architecture that holds the following items:
    Queue state
    machine for main application error handling
    Queue state
    machine for status messages
    Queue state
    machine for updating virtual variables
    Event state
    machine for GUI
    Some other
    stuff
    Other
    global functionality is:
    User
    logins, user configurations and unique access levels
    Different
    nice tools like the good old BootP and other juicy stuff
    Supervision
    of variables (like the NI tag engine, but here we have our own datastructures)
    Generation
    of virtual variables (so that the user can configure easy mathematical
    functions and combining existing tags)
    Licensing
    of plugins (hell we free-lance programmers need some money to don't we?)
    Handles
    all communication between plugins themselves, or directly to a plugin or vice
    versus.
    And now we don't
    talk about that (or marketing) the main application .
    Message Edited by Corny on 01-20-2010 08:52 AM

    CASE 3: updating datastructures:
     As we do NOT use clusters here (that would
    just be consuming) we only use an 1D array of data that needs to be updated in
    different functional globals. If the the number of VITS exceeds so that the
    updating of this datastructures becomes the bottleneck, this would cause
    delays. And since in this example we use 250 serial interfaces (lol) we do not
    want to disrupt that by any delays. When this happends, does anyone know a good
    solution to transfer data?
    A thought:
    perhaps sending it down to the plugin and let the plugin handle it, this should
    save some time, but then again if more VITs are added again this would become a
    bottleneck and the queue would fill up after a while unable to process it fast
    enough. Any opinions?
    CASE 4: shutdown of the whole system
    Lets say we
    want to close it all down, but the VITs need perhaps to do some shutdown
    procedure towards the hardware, that can be heavy.
    If we ask
    them to shutdown all together we can use an natofier or userevent to do this
    job. Well, what happends next is that the CPU will jump to the roof, and well
    that can only cause dataloss and trouble. The solution here was to let the
    plugin shut them all down one by one, when one has been shutdown, begin at the
    next. Pro; CPU will not jump to the moon. Con's: shutdown is going to take a
    while. Be ready with a cup of coffee.
    Also we
    want the main application not to exit before we exit. The solution above solved
    this as the plugin knows when all have been shut down, and can then shut itself
    down. When all plugins are shutdown - the application ends.
    Another
    solution is to use rendovous (arg cant spell it) and only shut the system down
    when all rendezvous have met.
    CASE 5: stability & heath monitoring
    This IS
    using a lot of memory. How to get it down. And has anyone experienced any
    difficulties with labview using A LOT of memory? I want to know if something
    gets corrupt. The VITs send out error information in case, but what if
    something weird happens, how can I surveillance all the VIT's in memory to know
    one is malfunctioning in an effective way/code (as backup
    solution  so the application knows
    something is wrong?
    CASE 6: Inifiles
    Well, we
    all like them. Even if XML is perhaps more fahionally. Now Ive runned some
    tests on large inifiles. And the labview Inifile functions use ages to parsing
    all this information. Perhaps an own file structure in binary format or
    something would be better? (and rather create an configuration program)?
    CASE 7: When the hardware is getting crappy:
    Now what if
    the system is hitting the limit and gradually exceeds the hardware req. of the
    software. What to do then (thinking mostly of memory usage)? Needing to install
    it on more servers or something and splitting configurations? Is that the best
    way to solve this? Any opinions?
    Wow.  Time for a coffee cup. Impressive if someone
    actually read all of this. My goal is to reach the 1000 VIT mark.. someday.. so
    any opinions, and just ask if something unclear or other stuff, Im open for all
    stuff, since I see the software will hit a memory barrier someday if I want to
    reach that 1000 mark hehe

  • How do I use directional PDA buttons in LabVIEW programs?

    Hi all,
    I've been assigned to get a LabVIEW program to work on a Palm PDA with LabVIEW 7.0 and palm PDA module 7.0.  I am basically totally new to LabVIEW, and my possibly very simple problem is, the PC program requires input from a serially connected number pad for the 8, 4, 5, 6, and 2 keys which are used as four directions (8, 4, 6, and 2) and an enter (5). 
    I am trying to rewrite the input vi to use the directional buttons and middle enter button on the PDA itself but am having trouble figuring out what to use.  I am using a PDA simulator because of the PALM OS5 we own.  The input demo vi example provided will not build for PDA because of size so I am unsure of how to approach this.  Another thing is, we have LabVIEW and PDA module for pocket PC 8.0, and a Dell Axim PDA on order.  From what I understand off of this website, the latest PDA module has example button vi's.  I would still like to figure out the way to do this on 7.0 so I can have a better understanding of LabVIEW.  Eventually the program's endgoal is to be used on a PDA and inputting with a bluetooth keyboard, but we are going step by step right now.
    I guess my biggest questions are, how do I assign the directional buttons on the PDA in my program, and will this differ greatly when we switch to 8.0 and pocketPC.
    Oh and I did try to look at the example asteroid.vi but from looking at the input subvi, still couldn't figure out how they assigned the buttons.
    Thanks,
    Stephen

    I can't help with any specifics (no access to the PDA module at the moment and I didn't use the buttons anyway), but I would like to say that it probably would make a big difference if you used LV 8. 7.0 was the first version of the PDA module and was extemely limited and problematic (it didn't even have a tab control). 7.1 was somewhat better and I understand that 8 is even better (although still very limited and buggy).
    I also remember reading about several differences between Palm and PocketPC and I think you will generally be better off with the PocketPC as it's related to windows and will probably support more stuff.
    Try to take over the world!

  • HP4275A can not pass self test after running the labview program

    I am using Labview to control HP4275A LCR meter. The Labview program is just the instrument driver for the HP4275A, and it works great. Before running the program, the instrument can pass both Open and Short test perfectly. But after running the program, it can not pass self test, neither Open nor Short. I don't know why?? Is it relative to my Labview program??
    Thanks

    Thank you so much for your help. Yes, the instrument is in Local after running the instrument driver. In normal Open self test, just choose Capactiance as the Display A, and leave the four output terminals open then press the Self Test button. The Open self test will start and "OP" will be shown in the DIsplay A window, after 2 seconds, the open test will be finished. If something abnormal, the number of the abnormal step is displayed in Display A. Similar with the Short test.
    The problem I had was: before running the instrument driver, the self tests pass; but after running the instrument driver, the Open and Short test show abnormal, Open test is abnormal at step 17, and Short test is abnormal at step 24.
    And the instrument driver is only write commands into the instrument and then read back measuring values from it. Nothing else. So I am not sure if the problem is my instrument driver.
    The weird thing is the problems happened several times and then if I do the Open and Short self test again after running the instrument driver, both pass. I am not sure whether the problem will come back or not.
    Ia there any help??
    Big thanks

  • How to open labview program with Quit Labview function inside?

    Hi Any idea how to open labview program with  Quit Labview function inside?
    I forgot to add and set the condition of the type for this program.
    If the program is an application, it would close straight away.
    If it is still labview work, it will go straight to editing program without closing.
    So I need to recover, open it and make some changes.
    Clement
    Solved!
    Go to Solution.

    Put the VI in a project and open it from there, then it shouldn't autorun. You can use App.kind property of application to decide whether to close or not.
    /Y
    LabVIEW 8.2 - 2014
    "Only dead fish swim downstream" - "My life for Kudos!" - "Dumb people repeat old mistakes - smart ones create new ones."
    G# - Free award winning reference based OOP for LV

  • Can multiple LabVIEW programs simultaneously access the same NI-DAQmx hardware?

    I am developing a test station system that, in essence, runs several
    seperate LabVIEW programs simultaneously on the same computer, each
    controlling a different set of I/O channels on one shared set of NI
    DAQ hardware (analog and digital I/O PCI boards with external signal
    conditioning).
    I have already gotten a system like this running almost flawlessly
    using LabVIEW 6.1, NI-DAQmx 7.1 with traditional channels, and older
    E-series DAQ hardware. So long as two programs do not try to write to
    the same output channel simultaneously, everything works exactly as
    expected--I can even read from the same (named) channel simultaneously
    from more than one program. The only issue I have had is that if
    one
    of the compiled applications is closed (not just stopped, but closed)
    while others are still running, Windows XP (SP1) will bluescreen on a
    driver error. This is undesireable, but acceptable (though if there's
    a fix/workaround, I'd love to hear it).
    I am now building a similar system using mostly the same software
    (with an upgrade to LabVIEW 7.1), and I've noticed that the new
    M-series DAQ hardware seems to offer much more bang for the buck than
    old E-series hardware and its kin.
    My question is this: It appears that I/O on M-series hardware must be
    performed with new mx channels, with traditional channels not being an
    option. I am therefore wondering if I will be able to do this kind of
    multiple simultaneous access with mx channels, or if I must purchase
    the classic hardware and use traditional channels for this somewhat
    unorthodox application.
    (Incidentally, the multiple simultaneous program thing is a
    requirement for this system, as it is the only clean way to run
    multiple
    identical copies of the same complete program that only
    operate on different I/O channels, and re-doing the program from
    scratch is not an option.)

    Dear Anonymous,
    Thank you for contacting National Instruments.
    To address your question, I don't know if multiple simultaneous access with mx channels is possible, but I do not see why it wouldn't be. The best way to find out would be to test it. I don't have your program or hardware, so I'm pointing you to some Compatibility VIs. These are VIs that look exactly like Traditional DAQ VIs except that underneath they call the DAQmx driver instead of the Traditional DAQ driver. If your device works when you substitute these Compatibility VIs in for the Traditional DAQ VIs, then you'll know the M Series boards will work for you.
    Here is the link for information about the Compatibility VIs:
    http://digital.ni.com/softlib.nsf/954feaeea92d90918625674b00658b
    83/9d67f671bcc6850586256e630059308b?OpenDocument
    Let me know if you have any further questions or if this does not resolve your issue.
    Thanks again and have a great day!
    Chad AE
    Applications Engineer - National Instruments

  • How to get a signal from the serial port to start a labview program?

    I need to synchronize the data obtained from a program (which is not in Labview)with the data collected with Labview on a different computer. I can send some data strings to the serial port of the computer running the Labview program when the other program starts. However, I need to be able to read the trigger in my Labview program. Do you know what I should do? Thanks.

    If you don't have any other programs listening on the COM port, you need to let a LV program run BEFORE the signal comes, otherwise you won't be able to read it. You can have the program wait in a slow timed loop so that it doesn't use up too much CPU time, and when the required "trigger" comes, to move into the main part of the program.
    You basically need a while loop waiting for a certain string in the serial buffer. Once the string is found the while loop is exited, and the data acqquisition or whatever else you require from the progam can be performed.
    In the example attached the program wait for ANY text to be sent to the COM port. Please note that you need to configure the VISA resource before using it. Once there is something at the COM port, the loop will exit and the rest of the program will be executed.
    Hope this helps
    Shane
    Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2)
    Attachments:
    Wait for serisl message.vi ‏17 KB

  • Error when running the LabVIEW program

    hello...........
    I'm newbie in LabVIEW....I have a problem when i'm running the LabVIEW program...i want to analyse data using the LabVIEW through the real experiment....
    My problem is, there is an Error when i try to start the program...This Error forced me to restart the program several times until it can run.......By the way, i'm using Picoscopes 3206 to connect the LabVIEW program in PC with the real experiment.....
    Here, I'm attached the picture that I snap when the Error occur....
    Attachments:
    error.JPG ‏222 KB

    You have to try to isolate the problem...
    Use 'Diagram disable' or 'Case' structure to run special part of code or try write a specific code to access and manage your equipment.
    Several questions could help: 
    - Are you up to date with your hardware driver?
    - Do you call external ressources (ex: dll)? perhaps with instability
    - Do you properly close connection with your equipment after using? 
    - With your offline mode, do you load all the code, including hardware driver or do you use a special method without no loading the specific code?
    - When you are able to run after many tries, is the program stable? Can you re-start it without exiting LabVIEW?

  • Modification of Global channels In NIMax while Labview Program running, not updating in Labview

    Hello,
         Okay, here is my issue.  I have a program that reads data from a device using global channels in MAX.
    Step 1:  I open MAX with the systemExecute.vi with the parameters to wait till program finishes.
    Step 2:  I Modify a channel in Max, for example change the assigned daqMX Scale, or Min Max values.
    Step 3:  Save channel in Max.
    Step 4: Exit MAX with the file exit.
    Step 5: The Labview program continues, and I re-read the available global channels and global scales in the Labview vi but the properties have not changed to match what I change in MAX.
    If I stop the VI then start it again and read the global channels then the properties get updated.  How can I get the channel properties to update in Labview after changes are made in Max without stopping the labview vi and starting it again?

    Many properties of the channel can only be modified when the task is not running.  Have you tried stopping the task in LV before modifying the parameters, and then re-starting the task?
    Dan

  • I can not create an Installer, After install the Vision Builder Demo and then uninstall it. I can not create a Labview installer anymore, it asks me for a Vision Builder Installer, even if My Labview program does not have nothing to do with it...

    I can not create an Installer on LabView, After install the Vision Builder Demo and then uninstall it. I can not create a Labview installer anymore, it asks me for a Vision Builder Installer, even if My Labview program does not have nothing to do with it...
    Solved!
    Go to Solution.

     Hi Shada this can happen if you are including additional installers to your installer for example DAQmx. When you are doing this the installer has to include other files like MAX (Measuremente and Automation Explorer). Probably when you installed Vision Builder it updated MAX, so when your installer is trying to Include MAX, its asking for the source where it was installed in your computer in this case Vision Builder.
     Here you can cache the information so its not asked again, or you can download a newer version fo DAQmx, so it will update MAX and change de dependecy.
     You can find more details about this issue in this KB:
    KnowledgeBase 3S88PJMY: Why Do I Get A "Missing Distribution" Error When Trying to Build an Installe...
    And for keeping a copy here is more info:
     How Do I Stop the Missing Distribution Notification Each Time I Build An Installer?
    Best Regards
    Benjamin C
    Senior Systems Engineer // CLA // CLED // CTD

  • Using APT ActiveX methods to create a labview program for BPC 203 3 channel Benchtop Piezo controller

    Hi Everyone,
                      I am really very new to Labview and i am in great need for some help.I am assigned a task where i am supposed to create a labview program to control or moniter a BPC203 3 channel benchtop  Piezo controller. I created a program with the help of the instructions provided in the APT-Labview guide provided by Thorlabs.But th program doesnt run . Whenever i try to run it i get the same error which says that "Control HW Communications disabled".I have attached a snapshot of the error message.So i tried to create a small program in labview which would read the volage output.Even there i got the same error message.I suppose there is some mistake on my part which i am not able to correct due to the lack of proper knowledge.Could anyone please help me to solve this problem.A slight elaboration would be highly appreciated.Also i think the error lies in the use of invoke node with the get Voltage output method. I am not sure whether the parameters i have provided to the invoke node are correct.Any help of any sort would be highly appreciated.
    Attachments:
    Front Panel with error message.PNG ‏202 KB
    Block diagram.PNG ‏101 KB

    Hi
    I had the same problem today. However, I noticed that the piezo controller has 3 channels with separate slots and they are packaged in the same box. Therefore the whole box has a serial number, probably something like 71822280, and this is written with large letter. Now, in order to communicate with any of the channels, this does not help, but one needs to communicate directly with the interested channel and they have thier OWN SERIAL NUMBERS.
    For example channel 1 (my X direction in the nanoMax stage) has serial 91822281, Y has 91822282 and Z has 91822283. So try looking if you have the right serial number Hopefully you found out this yourself but this might help others, I took me3 hours to get this thing working when I started to plug-in the cables and everything.
    Lasse

  • How do I make a labVIEW program for a linear CCD camera?

    Hi, I'm pretty new at LabVIEW and I'm having a hard time figuring out how to connect my linear CCD image sensor (Toshiba TCD1304AP) with my computer. I know I need a DAQ device, what would work best for this particular CCD? After I got that connected, I need to create a LabVIEW program that displays the light detected by my CCD. Does anyone have a similar program or template I can use as a model? Any help would be appreciated. Thanks.

    Hello,
    I'm not sure the type of signal that is generated as an input to a DAQ device. This could either be an analog or digital input. The signal type will determine how you make your program in LabVIEW. You will also need to correlate the signal level to the light detected. That will be determined by your sensor. I don't have any programs or templates for this, but if you look at the basic analog or digital input examples, you might get a good starting point for DAQ device programming.
    -Zach
    Certified LabVIEW Developer

  • How to create a labview program and use it as a compiled prgram

    I am a mechanical engineer, and I have some formulas and equations that I used to obtain maximum thickness of pipelines and also in the design of steel structures, what I need now is to use Labview to put these huge number of formulas in one program. I can do that, but the problem after I make the program I want it to be used by anybody on  any PC which is not installed Labview on it, and that is the problem, I don't know if I can make an excel  sheet or something to be the interface that can be used by the user, and if I can, I hope that I can have the details of who to execute that.

    LabVIEW interacts with Microsoft Excel using its Active X hooks. Anything Microsoft has exposed in the Active X API, LabVIEW can do. This includes opening Excel, reading values, writing values, etc. Doing this can be tricky for a novice programmer and NI has created the Report Generation Toolkit for Microsoft Office that plugs into LabVIEW for a more streamlined experience. 
    The Developer Zone is a good place to start a search looking for Active X Excel examples: http://zone.ni.com/devzone/fn/p/sn/n16:en/sb/navsRel?q=microsoft+excel+labview&x=0&y=0
    As well as the Forum: http://forums.ni.com/ni/board/message?board.id=BreakPoint&message.id=2391 
    Reading and writing to an open Excel file could become quite cumbersome however. If the Excel file is open and the user is interacting with it, writing to that same file will return an error saying that the file is currently open. It would have to end up like this: User opens file, modifies some fields, saves file and closes excel. LabVIEW program opens file, reads fields and writes a result, then opens Excel to display to the user the result.
    Is there any specific reason you want to use Excel as your user interface? You can use the front panel of a LabVIEW application to enter the data and display the results, all while writing this data to an Excel file for logging/reference in the future. 
    Message Edited by Stephen B on 11-17-2008 01:26 PM
    Stephen B

  • How to include .xml file while building a stand alone applicatio​n .exe file from a Labview program

    HI,
    I have a labview program which loads default values of all the variables from a .xml file when executed.  I am trying to build a standalone '.exe application'  using
    (Tools Menu --> Build Application from VI) , however I am not sure where to include this .xml file in the process?  I really appreciate if some one could let me know.
    Thanks
    Vish

    As GerdW said, it is preferable (and better practice) to use the project explorer. My guess, you didn't configure the build correctly (and probably used the default settings).
    First, you have to specify your xml file as Always included is the source file tab
    Now look at how the build folders are built:
    The .ini file (xml in your case) is in the data folder. So in the build the relative position of the xml file is not the same as in the development environment. You have to be aware of this difference and use a diiferent relative path for the exe. You can do this using a conditional disable symbol in the project and then use the conditional disable structure in your VI.
    Here in the deploy case the exe will look for the file in the data folder and in the development environment it will look in a folder name Files.
    Ben64

  • Executable run-time error: "Failed to process adress of Labview Program. Occurences will not work."

    When I run my VI it works fine. However, when I create it into an executable and try to run the exe, it gives me an error, "Failed to process adress of Labview Program. Occurences will not work." Why?

    I am using Labview 7.0. I have attached a screen shot and the code. thanks for checking it out and let me know if you need any more info.
    Attachments:
    Labview_Error.bmp ‏2305 KB
    Main.vi ‏230 KB
    PAIN_Generator.exe ‏2186 KB

Maybe you are looking for