Personalizzazione della valutazione dello stato dell'impianto
Per determinare lo stato di un impianto, il sistema valuta le espressioni di stato definite nella pagina Stato per l'impianto in Configurazione e impostazione > Impianto. Le espressioni vengono valutate nell'ordine in cui sono visualizzate nella tabella Definisci stato. La prima espressione da valutare rispetto a true determina lo stato dell'impianto.
Le espressioni di stato definite su ciascun impianto sono l'unica fonte di informazioni utilizzata per valutare lo stato dell'impianto. Il modello di oggetto per ogni tipo di impianto con stato implementa PTC.SCA.SCO.StatusThingShape. Questa thing shape a sua volta richiama la logica di valutazione dello stato che è implementata dal servizio CalculateStatus sull'oggetto PTC.Factory.StatusExpressionUtils. Ogni modello di oggetto tipo di impianto e ogni oggetto impianto ereditano il servizio CalculateStatus. Questo servizio valuta le espressioni di stato definite nella pagina Stato dell'impianto in Configurazione e impostazione > Impianto. Per ulteriori informazioni, vedere Specifica delle espressioni di stato.
È possibile sostituire il servizio CalculateStatus su un modello di oggetto personalizzato o su un singolo oggetto per implementare la propria logica di valutazione dello stato. Se si sostituisce il servizio CalculateStatus, tenere presente quanto segue.
Il risultato di qualsiasi personalizzazione di CalculateStatus deve essere impostato sulla variabile result e deve essere un numero intero.
Se la personalizzazione non riguarda i parametri di input thingId e item, è possibile ricostruirli utilizzando il codice seguente:
var thingId = thingId;
var item = Things["PTC.Factory.StatusExpressionResourceProvider"].GetById({id:thingId});
Le personalizzazioni su un modello di oggetto personalizzato sono indipendenti dalle personalizzazioni su qualsiasi altro modello di oggetto.
Le personalizzazioni per singoli impianti sono indipendenti l'una dall'altra. Una personalizzazione su un singolo impianto (oggetto) ha priorità su qualsiasi personalizzazione sul modello di oggetto per quel tipo di impianto.
Se il codice personalizzato utilizzato per sostituire il servizio CalculateStatus utilizza esplicitamente tag di proprietà, il codice personalizzato deve controllare la qualità dei dati, se lo si ritiene opportuno.
Rilevamento di dati non qualitativamente validi nel codice personalizzato
Se il codice personalizzato utilizzato per sostituire il servizio CalculateStatus utilizza esplicitamente tag di proprietà e si desidera controllare la qualità dei dati, il codice deve eseguire questa operazione.
La funzione IS_DATA_OK utilizzata nelle espressioni di stato può essere utilizzata anche per rilevare dati qualitativamente non validi nel codice personalizzato. La funzione chiama il servizio GetPropertyQuality che controlla la qualità dei dati. Questo servizio è disponibile per ogni entità oggetto, ereditata dal modello di oggetto GenericThing. Il servizio accetta una stringa propertyName come unico parametro e restituisce uno dei valori stringa elencati di seguito.
UNKNOWN
GOOD
BAD
OUT_OF_RANGE
UNVERIFIED_SOURCE
Per essere utilizzato nel servizio GetPropertyQuality, il parametro propertyName deve soddisfare le due condizioni riportate di seguito.
La proprietà deve trovarsi nell'oggetto utilizzato per eseguire il servizio oppure essere una proprietà remota che è associata in remoto a tale oggetto.
Il nome della proprietà non deve contenere punti, ma solo doppi trattini, ad esempio Channel1--DryingMachine--Status. Se il nome della proprietà contiene punti, il codice personalizzato deve risolvere questo aspetto, come illustrato nell'esempio riportato di seguito.
Nella maggior parte dei casi, il tag di una proprietà è costituito da due parti, la parte dell'oggetto di origine e quella della proprietà, separate da due punti (:).
La parte della proprietà deve essere estratta dalla stringa del tag della proprietà ed essere quindi utilizzata nell'esecuzione del servizio GetPropertyQuality. Entrambe le parti sono necessarie per implementare il rilevamento di dati non qualitativamente validi durante la personalizzazione del servizio CalculateStatus.
Esempio di implementazione
Il seguente codice è un esempio di codice JavaScript personalizzato che utilizza il servizio GetPropertyQuality per rilevare dati non qualitativamente validi su un tag specifico.
* 
L'esempio di codice converte il nome della proprietà, contenente punti, in modo da utilizzare doppi trattini come richiesto dal servizio 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;