Extraje datos de Historian a intervalos de 5 segundos durante un largo período de tiempo, y terminé con una tabla de datos de muchas filas. Inicialmente, en esta tabla de datos tenía dos columnas (llame a esta tabla "2205 - 2209 PD3102" y la mencioné como dtPDTag):
1. Sello de fecha/hora
2. Valor de datos (para la etiqueta Historian)
En una tabla de datos diferente (dt en la siguiente sintaxis JSL) tenía la hora de inicio y finalización de las producciones para las que tenía el identificador de PO y el símbolo de receta. (Así que cuatro columnas: 1. Fecha/hora de inicio, 2. Fecha/hora de finalización, 3. Número de orden de compra, 4. Símbolo de receta.)
En dtPDTag, agregué dos columnas, orden de compra y símbolo, en las que quería agregar el número de orden de compra y el símbolo de la receta (según la marca de fecha y hora).El código JSL que utilicé para realizar esta tarea se encuentra a continuación, pero supongo que esta es una forma bastante ineficiente de administrar esta tarea.(¡Mi computadora no parecía responder muy bien a la demanda que se le exigía!) Sería genial escuchar formas mejores/más efectivas de abordar tal tarea en el 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];
,
);
);
);