Informationsinhalte und Zugriff benutzerspezifisch anpassen > KPIs konfigurieren und anpassen > KPIs basierend auf dem Projektauftrag statt der Schicht berechnen
KPIs basierend auf dem Projektauftrag statt der Schicht berechnen
Eine mögliche Anpassung ist die Verwendung von Projektaufträgen anstelle von Schichten als Zeitraum für die Berechnung von KPIs. Dadurch werden die KPIs über die Dauer eines Projektauftrags vom Anfang bis zur Fertigstellung berechnet, wenn dieser Zeitraum mehrere Schichten umfassen kann.
* 
KPIs können entweder basierend auf Schichten für den Zeitraum oder auf Grundlage von Projektaufträgen für den Zeitraum berechnet werden. Diese Anpassung ändert die Berechnung aller KPIs für die Verwendung von Projektaufträgen.
Sobald diese Anpassung vorgenommen wurde, ruft das System jedes Mal, wenn KPIs berechnet werden, alle in der Ausführung befindlichen Projektaufträge auf. In der Ausführung befindliche Projektaufträge sind Aufträge, für die beide folgenden Aussagen zutreffen:
Die aktuelle Zeit liegt nach der tatsächlichen Startzeit für den Projektauftrag.
Die tatsächliche Endzeit für den Projektauftrag ist nicht definiert.
Für jeden abgerufenen Projektauftrag werden alle Assets gefunden, die auf die UID des Projektauftrags verweisen. Die aktuellen KPI-Werte für diese Assets werden basierend auf dem tatsächlichen Auftragsbeginn und der aktuellen Zeit berechnet.
Führen Sie die folgenden Schritte aus, um die KPI-Berechnung für die Verwendung von Projektaufträgen anzupassen:
KPI Manager anpassen
1. Erstellen Sie einen neuen KPI Manager, der die Funktion PTC.SCA.SCO.KPIManagerThingTemplate erweitert.
a. Klicken Sie auf Neu, und wählen Sie Ding aus.
b. Geben Sie bei Name einen Namen für das Ding ein.
c. Wählen Sie für die Basis-Dingvorlage PTC.SCA.SCO.KPIManagerThingTemplate oder eine Dingvorlage aus, die PTC.SCA.SCO.KPIManagerThingTemplate verlängert.
d. Klicken Sie auf Speichern, um die neue Dingvorlage zu speichern.
2. Bearbeiten Sie den für das System definierten KPIManager.
a. Navigieren Sie zum Startpunkt-Konfigurationsding (PTC.Factory.C_LaunchPointConfigurationThing_[Release-Version]).
b. Klicken Sie unter Konfiguration in der Tabelle ManagerConfigurationSettings auf , um den KPIManager zu bearbeiten. Ändern Sie den Value in das KPI Manager-Ding, das unter Schritt 1 erstellt wurde, und klicken Sie auf Festlegen.
c. Klicken Sie auf Speichern, um die Aktualisierungen für das Startpunkt-Konfigurationsding zu speichern.
3. Erstellen Sie für das neue KPI Manager-Ding einen Dienst, um die aktuell ausgeführten Projektaufträge abzurufen.
a. Klicken Sie unter Dienste auf Hinzufügen.
b. Geben Sie als Name GetRunningJobOrders ein.
c. Wählen Sie für Ausgabe INFOTABLE aus dem Dropdown-Menü aus. Suchen Sie für Data Shape nach PTC.SCA.SCO.JobOrder, und wählen Sie es aus.
d. Geben Sie den folgenden Code im Dienst-Editor ein:

var filters = {
"filters": {
"filters": [
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "ActualStartTime",
"type": "LE",
"value": new Date()
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "ActualEndTime",
"type": "MISSINGVALUE"
}

],
"type": "AND"
},
"sorts": [
{
"fieldName": "ActualStartTime",
"isAscending": true
}
]
}
// result: THINGNAME
var productionOrder = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
// result: INFOTABLE dataShape: "PTC.SCA.SCO.JobOrder"
var result = Things[productionOrder].GetJobOrders({
filter: filters /* JSON */,
offset: -1 /* INTEGER */,
limit: 99999999 /* INTEGER */
});
e. Klicken Sie auf Speichern und Weiter.
4. Erstellen Sie für das neue KPI Manager-Ding einen Dienst, um alle Anlagendinge abzurufen, für die KPIs berechnet werden, die diesem Projektauftrag zugehörig sind.
a. Klicken Sie unter Dienste auf Hinzufügen.
b. Geben Sie als Name GetKPIElementsFromJobOrder ein.
c. Klicken Sie bei Eingaben auf Hinzufügen. Geben Sie als Name JobOrderUID ein.
d. Wählen Sie für Ausgabe INFOTABLE aus dem Dropdown-Menü aus.
e. Geben Sie den folgenden Code im Dienst-Editor ein:
//Calculate all elements value
//Retrieve all KPIElement things
var elementThingShape = "PTC.SCA.SCO.KPIElementThingShape";
var maxItems = 300;
var filter = {
"filters" : {
"type" : "EQ",
"fieldName" : "JobOrderUID",
"value" : JobOrderUID
}
};

var tmpResult = Resources["SearchFunctions"].SearchThings({
searchExpression: undefined /* STRING */,
modelTags: undefined /* TAGS */,
networks: undefined /* JSON */,
types: {"items":["Thing"]} /* JSON */,
thingTemplates: undefined /* JSON */,
thingShapes: {"items":["PTC.SCA.SCO.KPIElementThingShape"]} /* JSON */,
aspects: undefined /* JSON */,
excludedAspects: undefined /* JSON */,
identifierSearchExpression: undefined /* STRING */,
query: filter /* QUERY */,
maxItems: maxItems /* NUMBER */,
maxSearchItems: maxItems /* NUMBER */
});
var result = tmpResult.getRow(0).thingResults;
f. Klicken Sie auf Speichern und Weiter.
5. Suchen Sie für das KPI Manager-Ding nach dem Dienst GetKPIElementsFromTimeInfo, und überschreiben Sie ihn.
6. Ersetzen Sie den Inhalt im Dienst-Editor durch den folgenden Code:
var jobOrderUID = TimeInfo.getRow(0).UID+"";
var result = me.GetKPIElementsFromJobOrder({
JobOrderUID: jobOrderUID /* STRING */
});
7. Klicken Sie auf Fertig und anschließend auf Speichern.
KPI Berechnungs-Scheduler anpassen
Führen Sie die folgenden Schritte aus, um den KPI Berechnungs-Scheduler anzupassen:
1. Navigierten Sie zu PTC.SCA.SCO.KPIScheduler.
2. Überschreiben Sie unter Dienste den Dienst GetTimeInfos.
3. Ersetzen Sie den Inhalt im Dienst-Editor durch den folgenden Code:
var params = {
infoTableName : "InfoTable",
dataShapeName : "PTC.SCA.SCO.TimeInfo"
};
// CreateInfoTableFromDataShape(infoTableName:STRING("InfoTable"), dataShapeName:STRING):INFOTABLE(PTC.SCA.SCO.TimeInfo)
var result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);

//Retrieve All JobOrders
var jobOrders =Things[Things["PTC.Factory.LaunchPointConfigurationThing"].GetKPIManagerThingName()].GetRunningJobOrders();
var tableLength = jobOrders.rows.length;
for (var x=0; x < tableLength; x++) {
var row = jobOrders.rows[x];
var uid = row.UID;
//Your code here
// PTC.SCA.SCO.ShiftInfo entry object
var newEntry = new Object();
newEntry.UID = uid; // LONG
newEntry.StartTimeDate = row.ActualStartTime; // DATETIME
newEntry.GeneratedID = 'JobOrder-'+uid; // STRING [Primary Key]
//newEntry.EndTimeDate = undefined; // DATETIME
newEntry.SiteUID = undefined; // LONG
result.AddRow(newEntry);
}
4. Klicken Sie auf Fertig und anschließend auf Speichern.
Projektaufträge Anlagen zuordnen
Ordnen Sie einen Projektauftrag einer einzelnen Anlage zu, indem Sie die Eigenschaft JobOrderUID für das Anlagending auf die UID für den Projektauftrag festlegen. Wenn die KPIs für die Anlage berechnet werden, wird die Projektauftragsreferenz als Teil der historischen Daten für den KPI gespeichert.
Um eine Anlage, z.B. ein Asset oder eine Linie, einem Projektauftrag zuzuordnen, gehen Sie wie folgt vor:
1. Navigieren Sie in ThingWorx Composer zum Ding für die Anlage. Standardmäßig ist der Dingname in ThingWorx Composer der in ThingWorx Apps angezeigte Anlagenname, dem der Anlagentyp vorangestellt ist. Für ein Asset mit dem Namen 1-2_GantryRobot lautet der Dingname z.B. Asset_1-2_GantryRobot.
2. Legen Sie unter Eigenschaften und Warnungen den Wert für die Eigenschaft JobOrderUID auf die UID des entsprechenden Projektauftrags fest.
* 
Die UID eines Auftrags wird in der Dienstausgabe CreateJobOrders zurückgegeben, wenn ein Projektauftrag erstellt wird. Sie können auch mit dem Dienst GetJobOrders alle Projektaufträge in der Datenbank einschließlich ihrer UIDs abrufen. Beide Dienste befinden sich im standardmäßigen Produktionsauftrags-Manager (PTC.SCA.SCO.DefaultProductionOrderManager).
3. Klicken Sie auf Speichern, um die Aktualisierungen für das Ding zu speichern.
Weitere Informationen zu Projektaufträgen finden Sie unter Projektauftragsschema.
Starten eines Projektauftrags
Starten Sie einen Projektauftrag, indem Sie die Eigenschaft ActualStartTime für den Projektauftrag festlegen.
So legen Sie die Startzeit für einen Projektauftrag fest:
1. Navigieren Sie in ThingWorx Composer zum standardmäßigen Produktionsauftrags-Manager (PTC.SCA.SCO.DefaultProductionOrderManager).
2. Führen Sie unter Dienste den Dienst UpdateJobOrders aus.
3. Klicken Sie in der Eingabeparameter-Tabelle JobOrders auf Hinzufügen, und geben Sie die UID für den zu aktualisierenden Projektauftrag an. Geben Sie den neuen Wert für das Feld ActualStartTime ein. Lassen Sie die anderen Felder leer. Klicken Sie auf Hinzufügen, um die aktualisierten Informationen zur Eingabeparameter-Tabelle hinzuzufügen.
Sie können mehrere Projektaufträge aktualisieren, indem Sie sie einzeln zur Eingabeparameter-Tabelle JobOrders hinzufügen.
4. Klicken Sie auf Ausführen.
Projektauftrag schließen und endgültige KPI-Berechnung auslösen
Schließen Sie einen Projektauftrag, indem Sie die Eigenschaft ActualEndTime für den Projektauftrag festlegen. Wenn ein Projektauftrag geschlossen wird, muss eine endgültige KPI-Berechnung ausgelöst werden. Nachdem die endgültige KPI-Berechnung durchgeführt wurde, kann die Zuordnung zwischen dem Projektauftrag und der Anlage entfernt werden.
Mit dem folgenden Verfahren wird ein Dienst erstellt, der den Projektauftrag durch Festlegen der Endzeit schließt, die endgültige KPI-Berechnung auslöst und die Zuordnung zwischen Projektauftrag und Anlage ordnet.
1. Klicken Sie im neuen KPI-Manager unter Dienste auf Hinzufügen.
2. Geben Sie als Name CompleteJobOrder ein.
3. Geben Sie den folgenden Code im Dienst-Editor ein:
// result: INFOTABLE dataShape: "PTC.SCA.SCO.JobOrder"
var jobOrderManager = Things[Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName()];
// result: INFOTABLE dataShape: "PTC.SCA.SCO.JobOrder"
var jobOrder = Things["PTC.SCA.SCO.DefaultProductionOrderManager"].GetJobOrder({
UID: jobOrderUID /* STRING */
});
//Update end Date
jobOrder.getRow(0).ActualEndTime = new Date();
var updatedJobOrder = jobOrderManager.UpdateJobOrders({
JobOrders: jobOrder /* INFOTABLE */
});
// CreateInfoTableFromDataShape(infoTableName:STRING("InfoTable"), dataShapeName:STRING):INFOTABLE(PTC.SCA.SCO.TimeInfo)
var timeInfo = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape( {infoTableName : "InfoTable", dataShapeName : "PTC.SCA.SCO.TimeInfo"
});

var jobOrder = updatedJobOrder.rows[0];
var uid = jobOrder.UID;
// PTC.SCA.SCO.ShiftInfo entry object
var newEntry = new Object();
newEntry.UID = uid; // LONG
newEntry.StartTimeDate = jobOrder.ActualStartTime; // DATETIME
newEntry.EndTimeDate = jobOrder.ActualEndTime; // DATETIME
newEntry.GeneratedID = 'JobOrder-'+uid; // STRING [Primary Key]
newEntry.SiteUID = undefined; // LONG
timeInfo.AddRow(newEntry);

Things["PTC.SCA.SCO.KPIScheduler"].CalculateKPIsForTimeInfo({
TimeInfo: timeInfo /* INFOTABLE */
});

// result: INFOTABLE dataShape: ""
var result = Things[Things["PTC.Factory.LaunchPointConfigurationThing"].GetKPIManagerThingName()].GetKPIElementsFromJobOrder({
JobOrderUID: jobOrderUID /* STRING */
});
//Remove job order reference from the thing
var tableLength = result.rows.length;
for (var x=0; x < tableLength; x++) {
var row = result.rows[x];
//Your code here
Things[row.name].JobOrderUID = undefined;
}
4. Klicken Sie auf Fertig und anschließend auf Speichern.