장비 상태 평가 사용자 정의
시스템에서는 장비 상태를 결정하기 위해 구성 및 설정 > 장비의 장비에 대한 상태 페이지에 정의된 상태 식을 평가합니다. 식은 상태 정의 테이블에서 식이 표시되는 순서대로 평가됩니다. true로 평가되는 첫 번째 식에 따라 장비 상태가 결정됩니다.
각 장비에 정의된 상태 식은 장비 상태를 평가하는 데 사용되는 유일한 정보 소스입니다. 각 장비 유형에 대한 사물 템플릿과 상태는 PTC.SCA.SCO.StatusThingShape를 구현합니다. 이 사물 형태는 PTC.Factory.StatusExpressionUtils 사물의 CalculateStatus 서비스에 의해 구현된 상태 평가 논리를 호출합니다. 각 장비 유형 사물 템플릿 및 장비 사물은 CalculateStatus 서비스를 상속합니다. 이 서비스는 구성 및 설정 > 장비의 장비에 대한 상태 페이지에 정의된 상태 식을 평가합니다. 자세한 내용은 상태 식 지정 항목을 참조하십시오.
사용자 정의 사물 템플릿 또는 개별 사물에 대한 CalculateStatus 서비스를 재정의하여 고유한 상태 평가 논리를 구현할 수 있습니다. CalculateStatus 서비스를 재정의할 경우 다음 사항에 유의하십시오.
CalculateStatus에 대한 사용자 정의 결과는 result 변수로 설정해야 하며 정수여야 합니다.
사용자 정의에 thingIditem 입력 매개 변수를 포함하지 않은 경우 다음 코드를 사용하여 매개 변수를 다시 구성할 수 있습니다.
var thingId = thingId;
var item = Things["PTC.Factory.StatusExpressionResourceProvider"].GetById({id:thingId});
한 사용자 정의 사물 템플릿에 대한 사용자 정의는 다른 사물 템플릿에 대한 사용자 정의와 독립적입니다.
개별 장비에 대한 사용자 정의는 서로 독립적입니다. 개별 장비(사물)에 대한 사용자 정의가 해당 장비 유형의 사물 템플릿에 대한 사용자 정의보다 우선합니다.
CalculateStatus 서비스를 무시하는 데 사용된 사용자 정의 코드가 명시적으로 속성 태그를 사용하는 경우, 필요하면 사용자 정의 코드가 데이터 품질 검사를 수행해야 합니다.
사용자 정의 코드에서 불량 데이터 감지
CalculateStatus 서비스를 재정의를 위해 사용된 사용자 정의 코드에 명시적으로 속성 태그를 사용하고 품질 데이터를 확인하려는 경우 코드에 대해 다음을 확인해야 합니다.
상태 식에 사용된 IS_DATA_OK 함수도 사용자 정의 코드의 불량 데이터를 감지하는 데 사용할 수 있습니다. 함수가 데이터 품질을 확인하는 GetPropertyQuality 서비스를 호출합니다. GenericThing 사물 템플릿으로부터 상속된 모든 사물 엔티티에 이 서비스를 사용할 수 있습니다. 이 서비스는 propertyName 문자열을 유일한 매개 변수로 사용하며, 다음 문자열 값 중 하나를 반환합니다.
UNKNOWN
GOOD
BAD
OUT_OF_RANGE
UNVERIFIED_SOURCE
GetPropertyQuality 서비스에서 사용하려면 propertyName이 다음의 두 조건을 충족해야 합니다.
속성은 서비스 실행에 사용되는 사물에 있거나 서비스 실행에 사용되는 사물에 원격으로 바인딩되는 원격 속성에 있어야 합니다.
속성 이름에는 점이 없어야 하며 이중 파선만 포함되어야 합니다(예: Channel1--DryingMachine--Status). 속성 이름에 점이 있으면 다음 예와 같이 사용자 정의 코드에서 이를 해결해야 합니다.
대부분의 경우 속성 태그는 두 부분인 소스 사물 부분과 속성 부분으로 구성되며, 콜론(:)으로 구분되어 있습니다.
속성 부분은 속성 태그 문자열에서 추출된 다음 GetPropertyQuality 서비스의 실행에 사용되어야 합니다. 두 부분 모두 CalculateStatus 서비스를 사용자 정의할 때 불량 데이터 감지를 구현해야 합니다.
구현 예
다음 코드는 특정 태그의 불량 데이터를 감지하기 위해 GetPropertyQuality 서비스를 사용하는 사용자 정의 JavaScript 코드의 예입니다.
* 
이 코드 예는 GetPropertyQuality 서비스에서 요구된 대로 점 사용에서 이중 파선을 사용하도록 속성 이름을 변환합니다.
// The property tag to be tested for bad quality data. This tag hypothetically
// points to some value on some server
var propertyTag = "PTC.SCA.SCO.Demo.KepServer:CheeseCake.Fryer.Status";
// Split the property tag into 2 portions:
// 1. The source thing portion
// 2. The property portion
var splitResult = propertyTag.split(":");
var sourceThingName = splitResult[0]; // The source thing portion
var propertyName = splitResult[1]; // The property portion
var sourceThing = Things[sourceThingName]; // Get the source thing that has the property
// Convert the property name to a Thingworx friendly name
var propertyName_friendly = propertyName.replace(/\./g, "--");
var statusEvaluationResult;
if (sourceThing !== null) {
params = {
propertyName: propertyName_friendlyc f /* STRING */
};
var quality = sourceThing.GetPropertyQuality(params); // Calling the service (API) to check the quality
// Here do some processing according to the result of the quality check
if (quality === "GOOD") {
// Set a certain status when the quality is GOOD
statusEvaluationResult = 2; // Status "2" = "Running"
} else if (quality === "BAD") {
// Set a certain status when the quality is BAD
statusEvaluationResult = 4; // Status "4" = "Unplanned Downtime"
} else {
// Set a certain status when the quality is anything other that GOOD or BAD (i.e. UNKNOWN, OUT_OF_RANGE, UNVERIFIED_SOURCE)
statusEvaluationResult = 5; // Status "5" = "Unavailable"
}
}
result = statusEvaluationResult;