예: 기술 효율성 KPI
이 예에서는 기술 효율성(ISO_22400)이라는 새 KPI를 만듭니다. 작업 단위의 기술적 효율성은 APT(실제 생산 시간), APT(실제 생산 시간)의 합계, 지연 및 오작동으로 인한 중단을 포함한 ADET(실제 단위 지연 시간) 간의 관계입니다.
APT/(APT+ADET)
ADET(실제 단위 지연 시간) KPI 요소는 이 예제의 일부로 작성됩니다. 이 예제의 코드 샘플에서는 재작업 비율 KPI가 이미 구현되었다고 가정합니다.
1. 다음 속성을 사용하여 ACME_CORP.KPI.TechnicalEfficiencyThingShape라는 새 사물 형태를 만듭니다.
TechnicalEfficiency_currentValue, 기본 유형=Number
TechnicalEfficiency_lastCalculatedTime, 기본 유형=DateTime
TechnicalEfficiency_unitOfMeasure, 기본 유형=String
이러한 각 속성에 대해 지속 확인란이 선택되어 있는지 확인합니다.
2. ACME_CORP.KPI.TechnicalEfficiencyThingShape 사물 형태에 다음 서비스를 구현합니다.
Get_TechnicalEfficiency_CurrentValue
Get_TechnicalEfficiency_ThresholdValues
Get_TechnicalEfficiency_Trend
TechnicalEfficiency_Calculate
Set_TechnicalEfficiency_CurrentValue
3. 이 KPI를 계산할 각 장비 유형의 사물 템플릿에서 GetKPINames 서비스를 무시하고 ACME_CORP.KPI.TechnicalEfficiencyThingShape 사물 형태를 추가합니다. 예를 들면, 다음과 같습니다.
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. 기술 효율성 KPI에 대한 한계 허용치를 선언합니다. PTC.SCA.SCO.DefaultKPIManager 사물의 구성 페이지에서 새 구성 테이블을 추가합니다.
a. PTC.SCA.SCO.DefaultKPIManager 사물에서 다음 값을 사용하여 구성 테이블을 추가합니다.
테이블 이름 - TechnicalEfficiencyThresholdValues
데이터 셰이프 - PTC.SCA.SCO.KPIThresholdValues
여러 행 허용 - 이 확인란이 선택되어 있는지 확인합니다.
b. TechnicalEfficiencyThresholdValues 구성 테이블에 원하는 값 범위에 대한 행을 추가합니다.
5. ADET(실제 단위 지연 시간) KPI 요소를 정의합니다.
a. ACME_CORP.KPI.TechnicalEfficiencyThingShape 사물 형태에 actualUnitDelayTime_ADET라는 속성을 만듭니다(기본 유형Number이고 지속 확인란이 선택됨).
b. 다음 코드를 사용하여 ACME_CORP.KPI.TechnicalEfficiencyThingShape 사물 형태에 actualUnitDelayTime_ADET_Calculate라는 새 서비스를 만듭니다.
var adet = me.CalculateTimeElement({
elementName: "ADET", /* STRING */
TimeInfo : TimeInfo
});
me.actualUnitDelayTime_ADET = adet;
var result = adet;
c. 이 KPI를 계산할 각 장비 유형의 사물 템플릿에서 GetKPIElementNames 서비스를 무시합니다. 새 속성을 KPI 요소 목록에 추가합니다. 예를 들면, 다음과 같습니다.
result = "actualProductionTime_APT,goodQuantity_GQ,plannedBusyTime_PBT,plannedRunTimePerItem_PRI,producedQuantity_PQ,reworkQuantity_RQ,actualUnitDelayTime_ADET";
d. 2단계에서 만든 TechnicalEfficiency_Calculate 서비스를 업데이트하여 새 ADET(실제 단위 지연 시간) KPI 요소를 포함합니다. 예를 들면, 다음과 같습니다.
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. ADET(실제 단위 지연 시간) KPI 요소는 시간 요소이므로 ADETtimeElement 값으로 포함하도록 적절한 상태 정의를 업데이트합니다. 지정된 KPI 요소가 계산될 때 timeElement 값을 가진 상태가 고려됩니다. 이 예에서는 timeElement 값이 ADET,PBT가 되도록 Custom1 상태를 구성하여 ADET 및 PBT가 계산될 때 Custom1 상태가 고려되도록 합니다.
자세한 내용은 장비 상태 구성 항목을 참조하십시오.