Industrial Sensors UI
A profound application that allows to provide complex configuration for sensor devices.
Our customer is a worldwide leader in retail POS scanners which is based in Italy and it focuses on specific markets: Automatic Data Capture and Industrial Automation.
The project is a UI client for industrial sensors. It is a profound application that allows to provide complex configuration for sensor devices. It communicates with devices via Thrift (software framework for scalable cross-language services development). The device with application (v. 1.2) is in production already.
One of the first challenges of this project was to create an interface for communication between the client application and the sensor device. This interface should have allowed to transfer complex data objects, configuration files etc. The hardening factor was that client application was created with C# and the sensor’s software – with C++. The solution was to use Apache Thrift. This framework allowed us to define all possible communicating interfaces as services for both sides. Also Thrift framework generated C# and C++ code that we used for handling of requests.
Another big challenge was to provide a compatibility of application with wide range of different devices. Each sensor has it’s own set of parameters that can be different from device to device. The first approach was to provide a plugin for each device, that was passed from device to client application and registered as a component with MEF. The plugin contained an UI control that allowed to change device settings. But the final solution was much more elegant: the generic control that allows to visualize any parameter with corresponding UI control, depending on attribute value in xml schema file.
One more challenge was to manage a huge amount of constraints and dependencies between configurable parameters. For this purposes was developed a dictionary of rules, which were described in xml schema. Each parameter was able to contain own set of rules and changing of each parameter triggered execution of it’s rules to provide changes of all dependent values.