Odnośnie CLD, to źle do niego podchodzisz według mnie. Rozkład punktów preferuje w znacznym stopniu jakość kodu i dokumentację a niżeli funkcjonalność. Jeżeli twój styl tworzenia kodu jest zgodny z zaleceniami NI (nie zawijające się kable, dokumentacja VI-i i zrobienie ikon), to masz już powiedzmy, że 20 punktów. Do wymaganych 28 punktów brakuje Ci jedynie 8, co jest połową punktów za funkcjonalność.
Dokumentacji:
Głównie chodzi o opis samego VI-a, który nie musi być nawet po angielsku. Wystarczy, że napiszesz, że dany VI wczytuje plik i już masz zaliczoną dokumentację dla tego VI-a. Co do ikonek w VI-ach, to najprostsze obramowanie i tekst File Load się sprawdzi bez problemu, albo cokolwiek innego. Chodzi o to, że nie możesz mieć wszystkich ikonek takich samych, ani nie może być standardowa ikonka.
Styl:
Głównie chodzi o to, żeby był jakiś wzorzec projektowy widziany na pierwszy rzut oka. Masz LV 2012, to zobacz sobie jak powinna wyglądać maszyna stanów zgodna z zaleceniami NI (w oknie startowym klikasz Create Project i wybierasz Simple State Maschine. Na samym egzaminie możesz bez problemu zrobić w ten sposób maszynę stanów, choć szybciej według mnie jest zrobić ją przy pomocy Quick Dropa (Ctrl+Spacja) i skrótów do niego (
https://decibel.ni.com/content/docs/DOC-8344). Z tym zrobienie podstawy takiej maszyny stanów jak przykładowa to na oko 1 minuta jak się zna je dobrze (choć znam takich, co to w 20 sekund zrobią).
Dobrą rzeczą jest także tworzenie projektu, ponieważ przyśpiesza on samo tworzenie i mamy podgląd na mierząco co już mamy zaimplementowane (jeżeli robisz VI-e do funkcjonalności).
O niepołamanych kablach, zakrywających VI-ach i obsłudze błędów chyba nie muszę pisać.
Funkcjonalność:
Najogólniej każdy punkcik, podpunkcik itd. w instrukcji, to jest funkcjonalność i zwykłe uruchomienie i zamykanie aplikacji, to już daje Ci coś do puli. Oczywiście podstawą jest, żeby aplikacja się uruchomiła, bo jeeli tego nie będziesz miał, to już lecisz prawie z wszystkimi funkcjonalnościami, a przynajmniej z większością.
Odnośnie kodu, który stworzyłeś, to na pierwszy rzut oka wygląda ok, choć za mało dokumentacji. Nie używaj Use default if unwired, ponieważ przy każdym takim połączeniu musisz dodać komentarz dlaczego tak. Lepiej zrób przy każdym takim stałą i bedzie ok. Kod też jest za duży, co biorą też pod uwagę przy ocenianiu. Jak będziesz stosował maszynę stanów, to spokojnie się zmieścisz.
A teraz najlepsze: każde zadanie z CLD da się zrobić na maszynie stanów i każde zadanie z CLD ma jakieś timery (chyba, że coś innego wymyślili). Producent/konsument jest za duży na te aplikacje i dlatego się nie wyrabiasz. Pewnie zastanawiasz się jak zrobić. Otóż masz bardzo dobry pomysł z timerem FGV. Należy go użyć w innym miejscu. Maszyna stanów powinna mieć stan WaitForEvents w którym masz Event Structure służący do zbierania eventów od guzików itd. Event Structure ma też wejście timeout, które jest w tym przypadku bardzo pomocne.
Załóżmy, że masz aplikację myjni i samochód ma cię myć powiedzmy 5 sekund. Po ustawieniu wszystkiego ustawiasz timer FGV na 5 sekund i przechodzisz do stanu WaitForEvents. Timeout oczywiście ustawiany na 5000 ms. jeżeli użytkownik w czasie tych 5 sekund coś zrobi, to obsługujesz zdarzenie i mówisz timerowi, żeby zwrócił czas jaki pozostało do końca tych 5 sekund. Wiem, że może trochę zagmatwane w opisie, ale może dasz sobie radę. Jeżeli nie wiesz o co chodzi, to mogę dodać przykład.
Jeżeli ktoś ma jakieś ale, albo gdzieś coś źle napisałem, to informować, bo nie wszystko może być jasne, albo coś źle ja zrozumiałem.