途中で止めるときはスクリプトを先に止めること!
ps ax | grep perl
kill [スクリプトのプロセスID]
=============================================================================================
#!/usr/bin/perl
# ファイル名を100番からつける。
$i=101;
# 50点のPhiで測定する。
for($j=0;$j<50;$j++) {
# Thetaのピークサーチ。
# 11番のモーターを±200 pulseの範囲で10 pulseステップでピークサーチ。バックラッシュ2000 pulse。検出器は6番
# ファイル名はmr-tha100.dat, mr-tha101.dat......
$str="~/bin/peak_rel_search 11 400 10 2000 6 mr-tha$i.dat";
system($str);
# Thetaを70 pulseずらす。
$str="~/bin/put_motor rel 11 70 >> log.txt";
system($str);
# 本番のデータ取り。
# 現在値を中心に±50 pulseの範囲を10 pulseステップでスキャンする。測定時間は60秒。
# バックラッシュは2000 pulse。ファイル名はmr-th100.dat, mr-th101.dat....
# なお測定後自動的に測定前の位置に戻る。
$str="~/bin/1axis_rel_scan 11 100 10 2000 60 mr-th$i.dat";
system($str);
# Thetaを70 pulse戻す。
$str="~/bin/put_motor rel 11 -70 >> log.txt";
system($str);
# ファイルの番号を1つ増やす。
$i=$i+1;
# Phiを1度回転する。
$str="~/bin/put_motor rel 8 500 >> log.txt";
system($str);
}
=============================================================================================
3.ビームダンプ後自動復帰するプログラムの例
ビームダンプ後自動的に復帰するプログラムの書き方。
ビームラインが実験可能かどうかチェックするプログラム
~/bin/check_bl(プログラムソース)
a) 蓄積電流 > 1.0 mA
b) IDがロック解除されている
c) MBSがロック解除されている
a)-c)が満たされている場合:Beamline Readyと判断し、exit(0);を実行する(すなわち終了コード0)。
a)-c)の何れか満たされない場合:Beamline Not Readyと判断し、exit(1);を実行する(すなわち終了コード1)。
入射後自動的にMBS, DSSを開けるプログラム
~/bin/ready_bl(プログラムソース)
1. 蓄積電流が50 mA以上になるまで待つ。
2. IDのGap Lockが解除され、元のGap値に戻るまで待つ。
3. MBSのLockが解除されたら、開ける。
4. 15分待って、DSSを開ける。
check_blとready_blを使った17時間のプログラム例
デジタルディレイジェネレータ(DG535)を使って、2つの検出器の間のディレイを変えながら、各点で20分間積算する。
=============================================================================================
#!/usr/bin/perl
# ディレイのスキャン範囲は100~0 nsまで。
$delay=100.0;
for($i=0;$i<51;$i++) {
# 片方のDG535に$delayで与えられるディレイをつける。
system("./dg535 $delay 0.0 >> log.txt");
# カウンタのオーバーフローを防ぐため、1分ずつ20回に分けて20分間測定する。
# ファイルの中に横軸を入れるために引数として、$delayを渡す。
system("~/bin/count_1min 20 $delay delay.dat >> log.txt");
# ビームアボートしていないかチェックする。
# check_blの終了コードを得るために、system関数の戻り値を8ビットだけシフトする(重要)。
$ret=system("~/bin/check_bl") >> 8;
if($ret eq 1) {
# 終了コードが1だったら(アボートしていたら)、自動復帰して直前の測定をやり直す。
system("~/bin/ready_bl >> log.txt");
system("~/bin/count_1min 20 $delay delay.dat >> log.txt");
}
# 次のディレイへ。
$delay=$delay-2.0;
}
=============================================================================================