MachineryItems may execute several job orders in parallel or just one job order at a time. Depending on the application, the order of the execution may be defined by different mechanisms. In some cases, the order is determined by a global system and provided with the job order meta data, in other cases, the operator of a machine might choose of a list of job orders.
The general rules on how the execution of job orders is determined:
- Job orders can only be executed if they are in the corresponding state (see OPC 10031-4). Applications may choose to only set one job order into that state explicitly to start a job order (e.g. by the operator of the MachineryItem).
- If the job order is in the state to be executed, and more than one job order is in that state, the 2:StartTime of 2:ISA95JobOrderDataType indicates the order the job orders shall be executed. The earliest time indicates that the job order shall be started next. Applications may choose to set the same 2:StartTime to several job orders in order to indicate that all those job orders could be executed next.
- If there are several job orders having the same 2:StartTime, the 2:Priority of 2:ISA95JobOrderDataType indicates, which job order shall be executed next. The job order with the highest 2:Priority shall be executed next. Applications may choose not to set a priority or let several job orders have the same 2:Priority (and same 2:StartTime).
- In case neither the 2:StartTime nor the 2:Priority indicate the order; it is application specific which job order starts next. Companion Specifications may define additional mechanisms.
The order of the job order execution shall be reflected in the 2:JobOrderList. That is, the array shall start with all executed job orders (in the order the execution started), followed by all job orders currently executed or interrupted (in the order the execution started), followed by the job orders that can start to be executed, followed by the job orders that currently cannot start to be executed.
The job orders that can be executed shall be ordered based on 2:StartTime and 2:Priority, also the job orders that currently cannot start to be executed. Note that the order of both is not necessarily absolute, i.e. several entries in the array may be on the same level but put into an arbitrary order and may not be started in the order of the array.