Designing Distributed Control Systems: A Pattern Language Approach (Wiley Software Patterns Series)