Efficiënt een project doen

MESBuilder is gericht op efficiënte engineering

Alles in MESBuilder is erop gericht om met zo min mogelijk engineeringstijd een systeem op maat te leveren wat aan de wensen van de klant voldoet. Tegelijkertijd moet de engineeringswijze ons wel de flexibiliteit geven om dit te realiseren.

MESBuilder is gericht op een minimale engineeringstijd

MESBuilder is gericht op een minimale engineeringstijd

Dit is de reden waarom wij voor een techniek genaamd Model Driven Software Development hebben gekozen. Het bedrijfsmodel van de klant is het uitgangspunt, hiermee gaan we verder. Wij geloven simpel niet dat een zeer specifiek operationsmodel van een klant in de 'voeding' of 'pharma' moeiteloos in een 'one-size fits all' package van een doorsnee model van een bedrijf in die branche past. Een bedrijf moet zich nu eenmaal onderscheiden en vaak is dat op het gebied van de operations


Hoe efficiënt is MES Builder ?

Modeleren=vooronderzoek=haalbaarheidsstudie

'One size fits all' - niet voor operations

'One size fits all' - niet voor operations

Een kostbaar vooronderzoek of haalbaarheidsstudies zijn niet apart nodig met MESBuilder. Het vooronderzoek is meteen de eerste engineeringsstap. Het houden van interviews en de analyse van de operations ter plekke leidt tot het opstellen van het bedrijfsmodel, inclusief de functionele eisen en logica. Al deze gegevens voeren we in in de MESBuilder modeller. Het vooronderzoek en de eerste engineeringsstap worden zo in één stap gedaan. De rapportage uit de modeller is het vooronderzoek - en brengt volgens de regels van System Engineering model eisen en functies in kaart. Het model wordt ook gebruikt om het pakket mee te genereren en kan worden gebruikt om de bedrijfsvoering te simuleren.
Een bedrijfsmodel is voor een MKB bedrijf is binnen een paar uur tot een paar dagen samen te stellen en in te voeren.

Programmeren = aanpassen

Na modeleren komt genereren, configureren en programmeren. Generatie gebeurt on-line en configuratie kost ook een paar uur tot een paar dagen.

Om uw specifieke bedrijfslogica in het systeem te kunnen krijgen moeten we programmeren - MES pakketten die geheel configurabel zijn bestaan niet. Ook in deze stap is alles in MESBuilder erop gericht om dit zo efficiënt mogelijk te doen. 

Als er geprogrammeerd moet worden, dan zo effectief mogelijk

Als er geprogrammeerd moet worden, dan zo effectief mogelijk

De programmering van de finesses zoals uitvoering van de business regels op de achtergrond – bijvoorbeeld wat er gebeurt na afloop van een proces - gebeurt in de programmeertaal c#, is eenvoudig en kan gebeuren door een programmeur met junior skills. De plaatsen waar de code moet komen zijn al gegenereerd. De programmeeromgeving is een aangepaste versie van Microsoft Visual Studio 2013. De reden waarom we hiervoor kiezen en niet voor een eigen programmeertaal is dat c# de meest gebruikte programmeertaal is en hiervoor de meeste programmeurs beschikbaar zijn.

De clients inclusief de user interfaces worden ook standaard mee gegenereerd. Userinterfaces moeten dus alleen worden aangepast en worden niet vanaf de grond opgebouwd.
Voor de terminals bij de machines gebruiken we meestal Windows applicaties. Voor desktops, tablets en smartphones is een webapplicatie beschikbaar. Het naar wens aanpassen van de gegenereerde grafische pagina’s en webpagina’s is werk voor een medior programmeur en kost relatief gezien de meeste tijd. Het streven is altijd naar een minimaal aantal handelingen voor een operator op de werkvloer en het onmogelijk maken van foute invoer. Hierdoor zit er relatief veel logica in een pagina, wat niet te vermijden is.


Een voorbeeld van gegenereerde en aangepaste userinfaces

Het volgende voorbeeld laat zien hoe van een gedeelte van een model een grafische pagina uit de generator komt, het toont de pagina na aanpassing en het toont de pagina in runtime. De totale programmeertijd van deze userinterface wordt dankzij generatie van de standaardinterface met 90% teruggebracht in vergelijking met een userinterface vanaf scratch bouwen. De userinterface is helemaal op klantspecificatie gebouwd en is gericht op het tonen van alleen de nodige informatie, het voorkomen van foute invoer en zo min mogelijk administratieve handelingen tijdens het proces.

Het model

Hieronder wordt een gedeelte van een MES model getoond (runtime)in een OPCUA client (dit is niet een MESBuilder client). Het geeft een indicatie van hoe een machine in een model is opgebouwd.
Het gaat om 'productiemachine1'. Productiemachine1 is van het type 'productiemachine' en heeft als properties onder andere het nummer van de laatste run, het laatste uitgegeven SSCC nummer op die machine en de machine status 

Productiemachine1 heeft een statusobject genaamd 'CurrentProductieRun'. Dit is de run die op dit moment bezig is. Hier is onder andere vastgelegd welke productcode er draait, welk runnummer er draait en het type run.

Verder zijn er twee mappen met 'Current material consumed' en 'Current material produced'. Hierin zitten de materialen die tijdens deze run geconsumeerd respectievelijk geproduceerd zijn. Deze zijn dynamisch in grootte. Aan onderstaande figuur kunnen we afleiden dat er twee stuks materiaal geproduceerd zijn. Openklikken van deze objecten zouden de details van de geproduceerde goederen aangeven.


Het runtime model van een productiemachine, gezien vanuit een OPCUA client

Het runtime model van een productiemachine, gezien vanuit een OPCUA client


De standaard gegenereerde  user interface


Het onderstaande plaatje toont de standaard gegenereerde user interface. In de modellering is gesteld dat deze view uit het machineobject zelf moet bestaan, het runstatus object en de twee lijsten met geproduceerde en geconsumeerde goederen. Dit is een kijkje in de ontwikkelomgeving, in dit geval Visual Studio (aangepast). Zou dit opgestart worden in runtime, dan worden de real time gegevens getoond.


Een dialoogvenster uit de generator, met twee lijsten en twee objecten

Een dialoogvenster uit de generator, met twee lijsten en twee objecten


De aangepaste userinterface

Het bovenstaande beeld is vervolgens aangepast naar hieronder. De achtergrondkleur is aangepast. Er zijn buttons bijgekomen. Data is logisch gegroepeerd. Er zijn twee usercontrols bijgekomen die de productcode tonen in bruikbare taal. Zowel voor een webapplicatie als een windows applicatie wordt het MCV principe gebruikt. Dat wil zeggen dat de logica gescheiden is van de view. In de logica bevinden zich de acties die onder de buttons zitten en de validaties van de input. In de view bevinden zich het verbergen van elementen en het veranderen van kleur.

Het dialoogvenster na aanpassingen

Het dialoogvenster na aanpassingen

Runtime als de machine wacht

Het onderstaande beeld is de runtime versie van de bovenstaande GUI. Er zijn een groot aantal elementen verborgen. Dit komt omdat er nog geen productie is opgestart. Alleen de hoognodige informatie en knoppen zijn zichtbaar.


Runtime,geen productie gestart, alleen het nodige zichtbaar

Runtime,geen productie gestart, alleen het nodige zichtbaar

Runtime als de machine draait

Het onderstaande beeld is de runtime versie van de  GUI als er een productie is opgestart. Alleen de hoognodige informatie en knoppen zijn zichtbaar. Dit is aanzienlijk meer dan wanneer er geen productie is. De productcode van de run is zichtbaar in tekstuele vorm. De lijst met geproduceerde materialen zien we bovenin.

Runtime, productie gestart, er is meer zichtbaar, maar alleen de informatie de nodig is

Runtime, productie gestart, er is meer zichtbaar, maar alleen de informatie de nodig is

OPC UA Client

Het MESBuilder systeem is een OPCUA server. Met een standaard OPC UA client -in dit geval van Unified Automation - en met de juiste inloggegevens, kan een beveiligde en encrypted verbinding worden opgezet met de MESBuilder server. Hierbij een totaaloverzicht van het model in deze standaard OPCUA viewer.

Model in standaard OPCUA client van Unified Automation GmbH

Model in standaard OPCUA client van Unified Automation GmbH