]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
Added status/control scripts for power supplies
authorMichael Traxler <M.Traxler@gsi.de>
Fri, 14 Nov 2014 10:43:53 +0000 (11:43 +0100)
committerMichael Traxler <M.Traxler@gsi.de>
Fri, 14 Nov 2014 10:43:53 +0000 (11:43 +0100)
users/cern_cbmrich/hameg.pl [new file with mode: 0755]
users/cern_cbmrich/measure_powers.sh [new file with mode: 0755]
users/cern_cbmrich/tdk.pl [new file with mode: 0755]

diff --git a/users/cern_cbmrich/hameg.pl b/users/cern_cbmrich/hameg.pl
new file mode 100755 (executable)
index 0000000..b9d8c56
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use IO::Socket;
+use Time::HiRes qw(usleep);
+
+sub showUsage {
+  print "usage: tdk.pl [ON|OFF|ON#|OFF#|MEAS] HOST\n";
+  print " where ON/OFF applies to all channels and ON#/OFF# to the number (1-4) specified\n";
+  print "  example turn off 1 channel: ./hameg.pl OFF1 hameg01\n";
+
+  exit;
+}
+
+my $cmd  = $ARGV[0] or showUsage;
+my $peer = $ARGV[1] or showUsage;
+my $socket;
+
+$cmd = uc $cmd;
+
+
+sub measure {
+  my @values = ();
+  for(my $chan = 1; $chan <= 4; $chan++) {
+    usleep 1e5; print $socket "INST OUT$chan\n";
+    
+    usleep 1e5; print $socket "MEAS:VOLT?\n"; my $volt = <$socket>;
+    usleep 1e5; print $socket "MEAS:CURR?\n"; my $curr = <$socket>;
+    usleep 1e5; print $socket "OUTP:STAT?\n"; my $stat = <$socket>;
+
+    chomp $volt;
+    chomp $curr;
+    chomp $stat;
+
+    $stat = $stat eq "1" ? "ON" : "OFF";
+
+    print "$peer CH $chan: $curr A @ $volt V ($stat)\n";
+  }
+}
+
+sub switchPowerGen {
+  my $state = shift;
+  $state = (uc($state) eq 'ON' ? 'ON' : 'OFF');
+  usleep 1e5; print $socket "OUTP:GEN $state\n";
+}
+  
+sub switchPowerChan {
+  my $chan = shift;
+  my $state = shift;
+  $state = (uc($state) eq 'ON' ? 'ON' : 'OFF');
+  usleep 1e5; print $socket "INST OUT$chan\n";
+  usleep 1e5; print $socket "OUTP:STAT $state\n";
+}
+
+
+local $SIG{ALRM} = sub { die 'ERROR: Timed Out'; };
+alarm 3;
+
+$socket = IO::Socket::INET->new(PeerAddr => $peer, PeerPort => 50000, Proto => "tcp", Type => SOCK_STREAM) or die "ERROR: Cannot connect: $@";
+
+if ($cmd eq "ON" || $cmd eq "OFF") {
+  switchPowerGen $cmd;
+  measure;
+} elsif ($cmd =~ m/^(ON|OFF)([1-4])$/) {
+  switchPowerChan $2, $1;
+  measure;
+} elsif ($cmd =~ m/^MEAS/) {
+  measure;
+} else {
+  showUsage;
+}
+
+alarm 0;
diff --git a/users/cern_cbmrich/measure_powers.sh b/users/cern_cbmrich/measure_powers.sh
new file mode 100755 (executable)
index 0000000..b28246e
--- /dev/null
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+~/trbsoft/daqtools/users/cern_cbmrich/hameg.pl meas hameg01 &
+~/trbsoft/daqtools/users/cern_cbmrich/hameg.pl meas hameg02 &
+~/trbsoft/daqtools/users/cern_cbmrich/hameg.pl meas hameg03 &
+~/trbsoft/daqtools/users/cern_cbmrich/tdk.pl meas tdklambda &
+
+wait
\ No newline at end of file
diff --git a/users/cern_cbmrich/tdk.pl b/users/cern_cbmrich/tdk.pl
new file mode 100755 (executable)
index 0000000..10b567c
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use IO::Socket;
+use Time::HiRes qw(usleep);
+
+sub showUsage {
+  print "usage: tdk.pl [ON|OFF|MEAS] HOST\n";
+  exit;
+}
+
+my $cmd  = $ARGV[0] or showUsage;
+my $peer = $ARGV[1] or showUsage;
+my $socket;
+
+$cmd = uc $cmd;
+
+sub measure {
+  my @values = ();
+
+  usleep 1e5; print $socket "MEAS:VOLT?\n";
+  my $volt = <$socket>;
+  usleep 1e5; print $socket "MEAS:CURR?\n";
+  my $curr = <$socket>;
+  usleep 1e5; print $socket "OUTP:STAT?\n";
+  my $state = <$socket>;
+
+  chomp $volt;
+  chomp $curr;
+  chomp $state;
+
+  print "$peer CH 0: $curr A @ $volt V ($state)\n";
+}
+
+sub switchPower {
+  my $state = shift;
+  $state = (uc($state) eq 'ON' ? 'ON' : 'OFF');
+  usleep 1e5; print $socket "OUTP:STAT $state\n";
+}
+
+local $SIG{ALRM} = sub { die 'ERROR: Timed Out'; };
+alarm 2;
+
+$socket = IO::Socket::INET->new(PeerAddr => $peer, PeerPort => 8003, Proto => "tcp", Type => SOCK_STREAM) or die "ERROR: Cannot connect: $@";
+
+if ($cmd eq "OFF" || $cmd eq "ON") {
+  switchPower $cmd;
+  measure;
+} elsif ($cmd =~ m/^MEAS/) {
+  measure;
+} else {
+  showUsage;
+}
+
+
+alarm 0;