Building HMI of Harvester with Qt

At Qt Developer Days 2014 in San Francisco, I gave a talk with title “Case Study: Driver Terminal for Forage Harvester”. I describe the technical challenges and their solutions when I helped Krone to develop the driver terminal of their new BigX 480/580 forage harvesters with QML, Qt and C++. Here are the slides of my presentation and an abstract.

Slides

Abstract

The driver terminal of Krone’s BiG X 480/580 forage harvester uses dials, info fields, quick-access buttons and status buttons to show about 30+ pieces of information on its home screen. The driver can change some of the information directly on the home screen. The terminal receives up to 1000 signals per second from the “machine” over 4 CAN buses. Some of the signals are received up to 100 times per second. Nevertheless, the needles of the dials and the digital numbers must change smoothly.

Moreover, the driver can fine-tune 1000+ parameters of 30 control units. He can perform on-board diagnostics and calibrate parts of the machine. He can dynamically change between languages, measurement units, and day and night mode. The terminal can “count” the harvested area, diesel consumption or the usage hours of the cutting drum or front attachment.

I was the lead developer for building the driver terminal of Krone’s BiG X 480/580 forage harvester (see this press release for a detailed non-technical description of the project). I worked together with two developers from Krone and an independent UI designer. It took the team 21 months from the first UI design to the product release. A first prototype was ready for a maize harvest after less than three months. The GUI parts of the driver terminal were developed with QML and the non-GUI parts with Qt/C++.

I will share my first-hand experience from this project and will explain how the team solved some typical challenges of such a project.

  • The team used a multi-threaded architecture to cope with the load of up to 1000 messages per second from the machine. The communication between the threads is done exclusively with Qt’s signals and slots. Special considerations are needed for singletons.
  • The team faced some QML performance problems. For example, the standard implementation of a screen stack from QtQuick components would require the graphics power of a 4K TV. Or, over-generalised QML delegates, which make unused parts invisible, can render the scrolling of a ListView unusable.
  • Selecting the right touchscreen display, which is used on a 500 horse-power harvester with “good vibrations” under bright daylight and at night, is quite tricky.
  • The project started with Qt 4.8 on an Intel-Atom system with Windows XP and without OpenGL acceleration. It then moved to an ARM Cortex-A8 CPU with OpenGL acceleration. It was finally released with Qt 5.1.
  • The ultimate challenge was to develop the driver terminal with three developers and one UI designer in less than two years. A first prototype had to be available for the maize harvest after three months. Problems found during the 6-weeks window of a harvest season had to be fixed basically over night.