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: 

CLA Attempt - ATM

Dear NI Community,

 

Following on from my previous attemt at the Elevator CLA past paper, I attempted the ATM CLA past paper today and was looking for some further feedback and help with how to pass the exam.  Based on the feedback from the Elevator I have tried to plan how I went about the exam more wisely.

 

Enjoy, and once again - any feedback would be greatly received 🙂

 

Thanks in advance,

Robert Ward, CLD
 
FYI: I have the real thing on 3rd June
Dr. Robert M. Ward MSci PhD CPhys CLA CPI

Certified LabVIEW Architect M>easurement Badge Measurement Badge

0 Kudos
Message 1 of 9
(5,627 Views)

MUCH better.  Just some more comments though.

 

1. Do not show the label for EVERY function, especially the primitives.  The context help can tell you what those are.  You are just wasting time by actually showing the labels.

2. You can GREATLY simplify your Communications Action Engine simply by getting rid of the queues.  You have comments that the developer needs to be careful and only use the User Event to communicate between modules.  So do not even give them the opportunity to mess it up.  Create the queues directly on the modules that will use them.  Only pass the User Event around in the Action Engine.

3. For the Display Console, you do not need to call the User Event just to update the screen for EVERY case.  Do the update inside of the message handler loop by unbundling directly off of the shift register (still inside of the loop).  This will help the other modules as well since they will have to process the User Event as well (even if they are not doing anything with it).

 

I only made mods to the Display Console and the Action Engine so you can see what I am talking about (at least for points 2 and 3).


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
Message 2 of 9
(5,564 Views)

Hi Cross,

 

Thanks for sharing the architecture , what is the name you call this architecture .

0 Kudos
Message 3 of 9
(5,204 Views)

Hello Robert ,

 

Thanks for developing such a good architecture this gives us more inside .

Could you please provide more details about the architecute design and how it communicated with other modules .that is inter process communication .

I am taking this architecure as a base and prepare for my CLA exame .

waiting for your reply .

Regards,

Prithviraj

0 Kudos
Message 4 of 9
(4,987 Views)
Hi Prithviraj,

Thank you for the feedback, and good luck with your CLA. I use the user event to pass global messages around. Which each module is registered to listen to, and each module itself is a queued message handler.

Might not be the best way, since the default case in the case structure for the user event is just wired through but it gets the job done.

Thanks,

Rob
Dr. Robert M. Ward MSci PhD CPhys CLA CPI

Certified LabVIEW Architect M>easurement Badge Measurement Badge

0 Kudos
Message 5 of 9
(4,958 Views)

Hi Robert ,

Thanks for your reply .I have couple of questions .kindly provide your answere .

Q1.How did you arrive with this architecurter . I mean could you pleaase provide more details about this architecture . since i am practise this .i need to know in and out of this arch.

I belive you are following View model arch.is view model arch and QMH is both are same or is there any major difference .

Q2.I have a one big question in the arch ,how do u create cluster parameter when the cluster element is not avaliable .is this you have give to developer to build this ?

Q3.Queues initialisation is there in only one place . do the developer need to create the queues in another places .

these are the question ,I request to get clarified from your end .

 

Regards,

Prithviraj

0 Kudos
Message 6 of 9
(4,947 Views)

Hi Prithviraj,

 

Q1. This architecture was something I had seen from a sample solution and seemed to be what I was after for a more complex application I was working on.  It seems like the CLD is more concerned with how you code up one module and the CLA is how you would code up several modules that can communicate with each other. Hence why the user event brings everything together through inter-process communication 🙂

 

The reason why I describe it as a model-view-controller is because all the controls AND indicators can exist in the event stucture (view) and be updated by user events.  This allows me to pass global updates to modules running in separate independent threads and handle the event accordingly e.g. start/pause/stop etc. It would be quite easy to swap the data cluster for an object (model) and bring all the advantages of OOP e.g inheritance into the module.  The Queued Message Handler in the consumer loop (controller) is then the action engine that can execute the relevant methods in the class.

 

Please see https://decibel.ni.com/content/docs/DOC-31625

 

When I develop code nowadays I have since found a love for sub-panels as it allows me to have several modules running in asynchronous threads independently of one another in the background and I can just display the relevant module to my user as and when required.

 

Q2. I would let the developer build the cluster, but it wouldn't harm to think about what data types might go into it (or if you are in OOP speak then what properties & methods the class has).  If you comment it as per the requirements document then this would be a good idea.

 

Q3. I don't code my queues up in this way anymore in reality mainly because I want to have multiple instances of modules running asynchronously so need to dynamically create queues.  I would have the obtain queue and enqueue (initialise) inside the module itself now.

 

I hope this isn't information overload and don't forget that simpler architectures can still solve complex problems (occam's razor) - but hope this helps. 


Thanks,

Dr. Robert M. Ward MSci PhD CPhys CLA CPI

Certified LabVIEW Architect M>easurement Badge Measurement Badge

Message 7 of 9
(4,932 Views)

Hi Robert,

 

Thanks for the woundeful reply .I would like to know few things.

1.Why are you creating event reference and again destroying the event reference.as i have attached 

2.As you mentioned below as dynamic queue creation .how are you creating dynamic queues in your architecture.please let me know this is very important for me to understand.

 

Regards,

Prithviraj

 

0 Kudos
Message 8 of 9
(4,904 Views)

Hello Michael,
Hope you are doing good . I copied your architecture and I have practised as it is in the exampel which you have provided . kindly review my code and suggest me if I need to update or practise any thing else .

The one big question whihc i didnt get answere for the below question .kindly answere before 4th Dec and help me in passing .
1.How does Error handling module wil handle error with Event driven . if the usere presses the button for 2 -3 time continiously then the event will be struck in the event driven . Instead of event driven can i go with queues modules ?.
2.How does COntroller Module will behave . how does controller module acts as a controller in distributing the message to all the other modules . Or it is jus a module ?
3.What about error logging for Warning ,Error and critical error .

I have added my code . kindly review and provide your valauble suggestion .

Regards,
Prithviraj

0 Kudos
Message 9 of 9
(4,612 Views)