Paul Hoogendijk en Peter van de Velde werken als customer solutions architect bij Verum.

3 May 2011

Veel mensen lopen tegenwoordig rond met een Android-mobieltje of een Iphone. Voor beide platforms zijn al heel wat apps verschenen. Wat komt er zoal bij kijken om een app te porten van Android naar Iphone (of vice versa) als de software is gemaakt met een modelgebaseerde aanpak? Verum heeft dit onderzocht voor een bestaande machinebesturingsapplicatie. Uit dit experiment blijkt dat de vertaling eenvoudig en goedkoop is (65 procent in een halve dag) en dat het werk vooral zit in de handgeschreven code (35 procent in acht dagen).

Enkele jaren geleden hebben we bij Verum de machinebesturingssoftware gemaakt voor een waferinspectie-unit van het Duitse bedrijf Nandatech. Daarbij hebben we gebruikgemaakt van model-driven development (MDD). Om de MDD-manier van werken te kunnen demonstreren, hebben we met Lego Mindstorms een demo gebouwd van het systeem. Dit had als bijkomende voordeel dat we gelijk een deel van de werking konden valideren. Conceptueel doet het legobouwsel hetzelfde als de waferinspectie-unit: onder controle van een manufacturing execution system (Mes) krijgt het een batch van wafers aangeboden om te inspecteren, waarna het iedere plak controleert op een aantal kenmerken. Op basis van het inspectieresultaat keurt het systeem de wafer goed voor verdere productie, of af.

Het inspectieproces bevat concurrencyaspecten en vele discrete beslismomenten (bijvoorbeeld: schakelaar is wel of niet ingedrukt, motor heeft wel of niet positie bereikt), waar de software besluit wat de vervolgactie wordt op basis van de situatie. Het ’controle‘-aspect in de software (gedrag) is zo ingewikkeld dat het lastig is om dit met handgeschreven code te implementeren. Bovendien is het ondoenlijk om de correctheid van de software door testen te verifiëren en aan te tonen, en wel om twee redenen: ten eerste kost grootschalig testen zeer veel tijd en geld en ten tweede kun je geen gedrag testen dat je niet verwacht. Hierdoor is het onmogelijk om daadwerkelijk alles te testen. Daarom hebben we de software gemaakt met MDD op basis van formele verificatie.

Aansturing van het legosysteem gebeurt door de machinebesturingsapplicatie. Deze legoapp draait op een Android-platform en communiceert via Bluetooth met vier Lego Mindstorms Nxt-bricks, die de motoren bedienen en de sensoren uitlezen. De app omvat gegenereerde code uit modellen die alle machinegedrag beschrijven, een GUI die deze code aanstuurt en een handgeschreven hardwareabstractielaag (Hal) die de gegenereerde code aanroept voor de aansturing van de motoren en het uitlezen van de sensoren via Bluetooth. De applicatie heeft ook een modus waarin de Mindstorms-hardware inclusief de Bluetooth-communicatie wordt gesimuleerd.

De modellen van het legosysteem zijn gemaakt met de ASD:Suite, die Java, C++, C# en (Misra-)C kan genereren. De gepatenteerde methode gebruikt interactieve visuele (formele) verificatie om de correctheid van de modellen aan te tonen. De gegenereerde code voor elke programmeertaal vertoont hetzelfde gedrag als beschreven in de modellen, en omdat de modellen formeel zijn geverifieerd, is de applicatie gegarandeerd vrij van gedragsfouten.

 advertorial 

Machine Learning Conference: 30 March 2022

Machine learning is taking the industry by storm. On 30 March 2022, Bits&Chips organizes the fourth edition of the Machine Learning Conference as a live event in ’s-Hertogenbosch. Interested in giving a talk? We welcome your proposal!

Verum waferinspectiedemo
Om de MDD-manier van werken te kunnen demonstreren, heeft Verum met Lego Mindstorms een demo gebouwd van een waferinspectiesysteem.

Eenvoudig en goedkoop

Om de legoapp van Android naar Iphone te porten, hebben we geen Java uit de modellen gegenereerd maar C++-code. Dit toont een ander belangrijk voordeel van MDD: de modellen worden zonder noemenswaardige aanpassingen hergebruikt en er wordt alleen code gegenereerd voor een andere taal. Vervolgens hebben we de bestaande handgeschreven Java-code (GUI en Bluetooth-communicatie met Nxt-bricks) met de hand omgezet naar C++. Na de gebruikelijke ’inleercurve‘ in een nieuw ontwikkelplatform is het uiteindelijk gelukt om de app in simulatiemodus te installeren op de Iphone en vanuit de telefoon uit te voeren.

Het applicatieframework en de GUI voor de Iphone zijn gemaakt in Objective-C, dat gemakkelijk integreert met de gegenereerde C++ uit de modellen. Het maken van de gebruikersinterface ging redelijk eenvoudig; het porten van de Hal, de laag voor de communicatie met de bricks, was complexer. De gegevensuitwisseling via Bluetooth werkt volgens het Serial Port Profile (SPP), dat de Iphone niet ondersteunt. Daarom hebben we besloten een communicatiebrug te bouwen. Deze brug, geïmplementeerd op een pc, praat via Wifi met de Iphone en via Bluetooth met de Nxt-bricks.

De originele machinebesturingsapplicatie bevat zo‘n 21 duizend regels code. Daarvan is ongeveer 65 procent gegenereerde code, vijftien procent handgeschreven client-code en twintig procent handgeschreven Hal-code. Het porten heeft respectievelijk een halve dag, twee dagen en zes dagen gekost.

Dit experiment laat zien dat het overzetten van software naar een andere programmeertaal op basis van MDD eenvoudig en goedkoop is. Het meeste werk zit in de vertaling van handgeschreven code. Vooral de Hal kost beduidend meer tijd dan de GUI. Hoe meer code er wordt gegenereerd uit modellen, hoe makkelijker de port te doen is.