Controls development can challenge the best of us and highly integrated and intelligent systems have raised the bar. However, the fundamentals of controls development remain the same, despite the number of systems or complexity of the build.
Here are some of the key learnings we've seen from our best controls projects —
1. Document use cases for system
Controls development projects usually are to enable use cases for a product. Clearly stating these use cases in a written format allows the project team to have a defined goal and focus on product success. If use cases are not clearly defined, you may end up with an awesome control system to lift widget A, while the product really needed to rotate widget Y.
2. Create a prioritized list of features
With use cases defined, they can be broken down into implementable features. It is important for the team to collaboratively prioritize these features so that the most valuable features are developed and tested first.
3. Identify hardware and interface requirements
Software on a control system can be relatively flexible while the hardware is generally less so. Components must be selected by supporting all sensors and actuators in a system; with the heavy penalty of painful migrations and tear-up late in the development process.
4. Document control system architecture using block diagrams Typical controls development projects involve mechanical, electrical, and controls engineers working in tandem. It is important for everyone involved to understand what the control system is meant to do and how it should function. Motivo has found block diagrams to be the most effective tool for communicating this effectively across the team.
5. Create an abstraction layer between hardware interfaces and control algorithms
Testing and debugging interfaces and control algorithms simultaneously is both challenging and ineffective. Creating abstracted interfaces to hardware allows the interfaces to be developed and verified separately from control algorithms. This split also facilitates reuse of hardware interface code for different applications and reuse of control algorithms on different platforms.
6. Build controls in an incremental manner to facilitate unit testing
Smaller chunks of code are easier to test in a comprehensive manner. Testing these building blocks before integrating into the full system ensures controls are built on a stable foundation.
7. Frequently integrate building blocks into full system
Controls development needs to be a balance between implementing and testing low-level functions and integrating these functions into the higher level system. Going too long between integrations into the full system often results in losing sight of progress and miring continuous development.