Hallo,
Ich habe Zeittemperaturtabelle 1 und Betriebsstart- und Endzeittabelle 2. Ich möchte eine neue Spalte im Zeittempe- raturprotokoll hinzufügen und die Zelle als "Operation" kennzeichnen, wenn sie sich in der Operationszeit befindet. Weiß jemand, wie das geht?
Kevin,
Tabelle 2 ist verwirrend, die Endzeit liegt vor der Startzeit. Die einzige Zeit, die mit der Temperaturtabelle übereinstimmt, ist die Startzeit. Unten ist ein Skript, jedoch habe ich erwartet, dass die Endzeit später als die Startzeit liegt.
Sie können diese Startoperationen finden, indem Sie die beiden Tabellen mit der Uhrzeit und der Startzeit verknüpfen, siehe den zweiten JSL-Block.
Da nur die Startzeit übereinstimmte, fügte ich Code hinzu, um die verschiedenen Operationen zu kopieren, und eine Spalte für die Dauer erstellt, um die Temperaturstabilität visuell zu vergleichen.
Names Default to Here(1);
dt1 = Data Table("Table 1 Temperature log");
dt2 = Data Table("Table 2 operation Time");
dt1 << New Column ("Operation", character);
for(i=1, i<=nrows(dt2), i++,
tbeg = dt2:Start Time[i];
tend = dt2:End Time[i];
_idx = dt1 << get rows where( tend <= dt1:Time <= tbeg);
if(nrow(_idx)>0,
dt1:Operation[_idx] = "Operation " || char(i);
); //end if
); //end for
//since there is only one row that matches, copy down
//if End Time column was the end of the operation, this would not be needed
//--copy down and get duration
dt1 << New Column("Duration", Numeric, Continuous, Format("min:s") );
_idx = dt1 << get rows where (:Operation != "");
for(i=1, i<=nrow(_idx), i++,
init = dt1:Time[_idx[i]];
If(i < nrow(_idx),
tbeg = _idx[i];
tend = _idx[i + 1] - 1;
dt1:Operation[tbeg :: tend ] = dt1:Operation[_idx[i] ];
, //else
tbeg = _idx[i];
tend = nrow(dt1);
dt1:Operation[tbeg :: tend ] = dt1:Operation[_idx[i] ];
);
dt1[tbeg :: tend,"Duration"] = Transpose(dt1:Time[tbeg :: tend] - init);
);
//--graph
gb = dt1 << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables( X( :Duration ), Y( :RoomTemp ), Overlay( :Operation ) ),
Elements( Points( X, Y, Legend( 9 ) ), Line( X, Y, Legend( 11 ) ) )
);
Beitreten
Data Table( "Table 1 Temperature log" ) << Join(
With( Data Table( "Table 2 operation Time" ) ),
By Matching Columns( :Time = :Start Time ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 )
)