Beispiel: KPI "Technische Effizienz"
In diesem Beispiel wird ein neuer KPI mit dem Namen "Technische Effizienz (ISO_22400)" erstellt. Die technische Effizienz einer Arbeitseinheit ist das Verhältnis zwischen der tatsächlichen Produktionszeit (APT, Actual Production Time) und der Summe aus tatsächlicher Produktionszeit (APT) und tatsächlicher Einheitverzögerungszeit (ADET, Actual Unit Delay Time) einschließlich Verzögerungen und störungsbedingten Unterbrechungen.
APT/(APT+ADET)
Das KPI-Element für die tatsächliche Einheitverzögerungszeit (ADET) wird im Rahmen dieses Beispiels erstellt. In den Codebeispielen in diesem Beispiel wird davon ausgegangen, dass der KPI "Nacharbeitsverhältnis" bereits implementiert wurde.
1. Erstellen Sie eine neue Dingform namens ACME_CORP.KPI.TechnicalEfficiencyThingShape mit den folgenden Eigenschaften:
TechnicalEfficiency_currentValue, mit Basistyp=Number
TechnicalEfficiency_lastCalculatedTime, mit Basistyp=DateTime
TechnicalEfficiency_unitOfMeasure, mit Basistyp=String
Stellen Sie sicher, dass das Kontrollkästchen Persistent für jede Eigenschaft aktiviert ist.
2. Implementieren Sie die folgenden Dienste in der Dingform ACME_CORP.KPI.TechnicalEfficiencyThingShape:
Get_TechnicalEfficiency_CurrentValue
Get_TechnicalEfficiency_ThresholdValues
Get_TechnicalEfficiency_Trend
TechnicalEfficiency_Calculate
Set_TechnicalEfficiency_CurrentValue
3. Überschreiben Sie in der Dingvorlage jedes Anlagentyps, für den dieser KPI berechnet werden soll, den Dienst GetKPINames, um die Dingform ACME_CORP.KPI.TechnicalEfficiencyThingShape hinzuzufügen. Beispiel:
var kpiInfoJSON = new Object();
// JSON of KPI information we want to test if they are implemented on "me"
// For custom KPI, please add into this JSON and following given format
// Warning the order is important
kpiInfoJSON.kpiInfoArray = [
{kpiThingShapeName: 'PTC.SCA.SCO.AvailabilityThingShape', kpiName: 'Availability'},
{kpiThingShapeName: 'PTC.SCA.SCO.QualityRatioThingShape', kpiName: 'QualityRatio'},
{kpiThingShapeName: 'PTC.SCA.SCO.EffectivenessThingShape', kpiName: 'Effectiveness'},
{kpiThingShapeName: 'PTC.SCA.SCO.OEEThingShape', kpiName: 'OEE'},
{kpiThingShapeName: 'ACME_CORP.KPI.ReworkRatioThingShape', kpiName: 'ReworkRatio'},
{kpiThingShapeName: 'ACME_CORP.KPI.TechnicalEfficiencyThingShape', kpiName: 'TechnicalEfficiency'}
];
var result = Things["PTC.SCA.SCO.DefaultKPIManager"].GetImplementedKPIsOnThing({
thingName: me.name,
kpiInfo: kpiInfoJSON
});
4. Deklarieren Sie die Schwellenwerte für den KPI "Technische Effizienz". Fügen Sie auf der Seite Konfiguration des Dings PTC.SCA.SCO.DefaultKPIManager eine neue Konfigurationstabelle hinzu.
a. Fügen Sie im Ding PTC.SCA.SCO.DefaultKPIManager eine neue Konfigurationstabelle mit den folgenden Werten hinzu:
TabellennameTechnicalEfficiencyThresholdValues
Data ShapePTC.SCA.SCO.KPIThresholdValues
Mehrere Zeilen zulassen – Stellen Sie sicher, dass dieses Kontrollkästchen ausgewählt ist.
b. Fügen Sie der Konfigurationstabelle TechnicalEfficiencyThresholdValues Zeilen für die gewünschten Wertebereiche hinzu.
5. Definieren Sie das KPI-Element für die tatsächliche Einheitverzögerungszeit (ADET).
a. Erstellen Sie eine Eigenschaft in der Dingform ACME_CORP.KPI.TechnicalEfficiencyThingShape namens actualUnitDelayTime_ADET mit dem Basistyp Number und ausgewähltem Kontrollkästchen Persistent.
b. Erstellen Sie einen neuen Dienst in der Dingform ACME_CORP.KPI.TechnicalEfficiencyThingShape namens actualUnitDelayTime_ADET_Calculate mit dem folgenden Code:
var adet = me.CalculateTimeElement({
elementName: "ADET", /* STRING */
TimeInfo : TimeInfo
});
me.actualUnitDelayTime_ADET = adet;
var result = adet;
c. Überschreiben Sie in der Dingvorlage jedes Anlagentyps, für den dieser KPI berechnet werden soll, den Dienst GetKPIElementNames. Fügen Sie die neue Eigenschaft der Liste der KPI-Elemente hinzu. Beispiel:
result = "actualProductionTime_APT,goodQuantity_GQ,plannedBusyTime_PBT,plannedRunTimePerItem_PRI,producedQuantity_PQ,reworkQuantity_RQ,actualUnitDelayTime_ADET";
d. Aktualisieren Sie den in Schritt 2 erstellten Dienst TechnicalEfficiency_Calculate, um das neue KPI-Element für die tatsächliche Einheitverzögerungszeit (ADET) aufzunehmen. Beispiel:
customLogger = logger.getLoggerContext().getLogger(logger.getName()+".com.ptc.sca.sco.KPICalculation.TechnicalEfficiency");
var technicalEfficiency = 0;
var aptTime = me.actualProductionTime_APT;
var adetTime = me.actualUnitDelayTime_ADET;
customLogger.debug("TechnicalEfficiency_Calculate aptTime:"+aptTime+" adetTime:"+adetTime);
if ( aptTime !== 0){
technicalEfficiency = aptTime / (aptTime+adetTime);
}else{
technicalEfficiency = 1;
}
customLogger.debug("TechnicalEfficiency_Calculate TechnicalEfficiency:"+technicalEfficiency);
me.Set_TechnicalEfficiency_CurrentValue({
value: technicalEfficiency
});
me.TechnicalEfficiency_lastCalculatedTime = Date.now();
var result = technicalEfficiency;
6. Aktualisieren Sie die entsprechenden Statusdefinitionen so, dass sie ADET als timeElement-Wert enthalten, da das KPI-Element für die tatsächliche Einheitverzögerungszeit (ADET) ein Zeitelement ist. Status mit timeElement-Werten werden bei der Berechnung der angegebenen KPI-Elemente berücksichtigt. Konfigurieren Sie für dieses Beispiel den Status Custom1 so, dass er als timeElement-Wert ADET,PBT hat, damit der Status Custom1 bei der Berechnung von ADET und PBT berücksichtigt wird.
Weitere Informationen finden Sie unter Anlagenstatus konfigurieren.