長期間にわたって 5 秒間隔でヒストリアン データを抽出した結果、非常に多くの行からなるデータ テーブルができあがりました。 最初、このデータ テーブルには 2 つの列がありました (このテーブルを「2205 - 2209 PD3102」と呼び、dtPDTag として参照しました)。
1. 日時スタンプ
2. データ値 (Historian タグ用)
別のデータ テーブル (以下の JSL 構文の dt) には、PO 識別子とレシピ シンボルを持っている生産の開始時間と終了時間がありました。 (したがって、4 つの列: 1. 開始日時、2. 終了日時、3. PO 番号、4。 レシピ記号)
dtPDTag で、PO とシンボルの 2 つの列を追加しました。ここに、PO 番号とレシピ シンボル (日付/タイム スタンプに基づく) を追加したいと考えていました。このタスクを実行するために使用した JSL コードを以下に示しますが、これはこのタスクを管理するにはかなり非効率的な方法だと思います。(私のコンピュータは、それに課せられた要求に対してあまり健全に反応していないようでした!) 将来、そのようなタスクに取り組むためのより良い/より効果的な方法を聞いてうれしいです.
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];
,
);
);
);