**Classification tags**: business operations management, DES, next-event time progression, processing network model

The potentially relevant object types are:

- orders,
- machines,
- input queues,
- workers.

Potentially relevant types of events are:

- (order) arrivals,
- orders being pushed to an input buffer,
*machine activity performances (processing steps)*,- (item) departures.

ON (event type) | DO (event routine) |

order arrival | if machine is busy, then push order to input buffer else start a new machine activity |

end of machine activity | if there is a successor machine then forward the order/item and, if it's not busy, start processing else the processed order is completed and the manufactured item departs; if there are still orders waiting in the queue, then start next machine activity |

In this model of four consecutive manufacturing machines, all machines are modeled as instances of a
generic object type `Machine`

such that they perform activities of type `MachineActivity`

.
The model allows to have chains of manufacturing machines of any length.

A computational design for the purpose of computing the statistics *average time in system*
and *machineActivity utilizations* is obtained by modeling the following types of objects, events and activities:

- Two object types:
and`Machine`

, such that machines (1) have a waiting line represented as a multi-valued reference property`Order`

`waitingOrders`

defined by a corresponding association end, and (2) may have a successor machine represented as a reference property`nextMachine`

defined by a corresponding association end. - One event type:
with a reference property`OrderArrival`

`machine`

for expressing that an order arrives at a certain machine. As an exogenous event type,`OrderArrival`

has a`recurrence`

function representing a random variable for computing the time in-between two subsequent order arrival events. - One activity type:
, having a resource association with the object type`MachineActivity`

`Machine`

(for expressing that a machine activity is performed at a certain machine) and having a function`randomDuration`

representing a random variable that models the random variation of duration of machine activities.

ON (event type) | DO (event routine) |

OrderArrival( sP) @ t |
CREATE order{ arrivalTime: t} PUSH order TO sP.waitingOrders IF sP.waitingOrders.length = 1 THEN SCHEDULE ActivityStart("MachineActivity", sP) @ t' |

ActivityEnd("MachineActivity", a) @ t |
SET sP = a.machine POP order FROM sP.waitingOrders IF HAS-VALUE( sP.nextMachine) THEN SET nextSP = sP.nextMachine PUSH order TO nextSP.waitingOrders IF nextSP.waitingOrders.length = 1 THEN SCHEDULE ActivityStart("MachineActivity", nextSP) @ t' ELSE REMOVE order FROM SIMULATION IF sP.waitingOrders.length > 0 THEN SCHEDULE ActivityStart("MachineActivity", sP) @ t' |

Notice that *t'* denotes the next moment in simulation time after *t*. If the simulation is using discrete time, then *t' = t+1*,
else (if the simulation is using continuous time), then *t' = t + Δt* where *Δt* denotes the smallest time increment
defined by the simulation model's time granularity.