J'ai extrait les données de l'historique à 5 secondes d'intervalle sur une longue période, pour me retrouver avec une table de données de plusieurs lignes. Initialement, dans cette table de données, j'avais deux colonnes (appelez cette table "2205 - 2209 PD3102" et je l'ai référencée comme dtPDTag):
1. Horodatage
2. Valeur de données (pour la balise Historian)
Dans une table de données différente (dt dans la syntaxe JSL ci-dessous), j'avais l'heure de début et de fin des productions pour lesquelles j'avais l'identifiant du bon de commande et le symbole de la recette. (Donc quatre colonnes : 1. Date/heure de début, 2. Date/heure de fin, 3. Numéro de bon de commande, 4. Symbole de la recette.)
Dans dtPDTag, j'ai ajouté deux colonnes - PO et Symbole - dans lesquelles je voulais ajouter le numéro de bon de commande et le symbole de la recette (basé sur l'horodatage).Le code JSL que j'ai utilisé pour accomplir cette tâche est ci-dessous, mais je suppose que c'est une façon assez inefficace de gérer cette tâche.(Mon ordinateur ne semble pas répondre trop sainement à la demande qui lui est faite !) Ce serait formidable d'entendre des moyens meilleurs / plus efficaces d'aborder une telle tâche à l'avenir.
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];
,
);
);
);