Calcolo degli indicatori KPI mediante commesse anziché turni
Come personalizzazione, è possibile calcolare gli indicatori KPI utilizzando le commesse anziché i turni come periodo di tempo. In questo modo, gli indicatori KPI vengono calcolati sulla durata di una commessa, dall'inizio al completamento, quando il periodo di tempo può coprire un intervallo di più turni.
* 
È possibile calcolare gli indicatori KPI utilizzando i turni oppure le commesse per il periodo di tempo. Questa personalizzazione modifica il calcolo di tutti gli indicatori KPI in modo che vengano utilizzate le commesse.
Una volta impostata la personalizzazione, ogni volta che vengono calcolati gli indicatori KPI, il sistema recupera tutte le commesse in produzione. Le commesse in produzione sono quelle per cui sono vere entrambe le istruzioni seguenti:
L'ora corrente è successiva all'ora d'inizio effettiva della commessa.
L'ora di fine effettiva della commessa non è definita.
Per ogni commessa recuperata, vengono trovati tutti gli asset che fanno riferimento all'UID della commessa. I valori degli indicatori KPI correnti per tali asset vengono calcolati in base all'inizio effettivo della commessa e all'ora corrente.
Per personalizzare il calcolo degli indicatori KPI per l'utilizzo delle commesse, attenersi alla procedura descritta di seguito.
Personalizzazione del manager KPI
1. Creare un nuovo oggetto manager KPI che estenda PTC.SCA.SCO.KPIManagerThingTemplate.
a. Fare clic su Nuovo e selezionare Oggetto.
b. Immettere un Nome per l'oggetto.
c. Per Modello di oggetto di base, selezionare PTC.SCA.SCO.KPIManagerThingTemplate o un modello di oggetto che estenda PTC.SCA.SCO.KPIManagerThingTemplate.
d. Fare clic su Salva per salvare il nuovo modello di oggetto.
2. Modificare KPIManager definito per il sistema.
a. Passare all'oggetto di configurazione dei punti di avvio (PTC.Factory.C_LaunchPointConfigurationThing_[VersioneRelease]).
b. In Configurazione, nella tabella ManagerConfigurationSettings, fare clic su per modificare KPIManager. Modificare Value nell'oggetto manager KPI creato al passo 1 e fare clic su Imposta.
c. Fare clic su Salva per salvare gli aggiornamenti all'oggetto di configurazione dei punti di avvio.
3. Nel nuovo oggetto manager KPI creare un servizio per recuperare le commesse attualmente in produzione.
a. In Servizi fare clic su Aggiungi.
b. Nel campo Nome immettere GetRunningJobOrders.
c. Nel campo Output selezionare INFOTABLE dal menu a discesa. Nel campo Data shape cercare e selezionare PTC.SCA.SCO.JobOrder.
d. Immettere il codice seguente nell'editor servizi:

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. Fare clic su Salva e continua.
4. Nel nuovo oggetto manager KPI creare un servizio per recuperare tutti gli oggetti impianto, per i quali vengono calcolati gli indicatori KPI, correlati a questa commessa.
a. In Servizi fare clic su Aggiungi.
b. Nel campo Nome immettere GetKPIElementsFromJobOrder.
c. Nel campo Input fare clic su Aggiungi. Nel campo Nome immettere JobOrderUID.
d. Nel campo Output selezionare INFOTABLE dal menu a discesa.
e. Immettere il codice seguente nell'editor servizi:
//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. Fare clic su Salva e continua.
5. Nel nuovo oggetto manager KPI trovare e sostituire il servizio GetKPIElementsFromTimeInfo.
6. Sostituire il contenuto dell'editor servizi con il codice seguente:
var jobOrderUID = TimeInfo.getRow(0).UID+"";
var result = me.GetKPIElementsFromJobOrder({
JobOrderUID: jobOrderUID /* STRING */
});
7. Fare clic su Fine, quindi su Salva.
Personalizzazione dello scheduler di calcolo degli indicatori KPI
Per personalizzare lo scheduler di calcolo degli indicatori KPI, attenersi alla procedura descritta di seguito.
1. Passare a PTC.SCA.SCO.KPIScheduler.
2. In Servizi sostituire il servizio GetTimeInfos.
3. Sostituire il contenuto dell'editor servizi con il codice seguente:
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. Fare clic su Fine, quindi su Salva.
Associare le commesse all'impianto
Associare una commessa a un singolo componente di impianto impostando la proprietà JobOrderUID dell'oggetto impianto sull'UID della commessa. Quando vengono calcolati gli indicatori KPI per il componente di impianto, il riferimento della commessa viene archiviato come parte dei dati cronologici per l'indicatore KPI.
Per associare un componente di impianto, ad esempio un asset o una linea, a una commessa, attenersi alla procedura descritta di seguito.
1. In ThingWorx Composer passare all'oggetto per il componente di impianto. Per default, il nome dell'oggetto in ThingWorx Composer è il nome dell'impianto mostrato inThingWorx Apps, preceduto dal tipo di impianto. Ad esempio, per un asset denominato 1-2_GantryRobot, il nome dell'oggetto è Asset_1-2_GantryRobot.
2. In Proprietà e avvisi impostare il valore della proprietà JobOrderUID sull'UID della commessa appropriata.
* 
L'UID di una commessa viene restituito nell'output del servizio CreateJobOrders quando viene creata una commessa. In alternativa, è possibile utilizzare il servizio GetJobOrders per recuperare le commesse nel database, con i rispettivi UID. Entrambi i servizi sono disponibili nell'oggetto manager delle commesse di default (PTC.SCA.SCO.DefaultProductionOrderManager).
3. Fare clic su Salva per salvare gli aggiornamenti apportati all'oggetto.
Per ulteriori informazioni sulle commesse, vedere Schema per le commesse.
Avvio di una commessa
Avviare una commessa impostando la relativa proprietà ActualStartTime.
Per impostare l'ora d'inizio di una commessa, attenersi alla procedura descritta di seguito.
1. In ThingWorx Composer passare al manager commesse di default (PTC.SCA.SCO.DefaultProductionOrderManager).
2. In Servizi, eseguire il servizio UpdateJobOrders.
3. Nella tabella dei parametri di input JobOrders fare clic su Aggiungi e specificare l'UID della commessa da aggiornare. Immettere il nuovo valore per il campo ActualStartTime. Lasciare vuoti gli altri campi. Fare clic su Aggiungi per aggiungere le informazioni aggiornate alla tabella dei parametri di input.
È possibile aggiornare più commesse aggiungendole singolarmente alla tabella dei parametri di input JobOrders.
4. Fare clic su Esegui.
Chiusura della commessa e attivazione del calcolo finale degli indicatori KPI
Chiudere una commessa impostando la relativa proprietà ActualEndTime. Quando una commessa viene chiusa, è necessario attivare un calcolo finale degli indicatori KPI. Al termine dell'esecuzione del calcolo finale degli indicatore KPI, è possibile rimuovere l'associazione tra la commessa e il componente di impianto.
La procedura riportata di seguito crea un servizio che chiude la commessa impostando l'ora di fine, attiva il calcolo finale degli indicatori KPI ed elimina l'associazione tra la commessa e l'impianto.
1. Nel nuovo manager KPI, in Servizi, fare clic su Aggiungi.
2. Nel campo Nome immettere CompleteJobOrder.
3. Immettere il codice seguente nell'editor servizi:
// 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. Fare clic su Fine, quindi su Salva.