New domain and blog

New domain and blog
Please head over to my new domain to view my blog and current projects

Tuesday, 25 June 2013

My Pursuit of LabVIEW CLD Status

Over the last few weeks I have been honing my LabVIEW programming skills. Not having a full-time job at the moment, very long story, makes this learning easier; I have a lot of time on my hands, but also trickier; I only have the four example exams from the NI website and my imagination to come up with programs to write. My mind also wonders onto Raspberry Pi, TI LaunchPad, running in the forest and various other distractions. 

As can be seen from my last post, I have worked through the four example exams with varying success. I have started round two to get my times down and skills up. So far so good.

I downloaded the example exams quite a while ago but for some reason I found myself back on the CLD e-kit webpage yesterday. Either a new download has recently been added or I just haven't noticed it before, but there is a a download called Preparation: Download Certification Prep Exam Sample Exercises.

This folder is brilliant. Firstly, it gives you a break from writing long, complete programs and secondly, it explains/demonstrates some fundamental processes that can be used in your final programs. The exercises are also only around 45-60min long so great when you don't have much time. 

I worked through 6 today and although I knew most of the principals, it was nice to get a reminder and refresher on some of the basics.

So if you don't have the exercises yet, go and download them and have a look. 


    Tuesday, 4 June 2013

    LabVIEW CLD Preparation

    I am busy getting ready for my LabVIEW CLD exam so working through the worked examples. I have just completed the first one, The ATM Machine and would really appreciate any feedback that you can provide.

    After looking at the solution, I realised that my version of the solution might have been a bit of overkill, but it works and this is a learning process for me. I will be adding all my solutions here so will try and keep this as clean as possible. If you do decide to comment, please not what solution you are commenting for.
    What I have learnt from the example exams:
    • If you get stuck on a section. leave it, carry on and come back to it later. It’s better to get as many sections completed as possible rather than having one section not working and the rest not done as time ran out. I got stuck on one section for 45min and was just getting frustrated with myself. I eventually got up and left it for a few hours, I know you cant do this in the exam. When I came back to look at it, I solved the problem in 5min, a Boolean constant was false instead of true.
    • Document, document, document. Do documentation as you are writing the code. There might be no time left at the end to get your documentation done and it is a HUGE part of the total mark. I still need to do much better here.
    • A quote that I heard while doing an edX online course. “Comments should describe things that aren't obvious from the code: WHY, not what" John Ousterhout
    • Practice, practice, practice. There are a few tricky areas that I have picked up by doing the example programs. Small/simple things that have taken a lot of time to figure out. Just being aware of these might save you a lot of time.
    • Test your code regularly. The more you test the better the chance of you having a working program to submit. I test my code after every change I make. This might be overkill, but at least I know that I will always have working code with the functionality that I have added.
    • When I redo the example exams next week, I am going to start getting into the habit of backing up my code. I currently use Tortoise SVN to make regular backups but this is not available for the exam. Keep a working copy and backup after you finish a section.
    • Use breakpoints, extra indicators and the probe tool to debug. Sometimes a simple problem that can a long time to figure out, but this time can be drastically reduced by using the tools available.
    ATM Machine 1:
    Here are some questions that I have:
    • Is it necessary to provide HTML help files for every VI? Takes quite a bit of time which could be used elsewhere.
    • For the exam, do you need to make an executable to provide with the solution?
    • I know my 'Enter Pressed' case in the MHL needs some work. 
    • Is there a way to update a single element in the Accounts.txt file or do you need to rewrite the whole file?
    You can find my post on the NI Forums here.
    Or you can get a copy of the code here.
    Boiler Controller 1:
    I have just finished the Boiler Controller example. This took me around 5 hours so I’m getting quicker. Need to practice some common VI’s that I use so that I can get those done quickly. I found the question not as clear as the ATM Machine but I think I got there.
    Some questions again:
    • The Stop button; is that just to stop the application because the shutdown button just restarts the application.
    • I ended up using quite a few local variables but not sure if that’s OK. Is there another way to do things. The main place I used them was for the start and shutdown process to remember the button states and valve position value.
    • My Time Count only counts in seconds. Is it necessary to count in milliseconds?
    • Is it necessary to disable any controls or indicators during certain steps? As far as I can see it doesn’t say so.
    You can get a copy of the code here.
    Car Wash 1:
    This exam was by far the trickiest so far. Once I managed to get my head around the timing system, then the rest of the program just fell into place. I started yesterday and finished it this morning for a total time of around just over 5 hours. Practice is still needed but I am slowly starting to used to some concepts which I will study and hope to be able to use in the CLD exam.
    Only one questions this time:
    • Is it better to update the display in an Update Display case or each time outside the case but inside the While loop like I did in this program? I found it easier to do it this way.
    You can get a copy of the code here.
    Sprinkler System 1:
    I finished the Sprinkler system in just over 4 hours which included being stuck on one part for over an 45min. Out of the four examples, I feel this one was the easiest to complete. I am not sure if is because of the practice that I have been having, or because it is the easiest question. I feel that I am getting there which is good.
    Next is to practice some common components that I can build quickly to save time, like the timing engine and getting the front panel built as quick as possible.
    You can get a copy of the code here.
    Thanks in advance for all your advice.


    Sunday, 2 June 2013

    Raspberry Pi: MCP23008 Port Expander

    I have been wanting to get an MCP23008 I2C port expander connected to my Raspberry Pi for quite a while. I finally got one and during my breaks from LabVIEW CLD exam preparation, made the circuit on some strip board. 

    Using the Quick2Wire Python I2C library makes getting this working really quick and easy. Just make sure you place your LED's the correct way around. I spent a bit of time debugging the I2C until I thought of checking the obvious. 

    Currently I only have the outputs working as I didn't have any switches with me. I'll add two switches and get that going next. 

    Here is the code that I used. I set up a little menu to select which LED to turn on or off. 

    Next I plan to get the software PWM working so that I can connect up to Cheerlights. Need to do some more studying and then will get that going. Also need some RGB LED's first.

    Until next time, happy coding.