Ich habe Historian-Daten über einen langen Zeitraum in 5-Sekunden-Intervallen extrahiert und am Ende eine Datentabelle mit vielen, vielen Zeilen erhalten. Ursprünglich hatte ich in dieser Datentabelle zwei Spalten (nennen Sie diese Tabelle "2205 - 2209 PD3102" und ich habe darauf als dtPDTag verwiesen):
1. Datums-/Zeitstempel
2. Datenwert (für das Historian-Tag)
In einer anderen Datentabelle (dt in der folgenden JSL-Syntax) hatte ich die Start- und Endzeit von Produktionen, für die ich die Bestellkennung und das Rezeptsymbol hatte. (Also vier Spalten: 1. Startdatum/-zeit, 2. Enddatum/Uhrzeit, 3. Bestellnummer, 4. Rezeptsymbol.)
In dtPDTag habe ich zwei Spalten hinzugefügt – PO und Symbol – in die ich die PO-Nummer und das Rezeptsymbol (basierend auf dem Datums-/Zeitstempel) einfügen wollte.Der JSL-Code, den ich zum Erfüllen dieser Aufgabe verwendet habe, ist unten, aber ich gehe davon aus, dass dies eine ziemlich ineffiziente Methode zum Verwalten dieser Aufgabe ist.(Mein Computer schien nicht allzu gesund auf die Anforderungen zu reagieren, die an ihn gestellt wurden!) Wäre großartig, von besseren / effektiveren Wegen zu hören, um eine solche Aufgabe in Zukunft anzugehen.
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];
,
);
);
);