ATM CLD Exam Solution: Feedback Welcome

Attached is my solution for the ATM Exam.  It took about 6 hours to complete, but I think I could get it down to 4 (I took a significant detour).
I'd love to hear from fellow test takers or graders out there on the choice of architecture and readability.
Thanks,
Tom
Attachments:
CLD Sample Exam - ATM Machine - Tom.zip ‏295 KB

Here are a few more suggestions after reviewing your code.
Clean up your wires. There are unnecessary bends all over the place as well as wires that run back on themselves (Out of position property node).
Definitely get reid of all the property nodes. You really aren't using data flow with property nodes all over the place.
As mentioned earlier, everything including the subVIs eed to be documented.
Verify your functionality. This application doesn't meet the requirements. The out of position LED is not light properly for one. As mentioned your stop is not a graceful shutdown of the application.
Use a project for your application.
Consider placing your timing control in a subVI. You effectively have multiple copies of this functionality in your code.
Don't use the Wait VI for timing control.
As mentioned this really isn't a producer/consumer architecture. Take a look at the examples for how this normally looks.
All constants should be labeled.
Resize the front panel. Front panels should be size appropriately and shouldn't be a huge window with a few controls and indicators on it.
Resize the block diagram to fit on a single screen and avoid the need to scroll to see everything.
Make sure to align the controls and indicators are aligned on the front panel.
Mark Yedinak
"Does anyone know where the love of God goes when the waves turn the minutes to hours?"
Wreck of the Edmund Fitzgerald - Gordon Lightfoot

Similar Messages

  • Car wash CLD exam solution?

    Hello,
      Like a lot of people I'm trying to prepare for the CLD exam.  I'd like feedback on my solution - particularly where the exam graders are likely to take points off. So first I'd like an overal "grade" for what I'm posting here (labview 9).
    This took me about 6 hours to do - too long.  Part of that was deciding on the overall structure, and getting hung up on how to implement the "universal all stop" button.  
    Are there too many wire bends?  For me it can be a very time consuming
    process to re-arrange everything to reduce the number of bends.
    The description/tips and icon things also sucked up too much time.  
    Some specific things that I'm not sure about are:
    Is it ok to use property nodes for the "stop" button and "main power-wash" switches?  This solution works, but is it undesireable for some reason?  I had difficulty comming up with an alternative structure that allowed the stop button to activate in the middle of any part of the cycle.  I had worked on using an event structure to do this, but got frustrated and went with the property node.
    Does anyone have any sense if using a queue to sequence the cycle is considered any better than using a numerically sequenced case structure?  If I only have 4 hours, using a queue structure seems to be a little more labor intensive... (propagating error, initializing and releasing queue...).   I can see the advantage of using a queue (flexibility), but functionally a regular sequence would also work.  To phrase this better:  are points awarded for using more flexible programming structures?
    The timing sequences are rather primitive polling loops.  Does anyone think that I'd get docked for that lameness?  Is there a better way to do that?  I thought about using timing VI's and event structures, but the added complexity didn't seem worth it.  Well, ok, that and I couldn't implement it because there's still some things I really don't get with more sophisticated event structures.
    Attachments:
    car_wash.zip ‏50 KB

    Here are a few more suggestions after reviewing your code.
    Clean up your wires. There are unnecessary bends all over the place as well as wires that run back on themselves (Out of position property node).
    Definitely get reid of all the property nodes. You really aren't using data flow with property nodes all over the place.
    As mentioned earlier, everything including the subVIs eed to be documented.
    Verify your functionality. This application doesn't meet the requirements. The out of position LED is not light properly for one. As mentioned your stop is not a graceful shutdown of the application.
    Use a project for your application.
    Consider placing your timing control in a subVI. You effectively have multiple copies of this functionality in your code.
    Don't use the Wait VI for timing control.
    As mentioned this really isn't a producer/consumer architecture. Take a look at the examples for how this normally looks.
    All constants should be labeled.
    Resize the front panel. Front panels should be size appropriately and shouldn't be a huge window with a few controls and indicators on it.
    Resize the block diagram to fit on a single screen and avoid the need to scroll to see everything.
    Make sure to align the controls and indicators are aligned on the front panel.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot

  • CLD Sample Exam Solution for Review - ATM

    Please see the attached ATM controller code. I would appriciate any feedback as I am sitting the CLD exam next week.
    Matthew
    Attachments:
    ATM.zip ‏374 KB

    Its probably been a few weeks since you took the CLD. How do you think you did?

  • ATM CLD Practice Exam Example

    Hello,
    I am trying a somehow different architecture from what I am used to with the CLD ATM practice exam and I would appreciate any feedback. I am still hesitant about the "double queued message".
    I'll appreciate your comments.
    Regards.
    Attachments:
    ATM Simulator.zip ‏259 KB

    Christian_M wrote:
    I got the ATM in CLD Exam.
    I think the code you posted is very good, but it is simply too much for CLD.
    Don't try to create super-special-awesome architectures, instead use simple ones, e.g. I just used a statemachine which fullfills all the needs of the ATM. Keep in mind you only have four hours and with some exams you have lots of text to implement. More complex architectures are more difficulte do debug and there is not really time to debug.
    So keep it simple!
    Christian
    Thank you Christian. Just yesterday I reworked this example using a simple state machine. Unlike with the architecture I posted here, with the simple state machine I had plenty of time to debug and test. So, you are probably right about keeping it simple. I guess I need to remember that the the CLD is a test and not a product to deliver to a client.

  • LabView Sprinkler Sample CLD exam feedback wanted

    Starting to get ready for an upcoming LabView CLD exam, feedaback appreciated! 
    Attachments:
    Sprinkler_LV2012.zip ‏86 KB

    Hi there,
    generally: very good effort!
    As Blokk said: you need to work in a project (makes life so much easier anyway). Try to reduce the amount of property nodes where possible. This has to be a trade off: if you realise during the exam that it would get ridiculously complicated to reduce the locations of where the indicators are written to to one then don't do it. Better to keep the code neat and tidy as it is and accept the deduction rather than tearing apart the code and getting loads more deductions for wire spagetti.
    Good pratice is also to use standardised icons: header indicates functional module (e.g. File IO, Time, Ctrl, etc), while the bottom bit indicates what it exactly does.
    Biggest problem is error handling: there is none! If an error occurs nothing happens but even worse the error gets never cleared and gets passed around (shift registers) stopping all modules from executing as nearly all modules have standard error in/out functionality and will simply be skipped. Fortunately it doesn't completely hang up the software as even if an error occurs the event structure will still be reacting to the stop button and the state machine will shut it down.
    I would do the shut down of the state machine slightly different rather than comparing the state to Exit. I would wire a boolean out of each case: false in Init and run as well as true in Exit. I would then "or" the boolean with the error wire and wire it to the loop stop terminal. Outside of the state machine you will then need to place a simple error handler vi.
    Your subVIs should also be implemented with standard error in/out functionality by putting all controls and indicators outside of an error case structure which only executes the code when no error is coming in.
    Just a few minor points which might be worth about 4-5 pts (guesstimate)
    good luck with the exam
    BR Mathis
    edit: agree with Blokk: make the timer a FGV!
    edit 2: Error handling is actually a major problem and would potentially hang up the software. When you press start with an incoming error the "check water pressure sensor.vi" would return the default of zero from the variant to data which is smaller then 50 ... not stopping the loop. This would be avoided by wrapping an error case structure around everything (all controls and indicators need to be outside the case structure). In the case of an error everything would be skipped and you will need to return default values.

  • Will I lose points on the CLD Exam if I use a Launcher vi in addition to the provided Front Panel?

    Hi!
    In this thread: https://decibel.ni.com/content/message/50512#50512, MattP directed me to this Certification Board.
    If I use the Actor Framework in a CLD exam, will I lose points for launching the Front Panel? For two specific examples of what I mean, please refer to the solutions submitted here:
    ATM: http://forums.ni.com/t5/Certification/Sample-Exam-Solutions-for-Review/m-p/2380868#M728
    Boiler: http://forums.ni.com/t5/Certification/Sample-Exam-Solutions-for-Review/m-p/2385580#M738
    Thanks!
    Solved!
    Go to Solution.

    Hi,
    You will not loose points for using the launcher, and not documenting the message classes.  The folder structure is also fine.
    Do document the other VI's, actors,and SubVI's.   Remember be brief with documentation.
    Mark Ramsdale
    Project Manager and CLD
    Customer Certification and Training at National Instruments

  • Sample Exam Solutions for Review

    Good afternoon,
    I am taking the CLD exam tomorrow morning and wanted to submit my sample exam for review. I was able to finish it in just about 4 hours. 
    Here is my solution, please provide feedback.
    Thanks.
    Steven

    Manushak wrote:
    Hello all
    I have solution for "sprinkler controller".
    I would be glad if someone could take a look and give me a feedback.
    I want to write more comments, but my english is poor and there are many mistakes in my texts. Do you know, can i have any translater with me in time of exam. Or can i use online translators. It will help my very much.
    Overall a C- job  Some things you did well. Please excuse me for only pointing out the flaws as my time is limited.
    You have some bad habits that you need to break;
    Icons.  They need to convey information to the next maintainer of your code.  Is that a flame under a teakettle?  Like GUIs the color usage in icons should avoid garashness and help aid clairity.  Your file read vi icon uses a glyph I would associate with a error dialog.
    Use a project
    Tip Strips on every object the user can see on the GUI!
    Timing- you have failed to meet spec on preserving the elapsed time if rain occurs durring the servicing of a zone.  You need an elapsed timer with a pause feature.
    Wire bends.  Enough said?

  • Boiler Controller Mock CLD Exam

    I have my CLD exams soon.
    I would appreciate it if someone can sort psuedo-mark my exam and give me any feedback.

    Front panel set to full screen and does not have an icon
    While this is not applicable at all to the exam you should include a copy of the requirements document in the project for people on the forums for easy reference. I did the ATM and Car Wash samples so I was familiar with them. I did not do the boiler sample.
    Only one of three subvis is documented. Do the documentation and icon FIRST when creating a subvi.
    No time to look much further at this at the moment.
    Attached image is self explanitory
    =====================
    LabVIEW 2012

  • Review my ATM CLD practice paper?

    Hey guys,
    I have my CLD exam booked for early November and did a practice paper today.  I was hoping somebody could take a look at my code and offer some constructive criticism?
    It took the whole 4 hours and I would like to think it is a pass.  I am worried there is not enough documentation.
    What you think? 
    Lewis Gear CLD
    Check out my LabVIEW UAV
    Attachments:
    ATM CLD Practise.zip ‏451 KB

    Hey Lewis,
    This looks good!  There is a certification board this might get more traction on.
    Some tips that helped me:
    - Add a description and tip to all front panel objects (this was the first thing I did in my exam)
    - Document everything - labels on all block diagrams, VI description for all VIs (including the main VI)
    - Don't use non-default type-defined cluster constants (use default combined with Bundle By Name) - you will drop marks for this.
    Overall this is a good effort.  Get the documentation in, it's free marks 
    Come and say hello when you're sitting it!
    Regards,
    Peter D

  • Design practices from the CLD Exam Prep Guide

        I have a question about design practices as stated in the CLD Exam Prep Guide found at   http://ftp.ni.com/evaluation/certification/cld/cld_exam_prep_guide_english.pdf
        Please refer to statements
    2.e.1. Set the value or attributes of a control, statically using the property dialog box of an object, or dynamically using Property Nodes.
    2.e.2. Initialize or set control values at application, load, start, and stop.
    4.a.4. Use local variables to update controls.
        Because the words initialize and set and update all mean to change the value and two different methods are suggested to do so, I first saw this as contradictory.  Assuming there is no contradiction, it should be very clear when, where, and why each method is used.  
        From section 2.e I understand this to mean you should change (set) a control value at application, load, start, and stop by using Property Nodes.  Thus, application, load, start, and stop shall be clearly identified within your block diagram to avoid misunderstanding.  
        From section 4.a I understand this to mean you should change (update - as you might do repeatedly within a while loop) a control value by using local variables everywhere else in your block diagram.  If I understand this correctly, there is no contradiction.  Otherwise....
    Please advise!  Scott Pierskalla
    Certified LabVIEW Associate Developer

    spiersk wrote:
        I have a question about design practices as stated in the CLD Exam Prep Guide found at   http://ftp.ni.com/evaluation/certification/cld/cld_exam_prep_guide_english.pdf
        Please refer to statements
    2.e.1. Set the value or attributes of a control, statically using the property dialog box of an object, or dynamically using Property Nodes.
    2.e.2. Initialize or set control values at application, load, start, and stop.
    4.a.4. Use local variables to update controls.
        Because the words initialize and set and update all mean to change the value and two different methods are suggested to do so, I first saw this as contradictory.  Assuming there is no contradiction, it should be very clear when, where, and why each method is used.  
        From section 2.e I understand this to mean you should change (set) a control value at application, load, start, and stop by using Property Nodes.  Thus, application, load, start, and stop shall be clearly identified within your block diagram to avoid misunderstanding.  
        From section 4.a I understand this to mean you should change (update - as you might do repeatedly within a while loop) a control value by using local variables everywhere else in your block diagram.  If I understand this correctly, there is no contradiction.  Otherwise....
    Please advise!  Scott Pierskalla
    Certified LabVIEW Associate Developer
    Scott,
    Thank you for drawing my attention to this thread.  I understand your confussion but, there is no contradiction.  I will attempt to clairify the statements.
    Section 2 addresses design of the GUI or, how to set up the user experience.  Several questions any developer needs to ask are:
    Is the data represented correctly? (what data type is needed?)
    How will the user change this data? (Enum / Ring / Combo box pull-down, maybe the increment / decrement buttons, Perhaps direct text entry from the keyboard? If so do we wish to update value while typing or end text entry with "Enter"?)
    How can I make it "Pretty?"  (What colors are approachable, how can I present logical groupings of the data the user needs....?) 
    Section 2 is all about the user.  Your application will be used by users and, they need to interact with your product.  Design the interface correctly and they will never notice, design it poorly and they will wish to break you nose because the software just does not "FEEL" right.
    Section 4 addresses Programing practices.
    Avoid Localitis
    Avoid sequenceitis
    don't ABUSE Globals
    use common design patterns
    Basically "Write Software" not "Functional spaghetti code"
    Writting "Good Software" in LabVIEW is one of the things that CAN BE DONE with LabVIEW.  Unfortunatly, because LabVIEW is often approached by people with no understanding of Software Engineering principals, many LabVIEW applications fall into the "Functional Code" bucket and are poor "Software".
    The CLD exam will require you to domenstrate that you can apply software engineering principals in the LabVIEW IDE.
    Good Luck-  Sling some wires!
    Jeff

  • CLD Exam Tips..

    Hi folks,
    At first, My CLD exam is on 9.1.13. I done all 4 practice exams with a 4 hour time limit and hope did well as from review, repeated all the exams and completed with 3 hrs to 3.5 hrs.
    So , What should i do next ? I want to learn something more. Please guys give me some advice am nervous.

    Sounds like you've done the prep work and you're ready for the real thing. 
    My advice is to get a good night's sleep before the exam.  Plan your route in and make sure to arrive at the examination place early. 
    Bring some water with you, and maybe a snack.  And make sure to use the bathroom before you start. 
    As you write the exam, run your code often.  Don't just push the expected buttons either, try pushing the wrong ones and see what happens. 
    Pace yourself.  If you've only got 5 minutes left, don't try to cram more functionality in.  Remember, everything you add, you have to TEST.  Your application might run perfectly right up until you added that last feature.  But they don't score you on how well your application used to run. 
    If you have time, save your project and close LabVIEW completely.  Then re-open and make sure things are still good.  This is what your proctor is going to see. 
    Good luck! 
    Patrick Allen

  • Car Wash CLD Sample Exam Solution

    Attached is my solution to the CLD Car Wash Sample Exam.  Comments will be appreciated.  The main VI is Main_6.15.10.
    Thanks in advance.
    Attachments:
    CarWash_6.15.10.7z ‏60 KB

    Here are my thoughts....
    Your solution is functional, so there are points for that right away.  Where I think there could be some more work is the architecture.  The exam requirements state that the design must be "easily scalable".  To me that means new states or cycles can be added without much messing about on the block diagram.  If you notice, there are only certain... lets call them Properties of each cycle type.  You could have an array of cycle properties such as cycle time, cycle position switches, cycle name, and flags for standard or deluxe.  Then you could reduce your cycle handling to a single state that just indexes through the cycle array and executed the next appropriately flagged cycle.
    I noticed a Select node in each of your cycle states with constant True and False wired to it.  That is a total of three elements plus two wires that should have just been a Not right off of the Boolean palette.
    You stop the program with a Stop button, yet you allow the user to close the window.  You should consider a Panel Close? event in your event structure to handle a use trying to close the window so that you can execute a graceful stop.
    There is no VI Description filled out for your main VI.  You should also have an icon for the main VI.  The suggested front panel shown in the exam has an icon.
    When your VI is running, you have the scrollbars, toolbar, and menu bar shown.  None of those serves any function for the application, so they should not be shown at runtime.
    The Stop button that is used to stop your application is reset with a Property Node.  Not that there is a performance issue here, but it is generally not good practice to do that unless you are forced to.  Consider just using a Mechanical Action of Latch When Released instead of Switch When Released.  That way you do not need to force the reset to the False state.  Of course, I would rather see something like a Stop state writing to the While Loop conditional terminal.  Also, you could have used a Local Variable to write the initial state of the Sim Switches instead of the Property Node.
    The graders like to see code comments describing your algorithms.  I would say that you need more of those.
    A 10 msec timeout on the event structure is a bit hyper.  Nothing in the system runs that fast, and the only thing you are waiting for is the user.  You could actually have a -1 wired there if you add an event case for the Stop button and Panel Close.  It will greatly reduce the CPU cycles (again not that there is a huge performance issue here).
    Come to think of it, the 20 msec wait for next multiple timer is a bit hyper too.  Your timing requirements are on the order of seconds.  You do not need to loop that fast.
    In general I prefer to have the Event Structure outside the State Machine.  Either that, or I use the Event Structure as the State Machine (in place of the Case Structure).  That way, if you need to respond to the user interface, you can do so without waiting to cycle back to the Idle state.
    This one was not listed in the requirements, but it would be very helpful to see the clock.  A cycle countdown timer or elapsed time indicator is so helpful to the user and the grader.  It confirms that things are working properly and the the application has not sieved up.  Users like to see something "alive" on the screen.
    To end on a positive... good job remembering to Disable the Purchase Selection buttons once the user clicks one.  I got ding'd for forgetting about that back when I took the CLD in 2003.

  • Security System CLD Exam Problem Solution? Insane?

    I just started working on the CLD example problems.  I've been using Labview for about 10 years - so everything I do is old-school.
    I'm posting this solution for the Security System example.  There are arrays of switches to represent the alarm, bypass, and tamper
    signals - and then a loop to go through each "zone" to logically determine the state (normal, alarm, bypass or tamper).  To make the
    "zone status" indicator an easily scalable indicator I have the "zone" loop change the color of a boolean LED indicator.  Then I take a 
    picture of it and display an array of pix.  
    Question:  This works fine, good response - but would it pass?  Is there a better way? I attached the diagram...
    Solved!
    Go to Solution.
    Attachments:
    security system.png ‏43 KB

    I don't like the detour over an array of images and property nodes. Seems indirect and inefficient. Is that a requirement or your idea?
    Also I assume that the FOR loop executes quickly, so you should probably do the timestamping once before the loop.
    The "wait for FP activity is really "old school" and not very good. You typically get extra triggers, which is expensive since you write to the file every time. I would strongly suggest an event structure instead.
    The small FOR loop can be replaced by "search array". Much cleaner!
    It might be better and more efficient to open/create the file once before the loop, write using lowlevel functions during the loop, and close after the while loop has finished.
    LabVIEW Champion . Do more with less code and in less time .

  • CLD Exam You-Tube Demo

    Another cross-post from the Minneapolis LabVIEW User's Group.  This evening's main presentor was Tom Brass of St. Bernard Engineering.  Tom is a CLA and one of the fastest LabVIEW coders I know.
    Tom has taken the time to actually work a CLD practice exam on camera and post the salient points on you tube here.  Thanks again Tom! for showing a great solution and methodology for the ATM example.
    As an aside, I had the pleasure of meeting Tom Brass for the first time while a group of LabVIEW developers were sitting proctored exams.  Tom recievied his CLA from his efforts that day and left the room after 3 hours.  I was sitting my CLD and had drawn the ATM exam before it was retired to an example.  I failed that exam but re-tested a few months later to earn my CLD.
    I recommend the presentation with all due respect to Mr. Brass.
    Jeff

    This is a couple weeks old, but you wouldn't happen to have a copy of the actual code he produced for the solution?
    http://linkd.in/mikele

  • Sample CLD exam for review

    Good afternoon all...
    I took the CLD this morning, and I must say that was the hardest exam I have ever taken. It was much much harder than any of the practice exams. I think I completed about 60% of the application before I ran out of time. I had everything documented, and it was clean code. I only hope I garner enough points to pass....
    Please review my CLD practice exam and provide feedback.
    Thanks,
    Steven
    Steven Howell
    Certified LabVIEW Developer
    Certified Professional Instructor
    LabVIEW Consultant
    Arcus Technology Services, LLC.
    [email protected]
    Attachments:
    Boiler.zip ‏103 KB

    Ok maybe I only saved the main VI and not the whole project....lets try this again...sorry about that.
    Steven Howell
    Certified LabVIEW Developer
    Certified Professional Instructor
    LabVIEW Consultant
    Arcus Technology Services, LLC.
    [email protected]
    Attachments:
    Boiler.zip ‏79 KB

Maybe you are looking for

  • USING STRAWBERRY I-MAC AS A MONTOR FOR MAC MINI

    Anyone know of a way of using an imac strawberry, with tray loading cd as a monitor for a new mac mini. my daughter adores this machine, but needs to upgrade

  • Is it possible to get pictures/videos from an iPhone5 that will not turn on?

    My phone has been water damaged and my latest back up is a few months old. Is there anyway I can get my pictures from the damaged phone and put them onto my new

  • Audio reference levels across applications

    Hi, After many mysterious problems using Final Cut Studio with my m-audio 1010 digital audio card I am completely confussed as to why audio levels are so inconsistent across say, Final Cut, DVD Studio, Soundtrack pro and even iTunes. An edit in Final

  • Programmatically Changing Waveform Graph and the number of plots

    I have a waveform graph that needs to display a variable number of plots based on the number of inputs.  Is there a way to programmatically adjust the number of plots displayed on the waveform graph?

  • Trouble shooting - Need Help

    Please help - I have followed the instructions on http://www.apple.com/uk/itunes/podcasts/specs.html, based my XML on the example feed and submitted my XML to http://feedvalidator.org, http://castfeedvalidator.com and http://validator.w3.org/feed, as