Software Engineer - Automation and Controls
About the role
We are seeking a Controls Software Engineer to join our Equipment Engineering team. In this role, you will develop C# desktop applications that control and interface with custom production and engineering equipment using a variety of hardware communication protocols, including Ethernet, USB, and RS-232. You will work alongside mechanical, electrical, and software engineers to design, develop, and continuously improve innovative manufacturing equipment. This position offers the opportunity to work on challenging, real-world automation systems while helping develop reliable, maintainable software that supports both engineering and production operations.
Our team is committed to modern software development practices, including clean architecture, object-oriented design, source control, and collaborative development, providing an excellent environment for engineers to learn and grow.
Responsibilities
- Develop and maintain C# desktop applications that control and interface with production and engineering equipment.
- Design, implement, test, and debug software that communicates with hardware devices using Ethernet, USB, RS-232, and other industrial communication protocols.
- Collaborate with mechanical, electrical, and software engineers throughout the design, development, and commissioning of new equipment.
- Write clean, maintainable, and well-documented code using modern software engineering principles and team coding standards.
- Utilize version control systems (Subversion, Git, etc.) and participate in collaborative development workflows, including branching, merging, code reviews, and CI/CD processes.
- Troubleshoot software and hardware integration issues using common electronic test equipment and diagnostic tools.
- Support continuous improvement efforts by identifying opportunities to enhance equipment performance, reliability, and maintainability.
Qualifications
- Bachelor's or Master's degree in Computer Science, Software Engineering, or a closely related field.
- 0-2 years of software development experience, including internships, co-op experience, or relevant academic projects.
Skills
- Strong foundation in object-oriented programming with C# and the .NET platform.
- Experience developing Windows desktop applications using WPF and the MVVM design pattern.
- Familiarity with modern software engineering practices, including Clean Architecture, SOLID principles, dependency injection, and the .NET Generic Host.
- Experience using version control systems such as Git or Subversion in a collaborative development environment.
- Working knowledge of SQL databases and data access concepts.
- Familiarity with hardware communication protocols such as Ethernet, USB, or serial (RS-232) interfaces.
- Exposure to industrial automation technologies, including PLCs, Beckhoff controllers, or Structured Text, is a plus but not required.
- Experience with Linux and embedded platforms such as Raspberry Pi is a plus.
- Strong analytical and problem-solving skills with an interest in developing software for real-world automation systems.
- Interest in writing clean, maintainable, and reusable software as part of a collaborative engineering team.
Location
This role requires on-site presence; it is not a remote position.