Ho estratto i dati Historian a intervalli di 5 secondi per un lungo periodo di tempo, finendo con una tabella di dati di molte molte righe. Inizialmente in questa tabella dati avevo due colonne (chiamate questa tabella "2205 - 2209 PD3102" e vi ho fatto riferimento come dtPDTag):
1. Data/ora
2. Valore dati (per il tag Historian)
In una tabella di dati diversa (dt nella sintassi JSL sottostante) avevo l'ora di inizio e di fine delle produzioni per le quali avevo l'identificatore PO e il simbolo della ricetta. (Quindi quattro colonne: 1. Data/ora di inizio, 2. Data/ora di fine, 3. numero dell'ordine di acquisto, 4. Simbolo della ricetta.)
In dtPDTag ho aggiunto due colonne - PO e Simbolo - in cui volevo aggiungere il numero dell'ordine d'acquisto e il simbolo della ricetta (in base alla data/ora).Il codice JSL che ho usato per svolgere questa attività è riportato di seguito, ma presumo che questo sia un modo piuttosto inefficiente per gestire questa attività.(Il mio computer non sembra rispondere in modo troppo salutare alla domanda posta su di esso!) Sarebbe bello sapere di modi migliori / più efficaci per affrontare un simile compito in futuro.
Names Default To Here(1);
dt = Current Data Table();
nr = N Rows(dt); // show(nr);
lstPO = dt:PO << Get Values;
lstSymbol = dt:Symbol << Get Values;
lstStartTime = dt:StartTime << Get Values;
lstEndTime = dt:EndTime << Get Values; // show(lstPO,lstSymbol,lstStartTime,lstEndTime);
dtPDTag = data Table( "2205 - 2209 PD3102" );
nrPD = N Rows(dtPDTag); // show(nrPD);
For(j=1,j<=nr,j++,
_start = lstStartTime[j]; _end = lstEndTime[j]; // show(_start,_end);
_PO =lstPO[j]; _symbol = lstSymbol[j];
For(i=1,i<=nrPD,i++,
If( ( dtPDTag:DateTime[i] > lstStartTime[j] ) & ( dtPDTag:DateTime[i] < lstEndTime[j] ),
dtPDTag:PO[i] = lstPO[j];
dtPDTag:Symbol[i] = lstSymbol[j];
,
);
);
);