Example of processes in yoghurt production
- Check the raw materials quantities
- Check the raw materials expiration dates
- Check the mixing tank is empty
- Check the cleaning of the mixing tank was done less than 3h ago
- Put all the ingredients in the mixing tank
- Adjust temperature at 30 degrees
- Turn on the mixer 20 revolutions per minute
- Mix for 2 hours
- Move to process 2
A process can be represented with a diagram
In a manufacturing plant there can be a large number of processes ongoing at the same time : an activity is usually involved in multiple processes at the same time. And there can be a large number of activities.
Representation of processes as Petri nets
To handle the large number of simultaneous processes, each “process execution” is represented as a colored token in the process graph
This representation is called colored petri nets – a classical way or representing processes. Many examples are available on the web (http://jointjs.com/demos/pn)
In our case we also have a temporal dimension to be managed.
We need to support
- Actions : transitions should be able to trigger external actions (ex. send an email, change a data) which means an action function needs to be attached to each transition
- Guarded transitions : we want to be able to write fairly complex conditions to enable or disable transitions, in particular guards that depend on an external state. That means a guard function needs to be attached to each transition
- Timed triggered transitions : we need to be able to trigger transitions with relative (after 3h trigger transition) and absolute (trigger transition on March 3rd) time.
Implementation of Petri nets
Traditionally petri nets allow token multiplication
Traditional implementation of a process execution is a vector / map for each color indicating the number of tokens in each state while transitions are represented as vectors that change the number of tokens in each position
T = { A : -1, B : +1, C : +1 }
Transition => T => v => {
for (let key in T) {
if (!v[key]) v[key] = 0
v[key] += T[key]
}
return v
}
Blue = { A : 1 }
T(Blue) = { B : 1, C : 1 }
This is called the ‘bag’ implementation
In our case we need to explicitly represent two time informations
- Time of token creation
- Time of arrival to the state
Because we want transitions that depend on time
- Cleaning has to be done at most 3h before filling the tank or the whole process needs to be restarted
- If raw materials are still unavailable after 24h send email to plant manager
We can either
- Keep the bag implementation and replace the count of tokens integer by an array of tokens containing the desired information
- Use a compact version of the previous idea with only one time value associated, in which case more care needs to be taken when writing transitions
- Take a dual point of view and represent process as arrays of tokens that point towards their current position
Blue = { A : [{creation : 0, transition : 0}] }
T(Blue) = {
B : [ { creation : 0, transition : 1 }],
C : [ { creation : 1, transition : 1 }]
}
Blue = { A : [0] }
T(Blue) = { B : [0], C : [1] }
Blue = [ { location : A, creation : 0, transition : 0 }]
T(Blue) = [
{ location : B, creation : 0, transition : 1 }
{ location : C, creation : 1, transition : 1 }
]
Use cases
Production processes
Each production batch needs to be associated to a new process (a checklist)
Production processes are specific to the industry and the products being manufactured
Food production needs to follow process that are very precisely specified to make sure the final products are proper for human consumption. Processes typically specify
- Temperatures and times (decongelation)
- Cleaning
- Human inspection (visual aspect)
- Limited time to perform some transformations
- Trash everything and start again if mistakes were made
Also many batches share materials and machines.
This page shows (one way of doing) yogurt production. I copy paste the document here in case the original disappears
The pretreatment of the milk is the same, regardless of whether set or stirred yoghurt is to be produced. It includes standardization of the fat and dry matter contents, heat treatment and homogenization. It is assumed that the milk has been standardized to the required fat content before entering the line and standardization of the dry matter content takes place in an evaporator in the process line. If the dry matter content is adjusted by addition of milk powder, the equipment used is similar to that described under “Recombined milk”. Any additives, such as stabilizers, vitamins, etc., can be metered into the milk before the heat treatment. When the yoghurt milk has been pretreated and cooled to inoculation temperature, the procedure for further treatment depends on whether set, stirred, drink, frozen or concentrated yoghurt is to be produced. The quality of the yoghurt in terms of texture and flavour is essential.
Figure 11.14 shows the processing of stirred yogurt. The pretreated milk, cooled to incubation temperature, is pumped to the incubation tanks (7). Simultaneously a preset volume of bulk starter (6) is dosed into the milk stream. After a tank has been filled, agitation commences and continues for a short time to assure uniform distribution of the starter culture. The incubation tanks are insulated to ensure that the temperature remains constant during the incubation period. The tanks can be fitted with pH meters to check the development of acidity. In typical production of stirred yoghurt the incubation period is 2.5 to 3 hours at 42 – 43C when the ordinary type of bulk starter (2.5 – 3% inoculums) is utilised. To attain optimum quality, cooling from 42 – 43C to15 – 22C should be accomplished within 30 minutes after the ideal pH-value has been reached to stop further development of bacteria. The coagulum must be subjected to gentle mechanical treatment so that the final product will have the correct consistency. Cooling takes place in a plate heat exchanger (8) with special plate. After cooling to 15 – 22C, the yoghurt is ready for packing. Fruit and various flavours can be added (10) to the yoghurt when it is transferred from the buffer tanks to the filling machines. This is done continuously with a variable speed metering pump which feeds the ingredients into the yoghurt in the fruit blending unit. The blending unit is static and hygienically designed to guarantee that the fruit is thoroughly mixed into the yoghurt. The fruit metering pump and the yoghurt feed pump operate synchronously.
The whole line including
- Water Treatment section
- Milk Receiving or Powder Dissolving Section
- Preparation Section
- Sterilization Section
- Fermentation Section
- Filling Packaging Section
- CIP Cleaning Section
- Chiller
- Compressor
- Steam Boiler
- Cooling or Incubation Room
- Installation Material
Management processes
Every week the production manager needs to
- Check forecast of demand, adjust and validate
- Check the inventory levels of products produced by the plant
- Check the inventory levels of raw materials
- Check raw material replenishment orders and validate
- Use the production planning tool (Gantt) to create a production plan
- Publish the production plan
There are many team leaders below the plant manager
- Materials reception : unload raw materials from trucks
- Inventory : manage raw materials, work in progress and final products (refrigeration, counts, etc)
- Maintenance : fix machines
- Production : handle the machines
Once the production plan is published, area team leaders have to
- Check the forecast of demand and validate
- Check the production plan and validate
- Check their own process
- Already scheduled events
- Expected / forecasted workload
- Employees count and their schedules
- All assets they need are properly working
- Any problem needs to be escalated to the production manager
- The production manager may change the production plan accordingly