From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Certification

cancel
Showing results for 
Search instead for 
Did you mean: 

Sample Exam Solutions for Review


@A.E.P wrote:

Again, thanks for your comments.

 

Jeff:

Hmm, as I see it, my application already handles it.... If you click on the setup button, you can type 1 in the index, and you are able to add one more. The program cycles through that as well.

Hmm...: While typing. Maybe I just realized that I misunderstood that. So, they want to add another Zone, like North-West?? That will require a new item in the drop-down list as well as new Zone Indicators. Is that what they really want??

 

Yeah, I know I use much space. Maybe I will try not to, when I make the last sample exam 🙂 Do you think I will get a hit in the score due to that?

 

 

billko

I like your idea. But isn't it what I have already tried to do in this (Sprinkler) sample exam?

 

 


Oops, a comment on your question to Jeff above.  I think you understood it correctly that your app should just be able to handle more array elements - like repeating zone coverage - not like adding new zones.  I'm thinking that all you need to do in the setup is enable the array so you can add new elements, just like you did.

 

I am curious - in my sprinkler exam, I made sure to write the new settings back to the config file as part of the start state just because I felt that writing back to the config file was implied where it said "Note: The application should be scalable to handle additional elements of the Zone Setup array without any modification of the program."  I felt that you weren't TRULY handling new elements until you made them permanent.  But that was my interpretation, and it was partially because I felt the requirements were incomplete without it.

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 161 of 623
(4,391 Views)

Hello Alex,

 

I have now had the time to look at the first exam ("boiler") this evening.
I got a bit distracted at the airport. 🙂

 

First of all I would like to note that this example requirements document is one of those that is relatively vague in its requirements.


Concerning the style and documentation I would say that these are the "easy points".
If you have all of these points, then you only have to get 5/15 on functionality.
This would come down to having to implement less than half of the described steps.

 

Having  a 50% functional application that is "perfectly"  stylish and documented can be (in this case) better for your grade than a 90% functional application with "ok" documentation and style.
Pushing to have the fully functional CLD might cause your application to break its sequence operation after only 40% (or less) of the steps.

Depending on thow bad it breaks this could cause you to only get 40% of your functionality points.

 

It is also important to note that the CLD is also a test of how you are able to act under time stress.

The most difficult for most people (that I have talked with)  was how a programmer estimates what he could do within the provided time.

If you know from the beginning or at a certain point that you will not be able to implement everything, then:

- Make sure the first steps of the sequence of operation can be run through

- Everything that you didn't manage to implement should be explained in your application.

It should also be pointed out in the applicaten and you should also explain how you would have implemented it.

 

Imagine that you have an exam where you have to load a file in the beginning, do actions and then save the changes in the same or another file.

Half  way you could make a small programming mistake and know that you wil not be able to implement everything in time.

There are several things you could do in this case:

1) Since this saving back is in this specfic case the last step in the exam an approach could be to document where you would have done the saving and how, but not implement it.

If everything else before it works according to requirements, then you can still get very high functionality points.

2) Alternatively you could purely focus on this last 10-15%  and put less focus on the documenting & style (and lose several points in both categories) to gain maybe 1 or 2 points in the functionality category.

 

Although option 1 might not be what you instinctively want to do, this balance could be good to keep in mind.

 

Documenting (tip strips and descriptions) while implementing is something I would absolutely advise.
However, this habit might be difficult to change at the last minute before the exam.

If you don't want to change the habit, then make sure to (ab)use VI Analyzer.
This will clearly show you where documentation is missing and also will give you quite some feedback on your style.


One advise concerning the usage of VI Analyzer:
- Run it once and "fix" all issues you can "fix" at that moment in your project.
Afterwards run it a second time to verify that your corrections fixed everything.
- Don't get tempted to run it after each "fix". I personally have this specific type of VI Analyzer addiction/OCD and running VI Analyzer continuously will make you lose alot of time.
- Also test all of your test exams with VI Analyzer. This will show which things you generally forget.

 

The block diagram size comment pointed out earlier on will also be something to keep in mind.

Do also keep in mind that your exam pc might not even have full HD resolutions.

 

For analyzing the functionality I followed the Sequence of Operation as mentioned in the requirements document.
This is also how you should expect that your functionality will be tested.

 

Things I noticed were:

- The User Interface acts as it is described in the Requirements Documents.

- Concerning the logs during the pre-purging I am not a 100 % sure that this should be continuously done.
I think they only want to log the events (hence "event log") and that they only want to see when it starts and when it ends/completes.

 

- when the pre-purge is complete it notes
"25/07/2014 22:07:50, Pre-Purge Complete, 0"
I'm not sure if it should say "0" or "10.00" at the end based on the specifications, but my intuition says it should say "10.00" or any other time after which it was completed.

 

- When you prove the pilot there are 4 sections in the log at my side:
"25/07/2014 22:09:16, Pilot Proved, 32,773109
25/07/2014 22:09:16, Pilot Proved, 38,655462
25/07/2014 22:09:16, Pilot Proved, 42,016807
25/07/2014 22:09:16, Pilot Proved, 44,537815"
Based on the requirements document it seems to me like there should only be one log-line in the event-log file.
However, I could have understood this incorrectly.

 

- After the Forced Draft fan is turned On, there is another "Pilot Proved" log-line before the "Boiler Running" log-line:
"25/07/2014 22:09:16, Pilot Proved, 32,773109
25/07/2014 22:09:16, Pilot Proved, 38,655462
25/07/2014 22:09:16, Pilot Proved, 42,016807
25/07/2014 22:09:16, Pilot Proved, 44,537815
25/07/2014 22:09:35, Forced Draft Fan ON, True
25/07/2014 22:09:35, Pilot Proved, 44,537815
25/07/2014 22:10:07, Boiler Running, 10,589255"

I don't think this "Pilot Proved" line "25/07/2014 22:09:35, Pilot Proved, 44,537815" should be in the event log file.

 

- After the Shutdown Purge is completed I see the following feedback in the log-file:
"25/07/2014 22:11:32, Start Shutdown Purge, 10,10
25/07/2014 22:11:32, Shutdown Purge Complete, 0"

I think the "0" in the last line should not be "10.10" (taking into account the last "time value" of your Shutdown purge)

 

- One more general note:
If you have a look back at your code, then you see that your CSV-file is using commas as decimal separator.
Although it is not explicitly mentioned in the requirements document, the decimal separator should rather be a ".".

Please note that the people that have a komma as default decimal separator are in the disadvantage over here.
Easy fix for this is to specify that you do not want to use the system decimal point in the Number To Fractional string function.


- The "Stop" button also does not seem to act as I would expect it to act.
Although it is not specified clearly how this one should behave, I think this one should be able to at any moment stop the application directly. (kind of like an abort button)

 

 

If you would like this, then I could go throgh the second exam together with you on monday morning (when I am back at the office).

 

Ps: I will also try to post any feedback I share over there over here, so that others can also use it.

Kind Regards,
Thierry C - CLA, CTA - Senior R&D Engineer (Former Support Engineer) - National Instruments
If someone helped you, let them know. Mark as solved and/or give a kudo. 😉
Message 162 of 623
(4,385 Views)

My advice is simple.  Practice over and over and over again until it is boring.  Develop a routine because this is what will carry you through when you first look at the test and want to panic.  Instead of panicking, you will just do your routine, do something familiar (all setups will be similar), give yourself the confidence you need so that when you get to the unique part, you will be able to tackle it.

 

I got it down so well that I predicted EXACTLY what my score would be before I even got to the test site.

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 163 of 623
(4,376 Views)

On top of everything else.  Remember 4 hrs. Is a requirement.  Deliver the best you can in that time.  Do not code it the way you feel is best... I blew shot number one because I wouldn't have ever delivered that to a client.  Shot two would never pass my standards either... But got a 39.


"Should be" isn't "Is" -Jay
Message 164 of 623
(4,369 Views)

Thanks everyone, for all your feedback!

 

Great tips about where to spend time (style vs. documentation vs. functionality). I will definitely keep that in mind.

 

I already did spend time with VI Analyzer, when making these sample exams, so that I'm fully comfortable with the tool to the final exam 🙂 It is a really great tool to catch the small mistakes, that you thought were fixed.

 

Best Regards

Alex E. Munkhaus
Certified LabVIEW Developer (CLD)
System Engineer
0 Kudos
Message 165 of 623
(4,346 Views)

Hey guys!

 

Here's my sprinkler controller solution.  I think I spent around 3.5 hours on it.

 

Think it would pass?

 

Thanks!!

0 Kudos
Message 166 of 623
(4,284 Views)

@kbrezina wrote:

Hey guys!

 

Here's my sprinkler controller solution.  I think I spent around 3.5 hours on it.

 

Think it would pass?

 

Thanks!!


Where's your project?  I'ts a sure fail without it.  Did you just forget to include it?

 

I'm not a fan of unattached property nodes, but I don't know if they take points away for that, either.

 

I don't like that your Zone Indicator is sometimes left with the default values.  While the EFFECT is what you wanted - the indicators return to all false - that's more like cutting power to the LEDs than reading the actual state of the imaginary zone sensors.

 

You have zero error handling.  The docs say you must have error handling.

 

You don't need a timeout in your event loop.  The event structure will be quite happy waiting around for something to happen.  You don't have to give it something to do.  Infact, you have just turned your event handler into a button poller.  (I know why you did it - it's so the event loop can exit when the bottom loops stops, but there are better ways to stop the two loops.)  In fact, this would probably be a good time to go thropugh the shipping examples and/or online tutorials to familiarize yourself with the standard LabVIEW design patterns.  You need to use a recognizable design pattern.  They all have rudimentary error handling and defined ways of exiting the loops.

 

The "Initialize" state isn't for "future development."  Your initialization actually occured in your "Start" state, which I assume is the equivalent of the "Start (Application)" step in the documentation.  (Hint: it would probably be better if you name your states the same as the documentation.  For the test, it will be much easier for the grader to follow along.  In real life, your software may not pass QA as it isn't clear what requirements are covered where.)

 

You can't save your edits to the csv file.  Although it doesn't explicitly say that the data needs to be saved, IN MY OPINION, it is implied when the docs talk about scalability.  It is in no way clear, however, and you probably won't get any deductions, especially if you explain it, so the grader won't think the omission was because you ran out of time.

 

It's generally pretty sloppy.  You'll get points off for wires running behind objects and unecessary bends.

 

You have entirely too many tunnels set to default values.  This means that data cannot travel from one state to another.  it doesn't matter how many shift registers you have if the data cannot get there.  You'll end up passing around the default values instead.  To be fair, I don't think it will make any difference the way you set up the VI, but it's generally good practice to set the tunnels to "linked input tunnels".  One day you will be beating your brains out for a few days trying to figure out where your data is disappearing to and you will find it was because a tunnel was passing default values instead of what was in the shift register.

 

You have exactly one subVI.  Besides breaking your application into clearly defined steps - which makes your code extremely easy to document - subVIs make for a cleaner block diagram because you aren't constantly making room for stuff and making spaghetti in the other states.  If you made your file read and your water pressure good selector into subVIs, your block diagram would be nice and tidy - and small.  I forget where I heard it, but a good rule of thumb is: If you can't explain your VI in a paragraph or two, it's probably too big.  That goes for your main VI, too!

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 167 of 623
(4,272 Views)

Bill, 

 

Thanks for the feedback, I really appreciate your time!

 

In hindsight, I certainly missed a few obvious things, such as putting it in a project and handling errors.  I do these daily, so I'm a little surprised I missed them.  

 

I definitely made some bad decisions for the sake of time management, such as the default tunnels to help debug faster, the sloppy wiring, and the lack of subVIs.  

 

Nice catch on the "future development" comment, haha.  The first thing I did was make an initialize state, and the last thing I did was comment code.  By then, I didn't feel comfortable deleting it, so I just flubbed the purpose.  

 

I will definitely use the predefined states for my state machine next time.  

 

I am personally very comfortable with this design pattern, although I realize it does not necessarily fit one designated by NI.  Is it unwise to use user event driven queues to influence my state machine without actually wiring the queued data to the case selector?  

 

Again, thank you for the review!  I will take all of your recommendations and utilize them on my next practice CLD!

 

-Kyle

 

0 Kudos
Message 168 of 623
(4,247 Views)

@kbrezina wrote:

Bill, 

 

Thanks for the feedback, I really appreciate your time!

 

In hindsight, I certainly missed a few obvious things, such as putting it in a project and handling errors.  I do these daily, so I'm a little surprised I missed them.  

 

I definitely made some bad decisions for the sake of time management, such as the default tunnels to help debug faster, the sloppy wiring, and the lack of subVIs.  

 

Nice catch on the "future development" comment, haha.  The first thing I did was make an initialize state, and the last thing I did was comment code.  By then, I didn't feel comfortable deleting it, so I just flubbed the purpose.  

 

I will definitely use the predefined states for my state machine next time.  

 

I am personally very comfortable with this design pattern, although I realize it does not necessarily fit one designated by NI.  Is it unwise to use user event driven queues to influence my state machine without actually wiring the queued data to the case selector?  

 

Again, thank you for the review!  I will take all of your recommendations and utilize them on my next practice CLD!

 

-Kyle

 


I'm somewhat scatterbrained, so making the states match up with the main topics really helps me to stay organized.  Sometimes a step doesn't make sense to keep separate from the one after it, so I combined the two steps into one and noted that the empty case was deprecated and no longer in use.  SubVIs kept me organized because they roughly corresponded to a paragraph each.  This kept the block diagram nice and tidy.

 

I don't think it's unwise to use a non-standard pattern - at least in real life - although I will say that the standard patterns are standard for a reason.  You don't want to make the grader scratch their head over this one.  Use an easily recognizable pattern.  I do think the grader will frown at the way you used the event structure.

 

It's funny - most people dop the error handling last.  For me, it's one of the FIRST things that I do.  It makes it very easy to figure out where your coding mistakes are.  😉  You don't really need shift registers on your error wires because you should have error handling at the back end of each loop.  For the purposes of the exam, I think that exiting in an orderly fashion on any error is good enough to show them that you understand how to handle errors.

 

When I was practicing for my exam, I was unemployed, so my job was to practice once through every day, with a self-review afterwards.  It gives a good idea of your strengths and weaknesses.

 

I think the best advice I can give you is to practice until it gets boring.  I chose one design pattern for all the examples, simply to give me a familiar starting place.  It came in handy at exam time because I didn't have to panic about how I was going to approach the project.  I just started out setting things up and it was calming because it felt so familiar.  By the time it came to the unique stuff, I was in a state of mind where I was ready to tackle the project.  By the time I was done studying, I knew my stregths and weaknesses so well that I predicted my score to 1/2 point.  😉

 

When are you going to take it?

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 169 of 623
(4,236 Views)

@billko wrote:

@kbrezina wrote:

Bill, 

 

Thanks for the feedback, I really appreciate your time!

 

In hindsight, I certainly missed a few obvious things, such as putting it in a project and handling errors.  I do these daily, so I'm a little surprised I missed them.  

 

I definitely made some bad decisions for the sake of time management, such as the default tunnels to help debug faster, the sloppy wiring, and the lack of subVIs.  

 

Nice catch on the "future development" comment, haha.  The first thing I did was make an initialize state, and the last thing I did was comment code.  By then, I didn't feel comfortable deleting it, so I just flubbed the purpose.  

 

I will definitely use the predefined states for my state machine next time.  

 

I am personally very comfortable with this design pattern, although I realize it does not necessarily fit one designated by NI.  Is it unwise to use user event driven queues to influence my state machine without actually wiring the queued data to the case selector?  

 

Again, thank you for the review!  I will take all of your recommendations and utilize them on my next practice CLD!

 

-Kyle

 


I'm somewhat scatterbrained, so making the states match up with the main topics really helps me to stay organized.  Sometimes a step doesn't make sense to keep separate from the one after it, so I combined the two steps into one and noted that the empty case was deprecated and no longer in use.  SubVIs kept me organized because they roughly corresponded to a paragraph each.  This kept the block diagram nice and tidy.

 

I don't think it's unwise to use a non-standard pattern - at least in real life - although I will say that the standard patterns are standard for a reason.  You don't want to make the grader scratch their head over this one.  Use an easily recognizable pattern.  I do think the grader will frown at the way you used the event structure.

 

It's funny - most people dop the error handling last.  For me, it's one of the FIRST things that I do.  It makes it very easy to figure out where your coding mistakes are.  😉  You don't really need shift registers on your error wires because you should have error handling at the back end of each loop.  For the purposes of the exam, I think that exiting in an orderly fashion on any error is good enough to show them that you understand how to handle errors.

 

When I was practicing for my exam, I was unemployed, so my job was to practice once through every day, with a self-review afterwards.  It gives a good idea of your strengths and weaknesses.

 

I think the best advice I can give you is to practice until it gets boring.  I chose one design pattern for all the examples, simply to give me a familiar starting place.  It came in handy at exam time because I didn't have to panic about how I was going to approach the project.  I just started out setting things up and it was calming because it felt so familiar.  By the time it came to the unique stuff, I was in a state of mind where I was ready to tackle the project.  By the time I was done studying, I knew my stregths and weaknesses so well that I predicted my score to 1/2 point.  😉

 

When are you going to take it?


Thanks for the advice about the standard design pattern.  The "Producer/Consumer Design Pattern (Events)" is exactly what I was intending to do, and now I can save myself 10 minutes by starting from the template!

I am lucky enough to be able to leverage some of my office time to study, as it's work related.  I am taking the exam next week, as long as I feel confident in doing so.  I hope to work through at least two more before then.  

 

Thanks again for your help, Bill.  I'll let you know how I do!

 

-Kyle

0 Kudos
Message 170 of 623
(4,224 Views)