我在很长一段时间内以 5 秒的间隔提取 Historian 数据,最后得到一个包含许多行的数据表。 最初在此数据表中我有两列(将此表称为“2205 - 2209 PD3102”,我将其称为 dtPDTag):
1. 日期/时间戳
2.数据值(针对Historian标签)
在不同的数据表中(以下 JSL 语法中的 dt),我有生产的开始和结束时间,我有 PO 标识符和配方符号。 (所以四列:1。 开始日期/时间,2。 结束日期/时间,3。 采购订单编号,4。 配方符号。)
在 dtPDTag 中,我添加了两列 - PO 和 Symbol - 我想在其中添加 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];
,
);
);
);