8 Management of Jobs with job groups and jobs
The definition which product (family) is produced is done by a job group. This defines which equipment, production dataset and materials are used and which configuration parameters (e.g. width, length of foil) are offered. The concrete products (roll of film with defined width and length) are models as jobs inside this group.
NOTE: Examples for different combinations of jobs are presented in the Annex.

8.1 JobGroups
This is a container for the job groups.
| Attribute | Value | ||||
| BrowseName | JobGroupsType | ||||
| IsAbstract | False | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseObjectType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | 0:NodeVersion | 0:String | 0:PropertyType | M, RO |
| 0:HasComponent | Object | JobGroup_<Nr> | JobGroupType | OP | |
| 0:HasComponent | Method | AddJobGroup | O | ||
| 0:HasComponent | Method | RemoveJobGroupById | O | ||
| 0:HasComponent | Method | StartJobGroupById | O | ||
| 0:HasComponent | Method | InterruptJobGroupById | O | ||
| 0:HasComponent | Method | FinishJobGroupById | O | ||
| 0:GeneratesEvent | ObjectType | JobGroupStatusChangedEventType | Defined in 8.2.23 | ||
| 0:GeneratesEvent | ObjectType | JobStatusChangedEventType | Defined in 8.3.17 | ||
| 0:GeneratesEvent | ObjectType | UnitFinishedEventType | Defined in 8.3.18 | ||
| 0:GeneratesEvent | ObjectType | LotFinishedEventType | Defined in 8.3.19 | ||
| 0:GeneratesEvent | ObjectType | 0:GeneralModelChangeEventType | |||
| Conformance Units | ||||||
|---|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
8.1.1 NodeVersion
The NodeVersion Property as defined in OPC 10000-3 is used to inform the client about model changes. Here it informs about added or removed instances of JobGroupType.
8.1.2 JobGroup_<Nr>
This is a placeholder for the job groups (see 8.2). When instances are created the BrowseNames shall be “JobGroup_<Nr>” where <Nr> is a three-digit number with leading zeros, starting with “001”.
8.1.3 AddJobGroup
This method adds a new job group with the needed Properties.
Signature
AddJobGroup (
[in] 0:String Id
[in] 0:String Description
[in] 0:String EquipmentDescription
[in] 0:String ProductionDatasetName
[in] MaterialMappingType[] MaterialMapping
[in] 0:UInt32 Priority
[in] 0:UtcTime PlannedStart
[in] 0:Duration PlannedProductionTime
[in] 0:Duration PlannedSetUpTime
[in] 0:UtcTime LatestEnd
[out] 0:NodeId JobGroupNodeId);| Argument | Description |
| Id | See 8.2, where the Properties of a job group are defined. |
| Description | See 8.2, where the Properties of a job group are defined. |
| EquipmentDescription | See 8.2, where the Properties of a job group are defined. |
| ProductionDatasetName | See 8.2, where the Properties of a job group are defined. |
| MaterialMapping | See 8.2, where the Properties of a job group are defined. |
| Priority | See 8.2, where the Properties of a job group are defined. |
| PlannedStart | See 8.2, where the Properties of a job group are defined. |
| PlannedProductionTime | See 8.2, where the Properties of a job group are defined. |
| PlannedSetUpTime | See 8.2, where the Properties of a job group are defined. |
| LatestEnd | See 8.2, where the Properties of a job group are defined. |
| JobGroupNodeId | The method returns the NodeId of the created instance for the job group |
| Attribute | Value | ||||
| BrowseName | AddJobGroup | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
| 0:HasProperty | Variable | 0:OutputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.1.4 RemoveJobGroupById
This method removes a job group instance.
Signature
RemoveJobGroupById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job group that shall be removed |
| Attribute | Value | ||||
| BrowseName | RemoveJobGroupById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.1.5 StartJobGroupById
With this method the client requests to start the production of a specific job group.
Signature
StartJobGroupById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job group that shall be started |
| Attribute | Value | ||||
| BrowseName | StartJobGroupById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.1.6 InterruptJobGroupById
With this method the client requests to interrupt the production of a specific job group.
Signature
InterruptJobGroupById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job group that shall be interrupted |
| Attribute | Value | ||||
| BrowseName | InterruptJobGroupById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
To continue the production of the job group, StartJobGroupById is called.
8.1.7 FinishJobGroupById
With this method the client requests to finish the production of a specific job group.
Signature
FinishJobGroupById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job group that shall be finished |
| Attribute | Value | ||||
| BrowseName | FinishJobGroupById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.1.8 Events
The JobGroups Object fires all Events related to the included job groups and jobs. With this, a client needs to subscribe to these events only at this node. The different events are described in 8.2 and 8.3.
8.2 JobGroupType
This ObjectType represent a job group.
| Attribute | Value | ||||
| BrowseName | JobGroupType | ||||
| IsAbstract | False | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseObjectType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | 0:NodeVersion | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Id | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Description | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | EquipmentDescription | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | ProductionDatasetName | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | MaterialMapping | MaterialMappingType[] | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | ConfigurationParameters | ConfigurationParameterType[] | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Priority | 0:UInt32 | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | PlannedStart | 0:UtcTime | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | PlannedProductionTime | 0:Duration | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | PlannedSetUpTime | 0:Duration | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | LatestEnd | 0:UtcTime | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Status | 3:JobStatusEnumeration | 0:PropertyType | M, RO |
| 0:HasComponent | Variable | ElectricalEnergyConsumption | 0:Double | 0:AnalogUnitType | O, RO |
| 0:HasComponent | Variable | FluidEnergyConsumption | 0:Double | 0:AnalogUnitType | O, RO |
| 0:HasComponent | Variable | PressureAirConsumption | 0:Double | 0:AnalogUnitType | O, RO |
| 0:HasComponent | Object | Job_<Nr> | JobType | OP | |
| 0:HasComponent | Method | AddJob | O | ||
| 0:HasComponent | Method | RemoveJobById | O | ||
| 0:HasComponent | Method | StartJobById | O | ||
| 0:HasComponent | Method | InterruptJobById | O | ||
| 0:HasComponent | Method | FinishJobById | O | ||
| 0:GeneratesEvent | ObjectType | 0:GeneralModelChange EventType | |||
| Conformance Units | |||||
|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
8.2.1 NodeVersion
The NodeVersion Property as defined in OPC 10000-3 is used to inform the client about model changes. Here it informs about added or removed instances of JobType in the group.
8.2.2 Id
Id of the job group.
8.2.3 Description
Description of the job group.
8.2.4 EquipmentDescription
Description of the equipment needed for job. This is only for information (e.g. for operator)
NOTE: It makes sense only to mention the interchangeable equipment of the extrusion line here (e.g. die, screw).
8.2.5 ProductionDatasetName
Name of the production dataset which is needed for the job.
8.2.6 MaterialMapping
Information, which material is needed for the production. The MaterialMappingType is defined in Table 16.
| Name | Type | Description |
| MaterialMappingType | structure | |
MaterialId | String | Id of the material as specified in the MaterialList (see 6.8) |
MaterialLot | String | Lot of the material (empty string allowed if not relevant) |
HopperId | String | Id of the hopper in which the material shall be put (empty string allowed if not supported) |
8.2.7 Priority
Priority of the job group: 1 = highest priority, higher values represent lower priorities.
8.2.8 PlannedStart
Planned start of the job (in UTC time). If not relevant the value shall be 0.
8.2.9 PlannedProductionTime
Planned time for the production of the job group. If not relevant the value shall be 0.
8.2.10 PlannedSetUpTime
Planned total time needed for set up and tear down of the extrusion line for the job group. If not relevant the value shall be 0.
8.2.11 LatestEnd
Latest end of the job (in UTC time). If not relevant the value shall be 0.
8.2.12 ConfigurationParameters
Array of offered configuration parameters. The ConfigurationParameterType is defined in OPC 40083. Which ConfigurationParameters are offered to the jobs in the group depends on the machine / implementation / production dataset.
8.2.13 Status
Status of the job group. The JobStatusEnumeration is defined in OPC 40083.
8.2.14 ElectricalEnergyConsumption
Cumulated electrical energy consumption of the extrusion line for the job group in kWh.
8.2.15 FluidEnergyConsumption
Cumulated energy for the cooling of the whole extrusion line with fluid for the job group in kWh.
8.2.16 PressureAirConsumption
Cumulated consumption of pressure air of the whole extrusion line (volume at standard conditions) for the job group in kWh.
8.2.17 Job_<Nr>
This is a placeholder for the jobs inside the group (see 8.3). When instances are created the BrowseNames shall be “Job_<Nr>” where <Nr> is a three-digit number with leading zeros, starting with “001”.
8.2.18 AddJob
This method adds a new job to the group with the needed Properties.
Signature
AddJob (
[in] 0:String Id
[in] 0:String Description
[in] 0:String CustomerName
[in] 0:String ProductName
[in] 0:String ProductDescription
[in] 0:UInt32 Strand
[in] 0:UInt32 Sequence
[in] 3:ParameterSettingType[] ParameterSetting
[in] 0:Double SetOutput
[in] 0:Double LotSize
[out] 0:NodeId JobNodeId);| Argument | Description |
| Id | See 8.3, where the Properties of a job are defined. |
| Description | See 8.3, where the Properties of a job are defined. |
| CustomerName | See 8.3, where the Properties of a job are defined. |
| ProductName | See 8.3, where the Properties of a job are defined. |
| ProductDescription | See 8.3, where the Properties of a job are defined. |
| Strand | See 8.3, where the Properties of a job are defined. |
| Sequence | See 8.3, where the Properties of a job are defined. |
| ParameterSetting | See 8.3, where the Properties of a job are defined. |
| SetOutput | See 8.3, where the Properties of a job are defined. |
| LotSize | See 8.3, where the Properties of a job are defined. |
| JobNodeId | The method returns the NodeId of the created instance for the job group |
| Attribute | Value | ||||
| BrowseName | AddJob | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
| 0:HasProperty | Variable | 0:OutputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.2.19 RemoveJobById
This method removes a job from a group.
Signature
RemoveJobById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job that shall be removed |
| Attribute | Value | ||||
| BrowseName | RemoveJobById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.2.20 StartJobById
With this method the client requests to start the production of a specific job in the group.
Signature
StartJobById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job that shall be started |
| Attribute | Value | ||||
| BrowseName | StartJobById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.2.21 InterruptJobById
With this method the client requests to interrupt the production of a specific job.
Signature
InterruptJobById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job that shall be interrupted |
| Attribute | Value | ||||
| BrowseName | InterruptJobById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
To continue the production of the job, StartJobById is called.
8.2.22 FinishJobById
With this method the client requests to finish the production of a specific job.
Signature
FinishJobById (
[in] 0:String Id);| Argument | Description |
| Id | Id of the job that shall be finished. |
| Attribute | Value | ||||
| BrowseName | FinishJobById | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Modelling Rule |
|---|---|---|---|---|---|
| 0:HasProperty | Variable | 0:InputArguments | 0:Argument[] | 0:PropertyType | 0:Mandatory |
8.2.23 JobGroupStatusChangedEventType
This EventType is used to inform the client about the change of the Status Property of a job group. It is fired by the parent JobGroups object to have only one Node for the subscription.
| Attribute | Value | ||||
| BrowseName | JobGroupStatusChangedEventType | ||||
| IsAbstract | True | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseEventType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | Id | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | LastStatus | 3:JobStatusEnumeration | 0:PropertyType | M |
| 0:HasProperty | Variable | ActiveStatus | 3:JobStatusEnumeration | 0:PropertyType | M |
| Conformance Units | |||||
|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
| Id: | Id of the job group. |
| LastStatus: | Value of the Status Property of the job group before the change |
| ActiveStatus: | Value of the Status Property of the job group after the change |
The SourceNode (part of BaseEventType) shall be the NodeId of the relevant job group.
8.3 JobType
This ObjectType represent a single job inside a job group.
| Attribute | Value | ||||
| BrowseName | JobType | ||||
| IsAbstract | False | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseObjectType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | Id | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Description | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | CustomerName | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | ProductId | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | ProductDescription | 0:String | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Strand | 0:UInt32 | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Sequence | 0:UInt32 | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | ParameterSetting | ParameterSettingType[] | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | SetOutput | 0:Double | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | LotSize | 0:Double | 0:PropertyType | M, RO |
| 0:HasProperty | Variable | Status | 3:JobStatusEnumeration | 0:PropertyType | M, RO |
| 0:HasComponent | Variable | GoodProduct | 0:Boolean | 0:BaseDataVariableType | M, RO |
| 0:HasComponent | Variable | Throughput | 0:Double | 0:AnalogUnitType | O, RO |
| 0:HasComponent | Variable | ProductWeight | 0:Double | 0:AnalogUnitType | O, RO |
| 0:HasComponent | Variable | LineSpeed | 0:Double | 0:AnalogUnitType | O, RO |
| 0:HasComponent | Variable | ActualLot | 0:UInt32 | 0:BaseDataVariableType | M, RO |
| 0:HasComponent | Variable | ActualLotName | 0:String | 0:BaseDataVariableType | O, RW |
| 0:HasComponent | Variable | ActualOutput | 0:Double | 0:BaseDataVariableType | M, RO |
| 0:HasComponent | Variable | ActualGoodOutput | 0:Double | 0:BaseDataVariableType | O, RO |
| 0:HasComponent | Variable | ActualBadOutput | 0:Double | 0:BaseDataVariableType | O, RO |
| 0:HasComponent | Variable | ActualSampleOutput | 0:Double | 0:BaseDataVariableType | O, RO |
| 0:HasComponent | Variable | ActualOutputRate | 0:Double | 0:BaseDataVariableType | M, RO |
| Conformance Units | |||||
|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
8.3.1 Id
Id of the job. It shall be unique inside the relevant job group. Two jobs inside different job groups may have the same Id.
8.3.2 Description
Description of the job.
8.3.3 CustomerName
Name of the customer for that the job is produced.
8.3.4 ProductId
Id of the product produced by the job.
8.3.5 ProductDescription
Description of the product produced by the job.
8.3.6 Strand
Strand is used when several products (two pipes is parallel, foil cut into several smaller foils) are produced in parallel. When only one product is produced at the same time, the value is always 1.
8.3.7 Sequence
Planned sequence when the job group contains multiple job for one strand. When there is only one job for a string in the production group the value is always 1.
8.3.8 ParameterSetting
Array for the configuration of the job by setting values for the offered configuration parameters. The ParameterSettingType is defined in OPC 40083. If an entry in the ConfigurationParameters Array in the job group has no corresponding entry in the ParameterSetting Array, the default value is used.
8.3.9 SetOutput
Set output of the job. The output is always counted in units, where a unit can be a piece of pipe/profile, roll of film, bag of compound, but also a defined bundle (e.g. one unit consist of 4 bags). What a unit is, may be configurable by the configuration parameters.
8.3.10 LotSize
Size of a production lot. This used to control the
frequency of the Events of LotFinishedEventType (see 8.3.19)
production of different jobs in a group: When LotSize is reached, the next job in the group is produced (see examples in Annex).
8.3.11 Status
Status of the job. The JobStatusEnumeration is defined in OPC 40083.
8.3.12 GoodProduct
Indication if the produced product has a good quality. Can be set by the machine or the operator. When it changes from true to false the line control shall create an alarm.
8.3.13 ActualLot
Which lot (number) is currently in production.
8.3.14 ActualLotName
Optional name for the actual lot.
8.3.15 ActualOutput, ActualGoodOutput, ActualBadOutput, ActualSampleOutput
These Variables represent the total number of produced (finished) units and the numbers of good, bad and test sample units in the current job. (See explanation above for unit in SetOutput.)
8.3.16 ActualOutputRate
Average output rate of the job in units per hour.
8.3.17 JobStatusChangedEventType
This EventType is used to inform the client about the change of the Status Property of a job. It is fired by the JobGroups object to have only one Node for the subscription.
| Attribute | Value | ||||
| BrowseName | JobStatusChangedEventType | ||||
| IsAbstract | True | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseEventType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | JobGroupId | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | JobId | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | LastStatus | 3:JobStatusEnumeration | 0:PropertyType | M |
| 0:HasProperty | Variable | ActiveStatus | 3:JobStatusEnumeration | 0:PropertyType | M |
| Conformance Units | |||||
|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
| JobGroupId: | Id of the job group. |
| JobId: | Id of the job. |
| LastStatus: | Value of the Status Property of the job group before the change |
| ActiveStatus: | Value of the Status Property of the job group after the change |
The SourceNode (part of BaseEventType) shall be the NodeId of the relevant job.
8.3.18 UnitFinishedEventType
This EventType is used to inform the client a finished product unit. It is fired by the parent JobGroups object to have only one Node for the subscription.
| Attribute | Value | ||||
| BrowseName | UnitFinishedEventType | ||||
| IsAbstract | True | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseEventType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | JobGroupId | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | JobId | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | Unit | 0:UInt32 | 0:PropertyType | M |
| 0:HasProperty | Variable | GoodProduct | 0:Boolean | 0:PropertyType | M |
| Conformance Units | |||||
|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
| JobGroupId: | Id of the job group. |
| JobId: | Id of the job. |
| Unit: | Counter, which unit out of the total amount has been finished. (e.g. roll number 4 roll is finished) |
| GoodProduct: | Information if the finished unit has a good quality. |
The SourceNode (part of BaseEventType) shall be the NodeId of the relevant job.
8.3.19 LotFinishedEventType
This EventType is used to inform the client a finished production lot. It is fired by the parent JobGroups object to have only one Node for the subscription.
| Attribute | Value | ||||
| BrowseName | LotFinishedEventType | ||||
| IsAbstract | True | ||||
| References | Node Class | BrowseName | DataType | TypeDefinition | Other |
|---|---|---|---|---|---|
| Subtype of 0:BaseEventType defined in OPC 10000-5 | |||||
| 0:HasProperty | Variable | JobGroupId | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | JobId | 0:String | 0:PropertyType | M |
| 0:HasProperty | Variable | Lot | 0:UInt32 | 0:PropertyType | M |
| Conformance Units | |||||
|---|---|---|---|---|---|
| OPC 40084-2 Jobs |
| JobGroupId: | Id of the job group. |
| JobId: | Id of the job. |
| Lot: | Counter, which lot has been finished. (e.g. lot number 6 roll is finished) |
The SourceNode (part of BaseEventType) shall be the NodeId of the relevant job.
NOTE: The three events JobStatusChanged, UnitFinished and LotFinished may be fired simultaneously. E.g. when a job is finished, then the status is changed, the last product is finished as well as the last lot. If the job is the last in the job group, the JobGroupStatusChanges event will be fired in addition. However, the client decides which EventTypes are subscribed.