Aanpassende programmering (Customisation)

Na de live stress test, weten we dat het systeem qua communicatie load kan functioneren. Vanaf dat moment is het tijd om de (standaard gegenereerde) business logica en de logica en user interfaces op de clients te gaan aanpassen aan de wensen van de klant.


Programmeren = aanpassen

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 progammeertaal is dat c# de meest gebruikte programmeertaal is en hiervoor de 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 teksttuele 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