>$o.all.tmp
+acceltime=100000
+deceltime=30000
+
+. $train.manual
+for f in address length nondetfore nondetrear acceltime deceltime; do
+# [mm] [mm] [mm] [ms] [ms]
+ eval "v=\$$f"
+ if [ "x$v" = x ]; then echo >&2 "missing $train $f"; exit 1; fi
+done
+
for f in $train-*.speeds; do
this="'$f'"
if head -1 $f | grep '^[A-Za-z]' >/dev/null; then
set key top left
set xrange [0:127]
set output '$o.ps.tmp'
-#set ylabel "speed [m/s]"
-#set xlabel "nmra speed step 1..126"
+set ylabel "speed [m/s]"
+set xlabel "nmra speed step 1..126"
plot '$o.all.tmp' smooth sbezier notitle $each
END
END
perl <$o.table.tmp >$o.record.tmp -ne '
- BEGIN { $nxt= 1; }
+ BEGIN {
+ $nxt= 1;
+ $max= 0;
+ $speed[0]= 0;
+ }
next if m/^\#/; next unless m/\S/;
die unless m/^\s*(\d+)\s+([0-9.]+)\s/;
- $step= $1;
- $speed= int($2*1e6+0.5);
+ ($step,$speed) = ($1,$2);
die "$step $nxt" unless $step==$nxt;
- print "train '$train' step $step=$speed ?/?\n" or die $!;
+ $speed[$step]= $speed;
+ die "decrease $step $nxt $max" if $speed < $max;
+ $max= $speed;
$nxt++;
- END { warn "warning: '$train': expected 126 steps, found ".
- ($nxt-1)."\n"
- unless $nxt==127; }
+ END {
+ $steps= $nxt-1;
+ warn "warning: '$train': expected 126 steps, found $steps\n"
+ unless $steps==126;
+ print "train '$train' is '$address'".
+ " '$nondetfore'".
+ "+'$(( $length - $nondetfore - $nondetrear ))'".
+ "+'$nondetrear'\n"
+ or die $!;
+ sub calcwait ($$) {
+ my ($step,$wholetime) = @_;
+ return 0 if $step<0 || $step>=$steps;
+ return $wholetime * 1000.0 *
+ ($speed[$step+1] - $speed[$step]) / $max;
+ }
+ for ($step=0; $step<$nxt; $step++) {
+ printf "train %s step %d=%d %d/%d\n",
+ "'$train'", $step, $speed[$step]*1e6,
+ calcwait($step-1,'$acceltime'),
+ calcwait($step,'$deceltime')
+ or die $!;
+ }
+ }
'
rm $o.all.tmp