Part 1 - Production line modeling

In this section we identify the equipment models and instances we need to describe and handle the production line data

Introduction

The first thing in our application development is to identify the things that needs to be presented with equipment models. Typically equipment model is describing some physical asset or device such as oven. Whole production line can also be a separate model if needed, but it can be also just equipment instances that are connected to each other in equipment hierarchy. One model can also contain reference links to other equipment such as mixer contains raw materials dosing equipment.

The product itself, i.e. cookie or cookie package, is not an equipment. Product is more like an event or as in this case a batch of cookies is the event. The event has typically some id (batch id) and start and end timestamps, and further many measured or calculated properties such as amount of cookies, production price, used raw materials, and quality. The calculated values and key performance indicators can be stored to the event itself or to numerical history. Many times the numerical history is more handy, because it supports better e.g. recalculations. The batch related values can be found in history with the start time stamp of the batch.

One another thing that is an equipment is the recipe. Recipe contains multiple properties and production instructions. Recipe can also evolve over the time when something is changed in it e.g. to improve quality. This is why most of its properties are time series so that we can trace back to see how we produced this type of cookie 3 years ago.

The goal is to build a small scale MES (Manufacturing Execution System) application for the cookie production line. The application includes recipe management, production planning, monitoring, reporting, and traceability from end products back to production details.

Our example Cookie Production Line

Example of our cookie productionline process


Cookie Line

In our example one cookie production batch takes depending on recipe in average 36 minutes to finish and one batch produces typically 72 bags of cookies, each bag containing 36 cookies. The dispensers measure and dose the raw materials to mixer where our cookie dough is mixed. After this, the ready-made dough will be dosed to cooking trays and moved to the oven to bake. From there the baked cookies are transferred to the packaging machine and packed into sales batches. Each produced batch has a unique batch Id and pallet Id.

Batch Identification

Each production batch is identified with unique id that is stored in CookieBatchId property. Whenever the value of CookieBatchId changes, it tells that a batch starts or ends or actually the change typically describes that the previous batch is completed and a new started. The batch calculations are triggered by the changes of CookieBatchId application calculation.

Equipment

First, we create one Equipment class called ProductionLine that defines the production line and production line wide properties such as CookieBatchId and which recipe is currently in production. For this we create one instance called ProductionLine 1 (We use numbering here for multiple production line instance purposes). Then we create four other equipment: Mixer, Oven, Packager and Dispenser. Mixer and Dispenser are instances below ProductionLine 1, but Oven and Packager are defined as reference properties, because they can be shared with other production lines. For Reference Target we will mark the class name (this will be shown in the tables below). By doing this, we are able to access the instances and properties of each model through our base model instance ProductionLine1.

Mixer is not shared with other possible cookie lines, so this will only be an instance under our ProductionLine 1 and in our calculation we will map this separately.

Dispenser is responsible for measuring raw material amounts to Mixer. Our Dispenser has six instances matching our raw material and dough dispensers and these will be accessed through Mixer equipment. To enable this, we create reference properties of each raw material instance to our Mixer class. This is to tie together our Mixer and Dispensers within.

Recipe Library

Recipe tells the amounts of raw materials used for each type of cookie and instructions for the production. Recipe instances form a library of recipes that can be used for our production line. Recipe that is currently in production controls the production process. Production plan contains information which recipe shall be used in production starting from some particular time.

We add an equipment named Recipe and for this we create three recipe instances: ChocolateCookieRecipe , PeanutbutterCookieRecipe and OatmealCookieRecipe.

Then to tie this to our ProductionLine class we create two reference properties to our ProductionLine class: RecipeInProduction and RecipePlan. These will be historized GUID properties that are references to our Recipe class. We create our recipe production plan with the RecipePlan property by entering the values to future to define which recipe shall be applied in production. The planned recipe is then applied to production at the start of the production batch and it is controlling the production and recorded in RecipeInProduction property.

All Equipment model definitions and properties are shown in the tables below.

Model definitions

NameAbstractClass name
ProductionLineNoPath_ProductionLine
MixerNoPath_Mixer
OvenNoPath_Oven
PackagerNoPath_Packager
DispenserNoPath_Dispenser
RecipeNoPath_Recipe

Model properties

After defining the model hierarchy, we will create properties and define their attributes.

ProductionLine

PropertyData typeUnitHistorizedDescriptionReference Target
CookieBatchIdstringYesUnique identifier for each batch
OvenGUIDNoBaking ovenClass:Path_Oven
PackagerGUIDNoCookie sales batch packagerClass:Path_Packager
ProductionStatebooleanYes0 = off, 1 = on
ProductionTimeinteger (32bit)MINYesTime per one batch production in minutes
RecipeInProductionGUIDYesReference to recipe instanceClass:Path_Recipe
RecipePlanGUIDYesReference to recipe instanceClass:Path_Recipe

Mixer

PropertyData typeUnitHistorizedDescriptionReference Target
AverageTemperatureFloating point value (64bit)celsiusYesCalculated average temperature
ButterGUID for butter instance in Dispenser classNoCookie raw materialClass:Path_Dispenser
ChocolateGUID for chocolate instance in Dispenser classNoCookie raw materialClass:Path_Dispenser
DoughGUID for dough instance in Dispenser classNoReady-made cookie doughClass:Path_Dispenser
EggGUID for dough instance in Dispenser classNoCookie raw materialClass:Path_Dispenser
FlourGUID for dough instance in Dispenser classNoCookie raw materialClass:Path_Dispenser
MixingStateFloating point value (64bit)YesEnum, 1 = on, 2 = off
SugarGUID for sugar instance in Dispenser classNoCookie raw materialClass:Path_Dispenser
TemperatureFloating point value (64bit)celsiusYesRecorded temperature

Dispenser

PropertyData typeUnitHistorizedDescription
AmountFloating point value (64bit)kgYesAmount of material used
AmountTotalFloating point value (64bit)total kg/batchYesTotal amount of material used in one batch
MaterialInteger (32bit)Yes1=butter/2=sugar/3=egg/4=flour/5=chocolate/6=dough
MaterialIdStringYesUnique per batch identifier for each material
PriceFloating point value (64bit)EUR/batchYesPrice per material amount used
PriceTotalFloating point value (64bit)EUR/batchYesTotal price per material used in one batch

Oven

PropertyData typeUnitHistorizedDescription
CookingTimeFloating point value (64bit)secYesCooking time in the oven
TemperatureFloating point value (64bit)celsiusYesRecorded temperature

Packager

PropertyData typeUnitHistorizedDescription
AveragePackagerTemperatureFloating point value (64bit)celsiusYesCalculated average temperature
Bag numberInteger(32bit)YesBag number counter for packing bags in pallet
CookiesInBagInteger(32bit)YesCounter for packing cookies in bags
PackagerTemperatureFloating point value (64bit)celsiusYesRecorded temperature
PalletIdInteger(32bit)YesUnique per batch identifier for each pallet

Recipe

PropertyData typeUnitHistorizedDescription
ButterFloating point value (64bit)kgYesRecipe ingredient amount
SugarFloating point value (64bit)kgYesRecipe ingredient amount
FlourFloating point value (64bit)kgYesRecipe ingredient amount
EggFloating point value (64bit)kgYesRecipe ingredient amount
ChocolateFloating point value (64bit)kgYesRecipe ingredient amount
OatmealFloating point value (64bit)kgYesRecipe ingredient amount
PeanutbutterFloating point value (64bit)kgYesRecipe ingredient amount
DoughFloating point value (64bit)kgYesRecipe dough amount

Instance hierarchy

ProductionLine1
		├── RecipeLibrary
    │   ├── ChocolateCookieRecipe
    │   ├── PeanutbutterCookieRecipe
    │   ├── OatmealCookieRecipe
		│
    ├── Mixer
    │   ├── Butter
    │   ├── Sugar
    │   ├── Egg
    │   ├── Flour
    │   ├── Chocolate
    │   └── Dough
		│
    ├── Oven
    └── Packager

As the instance hierarchy shows, raw materials are Dispenser instances that are being derived to Mixer. The properties of these instances may be accessed through Mixer path. See table below.

Instance paths

NameFull path
ProductionLine1ProductionLine1
MixerProductionLine1.DoughMixer
ButterProductionLine1.DoughMixer.Butter
SugarProductionLine1.DoughMixer.Sugar
EggProductionLine1.DoughMixer.Egg
FlourProductionLine1.DoughMixer.Flour
ChocolateProductionLine1.DoughMixer.Chocolate
DoughProductionLine1.DoughMixer.Dough
OvenProductionLine1.CookieOven
PackagerProductionLine1.CookiePackager
ChocolateCookieRecipeProductionLine1.ChocolateCookieRecipe
PeanutbutterCookieRecipeProductionLine1.PeanutbutterCookieRecipe
OatmealCookieRecipeProductionLine1.OatmealCookieRecipe


What’s Next

Creating an Equipment model with Engineering UI